elysia 1.2.13 → 1.2.14

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.
@@ -58,6 +58,45 @@ const parseSetCookies = (headers, setCookie) => {
58
58
  }
59
59
  return headers;
60
60
  };
61
+ const responseToSetHeaders = (response, set2) => {
62
+ if (set2?.headers) {
63
+ if (response) {
64
+ if (hasHeaderShorthand)
65
+ Object.assign(set2.headers, response.headers.toJSON());
66
+ else
67
+ for (const [key, value] of response.headers.entries())
68
+ if (key in set2.headers) set2.headers[key] = value;
69
+ }
70
+ if (set2.status === 200) set2.status = response.status;
71
+ if (set2.headers["content-encoding"])
72
+ delete set2.headers["content-encoding"];
73
+ return set2;
74
+ }
75
+ if (!response)
76
+ return {
77
+ headers: {},
78
+ status: set2?.status ?? 200
79
+ };
80
+ if (hasHeaderShorthand) {
81
+ set2 = {
82
+ // @ts-expect-error
83
+ headers: response.headers.toJSON(),
84
+ status: set2?.status ?? 200
85
+ };
86
+ if (set2.headers["content-encoding"])
87
+ delete set2.headers["content-encoding"];
88
+ return set2;
89
+ }
90
+ set2 = {
91
+ headers: {},
92
+ status: set2?.status ?? 200
93
+ };
94
+ for (const [key, value] of response.headers.entries()) {
95
+ if (key === "content-encoding") continue;
96
+ if (key in set2.headers) set2.headers[key] = value;
97
+ }
98
+ return set2;
99
+ };
61
100
  const handleStream = async (generator, set2, request) => {
62
101
  let init = generator.next();
63
102
  if (init instanceof Promise) init = await init;
@@ -65,6 +104,20 @@ const handleStream = async (generator, set2, request) => {
65
104
  if (set2) return mapResponse(init.value, set2, request);
66
105
  return mapCompactResponse(init.value, request);
67
106
  }
107
+ if (set2?.headers) {
108
+ if (!set2.headers["transfer-encoding"])
109
+ set2.headers["transfer-encoding"] = "chunked";
110
+ if (!set2.headers["content-type"])
111
+ set2.headers["content-type"] = "text/event-stream; charset=utf-8";
112
+ } else {
113
+ set2 = {
114
+ status: 200,
115
+ headers: {
116
+ "content-type": "text/event-stream; charset=utf-8",
117
+ "transfer-encoding": "chunked"
118
+ }
119
+ };
120
+ }
68
121
  return new Response(
69
122
  new ReadableStream({
70
123
  async start(controller) {
@@ -125,15 +178,7 @@ const handleStream = async (generator, set2, request) => {
125
178
  }
126
179
  }
127
180
  }),
128
- {
129
- ...set2,
130
- headers: {
131
- // Manually set transfer-encoding for direct response, eg. app.handle, eden
132
- "transfer-encoding": "chunked",
133
- "content-type": "text/event-stream; charset=utf-8",
134
- ...set2?.headers
135
- }
136
- }
181
+ set2
137
182
  );
138
183
  };
139
184
  async function* streamResponse(response) {
@@ -231,10 +276,10 @@ const mapResponse = (response, set2, request) => {
231
276
  response,
232
277
  set2
233
278
  );
234
- if (response.headers.get("transfer-encoding") === "chunked")
279
+ if (!response.headers.has("content-length") && response.headers.get("transfer-encoding") === "chunked")
235
280
  return handleStream(
236
281
  streamResponse(response),
237
- set2,
282
+ responseToSetHeaders(response, set2),
238
283
  request
239
284
  );
240
285
  return response;
@@ -269,7 +314,7 @@ const mapResponse = (response, set2, request) => {
269
314
  ) === "chunked")
270
315
  return handleStream(
271
316
  streamResponse(response),
272
- set2,
317
+ responseToSetHeaders(response, set2),
273
318
  request
274
319
  );
275
320
  return response;
@@ -306,9 +351,15 @@ const mapResponse = (response, set2, request) => {
306
351
  return new Response(response, set2);
307
352
  }
308
353
  }
354
+ if (response instanceof Response && !response.headers.has("content-length") && response.headers.get("transfer-encoding") === "chunked")
355
+ return handleStream(
356
+ streamResponse(response),
357
+ responseToSetHeaders(response, set2),
358
+ request
359
+ );
309
360
  if (
310
361
  // @ts-expect-error
311
- typeof response?.next === "function" || response instanceof ReadableStream || response instanceof Response && response.headers.get("transfer-encoding") === "chunked"
362
+ typeof response?.next === "function" || response instanceof ReadableStream
312
363
  )
