@duplojs/http 0.1.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/README.md +2 -0
- package/dist/core/builders/checker.cjs +20 -0
- package/dist/core/builders/checker.d.ts +17 -0
- package/dist/core/builders/checker.mjs +17 -0
- package/dist/core/builders/index.d.ts +4 -0
- package/dist/core/builders/preflight/builder.cjs +15 -0
- package/dist/core/builders/preflight/builder.d.ts +17 -0
- package/dist/core/builders/preflight/builder.mjs +12 -0
- package/dist/core/builders/preflight/index.d.ts +3 -0
- package/dist/core/builders/preflight/process.cjs +22 -0
- package/dist/core/builders/preflight/process.d.ts +22 -0
- package/dist/core/builders/preflight/process.mjs +20 -0
- package/dist/core/builders/preflight/route.cjs +23 -0
- package/dist/core/builders/preflight/route.d.ts +21 -0
- package/dist/core/builders/preflight/route.mjs +21 -0
- package/dist/core/builders/process/builder.cjs +17 -0
- package/dist/core/builders/process/builder.d.ts +18 -0
- package/dist/core/builders/process/builder.mjs +14 -0
- package/dist/core/builders/process/checker.cjs +23 -0
- package/dist/core/builders/process/checker.d.ts +34 -0
- package/dist/core/builders/process/checker.mjs +21 -0
- package/dist/core/builders/process/cut.cjs +22 -0
- package/dist/core/builders/process/cut.d.ts +19 -0
- package/dist/core/builders/process/cut.mjs +20 -0
- package/dist/core/builders/process/export.cjs +6 -0
- package/dist/core/builders/process/export.d.ts +12 -0
- package/dist/core/builders/process/export.mjs +4 -0
- package/dist/core/builders/process/extract.cjs +22 -0
- package/dist/core/builders/process/extract.d.ts +25 -0
- package/dist/core/builders/process/extract.mjs +20 -0
- package/dist/core/builders/process/index.d.ts +7 -0
- package/dist/core/builders/process/presetChecker.cjs +22 -0
- package/dist/core/builders/process/presetChecker.d.ts +23 -0
- package/dist/core/builders/process/presetChecker.mjs +20 -0
- package/dist/core/builders/process/process.cjs +22 -0
- package/dist/core/builders/process/process.d.ts +22 -0
- package/dist/core/builders/process/process.mjs +20 -0
- package/dist/core/builders/route/builder.cjs +18 -0
- package/dist/core/builders/route/builder.d.ts +16 -0
- package/dist/core/builders/route/builder.mjs +15 -0
- package/dist/core/builders/route/checker.cjs +23 -0
- package/dist/core/builders/route/checker.d.ts +34 -0
- package/dist/core/builders/route/checker.mjs +21 -0
- package/dist/core/builders/route/cut.cjs +22 -0
- package/dist/core/builders/route/cut.d.ts +19 -0
- package/dist/core/builders/route/cut.mjs +20 -0
- package/dist/core/builders/route/extract.cjs +22 -0
- package/dist/core/builders/route/extract.d.ts +25 -0
- package/dist/core/builders/route/extract.mjs +20 -0
- package/dist/core/builders/route/handler.cjs +28 -0
- package/dist/core/builders/route/handler.d.ts +19 -0
- package/dist/core/builders/route/handler.mjs +26 -0
- package/dist/core/builders/route/index.d.ts +8 -0
- package/dist/core/builders/route/presetChecker.cjs +22 -0
- package/dist/core/builders/route/presetChecker.d.ts +23 -0
- package/dist/core/builders/route/presetChecker.mjs +20 -0
- package/dist/core/builders/route/process.cjs +22 -0
- package/dist/core/builders/route/process.d.ts +23 -0
- package/dist/core/builders/route/process.mjs +20 -0
- package/dist/core/builders/route/store.cjs +19 -0
- package/dist/core/builders/route/store.d.ts +13 -0
- package/dist/core/builders/route/store.mjs +17 -0
- package/dist/core/checker.cjs +14 -0
- package/dist/core/checker.d.ts +22 -0
- package/dist/core/checker.mjs +10 -0
- package/dist/core/floor.d.ts +1 -0
- package/dist/core/functionsBuilders/index.d.ts +2 -0
- package/dist/core/functionsBuilders/route/build.cjs +40 -0
- package/dist/core/functionsBuilders/route/build.d.ts +8 -0
- package/dist/core/functionsBuilders/route/build.mjs +38 -0
- package/dist/core/functionsBuilders/route/create.cjs +11 -0
- package/dist/core/functionsBuilders/route/create.d.ts +16 -0
- package/dist/core/functionsBuilders/route/create.mjs +9 -0
- package/dist/core/functionsBuilders/route/default.cjs +143 -0
- package/dist/core/functionsBuilders/route/default.d.ts +1 -0
- package/dist/core/functionsBuilders/route/default.mjs +141 -0
- package/dist/core/functionsBuilders/route/hook.cjs +69 -0
- package/dist/core/functionsBuilders/route/hook.d.ts +7 -0
- package/dist/core/functionsBuilders/route/hook.mjs +62 -0
- package/dist/core/functionsBuilders/route/index.d.ts +4 -0
- package/dist/core/functionsBuilders/steps/build.cjs +24 -0
- package/dist/core/functionsBuilders/steps/build.d.ts +8 -0
- package/dist/core/functionsBuilders/steps/build.mjs +22 -0
- package/dist/core/functionsBuilders/steps/create.cjs +11 -0
- package/dist/core/functionsBuilders/steps/create.d.ts +20 -0
- package/dist/core/functionsBuilders/steps/create.mjs +9 -0
- package/dist/core/functionsBuilders/steps/defaults/checkerStep.cjs +73 -0
- package/dist/core/functionsBuilders/steps/defaults/checkerStep.d.ts +1 -0
- package/dist/core/functionsBuilders/steps/defaults/checkerStep.mjs +71 -0
- package/dist/core/functionsBuilders/steps/defaults/cutStep.cjs +58 -0
- package/dist/core/functionsBuilders/steps/defaults/cutStep.d.ts +1 -0
- package/dist/core/functionsBuilders/steps/defaults/cutStep.mjs +56 -0
- package/dist/core/functionsBuilders/steps/defaults/extractStep.cjs +57 -0
- package/dist/core/functionsBuilders/steps/defaults/extractStep.d.ts +1 -0
- package/dist/core/functionsBuilders/steps/defaults/extractStep.mjs +55 -0
- package/dist/core/functionsBuilders/steps/defaults/handlerStep.cjs +41 -0
- package/dist/core/functionsBuilders/steps/defaults/handlerStep.d.ts +1 -0
- package/dist/core/functionsBuilders/steps/defaults/handlerStep.mjs +39 -0
- package/dist/core/functionsBuilders/steps/defaults/index.d.ts +5 -0
- package/dist/core/functionsBuilders/steps/defaults/processStep.cjs +65 -0
- package/dist/core/functionsBuilders/steps/defaults/processStep.d.ts +4 -0
- package/dist/core/functionsBuilders/steps/defaults/processStep.mjs +62 -0
- package/dist/core/functionsBuilders/steps/index.d.ts +3 -0
- package/dist/core/hub/defaultExtractContract.cjs +8 -0
- package/dist/core/hub/defaultExtractContract.d.ts +6 -0
- package/dist/core/hub/defaultExtractContract.mjs +6 -0
- package/dist/core/hub/defaultNotfoundHandler.cjs +20 -0
- package/dist/core/hub/defaultNotfoundHandler.d.ts +10 -0
- package/dist/core/hub/defaultNotfoundHandler.mjs +18 -0
- package/dist/core/hub/hooks.cjs +38 -0
- package/dist/core/hub/hooks.d.ts +33 -0
- package/dist/core/hub/hooks.mjs +30 -0
- package/dist/core/hub/index.cjs +157 -0
- package/dist/core/hub/index.d.ts +58 -0
- package/dist/core/hub/index.mjs +145 -0
- package/dist/core/index.cjs +141 -0
- package/dist/core/index.d.ts +15 -0
- package/dist/core/index.mjs +57 -0
- package/dist/core/kind.cjs +9 -0
- package/dist/core/kind.d.ts +6 -0
- package/dist/core/kind.mjs +7 -0
- package/dist/core/presetChecker.cjs +39 -0
- package/dist/core/presetChecker.d.ts +38 -0
- package/dist/core/presetChecker.mjs +36 -0
- package/dist/core/process/index.cjs +12 -0
- package/dist/core/process/index.d.ts +31 -0
- package/dist/core/process/index.mjs +9 -0
- package/dist/core/process/types/index.d.ts +1 -0
- package/dist/core/request.cjs +34 -0
- package/dist/core/request.d.ts +40 -0
- package/dist/core/request.mjs +32 -0
- package/dist/core/response/contract.cjs +91 -0
- package/dist/core/response/contract.d.ts +291 -0
- package/dist/core/response/contract.mjs +91 -0
- package/dist/core/response/index.cjs +45 -0
- package/dist/core/response/index.d.ts +21 -0
- package/dist/core/response/index.mjs +39 -0
- package/dist/core/route/hooks/index.cjs +21 -0
- package/dist/core/route/hooks/index.d.ts +61 -0
- package/dist/core/route/hooks/index.mjs +16 -0
- package/dist/core/route/hooks/response.cjs +23 -0
- package/dist/core/route/hooks/response.d.ts +13 -0
- package/dist/core/route/hooks/response.mjs +21 -0
- package/dist/core/route/index.cjs +16 -0
- package/dist/core/route/index.d.ts +25 -0
- package/dist/core/route/index.mjs +10 -0
- package/dist/core/route/types/buildedRoute.d.ts +2 -0
- package/dist/core/route/types/index.d.ts +1 -0
- package/dist/core/router/buildError.cjs +14 -0
- package/dist/core/router/buildError.d.ts +9 -0
- package/dist/core/router/buildError.mjs +12 -0
- package/dist/core/router/decodeUrl.cjs +47 -0
- package/dist/core/router/decodeUrl.d.ts +7 -0
- package/dist/core/router/decodeUrl.mjs +43 -0
- package/dist/core/router/index.cjs +108 -0
- package/dist/core/router/index.d.ts +7 -0
- package/dist/core/router/index.mjs +102 -0
- package/dist/core/router/pathToRegExp.cjs +9 -0
- package/dist/core/router/pathToRegExp.d.ts +2 -0
- package/dist/core/router/pathToRegExp.mjs +7 -0
- package/dist/core/router/types/buildedRouter.d.ts +12 -0
- package/dist/core/router/types/index.d.ts +1 -0
- package/dist/core/steps/checker.cjs +13 -0
- package/dist/core/steps/checker.d.ts +19 -0
- package/dist/core/steps/checker.mjs +10 -0
- package/dist/core/steps/cut.cjs +15 -0
- package/dist/core/steps/cut.d.ts +22 -0
- package/dist/core/steps/cut.mjs +11 -0
- package/dist/core/steps/extract.cjs +13 -0
- package/dist/core/steps/extract.d.ts +18 -0
- package/dist/core/steps/extract.mjs +10 -0
- package/dist/core/steps/handler.cjs +13 -0
- package/dist/core/steps/handler.d.ts +19 -0
- package/dist/core/steps/handler.mjs +10 -0
- package/dist/core/steps/identifier.cjs +7 -0
- package/dist/core/steps/identifier.d.ts +5 -0
- package/dist/core/steps/identifier.mjs +5 -0
- package/dist/core/steps/index.d.ts +9 -0
- package/dist/core/steps/kind.cjs +7 -0
- package/dist/core/steps/kind.d.ts +3 -0
- package/dist/core/steps/kind.mjs +5 -0
- package/dist/core/steps/presetChecker.cjs +13 -0
- package/dist/core/steps/presetChecker.d.ts +14 -0
- package/dist/core/steps/presetChecker.mjs +10 -0
- package/dist/core/steps/process.cjs +13 -0
- package/dist/core/steps/process.d.ts +14 -0
- package/dist/core/steps/process.mjs +10 -0
- package/dist/core/steps/types/buildedStep.d.ts +5 -0
- package/dist/core/steps/types/index.d.ts +3 -0
- package/dist/core/steps/types/stepFunctionParams.d.ts +12 -0
- package/dist/core/steps/types/steps.d.ts +11 -0
- package/dist/core/stringIdentifier.cjs +7 -0
- package/dist/core/stringIdentifier.d.ts +1 -0
- package/dist/core/stringIdentifier.mjs +5 -0
- package/dist/core/types/environment.d.ts +4 -0
- package/dist/core/types/index.d.ts +1 -0
- package/dist/interfaces/bun/index.cjs +16 -0
- package/dist/interfaces/bun/index.d.ts +2 -0
- package/dist/interfaces/bun/index.mjs +10 -0
- package/dist/interfaces/bun/kind.cjs +9 -0
- package/dist/interfaces/bun/kind.d.ts +6 -0
- package/dist/interfaces/bun/kind.mjs +7 -0
- package/dist/interfaces/bun/types/index.d.ts +1 -0
- package/dist/interfaces/bun/types/request.d.ts +21 -0
- package/dist/interfaces/deno/index.cjs +7 -0
- package/dist/interfaces/deno/index.d.ts +2 -0
- package/dist/interfaces/deno/index.mjs +1 -0
- package/dist/interfaces/deno/kind.cjs +9 -0
- package/dist/interfaces/deno/kind.d.ts +6 -0
- package/dist/interfaces/deno/kind.mjs +7 -0
- package/dist/interfaces/deno/types/index.d.ts +1 -0
- package/dist/interfaces/deno/types/request.d.ts +21 -0
- package/dist/interfaces/node/createHttpServer.cjs +65 -0
- package/dist/interfaces/node/createHttpServer.d.ts +23 -0
- package/dist/interfaces/node/createHttpServer.mjs +63 -0
- package/dist/interfaces/node/error/bodyParseUnknownError.cjs +16 -0
- package/dist/interfaces/node/error/bodyParseUnknownError.d.ts +9 -0
- package/dist/interfaces/node/error/bodyParseUnknownError.mjs +14 -0
- package/dist/interfaces/node/error/bodyParseWrongChunkReceived.cjs +14 -0
- package/dist/interfaces/node/error/bodyParseWrongChunkReceived.d.ts +8 -0
- package/dist/interfaces/node/error/bodyParseWrongChunkReceived.mjs +12 -0
- package/dist/interfaces/node/error/bodySizeExceedsLimitError.cjs +14 -0
- package/dist/interfaces/node/error/bodySizeExceedsLimitError.d.ts +9 -0
- package/dist/interfaces/node/error/bodySizeExceedsLimitError.mjs +12 -0
- package/dist/interfaces/node/error/index.d.ts +3 -0
- package/dist/interfaces/node/hooks.cjs +119 -0
- package/dist/interfaces/node/hooks.d.ts +8 -0
- package/dist/interfaces/node/hooks.mjs +117 -0
- package/dist/interfaces/node/index.cjs +26 -0
- package/dist/interfaces/node/index.d.ts +5 -0
- package/dist/interfaces/node/index.mjs +15 -0
- package/dist/interfaces/node/kind.cjs +9 -0
- package/dist/interfaces/node/kind.d.ts +6 -0
- package/dist/interfaces/node/kind.mjs +7 -0
- package/dist/interfaces/node/types/host.d.ts +4 -0
- package/dist/interfaces/node/types/index.d.ts +2 -0
- package/dist/interfaces/node/types/request.d.ts +23 -0
- package/package.json +82 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import '../../../steps/kind.mjs';
|
|
2
|
+
import '../../../steps/identifier.mjs';
|
|
3
|
+
import '../../../steps/checker.mjs';
|
|
4
|
+
import '../../../steps/extract.mjs';
|
|
5
|
+
import '../../../steps/cut.mjs';
|
|
6
|
+
import '../../../steps/handler.mjs';
|
|
7
|
+
import { processStepKind } from '../../../steps/process.mjs';
|
|
8
|
+
import '../../../steps/presetChecker.mjs';
|
|
9
|
+
import { Response } from '../../../response/index.mjs';
|
|
10
|
+
import { createStepFunctionBuilder } from '../create.mjs';
|
|
11
|
+
import { E, pipe, P, or, isType, forward, A, G, unwrap } from '@duplojs/utils';
|
|
12
|
+
|
|
13
|
+
function buildStepsFunction(steps, buildStep) {
|
|
14
|
+
return G.asyncReduce(steps, G.reduceFrom([]), async ({ lastValue, element: step, next, exit }) => {
|
|
15
|
+
const result = await buildStep(step);
|
|
16
|
+
if (E.isLeft(result)) {
|
|
17
|
+
return exit(result);
|
|
18
|
+
}
|
|
19
|
+
return next(A.push(lastValue, unwrap(result)));
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
const defaultProcessStepFunctionBuilder = createStepFunctionBuilder(processStepKind.has, async (step, { success, buildStep }) => {
|
|
23
|
+
const { process, imports, options: stepOptions, } = step.definition;
|
|
24
|
+
const { steps, hooks: processHook, options: processOptions, } = process.definition;
|
|
25
|
+
const maybeBuildedSteps = await buildStepsFunction(steps, buildStep);
|
|
26
|
+
if (E.isLeft(maybeBuildedSteps)) {
|
|
27
|
+
return maybeBuildedSteps;
|
|
28
|
+
}
|
|
29
|
+
const buildedSteps = maybeBuildedSteps;
|
|
30
|
+
const getOptions = pipe(stepOptions ?? processOptions, P.when(or([
|
|
31
|
+
isType("object"),
|
|
32
|
+
isType("undefined"),
|
|
33
|
+
]), (options) => (() => options)), P.otherwise(forward));
|
|
34
|
+
return success({
|
|
35
|
+
buildedFunction: async (request, floor) => {
|
|
36
|
+
let processFloor = { options: getOptions(floor) };
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/prefer-for-of
|
|
38
|
+
for (let index = 0; index < buildedSteps.length; index++) {
|
|
39
|
+
const result = await buildedSteps[index].buildedFunction(request, floor);
|
|
40
|
+
if (result instanceof Response) {
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
processFloor = result;
|
|
44
|
+
}
|
|
45
|
+
if (imports) {
|
|
46
|
+
const newFloor = { ...floor };
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/prefer-for-of
|
|
48
|
+
for (let index = 0; index < imports.length; index++) {
|
|
49
|
+
newFloor[imports[index]] = processFloor[imports[index]];
|
|
50
|
+
}
|
|
51
|
+
return newFloor;
|
|
52
|
+
}
|
|
53
|
+
return floor;
|
|
54
|
+
},
|
|
55
|
+
hooksRouteLifeCycle: [
|
|
56
|
+
...processHook,
|
|
57
|
+
...A.flatMap(buildedSteps, ({ hooksRouteLifeCycle }) => hooksRouteLifeCycle),
|
|
58
|
+
],
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
export { buildStepsFunction, defaultProcessStepFunctionBuilder };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('../response/index.cjs');
|
|
4
|
+
var contract = require('../response/contract.cjs');
|
|
5
|
+
|
|
6
|
+
const defaultExtractContract = contract.ResponseContract.unprocessableContent("extract-error");
|
|
7
|
+
|
|
8
|
+
exports.defaultExtractContract = defaultExtractContract;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ResponseContract } from "../response";
|
|
2
|
+
export declare const defaultExtractContract: NoInfer<ResponseContract.Contract<"422", "extract-error", import("@duplojs/utils/dataParser").DataParserEmpty<{
|
|
3
|
+
readonly errorMessage?: string | undefined;
|
|
4
|
+
readonly coerce: boolean;
|
|
5
|
+
readonly checkers: readonly [];
|
|
6
|
+
}>>>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('../response/index.cjs');
|
|
4
|
+
require('../steps/kind.cjs');
|
|
5
|
+
require('../steps/identifier.cjs');
|
|
6
|
+
require('../steps/checker.cjs');
|
|
7
|
+
require('../steps/extract.cjs');
|
|
8
|
+
require('../steps/cut.cjs');
|
|
9
|
+
var handler = require('../steps/handler.cjs');
|
|
10
|
+
require('../steps/process.cjs');
|
|
11
|
+
require('../steps/presetChecker.cjs');
|
|
12
|
+
var utils = require('@duplojs/utils');
|
|
13
|
+
var contract = require('../response/contract.cjs');
|
|
14
|
+
|
|
15
|
+
const defaultNotfoundHandler = handler.createHandlerStep({
|
|
16
|
+
responseContract: contract.ResponseContract.notFound("notfound-route", utils.DP.string()),
|
|
17
|
+
theFunction: (floor, { request, response }) => response("notfound-route", `${request.method}:${request.path}`),
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
exports.defaultNotfoundHandler = defaultNotfoundHandler;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ResponseContract } from "../response";
|
|
2
|
+
import { DP } from "@duplojs/utils";
|
|
3
|
+
export declare const defaultNotfoundHandler: import("../steps").HandlerStep<{
|
|
4
|
+
responseContract: NoInfer<ResponseContract.Contract<"404", "notfound-route", DP.DataParserString<{
|
|
5
|
+
readonly errorMessage?: string | undefined;
|
|
6
|
+
readonly coerce: boolean;
|
|
7
|
+
readonly checkers: readonly [];
|
|
8
|
+
}>>>;
|
|
9
|
+
theFunction: (floor: import("..").Floor, { request, response }: import("../steps").HandlerStepFunctionParams<import("..").Request, import("../response").Response<import("../response").ResponseCode, string, unknown>>) => never;
|
|
10
|
+
}>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import '../response/index.mjs';
|
|
2
|
+
import '../steps/kind.mjs';
|
|
3
|
+
import '../steps/identifier.mjs';
|
|
4
|
+
import '../steps/checker.mjs';
|
|
5
|
+
import '../steps/extract.mjs';
|
|
6
|
+
import '../steps/cut.mjs';
|
|
7
|
+
import { createHandlerStep } from '../steps/handler.mjs';
|
|
8
|
+
import '../steps/process.mjs';
|
|
9
|
+
import '../steps/presetChecker.mjs';
|
|
10
|
+
import { DP } from '@duplojs/utils';
|
|
11
|
+
import { ResponseContract } from '../response/contract.mjs';
|
|
12
|
+
|
|
13
|
+
const defaultNotfoundHandler = createHandlerStep({
|
|
14
|
+
responseContract: ResponseContract.notFound("notfound-route", DP.string()),
|
|
15
|
+
theFunction: (floor, { request, response }) => response("notfound-route", `${request.method}:${request.path}`),
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export { defaultNotfoundHandler };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var utils = require('@duplojs/utils');
|
|
4
|
+
var kind = require('../kind.cjs');
|
|
5
|
+
|
|
6
|
+
const hookServerExitKind = kind.createCoreLibKind("server-hook-exit");
|
|
7
|
+
const hookServerNextKind = kind.createCoreLibKind("server-hook-next");
|
|
8
|
+
async function launchHookBeforeBuildRoute(hooks, route) {
|
|
9
|
+
return utils.G.asyncReduce(hooks, utils.G.reduceFrom(route), async ({ element: hook, lastValue, next, }) => next(await hook(lastValue)));
|
|
10
|
+
}
|
|
11
|
+
async function launchHookServer(hooks, hub, httpServerParams) {
|
|
12
|
+
return utils.G.asyncReduce(hooks, utils.G.reduceFrom(hub), async ({ element: hook, lastValue, next, }) => next((await hook(lastValue, httpServerParams)) ?? lastValue));
|
|
13
|
+
}
|
|
14
|
+
const hookExit = hookServerExitKind.setTo({});
|
|
15
|
+
const hookNext = hookServerNextKind.setTo({});
|
|
16
|
+
function serverErrorExitHookFunction() {
|
|
17
|
+
return hookExit;
|
|
18
|
+
}
|
|
19
|
+
function serverErrorNextHookFunction() {
|
|
20
|
+
return hookNext;
|
|
21
|
+
}
|
|
22
|
+
async function launchHookServerError(hooks, params) {
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/prefer-for-of
|
|
24
|
+
for (let index = 0; index < hooks.length; index++) {
|
|
25
|
+
const result = await hooks[index](params);
|
|
26
|
+
if (hookServerExitKind.has(result)) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
exports.hookServerExitKind = hookServerExitKind;
|
|
33
|
+
exports.hookServerNextKind = hookServerNextKind;
|
|
34
|
+
exports.launchHookBeforeBuildRoute = launchHookBeforeBuildRoute;
|
|
35
|
+
exports.launchHookServer = launchHookServer;
|
|
36
|
+
exports.launchHookServerError = launchHookServerError;
|
|
37
|
+
exports.serverErrorExitHookFunction = serverErrorExitHookFunction;
|
|
38
|
+
exports.serverErrorNextHookFunction = serverErrorNextHookFunction;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type Route } from "../route";
|
|
2
|
+
import { type EscapeVoid, type Kind, type MaybePromise } from "@duplojs/utils";
|
|
3
|
+
import { type Hub } from ".";
|
|
4
|
+
export declare const hookServerExitKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/server-hook-exit", unknown>>;
|
|
5
|
+
export interface ServerHookExit extends Kind<typeof hookServerExitKind.definition> {
|
|
6
|
+
}
|
|
7
|
+
export declare const hookServerNextKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/server-hook-next", unknown>>;
|
|
8
|
+
export interface ServerHookNext extends Kind<typeof hookServerNextKind.definition> {
|
|
9
|
+
}
|
|
10
|
+
export type HookBeforeBuildRoute = (route: Route) => MaybePromise<Route>;
|
|
11
|
+
export declare function launchHookBeforeBuildRoute(hooks: Iterable<HookBeforeBuildRoute>, route: Route): Promise<Route<import("../route").RouteDefinition>>;
|
|
12
|
+
export interface HttpServerParams {
|
|
13
|
+
}
|
|
14
|
+
export type HookBeforeServerBuildRoute = (hub: Hub, httpServerParams: HttpServerParams) => MaybePromise<Hub | EscapeVoid>;
|
|
15
|
+
export type HookBeforeStartServer = (hub: Hub, httpServerParams: HttpServerParams) => MaybePromise<Hub | EscapeVoid>;
|
|
16
|
+
export type HookAfterStartServer = (hub: Hub, httpServerParams: HttpServerParams) => MaybePromise<Hub | EscapeVoid>;
|
|
17
|
+
export declare function launchHookServer(hooks: Iterable<HookBeforeStartServer | HookAfterStartServer | HookBeforeServerBuildRoute>, hub: Hub, httpServerParams: HttpServerParams): Promise<Hub<import(".").HubConfig>>;
|
|
18
|
+
export interface HttpServerErrorParams {
|
|
19
|
+
readonly error: unknown;
|
|
20
|
+
next(): ServerHookNext;
|
|
21
|
+
exit(): ServerHookExit;
|
|
22
|
+
}
|
|
23
|
+
export type HookServerError = (httpServerErrorParams: HttpServerErrorParams) => MaybePromise<ServerHookExit | ServerHookNext>;
|
|
24
|
+
export declare function serverErrorExitHookFunction(): Kind<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/server-hook-exit", unknown>, unknown>;
|
|
25
|
+
export declare function serverErrorNextHookFunction(): Kind<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/server-hook-next", unknown>, unknown>;
|
|
26
|
+
export declare function launchHookServerError(hooks: readonly HookServerError[], params: HttpServerErrorParams): Promise<void>;
|
|
27
|
+
export interface HookHubLifeCycle {
|
|
28
|
+
beforeBuildRoute?: HookBeforeBuildRoute;
|
|
29
|
+
beforeStartServer?: HookBeforeStartServer;
|
|
30
|
+
afterStartServer?: HookAfterStartServer;
|
|
31
|
+
beforeServerBuildRoute?: HookBeforeServerBuildRoute;
|
|
32
|
+
serverError?: HookServerError;
|
|
33
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { G } from '@duplojs/utils';
|
|
2
|
+
import { createCoreLibKind } from '../kind.mjs';
|
|
3
|
+
|
|
4
|
+
const hookServerExitKind = createCoreLibKind("server-hook-exit");
|
|
5
|
+
const hookServerNextKind = createCoreLibKind("server-hook-next");
|
|
6
|
+
async function launchHookBeforeBuildRoute(hooks, route) {
|
|
7
|
+
return G.asyncReduce(hooks, G.reduceFrom(route), async ({ element: hook, lastValue, next, }) => next(await hook(lastValue)));
|
|
8
|
+
}
|
|
9
|
+
async function launchHookServer(hooks, hub, httpServerParams) {
|
|
10
|
+
return G.asyncReduce(hooks, G.reduceFrom(hub), async ({ element: hook, lastValue, next, }) => next((await hook(lastValue, httpServerParams)) ?? lastValue));
|
|
11
|
+
}
|
|
12
|
+
const hookExit = hookServerExitKind.setTo({});
|
|
13
|
+
const hookNext = hookServerNextKind.setTo({});
|
|
14
|
+
function serverErrorExitHookFunction() {
|
|
15
|
+
return hookExit;
|
|
16
|
+
}
|
|
17
|
+
function serverErrorNextHookFunction() {
|
|
18
|
+
return hookNext;
|
|
19
|
+
}
|
|
20
|
+
async function launchHookServerError(hooks, params) {
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/prefer-for-of
|
|
22
|
+
for (let index = 0; index < hooks.length; index++) {
|
|
23
|
+
const result = await hooks[index](params);
|
|
24
|
+
if (hookServerExitKind.has(result)) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { hookServerExitKind, hookServerNextKind, launchHookBeforeBuildRoute, launchHookServer, launchHookServerError, serverErrorExitHookFunction, serverErrorNextHookFunction };
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var kind = require('../kind.cjs');
|
|
4
|
+
var index = require('../route/index.cjs');
|
|
5
|
+
var utils = require('@duplojs/utils');
|
|
6
|
+
require('../steps/kind.cjs');
|
|
7
|
+
require('../steps/identifier.cjs');
|
|
8
|
+
require('../steps/checker.cjs');
|
|
9
|
+
require('../steps/extract.cjs');
|
|
10
|
+
require('../steps/cut.cjs');
|
|
11
|
+
var handler = require('../steps/handler.cjs');
|
|
12
|
+
require('../steps/process.cjs');
|
|
13
|
+
require('../steps/presetChecker.cjs');
|
|
14
|
+
var request = require('../request.cjs');
|
|
15
|
+
var defaultNotfoundHandler = require('./defaultNotfoundHandler.cjs');
|
|
16
|
+
var defaultExtractContract = require('./defaultExtractContract.cjs');
|
|
17
|
+
var hooks = require('./hooks.cjs');
|
|
18
|
+
|
|
19
|
+
const hubKind = kind.createCoreLibKind("hub");
|
|
20
|
+
function createHub(config) {
|
|
21
|
+
return {
|
|
22
|
+
...hubKind.addTo({}),
|
|
23
|
+
config,
|
|
24
|
+
plugins: [],
|
|
25
|
+
hooksHubLifeCycle: [],
|
|
26
|
+
hooksRouteLifeCycle: [],
|
|
27
|
+
routeFunctionBuilders: [],
|
|
28
|
+
routes: [],
|
|
29
|
+
stepFunctionBuilders: [],
|
|
30
|
+
notfoundHandler: defaultNotfoundHandler.defaultNotfoundHandler,
|
|
31
|
+
defaultExtractContract: defaultExtractContract.defaultExtractContract,
|
|
32
|
+
classRequest: request.Request,
|
|
33
|
+
addHubHooks(hook) {
|
|
34
|
+
return {
|
|
35
|
+
...this,
|
|
36
|
+
hooksHubLifeCycle: utils.A.concat(this.hooksHubLifeCycle, utils.A.coalescing(hook)),
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
addRouteFunctionBuilder(functionBuilder) {
|
|
40
|
+
return {
|
|
41
|
+
...this,
|
|
42
|
+
routeFunctionBuilders: utils.A.concat(this.routeFunctionBuilders, utils.A.coalescing(functionBuilder)),
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
addRouteHooks(hook) {
|
|
46
|
+
return {
|
|
47
|
+
...this,
|
|
48
|
+
hooksRouteLifeCycle: utils.A.concat(this.hooksRouteLifeCycle, utils.A.coalescing(hook)),
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
addStepFunctionBuilder(hook) {
|
|
52
|
+
return {
|
|
53
|
+
...this,
|
|
54
|
+
stepFunctionBuilders: utils.A.concat(this.stepFunctionBuilders, utils.A.coalescing(hook)),
|
|
55
|
+
};
|
|
56
|
+
},
|
|
57
|
+
plug(plugin) {
|
|
58
|
+
return {
|
|
59
|
+
...this,
|
|
60
|
+
plugins: utils.A.push(this.plugins, typeof plugin === "function"
|
|
61
|
+
? plugin(this)
|
|
62
|
+
: plugin),
|
|
63
|
+
};
|
|
64
|
+
},
|
|
65
|
+
register(route) {
|
|
66
|
+
return {
|
|
67
|
+
...this,
|
|
68
|
+
routes: utils.A.concat(this.routes, utils.pipe(route, utils.P.when(index.routeKind.has, utils.A.coalescing), utils.P.when(utils.isType("iterable"), utils.A.from), utils.P.otherwise(utils.O.values))),
|
|
69
|
+
};
|
|
70
|
+
},
|
|
71
|
+
setDefaultExtractContract(defaultExtractContract) {
|
|
72
|
+
return {
|
|
73
|
+
...this,
|
|
74
|
+
defaultExtractContract,
|
|
75
|
+
};
|
|
76
|
+
},
|
|
77
|
+
setNotfoundHandler(responseContract, theFunction) {
|
|
78
|
+
return {
|
|
79
|
+
...this,
|
|
80
|
+
notfoundHandler: handler.createHandlerStep({
|
|
81
|
+
responseContract,
|
|
82
|
+
theFunction: (floor, params) => theFunction(params),
|
|
83
|
+
}),
|
|
84
|
+
};
|
|
85
|
+
},
|
|
86
|
+
aggregates() {
|
|
87
|
+
return utils.A.reduce(this.plugins, utils.A.reduceFrom({
|
|
88
|
+
hooksRouteLifeCycle: this.hooksRouteLifeCycle,
|
|
89
|
+
routeFunctionBuilders: this.routeFunctionBuilders,
|
|
90
|
+
stepFunctionBuilders: this.stepFunctionBuilders,
|
|
91
|
+
routes: this.routes,
|
|
92
|
+
hooksHubLifeCycle: this.hooksHubLifeCycle,
|
|
93
|
+
}), ({ lastValue, element: plugin, next, }) => next({
|
|
94
|
+
hooksRouteLifeCycle: plugin.hooksRouteLifeCycle
|
|
95
|
+
? utils.A.concat(lastValue.hooksRouteLifeCycle, plugin.hooksRouteLifeCycle)
|
|
96
|
+
: lastValue.hooksRouteLifeCycle,
|
|
97
|
+
routeFunctionBuilders: plugin.routeFunctionBuilders
|
|
98
|
+
? utils.A.concat(lastValue.routeFunctionBuilders, plugin.routeFunctionBuilders)
|
|
99
|
+
: lastValue.routeFunctionBuilders,
|
|
100
|
+
stepFunctionBuilders: plugin.stepFunctionBuilders
|
|
101
|
+
? utils.A.concat(lastValue.stepFunctionBuilders, plugin.stepFunctionBuilders)
|
|
102
|
+
: lastValue.stepFunctionBuilders,
|
|
103
|
+
routes: plugin.routes
|
|
104
|
+
? utils.A.concat(lastValue.routes, plugin.routes)
|
|
105
|
+
: lastValue.routes,
|
|
106
|
+
hooksHubLifeCycle: plugin.hooksHubLifeCycle
|
|
107
|
+
? utils.A.concat(lastValue.hooksHubLifeCycle, plugin.hooksHubLifeCycle)
|
|
108
|
+
: lastValue.hooksHubLifeCycle,
|
|
109
|
+
}));
|
|
110
|
+
},
|
|
111
|
+
aggregatesRoutes() {
|
|
112
|
+
return utils.A.reduce(this.plugins, utils.A.reduceFrom(this.routes), ({ lastValue, element: { routes }, next, }) => routes
|
|
113
|
+
? next(utils.A.concat(lastValue, routes))
|
|
114
|
+
: next(lastValue));
|
|
115
|
+
},
|
|
116
|
+
aggregatesRouteFunctionBuilders() {
|
|
117
|
+
return utils.A.reduce(this.plugins, utils.A.reduceFrom(this.routeFunctionBuilders), ({ lastValue, element: { routeFunctionBuilders }, next, }) => routeFunctionBuilders
|
|
118
|
+
? next(utils.A.concat(lastValue, routeFunctionBuilders))
|
|
119
|
+
: next(lastValue));
|
|
120
|
+
},
|
|
121
|
+
aggregatesStepFunctionBuilders() {
|
|
122
|
+
return utils.A.reduce(this.plugins, utils.A.reduceFrom(this.stepFunctionBuilders), ({ lastValue, element: { stepFunctionBuilders }, next, }) => stepFunctionBuilders
|
|
123
|
+
? next(utils.A.concat(lastValue, stepFunctionBuilders))
|
|
124
|
+
: next(lastValue));
|
|
125
|
+
},
|
|
126
|
+
aggregatesHooksHubLifeCycle(hookName) {
|
|
127
|
+
const hooks = utils.A.flatMap(this.hooksHubLifeCycle, (hooks) => hooks[hookName] ?? []);
|
|
128
|
+
return utils.A.reduce(this.plugins, utils.A.reduceFrom(hooks), ({ lastValue, element: { hooksHubLifeCycle }, next, }) => {
|
|
129
|
+
if (!hooksHubLifeCycle) {
|
|
130
|
+
return next(lastValue);
|
|
131
|
+
}
|
|
132
|
+
return next(utils.A.concat(lastValue, utils.A.flatMap(hooksHubLifeCycle, (hooks) => hooks[hookName] ?? [])));
|
|
133
|
+
});
|
|
134
|
+
},
|
|
135
|
+
aggregatesHooksRouteLifeCycle(hookName) {
|
|
136
|
+
const hooks = utils.A.flatMap(this.hooksRouteLifeCycle, (hooks) => hooks[hookName] ?? []);
|
|
137
|
+
return utils.A.reduce(this.plugins, utils.A.reduceFrom(hooks), ({ lastValue, element: { hooksRouteLifeCycle }, next, }) => {
|
|
138
|
+
if (!hooksRouteLifeCycle) {
|
|
139
|
+
return next(lastValue);
|
|
140
|
+
}
|
|
141
|
+
return next(utils.A.concat(lastValue, utils.A.flatMap(hooksRouteLifeCycle, (hooks) => hooks[hookName] ?? [])));
|
|
142
|
+
});
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
exports.defaultNotfoundHandler = defaultNotfoundHandler.defaultNotfoundHandler;
|
|
148
|
+
exports.defaultExtractContract = defaultExtractContract.defaultExtractContract;
|
|
149
|
+
exports.hookServerExitKind = hooks.hookServerExitKind;
|
|
150
|
+
exports.hookServerNextKind = hooks.hookServerNextKind;
|
|
151
|
+
exports.launchHookBeforeBuildRoute = hooks.launchHookBeforeBuildRoute;
|
|
152
|
+
exports.launchHookServer = hooks.launchHookServer;
|
|
153
|
+
exports.launchHookServerError = hooks.launchHookServerError;
|
|
154
|
+
exports.serverErrorExitHookFunction = hooks.serverErrorExitHookFunction;
|
|
155
|
+
exports.serverErrorNextHookFunction = hooks.serverErrorNextHookFunction;
|
|
156
|
+
exports.createHub = createHub;
|
|
157
|
+
exports.hubKind = hubKind;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { type Route, type HookRouteLifeCycle } from "../route";
|
|
2
|
+
import { type Kind, type MaybeArray, type MaybePromise, type DP } from "@duplojs/utils";
|
|
3
|
+
import { type HookHubLifeCycle } from "./hooks";
|
|
4
|
+
import { type HandlerStepFunctionParams, type HandlerStep } from "../steps";
|
|
5
|
+
import { Request } from "../request";
|
|
6
|
+
import { type ClientErrorResponseCode, type ResponseContract } from "../response";
|
|
7
|
+
import { type Environment } from "../types";
|
|
8
|
+
import { type createStepFunctionBuilder } from "../functionsBuilders/steps";
|
|
9
|
+
import { type createRouteFunctionBuilder } from "../functionsBuilders/route";
|
|
10
|
+
export * from "./hooks";
|
|
11
|
+
export * from "./defaultNotfoundHandler";
|
|
12
|
+
export * from "./defaultExtractContract";
|
|
13
|
+
export declare const hubKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/hub", unknown>>;
|
|
14
|
+
export interface HubConfig {
|
|
15
|
+
readonly environment: Environment;
|
|
16
|
+
}
|
|
17
|
+
export interface HubPlugin {
|
|
18
|
+
readonly name: string;
|
|
19
|
+
readonly hooksRouteLifeCycle?: readonly HookRouteLifeCycle[];
|
|
20
|
+
readonly hooksHubLifeCycle?: readonly HookHubLifeCycle[];
|
|
21
|
+
readonly routes?: readonly Route[];
|
|
22
|
+
readonly routeFunctionBuilders?: readonly ReturnType<typeof createRouteFunctionBuilder>[];
|
|
23
|
+
readonly stepFunctionBuilders?: readonly ReturnType<typeof createStepFunctionBuilder>[];
|
|
24
|
+
}
|
|
25
|
+
export interface HubAggregates {
|
|
26
|
+
readonly hooksRouteLifeCycle: readonly HookRouteLifeCycle[];
|
|
27
|
+
readonly hooksHubLifeCycle: readonly HookHubLifeCycle[];
|
|
28
|
+
readonly routes: readonly Route[];
|
|
29
|
+
readonly routeFunctionBuilders: readonly ReturnType<typeof createRouteFunctionBuilder>[];
|
|
30
|
+
readonly stepFunctionBuilders: readonly ReturnType<typeof createStepFunctionBuilder>[];
|
|
31
|
+
}
|
|
32
|
+
export interface Hub<GenericConfig extends HubConfig = HubConfig> extends Kind<typeof hubKind.definition> {
|
|
33
|
+
readonly config: GenericConfig;
|
|
34
|
+
readonly plugins: readonly HubPlugin[];
|
|
35
|
+
readonly hooksRouteLifeCycle: readonly HookRouteLifeCycle[];
|
|
36
|
+
readonly hooksHubLifeCycle: readonly HookHubLifeCycle[];
|
|
37
|
+
readonly routes: readonly Route[];
|
|
38
|
+
readonly routeFunctionBuilders: readonly ReturnType<typeof createRouteFunctionBuilder>[];
|
|
39
|
+
readonly stepFunctionBuilders: readonly ReturnType<typeof createStepFunctionBuilder>[];
|
|
40
|
+
readonly classRequest: typeof Request;
|
|
41
|
+
readonly notfoundHandler: HandlerStep;
|
|
42
|
+
readonly defaultExtractContract: ResponseContract.Contract<ClientErrorResponseCode, string, DP.DataParserEmpty>;
|
|
43
|
+
register(routes: Route | Iterable<Route> | Record<string, Route>): Hub<GenericConfig>;
|
|
44
|
+
addRouteFunctionBuilder(functionBuilder: MaybeArray<ReturnType<typeof createRouteFunctionBuilder>>): Hub<GenericConfig>;
|
|
45
|
+
addStepFunctionBuilder(functionBuilder: MaybeArray<ReturnType<typeof createStepFunctionBuilder>>): Hub<GenericConfig>;
|
|
46
|
+
addRouteHooks(hook: MaybeArray<HookRouteLifeCycle>): Hub<GenericConfig>;
|
|
47
|
+
addHubHooks(hook: MaybeArray<HookHubLifeCycle>): Hub<GenericConfig>;
|
|
48
|
+
plug(plugin: HubPlugin | ((self: this) => HubPlugin)): Hub<GenericConfig>;
|
|
49
|
+
setNotfoundHandler<GenericResponseContract extends ResponseContract.Contract, GenericResponse extends ResponseContract.Convert<GenericResponseContract>>(responseContract: GenericResponseContract, theFunction: (param: HandlerStepFunctionParams<Request, GenericResponse>) => MaybePromise<GenericResponse>): Hub<GenericConfig>;
|
|
50
|
+
setDefaultExtractContract(responseContract: this["defaultExtractContract"]): Hub<GenericConfig>;
|
|
51
|
+
aggregates(): HubAggregates;
|
|
52
|
+
aggregatesRoutes(): readonly Route[];
|
|
53
|
+
aggregatesRouteFunctionBuilders(): readonly ReturnType<typeof createRouteFunctionBuilder>[];
|
|
54
|
+
aggregatesStepFunctionBuilders(): readonly ReturnType<typeof createStepFunctionBuilder>[];
|
|
55
|
+
aggregatesHooksHubLifeCycle<GenericHookName extends keyof HookHubLifeCycle>(hookName: GenericHookName): readonly Exclude<HookHubLifeCycle[GenericHookName], undefined>[];
|
|
56
|
+
aggregatesHooksRouteLifeCycle<GenericHookName extends keyof HookRouteLifeCycle>(hookName: GenericHookName): readonly Exclude<HookRouteLifeCycle[GenericHookName], undefined>[];
|
|
57
|
+
}
|
|
58
|
+
export declare function createHub<const GenericConfig extends HubConfig>(config: GenericConfig): Hub<GenericConfig>;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { createCoreLibKind } from '../kind.mjs';
|
|
2
|
+
import { routeKind } from '../route/index.mjs';
|
|
3
|
+
import { A, pipe, P, isType, O } from '@duplojs/utils';
|
|
4
|
+
import '../steps/kind.mjs';
|
|
5
|
+
import '../steps/identifier.mjs';
|
|
6
|
+
import '../steps/checker.mjs';
|
|
7
|
+
import '../steps/extract.mjs';
|
|
8
|
+
import '../steps/cut.mjs';
|
|
9
|
+
import { createHandlerStep } from '../steps/handler.mjs';
|
|
10
|
+
import '../steps/process.mjs';
|
|
11
|
+
import '../steps/presetChecker.mjs';
|
|
12
|
+
import { Request } from '../request.mjs';
|
|
13
|
+
import { defaultNotfoundHandler } from './defaultNotfoundHandler.mjs';
|
|
14
|
+
import { defaultExtractContract } from './defaultExtractContract.mjs';
|
|
15
|
+
export { hookServerExitKind, hookServerNextKind, launchHookBeforeBuildRoute, launchHookServer, launchHookServerError, serverErrorExitHookFunction, serverErrorNextHookFunction } from './hooks.mjs';
|
|
16
|
+
|
|
17
|
+
const hubKind = createCoreLibKind("hub");
|
|
18
|
+
function createHub(config) {
|
|
19
|
+
return {
|
|
20
|
+
...hubKind.addTo({}),
|
|
21
|
+
config,
|
|
22
|
+
plugins: [],
|
|
23
|
+
hooksHubLifeCycle: [],
|
|
24
|
+
hooksRouteLifeCycle: [],
|
|
25
|
+
routeFunctionBuilders: [],
|
|
26
|
+
routes: [],
|
|
27
|
+
stepFunctionBuilders: [],
|
|
28
|
+
notfoundHandler: defaultNotfoundHandler,
|
|
29
|
+
defaultExtractContract,
|
|
30
|
+
classRequest: Request,
|
|
31
|
+
addHubHooks(hook) {
|
|
32
|
+
return {
|
|
33
|
+
...this,
|
|
34
|
+
hooksHubLifeCycle: A.concat(this.hooksHubLifeCycle, A.coalescing(hook)),
|
|
35
|
+
};
|
|
36
|
+
},
|
|
37
|
+
addRouteFunctionBuilder(functionBuilder) {
|
|
38
|
+
return {
|
|
39
|
+
...this,
|
|
40
|
+
routeFunctionBuilders: A.concat(this.routeFunctionBuilders, A.coalescing(functionBuilder)),
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
addRouteHooks(hook) {
|
|
44
|
+
return {
|
|
45
|
+
...this,
|
|
46
|
+
hooksRouteLifeCycle: A.concat(this.hooksRouteLifeCycle, A.coalescing(hook)),
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
addStepFunctionBuilder(hook) {
|
|
50
|
+
return {
|
|
51
|
+
...this,
|
|
52
|
+
stepFunctionBuilders: A.concat(this.stepFunctionBuilders, A.coalescing(hook)),
|
|
53
|
+
};
|
|
54
|
+
},
|
|
55
|
+
plug(plugin) {
|
|
56
|
+
return {
|
|
57
|
+
...this,
|
|
58
|
+
plugins: A.push(this.plugins, typeof plugin === "function"
|
|
59
|
+
? plugin(this)
|
|
60
|
+
: plugin),
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
register(route) {
|
|
64
|
+
return {
|
|
65
|
+
...this,
|
|
66
|
+
routes: A.concat(this.routes, pipe(route, P.when(routeKind.has, A.coalescing), P.when(isType("iterable"), A.from), P.otherwise(O.values))),
|
|
67
|
+
};
|
|
68
|
+
},
|
|
69
|
+
setDefaultExtractContract(defaultExtractContract) {
|
|
70
|
+
return {
|
|
71
|
+
...this,
|
|
72
|
+
defaultExtractContract,
|
|
73
|
+
};
|
|
74
|
+
},
|
|
75
|
+
setNotfoundHandler(responseContract, theFunction) {
|
|
76
|
+
return {
|
|
77
|
+
...this,
|
|
78
|
+
notfoundHandler: createHandlerStep({
|
|
79
|
+
responseContract,
|
|
80
|
+
theFunction: (floor, params) => theFunction(params),
|
|
81
|
+
}),
|
|
82
|
+
};
|
|
83
|
+
},
|
|
84
|
+
aggregates() {
|
|
85
|
+
return A.reduce(this.plugins, A.reduceFrom({
|
|
86
|
+
hooksRouteLifeCycle: this.hooksRouteLifeCycle,
|
|
87
|
+
routeFunctionBuilders: this.routeFunctionBuilders,
|
|
88
|
+
stepFunctionBuilders: this.stepFunctionBuilders,
|
|
89
|
+
routes: this.routes,
|
|
90
|
+
hooksHubLifeCycle: this.hooksHubLifeCycle,
|
|
91
|
+
}), ({ lastValue, element: plugin, next, }) => next({
|
|
92
|
+
hooksRouteLifeCycle: plugin.hooksRouteLifeCycle
|
|
93
|
+
? A.concat(lastValue.hooksRouteLifeCycle, plugin.hooksRouteLifeCycle)
|
|
94
|
+
: lastValue.hooksRouteLifeCycle,
|
|
95
|
+
routeFunctionBuilders: plugin.routeFunctionBuilders
|
|
96
|
+
? A.concat(lastValue.routeFunctionBuilders, plugin.routeFunctionBuilders)
|
|
97
|
+
: lastValue.routeFunctionBuilders,
|
|
98
|
+
stepFunctionBuilders: plugin.stepFunctionBuilders
|
|
99
|
+
? A.concat(lastValue.stepFunctionBuilders, plugin.stepFunctionBuilders)
|
|
100
|
+
: lastValue.stepFunctionBuilders,
|
|
101
|
+
routes: plugin.routes
|
|
102
|
+
? A.concat(lastValue.routes, plugin.routes)
|
|
103
|
+
: lastValue.routes,
|
|
104
|
+
hooksHubLifeCycle: plugin.hooksHubLifeCycle
|
|
105
|
+
? A.concat(lastValue.hooksHubLifeCycle, plugin.hooksHubLifeCycle)
|
|
106
|
+
: lastValue.hooksHubLifeCycle,
|
|
107
|
+
}));
|
|
108
|
+
},
|
|
109
|
+
aggregatesRoutes() {
|
|
110
|
+
return A.reduce(this.plugins, A.reduceFrom(this.routes), ({ lastValue, element: { routes }, next, }) => routes
|
|
111
|
+
? next(A.concat(lastValue, routes))
|
|
112
|
+
: next(lastValue));
|
|
113
|
+
},
|
|
114
|
+
aggregatesRouteFunctionBuilders() {
|
|
115
|
+
return A.reduce(this.plugins, A.reduceFrom(this.routeFunctionBuilders), ({ lastValue, element: { routeFunctionBuilders }, next, }) => routeFunctionBuilders
|
|
116
|
+
? next(A.concat(lastValue, routeFunctionBuilders))
|
|
117
|
+
: next(lastValue));
|
|
118
|
+
},
|
|
119
|
+
aggregatesStepFunctionBuilders() {
|
|
120
|
+
return A.reduce(this.plugins, A.reduceFrom(this.stepFunctionBuilders), ({ lastValue, element: { stepFunctionBuilders }, next, }) => stepFunctionBuilders
|
|
121
|
+
? next(A.concat(lastValue, stepFunctionBuilders))
|
|
122
|
+
: next(lastValue));
|
|
123
|
+
},
|
|
124
|
+
aggregatesHooksHubLifeCycle(hookName) {
|
|
125
|
+
const hooks = A.flatMap(this.hooksHubLifeCycle, (hooks) => hooks[hookName] ?? []);
|
|
126
|
+
return A.reduce(this.plugins, A.reduceFrom(hooks), ({ lastValue, element: { hooksHubLifeCycle }, next, }) => {
|
|
127
|
+
if (!hooksHubLifeCycle) {
|
|
128
|
+
return next(lastValue);
|
|
129
|
+
}
|
|
130
|
+
return next(A.concat(lastValue, A.flatMap(hooksHubLifeCycle, (hooks) => hooks[hookName] ?? [])));
|
|
131
|
+
});
|
|
132
|
+
},
|
|
133
|
+
aggregatesHooksRouteLifeCycle(hookName) {
|
|
134
|
+
const hooks = A.flatMap(this.hooksRouteLifeCycle, (hooks) => hooks[hookName] ?? []);
|
|
135
|
+
return A.reduce(this.plugins, A.reduceFrom(hooks), ({ lastValue, element: { hooksRouteLifeCycle }, next, }) => {
|
|
136
|
+
if (!hooksRouteLifeCycle) {
|
|
137
|
+
return next(lastValue);
|
|
138
|
+
}
|
|
139
|
+
return next(A.concat(lastValue, A.flatMap(hooksRouteLifeCycle, (hooks) => hooks[hookName] ?? [])));
|
|
140
|
+
});
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export { createHub, defaultExtractContract, defaultNotfoundHandler, hubKind };
|