@duplojs/http 0.7.4 → 0.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/dist/client/getBody.cjs +3 -3
  2. package/dist/client/getBody.mjs +3 -3
  3. package/dist/client/hooks.cjs +45 -0
  4. package/dist/client/hooks.d.ts +6 -1
  5. package/dist/client/hooks.mjs +41 -1
  6. package/dist/client/httpClient.cjs +25 -1
  7. package/dist/client/httpClient.d.ts +8 -3
  8. package/dist/client/httpClient.mjs +25 -1
  9. package/dist/client/index.cjs +7 -0
  10. package/dist/client/index.d.ts +1 -0
  11. package/dist/client/index.mjs +2 -1
  12. package/dist/client/insertParamsInPath.cjs +1 -1
  13. package/dist/client/insertParamsInPath.mjs +1 -1
  14. package/dist/client/promiseRequest.cjs +83 -26
  15. package/dist/client/promiseRequest.d.ts +46 -29
  16. package/dist/client/promiseRequest.mjs +83 -26
  17. package/dist/client/queryToString.cjs +1 -1
  18. package/dist/client/queryToString.mjs +1 -1
  19. package/dist/client/serverSentEvents.cjs +231 -0
  20. package/dist/client/serverSentEvents.d.ts +2 -0
  21. package/dist/client/serverSentEvents.mjs +208 -0
  22. package/dist/client/types/clientRequestParams.d.ts +2 -0
  23. package/dist/client/types/clientResponse.d.ts +34 -3
  24. package/dist/client/types/hooks.d.ts +17 -7
  25. package/dist/client/types/promiseRequestParams.d.ts +1 -0
  26. package/dist/client/types/serverRoute.d.ts +2 -0
  27. package/dist/core/builders/route/handler.d.ts +5 -2
  28. package/dist/core/defaultHooks/index.cjs +8 -0
  29. package/dist/core/defaultHooks/index.d.ts +1 -1
  30. package/dist/core/defaultHooks/index.mjs +8 -0
  31. package/dist/core/functionsBuilders/route/default.cjs +9 -13
  32. package/dist/core/functionsBuilders/route/default.mjs +2 -6
  33. package/dist/core/functionsBuilders/steps/create.d.ts +2 -2
  34. package/dist/core/functionsBuilders/steps/defaults/cutStep.cjs +1 -1
  35. package/dist/core/functionsBuilders/steps/defaults/cutStep.mjs +1 -1
  36. package/dist/core/functionsBuilders/steps/defaults/handlerStep.cjs +37 -17
  37. package/dist/core/functionsBuilders/steps/defaults/handlerStep.mjs +37 -17
  38. package/dist/core/functionsBuilders/steps/defaults/processStep.cjs +3 -3
  39. package/dist/core/functionsBuilders/steps/defaults/processStep.mjs +3 -3
  40. package/dist/core/hub/defaultEmptyReaderImplementation.cjs +9 -0
  41. package/dist/core/hub/defaultEmptyReaderImplementation.d.ts +1 -0
  42. package/dist/core/hub/defaultEmptyReaderImplementation.mjs +7 -0
  43. package/dist/core/hub/defaultMalformedUrlHandler.cjs +14 -0
  44. package/dist/core/hub/defaultMalformedUrlHandler.d.ts +10 -0
  45. package/dist/core/hub/defaultMalformedUrlHandler.mjs +12 -0
  46. package/dist/core/hub/defaultNotfoundHandler.d.ts +1 -1
  47. package/dist/core/hub/index.cjs +14 -1
  48. package/dist/core/hub/index.d.ts +4 -0
  49. package/dist/core/hub/index.mjs +13 -2
  50. package/dist/core/implementHttpServer.cjs +7 -2
  51. package/dist/core/implementHttpServer.d.ts +7 -1
  52. package/dist/core/implementHttpServer.mjs +5 -0
  53. package/dist/core/index.cjs +18 -0
  54. package/dist/core/index.d.ts +1 -0
  55. package/dist/core/index.mjs +8 -2
  56. package/dist/core/request/bodyController/base.cjs +24 -6
  57. package/dist/core/request/bodyController/base.d.ts +9 -0
  58. package/dist/core/request/bodyController/base.mjs +25 -8
  59. package/dist/core/request/bodyController/empty.cjs +11 -0
  60. package/dist/core/request/bodyController/empty.d.ts +3 -0
  61. package/dist/core/request/bodyController/empty.mjs +8 -0
  62. package/dist/core/request/bodyController/formData.d.ts +2 -2
  63. package/dist/core/request/bodyController/index.cjs +4 -0
  64. package/dist/core/request/bodyController/index.d.ts +1 -0
  65. package/dist/core/request/bodyController/index.mjs +2 -1
  66. package/dist/core/request/index.cjs +5 -0
  67. package/dist/core/request/index.d.ts +1 -1
  68. package/dist/core/request/index.mjs +6 -1
  69. package/dist/core/response/contract.cjs +17 -4
  70. package/dist/core/response/contract.d.ts +19 -4
  71. package/dist/core/response/contract.mjs +17 -4
  72. package/dist/core/response/index.cjs +2 -0
  73. package/dist/core/response/index.d.ts +1 -0
  74. package/dist/core/response/index.mjs +1 -0
  75. package/dist/core/response/serverSentEventsPredicted.cjs +23 -0
  76. package/dist/core/response/serverSentEventsPredicted.d.ts +14 -0
  77. package/dist/core/response/serverSentEventsPredicted.mjs +21 -0
  78. package/dist/core/route/hooks.cjs +9 -0
  79. package/dist/core/route/hooks.d.ts +10 -9
  80. package/dist/core/route/hooks.mjs +9 -1
  81. package/dist/core/route/index.cjs +1 -0
  82. package/dist/core/route/index.mjs +1 -1
  83. package/dist/core/router/buildSystemRoute.cjs +33 -0
  84. package/dist/core/router/buildSystemRoute.d.ts +11 -0
  85. package/dist/core/router/buildSystemRoute.mjs +31 -0
  86. package/dist/core/router/decodeUrl.cjs +5 -4
  87. package/dist/core/router/decodeUrl.d.ts +1 -1
  88. package/dist/core/router/decodeUrl.mjs +5 -4
  89. package/dist/core/router/index.cjs +24 -23
  90. package/dist/core/router/index.d.ts +1 -0
  91. package/dist/core/router/index.mjs +25 -25
  92. package/dist/core/serverSentEvents.cjs +96 -0
  93. package/dist/core/serverSentEvents.d.ts +33 -0
  94. package/dist/core/serverSentEvents.mjs +96 -0
  95. package/dist/core/steps/cut.d.ts +2 -2
  96. package/dist/core/steps/handler.d.ts +10 -5
  97. package/dist/interfaces/node/bodyReaders/formData/index.cjs +33 -14
  98. package/dist/interfaces/node/bodyReaders/formData/index.mjs +34 -15
  99. package/dist/interfaces/node/bodyReaders/formData/readRequestFormData.cjs +8 -11
  100. package/dist/interfaces/node/bodyReaders/formData/readRequestFormData.mjs +8 -11
  101. package/dist/interfaces/node/createHttpServer.cjs +2 -3
  102. package/dist/interfaces/node/createHttpServer.mjs +2 -3
  103. package/dist/interfaces/node/hooks/index.cjs +61 -38
  104. package/dist/interfaces/node/hooks/index.d.ts +6 -4
  105. package/dist/interfaces/node/hooks/index.mjs +61 -38
  106. package/dist/interfaces/node/index.cjs +1 -1
  107. package/dist/interfaces/node/index.mjs +1 -1
  108. package/dist/plugins/cacheController/createResponseHeader.cjs +43 -0
  109. package/dist/plugins/cacheController/createResponseHeader.d.ts +2 -0
  110. package/dist/plugins/cacheController/createResponseHeader.mjs +41 -0
  111. package/dist/plugins/cacheController/hooks.cjs +23 -0
  112. package/dist/plugins/cacheController/hooks.d.ts +4 -0
  113. package/dist/plugins/cacheController/hooks.mjs +21 -0
  114. package/dist/plugins/cacheController/index.cjs +10 -0
  115. package/dist/plugins/cacheController/index.d.ts +3 -0
  116. package/dist/plugins/cacheController/index.mjs +3 -0
  117. package/dist/plugins/cacheController/types/cacheControlDirectives.cjs +2 -0
  118. package/dist/plugins/cacheController/types/cacheControlDirectives.d.ts +16 -0
  119. package/dist/plugins/cacheController/types/cacheControlDirectives.mjs +1 -0
  120. package/dist/plugins/cacheController/types/index.cjs +4 -0
  121. package/dist/plugins/cacheController/types/index.d.ts +1 -0
  122. package/dist/plugins/cacheController/types/index.mjs +1 -0
  123. package/dist/plugins/codeGenerator/aggregateStepContract.cjs +9 -2
  124. package/dist/plugins/codeGenerator/aggregateStepContract.d.ts +1 -1
  125. package/dist/plugins/codeGenerator/aggregateStepContract.mjs +10 -3
  126. package/dist/plugins/codeGenerator/plugin.cjs +4 -4
  127. package/dist/plugins/codeGenerator/plugin.mjs +1 -1
  128. package/dist/plugins/openApiGenerator/aggregateStepContract.d.ts +2 -7
  129. package/dist/plugins/openApiGenerator/routeToOpenApi.cjs +46 -8
  130. package/dist/plugins/openApiGenerator/routeToOpenApi.d.ts +2 -2
  131. package/dist/plugins/openApiGenerator/routeToOpenApi.mjs +46 -8
  132. package/dist/plugins/openApiGenerator/types/endpointResponse.d.ts +7 -3
  133. package/dist/plugins/static/index.cjs +14 -0
  134. package/dist/plugins/static/index.d.ts +3 -0
  135. package/dist/plugins/static/index.mjs +3 -0
  136. package/dist/plugins/static/kind.cjs +9 -0
  137. package/dist/plugins/static/kind.d.ts +6 -0
  138. package/dist/plugins/static/kind.mjs +7 -0
  139. package/dist/plugins/static/makeRouteFile.cjs +62 -0
  140. package/dist/plugins/static/makeRouteFile.d.ts +48 -0
  141. package/dist/plugins/static/makeRouteFile.mjs +58 -0
  142. package/dist/plugins/static/makeRouteFolder.cjs +67 -0
  143. package/dist/plugins/static/makeRouteFolder.d.ts +39 -0
  144. package/dist/plugins/static/makeRouteFolder.mjs +65 -0
  145. package/dist/plugins/static/plugin.cjs +53 -0
  146. package/dist/plugins/static/plugin.d.ts +26 -0
  147. package/dist/plugins/static/plugin.mjs +50 -0
  148. package/package.json +18 -7
  149. /package/dist/plugins/codeGenerator/{typescriptTransfomer.cjs → typescriptTransformer.cjs} +0 -0
  150. /package/dist/plugins/codeGenerator/{typescriptTransfomer.d.ts → typescriptTransformer.d.ts} +0 -0
  151. /package/dist/plugins/codeGenerator/{typescriptTransfomer.mjs → typescriptTransformer.mjs} +0 -0
@@ -5,6 +5,7 @@ import '../../../response/index.mjs';
5
5
  import { handlerStepKind } from '../../../steps/handler.mjs';
6
6
  import { ResponseContract } from '../../../response/contract.mjs';
7
7
  import { PredictedResponse } from '../../../response/predicted.mjs';
8
+ import { ServerSentEventsPredictedResponse } from '../../../response/serverSentEventsPredicted.mjs';
8
9
 
9
10
  const defaultHandlerStepFunctionBuilder = createStepFunctionBuilder(handlerStepKind.has, (step, { success }) => {
10
11
  const { responseContract, theFunction: handlerFunction, } = step.definition;
@@ -13,26 +14,45 @@ const defaultHandlerStepFunctionBuilder = createStepFunctionBuilder(handlerStepK
13
14
  }));
14
15
  const response = (information, body) => {
15
16
  const currentContract = preparedContractResponse[information];
16
- if (!currentContract) {
17
- throw new ResponseContract.Error(information);
17
+ if (!currentContract
18
+ || !ResponseContract.contractKind.has(currentContract)) {
19
+ throw new ResponseContract.Error(information, "Contract not found.");
18
20
  }
19
- return new PredictedResponse(currentContract.code, currentContract.information, body);
21
+ const result = currentContract.body.parse(body);
22
+ if (E.isLeft(result)) {
23
+ throw new ResponseContract.Error(information, unwrap(result));
24
+ }
25
+ return new PredictedResponse(currentContract.code, information, body);
26
+ };
27
+ const serverSentEventsResponse = (information, startSendingEvents) => {
28
+ const currentContract = preparedContractResponse[information];
29
+ if (!currentContract
30
+ || !ResponseContract.serverSentEventsContractKind.has(currentContract)) {
31
+ throw new ResponseContract.Error(information, "Contract not found.");
32
+ }
33
+ return new ServerSentEventsPredictedResponse(currentContract.code, information, (params) => startSendingEvents({
34
+ ...params,
35
+ send: (event, data, sendParams) => {
36
+ const dataParser = currentContract.events[event];
37
+ if (!dataParser) {
38
+ console.error(new ResponseContract.Error(information, `Event '${event}' not found.`));
39
+ return Promise.resolve();
40
+ }
41
+ const result = dataParser.parse(data);
42
+ if (E.isLeft(result)) {
43
+ console.error(new ResponseContract.Error(information, unwrap(result)));
44
+ return Promise.resolve();
45
+ }
46
+ return params.send(event, data, sendParams);
47
+ },
48
+ }));
20
49
  };
21
50
  return success({
22
- buildedFunction: async (request, floor) => {
23
- const predictedResponse = await handlerFunction(floor, {
24
- request,
25
- response,
26
- });
27
- const currentContract = preparedContractResponse[predictedResponse.information];
28
- const result = currentContract.body.isAsynchronous()
29
- ? await currentContract.body.asyncParse(predictedResponse.body)
30
- : currentContract.body.parse(predictedResponse.body);
31
- if (E.isLeft(result)) {
32
- throw new ResponseContract.Error(predictedResponse.information, unwrap(result));
33
- }
34
- return predictedResponse;
35
- },
51
+ buildedFunction: async (request, floor) => handlerFunction(floor, {
52
+ request,
53
+ response,
54
+ serverSentEventsResponse,
55
+ }),
36
56
  hooksRouteLifeCycle: [],
37
57
  });
38
58
  });
