@duplojs/http 0.4.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/dist/core/builders/preflight/builder.cjs +1 -0
  2. package/dist/core/builders/preflight/builder.d.ts +5 -1
  3. package/dist/core/builders/preflight/builder.mjs +1 -0
  4. package/dist/core/builders/preflight/process.cjs +2 -1
  5. package/dist/core/builders/preflight/process.d.ts +4 -2
  6. package/dist/core/builders/preflight/process.mjs +2 -1
  7. package/dist/core/builders/preflight/route.cjs +4 -0
  8. package/dist/core/builders/preflight/route.d.ts +9 -3
  9. package/dist/core/builders/preflight/route.mjs +4 -0
  10. package/dist/core/builders/process/builder.cjs +1 -0
  11. package/dist/core/builders/process/builder.d.ts +4 -1
  12. package/dist/core/builders/process/builder.mjs +1 -0
  13. package/dist/core/builders/process/checker.cjs +2 -1
  14. package/dist/core/builders/process/checker.d.ts +4 -2
  15. package/dist/core/builders/process/checker.mjs +2 -1
  16. package/dist/core/builders/process/cut.cjs +2 -1
  17. package/dist/core/builders/process/cut.d.ts +3 -1
  18. package/dist/core/builders/process/cut.mjs +2 -1
  19. package/dist/core/builders/process/extract.cjs +2 -1
  20. package/dist/core/builders/process/extract.d.ts +3 -1
  21. package/dist/core/builders/process/extract.mjs +2 -1
  22. package/dist/core/builders/process/index.cjs +1 -1
  23. package/dist/core/builders/process/index.d.ts +1 -1
  24. package/dist/core/builders/process/index.mjs +1 -1
  25. package/dist/core/builders/process/presetChecker.cjs +2 -1
  26. package/dist/core/builders/process/presetChecker.d.ts +3 -1
  27. package/dist/core/builders/process/presetChecker.mjs +2 -1
  28. package/dist/core/builders/process/process.cjs +2 -1
  29. package/dist/core/builders/process/process.d.ts +4 -2
  30. package/dist/core/builders/process/process.mjs +2 -1
  31. package/dist/core/builders/route/builder.cjs +1 -0
  32. package/dist/core/builders/route/builder.d.ts +4 -1
  33. package/dist/core/builders/route/builder.mjs +1 -0
  34. package/dist/core/builders/route/checker.cjs +2 -1
  35. package/dist/core/builders/route/checker.d.ts +4 -2
  36. package/dist/core/builders/route/checker.mjs +2 -1
  37. package/dist/core/builders/route/cut.cjs +2 -1
  38. package/dist/core/builders/route/cut.d.ts +3 -1
  39. package/dist/core/builders/route/cut.mjs +2 -1
  40. package/dist/core/builders/route/extract.cjs +2 -1
  41. package/dist/core/builders/route/extract.d.ts +3 -1
  42. package/dist/core/builders/route/extract.mjs +2 -1
  43. package/dist/core/builders/route/handler.cjs +9 -2
  44. package/dist/core/builders/route/handler.d.ts +3 -1
  45. package/dist/core/builders/route/handler.mjs +9 -2
  46. package/dist/core/builders/route/presetChecker.cjs +2 -1
  47. package/dist/core/builders/route/presetChecker.d.ts +3 -1
  48. package/dist/core/builders/route/presetChecker.mjs +2 -1
  49. package/dist/core/builders/route/process.cjs +2 -1
  50. package/dist/core/builders/route/process.d.ts +4 -2
  51. package/dist/core/builders/route/process.mjs +2 -1
  52. package/dist/core/functionsBuilders/route/build.d.ts +1 -1
  53. package/dist/core/functionsBuilders/route/hook.cjs +1 -0
  54. package/dist/core/functionsBuilders/route/hook.d.ts +4 -3
  55. package/dist/core/functionsBuilders/route/hook.mjs +1 -0
  56. package/dist/core/functionsBuilders/steps/build.d.ts +1 -1
  57. package/dist/core/hub/defaultNotfoundHandler.cjs +1 -0
  58. package/dist/core/hub/defaultNotfoundHandler.d.ts +1 -0
  59. package/dist/core/hub/defaultNotfoundHandler.mjs +1 -0
  60. package/dist/core/hub/hooks.cjs +4 -0
  61. package/dist/core/hub/hooks.d.ts +3 -0
  62. package/dist/core/hub/hooks.mjs +4 -1
  63. package/dist/core/hub/index.cjs +2 -0
  64. package/dist/core/hub/index.mjs +2 -1
  65. package/dist/core/implementHttpServer.cjs +36 -0
  66. package/dist/core/implementHttpServer.d.ts +13 -0
  67. package/dist/core/implementHttpServer.mjs +34 -0
  68. package/dist/core/index.cjs +11 -0
  69. package/dist/core/index.d.ts +3 -0
  70. package/dist/core/index.mjs +6 -1
  71. package/dist/core/metadata/base.cjs +20 -0
  72. package/dist/core/metadata/base.d.ts +14 -0
  73. package/dist/core/metadata/base.mjs +17 -0
  74. package/dist/core/metadata/ignoreByRouteStore.cjs +7 -0
  75. package/dist/core/metadata/ignoreByRouteStore.d.ts +1 -0
  76. package/dist/core/metadata/ignoreByRouteStore.mjs +5 -0
  77. package/dist/core/metadata/index.cjs +10 -0
  78. package/dist/core/metadata/index.d.ts +2 -0
  79. package/dist/core/metadata/index.mjs +2 -0
  80. package/dist/core/narrowingInput.cjs +14 -0
  81. package/dist/core/narrowingInput.d.ts +10 -0
  82. package/dist/core/narrowingInput.mjs +12 -0
  83. package/dist/core/process/index.d.ts +3 -1
  84. package/dist/core/route/hooks.cjs +0 -1
  85. package/dist/core/route/hooks.d.ts +0 -1
  86. package/dist/core/route/hooks.mjs +0 -1
  87. package/dist/core/route/index.d.ts +2 -0
  88. package/dist/core/router/index.cjs +1 -0
  89. package/dist/core/router/index.mjs +1 -0
  90. package/dist/core/router/types/buildedRouter.d.ts +2 -1
  91. package/dist/core/steps/checker.d.ts +2 -0
  92. package/dist/core/steps/cut.d.ts +2 -0
  93. package/dist/core/steps/extract.d.ts +2 -0
  94. package/dist/core/steps/handler.d.ts +2 -0
  95. package/dist/core/steps/presetChecker.d.ts +2 -0
  96. package/dist/core/steps/process.d.ts +2 -0
  97. package/dist/interfaces/node/createHttpServer.cjs +36 -46
  98. package/dist/interfaces/node/createHttpServer.d.ts +1 -5
  99. package/dist/interfaces/node/createHttpServer.mjs +36 -46
  100. package/dist/interfaces/node/hooks.cjs +12 -9
  101. package/dist/interfaces/node/hooks.d.ts +1 -1
  102. package/dist/interfaces/node/hooks.mjs +12 -9
  103. package/dist/plugins/codeGenerator/{stepsToDataParser.cjs → aggregateStepContract.cjs} +8 -5
  104. package/dist/plugins/codeGenerator/{stepsToDataParser.d.ts → aggregateStepContract.d.ts} +1 -1
  105. package/dist/plugins/codeGenerator/{stepsToDataParser.mjs → aggregateStepContract.mjs} +9 -6
  106. package/dist/plugins/codeGenerator/index.cjs +4 -2
  107. package/dist/plugins/codeGenerator/index.d.ts +2 -1
  108. package/dist/plugins/codeGenerator/index.mjs +2 -1
  109. package/dist/plugins/codeGenerator/metadata.cjs +8 -0
  110. package/dist/plugins/codeGenerator/metadata.d.ts +1 -0
  111. package/dist/plugins/codeGenerator/metadata.mjs +6 -0
  112. package/dist/plugins/codeGenerator/plugin.cjs +3 -0
  113. package/dist/plugins/codeGenerator/plugin.mjs +4 -1
  114. package/dist/plugins/codeGenerator/routeToDataParser.cjs +7 -2
  115. package/dist/plugins/codeGenerator/routeToDataParser.mjs +8 -3
  116. package/dist/plugins/openApiGenerator/aggregateStepContract.cjs +6 -3
  117. package/dist/plugins/openApiGenerator/aggregateStepContract.mjs +7 -4
  118. package/dist/plugins/openApiGenerator/index.cjs +2 -0
  119. package/dist/plugins/openApiGenerator/index.d.ts +1 -0
  120. package/dist/plugins/openApiGenerator/index.mjs +1 -0
  121. package/dist/plugins/openApiGenerator/makeOpenApiRoute.cjs +3 -1
  122. package/dist/plugins/openApiGenerator/makeOpenApiRoute.d.ts +2 -0
  123. package/dist/plugins/openApiGenerator/makeOpenApiRoute.mjs +3 -1
  124. package/dist/plugins/openApiGenerator/metadata.cjs +8 -0
  125. package/dist/plugins/openApiGenerator/metadata.d.ts +1 -0
  126. package/dist/plugins/openApiGenerator/metadata.mjs +6 -0
  127. package/dist/plugins/openApiGenerator/plugin.cjs +17 -9
  128. package/dist/plugins/openApiGenerator/plugin.d.ts +2 -2
  129. package/dist/plugins/openApiGenerator/plugin.mjs +18 -10
  130. package/dist/plugins/openApiGenerator/routeToOpenApi.cjs +5 -0
  131. package/dist/plugins/openApiGenerator/routeToOpenApi.mjs +6 -1
  132. package/package.json +1 -1
  133. /package/dist/core/builders/process/{export.cjs → exports.cjs} +0 -0
  134. /package/dist/core/builders/process/{export.d.ts → exports.d.ts} +0 -0
  135. /package/dist/core/builders/process/{export.mjs → exports.mjs} +0 -0
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ var kind = require('../kind.cjs');
4
+ var utils = require('@duplojs/utils');
5
+
6
+ const metadataKind = kind.createCoreLibKind("metadata");
7
+ function createMetadata(name) {
8
+ function metadataHandler(value) {
9
+ return metadataKind.setTo(utils.wrapValue(value), name);
10
+ }
11
+ metadataHandler.dataName = name;
12
+ metadataHandler.is = function (input) {
13
+ return metadataKind.has(input)
14
+ && metadataKind.getValue(input) === name;
15
+ };
16
+ return metadataHandler;
17
+ }
18
+
19
+ exports.createMetadata = createMetadata;
20
+ exports.metadataKind = metadataKind;
@@ -0,0 +1,14 @@
1
+ import { type WrappedValue, type Kind, type IsEqual, type Or, type IsExtends } from "@duplojs/utils";
2
+ export declare const metadataKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/metadata", string>>;
3
+ export interface Metadata<GenericName extends string = string, GenericValue extends unknown = unknown> extends Kind<typeof metadataKind.definition, GenericName>, WrappedValue<GenericValue> {
4
+ }
5
+ export interface MetadataHandler<GenericName extends string, GenericValue extends unknown> {
6
+ dataName: GenericName;
7
+ <GenericMetadataValue extends GenericValue>(...args: Or<[
8
+ IsEqual<GenericValue, unknown>,
9
+ IsEqual<GenericValue, never>,
10
+ IsExtends<undefined, GenericValue>
11
+ ]> extends true ? [value?: GenericMetadataValue] : [value: GenericMetadataValue]): Metadata<GenericName, GenericMetadataValue>;
12
+ is(input: unknown): input is Metadata<GenericName, any>;
13
+ }
14
+ export declare function createMetadata<GenericName extends string, GenericValue extends unknown = unknown>(name: GenericName): MetadataHandler<GenericName, GenericValue>;
@@ -0,0 +1,17 @@
1
+ import { createCoreLibKind } from '../kind.mjs';
2
+ import { wrapValue } from '@duplojs/utils';
3
+
4
+ const metadataKind = createCoreLibKind("metadata");
5
+ function createMetadata(name) {
6
+ function metadataHandler(value) {
7
+ return metadataKind.setTo(wrapValue(value), name);
8
+ }
9
+ metadataHandler.dataName = name;
10
+ metadataHandler.is = function (input) {
11
+ return metadataKind.has(input)
12
+ && metadataKind.getValue(input) === name;
13
+ };
14
+ return metadataHandler;
15
+ }
16
+
17
+ export { createMetadata, metadataKind };
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ var base = require('./base.cjs');
4
+
5
+ const IgnoreByRouteStoreMetadata = base.createMetadata("ignore-by-route-store");
6
+
7
+ exports.IgnoreByRouteStoreMetadata = IgnoreByRouteStoreMetadata;
@@ -0,0 +1 @@
1
+ export declare const IgnoreByRouteStoreMetadata: import("./base").MetadataHandler<"ignore-by-route-store", unknown>;
@@ -0,0 +1,5 @@
1
+ import { createMetadata } from './base.mjs';
2
+
3
+ const IgnoreByRouteStoreMetadata = createMetadata("ignore-by-route-store");
4
+
5
+ export { IgnoreByRouteStoreMetadata };
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var base = require('./base.cjs');
4
+ var ignoreByRouteStore = require('./ignoreByRouteStore.cjs');
5
+
6
+
7
+
8
+ exports.createMetadata = base.createMetadata;
9
+ exports.metadataKind = base.metadataKind;
10
+ exports.IgnoreByRouteStoreMetadata = ignoreByRouteStore.IgnoreByRouteStoreMetadata;
@@ -0,0 +1,2 @@
1
+ export * from "./base";
2
+ export * from "./ignoreByRouteStore";
@@ -0,0 +1,2 @@
1
+ export { createMetadata, metadataKind } from './base.mjs';
2
+ export { IgnoreByRouteStoreMetadata } from './ignoreByRouteStore.mjs';
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ function createNarrowingInput() {
4
+ return new Proxy({}, {
5
+ get(target, name) {
6
+ return (target[name] ||= (value) => ({
7
+ inputName: name,
8
+ value,
9
+ }));
10
+ },
11
+ });
12
+ }
13
+
14
+ exports.createNarrowingInput = createNarrowingInput;
@@ -0,0 +1,10 @@
1
+ import { type SimplifyTopLevel, type AnyFunction, type ObjectKey } from "@duplojs/utils";
2
+ export interface NarrowingInput<N extends ObjectKey = ObjectKey, V extends unknown = unknown> {
3
+ inputName: N;
4
+ value: V;
5
+ }
6
+ export type ShrinkerInput<T extends object = object> = SimplifyTopLevel<{
7
+ [P in keyof T]: (value: T[P]) => NarrowingInput<P, T[P]>;
8
+ }>;
9
+ export type GetNarrowingInput<I extends ShrinkerInput, N extends keyof I = keyof I> = ReturnType<I[N] extends AnyFunction ? I[N] : never>;
10
+ export declare function createNarrowingInput<T extends object>(): ShrinkerInput<T>;
@@ -0,0 +1,12 @@
1
+ function createNarrowingInput() {
2
+ return new Proxy({}, {
3
+ get(target, name) {
4
+ return (target[name] ||= (value) => ({
5
+ inputName: name,
6
+ value,
7
+ }));
8
+ },
9
+ });
10
+ }
11
+
12
+ export { createNarrowingInput };
@@ -3,6 +3,7 @@ import { type ProcessStep, type CheckerStep, type CutStep, type ExtractStep, typ
3
3
  import { type Floor } from "../floor";
4
4
  import { type HookRouteLifeCycle } from "../route";
5
5
  import { type Request } from "../request";
6
+ import { type Metadata } from "../metadata";
6
7
  export * from "./types";
7
8
  export interface ProcessStepsCustom {
8
9
  }
@@ -13,6 +14,7 @@ export interface ProcessDefinition {
13
14
  steps: readonly ProcessSteps[];
14
15
  options?: Record<string, unknown>;
15
16
  readonly hooks: readonly HookRouteLifeCycle[];
17
+ readonly metadata: readonly Metadata[];
16
18
  [SymbolProcessExportValue]?: Floor;
17
19
  [SymbolProcessRequest]?: Request;
18
20
  }
@@ -28,4 +30,4 @@ export declare const processKind: import("@duplojs/utils").KindHandler<import("@
28
30
  export interface Process<GenericDefinition extends ProcessDefinition = ProcessDefinition> extends Kind<typeof processKind.definition> {
29
31
  definition: GenericDefinition;
30
32
  }
31
- export declare function createProcess<GenericDefinition extends Pick<ProcessDefinition, "steps" | "options" | "hooks">>(definition: GenericDefinition): Process<GenericDefinition>;
33
+ export declare function createProcess<GenericDefinition extends Pick<ProcessDefinition, "steps" | "options" | "hooks" | "metadata">>(definition: GenericDefinition): Process<GenericDefinition>;
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
 
3
3
  var kind = require('../kind.cjs');
4
- require('../response/index.cjs');
5
4
 
6
5
  const hookRouteExitKind = kind.createCoreLibKind("route-hook-exit");
7
6
  const hookRouteNextKind = kind.createCoreLibKind("route-hook-next");
@@ -2,7 +2,6 @@ import { type Request } from "../request";
2
2
  import { type UnionToIntersection, type AnyFunction, type Kind, type MaybePromise, type SimplifyTopLevel, type IsEqual } from "@duplojs/utils";
3
3
  import { type HookResponse } from "../response";
4
4
  import { type ResponseCode, type Response } from "../response";
5
- export * from "../response";
6
5
  export interface HookParamsOnConstructRequest {
7
6
  request: Request;
8
7
  addRequestProperties<GenericNewProperties extends Record<string, unknown>>(newProperties: GenericNewProperties): Request & GenericNewProperties;
@@ -1,5 +1,4 @@
1
1
  import { createCoreLibKind } from '../kind.mjs';
2
- import '../response/index.mjs';
3
2
 
4
3
  const hookRouteExitKind = createCoreLibKind("route-hook-exit");
5
4
  const hookRouteNextKind = createCoreLibKind("route-hook-next");
@@ -2,6 +2,7 @@ import { type O, type Kind } from "@duplojs/utils";
2
2
  import { type RequestMethods } from "../request";
3
3
  import { type ExtractStep, type CheckerStep, type CutStep, type HandlerStep, type ProcessStep, type stepKind, type PresetCheckerStep } from "../steps";
4
4
  import { type HookRouteLifeCycle } from "./hooks";
5
+ import { type Metadata } from "../metadata";
5
6
  export * from "./types";
6
7
  export * from "./hooks";
7
8
  export interface RouteStepsCustom {
@@ -17,6 +18,7 @@ export interface RouteDefinition {
17
18
  readonly preflightSteps: readonly RoutePreFlightSteps[];
18
19
  readonly steps: readonly RouteSteps[];
19
20
  readonly hooks: readonly HookRouteLifeCycle[];
21
+ readonly metadata: readonly Metadata[];
20
22
  }
21
23
  export declare const routeKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/route", unknown>>;
22
24
  export interface Route<GenericDefinition extends RouteDefinition = RouteDefinition> extends Kind<typeof routeKind.definition> {
@@ -58,6 +58,7 @@ async function buildRouter(inputHub) {
58
58
  hooks: [],
59
59
  preflightSteps: [],
60
60
  steps: [hub.notfoundHandler],
61
+ metadata: [],
61
62
  }), async (route) => {
62
63
  const result = await build.buildRouteFunction(route, buildParams);
63
64
  return utils.E.whenIsLeft(result, (element) => {
@@ -57,6 +57,7 @@ async function buildRouter(inputHub) {
57
57
  hooks: [],
58
58
  preflightSteps: [],
59
59
  steps: [hub.notfoundHandler],
60
+ metadata: [],
60
61
  }), async (route) => {
61
62
  const result = await buildRouteFunction(route, buildParams);
62
63
  return E.whenIsLeft(result, (element) => {
@@ -2,8 +2,9 @@ import { type createStepFunctionBuilder, type createRouteFunctionBuilder } from
2
2
  import { type HookHubLifeCycle } from "../../hub";
3
3
  import { type RequestInitializationData } from "../../request";
4
4
  import { type HookRouteLifeCycle, type Route, type RouteDefinition } from "../../route";
5
+ export type RouterInitializationData = Omit<RequestInitializationData, "matchedPath" | "params" | "path" | "query">;
5
6
  export interface BuildedRouter {
6
- exec(initializationData: Omit<RequestInitializationData, "matchedPath" | "params" | "path" | "query">): Promise<void>;
7
+ exec(initializationData: RouterInitializationData): Promise<void>;
7
8
  readonly routes: readonly Route<RouteDefinition>[];
8
9
  readonly hooksRouteLifeCycle: readonly HookRouteLifeCycle[];
9
10
  readonly routeFunctionBuilders: readonly ReturnType<typeof createRouteFunctionBuilder>[];
@@ -3,6 +3,7 @@ import { type StepKind } from "./kind";
3
3
  import { type Checker } from "../checker";
4
4
  import { type Floor } from "../floor";
5
5
  import { type ClientErrorResponseCode, type ResponseContract } from "../response";
6
+ import { type Metadata } from "../metadata";
6
7
  export interface CheckerStepDefinition {
7
8
  readonly checker: Checker;
8
9
  readonly result: string | readonly string[];
@@ -10,6 +11,7 @@ export interface CheckerStepDefinition {
10
11
  input(input: Floor): unknown;
11
12
  readonly options?: Record<string, unknown> | ((input: any) => Record<string, unknown>);
12
13
  readonly responseContract: ResponseContract.Contract<ClientErrorResponseCode>;
14
+ readonly metadata: readonly Metadata[];
13
15
  }
14
16
  export declare const checkerStepKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/checker-step", unknown>>;
15
17
  export type _CheckerStep = (Kind<typeof checkerStepKind.definition> & StepKind);
@@ -4,6 +4,7 @@ import { type Floor } from "../floor";
4
4
  import { type StepFunctionParams } from "./types";
5
5
  import { type PredictedResponse, type ResponseContract } from "../response";
6
6
  import { type Request } from "../request";
7
+ import { type Metadata } from "../metadata";
7
8
  export declare const cutStepOutputKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/cut-output", unknown>>;
8
9
  export interface CutStepFunctionOutput<GenericData extends Record<string, unknown> = Record<string, unknown>> extends Kind<typeof cutStepOutputKind.definition>, WrappedValue<GenericData> {
9
10
  }
@@ -13,6 +14,7 @@ export interface CutStepFunctionParams<GenericRequest extends Request = Request,
13
14
  export interface CutStepDefinition {
14
15
  theFunction(floor: Floor, params: CutStepFunctionParams): MaybePromise<CutStepFunctionOutput | PredictedResponse>;
15
16
  readonly responseContract: ResponseContract.Contract | readonly ResponseContract.Contract[];
17
+ readonly metadata: readonly Metadata[];
16
18
  }
17
19
  export declare const cutStepKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/cut-step", unknown>>;
18
20
  export type _CutStep = (Kind<typeof cutStepKind.definition> & StepKind);
@@ -2,6 +2,7 @@ import { type DP, type Kind, type O, type AnyFunction } from "@duplojs/utils";
2
2
  import { type StepKind } from "./kind";
3
3
  import { type Request } from "../request";
4
4
  import { type ClientErrorResponseCode, type ResponseContract } from "../response";
5
+ import { type Metadata } from "../metadata";
5
6
  export interface DisabledExtractKeysCustom {
6
7
  }
7
8
  export type DisabledExtractKeys = O.GetPropsWithValue<DisabledExtractKeysCustom, true>;
@@ -9,6 +10,7 @@ export type ExtractShape<GenericRequest extends Request = Request> = Partial<Rec
9
10
  export interface ExtractStepDefinition {
10
11
  readonly shape: ExtractShape;
11
12
  readonly responseContract?: ResponseContract.Contract<ClientErrorResponseCode, string, DP.DataParserEmpty>;
13
+ readonly metadata: readonly Metadata[];
12
14
  }
13
15
  export declare const extractStepKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/extract-step", unknown>>;
14
16
  export type _ExtractStep = (Kind<typeof extractStepKind.definition> & StepKind);
@@ -4,11 +4,13 @@ import { type Floor } from "../floor";
4
4
  import { type PredictedResponse, type ResponseContract } from "../response";
5
5
  import { type Request } from "../request";
6
6
  import { type StepFunctionParams } from "./types";
7
+ import { type Metadata } from "../metadata";
7
8
  export interface HandlerStepFunctionParams<GenericRequest extends Request = Request, GenericResponse extends PredictedResponse = PredictedResponse> extends StepFunctionParams<GenericRequest, GenericResponse> {
8
9
  }
9
10
  export interface HandlerStepDefinition {
10
11
  theFunction(floor: Floor, params: HandlerStepFunctionParams): MaybePromise<PredictedResponse>;
11
12
  readonly responseContract: ResponseContract.Contract | readonly ResponseContract.Contract[];
13
+ readonly metadata: readonly Metadata[];
12
14
  }
13
15
  export declare const handlerStepKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/handler-step", unknown>>;
14
16
  type _HandlerStep = (Kind<typeof handlerStepKind.definition> & StepKind);
@@ -2,9 +2,11 @@ import { type Kind } from "@duplojs/utils";
2
2
  import { type StepKind } from "./kind";
3
3
  import { type Floor } from "../floor";
4
4
  import { type PresetChecker } from "../presetChecker";
5
+ import { type Metadata } from "../metadata";
5
6
  export interface PresetCheckerStepDefinition {
6
7
  readonly presetChecker: PresetChecker;
7
8
  input(input: Floor): unknown;
9
+ readonly metadata: readonly Metadata[];
8
10
  }
9
11
  export declare const presetCheckerStepKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/presetChecker-step", unknown>>;
10
12
  export type _PresetCheckerStep = (Kind<typeof presetCheckerStepKind.definition> & StepKind);
@@ -1,10 +1,12 @@
1
1
  import { type Kind } from "@duplojs/utils";
2
2
  import { type StepKind } from "./kind";
3
3
  import { type Process } from "../process";
4
+ import { type Metadata } from "../metadata";
4
5
  export interface ProcessStepDefinition {
5
6
  readonly process: Process;
6
7
  readonly options?: Record<string, unknown> | ((input: any) => Record<string, unknown>);
7
8
  readonly imports?: readonly string[];
9
+ readonly metadata: readonly Metadata[];
8
10
  }
9
11
  export declare const processStepKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/process-step", unknown>>;
10
12
  export type _ProcessStep = (Kind<typeof processStepKind.definition> & StepKind);
@@ -1,52 +1,25 @@
1
1
  'use strict';
2
2
 
3
- require('../../core/hub/index.cjs');
4
- var index = require('../../core/router/index.cjs');
5
3
  var utils = require('@duplojs/utils');
6
4
  var http = require('http');
7
5
  var https = require('https');
8
- var hooks$1 = require('./hooks.cjs');
9
- var hooks = require('../../core/hub/hooks.cjs');
6
+ var hooks = require('./hooks.cjs');
7
+ var implementHttpServer = require('../../core/implementHttpServer.cjs');
10
8
 
11
- async function createHttpServer(inputHub, params) {
12
- const httpServerParams = {
13
- ...params,
9
+ function createHttpServer(inputHub, params) {
10
+ const httpServerParams = utils.O.override({
11
+ host: "localhost",
12
+ port: 80,
14
13
  maxBodySize: "50mb",
15
14
  informationHeaderKey: "information",
16
15
  predictedHeaderKey: "predicted",
17
16
  fromHookHeaderKey: "from-hook",
18
17
  interface: "node",
19
- };
20
- const newHub1 = await hooks.launchHookServer(inputHub.aggregatesHooksHubLifeCycle("beforeServerBuildRoutes"), inputHub, httpServerParams);
21
- const router = await index.buildRouter(newHub1.addRouteHooks(hooks$1.makeNodeHook(newHub1, httpServerParams)));
22
- const newHub2 = await hooks.launchHookServer(newHub1.aggregatesHooksHubLifeCycle("beforeStartServer"), newHub1, httpServerParams);
23
- if (inputHub.config.environment === "BUILD") {
24
- process.exit(0);
25
- }
26
- const server = params.https
27
- ? https.createServer(params.https)
28
- : http.createServer(params.http ?? {});
29
- const serverErrorHooks = newHub1.aggregatesHooksHubLifeCycle("serverError");
30
- server.addListener("request", (serverRequest, serverResponse) => router
31
- .exec({
32
- method: serverRequest.method ?? "",
33
- headers: serverRequest.headers,
34
- host: serverRequest.headers.host ?? "",
35
- origin: serverRequest.headers.origin ?? "",
36
- url: serverRequest.url ?? "",
37
- raw: {
38
- request: serverRequest,
39
- response: serverResponse,
40
- },
41
- })
42
- .catch(async (error) => {
43
- await hooks.launchHookServerError(serverErrorHooks, {
44
- error,
45
- exit: hooks.serverErrorExitHookFunction,
46
- next: hooks.serverErrorNextHookFunction,
47
- serverRequest,
48
- serverResponse,
49
- }).catch(utils.forward);
18
+ }, params);
19
+ const hooks$1 = hooks.makeNodeHook(inputHub, httpServerParams);
20
+ const hub = inputHub.addRouteHooks(hooks$1);
21
+ function whenUncaughtError(error, routerInitializationData) {
22
+ const serverResponse = routerInitializationData.raw.response;
50
23
  if (!serverResponse.headersSent && !serverResponse.writableEnded) {
51
24
  serverResponse.writeHead(500, {
52
25
  [httpServerParams.informationHeaderKey]: "critical-server-error",
@@ -59,15 +32,32 @@ async function createHttpServer(inputHub, params) {
59
32
  if (!serverResponse.writableEnded) {
60
33
  serverResponse.end();
61
34
  }
62
- }));
63
- await new Promise((resolve) => {
64
- server.listen({
65
- port: httpServerParams.port,
66
- host: httpServerParams.host,
67
- }, () => void resolve());
35
+ }
36
+ return implementHttpServer.implementHttpServer({
37
+ hub,
38
+ httpServerParams,
39
+ }, ({ httpServerParams, execRouteSystem }) => {
40
+ const server = httpServerParams.https
41
+ ? https.createServer(httpServerParams.https)
42
+ : http.createServer(httpServerParams.http ?? {});
43
+ server.addListener("request", (serverRequest, serverResponse) => execRouteSystem({
44
+ method: serverRequest.method ?? "",
45
+ headers: serverRequest.headers,
46
+ host: serverRequest.headers.host ?? "",
47
+ origin: serverRequest.headers.origin ?? "",
48
+ url: serverRequest.url ?? "",
49
+ raw: {
50
+ request: serverRequest,
51
+ response: serverResponse,
52
+ },
53
+ }, whenUncaughtError));
54
+ return new Promise((resolve) => {
55
+ server.listen({
56
+ port: httpServerParams.port,
57
+ host: httpServerParams.host,
58
+ }, () => void resolve(server));
59
+ });
68
60
  });
69
- await hooks.launchHookServer(newHub2.aggregatesHooksHubLifeCycle("afterStartServer"), newHub2, httpServerParams);
70
- return server;
71
61
  }
72
62
 
73
63
  exports.createHttpServer = createHttpServer;
@@ -1,6 +1,6 @@
1
1
  import { type HttpServerParams, type Hub } from "../../core/hub";
2
2
  import { type Hosts } from "./types/host";
3
- import { type O, type BytesInString } from "@duplojs/utils";
3
+ import { type BytesInString, O } from "@duplojs/utils";
4
4
  import http from "http";
5
5
  import https from "https";
6
6
  declare module "../../core/hub" {
@@ -15,10 +15,6 @@ declare module "../../core/hub" {
15
15
  readonly http?: http.ServerOptions;
16
16
  readonly https?: https.ServerOptions;
17
17
  }
18
- interface HttpServerErrorParams {
19
- readonly serverRequest: http.IncomingMessage;
20
- readonly serverResponse: http.ServerResponse;
21
- }
22
18
  }
23
19
  export type CreateHttpServerParams = O.PartialKeys<Omit<HttpServerParams, "interface">, "maxBodySize" | "informationHeaderKey" | "predictedHeaderKey" | "fromHookHeaderKey">;
24
20
  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,50 +1,23 @@
1
- import '../../core/hub/index.mjs';
2
- import { buildRouter } from '../../core/router/index.mjs';
3
- import { forward } from '@duplojs/utils';
1
+ import { O } from '@duplojs/utils';
4
2
  import http from 'http';
5
3
  import https from 'https';
6
4
  import { makeNodeHook } from './hooks.mjs';
7
- import { launchHookServer, launchHookServerError, serverErrorNextHookFunction, serverErrorExitHookFunction } from '../../core/hub/hooks.mjs';
5
+ import { implementHttpServer } from '../../core/implementHttpServer.mjs';
8
6
 
9
- async function createHttpServer(inputHub, params) {
10
- const httpServerParams = {
11
- ...params,
7
+ function createHttpServer(inputHub, params) {
8
+ const httpServerParams = O.override({
9
+ host: "localhost",
10
+ port: 80,
12
11
  maxBodySize: "50mb",
13
12
  informationHeaderKey: "information",
14
13
  predictedHeaderKey: "predicted",
15
14
  fromHookHeaderKey: "from-hook",
16
15
  interface: "node",
17
- };
18
- const newHub1 = await launchHookServer(inputHub.aggregatesHooksHubLifeCycle("beforeServerBuildRoutes"), inputHub, httpServerParams);
19
- const router = await buildRouter(newHub1.addRouteHooks(makeNodeHook(newHub1, httpServerParams)));
20
- const newHub2 = await launchHookServer(newHub1.aggregatesHooksHubLifeCycle("beforeStartServer"), newHub1, httpServerParams);
21
- if (inputHub.config.environment === "BUILD") {
22
- process.exit(0);
23
- }
24
- const server = params.https
25
- ? https.createServer(params.https)
26
- : http.createServer(params.http ?? {});
27
- const serverErrorHooks = newHub1.aggregatesHooksHubLifeCycle("serverError");
28
- server.addListener("request", (serverRequest, serverResponse) => router
29
- .exec({
30
- method: serverRequest.method ?? "",
31
- headers: serverRequest.headers,
32
- host: serverRequest.headers.host ?? "",
33
- origin: serverRequest.headers.origin ?? "",
34
- url: serverRequest.url ?? "",
35
- raw: {
36
- request: serverRequest,
37
- response: serverResponse,
38
- },
39
- })
40
- .catch(async (error) => {
41
- await launchHookServerError(serverErrorHooks, {
42
- error,
43
- exit: serverErrorExitHookFunction,
44
- next: serverErrorNextHookFunction,
45
- serverRequest,
46
- serverResponse,
47
- }).catch(forward);
16
+ }, params);
17
+ const hooks = makeNodeHook(inputHub, httpServerParams);
18
+ const hub = inputHub.addRouteHooks(hooks);
19
+ function whenUncaughtError(error, routerInitializationData) {
20
+ const serverResponse = routerInitializationData.raw.response;
48
21
  if (!serverResponse.headersSent && !serverResponse.writableEnded) {
49
22
  serverResponse.writeHead(500, {
50
23
  [httpServerParams.informationHeaderKey]: "critical-server-error",
@@ -57,15 +30,32 @@ async function createHttpServer(inputHub, params) {
57
30
  if (!serverResponse.writableEnded) {
58
31
  serverResponse.end();
59
32
  }
60
- }));
61
- await new Promise((resolve) => {
62
- server.listen({
63
- port: httpServerParams.port,
64
- host: httpServerParams.host,
65
- }, () => void resolve());
33
+ }
34
+ return implementHttpServer({
35
+ hub,
36
+ httpServerParams,
37
+ }, ({ httpServerParams, execRouteSystem }) => {
38
+ const server = httpServerParams.https
39
+ ? https.createServer(httpServerParams.https)
40
+ : http.createServer(httpServerParams.http ?? {});
41
+ server.addListener("request", (serverRequest, serverResponse) => execRouteSystem({
42
+ method: serverRequest.method ?? "",
43
+ headers: serverRequest.headers,
44
+ host: serverRequest.headers.host ?? "",
45
+ origin: serverRequest.headers.origin ?? "",
46
+ url: serverRequest.url ?? "",
47
+ raw: {
48
+ request: serverRequest,
49
+ response: serverResponse,
50
+ },
51
+ }, whenUncaughtError));
52
+ return new Promise((resolve) => {
53
+ server.listen({
54
+ port: httpServerParams.port,
55
+ host: httpServerParams.host,
56
+ }, () => void resolve(server));
57
+ });
66
58
  });
67
- await launchHookServer(newHub2.aggregatesHooksHubLifeCycle("afterStartServer"), newHub2, httpServerParams);
68
- return server;
69
59
  }
70
60
 
71
61
  export { createHttpServer };
@@ -3,6 +3,7 @@
3
3
  require('../../core/route/index.cjs');
4
4
  var utils = require('@duplojs/utils');
5
5
  require('./error/index.cjs');
6
+ require('../../core/response/index.cjs');
6
7
  var hooks = require('../../core/route/hooks.cjs');
7
8
  var predicted = require('../../core/response/predicted.cjs');
8
9
  var hook = require('../../core/response/hook.cjs');
@@ -80,15 +81,17 @@ function makeNodeHook(hub, serverParams) {
80
81
  return exit();
81
82
  },
82
83
  beforeSendResponse({ request, currentResponse, exit }) {
83
- const body = currentResponse.body;
84
- if (typeof body === "string"
85
- || body instanceof Error) {
86
- currentResponse.setHeader("content-type", "text/plain; charset=utf-8");
87
- }
88
- else if (typeof body === "object"
89
- || typeof body === "number"
90
- || typeof body === "boolean") {
91
- currentResponse.setHeader("content-type", "application/json; charset=utf-8");
84
+ if (!currentResponse.headers?.["content-type"]) {
85
+ const body = currentResponse.body;
86
+ if (typeof body === "string"
87
+ || body instanceof Error) {
88
+ currentResponse.setHeader("content-type", "text/plain; charset=utf-8");
89
+ }
90
+ else if (typeof body === "object"
91
+ || typeof body === "number"
92
+ || typeof body === "boolean") {
93
+ currentResponse.setHeader("content-type", "application/json; charset=utf-8");
94
+ }
92
95
  }
93
96
  currentResponse.setHeader(informationHeaderKey, currentResponse.information);
94
97
  if (currentResponse instanceof predicted.PredictedResponse) {
@@ -1,5 +1,5 @@
1
1
  import { type HttpServerParams, type Hub } from "../../core/hub";
2
- import { HookResponse } from "../../core/route";
2
+ import { HookResponse } from "../../core/response";
3
3
  export declare function makeNodeHook(hub: Hub, serverParams: HttpServerParams): {
4
4
  parseBody({ request, exit }: import("../../core/route").RouteHookParams<import("../../core/request").Request>): Promise<import("../../core/route").RouteHookExit>;
5
5
  error({ error, response, exit }: import("../../core/route").RouteHookErrorParams<import("../../core/request").Request>): import("../../core/route").RouteHookExit | HookResponse<"400", "body-size-exceeds-limit-error", unknown> | HookResponse<"400", "body-parse-wrong-chunk-received", unknown> | HookResponse<"400", "body-parse-unknown-error", unknown>;
@@ -1,6 +1,7 @@
1
1
  import '../../core/route/index.mjs';
2
2
  import { stringToBytes } from '@duplojs/utils';
3
3
  import './error/index.mjs';
4
+ import '../../core/response/index.mjs';
4
5
  import { createHookRouteLifeCycle } from '../../core/route/hooks.mjs';
5
6
  import { PredictedResponse } from '../../core/response/predicted.mjs';
6
7
  import { HookResponse } from '../../core/response/hook.mjs';
@@ -78,15 +79,17 @@ function makeNodeHook(hub, serverParams) {
78
79
  return exit();
79
80
  },
80
81
  beforeSendResponse({ request, currentResponse, exit }) {
81
- const body = currentResponse.body;
82
- if (typeof body === "string"
83
- || body instanceof Error) {
84
- currentResponse.setHeader("content-type", "text/plain; charset=utf-8");
85
- }
86
- else if (typeof body === "object"
87
- || typeof body === "number"
88
- || typeof body === "boolean") {
89
- currentResponse.setHeader("content-type", "application/json; charset=utf-8");
82
+ if (!currentResponse.headers?.["content-type"]) {
83
+ const body = currentResponse.body;
84
+ if (typeof body === "string"
85
+ || body instanceof Error) {
86
+ currentResponse.setHeader("content-type", "text/plain; charset=utf-8");
87
+ }
88
+ else if (typeof body === "object"
89
+ || typeof body === "number"
90
+ || typeof body === "boolean") {
91
+ currentResponse.setHeader("content-type", "application/json; charset=utf-8");
92
+ }
90
93
  }
91
94
  currentResponse.setHeader(informationHeaderKey, currentResponse.information);
92
95
  if (currentResponse instanceof PredictedResponse) {