@duplojs/http 0.9.5 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/client/clientCache.cjs +84 -0
  2. package/dist/client/clientCache.d.ts +4 -0
  3. package/dist/client/clientCache.mjs +80 -0
  4. package/dist/client/getBody.cjs +0 -3
  5. package/dist/client/getBody.mjs +0 -3
  6. package/dist/client/hooks.cjs +36 -0
  7. package/dist/client/hooks.d.ts +5 -1
  8. package/dist/client/hooks.mjs +33 -1
  9. package/dist/client/httpClient.cjs +26 -1
  10. package/dist/client/httpClient.d.ts +8 -1
  11. package/dist/client/httpClient.mjs +26 -1
  12. package/dist/client/index.cjs +12 -0
  13. package/dist/client/index.d.ts +2 -0
  14. package/dist/client/index.mjs +4 -2
  15. package/dist/client/promiseRequest.cjs +33 -8
  16. package/dist/client/promiseRequest.d.ts +2 -1
  17. package/dist/client/promiseRequest.mjs +34 -9
  18. package/dist/client/serverSentEvents.cjs +18 -12
  19. package/dist/client/serverSentEvents.d.ts +2 -1
  20. package/dist/client/serverSentEvents.mjs +18 -13
  21. package/dist/client/stream.cjs +117 -0
  22. package/dist/client/stream.d.ts +3 -0
  23. package/dist/client/stream.mjs +95 -0
  24. package/dist/client/types/clientCache.cjs +2 -0
  25. package/dist/client/types/clientCache.d.ts +27 -0
  26. package/dist/client/types/clientCache.mjs +1 -0
  27. package/dist/client/types/clientRequestParams.d.ts +8 -1
  28. package/dist/client/types/clientResponse.d.ts +24 -6
  29. package/dist/client/types/hooks.d.ts +10 -1
  30. package/dist/client/types/index.cjs +1 -0
  31. package/dist/client/types/index.d.ts +1 -0
  32. package/dist/client/types/index.mjs +1 -0
  33. package/dist/client/types/promiseRequestParams.d.ts +3 -0
  34. package/dist/client/types/serverRoute.d.ts +2 -0
  35. package/dist/core/builders/route/handler.d.ts +5 -5
  36. package/dist/core/defaultHooks/index.cjs +14 -0
  37. package/dist/core/defaultHooks/index.mjs +14 -0
  38. package/dist/core/functionsBuilders/steps/defaults/extractStep.mjs +1 -1
  39. package/dist/core/functionsBuilders/steps/defaults/handlerStep.cjs +33 -0
  40. package/dist/core/functionsBuilders/steps/defaults/handlerStep.mjs +33 -0
  41. package/dist/core/hub/defaultMalformedUrlHandler.d.ts +1 -1
  42. package/dist/core/hub/defaultNotfoundHandler.d.ts +1 -1
  43. package/dist/core/index.cjs +143 -134
  44. package/dist/core/index.d.ts +1 -0
  45. package/dist/core/index.mjs +42 -39
  46. package/dist/core/response/contract.cjs +21 -0
  47. package/dist/core/response/contract.d.ts +33 -5
  48. package/dist/core/response/contract.mjs +21 -0
  49. package/dist/core/response/index.cjs +4 -0
  50. package/dist/core/response/index.d.ts +7 -0
  51. package/dist/core/response/index.mjs +2 -0
  52. package/dist/core/response/streamPredicted.cjs +23 -0
  53. package/dist/core/response/streamPredicted.d.ts +14 -0
  54. package/dist/core/response/streamPredicted.mjs +21 -0
  55. package/dist/core/response/streamTextPredicted.cjs +23 -0
  56. package/dist/core/response/streamTextPredicted.d.ts +14 -0
  57. package/dist/core/response/streamTextPredicted.mjs +21 -0
  58. package/dist/core/serverSentEvents.cjs +25 -77
  59. package/dist/core/serverSentEvents.d.ts +4 -16
  60. package/dist/core/serverSentEvents.mjs +25 -77
  61. package/dist/core/steps/handler.d.ts +15 -5
  62. package/dist/core/stream.cjs +73 -0
  63. package/dist/core/stream.d.ts +19 -0
  64. package/dist/core/stream.mjs +73 -0
  65. package/dist/interfaces/node/bodyReaders/formData/index.cjs +1 -1
  66. package/dist/interfaces/node/bodyReaders/formData/index.mjs +1 -1
  67. package/dist/interfaces/node/hooks/index.cjs +21 -1
  68. package/dist/interfaces/node/hooks/index.mjs +21 -1
  69. package/dist/interfaces/node/index.cjs +6 -6
  70. package/dist/interfaces/node/index.mjs +2 -2
  71. package/dist/plugins/codeGenerator/aggregateStepContract.cjs +12 -0
  72. package/dist/plugins/codeGenerator/aggregateStepContract.mjs +13 -1
  73. package/dist/plugins/cookie/hooks/cookieHooks.cjs +15 -0
  74. package/dist/plugins/cookie/hooks/cookieHooks.d.ts +11 -0
  75. package/dist/plugins/cookie/hooks/cookieHooks.mjs +13 -0
  76. package/dist/plugins/cookie/hooks/index.cjs +11 -0
  77. package/dist/plugins/cookie/hooks/index.d.ts +3 -0
  78. package/dist/plugins/cookie/hooks/index.mjs +3 -0
  79. package/dist/plugins/cookie/hooks/parseRequestCookie.cjs +20 -0
  80. package/dist/plugins/cookie/hooks/parseRequestCookie.d.ts +8 -0
  81. package/dist/plugins/cookie/hooks/parseRequestCookie.mjs +18 -0
  82. package/dist/plugins/cookie/hooks/serializeResponseCookie.cjs +17 -0
  83. package/dist/plugins/cookie/hooks/serializeResponseCookie.d.ts +7 -0
  84. package/dist/plugins/cookie/hooks/serializeResponseCookie.mjs +15 -0
  85. package/dist/plugins/cookie/index.cjs +25 -0
  86. package/dist/plugins/cookie/index.d.ts +6 -0
  87. package/dist/plugins/cookie/index.mjs +9 -0
  88. package/dist/plugins/cookie/kind.cjs +9 -0
  89. package/dist/plugins/cookie/kind.d.ts +6 -0
  90. package/dist/plugins/cookie/kind.mjs +7 -0
  91. package/dist/plugins/cookie/metadata.cjs +8 -0
  92. package/dist/plugins/cookie/metadata.d.ts +1 -0
  93. package/dist/plugins/cookie/metadata.mjs +6 -0
  94. package/dist/plugins/cookie/override.cjs +30 -0
  95. package/dist/plugins/cookie/override.d.ts +16 -0
  96. package/dist/plugins/cookie/override.mjs +28 -0
  97. package/dist/plugins/cookie/parser.cjs +84 -0
  98. package/dist/plugins/cookie/parser.d.ts +2 -0
  99. package/dist/plugins/cookie/parser.mjs +79 -0
  100. package/dist/plugins/cookie/plugin.cjs +30 -0
  101. package/dist/plugins/cookie/plugin.d.ts +8 -0
  102. package/dist/plugins/cookie/plugin.mjs +28 -0
  103. package/dist/plugins/cookie/serialize.cjs +84 -0
  104. package/dist/plugins/cookie/serialize.d.ts +29 -0
  105. package/dist/plugins/cookie/serialize.mjs +81 -0
  106. package/dist/plugins/openApiGenerator/aggregateStepContract.d.ts +1 -1
  107. package/dist/plugins/openApiGenerator/makeOpenApiRoute.d.ts +1 -1
  108. package/dist/plugins/openApiGenerator/routeToOpenApi.cjs +55 -2
  109. package/dist/plugins/openApiGenerator/routeToOpenApi.mjs +55 -2
  110. package/dist/plugins/openApiGenerator/types/endpointResponse.d.ts +4 -1
  111. package/dist/plugins/static/makeRouteFile.d.ts +1 -1
  112. package/dist/plugins/static/makeRouteFolder.d.ts +1 -1
  113. package/package.json +10 -5
@@ -20,56 +20,59 @@ import './clean/index.mjs';
20
20
  export { initDefaultHook } from './defaultHooks/index.mjs';
21
21
  import './errors/index.mjs';
22
22
  export { ServerSentEvents } from './serverSentEvents.mjs';
23
- export { checkerBuilder, useCheckerBuilder } from './builders/checker.mjs';
24
- export { routeBuilderHandler, useRouteBuilder } from './builders/route/builder.mjs';
25
- export { routeStore } from './builders/route/store.mjs';
26
- export { processBuilder, useProcessBuilder } from './builders/process/builder.mjs';
27
- export { preflightBuilder, usePreflightBuilder } from './builders/preflight/builder.mjs';
28
- export { Response } from './response/base.mjs';
29
- export { ResponseContract } from './response/contract.mjs';
23
+ export { Stream } from './stream.mjs';
24
+ export { BodyParseWrongChunkReceived } from './errors/bodyParseWrongChunkReceived.mjs';
25
+ export { BodySizeExceedsLimitError } from './errors/bodySizeExceedsLimitError.mjs';
26
+ export { EmptyBodyController, controlBodyAsEmpty } from './request/bodyController/empty.mjs';
27
+ export { FormDataBodyController, controlBodyAsFormData } from './request/bodyController/formData.mjs';
30
28
  export { HookResponse } from './response/hook.mjs';
29
+ export { IgnoreByRouteStoreMetadata } from './metadata/ignoreByRouteStore.mjs';
30
+ export { NotFoundBodyReaderImplementationError } from './router/notFoundBodyReaderImplementationError.mjs';
31
+ export { ParseJsonError } from './errors/parseJsonError.mjs';
31
32
  export { PredictedResponse } from './response/predicted.mjs';
33
+ export { Response } from './response/base.mjs';
34
+ export { ResponseContract } from './response/contract.mjs';
35
+ export { RouterBuildError } from './router/buildError.mjs';
32
36
  export { ServerSentEventsPredictedResponse } from './response/serverSentEventsPredicted.mjs';
