@whatwg-node/server 0.9.62-rc-20241212140811-17d867cd8c5fe89df0d3471ca2e58da244e38bc5 → 0.9.63-alpha-20241212150911-36df5929a304522e501744daf167032d4b7994c0

Sign up to get free protection for your applications and to get access to all the features.
@@ -186,7 +186,7 @@ function createServerAdapter(serverAdapterBaseObject, options) {
186
186
  const serverContext = filteredCtxParts.length > 0
187
187
  ? (0, utils_js_1.completeAssign)(defaultServerContext, ...ctx)
188
188
  : defaultServerContext;
189
- const signal = new utils_js_1.ServerAdapterRequestAbortSignal();
189
+ const ctrl = new fetchAPI.AbortController();
190
190
  const originalResEnd = res.end.bind(res);
191
191
  let resEnded = false;
192
192
  res.end = function (data) {
@@ -195,16 +195,16 @@ function createServerAdapter(serverAdapterBaseObject, options) {
195
195
  };
196
196
  const originalOnAborted = res.onAborted.bind(res);
197
197
  originalOnAborted(function () {
198
- signal.sendAbort();
198
+ ctrl.abort();
199
199
  });
200
200
  res.onAborted = function (cb) {
201
- signal.addEventListener('abort', cb);
201
+ ctrl.signal.addEventListener('abort', cb);
202
202
  };
203
203
  const request = (0, uwebsockets_js_1.getRequestFromUWSRequest)({
204
204
  req,
205
205
  res,
206
206
  fetchAPI,
207
- signal,
207
+ ctrl,
208
208
  });
209
209
  let response$;
210
210
  try {
@@ -217,8 +217,8 @@ function createServerAdapter(serverAdapterBaseObject, options) {
217
217
  return response$
218
218
  .catch((e) => (0, utils_js_1.handleErrorFromRequestHandler)(e, fetchAPI.Response))
219
219
  .then(response => {
220
- if (!signal.aborted && !resEnded) {
221
- return (0, uwebsockets_js_1.sendResponseToUwsOpts)(res, response, signal, fetchAPI);
220
+ if (!ctrl.signal.aborted && !resEnded) {
221
+ return (0, uwebsockets_js_1.sendResponseToUwsOpts)(res, response, ctrl, fetchAPI);
222
222
  }
223
223
  })
224
224
  .catch(err => {
@@ -226,8 +226,8 @@ function createServerAdapter(serverAdapterBaseObject, options) {
226
226
  });
227
227
  }
228
228
  try {
229
- if (!signal.aborted && !resEnded) {
230
- return (0, uwebsockets_js_1.sendResponseToUwsOpts)(res, response$, signal, fetchAPI);
229
+ if (!ctrl.signal.aborted && !resEnded) {
230
+ return (0, uwebsockets_js_1.sendResponseToUwsOpts)(res, response$, ctrl, fetchAPI);
231
231
  }
232
232
  }
233
233
  catch (err) {
package/cjs/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.decompressedResponseMap = exports.nodeRequestResponseMap = exports.ServerAdapterRequestAbortSignal = void 0;
3
+ exports.decompressedResponseMap = exports.nodeRequestResponseMap = void 0;
4
4
  exports.isAsyncIterable = isAsyncIterable;
5
5
  exports.normalizeNodeRequest = normalizeNodeRequest;
6
6
  exports.isReadable = isReadable;
@@ -69,40 +69,9 @@ function isRequestBody(body) {
69
69
  }
70
70
  return false;
71
71
  }
72
- class ServerAdapterRequestAbortSignal extends EventTarget {
73
- aborted = false;
74
- _onabort = null;
75
- reason;
76
- throwIfAborted() {
77
- if (this.aborted) {
78
- throw this.reason;
79
- }
80
- }
81
- sendAbort() {
82
- this.reason = new DOMException('This operation was aborted', 'AbortError');
83
- this.aborted = true;
84
- this.dispatchEvent(new Event('abort'));
85
- }
86
- get onabort() {
87
- return this._onabort;
88
- }
89
- set onabort(value) {
90
- this._onabort = value;
91
- if (value) {
92
- this.addEventListener('abort', value);
93
- }
94
- else {
95
- this.removeEventListener('abort', value);
96
- }
97
- }
98
- any(signals) {
99
- return AbortSignal.any([...signals]);
100
- }
101
- }
102
- exports.ServerAdapterRequestAbortSignal = ServerAdapterRequestAbortSignal;
103
72
  let bunNodeCompatModeWarned = false;
104
73
  exports.nodeRequestResponseMap = new WeakMap();
105
- function normalizeNodeRequest(nodeRequest, fetchAPI, registerSignal) {
74
+ function normalizeNodeRequest(nodeRequest, fetchAPI, registerAbortCtrl) {
106
75
  const rawRequest = nodeRequest.raw || nodeRequest.req || nodeRequest;
107
76
  let fullUrl = buildFullUrl(rawRequest);
108
77
  if (nodeRequest.query) {
@@ -125,23 +94,13 @@ function normalizeNodeRequest(nodeRequest, fetchAPI, registerSignal) {
125
94
  }
126
95
  }
127
96
  if (nodeResponse?.once) {
128
- let sendAbortSignal;
129
- // If ponyfilled
130
- if (fetchAPI.Request !== globalThis.Request) {
131
- const newSignal = new ServerAdapterRequestAbortSignal();
132
- registerSignal?.(newSignal);
133
- signal = newSignal;
134
- sendAbortSignal = () => signal.sendAbort();
135
- }
136
- else {
137
- const controller = new AbortController();
138
- signal = controller.signal;
139
- sendAbortSignal = () => controller.abort();
140
- }
97
+ const controller = new fetchAPI.AbortController();
98
+ signal = controller.signal;
99
+ registerAbortCtrl?.(controller);
141
100
  const closeEventListener = () => {
142
101
  if (signal && !signal.aborted) {
143
102
  rawRequest.aborted = true;
144
- sendAbortSignal();
103
+ controller.abort();
145
104
  }
146
105
  };
147
106
  nodeResponse.once('error', closeEventListener);
@@ -9,7 +9,7 @@ const utils_js_1 = require("./utils.js");
9
9
  function isUWSResponse(res) {
10
10
  return !!res.onData;
11
11
  }
12
- function getRequestFromUWSRequest({ req, res, fetchAPI, signal }) {
12
+ function getRequestFromUWSRequest({ req, res, fetchAPI, ctrl }) {
13
13
  const method = req.getMethod();
14
14
  let duplex;
15
15
  const chunks = [];
@@ -43,7 +43,7 @@ function getRequestFromUWSRequest({ req, res, fetchAPI, signal }) {
43
43
  let getReadableStream;
44
44
  if (method !== 'get' && method !== 'head') {
45
45
  duplex = 'half';
46
- signal.addEventListener('abort', () => {
46
+ ctrl.signal.addEventListener('abort', () => {
47
47
  stop();
48
48
  });
49
49
  let readableStream;
@@ -97,7 +97,7 @@ function getRequestFromUWSRequest({ req, res, fetchAPI, signal }) {
97
97
  get body() {
98
98
  return getBody();
99
99
  },
100
- signal,
100
+ signal: ctrl.signal,
101
101
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
102
102
  // @ts-ignore - not in the TS types yet
103
103
  duplex,
@@ -171,14 +171,14 @@ function createWritableFromUWS(uwsResponse, fetchAPI) {
171
171
  },
172
172
  });
173
173
  }
174
- function sendResponseToUwsOpts(uwsResponse, fetchResponse, signal, fetchAPI) {
174
+ function sendResponseToUwsOpts(uwsResponse, fetchResponse, ctrl, fetchAPI) {
175
175
  if (!fetchResponse) {
176
176
  uwsResponse.writeStatus('404 Not Found');
177
177
  uwsResponse.end();
178
178
  return;
179
179
  }
180
180
  const bufferOfRes = fetchResponse._buffer;
181
- if (signal.aborted) {
181
+ if (ctrl.signal.aborted) {
182
182
  return;
183
183
  }
184
184
  uwsResponse.cork(() => {
@@ -208,17 +208,17 @@ function sendResponseToUwsOpts(uwsResponse, fetchResponse, signal, fetchAPI) {
208
208
  if (bufferOfRes || !fetchResponse.body) {
209
209
  return;
210
210
  }
211
- signal.addEventListener('abort', () => {
211
+ ctrl.signal.addEventListener('abort', () => {
212
212
  if (!fetchResponse.body?.locked) {
213
- fetchResponse.body?.cancel(signal.reason);
213
+ fetchResponse.body?.cancel(ctrl.signal.reason);
214
214
  }
215
215
  });
216
216
  return fetchResponse.body
217
217
  .pipeTo(createWritableFromUWS(uwsResponse, fetchAPI), {
218
- signal,
218
+ signal: ctrl.signal,
219
219
  })
220
220
  .catch(err => {
221
- if (signal.aborted) {
221
+ if (ctrl.signal.aborted) {
222
222
  return;
223
223
  }
224
224
  throw err;
@@ -1,6 +1,6 @@
1
1
  import { AsyncDisposableStack, DisposableSymbols } from '@whatwg-node/disposablestack';
2
2
  import * as DefaultFetchAPI from '@whatwg-node/fetch';
3
- import { completeAssign, ensureDisposableStackRegisteredForTerminateEvents, handleAbortSignalAndPromiseResponse, handleErrorFromRequestHandler, isFetchEvent, isNodeRequest, isolateObject, isPromise, isRequestInit, isServerResponse, iterateAsyncVoid, nodeRequestResponseMap, normalizeNodeRequest, sendNodeResponse, ServerAdapterRequestAbortSignal, } from './utils.js';
3
+ import { completeAssign, ensureDisposableStackRegisteredForTerminateEvents, handleAbortSignalAndPromiseResponse, handleErrorFromRequestHandler, isFetchEvent, isNodeRequest, isolateObject, isPromise, isRequestInit, isServerResponse, iterateAsyncVoid, nodeRequestResponseMap, normalizeNodeRequest, sendNodeResponse, } from './utils.js';
4
4
  import { fakePromise, getRequestFromUWSRequest, isUWSResponse, sendResponseToUwsOpts, } from './uwebsockets.js';
5
5
  // Required for envs like nextjs edge runtime
6
6
  function isRequestAccessible(serverContext) {
@@ -182,7 +182,7 @@ function createServerAdapter(serverAdapterBaseObject, options) {
182
182
  const serverContext = filteredCtxParts.length > 0
183
183
  ? completeAssign(defaultServerContext, ...ctx)
184
184
  : defaultServerContext;
185
- const signal = new ServerAdapterRequestAbortSignal();
185
+ const ctrl = new fetchAPI.AbortController();
186
186
  const originalResEnd = res.end.bind(res);
187
187
  let resEnded = false;
188
188
  res.end = function (data) {
@@ -191,16 +191,16 @@ function createServerAdapter(serverAdapterBaseObject, options) {
191
191
  };
192
192
  const originalOnAborted = res.onAborted.bind(res);
193
193
  originalOnAborted(function () {
194
- signal.sendAbort();
194
+ ctrl.abort();
195
195
  });
196
196
  res.onAborted = function (cb) {
197
- signal.addEventListener('abort', cb);
197
+ ctrl.signal.addEventListener('abort', cb);
198
198
  };
199
199
  const request = getRequestFromUWSRequest({
200
200
  req,
201
201
  res,
202
202
  fetchAPI,
203
- signal,
203
+ ctrl,
204
204
  });
205
205
  let response$;
206
206
  try {
@@ -213,8 +213,8 @@ function createServerAdapter(serverAdapterBaseObject, options) {
213
213
  return response$
214
214
  .catch((e) => handleErrorFromRequestHandler(e, fetchAPI.Response))
215
215
  .then(response => {
216
- if (!signal.aborted && !resEnded) {
217
- return sendResponseToUwsOpts(res, response, signal, fetchAPI);
216
+ if (!ctrl.signal.aborted && !resEnded) {
217
+ return sendResponseToUwsOpts(res, response, ctrl, fetchAPI);
218
218
  }
219
219
  })
220
220
  .catch(err => {
@@ -222,8 +222,8 @@ function createServerAdapter(serverAdapterBaseObject, options) {
222
222
  });
223
223
  }
224
224
  try {
225
- if (!signal.aborted && !resEnded) {
226
- return sendResponseToUwsOpts(res, response$, signal, fetchAPI);
225
+ if (!ctrl.signal.aborted && !resEnded) {
226
+ return sendResponseToUwsOpts(res, response$, ctrl, fetchAPI);
227
227
  }
228
228
  }
229
229
  catch (err) {
package/esm/utils.js CHANGED
@@ -47,39 +47,9 @@ function isRequestBody(body) {
47
47
  }
48
48
  return false;
49
49
  }
50
- export class ServerAdapterRequestAbortSignal extends EventTarget {
51
- aborted = false;
52
- _onabort = null;
53
- reason;
54
- throwIfAborted() {
55
- if (this.aborted) {
56
- throw this.reason;
57
- }
58
- }
59
- sendAbort() {
60
- this.reason = new DOMException('This operation was aborted', 'AbortError');
61
- this.aborted = true;
62
- this.dispatchEvent(new Event('abort'));
63
- }
64
- get onabort() {
65
- return this._onabort;
66
- }
67
- set onabort(value) {
68
- this._onabort = value;
69
- if (value) {
70
- this.addEventListener('abort', value);
71
- }
72
- else {
73
- this.removeEventListener('abort', value);
74
- }
75
- }
76
- any(signals) {
77
- return AbortSignal.any([...signals]);
78
- }
79
- }
80
50
  let bunNodeCompatModeWarned = false;
81
51
  export const nodeRequestResponseMap = new WeakMap();
82
- export function normalizeNodeRequest(nodeRequest, fetchAPI, registerSignal) {
52
+ export function normalizeNodeRequest(nodeRequest, fetchAPI, registerAbortCtrl) {
83
53
  const rawRequest = nodeRequest.raw || nodeRequest.req || nodeRequest;
84
54
  let fullUrl = buildFullUrl(rawRequest);
85
55
  if (nodeRequest.query) {
@@ -102,23 +72,13 @@ export function normalizeNodeRequest(nodeRequest, fetchAPI, registerSignal) {
102
72
  }
103
73
  }
104
74
  if (nodeResponse?.once) {
105
- let sendAbortSignal;
106
- // If ponyfilled
107
- if (fetchAPI.Request !== globalThis.Request) {
108
- const newSignal = new ServerAdapterRequestAbortSignal();
109
- registerSignal?.(newSignal);
110
- signal = newSignal;
111
- sendAbortSignal = () => signal.sendAbort();
112
- }
113
- else {
114
- const controller = new AbortController();
115
- signal = controller.signal;
116
- sendAbortSignal = () => controller.abort();
117
- }
75
+ const controller = new fetchAPI.AbortController();
76
+ signal = controller.signal;
77
+ registerAbortCtrl?.(controller);
118
78
  const closeEventListener = () => {
119
79
  if (signal && !signal.aborted) {
120
80
  rawRequest.aborted = true;
121
- sendAbortSignal();
81
+ controller.abort();
122
82
  }
123
83
  };
124
84
  nodeResponse.once('error', closeEventListener);
@@ -2,7 +2,7 @@ import { isPromise } from './utils.js';
2
2
  export function isUWSResponse(res) {
3
3
  return !!res.onData;
4
4
  }
5
- export function getRequestFromUWSRequest({ req, res, fetchAPI, signal }) {
5
+ export function getRequestFromUWSRequest({ req, res, fetchAPI, ctrl }) {
6
6
  const method = req.getMethod();
7
7
  let duplex;
8
8
  const chunks = [];
@@ -36,7 +36,7 @@ export function getRequestFromUWSRequest({ req, res, fetchAPI, signal }) {
36
36
  let getReadableStream;
37
37
  if (method !== 'get' && method !== 'head') {
38
38
  duplex = 'half';
39
- signal.addEventListener('abort', () => {
39
+ ctrl.signal.addEventListener('abort', () => {
40
40
  stop();
41
41
  });
42
42
  let readableStream;
@@ -90,7 +90,7 @@ export function getRequestFromUWSRequest({ req, res, fetchAPI, signal }) {
90
90
  get body() {
91
91
  return getBody();
92
92
  },
93
- signal,
93
+ signal: ctrl.signal,
94
94
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
95
95
  // @ts-ignore - not in the TS types yet
96
96
  duplex,
@@ -164,14 +164,14 @@ export function createWritableFromUWS(uwsResponse, fetchAPI) {
164
164
  },
165
165
  });
166
166
  }
167
- export function sendResponseToUwsOpts(uwsResponse, fetchResponse, signal, fetchAPI) {
167
+ export function sendResponseToUwsOpts(uwsResponse, fetchResponse, ctrl, fetchAPI) {
168
168
  if (!fetchResponse) {
169
169
  uwsResponse.writeStatus('404 Not Found');
170
170
  uwsResponse.end();
171
171
  return;
172
172
  }
173
173
  const bufferOfRes = fetchResponse._buffer;
174
- if (signal.aborted) {
174
+ if (ctrl.signal.aborted) {
175
175
  return;
176
176
  }
177
177
  uwsResponse.cork(() => {
@@ -201,17 +201,17 @@ export function sendResponseToUwsOpts(uwsResponse, fetchResponse, signal, fetchA
201
201
  if (bufferOfRes || !fetchResponse.body) {
202
202
  return;
203
203
  }
204
- signal.addEventListener('abort', () => {
204
+ ctrl.signal.addEventListener('abort', () => {
205
205
  if (!fetchResponse.body?.locked) {
206
- fetchResponse.body?.cancel(signal.reason);
206
+ fetchResponse.body?.cancel(ctrl.signal.reason);
207
207
  }
208
208
  });
209
209
  return fetchResponse.body
210
210
  .pipeTo(createWritableFromUWS(uwsResponse, fetchAPI), {
211
- signal,
211
+ signal: ctrl.signal,
212
212
  })
213
213
  .catch(err => {
214
- if (signal.aborted) {
214
+ if (ctrl.signal.aborted) {
215
215
  return;
216
216
  }
217
217
  throw err;
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@whatwg-node/server",
3
- "version": "0.9.62-rc-20241212140811-17d867cd8c5fe89df0d3471ca2e58da244e38bc5",
3
+ "version": "0.9.63-alpha-20241212150911-36df5929a304522e501744daf167032d4b7994c0",
4
4
  "description": "Fetch API compliant HTTP Server adapter",
5
5
  "sideEffects": false,
6
6
  "dependencies": {
7
7
  "@whatwg-node/disposablestack": "^0.0.5",
8
- "@whatwg-node/fetch": "^0.10.0",
8
+ "@whatwg-node/fetch": "0.11.0-alpha-20241212150911-36df5929a304522e501744daf167032d4b7994c0",
9
9
  "tslib": "^2.6.3"
10
10
  },
11
11
  "repository": {
@@ -20,18 +20,8 @@ export interface NodeRequest {
20
20
  aborted?: boolean;
21
21
  }
22
22
  export type NodeResponse = ServerResponse | Http2ServerResponse;
23
- export declare class ServerAdapterRequestAbortSignal extends EventTarget implements AbortSignal {
24
- aborted: boolean;
25
- private _onabort;
26
- reason: any;
27
- throwIfAborted(): void;
28
- sendAbort(): void;
29
- get onabort(): ((this: AbortSignal, ev: Event) => any) | null;
30
- set onabort(value: ((this: AbortSignal, ev: Event) => any) | null);
31
- any(signals: Iterable<AbortSignal>): AbortSignal;
32
- }
33
23
  export declare const nodeRequestResponseMap: WeakMap<NodeRequest, NodeResponse>;
34
- export declare function normalizeNodeRequest(nodeRequest: NodeRequest, fetchAPI: FetchAPI, registerSignal?: (signal: ServerAdapterRequestAbortSignal) => void): Request;
24
+ export declare function normalizeNodeRequest(nodeRequest: NodeRequest, fetchAPI: FetchAPI, registerAbortCtrl?: (ctrl: AbortController) => void): Request;
35
25
  export declare function isReadable(stream: any): stream is Readable;
36
26
  export declare function isNodeRequest(request: any): request is NodeRequest;
37
27
  export declare function isServerResponse(stream: any): stream is NodeResponse;
@@ -20,18 +20,8 @@ export interface NodeRequest {
20
20
  aborted?: boolean;
21
21
  }
22
22
  export type NodeResponse = ServerResponse | Http2ServerResponse;
23
- export declare class ServerAdapterRequestAbortSignal extends EventTarget implements AbortSignal {
24
- aborted: boolean;
25
- private _onabort;
26
- reason: any;
27
- throwIfAborted(): void;
28
- sendAbort(): void;
29
- get onabort(): ((this: AbortSignal, ev: Event) => any) | null;
30
- set onabort(value: ((this: AbortSignal, ev: Event) => any) | null);
31
- any(signals: Iterable<AbortSignal>): AbortSignal;
32
- }
33
23
  export declare const nodeRequestResponseMap: WeakMap<NodeRequest, NodeResponse>;
34
- export declare function normalizeNodeRequest(nodeRequest: NodeRequest, fetchAPI: FetchAPI, registerSignal?: (signal: ServerAdapterRequestAbortSignal) => void): Request;
24
+ export declare function normalizeNodeRequest(nodeRequest: NodeRequest, fetchAPI: FetchAPI, registerAbortCtrl?: (ctrl: AbortController) => void): Request;
35
25
  export declare function isReadable(stream: any): stream is Readable;
36
26
  export declare function isNodeRequest(request: any): request is NodeRequest;
37
27
  export declare function isServerResponse(stream: any): stream is NodeResponse;
@@ -1,5 +1,4 @@
1
1
  import type { FetchAPI } from './types.cjs';
2
- import { ServerAdapterRequestAbortSignal } from './utils.cjs';
3
2
  export interface UWSRequest {
4
3
  getMethod(): string;
5
4
  forEach(callback: (key: string, value: string) => void): void;
@@ -24,10 +23,10 @@ interface GetRequestFromUWSOpts {
24
23
  req: UWSRequest;
25
24
  res: UWSResponse;
26
25
  fetchAPI: FetchAPI;
27
- signal: AbortSignal;
26
+ ctrl: AbortController;
28
27
  }
29
- export declare function getRequestFromUWSRequest({ req, res, fetchAPI, signal }: GetRequestFromUWSOpts): Request;
28
+ export declare function getRequestFromUWSRequest({ req, res, fetchAPI, ctrl }: GetRequestFromUWSOpts): Request;
30
29
  export declare function createWritableFromUWS(uwsResponse: UWSResponse, fetchAPI: FetchAPI): WritableStream<any>;
31
- export declare function sendResponseToUwsOpts(uwsResponse: UWSResponse, fetchResponse: Response, signal: ServerAdapterRequestAbortSignal, fetchAPI: FetchAPI): Promise<void> | undefined;
30
+ export declare function sendResponseToUwsOpts(uwsResponse: UWSResponse, fetchResponse: Response, ctrl: AbortController, fetchAPI: FetchAPI): Promise<void> | undefined;
32
31
  export declare function fakePromise<T>(value: T): Promise<T>;
33
32
  export {};
@@ -1,5 +1,4 @@
1
1
  import type { FetchAPI } from './types.js';
2
- import { ServerAdapterRequestAbortSignal } from './utils.js';
3
2
  export interface UWSRequest {
4
3
  getMethod(): string;
5
4
  forEach(callback: (key: string, value: string) => void): void;
@@ -24,10 +23,10 @@ interface GetRequestFromUWSOpts {
24
23
  req: UWSRequest;
25
24
  res: UWSResponse;
26
25
  fetchAPI: FetchAPI;
27
- signal: AbortSignal;
26
+ ctrl: AbortController;
28
27
  }
29
- export declare function getRequestFromUWSRequest({ req, res, fetchAPI, signal }: GetRequestFromUWSOpts): Request;
28
+ export declare function getRequestFromUWSRequest({ req, res, fetchAPI, ctrl }: GetRequestFromUWSOpts): Request;
30
29
  export declare function createWritableFromUWS(uwsResponse: UWSResponse, fetchAPI: FetchAPI): WritableStream<any>;
31
- export declare function sendResponseToUwsOpts(uwsResponse: UWSResponse, fetchResponse: Response, signal: ServerAdapterRequestAbortSignal, fetchAPI: FetchAPI): Promise<void> | undefined;
30
+ export declare function sendResponseToUwsOpts(uwsResponse: UWSResponse, fetchResponse: Response, ctrl: AbortController, fetchAPI: FetchAPI): Promise<void> | undefined;
32
31
  export declare function fakePromise<T>(value: T): Promise<T>;
33
32
  export {};