express-zod-api 7.4.1 → 7.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 +26 -0
- package/README.md +45 -19
- package/dist/config-type.d.ts +9 -1
- package/dist/config-type.js.map +1 -1
- package/dist/endpoint.js +23 -10
- package/dist/endpoint.js.map +1 -1
- package/dist/routing.d.ts +2 -2
- package/dist/routing.js +5 -5
- package/dist/routing.js.map +1 -1
- package/dist-esm/config-type.js.map +1 -1
- package/dist-esm/endpoint.js +23 -10
- package/dist-esm/endpoint.js.map +1 -1
- package/dist-esm/package.json +1 -1
- package/dist-esm/routing.js +5 -5
- package/dist-esm/routing.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
## Version 7
|
|
4
4
|
|
|
5
|
+
### v7.5.0
|
|
6
|
+
|
|
7
|
+
- Feature #503: configurable CORS headers.
|
|
8
|
+
- The configuration options `cors` now accepts a function that returns custom headers.
|
|
9
|
+
- The function may be asynchronous.
|
|
10
|
+
- Setting `cors: true` implies the default headers.
|
|
11
|
+
|
|
12
|
+
```typescript
|
|
13
|
+
import { createConfig } from "express-zod-api";
|
|
14
|
+
|
|
15
|
+
const config = createConfig({
|
|
16
|
+
// ...
|
|
17
|
+
cors: ({ defaultHeaders, request, endpoint, logger }) => ({
|
|
18
|
+
...defaultHeaders,
|
|
19
|
+
"Access-Control-Max-Age": "5000",
|
|
20
|
+
}),
|
|
21
|
+
});
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
```yaml
|
|
25
|
+
# the default headers are:
|
|
26
|
+
Access-Control-Allow-Origin: *
|
|
27
|
+
Access-Control-Allow-Methods: ..., OPTIONS # endpoint methods + OPTIONS
|
|
28
|
+
Access-Control-Allow-Headers: content-type
|
|
29
|
+
```
|
|
30
|
+
|
|
5
31
|
### v7.4.1
|
|
6
32
|
|
|
7
33
|
- There was an issue with logger when calling its methods without a message.
|
package/README.md
CHANGED
|
@@ -26,25 +26,26 @@ Start your API server with I/O schema validation and custom middlewares in minut
|
|
|
26
26
|
6. [Start your server](#start-your-server)
|
|
27
27
|
7. [Try it](#try-it)
|
|
28
28
|
4. [Fascinating features](#fascinating-features)
|
|
29
|
-
1. [
|
|
30
|
-
2. [
|
|
31
|
-
3. [
|
|
32
|
-
4. [
|
|
33
|
-
5. [
|
|
34
|
-
6. [
|
|
35
|
-
7. [
|
|
36
|
-
8. [
|
|
37
|
-
9. [
|
|
38
|
-
10. [
|
|
39
|
-
11. [
|
|
40
|
-
12. [
|
|
41
|
-
13. [
|
|
42
|
-
14. [
|
|
43
|
-
15. [
|
|
44
|
-
16. [
|
|
45
|
-
17. [Enabling
|
|
46
|
-
18. [
|
|
47
|
-
19. [
|
|
29
|
+
1. [Cross-Origin Resource Sharing](#cross-origin-resource-sharing) (CORS)
|
|
30
|
+
2. [Middlewares](#middlewares)
|
|
31
|
+
3. [Options](#options)
|
|
32
|
+
4. [Refinements](#refinements)
|
|
33
|
+
5. [Transformations](#transformations)
|
|
34
|
+
6. [Dealing with dates](#dealing-with-dates)
|
|
35
|
+
7. [Route path params](#route-path-params)
|
|
36
|
+
8. [Response customization](#response-customization)
|
|
37
|
+
9. [Non-object response](#non-object-response) including file downloads
|
|
38
|
+
10. [Using native express middlewares](#using-native-express-middlewares)
|
|
39
|
+
11. [File uploads](#file-uploads)
|
|
40
|
+
12. [Customizing logger](#customizing-logger)
|
|
41
|
+
13. [Connect to your own express app](#connect-to-your-own-express-app)
|
|
42
|
+
14. [Multiple schemas for one route](#multiple-schemas-for-one-route)
|
|
43
|
+
15. [Serving static files](#serving-static-files)
|
|
44
|
+
16. [Customizing input sources](#customizing-input-sources)
|
|
45
|
+
17. [Enabling compression](#enabling-compression)
|
|
46
|
+
18. [Enabling HTTPS](#enabling-https)
|
|
47
|
+
19. [Generating a Frontend Client](#generating-a-frontend-client)
|
|
48
|
+
20. [Creating a documentation](#creating-a-documentation)
|
|
48
49
|
5. [Additional hints](#additional-hints)
|
|
49
50
|
1. [How to test endpoints](#how-to-test-endpoints)
|
|
50
51
|
2. [Excessive properties in endpoint output](#excessive-properties-in-endpoint-output)
|
|
@@ -209,6 +210,31 @@ You should receive the following response:
|
|
|
209
210
|
|
|
210
211
|
# Fascinating features
|
|
211
212
|
|
|
213
|
+
## Cross-Origin Resource Sharing
|
|
214
|
+
|
|
215
|
+
You can enable your API for other domains using the corresponding configuration option `cors`.
|
|
216
|
+
It's _not optional_ to draw your attention to making the appropriate decision, however, it's enabled in the
|
|
217
|
+
[Quick start example](#set-up-config) above, assuming that in most cases you will want to enable this feature.
|
|
218
|
+
See [MDN article](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) for more information.
|
|
219
|
+
|
|
220
|
+
In addition to being a boolean, `cors` can also be assigned a function that provides custom headers. That function
|
|
221
|
+
has several parameters and can be asynchronous.
|
|
222
|
+
|
|
223
|
+
```typescript
|
|
224
|
+
import { createConfig } from "express-zod-api";
|
|
225
|
+
|
|
226
|
+
const config = createConfig({
|
|
227
|
+
// ... other options
|
|
228
|
+
cors: ({ defaultHeaders, request, endpoint, logger }) => ({
|
|
229
|
+
...defaultHeaders,
|
|
230
|
+
"Access-Control-Max-Age": "5000",
|
|
231
|
+
}),
|
|
232
|
+
});
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Please note: If you only want to send specific headers on requests to a specific endpoint, consider the
|
|
236
|
+
[Middlewares](#middlewares) or [response customization approach](#response-customization).
|
|
237
|
+
|
|
212
238
|
## Middlewares
|
|
213
239
|
|
|
214
240
|
Middleware can authenticate using input or `request` headers, and can provide endpoint handlers with `options`.
|
package/dist/config-type.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { Express, Request } from "express";
|
|
|
5
5
|
import fileUpload from "express-fileupload";
|
|
6
6
|
import { ServerOptions } from "https";
|
|
7
7
|
import { Logger } from "winston";
|
|
8
|
+
import { AbstractEndpoint } from "./endpoint";
|
|
8
9
|
import { Method } from "./method";
|
|
9
10
|
import { ResultHandlerDefinition } from "./result-handler";
|
|
10
11
|
export declare const loggerLevels: {
|
|
@@ -35,8 +36,15 @@ export interface AppConfig {
|
|
|
35
36
|
}
|
|
36
37
|
declare type InputSource = keyof Pick<Request, "query" | "body" | "files" | "params">;
|
|
37
38
|
export declare type InputSources = Record<Method, InputSource[]>;
|
|
39
|
+
declare type Headers = Record<string, string>;
|
|
40
|
+
declare type HeadersProvider = (params: {
|
|
41
|
+
defaultHeaders: Headers;
|
|
42
|
+
request: Request;
|
|
43
|
+
endpoint: AbstractEndpoint;
|
|
44
|
+
logger: Logger;
|
|
45
|
+
}) => Headers | Promise<Headers>;
|
|
38
46
|
export interface CommonConfig {
|
|
39
|
-
cors: boolean;
|
|
47
|
+
cors: boolean | HeadersProvider;
|
|
40
48
|
errorHandler?: ResultHandlerDefinition<any, any>;
|
|
41
49
|
logger: LoggerConfig | Logger;
|
|
42
50
|
startupLogo?: boolean;
|
package/dist/config-type.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-type.js","sourceRoot":"","sources":["../src/config-type.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"config-type.js","sourceRoot":"","sources":["../src/config-type.ts"],"names":[],"mappings":";;;AAUa,QAAA,YAAY,GAAG;IAC1B,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;CACZ,CAAC;AAyEK,MAAM,YAAY,GAAG,CAG1B,MAAS,EACN,EAAE,CAAC,MAAM,CAAC;AAJF,QAAA,YAAY,gBAIV"}
|
package/dist/endpoint.js
CHANGED
|
@@ -4,7 +4,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
4
4
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
5
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
6
|
};
|
|
7
|
-
var _Endpoint_instances,
|
|
7
|
+
var _Endpoint_instances, _Endpoint_getDefaultCorsHeaders, _Endpoint_parseOutput, _Endpoint_runMiddlewares, _Endpoint_parseAndRunHandler, _Endpoint_handleResult;
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.Endpoint = exports.AbstractEndpoint = void 0;
|
|
10
10
|
const zod_1 = require("zod");
|
|
@@ -65,10 +65,21 @@ class Endpoint extends AbstractEndpoint {
|
|
|
65
65
|
let output;
|
|
66
66
|
let error = null;
|
|
67
67
|
if (config.cors) {
|
|
68
|
-
__classPrivateFieldGet(this, _Endpoint_instances, "m",
|
|
68
|
+
let headers = __classPrivateFieldGet(this, _Endpoint_instances, "m", _Endpoint_getDefaultCorsHeaders).call(this);
|
|
69
|
+
if (typeof config.cors === "function") {
|
|
70
|
+
headers = await config.cors({
|
|
71
|
+
request,
|
|
72
|
+
logger,
|
|
73
|
+
endpoint: this,
|
|
74
|
+
defaultHeaders: headers,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
for (const key in headers) {
|
|
78
|
+
response.set(key, headers[key]);
|
|
79
|
+
}
|
|
69
80
|
}
|
|
70
81
|
if (request.method === "OPTIONS") {
|
|
71
|
-
response.end();
|
|
82
|
+
response.status(200).end();
|
|
72
83
|
return;
|
|
73
84
|
}
|
|
74
85
|
const initialInput = (0, common_helpers_1.getInitialInput)(request, config.inputSources);
|
|
@@ -100,14 +111,16 @@ class Endpoint extends AbstractEndpoint {
|
|
|
100
111
|
}
|
|
101
112
|
}
|
|
102
113
|
exports.Endpoint = Endpoint;
|
|
103
|
-
_Endpoint_instances = new WeakSet(),
|
|
114
|
+
_Endpoint_instances = new WeakSet(), _Endpoint_getDefaultCorsHeaders = function _Endpoint_getDefaultCorsHeaders() {
|
|
104
115
|
const accessMethods = this.methods
|
|
105
|
-
.
|
|
106
|
-
.
|
|
107
|
-
.
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
116
|
+
.concat("options")
|
|
117
|
+
.join(", ")
|
|
118
|
+
.toUpperCase();
|
|
119
|
+
return {
|
|
120
|
+
"Access-Control-Allow-Origin": "*",
|
|
121
|
+
"Access-Control-Allow-Methods": accessMethods,
|
|
122
|
+
"Access-Control-Allow-Headers": "content-type",
|
|
123
|
+
};
|
|
111
124
|
}, _Endpoint_parseOutput = async function _Endpoint_parseOutput(output) {
|
|
112
125
|
try {
|
|
113
126
|
return await this.outputSchema.parseAsync(output);
|
package/dist/endpoint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../src/endpoint.ts"],"names":[],"mappings":";;;;;;;;;AAEA,6BAAwB;AAGxB,qCAA8C;AAC9C,qDAAyE;AAGzE,qDAA8E;AAQ9E,MAAsB,gBAAgB;CAgBrC;AAhBD,4CAgBC;AAmBD,MAAa,QAOX,SAAQ,gBAAgB;IAUxB,YAAY,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,OAAO,EACP,aAAa,EACb,WAAW,EACX,SAAS,EACT,GAAG,IAAI,EACkC;QACzC,KAAK,EAAE,CAAC;;QAlBS,YAAO,GAAQ,EAAE,CAAC;QAClB,gBAAW,GAAuB,EAAE,CAAC;QAkBtD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,SAAS,IAAI,IAAI,EAAE;YACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;SAC7B;aAAM;YACL,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC9B;IACH,CAAC;IAEe,cAAc;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAEe,UAAU;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEe,cAAc;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAEe,eAAe;QAC7B,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEe,yBAAyB;QACvC,OAAO,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;IAC1E,CAAC;IAEe,yBAAyB;QACvC,OAAO,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC;IACzD,CAAC;IAEe,iBAAiB;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEe,oBAAoB;QAClC,OAAO,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC;IAC7E,CAAC;IAEe,oBAAoB;QAClC,OAAO,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC,SAAS,CAAC;IAC5D,CAAC;
|
|
1
|
+
{"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../src/endpoint.ts"],"names":[],"mappings":"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"}
|
package/dist/routing.d.ts
CHANGED
|
@@ -13,9 +13,9 @@ export interface RoutingCycleParams {
|
|
|
13
13
|
endpointCb: (endpoint: AbstractEndpoint, path: string, method: Method | AuxMethod) => void;
|
|
14
14
|
staticCb?: (path: string, handler: StaticHandler) => void;
|
|
15
15
|
parentPath?: string;
|
|
16
|
-
|
|
16
|
+
hasCors?: boolean;
|
|
17
17
|
}
|
|
18
|
-
export declare const routingCycle: ({ routing, endpointCb, staticCb, parentPath,
|
|
18
|
+
export declare const routingCycle: ({ routing, endpointCb, staticCb, parentPath, hasCors, }: RoutingCycleParams) => void;
|
|
19
19
|
export declare const initRouting: ({ app, logger, config, routing, }: {
|
|
20
20
|
app: Express;
|
|
21
21
|
logger: Logger;
|
package/dist/routing.js
CHANGED
|
@@ -7,7 +7,7 @@ const endpoint_1 = require("./endpoint");
|
|
|
7
7
|
const errors_1 = require("./errors");
|
|
8
8
|
const serve_static_1 = require("./serve-static");
|
|
9
9
|
const startup_logo_1 = require("./startup-logo");
|
|
10
|
-
const routingCycle = ({ routing, endpointCb, staticCb, parentPath,
|
|
10
|
+
const routingCycle = ({ routing, endpointCb, staticCb, parentPath, hasCors, }) => {
|
|
11
11
|
Object.entries(routing).forEach(([segment, element]) => {
|
|
12
12
|
segment = segment.trim();
|
|
13
13
|
if (segment.match(/\//)) {
|
|
@@ -19,7 +19,7 @@ const routingCycle = ({ routing, endpointCb, staticCb, parentPath, cors, }) => {
|
|
|
19
19
|
const path = `${parentPath || ""}${segment ? `/${segment}` : ""}`;
|
|
20
20
|
if (element instanceof endpoint_1.AbstractEndpoint) {
|
|
21
21
|
const methods = element.getMethods().slice();
|
|
22
|
-
if (
|
|
22
|
+
if (hasCors) {
|
|
23
23
|
methods.push("options");
|
|
24
24
|
}
|
|
25
25
|
methods.forEach((method) => {
|
|
@@ -35,7 +35,7 @@ const routingCycle = ({ routing, endpointCb, staticCb, parentPath, cors, }) => {
|
|
|
35
35
|
Object.entries(element.methods).forEach(([method, endpoint]) => {
|
|
36
36
|
endpointCb(endpoint, path, method);
|
|
37
37
|
});
|
|
38
|
-
if (
|
|
38
|
+
if (hasCors && Object.keys(element.methods).length > 0) {
|
|
39
39
|
const firstEndpoint = Object.values(element.methods)[0];
|
|
40
40
|
endpointCb(firstEndpoint, path, "options");
|
|
41
41
|
}
|
|
@@ -45,7 +45,7 @@ const routingCycle = ({ routing, endpointCb, staticCb, parentPath, cors, }) => {
|
|
|
45
45
|
routing: element,
|
|
46
46
|
endpointCb,
|
|
47
47
|
staticCb,
|
|
48
|
-
|
|
48
|
+
hasCors: hasCors,
|
|
49
49
|
parentPath: path,
|
|
50
50
|
});
|
|
51
51
|
}
|
|
@@ -58,7 +58,7 @@ const initRouting = ({ app, logger, config, routing, }) => {
|
|
|
58
58
|
}
|
|
59
59
|
(0, exports.routingCycle)({
|
|
60
60
|
routing,
|
|
61
|
-
|
|
61
|
+
hasCors: !!config.cors,
|
|
62
62
|
endpointCb: (endpoint, path, method) => {
|
|
63
63
|
app[method](path, async (request, response) => {
|
|
64
64
|
logger.info(`${request.method}: ${path}`);
|
package/dist/routing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../src/routing.ts"],"names":[],"mappings":";;;AAAA,qCAA0D;AAG1D,2DAAsD;AACtD,yCAA8C;AAC9C,qCAAwC;AAExC,iDAA4D;AAC5D,iDAAgD;AAkBzC,MAAM,YAAY,GAAG,CAAC,EAC3B,OAAO,EACP,UAAU,EACV,QAAQ,EACR,UAAU,EACV,
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../src/routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-type.js","sourceRoot":"","sources":["../src/config-type.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config-type.js","sourceRoot":"","sources":["../src/config-type.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;CACZ,CAAC;AAyEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAG1B,MAAS,EACN,EAAE,CAAC,MAAM,CAAC"}
|
package/dist-esm/endpoint.js
CHANGED
|
@@ -3,7 +3,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
3
3
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
4
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
5
|
};
|
|
6
|
-
var _Endpoint_instances,
|
|
6
|
+
var _Endpoint_instances, _Endpoint_getDefaultCorsHeaders, _Endpoint_parseOutput, _Endpoint_runMiddlewares, _Endpoint_parseAndRunHandler, _Endpoint_handleResult;
|
|
7
7
|
import { z } from "zod";
|
|
8
8
|
import { ResultHandlerError } from "./errors.js";
|
|
9
9
|
import { getInitialInput } from "./common-helpers.js";
|
|
@@ -61,10 +61,21 @@ export class Endpoint extends AbstractEndpoint {
|
|
|
61
61
|
let output;
|
|
62
62
|
let error = null;
|
|
63
63
|
if (config.cors) {
|
|
64
|
-
__classPrivateFieldGet(this, _Endpoint_instances, "m",
|
|
64
|
+
let headers = __classPrivateFieldGet(this, _Endpoint_instances, "m", _Endpoint_getDefaultCorsHeaders).call(this);
|
|
65
|
+
if (typeof config.cors === "function") {
|
|
66
|
+
headers = await config.cors({
|
|
67
|
+
request,
|
|
68
|
+
logger,
|
|
69
|
+
endpoint: this,
|
|
70
|
+
defaultHeaders: headers,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
for (const key in headers) {
|
|
74
|
+
response.set(key, headers[key]);
|
|
75
|
+
}
|
|
65
76
|
}
|
|
66
77
|
if (request.method === "OPTIONS") {
|
|
67
|
-
response.end();
|
|
78
|
+
response.status(200).end();
|
|
68
79
|
return;
|
|
69
80
|
}
|
|
70
81
|
const initialInput = getInitialInput(request, config.inputSources);
|
|
@@ -95,14 +106,16 @@ export class Endpoint extends AbstractEndpoint {
|
|
|
95
106
|
});
|
|
96
107
|
}
|
|
97
108
|
}
|
|
98
|
-
_Endpoint_instances = new WeakSet(),
|
|
109
|
+
_Endpoint_instances = new WeakSet(), _Endpoint_getDefaultCorsHeaders = function _Endpoint_getDefaultCorsHeaders() {
|
|
99
110
|
const accessMethods = this.methods
|
|
100
|
-
.
|
|
101
|
-
.
|
|
102
|
-
.
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
111
|
+
.concat("options")
|
|
112
|
+
.join(", ")
|
|
113
|
+
.toUpperCase();
|
|
114
|
+
return {
|
|
115
|
+
"Access-Control-Allow-Origin": "*",
|
|
116
|
+
"Access-Control-Allow-Methods": accessMethods,
|
|
117
|
+
"Access-Control-Allow-Headers": "content-type",
|
|
118
|
+
};
|
|
106
119
|
}, _Endpoint_parseOutput = async function _Endpoint_parseOutput(output) {
|
|
107
120
|
try {
|
|
108
121
|
return await this.outputSchema.parseAsync(output);
|
package/dist-esm/endpoint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../src/endpoint.ts"],"names":[],"mappings":";;;;;;AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAc,eAAe,EAAY,MAAM,kBAAkB,CAAC;AAGzE,OAAO,EAAE,iBAAiB,EAA2B,MAAM,kBAAkB,CAAC;AAQ9E,MAAM,OAAgB,gBAAgB;CAgBrC;AAmBD,MAAM,OAAO,QAOX,SAAQ,gBAAgB;IAUxB,YAAY,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,OAAO,EACP,aAAa,EACb,WAAW,EACX,SAAS,EACT,GAAG,IAAI,EACkC;QACzC,KAAK,EAAE,CAAC;;QAlBS,YAAO,GAAQ,EAAE,CAAC;QAClB,gBAAW,GAAuB,EAAE,CAAC;QAkBtD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,SAAS,IAAI,IAAI,EAAE;YACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;SAC7B;aAAM;YACL,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC9B;IACH,CAAC;IAEe,cAAc;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAEe,UAAU;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEe,cAAc;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAEe,eAAe;QAC7B,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEe,yBAAyB;QACvC,OAAO,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;IAC1E,CAAC;IAEe,yBAAyB;QACvC,OAAO,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC;IACzD,CAAC;IAEe,iBAAiB;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEe,oBAAoB;QAClC,OAAO,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC;IAC7E,CAAC;IAEe,oBAAoB;QAClC,OAAO,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC,SAAS,CAAC;IAC5D,CAAC;
|
|
1
|
+
{"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../src/endpoint.ts"],"names":[],"mappings":"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"}
|
package/dist-esm/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"type":"module","version":"7.
|
|
1
|
+
{"type":"module","version":"7.5.0"}
|
package/dist-esm/routing.js
CHANGED
|
@@ -4,7 +4,7 @@ import { AbstractEndpoint } from "./endpoint.js";
|
|
|
4
4
|
import { RoutingError } from "./errors.js";
|
|
5
5
|
import { ServeStatic } from "./serve-static.js";
|
|
6
6
|
import { getStartupLogo } from "./startup-logo.js";
|
|
7
|
-
export const routingCycle = ({ routing, endpointCb, staticCb, parentPath,
|
|
7
|
+
export const routingCycle = ({ routing, endpointCb, staticCb, parentPath, hasCors, }) => {
|
|
8
8
|
Object.entries(routing).forEach(([segment, element]) => {
|
|
9
9
|
segment = segment.trim();
|
|
10
10
|
if (segment.match(/\//)) {
|
|
@@ -16,7 +16,7 @@ export const routingCycle = ({ routing, endpointCb, staticCb, parentPath, cors,
|
|
|
16
16
|
const path = `${parentPath || ""}${segment ? `/${segment}` : ""}`;
|
|
17
17
|
if (element instanceof AbstractEndpoint) {
|
|
18
18
|
const methods = element.getMethods().slice();
|
|
19
|
-
if (
|
|
19
|
+
if (hasCors) {
|
|
20
20
|
methods.push("options");
|
|
21
21
|
}
|
|
22
22
|
methods.forEach((method) => {
|
|
@@ -32,7 +32,7 @@ export const routingCycle = ({ routing, endpointCb, staticCb, parentPath, cors,
|
|
|
32
32
|
Object.entries(element.methods).forEach(([method, endpoint]) => {
|
|
33
33
|
endpointCb(endpoint, path, method);
|
|
34
34
|
});
|
|
35
|
-
if (
|
|
35
|
+
if (hasCors && Object.keys(element.methods).length > 0) {
|
|
36
36
|
const firstEndpoint = Object.values(element.methods)[0];
|
|
37
37
|
endpointCb(firstEndpoint, path, "options");
|
|
38
38
|
}
|
|
@@ -42,7 +42,7 @@ export const routingCycle = ({ routing, endpointCb, staticCb, parentPath, cors,
|
|
|
42
42
|
routing: element,
|
|
43
43
|
endpointCb,
|
|
44
44
|
staticCb,
|
|
45
|
-
|
|
45
|
+
hasCors: hasCors,
|
|
46
46
|
parentPath: path,
|
|
47
47
|
});
|
|
48
48
|
}
|
|
@@ -54,7 +54,7 @@ export const initRouting = ({ app, logger, config, routing, }) => {
|
|
|
54
54
|
}
|
|
55
55
|
routingCycle({
|
|
56
56
|
routing,
|
|
57
|
-
|
|
57
|
+
hasCors: !!config.cors,
|
|
58
58
|
endpointCb: (endpoint, path, method) => {
|
|
59
59
|
app[method](path, async (request, response) => {
|
|
60
60
|
logger.info(`${request.method}: ${path}`);
|
package/dist-esm/routing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../src/routing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,IAAI,YAAY,EAAE,MAAM,SAAS,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,EAAE,WAAW,EAAiB,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAkBhD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAC3B,OAAO,EACP,UAAU,EACV,QAAQ,EACR,UAAU,EACV,
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../src/routing.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED