@duplojs/http 0.10.0 → 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.
- package/dist/client/clientCache.cjs +84 -0
- package/dist/client/clientCache.d.ts +4 -0
- package/dist/client/clientCache.mjs +80 -0
- package/dist/client/getBody.cjs +0 -3
- package/dist/client/getBody.mjs +0 -3
- package/dist/client/hooks.cjs +36 -0
- package/dist/client/hooks.d.ts +5 -1
- package/dist/client/hooks.mjs +33 -1
- package/dist/client/httpClient.cjs +26 -1
- package/dist/client/httpClient.d.ts +8 -1
- package/dist/client/httpClient.mjs +26 -1
- package/dist/client/index.cjs +12 -0
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.mjs +4 -2
- package/dist/client/promiseRequest.cjs +33 -8
- package/dist/client/promiseRequest.d.ts +2 -1
- package/dist/client/promiseRequest.mjs +34 -9
- package/dist/client/serverSentEvents.cjs +18 -12
- package/dist/client/serverSentEvents.d.ts +2 -1
- package/dist/client/serverSentEvents.mjs +18 -13
- package/dist/client/stream.cjs +117 -0
- package/dist/client/stream.d.ts +3 -0
- package/dist/client/stream.mjs +95 -0
- package/dist/client/types/clientCache.cjs +2 -0
- package/dist/client/types/clientCache.d.ts +27 -0
- package/dist/client/types/clientCache.mjs +1 -0
- package/dist/client/types/clientRequestParams.d.ts +8 -1
- package/dist/client/types/clientResponse.d.ts +24 -6
- package/dist/client/types/hooks.d.ts +10 -1
- package/dist/client/types/index.cjs +1 -0
- package/dist/client/types/index.d.ts +1 -0
- package/dist/client/types/index.mjs +1 -0
- package/dist/client/types/promiseRequestParams.d.ts +3 -0
- package/dist/client/types/serverRoute.d.ts +2 -0
- package/dist/core/builders/route/handler.d.ts +5 -5
- package/dist/core/defaultHooks/index.cjs +14 -0
- package/dist/core/defaultHooks/index.mjs +14 -0
- package/dist/core/functionsBuilders/steps/defaults/extractStep.mjs +1 -1
- package/dist/core/functionsBuilders/steps/defaults/handlerStep.cjs +33 -0
- package/dist/core/functionsBuilders/steps/defaults/handlerStep.mjs +33 -0
- package/dist/core/hub/defaultMalformedUrlHandler.d.ts +1 -1
- package/dist/core/hub/defaultNotfoundHandler.d.ts +1 -1
- package/dist/core/index.cjs +143 -134
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.mjs +42 -39
- package/dist/core/response/contract.cjs +21 -0
- package/dist/core/response/contract.d.ts +33 -5
- package/dist/core/response/contract.mjs +21 -0
- package/dist/core/response/index.cjs +4 -0
- package/dist/core/response/index.d.ts +7 -0
- package/dist/core/response/index.mjs +2 -0
- package/dist/core/response/streamPredicted.cjs +23 -0
- package/dist/core/response/streamPredicted.d.ts +14 -0
- package/dist/core/response/streamPredicted.mjs +21 -0
- package/dist/core/response/streamTextPredicted.cjs +23 -0
- package/dist/core/response/streamTextPredicted.d.ts +14 -0
- package/dist/core/response/streamTextPredicted.mjs +21 -0
- package/dist/core/serverSentEvents.cjs +25 -77
- package/dist/core/serverSentEvents.d.ts +4 -16
- package/dist/core/serverSentEvents.mjs +25 -77
- package/dist/core/steps/handler.d.ts +15 -5
- package/dist/core/stream.cjs +73 -0
- package/dist/core/stream.d.ts +19 -0
- package/dist/core/stream.mjs +73 -0
- package/dist/interfaces/node/bodyReaders/formData/index.cjs +1 -1
- package/dist/interfaces/node/bodyReaders/formData/index.mjs +1 -1
- package/dist/interfaces/node/hooks/index.cjs +21 -1
- package/dist/interfaces/node/hooks/index.mjs +21 -1
- package/dist/interfaces/node/index.cjs +6 -6
- package/dist/interfaces/node/index.mjs +2 -2
- package/dist/plugins/codeGenerator/aggregateStepContract.cjs +12 -0
- package/dist/plugins/codeGenerator/aggregateStepContract.mjs +13 -1
- package/dist/plugins/cookie/index.cjs +2 -2
- package/dist/plugins/cookie/index.mjs +1 -1
- package/dist/plugins/openApiGenerator/aggregateStepContract.d.ts +1 -1
- package/dist/plugins/openApiGenerator/makeOpenApiRoute.d.ts +1 -1
- package/dist/plugins/openApiGenerator/routeToOpenApi.cjs +55 -2
- package/dist/plugins/openApiGenerator/routeToOpenApi.mjs +55 -2
- package/dist/plugins/openApiGenerator/types/endpointResponse.d.ts +4 -1
- package/dist/plugins/static/makeRouteFile.d.ts +1 -1
- package/dist/plugins/static/makeRouteFolder.d.ts +1 -1
- package/package.json +3 -3
package/dist/core/index.mjs
CHANGED
|
@@ -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 {
|
|
24
|
-
export {
|
|
25
|
-
export {
|
|
26
|
-
export {
|
|
27
|
-
export {
|
|
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 {
|
|
34
|
-
export {
|
|
35
|
-
export {
|
|
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 {
|
|
48
|
-
export {
|
|
49
|
-
export {
|
|
50
|
-
export {
|
|
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 {
|
|
55
|
-
export {
|
|
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 {
|
|
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 {
|
|
62
|
-
export {
|
|
63
|
-
export {
|
|
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 {
|
|
68
|
-
export {
|
|
69
|
-
export {
|
|
70
|
-
export {
|
|
71
|
-
export {
|
|
72
|
-
export {
|
|
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
|
|
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(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if (
|
|
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
|
-
|
|
19
|
-
|
|
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
|
-
|
|
77
|
-
|
|
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
|
-
|
|
80
|
-
|
|
29
|
+
else if (data !== undefined) {
|
|
30
|
+
content += `content-type: application/json\ndata: ${JSON.stringify(data)}\n`;
|
|
81
31
|
}
|
|
82
|
-
|
|
83
|
-
|
|
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
|
-
|
|
88
|
-
|
|
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 {
|
|
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(
|
|
20
|
+
function init(startSendingEvents: (params: StartSendingParams) => MaybePromise<void>, initParams: InitParams): Stream.Handler;
|
|
33
21
|
}
|