@tsed/platform-serverless 8.11.1 → 8.12.0-rc.1

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 (46) hide show
  1. package/lib/esm/builder/PlatformServerless.js +0 -1
  2. package/lib/esm/builder/PlatformServerlessHandler.js +0 -1
  3. package/lib/esm/domain/ServerlessContext.js +0 -1
  4. package/lib/esm/domain/ServerlessEvent.js +0 -1
  5. package/lib/esm/domain/ServerlessRequest.js +0 -1
  6. package/lib/esm/domain/ServerlessResponse.js +0 -1
  7. package/lib/esm/domain/ServerlessResponseStream.js +0 -1
  8. package/lib/esm/exports.js +0 -1
  9. package/lib/esm/index.js +0 -1
  10. package/lib/esm/utils/getRequestId.js +0 -1
  11. package/lib/esm/utils/isInAWS.js +0 -1
  12. package/lib/esm/utils/setResponseHeaders.js +0 -1
  13. package/package.json +16 -13
  14. package/lib/esm/builder/PlatformServerless.js.map +0 -1
  15. package/lib/esm/builder/PlatformServerlessHandler.js.map +0 -1
  16. package/lib/esm/domain/ServerlessContext.js.map +0 -1
  17. package/lib/esm/domain/ServerlessEvent.js.map +0 -1
  18. package/lib/esm/domain/ServerlessRequest.js.map +0 -1
  19. package/lib/esm/domain/ServerlessResponse.js.map +0 -1
  20. package/lib/esm/domain/ServerlessResponseStream.js.map +0 -1
  21. package/lib/esm/exports.js.map +0 -1
  22. package/lib/esm/index.js.map +0 -1
  23. package/lib/esm/utils/getRequestId.js.map +0 -1
  24. package/lib/esm/utils/isInAWS.js.map +0 -1
  25. package/lib/esm/utils/setResponseHeaders.js.map +0 -1
  26. package/src/builder/PlatformServerless.spec.ts +0 -219
  27. package/src/builder/PlatformServerless.ts +0 -202
  28. package/src/builder/PlatformServerlessHandler.spec.ts +0 -145
  29. package/src/builder/PlatformServerlessHandler.ts +0 -121
  30. package/src/domain/ServerlessContext.spec.ts +0 -106
  31. package/src/domain/ServerlessContext.ts +0 -60
  32. package/src/domain/ServerlessEvent.ts +0 -24
  33. package/src/domain/ServerlessRequest.spec.ts +0 -130
  34. package/src/domain/ServerlessRequest.ts +0 -106
  35. package/src/domain/ServerlessResponse.spec.ts +0 -139
  36. package/src/domain/ServerlessResponse.ts +0 -226
  37. package/src/domain/ServerlessResponseStream.spec.ts +0 -63
  38. package/src/domain/ServerlessResponseStream.ts +0 -113
  39. package/src/exports.ts +0 -1
  40. package/src/index.ts +0 -14
  41. package/src/utils/getRequestId.spec.ts +0 -43
  42. package/src/utils/getRequestId.ts +0 -16
  43. package/src/utils/isInAWS.ts +0 -8
  44. package/src/utils/setResponseHeaders.spec.ts +0 -156
  45. package/src/utils/setResponseHeaders.ts +0 -58
  46. package/vitest.config.mts +0 -21