33
- export { createHookRouteLifeCycle, hookRouteExitKind, hookRouteNextKind } from './route/hooks.mjs';
34
- export { stepKind } from './steps/kind.mjs';
35
- export { stepIdentifier } from './steps/identifier.mjs';
37
+ export { StreamPredictedResponse } from './response/streamPredicted.mjs';
38
+ export { StreamTextPredictedResponse } from './response/streamTextPredicted.mjs';
39
+ export { TextBodyController, controlBodyAsText } from './request/bodyController/text.mjs';
40
+ export { WrongBodyReaderImplementationError, createBodyController } from './request/bodyController/base.mjs';
41
+ export { WrongContentTypeError } from './errors/wrongContentTypeError.mjs';
42
+ export { buildHookAfter, buildHookBefore, buildHookErrorBefore, createHookResponse, exitHookFunction, nextHookFunction } from './functionsBuilders/route/default/hook.mjs';
43
+ export { buildRouteFunction } from './functionsBuilders/route/build.mjs';
44
+ export { buildRouterFunction } from './functionsBuilders/router/build.mjs';
45
+ export { buildStepFunction } from './functionsBuilders/steps/build.mjs';
46
+ export { buildStepsFunction, defaultProcessStepFunctionBuilder } from './functionsBuilders/steps/defaults/processStep.mjs';
47
+ export { checkerBuilder, useCheckerBuilder } from './builders/checker.mjs';
36
48
  export { checkerStepKind, createCheckerStep } from './steps/checker.mjs';
37
- export { createExtractStep, extractStepKind } from './steps/extract.mjs';
38
49
  export { createCutStep, cutStepKind, cutStepOutputKind } from './steps/cut.mjs';
50
+ export { createExtractStep, extractStepKind } from './steps/extract.mjs';
39
51
  export { createHandlerStep, handlerStepKind } from './steps/handler.mjs';
40
- export { createProcessStep, processStepKind } from './steps/process.mjs';
41
- export { createPresetCheckerStep, presetCheckerStepKind } from './steps/presetChecker.mjs';
42
- export { WrongBodyReaderImplementationError, createBodyController } from './request/bodyController/base.mjs';
43
- export { FormDataBodyController, controlBodyAsFormData } from './request/bodyController/formData.mjs';
44
- export { TextBodyController, controlBodyAsText } from './request/bodyController/text.mjs';
45
- export { EmptyBodyController, controlBodyAsEmpty } from './request/bodyController/empty.mjs';
46
52
  export { createHookHubLifeCycle, hookServerExitKind, hookServerNextKind, launchHookBeforeBuildRoute, launchHookServer, launchHookServerError, serverErrorExitHookFunction, serverErrorNextHookFunction } from './hub/hooks.mjs';
47
- export { defaultNotfoundHandler } from './hub/defaultNotfoundHandler.mjs';
48
- export { defaultExtractContract } from './hub/defaultExtractContract.mjs';
49
- export { defaultBodyController } from './hub/defaultBodyController.mjs';
50
- export { defaultMalformedUrlHandler } from './hub/defaultMalformedUrlHandler.mjs';
51
- export { defaultEmptyReaderImplementation } from './hub/defaultEmptyReaderImplementation.mjs';
52
- export { buildRouteFunction } from './functionsBuilders/route/build.mjs';
53
+ export { createHookRouteLifeCycle, hookRouteExitKind, hookRouteNextKind } from './route/hooks.mjs';
54
+ export { createMetadata, metadataKind } from './metadata/base.mjs';
55
+ export { createPresetCheckerStep, presetCheckerStepKind } from './steps/presetChecker.mjs';
56
+ export { createProcessStep, processStepKind } from './steps/process.mjs';
53
57
  export { createRouteFunctionBuilder } from './functionsBuilders/route/create.mjs';
54
- export { buildHookAfter, buildHookBefore, buildHookErrorBefore, createHookResponse, exitHookFunction, nextHookFunction } from './functionsBuilders/route/default/hook.mjs';
55
- export { defaultRouteFunctionBuilder } from './functionsBuilders/route/default/index.mjs';
58
+ export { createRouterElementSystem } from './router/createRouterElementSystem.mjs';
59
+ export { createRouterFunctionBuilder } from './functionsBuilders/router/create.mjs';
56
60
  export { createStepFunctionBuilder } from './functionsBuilders/steps/create.mjs';
61
+ export { defaultBodyController } from './hub/defaultBodyController.mjs';
57
62
  export { defaultCheckerStepFunctionBuilder } from './functionsBuilders/steps/defaults/checkerStep.mjs';
58
63
  export { defaultCutStepFunctionBuilder } from './functionsBuilders/steps/defaults/cutStep.mjs';
59
- export { defaultHandlerStepFunctionBuilder } from './functionsBuilders/steps/defaults/handlerStep.mjs';
64
+ export { defaultEmptyReaderImplementation } from './hub/defaultEmptyReaderImplementation.mjs';
65
+ export { defaultExtractContract } from './hub/defaultExtractContract.mjs';
60
66
  export { defaultExtractStepFunctionBuilder } from './functionsBuilders/steps/defaults/extractStep.mjs';
