@web-ts-toolkit/express-response-handler 0.0.2

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.
@@ -0,0 +1,86 @@
1
+ import "./chunk-PQJP2ZCI.mjs";
2
+ import {
3
+ createAip193ErrorInfoDetail,
4
+ getCanonicalStatus,
5
+ toAip193ErrorPayload
6
+ } from "@web-ts-toolkit/http-errors";
7
+ const isString = (value) => typeof value === "string";
8
+ const isPlainObject = (value) => value !== null && typeof value === "object";
9
+ const { isArray } = Array;
10
+ const toMetadata = (value) => {
11
+ if (!isPlainObject(value)) {
12
+ return void 0;
13
+ }
14
+ const metadata = Object.entries(value).reduce((result, [key, entry]) => {
15
+ result[key] = String(entry);
16
+ return result;
17
+ }, {});
18
+ return Object.keys(metadata).length > 0 ? metadata : void 0;
19
+ };
20
+ const toArray = (value) => {
21
+ if (value === void 0 || value === null) {
22
+ return void 0;
23
+ }
24
+ return isArray(value) ? value : [value];
25
+ };
26
+ const toHttpErrorShape = (error, fallbackDomain) => ({
27
+ statusCode: error.statusCode || 500,
28
+ status: error.status,
29
+ message: error.message || "",
30
+ reason: error.reason,
31
+ domain: error.domain || fallbackDomain,
32
+ metadata: toMetadata(error.metadata),
33
+ details: toArray(error.details),
34
+ errors: error.errors
35
+ });
36
+ const defaultErrorMessageProvider = function(error) {
37
+ const errorLike = error;
38
+ return errorLike.message || errorLike._message || String(error);
39
+ };
40
+ const toSimpleErrorPayload = (result) => isString(result) ? { message: result } : { ...result };
41
+ const toStructuredHttpErrorPayload = (error, errorDomain) => toAip193ErrorPayload(toHttpErrorShape(error, errorDomain), errorDomain);
42
+ const toStructuredGenericErrorPayload = (result, errorDomain) => {
43
+ if (isPlainObject(result) && isPlainObject(result.error)) {
44
+ const error = result.error;
45
+ const statusCode = typeof error.code === "number" ? error.code : 422;
46
+ const status = typeof error.status === "string" ? error.status : getCanonicalStatus(statusCode);
47
+ const message = typeof error.message === "string" ? error.message : "";
48
+ const details = toArray(error.details);
49
+ return {
50
+ error: {
51
+ code: statusCode,
52
+ status,
53
+ message,
54
+ ...details ? { details } : {}
55
+ }
56
+ };
57
+ }
58
+ if (isPlainObject(result)) {
59
+ const statusCode = typeof result.code === "number" ? result.code : 422;
60
+ const status = typeof result.status === "string" ? result.status : getCanonicalStatus(statusCode);
61
+ const message = typeof result.message === "string" ? result.message : "";
62
+ const details = toArray(result.details) || [createAip193ErrorInfoDetail(status, errorDomain)];
63
+ return {
64
+ error: {
65
+ code: statusCode,
66
+ status,
67
+ message,
68
+ ...details ? { details } : {}
69
+ }
70
+ };
71
+ }
72
+ return {
73
+ error: {
74
+ code: 422,
75
+ status: getCanonicalStatus(422),
76
+ message: String(result),
77
+ details: [createAip193ErrorInfoDetail(getCanonicalStatus(422), errorDomain)]
78
+ }
79
+ };
80
+ };
81
+ export {
82
+ defaultErrorMessageProvider,
83
+ toSimpleErrorPayload,
84
+ toStructuredGenericErrorPayload,
85
+ toStructuredHttpErrorPayload
86
+ };
@@ -0,0 +1,54 @@
1
+ import * as _web_ts_toolkit_http_errors from '@web-ts-toolkit/http-errors';
2
+ import { BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, MethodNotAllowedError, NotAcceptableError, ProxyAuthRequiredError, RequestTimeoutError, ConflictError, GoneError, LengthRequiredError, PreconditionFailedError, PayloadTooLargeError, UriTooLongError, UnsupportedMediaTypeError, RequestedRangeNotSatisfiableError, ExpectationFailedError, TeapotError, MisdirectedRequestError, UnprocessableEntityError, LockedError, FailedDependencyError, UpgradeRequiredError, PreconditionRequiredError, TooManyRequestsError, RequestHeaderFieldsTooLargeError, UnavailableForLegalReasonsError } from '@web-ts-toolkit/http-errors';
3
+ import { OK, Created, Accepted, NonAuthoritativeInfo, NoContent, ResetContent, PartialContent, MultiStatus, AlreadyReported, IMUsed } from './responses/success.mjs';
4
+ import { CSVResponse } from './responses/csv.mjs';
5
+ import './responses/index.mjs';
6
+
7
+ declare const HttpResponse: {
8
+ ok: (data: unknown) => OK<unknown>;
9
+ created: (data: unknown) => Created<unknown>;
10
+ accepted: (data: unknown) => Accepted<unknown>;
11
+ nonAuthoritativeInfo: (data: unknown) => NonAuthoritativeInfo<unknown>;
12
+ noContent: (data: unknown) => NoContent<unknown>;
13
+ resetContent: (data: unknown) => ResetContent<unknown>;
14
+ partialContent: (data: unknown) => PartialContent<unknown>;
15
+ multiStatus: (data: unknown) => MultiStatus<unknown>;
16
+ alreadyReported: (data: unknown) => AlreadyReported<unknown>;
17
+ imUsed: (data: unknown) => IMUsed<unknown>;
18
+ badRequest: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => BadRequestError;
19
+ unauthorized: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => UnauthorizedError;
20
+ forbidden: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => ForbiddenError;
21
+ notFound: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => NotFoundError;
22
+ methodNotAllowed: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => MethodNotAllowedError;
23
+ notAcceptable: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => NotAcceptableError;
24
+ proxyAuthRequired: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => ProxyAuthRequiredError;
25
+ requestTimeout: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => RequestTimeoutError;
26
+ conflict: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => ConflictError;
27
+ gone: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => GoneError;
28
+ lengthRequired: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => LengthRequiredError;
29
+ preconditionFailed: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => PreconditionFailedError;
30
+ payloadTooLarge: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => PayloadTooLargeError;
31
+ uriTooLong: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => UriTooLongError;
32
+ unsupportedMediaType: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => UnsupportedMediaTypeError;
33
+ requestedRangeNotSatisfiable: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => RequestedRangeNotSatisfiableError;
34
+ expectationFailed: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => ExpectationFailedError;
35
+ teapot: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => TeapotError;
36
+ misdirectedRequest: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => MisdirectedRequestError;
37
+ unprocessableEntity: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => UnprocessableEntityError;
38
+ locked: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => LockedError;
39
+ failedDependency: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => FailedDependencyError;
40
+ upgradeRequired: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => UpgradeRequiredError;
41
+ preconditionRequired: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => PreconditionRequiredError;
42
+ tooManyRequests: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => TooManyRequestsError;
43
+ requestHeaderFieldsTooLarge: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => RequestHeaderFieldsTooLargeError;
44
+ unavailableForLegalReasons: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => UnavailableForLegalReasonsError;
45
+ json: (data: unknown) => OK<unknown>;
46
+ csv: (dataset?: unknown, options?: {
47
+ filename?: string;
48
+ headers?: boolean;
49
+ processor?: (value: unknown) => unknown;
50
+ } | undefined) => CSVResponse;
51
+ };
52
+ type HttpResponseHelpers = typeof HttpResponse;
53
+
54
+ export { HttpResponse, type HttpResponseHelpers };
@@ -0,0 +1,54 @@
1
+ import * as _web_ts_toolkit_http_errors from '@web-ts-toolkit/http-errors';
2
+ import { BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, MethodNotAllowedError, NotAcceptableError, ProxyAuthRequiredError, RequestTimeoutError, ConflictError, GoneError, LengthRequiredError, PreconditionFailedError, PayloadTooLargeError, UriTooLongError, UnsupportedMediaTypeError, RequestedRangeNotSatisfiableError, ExpectationFailedError, TeapotError, MisdirectedRequestError, UnprocessableEntityError, LockedError, FailedDependencyError, UpgradeRequiredError, PreconditionRequiredError, TooManyRequestsError, RequestHeaderFieldsTooLargeError, UnavailableForLegalReasonsError } from '@web-ts-toolkit/http-errors';
3
+ import { OK, Created, Accepted, NonAuthoritativeInfo, NoContent, ResetContent, PartialContent, MultiStatus, AlreadyReported, IMUsed } from './responses/success.js';
4
+ import { CSVResponse } from './responses/csv.js';
5
+ import './responses/index.js';
6
+
7
+ declare const HttpResponse: {
8
+ ok: (data: unknown) => OK<unknown>;
9
+ created: (data: unknown) => Created<unknown>;
10
+ accepted: (data: unknown) => Accepted<unknown>;
11
+ nonAuthoritativeInfo: (data: unknown) => NonAuthoritativeInfo<unknown>;
12
+ noContent: (data: unknown) => NoContent<unknown>;
13
+ resetContent: (data: unknown) => ResetContent<unknown>;
14
+ partialContent: (data: unknown) => PartialContent<unknown>;
15
+ multiStatus: (data: unknown) => MultiStatus<unknown>;
16
+ alreadyReported: (data: unknown) => AlreadyReported<unknown>;
17
+ imUsed: (data: unknown) => IMUsed<unknown>;
18
+ badRequest: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => BadRequestError;
19
+ unauthorized: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => UnauthorizedError;
20
+ forbidden: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => ForbiddenError;
21
+ notFound: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => NotFoundError;
22
+ methodNotAllowed: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => MethodNotAllowedError;
23
+ notAcceptable: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => NotAcceptableError;
24
+ proxyAuthRequired: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => ProxyAuthRequiredError;
25
+ requestTimeout: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => RequestTimeoutError;
26
+ conflict: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => ConflictError;
27
+ gone: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => GoneError;
28
+ lengthRequired: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => LengthRequiredError;
29
+ preconditionFailed: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => PreconditionFailedError;
30
+ payloadTooLarge: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => PayloadTooLargeError;
31
+ uriTooLong: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => UriTooLongError;
32
+ unsupportedMediaType: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => UnsupportedMediaTypeError;
33
+ requestedRangeNotSatisfiable: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => RequestedRangeNotSatisfiableError;
34
+ expectationFailed: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => ExpectationFailedError;
35
+ teapot: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => TeapotError;
36
+ misdirectedRequest: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => MisdirectedRequestError;
37
+ unprocessableEntity: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => UnprocessableEntityError;
38
+ locked: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => LockedError;
39
+ failedDependency: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => FailedDependencyError;
40
+ upgradeRequired: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => UpgradeRequiredError;
41
+ preconditionRequired: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => PreconditionRequiredError;
42
+ tooManyRequests: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => TooManyRequestsError;
43
+ requestHeaderFieldsTooLarge: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => RequestHeaderFieldsTooLargeError;
44
+ unavailableForLegalReasons: (message?: string | undefined, options?: _web_ts_toolkit_http_errors.HttpErrorOptions | undefined) => UnavailableForLegalReasonsError;
45
+ json: (data: unknown) => OK<unknown>;
46
+ csv: (dataset?: unknown, options?: {
47
+ filename?: string;
48
+ headers?: boolean;
49
+ processor?: (value: unknown) => unknown;
50
+ } | undefined) => CSVResponse;
51
+ };
52
+ type HttpResponseHelpers = typeof HttpResponse;
53
+
54
+ export { HttpResponse, type HttpResponseHelpers };
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var http_response_exports = {};
20
+ __export(http_response_exports, {
21
+ HttpResponse: () => HttpResponse
22
+ });
23
+ module.exports = __toCommonJS(http_response_exports);
24
+ var import_success = require("./responses/success");
25
+ var import_csv = require("./responses/csv");
26
+ var import_http_errors = require("@web-ts-toolkit/http-errors");
27
+ const HttpResponse = {
28
+ ok: (...args) => new import_success.OK(...args),
29
+ created: (...args) => new import_success.Created(...args),
30
+ accepted: (...args) => new import_success.Accepted(...args),
31
+ nonAuthoritativeInfo: (...args) => new import_success.NonAuthoritativeInfo(...args),
32
+ noContent: (...args) => new import_success.NoContent(...args),
33
+ resetContent: (...args) => new import_success.ResetContent(...args),
34
+ partialContent: (...args) => new import_success.PartialContent(...args),
35
+ multiStatus: (...args) => new import_success.MultiStatus(...args),
36
+ alreadyReported: (...args) => new import_success.AlreadyReported(...args),
37
+ imUsed: (...args) => new import_success.IMUsed(...args),
38
+ badRequest: (...args) => new import_http_errors.BadRequestError(...args),
39
+ unauthorized: (...args) => new import_http_errors.UnauthorizedError(...args),
40
+ forbidden: (...args) => new import_http_errors.ForbiddenError(...args),
41
+ notFound: (...args) => new import_http_errors.NotFoundError(...args),
42
+ methodNotAllowed: (...args) => new import_http_errors.MethodNotAllowedError(...args),
43
+ notAcceptable: (...args) => new import_http_errors.NotAcceptableError(...args),
44
+ proxyAuthRequired: (...args) => new import_http_errors.ProxyAuthRequiredError(...args),
45
+ requestTimeout: (...args) => new import_http_errors.RequestTimeoutError(...args),
46
+ conflict: (...args) => new import_http_errors.ConflictError(...args),
47
+ gone: (...args) => new import_http_errors.GoneError(...args),
48
+ lengthRequired: (...args) => new import_http_errors.LengthRequiredError(...args),
49
+ preconditionFailed: (...args) => new import_http_errors.PreconditionFailedError(...args),
50
+ payloadTooLarge: (...args) => new import_http_errors.PayloadTooLargeError(...args),
51
+ uriTooLong: (...args) => new import_http_errors.UriTooLongError(...args),
52
+ unsupportedMediaType: (...args) => new import_http_errors.UnsupportedMediaTypeError(...args),
53
+ requestedRangeNotSatisfiable: (...args) => new import_http_errors.RequestedRangeNotSatisfiableError(...args),
54
+ expectationFailed: (...args) => new import_http_errors.ExpectationFailedError(...args),
55
+ teapot: (...args) => new import_http_errors.TeapotError(...args),
56
+ misdirectedRequest: (...args) => new import_http_errors.MisdirectedRequestError(...args),
57
+ unprocessableEntity: (...args) => new import_http_errors.UnprocessableEntityError(...args),
58
+ locked: (...args) => new import_http_errors.LockedError(...args),
59
+ failedDependency: (...args) => new import_http_errors.FailedDependencyError(...args),
60
+ upgradeRequired: (...args) => new import_http_errors.UpgradeRequiredError(...args),
61
+ preconditionRequired: (...args) => new import_http_errors.PreconditionRequiredError(...args),
62
+ tooManyRequests: (...args) => new import_http_errors.TooManyRequestsError(...args),
63
+ requestHeaderFieldsTooLarge: (...args) => new import_http_errors.RequestHeaderFieldsTooLargeError(...args),
64
+ unavailableForLegalReasons: (...args) => new import_http_errors.UnavailableForLegalReasonsError(...args),
65
+ json: (...args) => new import_success.OK(...args),
66
+ csv: (...args) => new import_csv.CSVResponse(...args)
67
+ };
68
+ // Annotate the CommonJS export names for ESM import in node:
69
+ 0 && (module.exports = {
70
+ HttpResponse
71
+ });
@@ -0,0 +1,87 @@
1
+ import "./chunk-PQJP2ZCI.mjs";
2
+ import {
3
+ Accepted,
4
+ AlreadyReported,
5
+ Created,
6
+ IMUsed,
7
+ MultiStatus,
8
+ NoContent,
9
+ NonAuthoritativeInfo,
10
+ OK,
11
+ PartialContent,
12
+ ResetContent
13
+ } from "./responses/success";
14
+ import { CSVResponse } from "./responses/csv";
15
+ import {
16
+ BadRequestError,
17
+ ConflictError,
18
+ ExpectationFailedError,
19
+ FailedDependencyError,
20
+ ForbiddenError,
21
+ GoneError,
22
+ LengthRequiredError,
23
+ LockedError,
24
+ MethodNotAllowedError,
25
+ MisdirectedRequestError,
26
+ NotAcceptableError,
27
+ NotFoundError,
28
+ PayloadTooLargeError,
29
+ PreconditionFailedError,
30
+ PreconditionRequiredError,
31
+ ProxyAuthRequiredError,
32
+ RequestHeaderFieldsTooLargeError,
33
+ RequestedRangeNotSatisfiableError,
34
+ RequestTimeoutError,
35
+ TeapotError,
36
+ TooManyRequestsError,
37
+ UnauthorizedError,
38
+ UnavailableForLegalReasonsError,
39
+ UnprocessableEntityError,
40
+ UnsupportedMediaTypeError,
41
+ UpgradeRequiredError,
42
+ UriTooLongError
43
+ } from "@web-ts-toolkit/http-errors";
44
+ const HttpResponse = {
45
+ ok: (...args) => new OK(...args),
46
+ created: (...args) => new Created(...args),
47
+ accepted: (...args) => new Accepted(...args),
48
+ nonAuthoritativeInfo: (...args) => new NonAuthoritativeInfo(...args),
49
+ noContent: (...args) => new NoContent(...args),
50
+ resetContent: (...args) => new ResetContent(...args),
51
+ partialContent: (...args) => new PartialContent(...args),
52
+ multiStatus: (...args) => new MultiStatus(...args),
53
+ alreadyReported: (...args) => new AlreadyReported(...args),
54
+ imUsed: (...args) => new IMUsed(...args),
55
+ badRequest: (...args) => new BadRequestError(...args),
56
+ unauthorized: (...args) => new UnauthorizedError(...args),
57
+ forbidden: (...args) => new ForbiddenError(...args),
58
+ notFound: (...args) => new NotFoundError(...args),
59
+ methodNotAllowed: (...args) => new MethodNotAllowedError(...args),
60
+ notAcceptable: (...args) => new NotAcceptableError(...args),
61
+ proxyAuthRequired: (...args) => new ProxyAuthRequiredError(...args),
62
+ requestTimeout: (...args) => new RequestTimeoutError(...args),
63
+ conflict: (...args) => new ConflictError(...args),
64
+ gone: (...args) => new GoneError(...args),
65
+ lengthRequired: (...args) => new LengthRequiredError(...args),
66
+ preconditionFailed: (...args) => new PreconditionFailedError(...args),
67
+ payloadTooLarge: (...args) => new PayloadTooLargeError(...args),
68
+ uriTooLong: (...args) => new UriTooLongError(...args),
69
+ unsupportedMediaType: (...args) => new UnsupportedMediaTypeError(...args),
70
+ requestedRangeNotSatisfiable: (...args) => new RequestedRangeNotSatisfiableError(...args),
71
+ expectationFailed: (...args) => new ExpectationFailedError(...args),
72
+ teapot: (...args) => new TeapotError(...args),
73
+ misdirectedRequest: (...args) => new MisdirectedRequestError(...args),
74
+ unprocessableEntity: (...args) => new UnprocessableEntityError(...args),
75
+ locked: (...args) => new LockedError(...args),
76
+ failedDependency: (...args) => new FailedDependencyError(...args),
77
+ upgradeRequired: (...args) => new UpgradeRequiredError(...args),
78
+ preconditionRequired: (...args) => new PreconditionRequiredError(...args),
79
+ tooManyRequests: (...args) => new TooManyRequestsError(...args),
80
+ requestHeaderFieldsTooLarge: (...args) => new RequestHeaderFieldsTooLargeError(...args),
81
+ unavailableForLegalReasons: (...args) => new UnavailableForLegalReasonsError(...args),
82
+ json: (...args) => new OK(...args),
83
+ csv: (...args) => new CSVResponse(...args)
84
+ };
85
+ export {
86
+ HttpResponse
87
+ };
package/index.d.mts ADDED
@@ -0,0 +1,10 @@
1
+ import { ExpressResponseHandler } from './public-types.mjs';
2
+ import './http-response.mjs';
3
+ import '@web-ts-toolkit/http-errors';
4
+ import './responses/success.mjs';
5
+ import './responses/index.mjs';
6
+ import './responses/csv.mjs';
7
+
8
+ declare const apiHandler: ExpressResponseHandler;
9
+
10
+ export { apiHandler as default };
package/index.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ import { ExpressResponseHandler } from './public-types.js';
2
+ import './http-response.js';
3
+ import '@web-ts-toolkit/http-errors';
4
+ import './responses/success.js';
5
+ import './responses/index.js';
6
+ import './responses/csv.js';
7
+
8
+ declare const apiHandler: ExpressResponseHandler;
9
+
10
+ export { apiHandler as default };
package/index.js ADDED
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ var import_create_express_response_handler = require("./create-express-response-handler");
3
+ const apiHandler = (0, import_create_express_response_handler.createExpressResponseHandler)();
4
+ module.exports = apiHandler;
package/index.mjs ADDED
@@ -0,0 +1,11 @@
1
+ import {
2
+ __commonJS
3
+ } from "./chunk-PQJP2ZCI.mjs";
4
+ import { createExpressResponseHandler } from "./create-express-response-handler";
5
+ var require_index = __commonJS({
6
+ "src/index.ts"(exports, module) {
7
+ const apiHandler = createExpressResponseHandler();
8
+ module.exports = apiHandler;
9
+ }
10
+ });
11
+ export default require_index();
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@web-ts-toolkit/express-response-handler",
3
+ "description": "Express response handler",
4
+ "version": "0.0.2",
5
+ "keywords": [
6
+ "express",
7
+ "api",
8
+ "request",
9
+ "handler"
10
+ ],
11
+ "main": "./index.js",
12
+ "module": "./index.mjs",
13
+ "types": "./index.d.ts",
14
+ "exports": {
15
+ ".": {
16
+ "types": "./index.d.ts",
17
+ "import": "./index.mjs",
18
+ "require": "./index.js",
19
+ "default": "./index.js"
20
+ },
21
+ "./types": {
22
+ "types": "./public-types.d.ts",
23
+ "import": "./public-types.mjs",
24
+ "require": "./public-types.js",
25
+ "default": "./public-types.js"
26
+ },
27
+ "./responses": {
28
+ "types": "./responses/index.d.ts",
29
+ "import": "./responses/index.mjs",
30
+ "require": "./responses/index.js",
31
+ "default": "./responses/index.js"
32
+ },
33
+ "./responses/csv": {
34
+ "types": "./responses/csv.d.ts",
35
+ "import": "./responses/csv.mjs",
36
+ "require": "./responses/csv.js",
37
+ "default": "./responses/csv.js"
38
+ },
39
+ "./responses/success": {
40
+ "types": "./responses/success.d.ts",
41
+ "import": "./responses/success.mjs",
42
+ "require": "./responses/success.js",
43
+ "default": "./responses/success.js"
44
+ }
45
+ },
46
+ "dependencies": {
47
+ "@fast-csv/format": "^5.0.5",
48
+ "@web-ts-toolkit/http-errors": "0.0.2"
49
+ },
50
+ "author": "Junmin Dev",
51
+ "bugs": {
52
+ "url": "https://github.com/egose/web-ts-toolkit/issues"
53
+ },
54
+ "engines": {
55
+ "node": ">=20"
56
+ },
57
+ "license": "Apache-2.0",
58
+ "repository": {
59
+ "type": "git",
60
+ "url": "git+https://github.com/egose/web-ts-toolkit.git",
61
+ "directory": "packages/express-response-handler"
62
+ }
63
+ }
@@ -0,0 +1,62 @@
1
+ import { HttpResponseHelpers } from './http-response.mjs';
2
+ import '@web-ts-toolkit/http-errors';
3
+ import './responses/success.mjs';
4
+ import './responses/index.mjs';
5
+ import './responses/csv.mjs';
6
+
7
+ type ErrorMessageResult = string | Record<string, unknown>;
8
+ type ErrorMessageProvider = (error: unknown) => ErrorMessageResult;
9
+ type ErrorFormat = 'simple' | 'aip193';
10
+ type MaybePromise<T> = T | Promise<T>;
11
+ type Hook = (value: unknown) => unknown;
12
+ type AsyncHook = (value: unknown) => Promise<unknown>;
13
+ type NextFunction = (error?: unknown) => void;
14
+ type ExpressResponseHandlerOptions = {
15
+ errorFormat?: ErrorFormat;
16
+ errorDomain?: string;
17
+ };
18
+ type ResponseLike = {
19
+ headersSent: boolean;
20
+ status(code: number): ResponseLike;
21
+ json(data: unknown): unknown;
22
+ send(data: unknown): unknown;
23
+ set(name: string, value: string): unknown;
24
+ end(): void;
25
+ };
26
+ type EventState = {
27
+ canceled: boolean;
28
+ nextError: unknown;
29
+ };
30
+ type MiddlewareFunction<Request = unknown, Response extends ResponseLike = ResponseLike, Return = unknown> = (req: Request, res: Response, next: NextFunction) => MaybePromise<Return>;
31
+ type RouterFunction<Request = unknown, Response extends ResponseLike = ResponseLike> = (req: Request, res: Response, next: NextFunction) => void;
32
+ type HandleResponse = {
33
+ <Request = unknown, Response extends ResponseLike = ResponseLike, Return = unknown>(fn: MiddlewareFunction<Request, Response, Return>): RouterFunction<Request, Response>;
34
+ <Request = unknown, Response extends ResponseLike = ResponseLike, Return = unknown>(...fns: Array<MiddlewareFunction<Request, Response, Return>>): Array<RouterFunction<Request, Response>>;
35
+ <Request = unknown, Response extends ResponseLike = ResponseLike, Return = unknown>(fns: Array<MiddlewareFunction<Request, Response, Return>>): Array<RouterFunction<Request, Response>>;
36
+ };
37
+ type ErrorWithPayload = {
38
+ statusCode?: number;
39
+ message?: string;
40
+ errors?: unknown;
41
+ _message?: string;
42
+ status?: string;
43
+ reason?: string;
44
+ domain?: string;
45
+ metadata?: unknown;
46
+ details?: unknown;
47
+ };
48
+ type ExpressResponseHandlerFactory = (options?: ExpressResponseHandlerOptions) => ExpressResponseHandler;
49
+ type ExpressResponseHandler = {
50
+ handleResponse: HandleResponse;
51
+ handleResult: (res: ResponseLike, result: unknown, event: EventState) => void;
52
+ handlePromise: (res: ResponseLike, promise: Promise<unknown>, event: EventState) => void;
53
+ HttpResponse: HttpResponseHelpers;
54
+ createExpressResponseHandler: ExpressResponseHandlerFactory;
55
+ errorMessageProvider: ErrorMessageProvider;
56
+ preJson: Hook | null;
57
+ postJson: Hook | null;
58
+ preError: Hook | null;
59
+ postError: Hook | null;
60
+ };
61
+
62
+ export { type AsyncHook, type ErrorFormat, type ErrorMessageProvider, type ErrorMessageResult, type ErrorWithPayload, type EventState, type ExpressResponseHandler, type ExpressResponseHandlerFactory, type ExpressResponseHandlerOptions, type HandleResponse, type Hook, HttpResponseHelpers, type MaybePromise, type MiddlewareFunction, type NextFunction, type ResponseLike, type RouterFunction };
@@ -0,0 +1,62 @@
1
+ import { HttpResponseHelpers } from './http-response.js';
2
+ import '@web-ts-toolkit/http-errors';
3
+ import './responses/success.js';
4
+ import './responses/index.js';
5
+ import './responses/csv.js';
6
+
7
+ type ErrorMessageResult = string | Record<string, unknown>;
8
+ type ErrorMessageProvider = (error: unknown) => ErrorMessageResult;
9
+ type ErrorFormat = 'simple' | 'aip193';
10
+ type MaybePromise<T> = T | Promise<T>;
11
+ type Hook = (value: unknown) => unknown;
12
+ type AsyncHook = (value: unknown) => Promise<unknown>;
13
+ type NextFunction = (error?: unknown) => void;
14
+ type ExpressResponseHandlerOptions = {
15
+ errorFormat?: ErrorFormat;
16
+ errorDomain?: string;
17
+ };
18
+ type ResponseLike = {
19
+ headersSent: boolean;
20
+ status(code: number): ResponseLike;
21
+ json(data: unknown): unknown;
22
+ send(data: unknown): unknown;
23
+ set(name: string, value: string): unknown;
24
+ end(): void;
25
+ };
26
+ type EventState = {
27
+ canceled: boolean;
28
+ nextError: unknown;
29
+ };
30
+ type MiddlewareFunction<Request = unknown, Response extends ResponseLike = ResponseLike, Return = unknown> = (req: Request, res: Response, next: NextFunction) => MaybePromise<Return>;
31
+ type RouterFunction<Request = unknown, Response extends ResponseLike = ResponseLike> = (req: Request, res: Response, next: NextFunction) => void;
32
+ type HandleResponse = {
33
+ <Request = unknown, Response extends ResponseLike = ResponseLike, Return = unknown>(fn: MiddlewareFunction<Request, Response, Return>): RouterFunction<Request, Response>;
34
+ <Request = unknown, Response extends ResponseLike = ResponseLike, Return = unknown>(...fns: Array<MiddlewareFunction<Request, Response, Return>>): Array<RouterFunction<Request, Response>>;
35
+ <Request = unknown, Response extends ResponseLike = ResponseLike, Return = unknown>(fns: Array<MiddlewareFunction<Request, Response, Return>>): Array<RouterFunction<Request, Response>>;
36
+ };
37
+ type ErrorWithPayload = {
38
+ statusCode?: number;
39
+ message?: string;
40
+ errors?: unknown;
41
+ _message?: string;
42
+ status?: string;
43
+ reason?: string;
44
+ domain?: string;
45
+ metadata?: unknown;
46
+ details?: unknown;
47
+ };
48
+ type ExpressResponseHandlerFactory = (options?: ExpressResponseHandlerOptions) => ExpressResponseHandler;
49
+ type ExpressResponseHandler = {
50
+ handleResponse: HandleResponse;
51
+ handleResult: (res: ResponseLike, result: unknown, event: EventState) => void;
52
+ handlePromise: (res: ResponseLike, promise: Promise<unknown>, event: EventState) => void;
53
+ HttpResponse: HttpResponseHelpers;
54
+ createExpressResponseHandler: ExpressResponseHandlerFactory;
55
+ errorMessageProvider: ErrorMessageProvider;
56
+ preJson: Hook | null;
57
+ postJson: Hook | null;
58
+ preError: Hook | null;
59
+ postError: Hook | null;
60
+ };
61
+
62
+ export { type AsyncHook, type ErrorFormat, type ErrorMessageProvider, type ErrorMessageResult, type ErrorWithPayload, type EventState, type ExpressResponseHandler, type ExpressResponseHandlerFactory, type ExpressResponseHandlerOptions, type HandleResponse, type Hook, HttpResponseHelpers, type MaybePromise, type MiddlewareFunction, type NextFunction, type ResponseLike, type RouterFunction };
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var public_types_exports = {};
16
+ module.exports = __toCommonJS(public_types_exports);
File without changes
@@ -0,0 +1,21 @@
1
+ type CsvProcessor = (value: unknown) => unknown;
2
+ type CsvResponseOptions = {
3
+ filename?: string;
4
+ headers?: boolean;
5
+ processor?: CsvProcessor;
6
+ };
7
+ type CsvStreamResponse = {
8
+ set(name: string, value: string): unknown;
9
+ destroy?(error?: Error): void;
10
+ end(): void;
11
+ };
12
+ declare class CSVResponse {
13
+ readonly dataset: unknown[];
14
+ readonly filename: string;
15
+ readonly processor: CsvProcessor;
16
+ readonly headers?: boolean;
17
+ constructor(dataset?: unknown, options?: CsvResponseOptions);
18
+ streamCsv(res: CsvStreamResponse): void;
19
+ }
20
+
21
+ export { CSVResponse };
@@ -0,0 +1,21 @@
1
+ type CsvProcessor = (value: unknown) => unknown;
2
+ type CsvResponseOptions = {
3
+ filename?: string;
4
+ headers?: boolean;
5
+ processor?: CsvProcessor;
6
+ };
7
+ type CsvStreamResponse = {
8
+ set(name: string, value: string): unknown;
9
+ destroy?(error?: Error): void;
10
+ end(): void;
11
+ };
12
+ declare class CSVResponse {
13
+ readonly dataset: unknown[];
14
+ readonly filename: string;
15
+ readonly processor: CsvProcessor;
16
+ readonly headers?: boolean;
17
+ constructor(dataset?: unknown, options?: CsvResponseOptions);
18
+ streamCsv(res: CsvStreamResponse): void;
19
+ }
20
+
21
+ export { CSVResponse };