@@ -1,156 +0,0 @@
1
- import {PlatformTest} from "@tsed/platform-http/testing";
2
- import {Get, JsonEntityStore, Redirect, Returns} from "@tsed/schema";
3
-
4
- import {createServerlessContext} from "../../test/utils/createServerlessContext.js";
5
- import {setResponseHeaders} from "./setResponseHeaders.js";
6
-
7
- describe("setResponseHeaders", () => {
8
- beforeEach(() => PlatformTest.create());
9
- afterEach(() => PlatformTest.reset());
10
-
11
- it("should set headers, status and contentType", async () => {
12
- class Test {
13
- @Get("/")
14
- @(Returns(200).Header("x-header", "test"))
15
- test() {}
16
- }
17
-
18
- const ctx = createServerlessContext({
19
- endpoint: JsonEntityStore.fromMethod(Test, "test")
20
- });
21
-
22
- vi.spyOn(ctx.response, "setHeaders");
23
- vi.spyOn(ctx.response, "status");
24
- // WHEN
25
- await setResponseHeaders(ctx);
26
-
27
- // THEN
28
- expect(ctx.response.setHeaders).toHaveBeenCalledWith({"x-header": "test"});
29
- expect(ctx.response.status).toHaveBeenCalledWith(200);
30
- });
31
- it("should not set headers automatically", async () => {
32
- class Test {
33
- @Get("/")
34
- @(Returns(200).Header("x-header"))
35
- test() {}
36
- }
37
-
38
- const ctx = createServerlessContext({
39
- endpoint: JsonEntityStore.fromMethod(Test, "test")
40
- });
41
-
42
- vi.spyOn(ctx.response, "setHeaders");
43
- vi.spyOn(ctx.response, "status");
44
- // WHEN
45
- await setResponseHeaders(ctx);
46
-
47
- // THEN
48
- expect(ctx.response.setHeaders).toHaveBeenCalledWith({});
49
- expect(ctx.response.status).toHaveBeenCalledWith(200);
50
- });
51
- it("should redirect with 301", async () => {
52
- class Test {
53
- @Get("/")
54
- @Redirect(301, "/path")
55
- test() {}
56
- }
57
-
58
- const ctx = createServerlessContext({
59
- endpoint: JsonEntityStore.fromMethod(Test, "test")
60
- });
61
-
62
- vi.spyOn(ctx.response, "redirect");
63
-
64
- // WHEN
65
- await setResponseHeaders(ctx as any);
66
-
67
- // THEN
68
- expect(ctx.response.redirect).toHaveBeenCalledWith(301, "/path");
69
- });
70
- it("should redirect with default", async () => {
71
- class Test {
72
- @Get("/")
73
- @Redirect(302, "/path")
74
- test() {}
75
- }
76
-
77
- const ctx = createServerlessContext({
78
- endpoint: JsonEntityStore.fromMethod(Test, "test")
79
- });
80
- vi.spyOn(ctx.response, "redirect");
81
-
82
- // WHEN
83
- await setResponseHeaders(ctx as any);
84
-
85
- // THEN
86
- expect(ctx.response.redirect).toHaveBeenCalledWith(302, "/path");
87
- });
88
- it("should redirect with assigned value", async () => {
89
- class Test {
90
- @Get("/")
91
- @Redirect(302, "/path")
92
- test() {}
93
- }
94
-
95
- const ctx = createServerlessContext({
96
- endpoint: JsonEntityStore.fromMethod(Test, "test")
97
- });
98
- vi.spyOn(ctx.response, "redirect");
99
-
100
- ctx.response.setHeaders({Location: "/path/other"});
101
-
102
- // WHEN
103
- await setResponseHeaders(ctx as any);
104
-
105
- // THEN
106
- expect(ctx.response.redirect).toHaveBeenCalledWith(302, "/path/other");
107
- });
108
- it("should do nothing when headers is already sent", async () => {
109
- class Test {
110
- @Get("/")
111
- @(Returns(200).Header("x-header", "test"))
112
- test() {}
113
- }
114
-
115
- const ctx = createServerlessContext({
116
- endpoint: JsonEntityStore.fromMethod(Test, "test")
117
- });
118
-
119
- await ctx.destroy();
120
-
121
- vi.spyOn(ctx.response, "setHeaders");
122
- vi.spyOn(ctx.response, "isDone");
123
-
124
- // WHEN
125
- await setResponseHeaders(ctx);
126
-
127
- // THEN
128
- return expect(ctx.response.isDone).toHaveBeenCalled();
129
- });
130
- it("should do nothing if the endpoint isn't an operation", async () => {
131
- class Test {
132
- test() {}
133
- }
134
-
135
- const endpoint = JsonEntityStore.fromMethod(Test, "test");
136
-
137
- const ctx = createServerlessContext({
138
- endpoint: {} as never
139
- });
140
-
141
- vi.spyOn(ctx.response, "setHeaders");
142
- vi.spyOn(ctx.response, "isDone");
143
- vi.spyOn(ctx.logger, "debug");
144
-
145
- // WHEN
146
- await setResponseHeaders(ctx);
147
-
148
- // THEN
149
- expect(ctx.response.isDone).toHaveBeenCalled();
150
- expect(ctx.logger.debug).toHaveBeenCalledWith({
151
- event: "MISSING_OPERATION_METADATA",
152
- message: "No operation found on the endpoint. The response headers are not set.",
153
- endpoint: {}
154
- });
155
- });
156
- });
@@ -1,58 +0,0 @@
1
- import {JsonHeader, JsonOperation} from "@tsed/schema";
2
-
3
- import {ServerlessContext} from "../domain/ServerlessContext.js";
4
- import type {ServerlessEvent} from "../domain/ServerlessEvent.js";
5
- import {HeaderValue} from "../domain/ServerlessResponse.js";
6
-
7
- function mergeHeaders(specHeaders: Record<string, JsonHeader & {example: string}>, headers: Record<string, HeaderValue>) {
8
- return Object.entries(specHeaders).reduce((headers, [key, item]) => {
9
- key = key.toLowerCase();
10
-
11
- const value = headers[key] === undefined ? item.example : headers[key];
12
-
13
- if (value !== undefined) {
14
- return {
15
- ...headers,
16
- [key]: String(value)
17
- };
18
- }
19
-
20
- return headers;
21
- }, headers);
22
- }
23
-
24
- /**
25
- * @ignore
26
- */
27
- export function setResponseHeaders(ctx: ServerlessContext<ServerlessEvent>) {
28
- const {response, endpoint} = ctx;
29
- if (ctx.isDone()) {
30
- return;
31
- }
32
-
33
- const operation = endpoint.operation as JsonOperation | undefined;
34
-
35
- if (!operation) {
36
- ctx.logger.debug({
37
- event: "MISSING_OPERATION_METADATA",
38
- message: "No operation found on the endpoint. The response headers are not set.",
39
- endpoint: endpoint
40
- });
41
- return;
42
- }
43
-
44
- if (!response.hasStatus()) {
45
- // apply status only if isn't already modified
46
- response.status(operation.getStatus());
47
- }
48
-
49
- const statusCode = response.statusCode;
50
- const headers = operation.getHeadersOf(response.statusCode);
51
- const mergedHeaders = mergeHeaders(headers, response.getHeaders());
52
-
53
- response.setHeaders(mergedHeaders);
54
-
55
- if (operation.isRedirection(statusCode)) {
56
- response.redirect(statusCode, String(mergedHeaders["location"]));
57
- }
58
- }
package/vitest.config.mts DELETED
@@ -1,21 +0,0 @@
1
- // @ts-ignore
2
- import {presets} from "@tsed/vitest/presets";
3
- import {defineConfig} from "vitest/config";
4
-
5
- export default defineConfig(
6
- {
7
- ...presets,
8
- test: {
9
- ...presets.test,
10
- coverage: {
11
- ...presets.test.coverage,
12
- thresholds: {
13
- statements: 0,
14
- branches: 0,
15
- functions: 0,
16
- lines: 0
17
- }
18
- }
19
- }
20
- }
21
- );