@fluojs/http 1.0.0-beta.1 → 1.0.0-beta.11

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 (106) hide show
  1. package/README.ko.md +39 -5
  2. package/README.md +39 -5
  3. package/dist/adapter.d.ts +31 -0
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js +37 -0
  6. package/dist/adapters/binding.d.ts +6 -0
  7. package/dist/adapters/binding.d.ts.map +1 -1
  8. package/dist/adapters/binding.js +54 -55
  9. package/dist/adapters/dto-binding-plan.d.ts +22 -0
  10. package/dist/adapters/dto-binding-plan.d.ts.map +1 -0
  11. package/dist/adapters/dto-binding-plan.js +86 -0
  12. package/dist/adapters/dto-validation-adapter.d.ts +3 -1
  13. package/dist/adapters/dto-validation-adapter.d.ts.map +1 -1
  14. package/dist/adapters/dto-validation-adapter.js +10 -16
  15. package/dist/context/request-context-node-store.d.ts +25 -0
  16. package/dist/context/request-context-node-store.d.ts.map +1 -0
  17. package/dist/context/request-context-node-store.js +32 -0
  18. package/dist/context/request-context-stack-store.d.ts +8 -0
  19. package/dist/context/request-context-stack-store.d.ts.map +1 -0
  20. package/dist/context/request-context-stack-store.js +29 -0
  21. package/dist/context/request-context-store.d.ts +7 -0
  22. package/dist/context/request-context-store.d.ts.map +1 -0
  23. package/dist/context/request-context-store.js +1 -0
  24. package/dist/context/request-context.d.ts +7 -3
  25. package/dist/context/request-context.d.ts.map +1 -1
  26. package/dist/context/request-context.js +17 -5
  27. package/dist/context/sse.d.ts +38 -0
  28. package/dist/context/sse.d.ts.map +1 -1
  29. package/dist/context/sse.js +50 -2
  30. package/dist/decorators.d.ts.map +1 -1
  31. package/dist/decorators.js +262 -53
  32. package/dist/dispatch/dispatch-content-negotiation.d.ts +17 -0
  33. package/dist/dispatch/dispatch-content-negotiation.d.ts.map +1 -1
  34. package/dist/dispatch/dispatch-content-negotiation.js +21 -0
  35. package/dist/dispatch/dispatch-error-policy.d.ts +8 -0
  36. package/dist/dispatch/dispatch-error-policy.d.ts.map +1 -1
  37. package/dist/dispatch/dispatch-error-policy.js +9 -0
  38. package/dist/dispatch/dispatch-handler-policy.d.ts +11 -1
  39. package/dist/dispatch/dispatch-handler-policy.d.ts.map +1 -1
  40. package/dist/dispatch/dispatch-handler-policy.js +17 -5
  41. package/dist/dispatch/dispatch-response-policy.d.ts +11 -1
  42. package/dist/dispatch/dispatch-response-policy.d.ts.map +1 -1
  43. package/dist/dispatch/dispatch-response-policy.js +44 -2
  44. package/dist/dispatch/dispatch-routing-policy.d.ts +13 -0
  45. package/dist/dispatch/dispatch-routing-policy.d.ts.map +1 -1
  46. package/dist/dispatch/dispatch-routing-policy.js +49 -4
  47. package/dist/dispatch/dispatcher.d.ts +24 -7
  48. package/dist/dispatch/dispatcher.d.ts.map +1 -1
  49. package/dist/dispatch/dispatcher.js +464 -48
  50. package/dist/dispatch/fast-path/debug-visibility.d.ts +18 -0
  51. package/dist/dispatch/fast-path/debug-visibility.d.ts.map +1 -0
  52. package/dist/dispatch/fast-path/debug-visibility.js +39 -0
  53. package/dist/dispatch/fast-path/eligibility-checker.d.ts +22 -0
  54. package/dist/dispatch/fast-path/eligibility-checker.d.ts.map +1 -0
  55. package/dist/dispatch/fast-path/eligibility-checker.js +107 -0
  56. package/dist/dispatch/fast-path/eligibility.d.ts +61 -0
  57. package/dist/dispatch/fast-path/eligibility.d.ts.map +1 -0
  58. package/dist/dispatch/fast-path/eligibility.js +23 -0
  59. package/dist/dispatch/fast-path/fast-path-executor.d.ts +21 -0
  60. package/dist/dispatch/fast-path/fast-path-executor.d.ts.map +1 -0
  61. package/dist/dispatch/fast-path/fast-path-executor.js +80 -0
  62. package/dist/dispatch/fast-path/index.d.ts +6 -0
  63. package/dist/dispatch/fast-path/index.d.ts.map +1 -0
  64. package/dist/dispatch/fast-path/index.js +4 -0
  65. package/dist/dispatch/native-route-handoff.d.ts +53 -0
  66. package/dist/dispatch/native-route-handoff.d.ts.map +1 -0
  67. package/dist/dispatch/native-route-handoff.js +97 -0
  68. package/dist/errors.d.ts +3 -0
  69. package/dist/errors.d.ts.map +1 -1
  70. package/dist/errors.js +4 -0
  71. package/dist/guards.d.ts +7 -0
  72. package/dist/guards.d.ts.map +1 -1
  73. package/dist/guards.js +11 -0
  74. package/dist/index.d.ts +2 -0
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +1 -0
  77. package/dist/input-error-detail.d.ts +9 -0
  78. package/dist/input-error-detail.d.ts.map +1 -1
  79. package/dist/input-error-detail.js +10 -0
  80. package/dist/interceptors.d.ts +8 -0
  81. package/dist/interceptors.d.ts.map +1 -1
  82. package/dist/interceptors.js +14 -1
  83. package/dist/internal.d.ts +3 -0
  84. package/dist/internal.d.ts.map +1 -1
  85. package/dist/internal.js +3 -1
  86. package/dist/mapping.d.ts +7 -0
  87. package/dist/mapping.d.ts.map +1 -1
  88. package/dist/mapping.js +93 -11
  89. package/dist/middleware/correlation.d.ts +5 -0
  90. package/dist/middleware/correlation.d.ts.map +1 -1
  91. package/dist/middleware/correlation.js +14 -2
  92. package/dist/middleware/cors.d.ts +9 -0
  93. package/dist/middleware/cors.d.ts.map +1 -1
  94. package/dist/middleware/cors.js +11 -0
  95. package/dist/middleware/middleware.d.ts +34 -0
  96. package/dist/middleware/middleware.d.ts.map +1 -1
  97. package/dist/middleware/middleware.js +47 -0
  98. package/dist/middleware/security-headers.d.ts +9 -0
  99. package/dist/middleware/security-headers.d.ts.map +1 -1
  100. package/dist/middleware/security-headers.js +11 -0
  101. package/dist/route-path.d.ts +41 -0
  102. package/dist/route-path.d.ts.map +1 -1
  103. package/dist/route-path.js +50 -0
  104. package/dist/types.d.ts +17 -0
  105. package/dist/types.d.ts.map +1 -1
  106. package/package.json +4 -4
