@venizia/ignis-kernel 0.4.6 → 0.4.7-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +1 -4
- package/dist/esm/base/applications/artifact-group.d.ts.map +1 -1
- package/dist/esm/base/applications/artifact-group.js +4 -1
- package/dist/esm/base/applications/artifact-group.js.map +1 -1
- package/dist/esm/base/applications/artifact-index.d.ts.map +1 -1
- package/dist/esm/base/applications/artifact-index.js +2 -1
- package/dist/esm/base/applications/artifact-index.js.map +1 -1
- package/dist/esm/base/applications/cors.d.ts +12 -10
- package/dist/esm/base/applications/cors.d.ts.map +1 -1
- package/dist/esm/base/applications/cors.js +37 -35
- package/dist/esm/base/applications/cors.js.map +1 -1
- package/dist/esm/base/applications/rest.js +11 -11
- package/dist/esm/base/applications/rest.js.map +1 -1
- package/dist/esm/base/auth/authenticate/common/codecs.js +2 -2
- package/dist/esm/base/auth/authenticate/common/codecs.js.map +1 -1
- package/dist/esm/base/auth/authenticate/strategies/strategy-registry.d.ts +1 -1
- package/dist/esm/base/auth/authenticate/strategies/strategy-registry.js +1 -1
- package/dist/esm/base/auth/authenticate/strategies/strategy-registry.js.map +1 -1
- package/dist/esm/base/auth/authorize/providers/authorization.provider.d.ts.map +1 -1
- package/dist/esm/base/auth/authorize/providers/authorization.provider.js +14 -11
- package/dist/esm/base/auth/authorize/providers/authorization.provider.js.map +1 -1
- package/dist/esm/base/auth/authorize/providers/request-domain.d.ts +14 -11
- package/dist/esm/base/auth/authorize/providers/request-domain.d.ts.map +1 -1
- package/dist/esm/base/auth/authorize/providers/request-domain.js +42 -39
- package/dist/esm/base/auth/authorize/providers/request-domain.js.map +1 -1
- package/dist/esm/base/auth/base/abstract-auth-registry.js +2 -2
- package/dist/esm/base/auth/base/abstract-auth-registry.js.map +1 -1
- package/dist/esm/base/auth/models/requests/change-password.schema.js +3 -3
- package/dist/esm/base/auth/models/requests/change-password.schema.js.map +1 -1
- package/dist/esm/base/auth/models/requests/sign-in.schema.js +5 -5
- package/dist/esm/base/auth/models/requests/sign-in.schema.js.map +1 -1
- package/dist/esm/base/components/controller/rest/rest.component.js +2 -2
- package/dist/esm/base/components/controller/rest/rest.component.js.map +1 -1
- package/dist/esm/base/controllers/common/index.d.ts +0 -1
- package/dist/esm/base/controllers/common/index.d.ts.map +1 -1
- package/dist/esm/base/controllers/common/index.js +0 -1
- package/dist/esm/base/controllers/common/index.js.map +1 -1
- package/dist/esm/base/controllers/common/schema-builders.d.ts +0 -5
- package/dist/esm/base/controllers/common/schema-builders.d.ts.map +1 -1
- package/dist/esm/base/controllers/common/schema-builders.js +0 -14
- package/dist/esm/base/controllers/common/schema-builders.js.map +1 -1
- package/dist/esm/base/controllers/context.d.ts +7 -2
- package/dist/esm/base/controllers/context.d.ts.map +1 -1
- package/dist/esm/base/controllers/context.js +7 -4
- package/dist/esm/base/controllers/context.js.map +1 -1
- package/dist/esm/base/controllers/factory/controller.d.ts +33 -1
- package/dist/esm/base/controllers/factory/controller.d.ts.map +1 -1
- package/dist/esm/base/controllers/factory/controller.js +90 -6
- package/dist/esm/base/controllers/factory/controller.js.map +1 -1
- package/dist/esm/base/controllers/factory/crud/persistable.d.ts.map +1 -1
- package/dist/esm/base/controllers/factory/crud/persistable.js +40 -25
- package/dist/esm/base/controllers/factory/crud/persistable.js.map +1 -1
- package/dist/esm/base/controllers/factory/crud/readable.d.ts.map +1 -1
- package/dist/esm/base/controllers/factory/crud/readable.js +4 -3
- package/dist/esm/base/controllers/factory/crud/readable.js.map +1 -1
- package/dist/esm/base/controllers/factory/definition.d.ts +1 -8
- package/dist/esm/base/controllers/factory/definition.d.ts.map +1 -1
- package/dist/esm/base/controllers/factory/definition.js +17 -24
- package/dist/esm/base/controllers/factory/definition.js.map +1 -1
- package/dist/esm/base/controllers/factory/index.d.ts +0 -1
- package/dist/esm/base/controllers/factory/index.d.ts.map +1 -1
- package/dist/esm/base/controllers/factory/index.js +0 -1
- package/dist/esm/base/controllers/factory/index.js.map +1 -1
- package/dist/esm/base/controllers/rest/abstract.d.ts.map +1 -1
- package/dist/esm/base/controllers/rest/abstract.js +6 -6
- package/dist/esm/base/controllers/rest/abstract.js.map +1 -1
- package/dist/esm/base/controllers/rest/base.d.ts +0 -5
- package/dist/esm/base/controllers/rest/base.d.ts.map +1 -1
- package/dist/esm/base/controllers/rest/base.js +14 -14
- package/dist/esm/base/controllers/rest/base.js.map +1 -1
- package/dist/esm/base/datasources/abstract.js +2 -2
- package/dist/esm/base/datasources/abstract.js.map +1 -1
- package/dist/esm/base/events/event-bus.js +4 -4
- package/dist/esm/base/events/event-bus.js.map +1 -1
- package/dist/esm/base/metadata/injectable.d.ts +7 -4
- package/dist/esm/base/metadata/injectable.d.ts.map +1 -1
- package/dist/esm/base/metadata/injectable.js +26 -23
- package/dist/esm/base/metadata/injectable.js.map +1 -1
- package/dist/esm/base/metadata/model-metadata.d.ts +27 -13
- package/dist/esm/base/metadata/model-metadata.d.ts.map +1 -1
- package/dist/esm/base/metadata/model-metadata.js +56 -26
- package/dist/esm/base/metadata/model-metadata.js.map +1 -1
- package/dist/esm/base/metadata/persistents.d.ts.map +1 -1
- package/dist/esm/base/metadata/persistents.js +21 -13
- package/dist/esm/base/metadata/persistents.js.map +1 -1
- package/dist/esm/base/metadata/routes/controller.d.ts.map +1 -1
- package/dist/esm/base/metadata/routes/controller.js +5 -2
- package/dist/esm/base/metadata/routes/controller.js.map +1 -1
- package/dist/esm/base/middlewares/app-error/app-error.middleware.js +7 -7
- package/dist/esm/base/middlewares/app-error/app-error.middleware.js.map +1 -1
- package/dist/esm/base/middlewares/app-error/database.handler.d.ts +14 -12
- package/dist/esm/base/middlewares/app-error/database.handler.d.ts.map +1 -1
- package/dist/esm/base/middlewares/app-error/database.handler.js +37 -35
- package/dist/esm/base/middlewares/app-error/database.handler.js.map +1 -1
- package/dist/esm/base/middlewares/app-error/zod.handler.d.ts +28 -23
- package/dist/esm/base/middlewares/app-error/zod.handler.d.ts.map +1 -1
- package/dist/esm/base/middlewares/app-error/zod.handler.js +56 -53
- package/dist/esm/base/middlewares/app-error/zod.handler.js.map +1 -1
- package/dist/esm/base/middlewares/emoji-favicon/emoji-favicon.middleware.d.ts +6 -4
- package/dist/esm/base/middlewares/emoji-favicon/emoji-favicon.middleware.d.ts.map +1 -1
- package/dist/esm/base/middlewares/emoji-favicon/emoji-favicon.middleware.js +14 -12
- package/dist/esm/base/middlewares/emoji-favicon/emoji-favicon.middleware.js.map +1 -1
- package/dist/esm/base/middlewares/form-body/form-body.middleware.d.ts +15 -11
- package/dist/esm/base/middlewares/form-body/form-body.middleware.d.ts.map +1 -1
- package/dist/esm/base/middlewares/form-body/form-body.middleware.js +25 -21
- package/dist/esm/base/middlewares/form-body/form-body.middleware.js.map +1 -1
- package/dist/esm/base/models/common/schemas.d.ts +184 -105
- package/dist/esm/base/models/common/schemas.d.ts.map +1 -1
- package/dist/esm/base/models/common/schemas.js +105 -54
- package/dist/esm/base/models/common/schemas.js.map +1 -1
- package/dist/esm/base/models/common/utilities.d.ts +10 -5
- package/dist/esm/base/models/common/utilities.d.ts.map +1 -1
- package/dist/esm/base/models/common/utilities.js +22 -16
- package/dist/esm/base/models/common/utilities.js.map +1 -1
- package/dist/esm/base/repositories/common/types/results.d.ts +15 -7
- package/dist/esm/base/repositories/common/types/results.d.ts.map +1 -1
- package/dist/esm/base/repositories/common/types/results.js +16 -7
- package/dist/esm/base/repositories/common/types/results.js.map +1 -1
- package/dist/esm/base/repositories/core/abstract.d.ts.map +1 -1
- package/dist/esm/base/repositories/core/abstract.js +5 -3
- package/dist/esm/base/repositories/core/abstract.js.map +1 -1
- package/dist/esm/base/repositories/query-schemas/index.d.ts +1 -1
- package/dist/esm/base/repositories/query-schemas/index.d.ts.map +1 -1
- package/dist/esm/base/repositories/query-schemas/index.js +3 -3
- package/dist/esm/base/repositories/query-schemas/index.js.map +1 -1
- package/dist/esm/helpers/inversion/common/relation-builder.js.map +1 -1
- package/dist/esm/helpers/inversion/index.d.ts +1 -1
- package/dist/esm/helpers/inversion/index.d.ts.map +1 -1
- package/dist/esm/helpers/inversion/index.js +1 -1
- package/dist/esm/helpers/inversion/index.js.map +1 -1
- package/dist/esm/helpers/inversion/mixins/repository.mixin.d.ts.map +1 -1
- package/dist/esm/helpers/inversion/mixins/repository.mixin.js +5 -5
- package/dist/esm/helpers/inversion/mixins/repository.mixin.js.map +1 -1
- package/dist/esm/metadata.d.ts +1 -1
- package/dist/esm/metadata.d.ts.map +1 -1
- package/dist/esm/metadata.js +1 -1
- package/dist/esm/metadata.js.map +1 -1
- package/dist/esm/repository.d.ts +2 -2
- package/dist/esm/repository.d.ts.map +1 -1
- package/dist/esm/repository.js +2 -2
- package/dist/esm/repository.js.map +1 -1
- package/dist/esm/utilities/index.d.ts +1 -1
- package/dist/esm/utilities/index.d.ts.map +1 -1
- package/dist/esm/utilities/index.js +1 -1
- package/dist/esm/utilities/index.js.map +1 -1
- package/dist/esm/utilities/not-supported.utility.d.ts +11 -0
- package/dist/esm/utilities/not-supported.utility.d.ts.map +1 -0
- package/dist/esm/utilities/not-supported.utility.js +19 -0
- package/dist/esm/utilities/not-supported.utility.js.map +1 -0
- package/package.json +6 -7
- package/dist/esm/base/controllers/common/html-response.d.ts +0 -70
- package/dist/esm/base/controllers/common/html-response.d.ts.map +0 -1
- package/dist/esm/base/controllers/common/html-response.js +0 -30
- package/dist/esm/base/controllers/common/html-response.js.map +0 -1
- package/dist/esm/base/controllers/factory/authorize-guard.d.ts +0 -19
- package/dist/esm/base/controllers/factory/authorize-guard.d.ts.map +0 -1
- package/dist/esm/base/controllers/factory/authorize-guard.js +0 -56
- package/dist/esm/base/controllers/factory/authorize-guard.js.map +0 -1
- package/dist/esm/base/controllers/factory/helper.d.ts +0 -2
- package/dist/esm/base/controllers/factory/helper.d.ts.map +0 -1
- package/dist/esm/base/controllers/factory/helper.js +0 -2
- package/dist/esm/base/controllers/factory/helper.js.map +0 -1
- package/dist/esm/base/controllers/factory/repository-injection.d.ts +0 -14
- package/dist/esm/base/controllers/factory/repository-injection.d.ts.map +0 -1
- package/dist/esm/base/controllers/factory/repository-injection.js +0 -27
- package/dist/esm/base/controllers/factory/repository-injection.js.map +0 -1
- package/dist/esm/base/metadata/model-settings.d.ts +0 -11
- package/dist/esm/base/metadata/model-settings.d.ts.map +0 -1
- package/dist/esm/base/metadata/model-settings.js +0 -30
- package/dist/esm/base/metadata/model-settings.js.map +0 -1
- package/dist/esm/utilities/error.utility.d.ts +0 -8
- package/dist/esm/utilities/error.utility.d.ts.map +0 -1
- package/dist/esm/utilities/error.utility.js +0 -14
- package/dist/esm/utilities/error.utility.js.map +0 -1
|
@@ -1,59 +1,62 @@
|
|
|
1
1
|
import { MessageCode } from '@venizia/ignis-helpers/core';
|
|
2
2
|
import { HTTP } from '@venizia/ignis-helpers/common';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
export class ZodErrorHandler {
|
|
4
|
+
static { this.DEFAULT_VALIDATION_MESSAGE = 'ValidationError'; }
|
|
5
|
+
/** Returns a schema-author-supplied code (`issue.params.code`) when it is a non-empty string. */
|
|
6
|
+
static extractIssueCode(opts) {
|
|
7
|
+
const paramsCode = opts.issue?.params?.code;
|
|
8
|
+
if (typeof paramsCode === 'string' && paramsCode.length > 0) {
|
|
9
|
+
return paramsCode;
|
|
10
|
+
}
|
|
11
|
+
return undefined;
|
|
9
12
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return {
|
|
35
|
-
statusCode,
|
|
36
|
-
response: {
|
|
37
|
-
message,
|
|
13
|
+
/** Formats a ZodError into the 422 validation response. */
|
|
14
|
+
static formatZodError(opts) {
|
|
15
|
+
const { isProduction, requestId, url, path, error } = opts;
|
|
16
|
+
const statusCode = HTTP.ResultCodes.RS_4.UnprocessableEntity;
|
|
17
|
+
let validationErrors;
|
|
18
|
+
try {
|
|
19
|
+
validationErrors = JSON.parse(error.message);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
validationErrors = error;
|
|
23
|
+
}
|
|
24
|
+
const issues = Array.isArray(validationErrors) ? validationErrors : null;
|
|
25
|
+
// Prefer the first issue with a custom `params.code`, else its raw Zod code.
|
|
26
|
+
let messageCode;
|
|
27
|
+
let message = ZodErrorHandler.DEFAULT_VALIDATION_MESSAGE;
|
|
28
|
+
if (issues && issues.length > 0) {
|
|
29
|
+
const primaryIssue = issues.find((issue) => ZodErrorHandler.extractIssueCode({ issue }) !== undefined) ??
|
|
30
|
+
issues[0];
|
|
31
|
+
messageCode = ZodErrorHandler.extractIssueCode({ issue: primaryIssue }) ?? primaryIssue.code;
|
|
32
|
+
message = primaryIssue.message;
|
|
33
|
+
}
|
|
34
|
+
// A ZodError we could not parse into issues yields no code of its own; the response still carries one, so no error response is ever missing the field a client branches on.
|
|
35
|
+
const resolvedMessageCode = MessageCode.resolve(messageCode);
|
|
36
|
+
return {
|
|
38
37
|
statusCode,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
38
|
+
response: {
|
|
39
|
+
message,
|
|
40
|
+
statusCode,
|
|
41
|
+
// `args` is empty: a Zod issue carries no interpolation values - per-field detail is in `details.cause`.
|
|
42
|
+
normalized: { text: message, code: resolvedMessageCode, args: {} },
|
|
43
|
+
requestId,
|
|
44
|
+
details: {
|
|
45
|
+
url,
|
|
46
|
+
path,
|
|
47
|
+
stack: !isProduction ? error.stack : undefined,
|
|
48
|
+
cause: issues
|
|
49
|
+
? issues.map((el) => ({
|
|
50
|
+
path: el.path.join('.') || 'root',
|
|
51
|
+
message: el.message,
|
|
52
|
+
code: el.code,
|
|
53
|
+
expected: el.expected,
|
|
54
|
+
received: el.received,
|
|
55
|
+
}))
|
|
56
|
+
: validationErrors,
|
|
57
|
+
},
|
|
55
58
|
},
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
59
62
|
//# sourceMappingURL=zod.handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod.handler.js","sourceRoot":"","sources":["../../../../../src/base/middlewares/app-error/zod.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAIrD,MAAM,
|
|
1
|
+
{"version":3,"file":"zod.handler.js","sourceRoot":"","sources":["../../../../../src/base/middlewares/app-error/zod.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAIrD,MAAM,OAAO,eAAe;aACF,+BAA0B,GAAG,iBAAiB,CAAC;IAEvE,iGAAiG;IACzF,MAAM,CAAC,gBAAgB,CAAC,IAA8B;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC;QAE5C,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5D,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,2DAA2D;IAC3D,MAAM,CAAC,cAAc,CAAC,IAMrB;QACC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAE7D,IAAI,gBAAyB,CAAC;QAC9B,IAAI,CAAC;YACH,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB,GAAG,KAAK,CAAC;QAC3B,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAE,gBAAoC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE9F,6EAA6E;QAC7E,IAAI,WAA+B,CAAC;QACpC,IAAI,OAAO,GAAG,eAAe,CAAC,0BAA0B,CAAC;QAEzD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,YAAY,GAChB,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,SAAS,CAAC;gBACjF,MAAM,CAAC,CAAC,CAAC,CAAC;YACZ,WAAW,GAAG,eAAe,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC;YAC7F,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;QACjC,CAAC;QAED,4KAA4K;QAC5K,MAAM,mBAAmB,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE7D,OAAO;YACL,UAAU;YACV,QAAQ,EAAE;gBACR,OAAO;gBACP,UAAU;gBACV,yGAAyG;gBACzG,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE;gBAClE,SAAS;gBACT,OAAO,EAAE;oBACP,GAAG;oBACH,IAAI;oBACJ,KAAK,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;oBAC9C,KAAK,EAAE,MAAM;wBACX,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;4BAClB,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM;4BACjC,OAAO,EAAE,EAAE,CAAC,OAAO;4BACnB,IAAI,EAAE,EAAE,CAAC,IAAI;4BACb,QAAQ,EAAE,EAAE,CAAC,QAAQ;4BACrB,QAAQ,EAAE,EAAE,CAAC,QAAQ;yBACtB,CAAC,CAAC;wBACL,CAAC,CAAC,gBAAgB;iBACrB;aACF;SACF,CAAC;IACJ,CAAC","sourcesContent":["import { MessageCode } from '@venizia/ignis-helpers/core';\nimport { HTTP } from '@venizia/ignis-helpers/common';\nimport type { HTTPResponseError } from 'hono/types';\nimport type { IZodIssueLike } from './common';\n\nexport class ZodErrorHandler {\n private static readonly DEFAULT_VALIDATION_MESSAGE = 'ValidationError';\n\n /** Returns a schema-author-supplied code (`issue.params.code`) when it is a non-empty string. */\n private static extractIssueCode(opts: { issue: IZodIssueLike }) {\n const paramsCode = opts.issue?.params?.code;\n\n if (typeof paramsCode === 'string' && paramsCode.length > 0) {\n return paramsCode;\n }\n\n return undefined;\n }\n\n /** Formats a ZodError into the 422 validation response. */\n static formatZodError(opts: {\n isProduction: boolean;\n requestId: string;\n url: string;\n path: string;\n error: Error | HTTPResponseError;\n }) {\n const { isProduction, requestId, url, path, error } = opts;\n const statusCode = HTTP.ResultCodes.RS_4.UnprocessableEntity;\n\n let validationErrors: unknown;\n try {\n validationErrors = JSON.parse(error.message);\n } catch {\n validationErrors = error;\n }\n\n const issues = Array.isArray(validationErrors) ? (validationErrors as IZodIssueLike[]) : null;\n\n // Prefer the first issue with a custom `params.code`, else its raw Zod code.\n let messageCode: string | undefined;\n let message = ZodErrorHandler.DEFAULT_VALIDATION_MESSAGE;\n\n if (issues && issues.length > 0) {\n const primaryIssue =\n issues.find((issue) => ZodErrorHandler.extractIssueCode({ issue }) !== undefined) ??\n issues[0];\n messageCode = ZodErrorHandler.extractIssueCode({ issue: primaryIssue }) ?? primaryIssue.code;\n message = primaryIssue.message;\n }\n\n // A ZodError we could not parse into issues yields no code of its own; the response still carries one, so no error response is ever missing the field a client branches on.\n const resolvedMessageCode = MessageCode.resolve(messageCode);\n\n return {\n statusCode,\n response: {\n message,\n statusCode,\n // `args` is empty: a Zod issue carries no interpolation values - per-field detail is in `details.cause`.\n normalized: { text: message, code: resolvedMessageCode, args: {} },\n requestId,\n details: {\n url,\n path,\n stack: !isProduction ? error.stack : undefined,\n cause: issues\n ? issues.map((el) => ({\n path: el.path.join('.') || 'root',\n message: el.message,\n code: el.code,\n expected: el.expected,\n received: el.received,\n }))\n : validationErrors,\n },\n },\n };\n }\n}\n"]}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { MiddlewareHandler } from 'hono';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
export declare class EmojiFaviconMiddleware {
|
|
3
|
+
/** Serves an emoji as an SVG favicon on /favicon.ico. */
|
|
4
|
+
static create(opts: {
|
|
5
|
+
icon: string;
|
|
6
|
+
}): MiddlewareHandler;
|
|
7
|
+
}
|
|
6
8
|
//# sourceMappingURL=emoji-favicon.middleware.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emoji-favicon.middleware.d.ts","sourceRoot":"","sources":["../../../../../src/base/middlewares/emoji-favicon/emoji-favicon.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAG9C,yDAAyD;
|
|
1
|
+
{"version":3,"file":"emoji-favicon.middleware.d.ts","sourceRoot":"","sources":["../../../../../src/base/middlewares/emoji-favicon/emoji-favicon.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAG9C,qBAAa,sBAAsB;IACjC,yDAAyD;IACzD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,iBAAiB;CAgBzD"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { createMiddleware } from 'hono/factory';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
2
|
+
export class EmojiFaviconMiddleware {
|
|
3
|
+
/** Serves an emoji as an SVG favicon on /favicon.ico. */
|
|
4
|
+
static create(opts) {
|
|
5
|
+
const { icon } = opts;
|
|
6
|
+
const mw = createMiddleware(async (context, next) => {
|
|
7
|
+
if (context.req.path !== '/favicon.ico') {
|
|
8
|
+
return next();
|
|
9
|
+
}
|
|
10
|
+
context.res.headers.set('content-type', 'image/svg+xml');
|
|
11
|
+
return context.body(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><text y=".9em" x="-0.1em" font-size="90">${icon}</text></svg>`);
|
|
12
|
+
});
|
|
13
|
+
return mw;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
14
16
|
//# sourceMappingURL=emoji-favicon.middleware.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emoji-favicon.middleware.js","sourceRoot":"","sources":["../../../../../src/base/middlewares/emoji-favicon/emoji-favicon.middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,yDAAyD;
|
|
1
|
+
{"version":3,"file":"emoji-favicon.middleware.js","sourceRoot":"","sources":["../../../../../src/base/middlewares/emoji-favicon/emoji-favicon.middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,OAAO,sBAAsB;IACjC,yDAAyD;IACzD,MAAM,CAAC,MAAM,CAAC,IAAsB;QAClC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QAEtB,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;YAClD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACxC,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;YACzD,OAAO,OAAO,CAAC,IAAI,CACjB,0GAA0G,IAAI,eAAe,CAC9H,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,CAAC;IACZ,CAAC;CACF","sourcesContent":["import type { MiddlewareHandler } from 'hono';\nimport { createMiddleware } from 'hono/factory';\n\nexport class EmojiFaviconMiddleware {\n /** Serves an emoji as an SVG favicon on /favicon.ico. */\n static create(opts: { icon: string }): MiddlewareHandler {\n const { icon } = opts;\n\n const mw = createMiddleware(async (context, next) => {\n if (context.req.path !== '/favicon.ico') {\n return next();\n }\n\n context.res.headers.set('content-type', 'image/svg+xml');\n return context.body(\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><text y=\".9em\" x=\"-0.1em\" font-size=\"90\">${icon}</text></svg>`,\n );\n });\n\n return mw;\n }\n}\n"]}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import type { Context, Next } from 'hono';
|
|
2
|
+
export declare class FormBodyMiddleware {
|
|
3
|
+
private static readonly FORM_CONTENT_TYPES;
|
|
4
|
+
/** Whether a route declares a form body, so its validator will parse one. */
|
|
5
|
+
static hasFormBody(opts: {
|
|
6
|
+
content?: Record<string, unknown>;
|
|
7
|
+
}): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Parses a declared form body just ahead of the route's validator, which reads the cached result.
|
|
10
|
+
* Left to the validator, a malformed body is a bare `HTTPException(400)` carrying the parser's own
|
|
11
|
+
* text and no code; read here, it is `core.request.body_malformed`. Mounted as a Hono middleware
|
|
12
|
+
* handler (`FormBodyMiddleware.read`), so it never reads `this`.
|
|
13
|
+
*/
|
|
14
|
+
static read(context: Context, next: Next): Promise<void>;
|
|
15
|
+
}
|
|
12
16
|
//# sourceMappingURL=form-body.middleware.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-body.middleware.d.ts","sourceRoot":"","sources":["../../../../../src/base/middlewares/form-body/form-body.middleware.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"form-body.middleware.d.ts","sourceRoot":"","sources":["../../../../../src/base/middlewares/form-body/form-body.middleware.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE1C,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAGxC;IAEF,6EAA6E;IAC7E,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,OAAO;IAQxE;;;;;OAKG;WACU,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAS/D"}
|
|
@@ -1,24 +1,28 @@
|
|
|
1
1
|
import { HTTP } from '@venizia/ignis-helpers/common';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
* Parses a declared form body just ahead of the route's validator, which reads the cached result.
|
|
14
|
-
* Left to the validator, a malformed body is a bare `HTTPException(400)` carrying the parser's own
|
|
15
|
-
* text and no code; read here, it is `core.request.body_malformed`.
|
|
16
|
-
*/
|
|
17
|
-
export const formBodyReader = async (context, next) => {
|
|
18
|
-
const contentType = context.req.header(HTTP.Headers.CONTENT_TYPE) ?? '';
|
|
19
|
-
if (FORM_CONTENT_TYPES.some((formType) => contentType.includes(formType))) {
|
|
20
|
-
await readFormBody({ req: context.req });
|
|
2
|
+
import { FormBodyUtility } from '@venizia/ignis-helpers/core';
|
|
3
|
+
export class FormBodyMiddleware {
|
|
4
|
+
static { this.FORM_CONTENT_TYPES = [
|
|
5
|
+
HTTP.HeaderValues.MULTIPART_FORM_DATA,
|
|
6
|
+
HTTP.HeaderValues.APPLICATION_FORM_URLENCODED,
|
|
7
|
+
]; }
|
|
8
|
+
/** Whether a route declares a form body, so its validator will parse one. */
|
|
9
|
+
static hasFormBody(opts) {
|
|
10
|
+
const { content } = opts;
|
|
11
|
+
return (content !== undefined &&
|
|
12
|
+
FormBodyMiddleware.FORM_CONTENT_TYPES.some((contentType) => contentType in content));
|
|
21
13
|
}
|
|
22
|
-
|
|
23
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Parses a declared form body just ahead of the route's validator, which reads the cached result.
|
|
16
|
+
* Left to the validator, a malformed body is a bare `HTTPException(400)` carrying the parser's own
|
|
17
|
+
* text and no code; read here, it is `core.request.body_malformed`. Mounted as a Hono middleware
|
|
18
|
+
* handler (`FormBodyMiddleware.read`), so it never reads `this`.
|
|
19
|
+
*/
|
|
20
|
+
static async read(context, next) {
|
|
21
|
+
const contentType = context.req.header(HTTP.Headers.CONTENT_TYPE) ?? '';
|
|
22
|
+
if (FormBodyMiddleware.FORM_CONTENT_TYPES.some((formType) => contentType.includes(formType))) {
|
|
23
|
+
await FormBodyUtility.readFormBody({ req: context.req });
|
|
24
|
+
}
|
|
25
|
+
await next();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
24
28
|
//# sourceMappingURL=form-body.middleware.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-body.middleware.js","sourceRoot":"","sources":["../../../../../src/base/middlewares/form-body/form-body.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"form-body.middleware.js","sourceRoot":"","sources":["../../../../../src/base/middlewares/form-body/form-body.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,MAAM,OAAO,kBAAkB;aACL,uBAAkB,GAAG;QAC3C,IAAI,CAAC,YAAY,CAAC,mBAAmB;QACrC,IAAI,CAAC,YAAY,CAAC,2BAA2B;KAC9C,CAAC;IAEF,6EAA6E;IAC7E,MAAM,CAAC,WAAW,CAAC,IAA2C;QAC5D,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,OAAO,CACL,OAAO,KAAK,SAAS;YACrB,kBAAkB,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,IAAI,OAAO,CAAC,CACpF,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAgB,EAAE,IAAU;QAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAExE,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC7F,MAAM,eAAe,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,IAAI,EAAE,CAAC;IACf,CAAC","sourcesContent":["import { HTTP } from '@venizia/ignis-helpers/common';\nimport { FormBodyUtility } from '@venizia/ignis-helpers/core';\nimport type { Context, Next } from 'hono';\n\nexport class FormBodyMiddleware {\n private static readonly FORM_CONTENT_TYPES = [\n HTTP.HeaderValues.MULTIPART_FORM_DATA,\n HTTP.HeaderValues.APPLICATION_FORM_URLENCODED,\n ];\n\n /** Whether a route declares a form body, so its validator will parse one. */\n static hasFormBody(opts: { content?: Record<string, unknown> }): boolean {\n const { content } = opts;\n return (\n content !== undefined &&\n FormBodyMiddleware.FORM_CONTENT_TYPES.some((contentType) => contentType in content)\n );\n }\n\n /**\n * Parses a declared form body just ahead of the route's validator, which reads the cached result.\n * Left to the validator, a malformed body is a bare `HTTPException(400)` carrying the parser's own\n * text and no code; read here, it is `core.request.body_malformed`. Mounted as a Hono middleware\n * handler (`FormBodyMiddleware.read`), so it never reads `this`.\n */\n static async read(context: Context, next: Next): Promise<void> {\n const contentType = context.req.header(HTTP.Headers.CONTENT_TYPE) ?? '';\n\n if (FormBodyMiddleware.FORM_CONTENT_TYPES.some((formType) => contentType.includes(formType))) {\n await FormBodyUtility.readFormBody({ req: context.req });\n }\n\n await next();\n }\n}\n"]}
|
|
@@ -17,69 +17,21 @@ export declare const ErrorSchema: z.ZodObject<{
|
|
|
17
17
|
details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
18
18
|
}, z.core.$strip>;
|
|
19
19
|
export type TErrorResponse = z.infer<typeof ErrorSchema>;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
}, z.core.$strip
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
schema: T;
|
|
36
|
-
};
|
|
37
|
-
};
|
|
38
|
-
required: boolean | undefined;
|
|
39
|
-
};
|
|
40
|
-
/** The JSON error body of a route, under `4XX` and `5XX` - the range keys OpenAPI accepts. */
|
|
41
|
-
export declare const errorResponses: () => {
|
|
42
|
-
'4XX': {
|
|
43
|
-
description: string;
|
|
44
|
-
content: {
|
|
45
|
-
'application/json': {
|
|
46
|
-
schema: z.ZodObject<{
|
|
47
|
-
statusCode: z.ZodOptional<z.ZodNumber>;
|
|
48
|
-
message: z.ZodString;
|
|
49
|
-
normalized: z.ZodOptional<z.ZodObject<{
|
|
50
|
-
text: z.ZodString;
|
|
51
|
-
code: z.ZodString;
|
|
52
|
-
args: z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
53
|
-
}, z.core.$strip>>;
|
|
54
|
-
extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
55
|
-
requestId: z.ZodOptional<z.ZodString>;
|
|
56
|
-
details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
57
|
-
}, z.core.$strip>;
|
|
58
|
-
};
|
|
59
|
-
};
|
|
60
|
-
required: boolean | undefined;
|
|
61
|
-
};
|
|
62
|
-
'5XX': {
|
|
63
|
-
description: string;
|
|
64
|
-
content: {
|
|
65
|
-
'application/json': {
|
|
66
|
-
schema: z.ZodObject<{
|
|
67
|
-
statusCode: z.ZodOptional<z.ZodNumber>;
|
|
68
|
-
message: z.ZodString;
|
|
69
|
-
normalized: z.ZodOptional<z.ZodObject<{
|
|
70
|
-
text: z.ZodString;
|
|
71
|
-
code: z.ZodString;
|
|
72
|
-
args: z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
73
|
-
}, z.core.$strip>>;
|
|
74
|
-
extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
75
|
-
requestId: z.ZodOptional<z.ZodString>;
|
|
76
|
-
details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
77
|
-
}, z.core.$strip>;
|
|
78
|
-
};
|
|
79
|
-
};
|
|
80
|
-
required: boolean | undefined;
|
|
81
|
-
};
|
|
82
|
-
};
|
|
20
|
+
/** OpenAPI schema builders for the parts of a route that every controller repeats. */
|
|
21
|
+
export declare class OpenApiSchemas {
|
|
22
|
+
static idParams(opts?: {
|
|
23
|
+
idType: TIdSchemaType;
|
|
24
|
+
}): z.ZodObject<{
|
|
25
|
+
id: z.ZodNumber;
|
|
26
|
+
}, z.core.$strip> | z.ZodObject<{
|
|
27
|
+
id: z.ZodString;
|
|
28
|
+
}, z.core.$strip>;
|
|
29
|
+
static requiredString(opts?: {
|
|
30
|
+
min?: number;
|
|
31
|
+
max?: number;
|
|
32
|
+
fixed?: number;
|
|
33
|
+
}): z.ZodString;
|
|
34
|
+
}
|
|
83
35
|
/** OpenAPI Header Object format */
|
|
84
36
|
type THeaderObject = {
|
|
85
37
|
description?: string;
|
|
@@ -96,65 +48,192 @@ type TJsonResponseOpts<T extends z.ZodType, H extends TResponseHeaders | undefin
|
|
|
96
48
|
required?: boolean;
|
|
97
49
|
headers?: H;
|
|
98
50
|
};
|
|
99
|
-
|
|
100
|
-
|
|
51
|
+
/** OpenAPI response builders: the JSON and HTML bodies of a route, and the error bodies every route shares. */
|
|
52
|
+
export declare class OpenApiResponses {
|
|
53
|
+
/** Creates HTML content configuration for OpenAPI documentation. */
|
|
54
|
+
static htmlContent(opts: {
|
|
55
|
+
description: string;
|
|
56
|
+
required?: boolean;
|
|
57
|
+
}): {
|
|
101
58
|
description: string;
|
|
102
59
|
content: {
|
|
103
|
-
'
|
|
104
|
-
schema: z.
|
|
105
|
-
statusCode: z.ZodOptional<z.ZodNumber>;
|
|
106
|
-
message: z.ZodString;
|
|
107
|
-
normalized: z.ZodOptional<z.ZodObject<{
|
|
108
|
-
text: z.ZodString;
|
|
109
|
-
code: z.ZodString;
|
|
110
|
-
args: z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
111
|
-
}, z.core.$strip>>;
|
|
112
|
-
extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
113
|
-
requestId: z.ZodOptional<z.ZodString>;
|
|
114
|
-
details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
115
|
-
}, z.core.$strip>;
|
|
60
|
+
'text/html': {
|
|
61
|
+
schema: z.ZodString;
|
|
116
62
|
};
|
|
117
63
|
};
|
|
118
|
-
required: boolean
|
|
64
|
+
required: boolean;
|
|
119
65
|
};
|
|
120
|
-
|
|
66
|
+
/** Creates HTML response configuration for OpenAPI documentation. */
|
|
67
|
+
static htmlResponse(opts: {
|
|
121
68
|
description: string;
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
69
|
+
required?: boolean;
|
|
70
|
+
}): {
|
|
71
|
+
'4XX': {
|
|
72
|
+
description: string;
|
|
73
|
+
content: {
|
|
74
|
+
'application/json': {
|
|
75
|
+
schema: z.ZodObject<{
|
|
76
|
+
statusCode: z.ZodOptional<z.ZodNumber>;
|
|
77
|
+
message: z.ZodString;
|
|
78
|
+
normalized: z.ZodOptional<z.ZodObject<{
|
|
79
|
+
text: z.ZodString;
|
|
80
|
+
code: z.ZodString;
|
|
81
|
+
args: z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
82
|
+
}, z.core.$strip>>;
|
|
83
|
+
extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
84
|
+
requestId: z.ZodOptional<z.ZodString>;
|
|
85
|
+
details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
86
|
+
}, z.core.$strip>;
|
|
87
|
+
};
|
|
136
88
|
};
|
|
89
|
+
required: boolean | undefined;
|
|
90
|
+
};
|
|
91
|
+
'5XX': {
|
|
92
|
+
description: string;
|
|
93
|
+
content: {
|
|
94
|
+
'application/json': {
|
|
95
|
+
schema: z.ZodObject<{
|
|
96
|
+
statusCode: z.ZodOptional<z.ZodNumber>;
|
|
97
|
+
message: z.ZodString;
|
|
98
|
+
normalized: z.ZodOptional<z.ZodObject<{
|
|
99
|
+
text: z.ZodString;
|
|
100
|
+
code: z.ZodString;
|
|
101
|
+
args: z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
102
|
+
}, z.core.$strip>>;
|
|
103
|
+
extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
104
|
+
requestId: z.ZodOptional<z.ZodString>;
|
|
105
|
+
details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
106
|
+
}, z.core.$strip>;
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
required: boolean | undefined;
|
|
110
|
+
};
|
|
111
|
+
200: {
|
|
112
|
+
description: string;
|
|
113
|
+
content: {
|
|
114
|
+
'text/html': {
|
|
115
|
+
schema: z.ZodString;
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
required: boolean;
|
|
137
119
|
};
|
|
138
|
-
required: boolean | undefined;
|
|
139
120
|
};
|
|
140
|
-
|
|
121
|
+
static jsonContent<T extends z.ZodType>(opts: {
|
|
122
|
+
schema: T;
|
|
123
|
+
description: string;
|
|
124
|
+
required?: boolean;
|
|
125
|
+
}): {
|
|
141
126
|
description: string;
|
|
142
127
|
content: {
|
|
143
128
|
'application/json': {
|
|
144
|
-
schema:
|
|
129
|
+
schema: T;
|
|
145
130
|
};
|
|
146
131
|
};
|
|
147
132
|
required: boolean | undefined;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
133
|
+
};
|
|
134
|
+
/** The JSON error body of a route, under `4XX` and `5XX` - the range keys OpenAPI accepts. */
|
|
135
|
+
static errorResponses(): {
|
|
136
|
+
'4XX': {
|
|
137
|
+
description: string;
|
|
138
|
+
content: {
|
|
139
|
+
'application/json': {
|
|
140
|
+
schema: z.ZodObject<{
|
|
141
|
+
statusCode: z.ZodOptional<z.ZodNumber>;
|
|
142
|
+
message: z.ZodString;
|
|
143
|
+
normalized: z.ZodOptional<z.ZodObject<{
|
|
144
|
+
text: z.ZodString;
|
|
145
|
+
code: z.ZodString;
|
|
146
|
+
args: z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
147
|
+
}, z.core.$strip>>;
|
|
148
|
+
extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
149
|
+
requestId: z.ZodOptional<z.ZodString>;
|
|
150
|
+
details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
151
|
+
}, z.core.$strip>;
|
|
152
|
+
};
|
|
154
153
|
};
|
|
154
|
+
required: boolean | undefined;
|
|
155
|
+
};
|
|
156
|
+
'5XX': {
|
|
157
|
+
description: string;
|
|
158
|
+
content: {
|
|
159
|
+
'application/json': {
|
|
160
|
+
schema: z.ZodObject<{
|
|
161
|
+
statusCode: z.ZodOptional<z.ZodNumber>;
|
|
162
|
+
message: z.ZodString;
|
|
163
|
+
normalized: z.ZodOptional<z.ZodObject<{
|
|
164
|
+
text: z.ZodString;
|
|
165
|
+
code: z.ZodString;
|
|
166
|
+
args: z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
167
|
+
}, z.core.$strip>>;
|
|
168
|
+
extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
169
|
+
requestId: z.ZodOptional<z.ZodString>;
|
|
170
|
+
details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
171
|
+
}, z.core.$strip>;
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
required: boolean | undefined;
|
|
155
175
|
};
|
|
156
|
-
required: boolean | undefined;
|
|
157
176
|
};
|
|
158
|
-
|
|
177
|
+
static jsonResponse<ContentSchema extends z.ZodType, HeaderSchema extends TResponseHeaders | undefined = undefined>(opts: TJsonResponseOpts<ContentSchema, HeaderSchema>): {
|
|
178
|
+
'4XX': {
|
|
179
|
+
description: string;
|
|
180
|
+
content: {
|
|
181
|
+
'application/json': {
|
|
182
|
+
schema: z.ZodObject<{
|
|
183
|
+
statusCode: z.ZodOptional<z.ZodNumber>;
|
|
184
|
+
message: z.ZodString;
|
|
185
|
+
normalized: z.ZodOptional<z.ZodObject<{
|
|
186
|
+
text: z.ZodString;
|
|
187
|
+
code: z.ZodString;
|
|
188
|
+
args: z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
189
|
+
}, z.core.$strip>>;
|
|
190
|
+
extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
191
|
+
requestId: z.ZodOptional<z.ZodString>;
|
|
192
|
+
details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
193
|
+
}, z.core.$strip>;
|
|
194
|
+
};
|
|
195
|
+
};
|
|
196
|
+
required: boolean | undefined;
|
|
197
|
+
};
|
|
198
|
+
'5XX': {
|
|
199
|
+
description: string;
|
|
200
|
+
content: {
|
|
201
|
+
'application/json': {
|
|
202
|
+
schema: z.ZodObject<{
|
|
203
|
+
statusCode: z.ZodOptional<z.ZodNumber>;
|
|
204
|
+
message: z.ZodString;
|
|
205
|
+
normalized: z.ZodOptional<z.ZodObject<{
|
|
206
|
+
text: z.ZodString;
|
|
207
|
+
code: z.ZodString;
|
|
208
|
+
args: z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
209
|
+
}, z.core.$strip>>;
|
|
210
|
+
extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
211
|
+
requestId: z.ZodOptional<z.ZodString>;
|
|
212
|
+
details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
213
|
+
}, z.core.$strip>;
|
|
214
|
+
};
|
|
215
|
+
};
|
|
216
|
+
required: boolean | undefined;
|
|
217
|
+
};
|
|
218
|
+
200: {
|
|
219
|
+
description: string;
|
|
220
|
+
content: {
|
|
221
|
+
'application/json': {
|
|
222
|
+
schema: ContentSchema;
|
|
223
|
+
};
|
|
224
|
+
};
|
|
225
|
+
required: boolean | undefined;
|
|
226
|
+
} | {
|
|
227
|
+
headers: NonNullable<HeaderSchema>;
|
|
228
|
+
description: string;
|
|
229
|
+
content: {
|
|
230
|
+
'application/json': {
|
|
231
|
+
schema: ContentSchema;
|
|
232
|
+
};
|
|
233
|
+
};
|
|
234
|
+
required: boolean | undefined;
|
|
235
|
+
};
|
|
236
|
+
};
|
|
237
|
+
}
|
|
159
238
|
export {};
|
|
160
239
|
//# sourceMappingURL=schemas.d.ts.map
|