61
- export { buildStepsFunction, defaultProcessStepFunctionBuilder } from './functionsBuilders/steps/defaults/processStep.mjs';
62
- export { buildStepFunction } from './functionsBuilders/steps/build.mjs';
63
- export { createRouterFunctionBuilder } from './functionsBuilders/router/create.mjs';
67
+ export { defaultHandlerStepFunctionBuilder } from './functionsBuilders/steps/defaults/handlerStep.mjs';
68
+ export { defaultMalformedUrlHandler } from './hub/defaultMalformedUrlHandler.mjs';
69
+ export { defaultNotfoundHandler } from './hub/defaultNotfoundHandler.mjs';
70
+ export { defaultRouteFunctionBuilder } from './functionsBuilders/route/default/index.mjs';
64
71
  export { defaultRouterFunctionBuilder } from './functionsBuilders/router/default/index.mjs';
65
- export { buildRouterFunction } from './functionsBuilders/router/build.mjs';
66
72
  export { pathToRegExp } from './router/pathToRegExp.mjs';
67
- export { RouterBuildError } from './router/buildError.mjs';
68
- export { NotFoundBodyReaderImplementationError } from './router/notFoundBodyReaderImplementationError.mjs';
69
- export { createRouterElementSystem } from './router/createRouterElementSystem.mjs';
70
- export { createMetadata, metadataKind } from './metadata/base.mjs';
71
- export { IgnoreByRouteStoreMetadata } from './metadata/ignoreByRouteStore.mjs';
72
- export { WrongContentTypeError } from './errors/wrongContentTypeError.mjs';
73
- export { BodyParseWrongChunkReceived } from './errors/bodyParseWrongChunkReceived.mjs';
74
- export { BodySizeExceedsLimitError } from './errors/bodySizeExceedsLimitError.mjs';
75
- export { ParseJsonError } from './errors/parseJsonError.mjs';
73
+ export { preflightBuilder, usePreflightBuilder } from './builders/preflight/builder.mjs';
74
+ export { processBuilder, useProcessBuilder } from './builders/process/builder.mjs';
75
+ export { routeBuilderHandler, useRouteBuilder } from './builders/route/builder.mjs';
76
+ export { routeStore } from './builders/route/store.mjs';
77
+ export { stepIdentifier } from './steps/identifier.mjs';
78
+ export { stepKind } from './steps/kind.mjs';
@@ -91,6 +91,27 @@ exports.ResponseContract = void 0;
91
91
  });
92
92
  }
93
93
  ResponseContract.serverSentEvents = serverSentEvents;