@@ -1,4 +1,17 @@
1
1
  import type { FrameworkRequest, HandlerMapping, HandlerMatch, RequestContext } from '../types.js';
2
+ /**
3
+ * Match handler or throw.
4
+ *
5
+ * @param handlerMapping The handler mapping.
6
+ * @param request The request.
7
+ * @returns The match handler or throw result.
8
+ */
2
9
  export declare function matchHandlerOrThrow(handlerMapping: HandlerMapping, request: FrameworkRequest): HandlerMatch;
10
+ /**
11
+ * Update request params.
12
+ *
13
+ * @param requestContext The request context.
14
+ * @param params The params.
15
+ */
3
16
  export declare function updateRequestParams(requestContext: RequestContext, params: Readonly<Record<string, string>>): void;
4
17
  //# sourceMappingURL=dispatch-routing-policy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch-routing-policy.d.ts","sourceRoot":"","sources":["../../src/dispatch/dispatch-routing-policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElG,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,GAAG,YAAY,CAQ3G;AAED,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAKlH"}
1
+ {"version":3,"file":"dispatch-routing-policy.d.ts","sourceRoot":"","sources":["../../src/dispatch/dispatch-routing-policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElG;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,GAAG,YAAY,CAQ3G;AA2BD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAsBlH"}
@@ -1,4 +1,11 @@
1
1
  import { HandlerNotFoundError } from '../errors.js';
2
+ /**
3
+ * Match handler or throw.
4
+ *
5
+ * @param handlerMapping The handler mapping.
6
+ * @param request The request.
7
+ * @returns The match handler or throw result.
8
+ */
2
9
  export function matchHandlerOrThrow(handlerMapping, request) {
3
10
  const match = handlerMapping.match(request);
4
11
  if (!match) {
@@ -6,9 +13,47 @@ export function matchHandlerOrThrow(handlerMapping, request) {
6
13
  }
7
14
  return match;
8
15
  }
16
+ function defineRequestParams(request, params) {
17
+ Object.defineProperty(request, 'params', {
18
+ configurable: true,
19
+ enumerable: true,
20
+ value: params,
21
+ writable: true
22
+ });
23
+ }
24
+ function findInheritedParamsDescriptor(request) {
25
+ let prototype = Object.getPrototypeOf(request);
26
+ while (prototype) {
27
+ const descriptor = Object.getOwnPropertyDescriptor(prototype, 'params');
28
+ if (descriptor) {
29
+ return descriptor;
30
+ }
31
+ prototype = Object.getPrototypeOf(prototype);
32
+ }
33
+ return undefined;
34
+ }
35
+
36
+ /**
37
+ * Update request params.
38
+ *
39
+ * @param requestContext The request context.
40
+ * @param params The params.
41
+ */
9
42
  export function updateRequestParams(requestContext, params) {
10
- requestContext.request = {
11
- ...requestContext.request,
12
- params
13
- };
43
+ const request = requestContext.request;
44
+ const ownDescriptor = Object.getOwnPropertyDescriptor(request, 'params');
45
+ if (ownDescriptor) {
46
+ if ('value' in ownDescriptor && ownDescriptor.writable) {
47
+ request.params = params;
48
+ return;
49
+ }
50
+ defineRequestParams(request, params);
51
+ return;
52
+ }
53
+ const inheritedDescriptor = findInheritedParamsDescriptor(request);
54
+ if (!inheritedDescriptor || 'value' in inheritedDescriptor && inheritedDescriptor.writable) {
55
+ request.params = params;
56
+ return;
57
+ }
58
+ defineRequestParams(request, params);
14
59
  }
@@ -1,12 +1,11 @@
1
1
  import type { Container } from '@fluojs/di';
2
- import type { Binder, ContentNegotiationOptions, Dispatcher, DispatcherLogger, FrameworkRequest, FrameworkResponse, HandlerMapping, InterceptorLike, MiddlewareLike, RequestObserverLike } from '../types.js';
3
- /**
4
- * Type definition for a global HTTP error handler function.
5
- */
2
+ import type { Binder, ContentNegotiationOptions, ConverterLike, Dispatcher, DispatcherLogger, FrameworkRequest, FrameworkResponse, HandlerMapping, InterceptorLike, MiddlewareLike, RequestObserverLike } from '../types.js';
3
+ import { type FastPathStats } from './fast-path/index.js';
4
+ export type { FastPathEligibility, FastPathStats } from './fast-path/index.js';
5
+ export { FAST_PATH_ELIGIBILITY_SYMBOL, FAST_PATH_STATS_SYMBOL } from './fast-path/index.js';
6
+ /** Type definition for a global HTTP error handler function. */
6
7
  export type ErrorHandler = (error: unknown, request: FrameworkRequest, response: FrameworkResponse, requestId?: string) => Promise<boolean | void> | boolean | void;
7
- /**
8
- * Options for creating an HTTP {@link Dispatcher}.
9
- */
8
+ /** Options for creating an HTTP {@link Dispatcher}. */
10
9
  export interface CreateDispatcherOptions {
11
10
  /** Global middleware applied to all requests. */
12
11
  appMiddleware?: MiddlewareLike[];
@@ -20,11 +19,21 @@ export interface CreateDispatcherOptions {
20
19
  interceptors?: InterceptorLike[];
21
20
  /** Global request observers for telemetry and logging. */
22
21
  observers?: RequestObserverLike[];
22
+ /** Emits per-response fast-path debug headers when enabled. */
23
+ fastPathDebugHeaders?: boolean;
23
24
  /** Optional global error handler. */
24
25
  onError?: ErrorHandler;
26
+ /** Request-scope optimization hints supplied by runtime bootstrap. */
27
+ requestScope?: {
28
+ /** Global DTO converters used by the default binder. */
29
+ converterDefinitions?: readonly ConverterLike[];
30
+ };
31
+ /** Logger used for non-fatal dispatcher failures. */
25
32
  logger?: DispatcherLogger;
26
33
  /** Root DI container for creating request scopes. */
27
34
  rootContainer: Container;
35
+ /** Human-readable adapter label included in fast-path observability output. */
36
+ adapter?: string;
28
37
  }
29
38
  /**
30
39
  * Creates an HTTP dispatcher instance for processing requests.
@@ -33,4 +42,12 @@ export interface CreateDispatcherOptions {
33
42
  * @returns A {@link Dispatcher} capable of routing {@link FrameworkRequest}s.
34
43
  */
35
44
  export declare function createDispatcher(options: CreateDispatcherOptions): Dispatcher;
45
+ /**
46
+ * Reads automatic fast-path eligibility statistics attached to a dispatcher.
47
+ *
48
+ * @param dispatcher Dispatcher returned by {@link createDispatcher}.
49
+ * @returns Fast-path statistics when available.
50
+ */
51
+ export declare function getDispatcherFastPathStats(dispatcher: Dispatcher): FastPathStats | undefined;
52
+ export { formatFastPathStats } from './fast-path/index.js';
36
53
  //# sourceMappingURL=dispatcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/dispatch/dispatcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAW5C,OAAO,KAAK,EACV,MAAM,EACN,yBAAyB,EACzB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EAGjB,cAAc,EACd,eAAe,EAGf,cAAc,EAId,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC;AAEpK;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,iDAAiD;IACjD,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;IACjC,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;IAC/C,sDAAsD;IACtD,cAAc,EAAE,cAAc,CAAC;IAC/B,2DAA2D;IAC3D,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;IACjC,0DAA0D;IAC1D,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,qCAAqC;IACrC,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,qDAAqD;IACrD,aAAa,EAAE,SAAS,CAAC;CAC1B;AAmQD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,UAAU,CA8B7E"}
1
+ {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/dispatch/dispatcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAyB,MAAM,YAAY,CAAC;AAQnE,OAAO,KAAK,EACV,MAAM,EACN,yBAAyB,EACzB,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EAIjB,cAAc,EAEd,eAAe,EAEf,cAAc,EAId,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAKrB,OAAO,EAKL,KAAK,aAAa,EAOnB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE5F,gEAAgE;AAChE,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC;AAEpK,uDAAuD;AACvD,MAAM,WAAW,uBAAuB;IACtC,iDAAiD;IACjD,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;IACjC,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;IAC/C,sDAAsD;IACtD,cAAc,EAAE,cAAc,CAAC;IAC/B,2DAA2D;IAC3D,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;IACjC,0DAA0D;IAC1D,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,+DAA+D;IAC/D,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qCAAqC;IACrC,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,sEAAsE;IACtE,YAAY,CAAC,EAAE;QACb,wDAAwD;QACxD,oBAAoB,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;KACjD,CAAC;IACF,qDAAqD;IACrD,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,qDAAqD;IACrD,aAAa,EAAE,SAAS,CAAC;IACzB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAyyBD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,UAAU,CAuF7E;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,GAAG,SAAS,CAE5F;AAED,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC"}