313
364
  return handleStream(response, set2, request);
314
365
  return mapCompactResponse(response, request);
@@ -360,10 +411,10 @@ const mapEarlyResponse = (response, set2, request) => {
360
411
  response,
361
412
  set2
362
413
  );
363
- if (response.headers.get("transfer-encoding") === "chunked")
414
+ if (!response.headers.has("content-length") && response.headers.get("transfer-encoding") === "chunked")
364
415
  return handleStream(
365
416
  streamResponse(response),
366
- set2,
417
+ responseToSetHeaders(response, set2),
367
418
  request
368
419
  );
369
420
  return response;
@@ -398,7 +449,7 @@ const mapEarlyResponse = (response, set2, request) => {
398
449
  ) === "chunked")
399
450
  return handleStream(
400
451
  streamResponse(response),
401
- set2,
452
+ responseToSetHeaders(response, set2),
402
453
  request
403
454
  );
404
455
  return response;
@@ -478,9 +529,11 @@ const mapEarlyResponse = (response, set2, request) => {
478
529
  }
479
530
  });
480
531
  case "Response":
481
- if (response.headers.get("transfer-encoding") === "chunked")
532
+ if (!response.headers.has("content-length") && response.headers.get("transfer-encoding") === "chunked")
482
533
  return handleStream(
483
- streamResponse(response)
534
+ streamResponse(response),
535
+ responseToSetHeaders(response),
536
+ request
484
537
  );
485
538
  return response;
486
539
  case "Promise":
@@ -581,7 +634,11 @@ const mapCompactResponse = (response, request) => {
581
634
  });
582
635
  case "Response":
583
636
  if (response.headers.get("transfer-encoding") === "chunked")
584
- return handleStream(streamResponse(response));
637
+ return handleStream(
638
+ streamResponse(response),
639
+ responseToSetHeaders(response),
640
+ request
641
+ );
585
642
  return response;
586
643
  case "Error":
587
644
  return errorToResponse(response);
@@ -5,6 +5,7 @@ import { type Sucrose } from './sucrose';
5
5
  import type { WSLocalHook } from './ws/types';
6
6
  import type { ElysiaAdapter } from './adapter/types';
7
7
  import type { ListenCallback, Serve, Server } from './universal/server';
8
+ import { PromiseGroup } from './utils';
8
9
  import { type DynamicHandler } from './dynamic-handle';
9
10
  import { ValidationError, type ParseError, type NotFoundError, type InternalServerError, ElysiaCustomStatusResponse } from './error';
10
11
  import type { TraceHandler } from './trace';
@@ -104,6 +105,7 @@ export default class Elysia<const in out BasePath extends string = '', const in
104
105
  protected getGlobalRoutes(): InternalRoute[];
105
106
  protected inference: Sucrose.Inference;
106
107
  private getServer;
108
+ private getParent;
107
109
  '~parser': Record<string, BodyHandler<any, any>>;
108
110
  private _promisedModules;
109
111
  private get promisedModules();
@@ -998,6 +1000,7 @@ export default class Elysia<const in out BasePath extends string = '', const in
998
1000
  error: Prettify<Definitions['error'] & LazyLoadElysia['_types']['Definitions']['error']>;
999
1001
  typebox: MergeTypeModule<Definitions['typebox'], LazyLoadElysia['_types']['Definitions']['typebox']>;
1000
1002
  }, Prettify2<Metadata & LazyLoadElysia['_types']['Metadata']>, BasePath extends `` ? Routes & LazyLoadElysia['_routes'] : Routes & CreateEden<BasePath, LazyLoadElysia['_routes']>, Ephemeral, Prettify2<Volatile & LazyLoadElysia['_ephemeral']>>;
1003
+ private propagatePromiseModules;
1001
1004
  private _use;
1002
1005
  macro<const NewMacro extends BaseMacroFn>(macro: (route: MacroManager<MergeSchema<Metadata['schema'], MergeSchema<Ephemeral['schema'], Volatile['schema']>>, Singleton & {
1003
1006
  derive: Partial<Ephemeral['derive'] & Volatile['derive']>;
@@ -1743,7 +1746,7 @@ export default class Elysia<const in out BasePath extends string = '', const in
1743
1746
  /**
1744
1747
  * Wait until all lazy loaded modules all load is fully
1745
1748
  */
1746
- get modules(): Promise<any[]>;
1749
+ get modules(): PromiseGroup;
1747
1750
  }
1748
1751
  export { Elysia };
1749
1752
  export { t } from './type-system';