94
+ ResponseContract.streamContractKind = kind.createCoreLibKind("stream-response-contract");
95
+ function stream(information, schema) {
96
+ return ResponseContract.streamContractKind.setTo({
97
+ code: "200",
98
+ information,
99
+ flux: schema,
100
+ body: defaultSchema,
101
+ });
102
+ }
103
+ ResponseContract.stream = stream;
104
+ ResponseContract.streamTextContractKind = kind.createCoreLibKind("stream-text-response-contract");
105
+ const defaultStreamTextSchema = utils.DP.string();
106
+ function streamText(information) {
107
+ return ResponseContract.streamTextContractKind.setTo({
108
+ code: "200",
109
+ information,
110
+ flux: defaultStreamTextSchema,
111
+ body: defaultSchema,
112
+ });
113
+ }
114
+ ResponseContract.streamText = streamText;
94
115
  class Error extends utils.kindHeritage("contract-error", kind.createCoreLibKind("contract-error"), ErrorClass) {
95
116
  information;
96
117
  detail;
@@ -1,6 +1,7 @@
1
- import { DP, type Kind, type NeverCoalescing } from "@duplojs/utils";
2
- import { type ResponseCode, type PredictedResponse, type ServerSentEventsPredictedResponse, type SuccessResponseCode } from ".";
1
+ import { DP, type Kind, type IsEqual, type NeverCoalescing } from "@duplojs/utils";
2
+ import { type ResponseCode, type PredictedResponse, type ServerSentEventsPredictedResponse, type SuccessResponseCode, type StreamTextPredictedResponse } from ".";
3
3
  import { type ForbiddenBigintDataParser } from "../types";
4
+ import { type StreamPredictedResponse } from "./streamPredicted";
4
5
  export declare namespace ResponseContract {
5
6
  type SupportedDataParser = DP.DataParser;
6
7
  export const contractKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/response-contract", unknown>>;
@@ -9,6 +10,11 @@ export declare namespace ResponseContract {
9
10
  information: GenericInformation;
10
11
  body: GenericSchema;
11
12
  }
13
+ const defaultSchema: DP.DataParserEmpty<{
14
+ readonly errorMessage?: string | undefined;
15
+ readonly coerce: boolean;
16
+ readonly checkers: readonly [];
17
+ }>;
12
18
  export const http100Continue: <GenericInformation extends string, GenericSchema extends SupportedDataParser = DP.DataParserEmpty<{
13
19
  readonly errorMessage?: string | undefined;
14
20
  readonly coerce: boolean;
@@ -287,15 +293,37 @@ export declare namespace ResponseContract {
287
293
  events: GenericEvents;
288
294
  body: GenericSchema;
289
295
  }
290
- export function serverSentEvents<GenericInformation extends string, GenericMainEventSchema extends SupportedDataParser, GenericEvents extends Record<string, SupportedDataParser> = {}>(information: GenericInformation, mainEventSchema: GenericMainEventSchema, events?: GenericEvents): ServerSentEventsContract<"200", GenericInformation, GenericEvents & {
296
+ export function serverSentEvents<GenericInformation extends string, GenericMainEventSchema extends SupportedDataParser, GenericEvents extends Record<string, SupportedDataParser> = {}>(information: GenericInformation, mainEventSchema: GenericMainEventSchema, events?: GenericEvents): ServerSentEventsContract<"200", GenericInformation, (IsEqual<GenericEvents, Record<string, SupportedDataParser>> extends true ? {} : GenericEvents) & {
291
297
  message: GenericMainEventSchema;
298
+ }, typeof defaultSchema>;
299
+ export const streamContractKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/stream-response-contract", unknown>>;
300
+ export interface StreamContract<GenericCode extends SuccessResponseCode = SuccessResponseCode, GenericInformation extends string = string, GenericFlux extends SupportedDataParser = SupportedDataParser, GenericSchema extends SupportedDataParser = SupportedDataParser> extends Kind<typeof streamContractKind.definition> {
301
+ code: GenericCode;
302
+ information: GenericInformation;
303
+ flux: GenericFlux;
304
+ body: GenericSchema;
305
+ }
306
+ export function stream<GenericInformation extends string, GenericSchema extends SupportedDataParser>(information: GenericInformation, schema: GenericSchema): StreamContract<"200", GenericInformation, GenericSchema, typeof defaultSchema>;
307
+ export const streamTextContractKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/stream-text-response-contract", unknown>>;
308
+ export interface StreamTextContract<GenericCode extends SuccessResponseCode = SuccessResponseCode, GenericInformation extends string = string, GenericFlux extends DP.Contract<string> = DP.Contract<string>, GenericSchema extends SupportedDataParser = SupportedDataParser> extends Kind<typeof streamTextContractKind.definition> {
309
+ code: GenericCode;
310
+ information: GenericInformation;
311
+ flux: GenericFlux;
312
+ body: GenericSchema;
313
+ }
314
+ const defaultStreamTextSchema: DP.DataParserString<{
315
+ readonly errorMessage?: string | undefined;
316
+ readonly coerce: boolean;
317
+ readonly checkers: readonly [];
292
318
  }>;
293
- export type Convert<GenericContract extends Contract | ServerSentEventsContract> = GenericContract extends Contract ? PredictedResponse<GenericContract["code"], GenericContract["information"], DP.Input<GenericContract["body"]>> : GenericContract extends ServerSentEventsContract ? ServerSentEventsPredictedResponse<GenericContract["code"], GenericContract["information"], {
319
+ export function streamText<GenericInformation extends string>(information: GenericInformation): StreamTextContract<"200", GenericInformation, typeof defaultStreamTextSchema, typeof defaultSchema>;
320
+ export type Contracts = (Contract | ServerSentEventsContract | StreamContract | StreamTextContract);
321
+ export type Convert<GenericContract extends Contracts> = GenericContract extends Contract ? PredictedResponse<GenericContract["code"], GenericContract["information"], DP.Output<GenericContract["body"]>> : GenericContract extends ServerSentEventsContract ? ServerSentEventsPredictedResponse<GenericContract["code"], GenericContract["information"], {
294
322
  [Prop in keyof GenericContract["events"]]: [
295
323
  Extract<Prop, string>,
296
324
  DP.Output<GenericContract["events"][Prop]>
297
325
  ];
298
- }[keyof GenericContract["events"]]> : never;
326
+ }[keyof GenericContract["events"]]> : GenericContract extends StreamContract ? StreamPredictedResponse<GenericContract["code"], GenericContract["information"], DP.Output<GenericContract["flux"]>> : GenericContract extends StreamTextContract ? StreamTextPredictedResponse<GenericContract["code"], GenericContract["information"]> : never;
299
327
  const Error_base: new (params: {
300
328
  "@DuplojsHttpCore/contract-error"?: unknown;
301
329
  }, parentParams: readonly [message?: string | undefined, options?: ErrorOptions | undefined]) => globalThis.Error & Kind<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/contract-error", unknown>, unknown> & Kind<import("@duplojs/utils").KindDefinition<"contract-error", unknown>, unknown>;
@@ -89,6 +89,27 @@ var ResponseContract;
89
89
  });
90
90
  }
91
91
  ResponseContract.serverSentEvents = serverSentEvents;
92
+ ResponseContract.streamContractKind = createCoreLibKind("stream-response-contract");
93
+ function stream(information, schema) {
94
+ return ResponseContract.streamContractKind.setTo({
95
+ code: "200",
96
+ information,
97
+ flux: schema,
98
+ body: defaultSchema,
99
+ });
100
+ }
101
+ ResponseContract.stream = stream;
102
+ ResponseContract.streamTextContractKind = createCoreLibKind("stream-text-response-contract");
103
+ const defaultStreamTextSchema = DP.string();
104
+ function streamText(information) {
105
+ return ResponseContract.streamTextContractKind.setTo({
106
+ code: "200",
107
+ information,
108
+ flux: defaultStreamTextSchema,
109
+ body: defaultSchema,
110
+ });
111
+ }
112
+ ResponseContract.streamText = streamText;
92
113
  class Error extends kindHeritage("contract-error", createCoreLibKind("contract-error"), ErrorClass) {
93
114
  information;
94
115
  detail;
@@ -5,6 +5,8 @@ var contract = require('./contract.cjs');
5
5
  var hook = require('./hook.cjs');
6
6
  var predicted = require('./predicted.cjs');
7
7
  var serverSentEventsPredicted = require('./serverSentEventsPredicted.cjs');
8
+ var streamPredicted = require('./streamPredicted.cjs');
9
+ var streamTextPredicted = require('./streamTextPredicted.cjs');
8
10
 
9
11
 
10
12
 
@@ -16,3 +18,5 @@ Object.defineProperty(exports, "ResponseContract", {
16
18
  exports.HookResponse = hook.HookResponse;
17
19
  exports.PredictedResponse = predicted.PredictedResponse;
18
20
  exports.ServerSentEventsPredictedResponse = serverSentEventsPredicted.ServerSentEventsPredictedResponse;
21
+ exports.StreamPredictedResponse = streamPredicted.StreamPredictedResponse;
22
+ exports.StreamTextPredictedResponse = streamTextPredicted.StreamTextPredictedResponse;
@@ -1,5 +1,12 @@
1
+ import { type PredictedResponse } from "./predicted";
2
+ import { type ServerSentEventsPredictedResponse } from "./serverSentEventsPredicted";
3
+ import { type StreamPredictedResponse } from "./streamPredicted";
4
+ import { type StreamTextPredictedResponse } from "./streamTextPredicted";
1
5
  export * from "./base";
2
6
  export * from "./contract";
3
7
  export * from "./hook";
4
8
  export * from "./predicted";
5
9
  export * from "./serverSentEventsPredicted";
10
+ export * from "./streamPredicted";
11
+ export * from "./streamTextPredicted";
12
+ export type PredictedResponses = (PredictedResponse | ServerSentEventsPredictedResponse | StreamPredictedResponse | StreamTextPredictedResponse);
@@ -3,3 +3,5 @@ export { ResponseContract } from './contract.mjs';
3
3
  export { HookResponse } from './hook.mjs';
4
4
  export { PredictedResponse } from './predicted.mjs';
5
5
  export { ServerSentEventsPredictedResponse } from './serverSentEventsPredicted.mjs';
6
+ export { StreamPredictedResponse } from './streamPredicted.mjs';
7
+ export { StreamTextPredictedResponse } from './streamTextPredicted.mjs';
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ var kind = require('../kind.cjs');
4
+ require('./index.cjs');
5
+ var utils = require('@duplojs/utils');
6
+ var base = require('./base.cjs');
7
+
8
+ const defaultParamsParent = [undefined, undefined, undefined];
9
+ const defaultParams = {};
10
+ class StreamPredictedResponse extends utils.kindHeritage("stream-predicted-response", kind.createCoreLibKind("stream-predicted-response"), base.Response) {
11
+ startStream;
12
+ code;
13
+ information;
14
+ body = undefined;
15
+ constructor(code, information, startStream) {
16
+ super(defaultParams, defaultParamsParent);
17
+ this.startStream = startStream;
18
+ this.code = code;
19
+ this.information = information;
20
+ }
21
+ }
22
+
23
+ exports.StreamPredictedResponse = StreamPredictedResponse;
@@ -0,0 +1,14 @@
1
+ import { Response, type SuccessResponseCode } from "../response";
2
+ import { type Stream } from "../stream";
3
+ import { type MaybePromise } from "@duplojs/utils";
4
+ declare const StreamPredictedResponse_base: new (params: {
5
+ "@DuplojsHttpCore/stream-predicted-response"?: unknown;
6
+ }, parentParams: readonly [code: any, information: any, body: any]) => Response<any, any, any> & import("@duplojs/utils").Kind<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/stream-predicted-response", unknown>, unknown> & import("@duplojs/utils").Kind<import("@duplojs/utils").KindDefinition<"stream-predicted-response", unknown>, unknown>;
7
+ export declare class StreamPredictedResponse<GenericCode extends SuccessResponseCode = SuccessResponseCode, GenericInformation extends string = string, GenericFlux extends unknown = unknown> extends StreamPredictedResponse_base {
8
+ startStream: (params: Stream.StartSendingParams<GenericFlux>) => MaybePromise<void>;
9
+ code: GenericCode;
10
+ information: GenericInformation;
11
+ body: undefined;
12
+ constructor(code: GenericCode, information: GenericInformation, startStream: (params: Stream.StartSendingParams<GenericFlux>) => MaybePromise<void>);
13
+ }
14
+ export {};
@@ -0,0 +1,21 @@
1
+ import { createCoreLibKind } from '../kind.mjs';
2
+ import './index.mjs';
3
+ import { kindHeritage } from '@duplojs/utils';
4
+ import { Response } from './base.mjs';
5
+
6
+ const defaultParamsParent = [undefined, undefined, undefined];
7
+ const defaultParams = {};
8
+ class StreamPredictedResponse extends kindHeritage("stream-predicted-response", createCoreLibKind("stream-predicted-response"), Response) {
9
+ startStream;
10
+ code;
11
+ information;
12
+ body = undefined;
13
+ constructor(code, information, startStream) {
14
+ super(defaultParams, defaultParamsParent);
15
+ this.startStream = startStream;
16
+ this.code = code;
17
+ this.information = information;
18
+ }
19
+ }
20
+
21
+ export { StreamPredictedResponse };
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ var kind = require('../kind.cjs');
4
+ require('./index.cjs');
5
+ var utils = require('@duplojs/utils');
6
+ var base = require('./base.cjs');
7
+
8
+ const defaultParamsParent = [undefined, undefined, undefined];
9
+ const defaultParams = {};
10
+ class StreamTextPredictedResponse extends utils.kindHeritage("stream-text-predicted-response", kind.createCoreLibKind("stream-text-predicted-response"), base.Response) {
11
+ startStream;
12
+ code;
13
+ information;
14
+ body = undefined;
15
+ constructor(code, information, startStream) {
16
+ super(defaultParams, defaultParamsParent);
17
+ this.startStream = startStream;
18
+ this.code = code;
19
+ this.information = information;
20
+ }
21
+ }
22
+
23
+ exports.StreamTextPredictedResponse = StreamTextPredictedResponse;
@@ -0,0 +1,14 @@
1
+ import { Response, type SuccessResponseCode } from "../response";
2
+ import { type Stream } from "../stream";
3
+ import { type MaybePromise } from "@duplojs/utils";
4
+ declare const StreamTextPredictedResponse_base: new (params: {
5
+ "@DuplojsHttpCore/stream-text-predicted-response"?: unknown;
6
+ }, parentParams: readonly [code: any, information: any, body: any]) => Response<any, any, any> & import("@duplojs/utils").Kind<import("@duplojs/utils").KindDefinition<"@DuplojsHttpCore/stream-text-predicted-response", unknown>, unknown> & import("@duplojs/utils").Kind<import("@duplojs/utils").KindDefinition<"stream-text-predicted-response", unknown>, unknown>;
7
+ export declare class StreamTextPredictedResponse<GenericCode extends SuccessResponseCode = SuccessResponseCode, GenericInformation extends string = string> extends StreamTextPredictedResponse_base {
8
+ startStream: (params: Stream.StartSendingParams<string>) => MaybePromise<void>;
9
+ code: GenericCode;
10
+ information: GenericInformation;
11
+ body: undefined;
12
+ constructor(code: GenericCode, information: GenericInformation, startStream: (params: Stream.StartSendingParams<string>) => MaybePromise<void>);
13
+ }
14
+ export {};
@@ -0,0 +1,21 @@
1
+ import { createCoreLibKind } from '../kind.mjs';
2
+ import './index.mjs';
3
+ import { kindHeritage } from '@duplojs/utils';
4
+ import { Response } from './base.mjs';
5
+
6
+ const defaultParamsParent = [undefined, undefined, undefined];
7
+ const defaultParams = {};
8
+ class StreamTextPredictedResponse extends kindHeritage("stream-text-predicted-response", createCoreLibKind("stream-text-predicted-response"), Response) {
9
+ startStream;
10
+ code;
11
+ information;
12
+ body = undefined;
13
+ constructor(code, information, startStream) {
14
+ super(defaultParams, defaultParamsParent);
15
+ this.startStream = startStream;
16
+ this.code = code;
17
+ this.information = information;
18
+ }
19
+ }
20
+
21
+ export { StreamTextPredictedResponse };
@@ -1,96 +1,44 @@
1
1
  'use strict';
2
2
 
3
3
  var utils = require('@duplojs/utils');
4
+ var stream = require('./stream.cjs');
4
5
 
5
6
  /* eslint-disable @typescript-eslint/prefer-for-of */
6
7
  exports.ServerSentEvents = void 0;
7
8
  (function (ServerSentEvents) {
8
9
  const regexServerSentEventSplitStringData = /\r\n|\r|\n/;
9
10
  const nullIdRegexp = /\0|\n|\r/;
10
- function init(response, initParams) {
11
- const abortSubscribers = [];
12
- let isAbort = false;
13
- const handler = {
14
- async start(send, close) {
15
- if (isAbort) {
16
- return;
11
+ function init(startSendingEvents, initParams) {
12
+ return stream.Stream.init((streamParams) => startSendingEvents({
13
+ ...streamParams,
14
+ lastId: initParams.lastId,
15
+ send: (event, data, params) => {
16
+ if (streamParams.isClose()) {
17
+ return Promise.resolve();
17
18
  }
18
- let isClose = false;
19
- const closeSubscribers = [];
20
- const errorSubscribers = [];
21
- const params = {
22
- send: (event, data, params) => {
23
- if (isClose) {
24
- return Promise.resolve();
25
- }
26
- else if (isAbort) {
27
- return Promise.resolve();
28
- }
29
- let content = `event: ${event || "message"}\n`;
30
- if (typeof data === "string") {
31
- const splitData = data.split(regexServerSentEventSplitStringData);
32
- for (let index = 0; index < splitData.length; index++) {
33
- content += `data: ${splitData[index]}\n`;
34
- }
35
- }
36
- else if (data !== undefined) {
37
- content += `content-type: application/json\ndata: ${JSON.stringify(data)}\n`;
38
- }
39
- if (typeof params?.id === "string" && !nullIdRegexp.test(params.id)) {
40
- content += `id: ${params.id}\n`;
41
- }
42
- if (params?.retry !== undefined) {
43
- content += `retry: ${utils.stringToMillisecond(params.retry)}\n`;
44
- }
45
- content += "\n";
46
- return send(content);
47
- },
48
- abort: handler.abort,
49
- isAbort: () => isAbort,
50
- onAbort: (theFunction) => void abortSubscribers.push(theFunction),
51
- close: () => {
52
- if (isClose === true) {
53
- return;
54
- }
55
- isClose = true;
56
- close();
57
- for (let index = 0; index < closeSubscribers.length; index++) {
58
- closeSubscribers[index]();
59
- }
60
- },
61
- isClose: () => isClose,
62
- onClose: (theFunction) => void closeSubscribers.push(theFunction),
63
- error: (error) => {
64
- for (let index = 0; index < errorSubscribers.length; index++) {
65
- errorSubscribers[index](error);
66
- }
67
- },
68
- onError: (theFunction) => void errorSubscribers.push(theFunction),
69
- lastId: initParams.lastId && !nullIdRegexp.test(initParams.lastId)
70
- ? initParams.lastId
71
- : null,
72
- };
73
- try {
74
- await response.startSendingEvents(params);
19
+ else if (streamParams.isAbort()) {
20
+ return Promise.resolve();
75
21
  }
76
- catch (error) {
77
- params.error(error);
22
+ let content = `event: ${event || "message"}\n`;
23
+ if (typeof data === "string") {
24
+ const splitData = data.split(regexServerSentEventSplitStringData);
25
+ for (let index = 0; index < splitData.length; index++) {
26
+ content += `data: ${splitData[index]}\n`;
27
+ }
78
28
  }
79
- finally {
80
- params.close();
29
+ else if (data !== undefined) {
30
+ content += `content-type: application/json\ndata: ${JSON.stringify(data)}\n`;
81
31
  }
82
- },
83
- abort() {
84
- if (isAbort === true) {
85
- return;
32
+ if (typeof params?.id === "string" && !nullIdRegexp.test(params.id)) {
33
+ content += `id: ${params.id}\n`;
86
34
  }
87
- isAbort = true;
88
- for (let index = 0; index < abortSubscribers.length; index++) {
89
- abortSubscribers[index]();
35
+ if (params?.retry !== undefined) {
36
+ content += `retry: ${utils.stringToMillisecond(params.retry)}\n`;
90
37
  }
38
+ content += "\n";
39
+ return streamParams.send(content);
91
40
  },
92
- };
93
- return handler;
41
+ }));
94
42
  }
95
43
  ServerSentEvents.init = init;
96
44
  })(exports.ServerSentEvents || (exports.ServerSentEvents = {}));
@@ -1,33 +1,21 @@
1
- import { type MillisecondInString } from "@duplojs/utils";
2
- import { type ServerSentEventsPredictedResponse } from "./response";
1
+ import { type MaybePromise, type MillisecondInString } from "@duplojs/utils";
2
+ import { Stream } from "./stream";
3
3
  export declare namespace ServerSentEvents {
4
4
  type DefinitionShape = [string, unknown];
5
5
  interface SendParams {
6
6
  id?: string;
7
7
  retry?: number | MillisecondInString;
8
8
  }
9
- interface StartSendingParams<GenericEvents extends DefinitionShape = DefinitionShape> {
9
+ interface StartSendingParams<GenericEvents extends DefinitionShape = DefinitionShape> extends Stream.StartSendingParams {
10
10
  send(...args: GenericEvents extends any ? [
11
11
  event: GenericEvents[0],
12
12
  ...(GenericEvents[1] extends undefined ? [data?: GenericEvents[1]] : [data: GenericEvents[1]]),
13
13
  params?: SendParams
14
14
  ] : never): Promise<void>;
15
- abort(): void;
16
- onAbort(theFunction: () => void): void;
17
- isAbort(): boolean;
18
- close(): void;
19
- onClose(theFunction: () => void): void;
20
- isClose(): boolean;
21
- error(error: unknown): void;
22
- onError(theFunction: (error: unknown) => void): void;
23
15
  readonly lastId: string | null;
24
16
  }
25
- interface Handler {
26
- start(send: (value: string) => Promise<void>, close: () => void): Promise<void>;
27
- abort(): void;
28
- }
29
17
  interface InitParams {
30
18
  readonly lastId: string | null;
31
19
  }
32
- function init(response: ServerSentEventsPredictedResponse, initParams: InitParams): Handler;
20
+ function init(startSendingEvents: (params: StartSendingParams) => MaybePromise<void>, initParams: InitParams): Stream.Handler;
33
21
  }