@@ -5,7 +5,7 @@ require('../../../response/index.cjs');
5
5
  var create = require('../create.cjs');
6
6
  var utils = require('@duplojs/utils');
7
7
  var process = require('../../../steps/process.cjs');
8
- var predicted = require('../../../response/predicted.cjs');
8
+ var base = require('../../../response/base.cjs');
9
9
 
10
10
  function buildStepsFunction(steps, buildStep) {
11
11
  return utils.G.asyncReduce(steps, utils.G.reduceFrom([]), async ({ lastValue, element: step, next, exit }) => {
@@ -33,8 +33,8 @@ const defaultProcessStepFunctionBuilder = create.createStepFunctionBuilder(proce
33
33
  let processFloor = { options: getOptions(floor) };
34
34
  // eslint-disable-next-line @typescript-eslint/prefer-for-of
35
35
  for (let index = 0; index < buildedSteps.length; index++) {
36
- const result = await buildedSteps[index].buildedFunction(request, floor);
37
- if (result instanceof predicted.PredictedResponse) {
36
+ const result = await buildedSteps[index].buildedFunction(request, processFloor);
37
+ if (result instanceof base.Response) {
38
38
  return result;
39
39
  }
40
40
  processFloor = result;
@@ -3,7 +3,7 @@ import '../../../response/index.mjs';
3
3
  import { createStepFunctionBuilder } from '../create.mjs';
4
4
  import { G, E, A, unwrap, pipe, P, or, isType, forward } from '@duplojs/utils';
5
5
  import { processStepKind } from '../../../steps/process.mjs';
6
- import { PredictedResponse } from '../../../response/predicted.mjs';
6
+ import { Response } from '../../../response/base.mjs';
7
7
 
8
8
  function buildStepsFunction(steps, buildStep) {
9
9
  return G.asyncReduce(steps, G.reduceFrom([]), async ({ lastValue, element: step, next, exit }) => {
@@ -31,8 +31,8 @@ const defaultProcessStepFunctionBuilder = createStepFunctionBuilder(processStepK
31
31
  let processFloor = { options: getOptions(floor) };
32
32
  // eslint-disable-next-line @typescript-eslint/prefer-for-of
33
33
  for (let index = 0; index < buildedSteps.length; index++) {
34
- const result = await buildedSteps[index].buildedFunction(request, floor);
35
- if (result instanceof PredictedResponse) {
34
+ const result = await buildedSteps[index].buildedFunction(request, processFloor);
35
+ if (result instanceof Response) {
36
36
  return result;
37
37
  }
38
38
  processFloor = result;
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ var utils = require('@duplojs/utils');
4
+ require('../request/index.cjs');
5
+ var empty = require('../request/bodyController/empty.cjs');
6
+
7
+ const defaultEmptyReaderImplementation = empty.EmptyBodyController.createReaderImplementation(() => Promise.resolve(utils.E.success(undefined)));
8
+
9
+ exports.defaultEmptyReaderImplementation = defaultEmptyReaderImplementation;
@@ -0,0 +1 @@
1
+ export declare const defaultEmptyReaderImplementation: import("../request").BodyReaderImplementation<"empty", {}>;
@@ -0,0 +1,7 @@
1
+ import { E } from '@duplojs/utils';
2
+ import '../request/index.mjs';
3
+ import { EmptyBodyController } from '../request/bodyController/empty.mjs';
4
+
5
+ const defaultEmptyReaderImplementation = EmptyBodyController.createReaderImplementation(() => Promise.resolve(E.success(undefined)));
6
+
7
+ export { defaultEmptyReaderImplementation };
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ require('../response/index.cjs');
4
+ require('../steps/index.cjs');
5
+ var handler = require('../steps/handler.cjs');
6
+ var contract = require('../response/contract.cjs');
7
+
8
+ const defaultMalformedUrlHandler = handler.createHandlerStep({
9
+ responseContract: contract.ResponseContract.badRequest("malformed-url"),
10
+ theFunction: (__, { response }) => response("malformed-url", undefined),
11
+ metadata: [],
12
+ });
13
+
14
+ exports.defaultMalformedUrlHandler = defaultMalformedUrlHandler;
@@ -0,0 +1,10 @@
1
+ import { ResponseContract } from "../response";
2
+ export declare const defaultMalformedUrlHandler: import("../steps").HandlerStep<{
3
+ responseContract: NoInfer<ResponseContract.Contract<"400", "malformed-url", import("@duplojs/utils/dataParser").DataParserEmpty<{
4
+ readonly errorMessage?: string | undefined;
5
+ readonly coerce: boolean;
6
+ readonly checkers: readonly [];
7
+ }>>>;
8
+ theFunction: (__: import("..").Floor, { response }: import("../steps").HandlerStepFunctionParams<import("..").Request, import("../response").ServerSentEventsPredictedResponse<"200" | "201" | "202" | "203" | "204" | "205" | "206" | "207" | "208" | "209" | "210" | "211" | "212" | "213" | "214" | "215" | "216" | "217" | "218" | "219" | "220" | "221" | "222" | "223" | "224" | "225" | "226" | "227" | "228" | "229" | "230" | "231" | "232" | "233" | "234" | "235" | "236" | "237" | "238" | "239" | "240" | "241" | "242" | "243" | "244" | "245" | "246" | "247" | "248" | "249" | "250" | "251" | "252" | "253" | "254" | "255" | "256" | "257" | "258" | "259" | "260" | "261" | "262" | "263" | "264" | "265" | "266" | "267" | "268" | "269" | "270" | "271" | "272" | "273" | "274" | "275" | "276" | "277" | "278" | "279" | "280" | "281" | "282" | "283" | "284" | "285" | "286" | "287" | "288" | "289" | "290" | "291" | "292" | "293" | "294" | "295" | "296" | "297" | "298" | "299", string, import("..").ServerSentEvents.DefinitionShape> | import("../response").PredictedResponse<import("../response").ResponseCode, string, unknown>>) => never;
9
+ metadata: never[];
10
+ }>;
@@ -0,0 +1,12 @@
1
+ import '../response/index.mjs';
2
+ import '../steps/index.mjs';
3
+ import { createHandlerStep } from '../steps/handler.mjs';
4
+ import { ResponseContract } from '../response/contract.mjs';
5
+
6
+ const defaultMalformedUrlHandler = createHandlerStep({
7
+ responseContract: ResponseContract.badRequest("malformed-url"),
8
+ theFunction: (__, { response }) => response("malformed-url", undefined),
9
+ metadata: [],
10
+ });
11
+
12
+ export { defaultMalformedUrlHandler };
@@ -6,6 +6,6 @@ export declare const defaultNotfoundHandler: import("../steps").HandlerStep<{
6
6
  readonly coerce: boolean;
7
7
  readonly checkers: readonly [];
8
8
  }>>>;
9
- theFunction: (floor: import("..").Floor, { request, response }: import("../steps").HandlerStepFunctionParams<import("..").Request, import("../response").PredictedResponse<import("../response").ResponseCode, string, unknown>>) => never;
9
+ theFunction: (floor: import("..").Floor, { request, response }: import("../steps").HandlerStepFunctionParams<import("..").Request, import("../response").ServerSentEventsPredictedResponse<"200" | "201" | "202" | "203" | "204" | "205" | "206" | "207" | "208" | "209" | "210" | "211" | "212" | "213" | "214" | "215" | "216" | "217" | "218" | "219" | "220" | "221" | "222" | "223" | "224" | "225" | "226" | "227" | "228" | "229" | "230" | "231" | "232" | "233" | "234" | "235" | "236" | "237" | "238" | "239" | "240" | "241" | "242" | "243" | "244" | "245" | "246" | "247" | "248" | "249" | "250" | "251" | "252" | "253" | "254" | "255" | "256" | "257" | "258" | "259" | "260" | "261" | "262" | "263" | "264" | "265" | "266" | "267" | "268" | "269" | "270" | "271" | "272" | "273" | "274" | "275" | "276" | "277" | "278" | "279" | "280" | "281" | "282" | "283" | "284" | "285" | "286" | "287" | "288" | "289" | "290" | "291" | "292" | "293" | "294" | "295" | "296" | "297" | "298" | "299", string, import("..").ServerSentEvents.DefinitionShape> | import("../response").PredictedResponse<import("../response").ResponseCode, string, unknown>>) => never;
10
10
  metadata: never[];
11
11
  }>;
@@ -8,6 +8,8 @@ var index = require('../request/index.cjs');
8
8
  var defaultNotfoundHandler = require('./defaultNotfoundHandler.cjs');
9
9
  var defaultExtractContract = require('./defaultExtractContract.cjs');
10
10
  var defaultBodyController = require('./defaultBodyController.cjs');
11
+ var defaultMalformedUrlHandler = require('./defaultMalformedUrlHandler.cjs');
12
+ var defaultEmptyReaderImplementation = require('./defaultEmptyReaderImplementation.cjs');
11
13
  var hooks = require('./hooks.cjs');
12
14
  var handler = require('../steps/handler.cjs');
13
15
 
@@ -20,11 +22,12 @@ class Hub extends utils.kindHeritage("hub", kind.createCoreLibKind("hub")) {
20
22
  routes = new Set();
21
23
  routeFunctionBuilders = [];
22
24
  stepFunctionBuilders = [];
23
- bodyReaderImplementations = [];
25
+ bodyReaderImplementations = [defaultEmptyReaderImplementation.defaultEmptyReaderImplementation];
24
26
  classRequest = index.Request;
25
27
  notfoundHandler = defaultNotfoundHandler.defaultNotfoundHandler;
26
28
  defaultExtractContract = defaultExtractContract.defaultExtractContract;
27
29
  defaultBodyController = defaultBodyController.defaultBodyController;
30
+ malformedUrlHandler = defaultMalformedUrlHandler.defaultMalformedUrlHandler;
28
31
  constructor(config) {
29
32
  super({});
30
33
  this.config = config;
@@ -100,6 +103,14 @@ class Hub extends utils.kindHeritage("hub", kind.createCoreLibKind("hub")) {
100
103
  aggregatesHooksRouteLifeCycle(hookName) {
101
104
  return utils.A.flatMap(this.hooksRouteLifeCycle, (hooks) => hooks[hookName] ?? []);
102
105
  }
106
+ setMalformedUrlHandler(responseContract, theFunction) {
107
+ this.malformedUrlHandler = handler.createHandlerStep({
108
+ responseContract,
109
+ theFunction: (__, params) => theFunction(params),
110
+ metadata: [],
111
+ });
112
+ return this;
113
+ }
103
114
  /**
104
115
  * @internal
105
116
  */
@@ -114,6 +125,8 @@ function createHub(config) {
114
125
  exports.defaultNotfoundHandler = defaultNotfoundHandler.defaultNotfoundHandler;
115
126
  exports.defaultExtractContract = defaultExtractContract.defaultExtractContract;
116
127
  exports.defaultBodyController = defaultBodyController.defaultBodyController;
128
+ exports.defaultMalformedUrlHandler = defaultMalformedUrlHandler.defaultMalformedUrlHandler;
129
+ exports.defaultEmptyReaderImplementation = defaultEmptyReaderImplementation.defaultEmptyReaderImplementation;
117
130
  exports.createHookHubLifeCycle = hooks.createHookHubLifeCycle;
118
131
  exports.hookServerExitKind = hooks.hookServerExitKind;
119
132
  exports.hookServerNextKind = hooks.hookServerNextKind;
@@ -11,6 +11,8 @@ export * from "./hooks";
11
11
  export * from "./defaultNotfoundHandler";
12
12
  export * from "./defaultExtractContract";
13
13
  export * from "./defaultBodyController";
14
+ export * from "./defaultMalformedUrlHandler";
15
+ export * from "./defaultEmptyReaderImplementation";
14
16
  export declare const hubKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/hub", unknown>>;
15
17
  export interface HubConfig {
16
18
  readonly environment: Environment;
@@ -40,6 +42,7 @@ export declare class Hub<GenericConfig extends HubConfig = HubConfig> extends Hu
40
42
  notfoundHandler: HandlerStep;
41
43
  defaultExtractContract: ResponseContract.Contract<ClientErrorResponseCode, string, DP.DataParserEmpty>;
42
44
  defaultBodyController: BodyController;
45
+ malformedUrlHandler: HandlerStep;
43
46
  private constructor();
44
47
  register(routes: Route | Iterable<Route> | Record<string, Route>): this;
45
48
  addRouteFunctionBuilder(functionBuilder: MaybeArray<ReturnType<typeof createRouteFunctionBuilder>>): this;
@@ -53,5 +56,6 @@ export declare class Hub<GenericConfig extends HubConfig = HubConfig> extends Hu
53
56
  aggregatesHooksHubLifeCycle<GenericHookName extends keyof HookHubLifeCycle>(hookName: GenericHookName): (NonNullable<HookHubLifeCycle[GenericHookName]> extends infer T ? T extends NonNullable<HookHubLifeCycle[GenericHookName]> ? T extends readonly (infer InnerArr)[] ? InnerArr extends readonly (infer InnerArr)[] ? InnerArr : InnerArr : T : never : never)[];
54
57
  setDefaultBodyController(bodyController: BodyController): this;
55
58
  aggregatesHooksRouteLifeCycle<GenericHookName extends keyof HookRouteLifeCycle>(hookName: GenericHookName): (NonNullable<HookRouteLifeCycle<Request>[GenericHookName]> extends infer T ? T extends NonNullable<HookRouteLifeCycle<Request>[GenericHookName]> ? T extends readonly (infer InnerArr)[] ? InnerArr extends readonly (infer InnerArr)[] ? InnerArr : InnerArr : T : never : never)[];
59
+ setMalformedUrlHandler<GenericResponseContract extends ResponseContract.Contract, GenericResponse extends ResponseContract.Convert<GenericResponseContract>>(responseContract: GenericResponseContract, theFunction: (param: HandlerStepFunctionParams<Request, GenericResponse>) => MaybePromise<GenericResponse>): this;
56
60
  }
57
61
  export declare function createHub<const GenericConfig extends HubConfig>(config: GenericConfig): Hub<GenericConfig>;
@@ -6,6 +6,8 @@ import { Request } from '../request/index.mjs';
6
6
  import { defaultNotfoundHandler } from './defaultNotfoundHandler.mjs';
7
7
  import { defaultExtractContract } from './defaultExtractContract.mjs';
8
8
  import { defaultBodyController } from './defaultBodyController.mjs';
9
+ import { defaultMalformedUrlHandler } from './defaultMalformedUrlHandler.mjs';
10
+ import { defaultEmptyReaderImplementation } from './defaultEmptyReaderImplementation.mjs';
9
11
  export { createHookHubLifeCycle, hookServerExitKind, hookServerNextKind, launchHookBeforeBuildRoute, launchHookServer, launchHookServerError, serverErrorExitHookFunction, serverErrorNextHookFunction } from './hooks.mjs';
10
12
  import { createHandlerStep } from '../steps/handler.mjs';
11
13
 
@@ -18,11 +20,12 @@ class Hub extends kindHeritage("hub", createCoreLibKind("hub")) {
18
20
  routes = new Set();
19
21
  routeFunctionBuilders = [];
20
22
  stepFunctionBuilders = [];
21
- bodyReaderImplementations = [];
23
+ bodyReaderImplementations = [defaultEmptyReaderImplementation];
22
24
  classRequest = Request;
23
25
  notfoundHandler = defaultNotfoundHandler;
24
26
  defaultExtractContract = defaultExtractContract;
25
27
  defaultBodyController = defaultBodyController;
28
+ malformedUrlHandler = defaultMalformedUrlHandler;
26
29
  constructor(config) {
27
30
  super({});
28
31
  this.config = config;
@@ -98,6 +101,14 @@ class Hub extends kindHeritage("hub", createCoreLibKind("hub")) {
98
101
  aggregatesHooksRouteLifeCycle(hookName) {
99
102
  return A.flatMap(this.hooksRouteLifeCycle, (hooks) => hooks[hookName] ?? []);
100
103
  }
104
+ setMalformedUrlHandler(responseContract, theFunction) {
105
+ this.malformedUrlHandler = createHandlerStep({
106
+ responseContract,
107
+ theFunction: (__, params) => theFunction(params),
108
+ metadata: [],
109
+ });
110
+ return this;
111
+ }
101
112
  /**
102
113
  * @internal
103
114
  */
@@ -109,4 +120,4 @@ function createHub(config) {
109
120
  return Hub.new(config);
110
121
  }
111
122
 
112
- export { Hub, createHub, defaultBodyController, defaultExtractContract, defaultNotfoundHandler, hubKind };
123
+ export { Hub, createHub, defaultBodyController, defaultEmptyReaderImplementation, defaultExtractContract, defaultMalformedUrlHandler, defaultNotfoundHandler, hubKind };
@@ -1,13 +1,18 @@
1
1
  'use strict';
2
2
 
3
3
  require('./hub/index.cjs');
4
- var index = require('./router/index.cjs');
4
+ var index$1 = require('./router/index.cjs');
5
5
  var utils = require('@duplojs/utils');
6
+ var index = require('./defaultHooks/index.cjs');
6
7
  var hooks = require('./hub/hooks.cjs');
7
8
 
8
9
  async function implementHttpServer(params, initHttpServer) {
9
10
  await hooks.launchHookServer(params.hub.aggregatesHooksHubLifeCycle("beforeServerBuildRoutes"), params.hub, params.httpServerParams);
10
- const router = await index.buildRouter(params.hub);
11
+ params.hub.addRouteHooks([
12
+ index.initDefaultHook(params.hub, params.httpServerParams),
13
+ ...params.getInterfaceHooks(params),
14
+ ]);
15
+ const router = await index$1.buildRouter(params.hub);
11
16
  await hooks.launchHookServer(params.hub.aggregatesHooksHubLifeCycle("beforeStartServer"), params.hub, params.httpServerParams);
12
17
  const serverErrorHooks = params.hub.aggregatesHooksHubLifeCycle("serverError");
13
18
  function catchCriticalError(error) {
@@ -1,10 +1,16 @@
1
1
  import { type Hub } from "./hub";
2
2
  import { type RouterInitializationData } from "./router";
3
- import { type MaybePromise } from "@duplojs/utils";
3
+ import { type AnyTuple, type MaybePromise } from "@duplojs/utils";
4
4
  import { type HttpServerParams } from "./types";
5
+ import { type HookRouteLifeCycle } from "./route";
6
+ export interface GetInterfaceHooksParams {
7
+ readonly hub: Hub;
8
+ readonly httpServerParams: HttpServerParams;
9
+ }
5
10
  export interface ImplementHttpServerParams {
6
11
  readonly hub: Hub;
7
12
  readonly httpServerParams: HttpServerParams;
13
+ getInterfaceHooks(params: GetInterfaceHooksParams): AnyTuple<HookRouteLifeCycle>;
8
14
  }
9
15
  export type ExecRouteSystem = (routerInitializationData: RouterInitializationData, whenUncaughtError: (error: unknown, routerInitializationData: RouterInitializationData) => MaybePromise<void>) => Promise<void>;
10
16
  export interface InitHttpServerParams {
@@ -1,10 +1,15 @@
1
1
  import './hub/index.mjs';
2
2
  import { buildRouter } from './router/index.mjs';
3
3
  import { forward } from '@duplojs/utils';
4
+ import { initDefaultHook } from './defaultHooks/index.mjs';
4
5
  import { launchHookServer, launchHookServerError, serverErrorNextHookFunction, serverErrorExitHookFunction } from './hub/hooks.mjs';
5
6
 
6
7
  async function implementHttpServer(params, initHttpServer) {
7
8
  await launchHookServer(params.hub.aggregatesHooksHubLifeCycle("beforeServerBuildRoutes"), params.hub, params.httpServerParams);
9
+ params.hub.addRouteHooks([
10
+ initDefaultHook(params.hub, params.httpServerParams),
11
+ ...params.getInterfaceHooks(params),
12
+ ]);
8
13
  const router = await buildRouter(params.hub);
9
14
  await launchHookServer(params.hub.aggregatesHooksHubLifeCycle("beforeStartServer"), params.hub, params.httpServerParams);
10
15
  const serverErrorHooks = params.hub.aggregatesHooksHubLifeCycle("serverError");
@@ -21,6 +21,7 @@ var narrowingInput = require('./narrowingInput.cjs');
21
21
  require('./clean/index.cjs');
22
22
  var index$5 = require('./defaultHooks/index.cjs');
23
23
  require('./errors/index.cjs');
24
+ var serverSentEvents = require('./serverSentEvents.cjs');
24
25
  var checker = require('./builders/checker.cjs');
25
26
  var builder = require('./builders/route/builder.cjs');
26
27
  var store = require('./builders/route/store.cjs');
@@ -30,6 +31,7 @@ var base = require('./response/base.cjs');
30
31
  var contract = require('./response/contract.cjs');
31
32
  var hook = require('./response/hook.cjs');
32
33
  var predicted = require('./response/predicted.cjs');
34
+ var serverSentEventsPredicted = require('./response/serverSentEventsPredicted.cjs');
33
35
  var hooks = require('./route/hooks.cjs');
34
36
  var kind = require('./steps/kind.cjs');
35
37
  var identifier = require('./steps/identifier.cjs');
@@ -42,10 +44,13 @@ var presetChecker = require('./steps/presetChecker.cjs');
42
44
  var base$1 = require('./request/bodyController/base.cjs');
43
45
  var formData = require('./request/bodyController/formData.cjs');
44
46
  var text = require('./request/bodyController/text.cjs');
47
+ var empty = require('./request/bodyController/empty.cjs');
45
48
  var hooks$1 = require('./hub/hooks.cjs');
46
49
  var defaultNotfoundHandler = require('./hub/defaultNotfoundHandler.cjs');
47
50
  var defaultExtractContract = require('./hub/defaultExtractContract.cjs');
48
51
  var defaultBodyController = require('./hub/defaultBodyController.cjs');
52
+ var defaultMalformedUrlHandler = require('./hub/defaultMalformedUrlHandler.cjs');
53
+ var defaultEmptyReaderImplementation = require('./hub/defaultEmptyReaderImplementation.cjs');
49
54
  var build = require('./functionsBuilders/route/build.cjs');
50
55
  var create = require('./functionsBuilders/route/create.cjs');
51
56
  var _default = require('./functionsBuilders/route/default.cjs');
@@ -61,6 +66,7 @@ var pathToRegExp = require('./router/pathToRegExp.cjs');
61
66
  var buildError = require('./router/buildError.cjs');
62
67
  var decodeUrl = require('./router/decodeUrl.cjs');
63
68
  var notFoundBodyReaderImplementationError = require('./router/notFoundBodyReaderImplementationError.cjs');
69
+ var buildSystemRoute = require('./router/buildSystemRoute.cjs');
64
70
  var base$2 = require('./metadata/base.cjs');
65
71
  var ignoreByRouteStore = require('./metadata/ignoreByRouteStore.cjs');
66
72
  var wrongContentTypeError = require('./errors/wrongContentTypeError.cjs');
@@ -89,6 +95,10 @@ exports.createCoreLibStringIdentifier = stringIdentifier.createCoreLibStringIden
89
95
  exports.implementHttpServer = implementHttpServer.implementHttpServer;
90
96
  exports.createNarrowingInput = narrowingInput.createNarrowingInput;
91
97
  exports.initDefaultHook = index$5.initDefaultHook;
98
+ Object.defineProperty(exports, "ServerSentEvents", {
99
+ enumerable: true,
100
+ get: function () { return serverSentEvents.ServerSentEvents; }
101
+ });
92
102
  exports.checkerBuilder = checker.checkerBuilder;
93
103
  exports.useCheckerBuilder = checker.useCheckerBuilder;
94
104
  exports.routeBuilderHandler = builder.routeBuilderHandler;
@@ -105,8 +115,10 @@ Object.defineProperty(exports, "ResponseContract", {
105
115
  });
106
116
  exports.HookResponse = hook.HookResponse;
107
117
  exports.PredictedResponse = predicted.PredictedResponse;
118
+ exports.ServerSentEventsPredictedResponse = serverSentEventsPredicted.ServerSentEventsPredictedResponse;
108
119
  exports.createHookRouteLifeCycle = hooks.createHookRouteLifeCycle;
109
120
  exports.hookRouteExitKind = hooks.hookRouteExitKind;
121
+ exports.hookRouteLifeCycleAddRequestProperties = hooks.hookRouteLifeCycleAddRequestProperties;
110
122
  exports.hookRouteNextKind = hooks.hookRouteNextKind;
111
123
  exports.stepKind = kind.stepKind;
112
124
  exports.stepIdentifier = identifier.stepIdentifier;
@@ -123,11 +135,14 @@ exports.createProcessStep = process.createProcessStep;
123
135
  exports.processStepKind = process.processStepKind;
124
136
  exports.createPresetCheckerStep = presetChecker.createPresetCheckerStep;
125
137
  exports.presetCheckerStepKind = presetChecker.presetCheckerStepKind;
138
+ exports.WrongBodyReaderImplementationError = base$1.WrongBodyReaderImplementationError;
126
139
  exports.createBodyController = base$1.createBodyController;
127
140
  exports.FormDataBodyController = formData.FormDataBodyController;
128
141
  exports.controlBodyAsFormData = formData.controlBodyAsFormData;
129
142
  exports.TextBodyController = text.TextBodyController;
130
143
  exports.controlBodyAsText = text.controlBodyAsText;
144
+ exports.EmptyBodyController = empty.EmptyBodyController;
145
+ exports.controlBodyAsEmpty = empty.controlBodyAsEmpty;
131
146
  exports.createHookHubLifeCycle = hooks$1.createHookHubLifeCycle;
132
147
  exports.hookServerExitKind = hooks$1.hookServerExitKind;
133
148
  exports.hookServerNextKind = hooks$1.hookServerNextKind;
@@ -139,6 +154,8 @@ exports.serverErrorNextHookFunction = hooks$1.serverErrorNextHookFunction;
139
154
  exports.defaultNotfoundHandler = defaultNotfoundHandler.defaultNotfoundHandler;
140
155
  exports.defaultExtractContract = defaultExtractContract.defaultExtractContract;
141
156
  exports.defaultBodyController = defaultBodyController.defaultBodyController;
157
+ exports.defaultMalformedUrlHandler = defaultMalformedUrlHandler.defaultMalformedUrlHandler;
158
+ exports.defaultEmptyReaderImplementation = defaultEmptyReaderImplementation.defaultEmptyReaderImplementation;
142
159
  exports.buildRouteFunction = build.buildRouteFunction;
143
160
  exports.createRouteFunctionBuilder = create.createRouteFunctionBuilder;
144
161
  exports.defaultRouteFunctionBuilder = _default.defaultRouteFunctionBuilder;
@@ -162,6 +179,7 @@ exports.decodeUrl = decodeUrl.decodeUrl;
162
179
  exports.regexQueryAnalyser = decodeUrl.regexQueryAnalyser;
163
180
  exports.regexUrlAnalyser = decodeUrl.regexUrlAnalyser;
164
181
  exports.NotFoundBodyReaderImplementationError = notFoundBodyReaderImplementationError.NotFoundBodyReaderImplementationError;
182
+ exports.buildSystemRoute = buildSystemRoute.buildSystemRoute;
165
183
  exports.createMetadata = base$2.createMetadata;
166
184
  exports.metadataKind = base$2.metadataKind;
167
185
  exports.IgnoreByRouteStoreMetadata = ignoreByRouteStore.IgnoreByRouteStoreMetadata;
@@ -19,3 +19,4 @@ export * from "./narrowingInput";
19
19
  export * from "./clean";
20
20
  export * from "./defaultHooks";
21
21
  export * from "./errors";
22
+ export * from "./serverSentEvents";
@@ -19,6 +19,7 @@ export { createNarrowingInput } from './narrowingInput.mjs';
19
19
  import './clean/index.mjs';
20
20
  export { initDefaultHook } from './defaultHooks/index.mjs';
21
21
  import './errors/index.mjs';
22
+ export { ServerSentEvents } from './serverSentEvents.mjs';
22
23
  export { checkerBuilder, useCheckerBuilder } from './builders/checker.mjs';
23
24
  export { routeBuilderHandler, useRouteBuilder } from './builders/route/builder.mjs';
24
25
  export { routeStore } from './builders/route/store.mjs';
@@ -28,7 +29,8 @@ export { Response } from './response/base.mjs';
28
29
  export { ResponseContract } from './response/contract.mjs';
29
30
  export { HookResponse } from './response/hook.mjs';
30
31
  export { PredictedResponse } from './response/predicted.mjs';
31
- export { createHookRouteLifeCycle, hookRouteExitKind, hookRouteNextKind } from './route/hooks.mjs';
32
+ export { ServerSentEventsPredictedResponse } from './response/serverSentEventsPredicted.mjs';
33
+ export { createHookRouteLifeCycle, hookRouteExitKind, hookRouteLifeCycleAddRequestProperties, hookRouteNextKind } from './route/hooks.mjs';
32
34
  export { stepKind } from './steps/kind.mjs';
33
35
  export { stepIdentifier } from './steps/identifier.mjs';
34
36
  export { checkerStepKind, createCheckerStep } from './steps/checker.mjs';
@@ -37,13 +39,16 @@ export { createCutStep, cutStepKind, cutStepOutputKind } from './steps/cut.mjs';
37
39
  export { createHandlerStep, handlerStepKind } from './steps/handler.mjs';
38
40
  export { createProcessStep, processStepKind } from './steps/process.mjs';
39
41
  export { createPresetCheckerStep, presetCheckerStepKind } from './steps/presetChecker.mjs';
40
- export { createBodyController } from './request/bodyController/base.mjs';
42
+ export { WrongBodyReaderImplementationError, createBodyController } from './request/bodyController/base.mjs';
41
43
  export { FormDataBodyController, controlBodyAsFormData } from './request/bodyController/formData.mjs';
42
44
  export { TextBodyController, controlBodyAsText } from './request/bodyController/text.mjs';
45
+ export { EmptyBodyController, controlBodyAsEmpty } from './request/bodyController/empty.mjs';
43
46
  export { createHookHubLifeCycle, hookServerExitKind, hookServerNextKind, launchHookBeforeBuildRoute, launchHookServer, launchHookServerError, serverErrorExitHookFunction, serverErrorNextHookFunction } from './hub/hooks.mjs';
44
47
  export { defaultNotfoundHandler } from './hub/defaultNotfoundHandler.mjs';
45
48
  export { defaultExtractContract } from './hub/defaultExtractContract.mjs';
46
49
  export { defaultBodyController } from './hub/defaultBodyController.mjs';
50
+ export { defaultMalformedUrlHandler } from './hub/defaultMalformedUrlHandler.mjs';
51
+ export { defaultEmptyReaderImplementation } from './hub/defaultEmptyReaderImplementation.mjs';
47
52
  export { buildRouteFunction } from './functionsBuilders/route/build.mjs';
48
53
  export { createRouteFunctionBuilder } from './functionsBuilders/route/create.mjs';
49
54
  export { defaultRouteFunctionBuilder } from './functionsBuilders/route/default.mjs';
@@ -59,6 +64,7 @@ export { pathToRegExp } from './router/pathToRegExp.mjs';
59
64
  export { RouterBuildError } from './router/buildError.mjs';
60
65
  export { decodeUrl, regexQueryAnalyser, regexUrlAnalyser } from './router/decodeUrl.mjs';
61
66
  export { NotFoundBodyReaderImplementationError } from './router/notFoundBodyReaderImplementationError.mjs';
67
+ export { buildSystemRoute } from './router/buildSystemRoute.mjs';
62
68
  export { createMetadata, metadataKind } from './metadata/base.mjs';
63
69
  export { IgnoreByRouteStoreMetadata } from './metadata/ignoreByRouteStore.mjs';
64
70
  export { WrongContentTypeError } from './errors/wrongContentTypeError.mjs';
@@ -7,20 +7,37 @@ const bodyReaderKind = kind.createCoreLibKind("body-reader");
7
7
  const bodyReaderImplementationKind = kind.createCoreLibKind("body-reader-implementation");
8
8
  const bodyControllerKind = kind.createCoreLibKind("body-controller");
9
9
  const bodyControllerHandlerKind = kind.createCoreLibKind("body-controller-handler");
10
+ class WrongBodyReaderImplementationError extends utils.kindHeritage("wrong-body-reader-implementation", kind.createCoreLibKind("wrong-body-reader-implementation"), Error) {
11
+ controllerName;
12
+ bodyReaderImplementation;
13
+ constructor(controllerName, bodyReaderImplementation) {
14
+ super({}, ["Received wrong body reader implementation."]);
15
+ this.controllerName = controllerName;
16
+ this.bodyReaderImplementation = bodyReaderImplementation;
17
+ }
18
+ }
10
19
  function createBodyController(name) {
11
20
  return bodyControllerHandlerKind.setTo({
12
21
  name,
13
22
  create(params) {
23
+ function tryToCreateReader(readerImplementation) {
24
+ if (bodyReaderImplementationKind.getValue(readerImplementation) !== name) {
25
+ return utils.E.fail();
26
+ }
27
+ return utils.E.success(bodyReaderKind.setTo({
28
+ read: (request) => readerImplementation.read(request, params),
29
+ }, name));
30
+ }
14
31
  return bodyControllerKind.setTo({
15
32
  name,
16
33
  params,
17
- tryToCreateReader(readerImplementation) {
18
- if (bodyReaderImplementationKind.getValue(readerImplementation) !== name) {
19
- return utils.E.fail();
34
+ tryToCreateReader,
35
+ createReaderOrThrow(readerImplementation) {
36
+ const result = tryToCreateReader(readerImplementation);
37
+ if (utils.E.isLeft(result)) {
38
+ throw new WrongBodyReaderImplementationError(name, readerImplementation);
20
39
  }
21
- return utils.E.success(bodyReaderKind.setTo({
22
- read: (request) => readerImplementation.read(request, params),
23
- }, name));
40
+ return utils.unwrap(result);
24
41
  },
25
42
  }, name);
26
43
  },
@@ -33,4 +50,5 @@ function createBodyController(name) {
33
50
  });
34
51
  }
35
52
 
53
+ exports.WrongBodyReaderImplementationError = WrongBodyReaderImplementationError;
36
54
  exports.createBodyController = createBodyController;
@@ -16,6 +16,7 @@ export interface BodyController<GenericName extends string = string, GenericPara
16
16
  readonly name: GenericName;
17
17
  readonly params: GenericParams;
18
18
  tryToCreateReader(readerImplementation: BodyReaderImplementation): E.Success<BodyReader<GenericName>> | E.Fail;
19
+ createReaderOrThrow(readerImplementation: BodyReaderImplementation): BodyReader<GenericName>;
19
20
  }
20
21
  declare const bodyControllerHandlerKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/body-controller-handler", unknown>>;
21
22
  export interface BodyControllerHandler<GenericName extends string = string, GenericParams extends BodyControllerParams = BodyControllerParams> extends Kind<typeof bodyControllerHandlerKind.definition> {
@@ -24,5 +25,13 @@ export interface BodyControllerHandler<GenericName extends string = string, Gene
24
25
  createReaderImplementation(read: BodyReaderImplementation<GenericName, GenericParams>["read"]): BodyReaderImplementation<GenericName, GenericParams>;
25
26
  is(input: unknown): input is BodyController<GenericName, GenericParams>;
26
27
  }
28
+ declare const WrongBodyReaderImplementationError_base: new (params: {
29
+ "@DuplojsHttpCore/wrong-body-reader-implementation"?: unknown;
30
+ }, parentParams: readonly [message?: string | undefined, options?: ErrorOptions | undefined]) => Error & Kind<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/wrong-body-reader-implementation", unknown>, unknown> & Kind<import("@duplojs/utils").KindDefinition<"wrong-body-reader-implementation", unknown>, unknown>;
31
+ export declare class WrongBodyReaderImplementationError extends WrongBodyReaderImplementationError_base {
32
+ controllerName: string;
33
+ bodyReaderImplementation: BodyReaderImplementation;
34
+ constructor(controllerName: string, bodyReaderImplementation: BodyReaderImplementation);
35
+ }
27
36
  export declare function createBodyController<GenericName extends string, GenericParams extends BodyControllerParams>(name: GenericName): BodyControllerHandler<GenericName, GenericParams>;
28
37
  export {};