@duplojs/http 0.1.0 → 0.4.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/dist/client/getBody.cjs +22 -0
- package/dist/client/getBody.d.ts +1 -0
- package/dist/client/getBody.mjs +20 -0
- package/dist/client/hooks.cjs +79 -0
- package/dist/client/hooks.d.ts +33 -0
- package/dist/client/hooks.mjs +70 -0
- package/dist/client/httpClient.cjs +153 -0
- package/dist/client/httpClient.d.ts +60 -0
- package/dist/client/httpClient.mjs +130 -0
- package/dist/client/index.cjs +33 -0
- package/dist/client/index.d.ts +9 -0
- package/dist/client/index.mjs +9 -0
- package/dist/client/insertParamsInPath.cjs +12 -0
- package/dist/client/insertParamsInPath.d.ts +2 -0
- package/dist/client/insertParamsInPath.mjs +10 -0
- package/dist/client/kind.cjs +9 -0
- package/dist/client/kind.d.ts +6 -0
- package/dist/client/kind.mjs +7 -0
- package/dist/client/promiseRequest.cjs +355 -0
- package/dist/client/promiseRequest.d.ts +98 -0
- package/dist/client/promiseRequest.mjs +332 -0
- package/dist/client/queryToString.cjs +25 -0
- package/dist/client/queryToString.d.ts +2 -0
- package/dist/client/queryToString.mjs +23 -0
- package/dist/client/types/ObjectCanBeEmpty.cjs +2 -0
- package/dist/client/types/ObjectCanBeEmpty.d.ts +4 -0
- package/dist/client/types/ObjectCanBeEmpty.mjs +1 -0
- package/dist/client/types/clientRequestParams.cjs +2 -0
- package/dist/client/types/clientRequestParams.d.ts +51 -0
- package/dist/client/types/clientRequestParams.mjs +1 -0
- package/dist/client/types/clientResponse.cjs +2 -0
- package/dist/client/types/clientResponse.d.ts +34 -0
- package/dist/client/types/clientResponse.mjs +1 -0
- package/dist/client/types/index.cjs +7 -0
- package/dist/client/types/index.d.ts +4 -0
- package/dist/client/types/index.mjs +4 -0
- package/dist/client/types/serverRoute.cjs +2 -0
- package/dist/client/types/serverRoute.d.ts +22 -0
- package/dist/client/types/serverRoute.mjs +1 -0
- package/dist/client/unexpectedResponseError.cjs +44 -0
- package/dist/client/unexpectedResponseError.d.ts +38 -0
- package/dist/client/unexpectedResponseError.mjs +39 -0
- package/dist/core/builders/index.cjs +11 -0
- package/dist/core/builders/index.mjs +4 -0
- package/dist/core/builders/preflight/index.cjs +10 -0
- package/dist/core/builders/preflight/index.mjs +3 -0
- package/dist/core/builders/preflight/process.cjs +2 -8
- package/dist/core/builders/preflight/process.mjs +2 -8
- package/dist/core/builders/preflight/route.cjs +2 -8
- package/dist/core/builders/preflight/route.mjs +2 -8
- package/dist/core/builders/process/checker.cjs +2 -8
- package/dist/core/builders/process/checker.mjs +2 -8
- package/dist/core/builders/process/cut.cjs +2 -8
- package/dist/core/builders/process/cut.mjs +2 -8
- package/dist/core/builders/process/extract.cjs +2 -8
- package/dist/core/builders/process/extract.mjs +2 -8
- package/dist/core/builders/process/index.cjs +14 -0
- package/dist/core/builders/process/index.mjs +7 -0
- package/dist/core/builders/process/presetChecker.cjs +2 -8
- package/dist/core/builders/process/presetChecker.mjs +2 -8
- package/dist/core/builders/process/process.cjs +2 -8
- package/dist/core/builders/process/process.mjs +2 -8
- package/dist/core/builders/route/checker.cjs +2 -8
- package/dist/core/builders/route/checker.mjs +2 -8
- package/dist/core/builders/route/cut.cjs +2 -8
- package/dist/core/builders/route/cut.mjs +2 -8
- package/dist/core/builders/route/extract.cjs +2 -8
- package/dist/core/builders/route/extract.mjs +2 -8
- package/dist/core/builders/route/handler.cjs +2 -8
- package/dist/core/builders/route/handler.mjs +2 -8
- package/dist/core/builders/route/index.cjs +16 -0
- package/dist/core/builders/route/index.mjs +8 -0
- package/dist/core/builders/route/presetChecker.cjs +2 -8
- package/dist/core/builders/route/presetChecker.mjs +2 -8
- package/dist/core/builders/route/process.cjs +2 -8
- package/dist/core/builders/route/process.mjs +2 -8
- package/dist/core/floor.cjs +2 -0
- package/dist/core/floor.mjs +1 -0
- package/dist/core/functionsBuilders/index.cjs +5 -0
- package/dist/core/functionsBuilders/index.mjs +2 -0
- package/dist/core/functionsBuilders/route/build.cjs +5 -14
- package/dist/core/functionsBuilders/route/build.d.ts +3 -1
- package/dist/core/functionsBuilders/route/build.mjs +6 -15
- package/dist/core/functionsBuilders/route/create.d.ts +2 -0
- package/dist/core/functionsBuilders/route/default.cjs +11 -21
- package/dist/core/functionsBuilders/route/default.mjs +5 -15
- package/dist/core/functionsBuilders/route/hook.cjs +22 -22
- package/dist/core/functionsBuilders/route/hook.d.ts +2 -2
- package/dist/core/functionsBuilders/route/hook.mjs +2 -2
- package/dist/core/functionsBuilders/route/index.cjs +18 -0
- package/dist/core/functionsBuilders/route/index.mjs +4 -0
- package/dist/core/functionsBuilders/steps/build.cjs +4 -0
- package/dist/core/functionsBuilders/steps/build.d.ts +2 -0
- package/dist/core/functionsBuilders/steps/build.mjs +5 -1
- package/dist/core/functionsBuilders/steps/create.d.ts +3 -2
- package/dist/core/functionsBuilders/steps/defaults/checkerStep.cjs +5 -9
- package/dist/core/functionsBuilders/steps/defaults/checkerStep.mjs +5 -9
- package/dist/core/functionsBuilders/steps/defaults/cutStep.cjs +6 -11
- package/dist/core/functionsBuilders/steps/defaults/cutStep.mjs +7 -12
- package/dist/core/functionsBuilders/steps/defaults/extractStep.cjs +10 -17
- package/dist/core/functionsBuilders/steps/defaults/extractStep.mjs +9 -16
- package/dist/core/functionsBuilders/steps/defaults/handlerStep.cjs +6 -11
- package/dist/core/functionsBuilders/steps/defaults/handlerStep.mjs +6 -11
- package/dist/core/functionsBuilders/steps/defaults/index.cjs +16 -0
- package/dist/core/functionsBuilders/steps/defaults/index.mjs +5 -0
- package/dist/core/functionsBuilders/steps/defaults/processStep.cjs +7 -12
- package/dist/core/functionsBuilders/steps/defaults/processStep.mjs +6 -11
- package/dist/core/functionsBuilders/steps/index.cjs +10 -0
- package/dist/core/functionsBuilders/steps/index.mjs +3 -0
- package/dist/core/hub/defaultNotfoundHandler.cjs +2 -8
- package/dist/core/hub/defaultNotfoundHandler.d.ts +1 -1
- package/dist/core/hub/defaultNotfoundHandler.mjs +2 -8
- package/dist/core/hub/hooks.d.ts +3 -3
- package/dist/core/hub/index.cjs +3 -9
- package/dist/core/hub/index.mjs +3 -9
- package/dist/core/index.cjs +64 -70
- package/dist/core/index.mjs +23 -30
- package/dist/core/process/index.cjs +1 -0
- package/dist/core/process/index.mjs +1 -0
- package/dist/core/process/types/index.cjs +2 -0
- package/dist/core/process/types/index.mjs +1 -0
- package/dist/core/response/base.cjs +40 -0
- package/dist/core/response/base.d.ts +21 -0
- package/dist/core/response/base.mjs +38 -0
- package/dist/core/response/contract.cjs +13 -13
- package/dist/core/response/contract.d.ts +121 -119
- package/dist/core/response/contract.mjs +14 -14
- package/dist/core/{route/hooks/response.cjs → response/hook.cjs} +5 -4
- package/dist/core/{route/hooks/response.d.ts → response/hook.d.ts} +3 -3
- package/dist/core/{route/hooks/response.mjs → response/hook.mjs} +4 -3
- package/dist/core/response/index.cjs +9 -38
- package/dist/core/response/index.d.ts +3 -20
- package/dist/core/response/index.mjs +3 -38
- package/dist/core/response/predicted.cjs +22 -0
- package/dist/core/response/predicted.d.ts +11 -0
- package/dist/core/response/predicted.mjs +20 -0
- package/dist/core/route/{hooks/index.cjs → hooks.cjs} +2 -3
- package/dist/core/route/{hooks/index.d.ts → hooks.d.ts} +4 -4
- package/dist/core/route/{hooks/index.mjs → hooks.mjs} +2 -2
- package/dist/core/route/index.cjs +5 -4
- package/dist/core/route/index.mjs +2 -1
- package/dist/core/route/types/buildedRoute.cjs +2 -0
- package/dist/core/route/types/buildedRoute.mjs +1 -0
- package/dist/core/route/types/index.cjs +4 -0
- package/dist/core/route/types/index.mjs +1 -0
- package/dist/core/router/buildError.cjs +3 -1
- package/dist/core/router/buildError.d.ts +4 -2
- package/dist/core/router/buildError.mjs +3 -1
- package/dist/core/router/index.cjs +13 -7
- package/dist/core/router/index.mjs +14 -8
- package/dist/core/router/types/buildedRouter.cjs +2 -0
- package/dist/core/router/types/buildedRouter.mjs +1 -0
- package/dist/core/router/types/index.cjs +4 -0
- package/dist/core/router/types/index.mjs +1 -0
- package/dist/core/steps/cut.d.ts +3 -3
- package/dist/core/steps/handler.d.ts +3 -3
- package/dist/core/steps/identifier.d.ts +2 -2
- package/dist/core/steps/index.cjs +29 -0
- package/dist/core/steps/index.mjs +9 -0
- package/dist/core/steps/types/buildedStep.cjs +2 -0
- package/dist/core/steps/types/buildedStep.mjs +1 -0
- package/dist/core/steps/types/index.cjs +6 -0
- package/dist/core/steps/types/index.mjs +3 -0
- package/dist/core/steps/types/stepFunctionParams.cjs +2 -0
- package/dist/core/steps/types/stepFunctionParams.d.ts +2 -2
- package/dist/core/steps/types/stepFunctionParams.mjs +1 -0
- package/dist/core/steps/types/steps.cjs +2 -0
- package/dist/core/steps/types/steps.mjs +1 -0
- package/dist/core/types/environment.cjs +2 -0
- package/dist/core/types/environment.d.ts +1 -1
- package/dist/core/types/environment.mjs +1 -0
- package/dist/core/types/forbiddenBigintDataParser.cjs +2 -0
- package/dist/core/types/forbiddenBigintDataParser.d.ts +6 -0
- package/dist/core/types/forbiddenBigintDataParser.mjs +1 -0
- package/dist/core/types/index.cjs +5 -0
- package/dist/core/types/index.d.ts +1 -0
- package/dist/core/types/index.mjs +2 -0
- package/dist/interfaces/bun/index.cjs +1 -9
- package/dist/interfaces/bun/index.mjs +1 -9
- package/dist/interfaces/bun/types/index.cjs +4 -0
- package/dist/interfaces/bun/types/index.mjs +1 -0
- package/dist/interfaces/bun/types/request.cjs +5 -0
- package/dist/interfaces/bun/types/request.mjs +2 -0
- package/dist/interfaces/deno/index.cjs +1 -0
- package/dist/interfaces/deno/index.mjs +1 -0
- package/dist/interfaces/deno/types/index.cjs +2 -0
- package/dist/interfaces/deno/types/index.mjs +1 -0
- package/dist/interfaces/node/createHttpServer.cjs +11 -3
- package/dist/interfaces/node/createHttpServer.d.ts +2 -1
- package/dist/interfaces/node/createHttpServer.mjs +11 -3
- package/dist/interfaces/node/error/index.cjs +11 -0
- package/dist/interfaces/node/error/index.mjs +3 -0
- package/dist/interfaces/node/hooks.cjs +17 -13
- package/dist/interfaces/node/hooks.mjs +16 -12
- package/dist/interfaces/node/index.cjs +6 -13
- package/dist/interfaces/node/index.mjs +4 -11
- package/dist/interfaces/node/types/host.cjs +2 -0
- package/dist/interfaces/node/types/host.mjs +1 -0
- package/dist/interfaces/node/types/index.cjs +5 -0
- package/dist/interfaces/node/types/index.mjs +2 -0
- package/dist/interfaces/node/types/request.cjs +5 -0
- package/dist/interfaces/node/types/request.mjs +2 -0
- package/dist/plugins/codeGenerator/index.cjs +13 -0
- package/dist/plugins/codeGenerator/index.d.ts +5 -0
- package/dist/plugins/codeGenerator/index.mjs +5 -0
- package/dist/plugins/codeGenerator/plugin.cjs +51 -0
- package/dist/plugins/codeGenerator/plugin.d.ts +5 -0
- package/dist/plugins/codeGenerator/plugin.mjs +30 -0
- package/dist/plugins/codeGenerator/routeToDataParser.cjs +28 -0
- package/dist/plugins/codeGenerator/routeToDataParser.d.ts +7 -0
- package/dist/plugins/codeGenerator/routeToDataParser.mjs +26 -0
- package/dist/plugins/codeGenerator/stepsToDataParser.cjs +66 -0
- package/dist/plugins/codeGenerator/stepsToDataParser.d.ts +14 -0
- package/dist/plugins/codeGenerator/stepsToDataParser.mjs +64 -0
- package/dist/plugins/codeGenerator/types/entrypointKey.cjs +2 -0
- package/dist/plugins/codeGenerator/types/entrypointKey.d.ts +1 -0
- package/dist/plugins/codeGenerator/types/entrypointKey.mjs +1 -0
- package/dist/plugins/codeGenerator/types/index.cjs +4 -0
- package/dist/plugins/codeGenerator/types/index.d.ts +1 -0
- package/dist/plugins/codeGenerator/types/index.mjs +1 -0
- package/dist/plugins/openApiGenerator/aggregateStepContract.cjs +62 -0
- package/dist/plugins/openApiGenerator/aggregateStepContract.d.ts +18 -0
- package/dist/plugins/openApiGenerator/aggregateStepContract.mjs +60 -0
- package/dist/plugins/openApiGenerator/index.cjs +17 -0
- package/dist/plugins/openApiGenerator/index.d.ts +7 -0
- package/dist/plugins/openApiGenerator/index.mjs +7 -0
- package/dist/plugins/openApiGenerator/makeOpenApiPage.cjs +30 -0
- package/dist/plugins/openApiGenerator/makeOpenApiPage.d.ts +7 -0
- package/dist/plugins/openApiGenerator/makeOpenApiPage.mjs +28 -0
- package/dist/plugins/openApiGenerator/makeOpenApiRoute.cjs +15 -0
- package/dist/plugins/openApiGenerator/makeOpenApiRoute.d.ts +18 -0
- package/dist/plugins/openApiGenerator/makeOpenApiRoute.mjs +13 -0
- package/dist/plugins/openApiGenerator/plugin.cjs +90 -0
- package/dist/plugins/openApiGenerator/plugin.d.ts +49 -0
- package/dist/plugins/openApiGenerator/plugin.mjs +88 -0
- package/dist/plugins/openApiGenerator/routeToOpenApi.cjs +163 -0
- package/dist/plugins/openApiGenerator/routeToOpenApi.d.ts +35 -0
- package/dist/plugins/openApiGenerator/routeToOpenApi.mjs +161 -0
- package/dist/plugins/openApiGenerator/types/endpointResponse.cjs +2 -0
- package/dist/plugins/openApiGenerator/types/endpointResponse.d.ts +19 -0
- package/dist/plugins/openApiGenerator/types/endpointResponse.mjs +1 -0
- package/dist/plugins/openApiGenerator/types/entrypoint.cjs +2 -0
- package/dist/plugins/openApiGenerator/types/entrypoint.d.ts +22 -0
- package/dist/plugins/openApiGenerator/types/entrypoint.mjs +1 -0
- package/dist/plugins/openApiGenerator/types/entrypointKey.cjs +2 -0
- package/dist/plugins/openApiGenerator/types/entrypointKey.d.ts +1 -0
- package/dist/plugins/openApiGenerator/types/entrypointKey.mjs +1 -0
- package/dist/plugins/openApiGenerator/types/index.cjs +11 -0
- package/dist/plugins/openApiGenerator/types/index.d.ts +8 -0
- package/dist/plugins/openApiGenerator/types/index.mjs +8 -0
- package/dist/plugins/openApiGenerator/types/openApiDocument.cjs +2 -0
- package/dist/plugins/openApiGenerator/types/openApiDocument.d.ts +31 -0
- package/dist/plugins/openApiGenerator/types/openApiDocument.mjs +1 -0
- package/dist/plugins/openApiGenerator/types/openApiMethod.cjs +2 -0
- package/dist/plugins/openApiGenerator/types/openApiMethod.d.ts +1 -0
- package/dist/plugins/openApiGenerator/types/openApiMethod.mjs +1 -0
- package/dist/plugins/openApiGenerator/types/openApiOperation.cjs +2 -0
- package/dist/plugins/openApiGenerator/types/openApiOperation.d.ts +8 -0
- package/dist/plugins/openApiGenerator/types/openApiOperation.mjs +1 -0
- package/dist/plugins/openApiGenerator/types/openApiPath.cjs +2 -0
- package/dist/plugins/openApiGenerator/types/openApiPath.d.ts +4 -0
- package/dist/plugins/openApiGenerator/types/openApiPath.mjs +1 -0
- package/dist/plugins/openApiGenerator/types/openApiSecuritySchema.cjs +2 -0
- package/dist/plugins/openApiGenerator/types/openApiSecuritySchema.d.ts +8 -0
- package/dist/plugins/openApiGenerator/types/openApiSecuritySchema.mjs +1 -0
- package/package.json +22 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type O } from "@duplojs/utils";
|
|
2
2
|
export interface EnvironmentCustom {
|
|
3
3
|
}
|
|
4
|
-
export type Environment = (EnvironmentCustom[O.GetPropsWithValue<EnvironmentCustom, true>] | "DEV" | "PROD");
|
|
4
|
+
export type Environment = (EnvironmentCustom[O.GetPropsWithValue<EnvironmentCustom, true>] | "DEV" | "PROD" | "BUILD");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type DP } from "@duplojs/utils";
|
|
2
|
+
declare const SymbolForbiddenBigintDataParser: unique symbol;
|
|
3
|
+
export type ForbiddenBigintDataParser<GenericDataParser extends DP.DataParser> = DP.Contain<GenericDataParser, DP.DataParserBigInt<any>> extends true ? {
|
|
4
|
+
[SymbolForbiddenBigintDataParser]: "Bigint dataParser is not supported.";
|
|
5
|
+
} : unknown;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
require('
|
|
4
|
-
require('../../core/steps/kind.cjs');
|
|
5
|
-
require('../../core/steps/identifier.cjs');
|
|
6
|
-
require('../../core/steps/checker.cjs');
|
|
7
|
-
require('../../core/steps/extract.cjs');
|
|
8
|
-
require('../../core/steps/cut.cjs');
|
|
9
|
-
require('../../core/steps/handler.cjs');
|
|
10
|
-
require('../../core/steps/process.cjs');
|
|
11
|
-
require('../../core/steps/presetChecker.cjs');
|
|
3
|
+
require('./types/index.cjs');
|
|
12
4
|
var kind = require('./kind.cjs');
|
|
13
5
|
|
|
14
6
|
|
|
@@ -1,10 +1,2 @@
|
|
|
1
|
-
import '
|
|
2
|
-
import '../../core/steps/kind.mjs';
|
|
3
|
-
import '../../core/steps/identifier.mjs';
|
|
4
|
-
import '../../core/steps/checker.mjs';
|
|
5
|
-
import '../../core/steps/extract.mjs';
|
|
6
|
-
import '../../core/steps/cut.mjs';
|
|
7
|
-
import '../../core/steps/handler.mjs';
|
|
8
|
-
import '../../core/steps/process.mjs';
|
|
9
|
-
import '../../core/steps/presetChecker.mjs';
|
|
1
|
+
import './types/index.mjs';
|
|
10
2
|
export { createInterfacesBunLibKind } from './kind.mjs';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './request.mjs';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require('../../core/hub/index.cjs');
|
|
4
4
|
var index = require('../../core/router/index.cjs');
|
|
5
|
+
var utils = require('@duplojs/utils');
|
|
5
6
|
var http = require('http');
|
|
6
7
|
var https = require('https');
|
|
7
8
|
var hooks$1 = require('./hooks.cjs');
|
|
@@ -12,12 +13,16 @@ async function createHttpServer(inputHub, params) {
|
|
|
12
13
|
...params,
|
|
13
14
|
maxBodySize: "50mb",
|
|
14
15
|
informationHeaderKey: "information",
|
|
16
|
+
predictedHeaderKey: "predicted",
|
|
15
17
|
fromHookHeaderKey: "from-hook",
|
|
16
18
|
interface: "node",
|
|
17
19
|
};
|
|
18
|
-
const newHub1 = await hooks.launchHookServer(inputHub.aggregatesHooksHubLifeCycle("
|
|
20
|
+
const newHub1 = await hooks.launchHookServer(inputHub.aggregatesHooksHubLifeCycle("beforeServerBuildRoutes"), inputHub, httpServerParams);
|
|
19
21
|
const router = await index.buildRouter(newHub1.addRouteHooks(hooks$1.makeNodeHook(newHub1, httpServerParams)));
|
|
20
22
|
const newHub2 = await hooks.launchHookServer(newHub1.aggregatesHooksHubLifeCycle("beforeStartServer"), newHub1, httpServerParams);
|
|
23
|
+
if (inputHub.config.environment === "BUILD") {
|
|
24
|
+
process.exit(0);
|
|
25
|
+
}
|
|
21
26
|
const server = params.https
|
|
22
27
|
? https.createServer(params.https)
|
|
23
28
|
: http.createServer(params.http ?? {});
|
|
@@ -41,12 +46,15 @@ async function createHttpServer(inputHub, params) {
|
|
|
41
46
|
next: hooks.serverErrorNextHookFunction,
|
|
42
47
|
serverRequest,
|
|
43
48
|
serverResponse,
|
|
44
|
-
});
|
|
49
|
+
}).catch(utils.forward);
|
|
45
50
|
if (!serverResponse.headersSent && !serverResponse.writableEnded) {
|
|
46
51
|
serverResponse.writeHead(500, {
|
|
47
52
|
[httpServerParams.informationHeaderKey]: "critical-server-error",
|
|
48
53
|
});
|
|
49
|
-
|
|
54
|
+
const maybeError = error?.toString?.();
|
|
55
|
+
serverResponse.write(typeof maybeError === "string"
|
|
56
|
+
? maybeError
|
|
57
|
+
: "unknown-server-error");
|
|
50
58
|
}
|
|
51
59
|
if (!serverResponse.writableEnded) {
|
|
52
60
|
serverResponse.end();
|
|
@@ -10,6 +10,7 @@ declare module "../../core/hub" {
|
|
|
10
10
|
readonly port: number;
|
|
11
11
|
readonly maxBodySize: BytesInString | number;
|
|
12
12
|
readonly informationHeaderKey: string;
|
|
13
|
+
readonly predictedHeaderKey: string;
|
|
13
14
|
readonly fromHookHeaderKey: string;
|
|
14
15
|
readonly http?: http.ServerOptions;
|
|
15
16
|
readonly https?: https.ServerOptions;
|
|
@@ -19,5 +20,5 @@ declare module "../../core/hub" {
|
|
|
19
20
|
readonly serverResponse: http.ServerResponse;
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
|
-
export type CreateHttpServerParams = O.PartialKeys<Omit<HttpServerParams, "interface">, "maxBodySize" | "informationHeaderKey" | "fromHookHeaderKey">;
|
|
23
|
+
export type CreateHttpServerParams = O.PartialKeys<Omit<HttpServerParams, "interface">, "maxBodySize" | "informationHeaderKey" | "predictedHeaderKey" | "fromHookHeaderKey">;
|
|
23
24
|
export declare function createHttpServer(inputHub: Hub, params: CreateHttpServerParams): Promise<https.Server<typeof http.IncomingMessage, typeof http.ServerResponse> | http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import '../../core/hub/index.mjs';
|
|
2
2
|
import { buildRouter } from '../../core/router/index.mjs';
|
|
3
|
+
import { forward } from '@duplojs/utils';
|
|
3
4
|
import http from 'http';
|
|
4
5
|
import https from 'https';
|
|
5
6
|
import { makeNodeHook } from './hooks.mjs';
|
|
@@ -10,12 +11,16 @@ async function createHttpServer(inputHub, params) {
|
|
|
10
11
|
...params,
|
|
11
12
|
maxBodySize: "50mb",
|
|
12
13
|
informationHeaderKey: "information",
|
|
14
|
+
predictedHeaderKey: "predicted",
|
|
13
15
|
fromHookHeaderKey: "from-hook",
|
|
14
16
|
interface: "node",
|
|
15
17
|
};
|
|
16
|
-
const newHub1 = await launchHookServer(inputHub.aggregatesHooksHubLifeCycle("
|
|
18
|
+
const newHub1 = await launchHookServer(inputHub.aggregatesHooksHubLifeCycle("beforeServerBuildRoutes"), inputHub, httpServerParams);
|
|
17
19
|
const router = await buildRouter(newHub1.addRouteHooks(makeNodeHook(newHub1, httpServerParams)));
|
|
18
20
|
const newHub2 = await launchHookServer(newHub1.aggregatesHooksHubLifeCycle("beforeStartServer"), newHub1, httpServerParams);
|
|
21
|
+
if (inputHub.config.environment === "BUILD") {
|
|
22
|
+
process.exit(0);
|
|
23
|
+
}
|
|
19
24
|
const server = params.https
|
|
20
25
|
? https.createServer(params.https)
|
|
21
26
|
: http.createServer(params.http ?? {});
|
|
@@ -39,12 +44,15 @@ async function createHttpServer(inputHub, params) {
|
|
|
39
44
|
next: serverErrorNextHookFunction,
|
|
40
45
|
serverRequest,
|
|
41
46
|
serverResponse,
|
|
42
|
-
});
|
|
47
|
+
}).catch(forward);
|
|
43
48
|
if (!serverResponse.headersSent && !serverResponse.writableEnded) {
|
|
44
49
|
serverResponse.writeHead(500, {
|
|
45
50
|
[httpServerParams.informationHeaderKey]: "critical-server-error",
|
|
46
51
|
});
|
|
47
|
-
|
|
52
|
+
const maybeError = error?.toString?.();
|
|
53
|
+
serverResponse.write(typeof maybeError === "string"
|
|
54
|
+
? maybeError
|
|
55
|
+
: "unknown-server-error");
|
|
48
56
|
}
|
|
49
57
|
if (!serverResponse.writableEnded) {
|
|
50
58
|
serverResponse.end();
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var bodySizeExceedsLimitError = require('./bodySizeExceedsLimitError.cjs');
|
|
4
|
+
var bodyParseWrongChunkReceived = require('./bodyParseWrongChunkReceived.cjs');
|
|
5
|
+
var bodyParseUnknownError = require('./bodyParseUnknownError.cjs');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
exports.BodySizeExceedsLimitError = bodySizeExceedsLimitError.BodySizeExceedsLimitError;
|
|
10
|
+
exports.BodyParseWrongChunkReceived = bodyParseWrongChunkReceived.BodyParseWrongChunkReceived;
|
|
11
|
+
exports.BodyParseUnknownError = bodyParseUnknownError.BodyParseUnknownError;
|
|
@@ -2,18 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
require('../../core/route/index.cjs');
|
|
4
4
|
var utils = require('@duplojs/utils');
|
|
5
|
+
require('./error/index.cjs');
|
|
6
|
+
var hooks = require('../../core/route/hooks.cjs');
|
|
7
|
+
var predicted = require('../../core/response/predicted.cjs');
|
|
8
|
+
var hook = require('../../core/response/hook.cjs');
|
|
5
9
|
var bodySizeExceedsLimitError = require('./error/bodySizeExceedsLimitError.cjs');
|
|
6
10
|
var bodyParseWrongChunkReceived = require('./error/bodyParseWrongChunkReceived.cjs');
|
|
7
11
|
var bodyParseUnknownError = require('./error/bodyParseUnknownError.cjs');
|
|
8
|
-
var index = require('../../core/route/hooks/index.cjs');
|
|
9
|
-
var response = require('../../core/route/hooks/response.cjs');
|
|
10
12
|
|
|
11
13
|
function makeNodeHook(hub, serverParams) {
|
|
12
14
|
const informationHeaderKey = serverParams.informationHeaderKey;
|
|
15
|
+
const predictedHeaderKey = serverParams.predictedHeaderKey;
|
|
13
16
|
const fromHookHeaderKey = serverParams.fromHookHeaderKey;
|
|
14
17
|
const isDev = hub.config.environment === "DEV";
|
|
15
18
|
const maxBodySize = utils.stringToBytes(serverParams.maxBodySize);
|
|
16
|
-
return
|
|
19
|
+
return hooks.createHookRouteLifeCycle({
|
|
17
20
|
async parseBody({ request, exit }) {
|
|
18
21
|
const contentType = request.headers["content-type"] instanceof Array
|
|
19
22
|
? request.headers["content-type"].join(", ")
|
|
@@ -78,17 +81,20 @@ function makeNodeHook(hub, serverParams) {
|
|
|
78
81
|
},
|
|
79
82
|
beforeSendResponse({ request, currentResponse, exit }) {
|
|
80
83
|
const body = currentResponse.body;
|
|
81
|
-
if (typeof body === "
|
|
82
|
-
|| typeof body === "string"
|
|
83
|
-
|| body === null
|
|
84
|
+
if (typeof body === "string"
|
|
84
85
|
|| body instanceof Error) {
|
|
85
86
|
currentResponse.setHeader("content-type", "text/plain; charset=utf-8");
|
|
86
87
|
}
|
|
87
|
-
else if (typeof body === "object"
|
|
88
|
+
else if (typeof body === "object"
|
|
89
|
+
|| typeof body === "number"
|
|
90
|
+
|| typeof body === "boolean") {
|
|
88
91
|
currentResponse.setHeader("content-type", "application/json; charset=utf-8");
|
|
89
92
|
}
|
|
90
93
|
currentResponse.setHeader(informationHeaderKey, currentResponse.information);
|
|
91
|
-
if (currentResponse instanceof
|
|
94
|
+
if (currentResponse instanceof predicted.PredictedResponse) {
|
|
95
|
+
currentResponse.setHeader(predictedHeaderKey, "1");
|
|
96
|
+
}
|
|
97
|
+
else if (currentResponse instanceof hook.HookResponse) {
|
|
92
98
|
currentResponse.setHeader(fromHookHeaderKey, currentResponse.fromHook);
|
|
93
99
|
}
|
|
94
100
|
request.raw.response.writeHead(Number(currentResponse.code), currentResponse.headers);
|
|
@@ -100,16 +106,14 @@ function makeNodeHook(hub, serverParams) {
|
|
|
100
106
|
if (body instanceof Error) {
|
|
101
107
|
rawResponse.write(body.toString());
|
|
102
108
|
}
|
|
103
|
-
else if (typeof body === "object"
|
|
109
|
+
else if (typeof body === "object"
|
|
110
|
+
|| typeof body === "number"
|
|
111
|
+
|| typeof body === "boolean") {
|
|
104
112
|
rawResponse.write(JSON.stringify(body));
|
|
105
113
|
}
|
|
106
114
|
else if (typeof body === "string") {
|
|
107
115
|
rawResponse.write(body);
|
|
108
116
|
}
|
|
109
|
-
else if (typeof body === "number"
|
|
110
|
-
|| typeof body === "bigint") {
|
|
111
|
-
rawResponse.write(body.toString());
|
|
112
|
-
}
|
|
113
117
|
rawResponse.end();
|
|
114
118
|
return exit();
|
|
115
119
|
},
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import '../../core/route/index.mjs';
|
|
2
2
|
import { stringToBytes } from '@duplojs/utils';
|
|
3
|
+
import './error/index.mjs';
|
|
4
|
+
import { createHookRouteLifeCycle } from '../../core/route/hooks.mjs';
|
|
5
|
+
import { PredictedResponse } from '../../core/response/predicted.mjs';
|
|
6
|
+
import { HookResponse } from '../../core/response/hook.mjs';
|
|
3
7
|
import { BodySizeExceedsLimitError } from './error/bodySizeExceedsLimitError.mjs';
|
|
4
8
|
import { BodyParseWrongChunkReceived } from './error/bodyParseWrongChunkReceived.mjs';
|
|
5
9
|
import { BodyParseUnknownError } from './error/bodyParseUnknownError.mjs';
|
|
6
|
-
import { createHookRouteLifeCycle } from '../../core/route/hooks/index.mjs';
|
|
7
|
-
import { HookResponse } from '../../core/route/hooks/response.mjs';
|
|
8
10
|
|
|
9
11
|
function makeNodeHook(hub, serverParams) {
|
|
10
12
|
const informationHeaderKey = serverParams.informationHeaderKey;
|
|
13
|
+
const predictedHeaderKey = serverParams.predictedHeaderKey;
|
|
11
14
|
const fromHookHeaderKey = serverParams.fromHookHeaderKey;
|
|
12
15
|
const isDev = hub.config.environment === "DEV";
|
|
13
16
|
const maxBodySize = stringToBytes(serverParams.maxBodySize);
|
|
@@ -76,17 +79,20 @@ function makeNodeHook(hub, serverParams) {
|
|
|
76
79
|
},
|
|
77
80
|
beforeSendResponse({ request, currentResponse, exit }) {
|
|
78
81
|
const body = currentResponse.body;
|
|
79
|
-
if (typeof body === "
|
|
80
|
-
|| typeof body === "string"
|
|
81
|
-
|| body === null
|
|
82
|
+
if (typeof body === "string"
|
|
82
83
|
|| body instanceof Error) {
|
|
83
84
|
currentResponse.setHeader("content-type", "text/plain; charset=utf-8");
|
|
84
85
|
}
|
|
85
|
-
else if (typeof body === "object"
|
|
86
|
+
else if (typeof body === "object"
|
|
87
|
+
|| typeof body === "number"
|
|
88
|
+
|| typeof body === "boolean") {
|
|
86
89
|
currentResponse.setHeader("content-type", "application/json; charset=utf-8");
|
|
87
90
|
}
|
|
88
91
|
currentResponse.setHeader(informationHeaderKey, currentResponse.information);
|
|
89
|
-
if (currentResponse instanceof
|
|
92
|
+
if (currentResponse instanceof PredictedResponse) {
|
|
93
|
+
currentResponse.setHeader(predictedHeaderKey, "1");
|
|
94
|
+
}
|
|
95
|
+
else if (currentResponse instanceof HookResponse) {
|
|
90
96
|
currentResponse.setHeader(fromHookHeaderKey, currentResponse.fromHook);
|
|
91
97
|
}
|
|
92
98
|
request.raw.response.writeHead(Number(currentResponse.code), currentResponse.headers);
|
|
@@ -98,16 +104,14 @@ function makeNodeHook(hub, serverParams) {
|
|
|
98
104
|
if (body instanceof Error) {
|
|
99
105
|
rawResponse.write(body.toString());
|
|
100
106
|
}
|
|
101
|
-
else if (typeof body === "object"
|
|
107
|
+
else if (typeof body === "object"
|
|
108
|
+
|| typeof body === "number"
|
|
109
|
+
|| typeof body === "boolean") {
|
|
102
110
|
rawResponse.write(JSON.stringify(body));
|
|
103
111
|
}
|
|
104
112
|
else if (typeof body === "string") {
|
|
105
113
|
rawResponse.write(body);
|
|
106
114
|
}
|
|
107
|
-
else if (typeof body === "number"
|
|
108
|
-
|| typeof body === "bigint") {
|
|
109
|
-
rawResponse.write(body.toString());
|
|
110
|
-
}
|
|
111
115
|
rawResponse.end();
|
|
112
116
|
return exit();
|
|
113
117
|
},
|
|
@@ -1,26 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
require('
|
|
4
|
-
require('../../core/steps/kind.cjs');
|
|
5
|
-
require('../../core/steps/identifier.cjs');
|
|
6
|
-
require('../../core/steps/checker.cjs');
|
|
7
|
-
require('../../core/steps/extract.cjs');
|
|
8
|
-
require('../../core/steps/cut.cjs');
|
|
9
|
-
require('../../core/steps/handler.cjs');
|
|
10
|
-
require('../../core/steps/process.cjs');
|
|
11
|
-
require('../../core/steps/presetChecker.cjs');
|
|
3
|
+
require('./types/index.cjs');
|
|
12
4
|
var kind = require('./kind.cjs');
|
|
5
|
+
require('./error/index.cjs');
|
|
6
|
+
var createHttpServer = require('./createHttpServer.cjs');
|
|
7
|
+
var hooks = require('./hooks.cjs');
|
|
13
8
|
var bodySizeExceedsLimitError = require('./error/bodySizeExceedsLimitError.cjs');
|
|
14
9
|
var bodyParseWrongChunkReceived = require('./error/bodyParseWrongChunkReceived.cjs');
|
|
15
10
|
var bodyParseUnknownError = require('./error/bodyParseUnknownError.cjs');
|
|
16
|
-
var createHttpServer = require('./createHttpServer.cjs');
|
|
17
|
-
var hooks = require('./hooks.cjs');
|
|
18
11
|
|
|
19
12
|
|
|
20
13
|
|
|
21
14
|
exports.createInterfacesNodeLibKind = kind.createInterfacesNodeLibKind;
|
|
15
|
+
exports.createHttpServer = createHttpServer.createHttpServer;
|
|
16
|
+
exports.makeNodeHook = hooks.makeNodeHook;
|
|
22
17
|
exports.BodySizeExceedsLimitError = bodySizeExceedsLimitError.BodySizeExceedsLimitError;
|
|
23
18
|
exports.BodyParseWrongChunkReceived = bodyParseWrongChunkReceived.BodyParseWrongChunkReceived;
|
|
24
19
|
exports.BodyParseUnknownError = bodyParseUnknownError.BodyParseUnknownError;
|
|
25
|
-
exports.createHttpServer = createHttpServer.createHttpServer;
|
|
26
|
-
exports.makeNodeHook = hooks.makeNodeHook;
|
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
import '
|
|
2
|
-
import '../../core/steps/kind.mjs';
|
|
3
|
-
import '../../core/steps/identifier.mjs';
|
|
4
|
-
import '../../core/steps/checker.mjs';
|
|
5
|
-
import '../../core/steps/extract.mjs';
|
|
6
|
-
import '../../core/steps/cut.mjs';
|
|
7
|
-
import '../../core/steps/handler.mjs';
|
|
8
|
-
import '../../core/steps/process.mjs';
|
|
9
|
-
import '../../core/steps/presetChecker.mjs';
|
|
1
|
+
import './types/index.mjs';
|
|
10
2
|
export { createInterfacesNodeLibKind } from './kind.mjs';
|
|
3
|
+
import './error/index.mjs';
|
|
4
|
+
export { createHttpServer } from './createHttpServer.mjs';
|
|
5
|
+
export { makeNodeHook } from './hooks.mjs';
|
|
11
6
|
export { BodySizeExceedsLimitError } from './error/bodySizeExceedsLimitError.mjs';
|
|
12
7
|
export { BodyParseWrongChunkReceived } from './error/bodyParseWrongChunkReceived.mjs';
|
|
13
8
|
export { BodyParseUnknownError } from './error/bodyParseUnknownError.mjs';
|
|
14
|
-
export { createHttpServer } from './createHttpServer.mjs';
|
|
15
|
-
export { makeNodeHook } from './hooks.mjs';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('@duplojs/data-parser-tools/toTypescript');
|
|
4
|
+
require('./types/index.cjs');
|
|
5
|
+
var plugin = require('./plugin.cjs');
|
|
6
|
+
var routeToDataParser = require('./routeToDataParser.cjs');
|
|
7
|
+
var stepsToDataParser = require('./stepsToDataParser.cjs');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
exports.codeGeneratorPlugin = plugin.codeGeneratorPlugin;
|
|
12
|
+
exports.routeToDataParser = routeToDataParser.routeToDataParser;
|
|
13
|
+
exports.stepsToDataParser = stepsToDataParser.stepsToDataParser;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var DataParserToTypescript = require('@duplojs/data-parser-tools/toTypescript');
|
|
4
|
+
var utils = require('@duplojs/utils');
|
|
5
|
+
var routeToDataParser = require('./routeToDataParser.cjs');
|
|
6
|
+
var promises = require('node:fs/promises');
|
|
7
|
+
|
|
8
|
+
function _interopNamespaceDefault(e) {
|
|
9
|
+
var n = Object.create(null);
|
|
10
|
+
if (e) {
|
|
11
|
+
Object.keys(e).forEach(function (k) {
|
|
12
|
+
if (k !== 'default') {
|
|
13
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
14
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function () { return e[k]; }
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
n.default = e;
|
|
22
|
+
return Object.freeze(n);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var DataParserToTypescript__namespace = /*#__PURE__*/_interopNamespaceDefault(DataParserToTypescript);
|
|
26
|
+
|
|
27
|
+
function codeGeneratorPlugin(pluginParams) {
|
|
28
|
+
return () => ({
|
|
29
|
+
name: "code-generator",
|
|
30
|
+
hooksHubLifeCycle: [
|
|
31
|
+
{
|
|
32
|
+
beforeStartServer: async (hub) => {
|
|
33
|
+
const routes = hub.aggregatesRoutes();
|
|
34
|
+
const dataParserRoutes = utils.A.flatMap(routes, (route) => routeToDataParser.routeToDataParser(route, {
|
|
35
|
+
defaultExtractContract: hub.defaultExtractContract,
|
|
36
|
+
}));
|
|
37
|
+
if (!utils.A.minElements(dataParserRoutes, 1)) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const output = DataParserToTypescript__namespace.render(utils.DP.union(dataParserRoutes), {
|
|
41
|
+
identifier: "Routes",
|
|
42
|
+
transformers: DataParserToTypescript__namespace.defaultTransformers,
|
|
43
|
+
});
|
|
44
|
+
await promises.writeFile(pluginParams.outputFile, output);
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
exports.codeGeneratorPlugin = codeGeneratorPlugin;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as DataParserToTypescript from '@duplojs/data-parser-tools/toTypescript';
|
|
2
|
+
import { A, DP } from '@duplojs/utils';
|
|
3
|
+
import { routeToDataParser } from './routeToDataParser.mjs';
|
|
4
|
+
import { writeFile } from 'node:fs/promises';
|
|
5
|
+
|
|
6
|
+
function codeGeneratorPlugin(pluginParams) {
|
|
7
|
+
return () => ({
|
|
8
|
+
name: "code-generator",
|
|
9
|
+
hooksHubLifeCycle: [
|
|
10
|
+
{
|
|
11
|
+
beforeStartServer: async (hub) => {
|
|
12
|
+
const routes = hub.aggregatesRoutes();
|
|
13
|
+
const dataParserRoutes = A.flatMap(routes, (route) => routeToDataParser(route, {
|
|
14
|
+
defaultExtractContract: hub.defaultExtractContract,
|
|
15
|
+
}));
|
|
16
|
+
if (!A.minElements(dataParserRoutes, 1)) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const output = DataParserToTypescript.render(DP.union(dataParserRoutes), {
|
|
20
|
+
identifier: "Routes",
|
|
21
|
+
transformers: DataParserToTypescript.defaultTransformers,
|
|
22
|
+
});
|
|
23
|
+
await writeFile(pluginParams.outputFile, output);
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { codeGeneratorPlugin };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var stepsToDataParser = require('./stepsToDataParser.cjs');
|
|
4
|
+
var utils = require('@duplojs/utils');
|
|
5
|
+
|
|
6
|
+
function routeToDataParser(route, params) {
|
|
7
|
+
return utils.pipe([
|
|
8
|
+
...route.definition.preflightSteps,
|
|
9
|
+
...route.definition.steps,
|
|
10
|
+
], (steps) => stepsToDataParser.stepsToDataParser(steps, {
|
|
11
|
+
defaultExtractContract: params.defaultExtractContract,
|
|
12
|
+
}), utils.O.transformProperty("entrypointContract", utils.innerPipe(utils.O.entries, utils.A.select(({ element: [key, value], select, skip }) => {
|
|
13
|
+
if (utils.DP.dataParserKind.has(value)) {
|
|
14
|
+
return select(utils.O.entry(key, value));
|
|
15
|
+
}
|
|
16
|
+
if (utils.O.countKeys(value) > 0) {
|
|
17
|
+
return select(utils.O.entry(key, utils.DP.object(value)));
|
|
18
|
+
}
|
|
19
|
+
return skip();
|
|
20
|
+
}), utils.O.fromEntries)), ({ endpointContract, entrypointContract }) => utils.A.map(route.definition.paths, (path) => utils.DP.object({
|
|
21
|
+
method: utils.DP.literal(route.definition.method),
|
|
22
|
+
path: utils.DP.literal(path),
|
|
23
|
+
...entrypointContract,
|
|
24
|
+
responses: utils.DP.union(endpointContract),
|
|
25
|
+
})));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
exports.routeToDataParser = routeToDataParser;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Route } from "../../core/route";
|
|
2
|
+
import { DP } from "@duplojs/utils";
|
|
3
|
+
import { type ResponseContract } from "../../core/response";
|
|
4
|
+
export interface RouteToDataParserParams {
|
|
5
|
+
readonly defaultExtractContract: ResponseContract.Contract;
|
|
6
|
+
}
|
|
7
|
+
export declare function routeToDataParser(route: Route, params: RouteToDataParserParams): DP.DataParser[];
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { stepsToDataParser } from './stepsToDataParser.mjs';
|
|
2
|
+
import { pipe, O, innerPipe, A, DP } from '@duplojs/utils';
|
|
3
|
+
|
|
4
|
+
function routeToDataParser(route, params) {
|
|
5
|
+
return pipe([
|
|
6
|
+
...route.definition.preflightSteps,
|
|
7
|
+
...route.definition.steps,
|
|
8
|
+
], (steps) => stepsToDataParser(steps, {
|
|
9
|
+
defaultExtractContract: params.defaultExtractContract,
|
|
10
|
+
}), O.transformProperty("entrypointContract", innerPipe(O.entries, A.select(({ element: [key, value], select, skip }) => {
|
|
11
|
+
if (DP.dataParserKind.has(value)) {
|
|
12
|
+
return select(O.entry(key, value));
|
|
13
|
+
}
|
|
14
|
+
if (O.countKeys(value) > 0) {
|
|
15
|
+
return select(O.entry(key, DP.object(value)));
|
|
16
|
+
}
|
|
17
|
+
return skip();
|
|
18
|
+
}), O.fromEntries)), ({ endpointContract, entrypointContract }) => A.map(route.definition.paths, (path) => DP.object({
|
|
19
|
+
method: DP.literal(route.definition.method),
|
|
20
|
+
path: DP.literal(path),
|
|
21
|
+
...entrypointContract,
|
|
22
|
+
responses: DP.union(endpointContract),
|
|
23
|
+
})));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { routeToDataParser };
|