@beignet/core 0.0.3 → 0.0.5
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/CHANGELOG.md +159 -0
- package/README.md +792 -50
- package/dist/application/index.d.ts +28 -2
- package/dist/application/index.d.ts.map +1 -1
- package/dist/application/index.js +140 -12
- package/dist/application/index.js.map +1 -1
- package/dist/client/client.d.ts +2 -2
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +136 -48
- package/dist/client/client.js.map +1 -1
- package/dist/client/error-messages.d.ts +14 -0
- package/dist/client/error-messages.d.ts.map +1 -0
- package/dist/client/error-messages.js +23 -0
- package/dist/client/error-messages.js.map +1 -0
- package/dist/client/index.d.ts +8 -4
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +6 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/types.d.ts +35 -5
- package/dist/client/types.d.ts.map +1 -1
- package/dist/client-only.d.ts +8 -0
- package/dist/client-only.d.ts.map +1 -0
- package/dist/client-only.js +8 -0
- package/dist/client-only.js.map +1 -0
- package/dist/config/index.d.ts +5 -5
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -2
- package/dist/config/index.js.map +1 -1
- package/dist/contracts/catalog-errors.d.ts +27 -0
- package/dist/contracts/catalog-errors.d.ts.map +1 -0
- package/dist/contracts/catalog-errors.js +69 -0
- package/dist/contracts/catalog-errors.js.map +1 -0
- package/dist/contracts/contract-builder.d.ts +15 -12
- package/dist/contracts/contract-builder.d.ts.map +1 -1
- package/dist/contracts/contract-builder.js +15 -41
- package/dist/contracts/contract-builder.js.map +1 -1
- package/dist/contracts/contract-group.d.ts +11 -8
- package/dist/contracts/contract-group.d.ts.map +1 -1
- package/dist/contracts/contract-group.js +13 -40
- package/dist/contracts/contract-group.js.map +1 -1
- package/dist/contracts/contract-like.d.ts +1 -1
- package/dist/contracts/contract-like.d.ts.map +1 -1
- package/dist/contracts/index.d.ts +13 -9
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +9 -5
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/openapi-meta.d.ts +48 -0
- package/dist/contracts/openapi-meta.d.ts.map +1 -1
- package/dist/contracts/openapi-meta.js +3 -0
- package/dist/contracts/openapi-meta.js.map +1 -1
- package/dist/contracts/path-template.d.ts +1 -1
- package/dist/contracts/path-template.js +2 -2
- package/dist/contracts/path-template.js.map +1 -1
- package/dist/contracts/schema-shape.d.ts +37 -0
- package/dist/contracts/schema-shape.d.ts.map +1 -0
- package/dist/contracts/schema-shape.js +61 -0
- package/dist/contracts/schema-shape.js.map +1 -0
- package/dist/contracts/success-status.d.ts +32 -0
- package/dist/contracts/success-status.d.ts.map +1 -0
- package/dist/contracts/success-status.js +18 -0
- package/dist/contracts/success-status.js.map +1 -0
- package/dist/contracts/types.d.ts +25 -5
- package/dist/contracts/types.d.ts.map +1 -1
- package/dist/contracts/types.js.map +1 -1
- package/dist/contracts/utils.d.ts +1 -1
- package/dist/contracts/utils.d.ts.map +1 -1
- package/dist/contracts/utils.js +1 -1
- package/dist/contracts/utils.js.map +1 -1
- package/dist/domain/events.d.ts +1 -1
- package/dist/domain/events.d.ts.map +1 -1
- package/dist/domain/events.js +1 -1
- package/dist/domain/events.js.map +1 -1
- package/dist/domain/index.d.ts +3 -3
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js +3 -3
- package/dist/domain/index.js.map +1 -1
- package/dist/errors/catalog.d.ts +9 -1
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/catalog.js +7 -1
- package/dist/errors/catalog.js.map +1 -1
- package/dist/errors/http.d.ts +10 -0
- package/dist/errors/http.d.ts.map +1 -1
- package/dist/errors/http.js +11 -1
- package/dist/errors/http.js.map +1 -1
- package/dist/errors/index.d.ts +4 -4
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +4 -4
- package/dist/errors/index.js.map +1 -1
- package/dist/errors/response.d.ts +4 -1
- package/dist/errors/response.d.ts.map +1 -1
- package/dist/errors/response.js.map +1 -1
- package/dist/events/index.d.ts +10 -12
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +10 -10
- package/dist/events/index.js.map +1 -1
- package/dist/idempotency/index.d.ts +5 -3
- package/dist/idempotency/index.d.ts.map +1 -1
- package/dist/idempotency/index.js.map +1 -1
- package/dist/jobs/index.d.ts +12 -14
- package/dist/jobs/index.d.ts.map +1 -1
- package/dist/jobs/index.js +13 -13
- package/dist/jobs/index.js.map +1 -1
- package/dist/notifications/index.d.ts +14 -16
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +14 -14
- package/dist/notifications/index.js.map +1 -1
- package/dist/openapi/index.d.ts +8 -3
- package/dist/openapi/index.d.ts.map +1 -1
- package/dist/openapi/index.js +41 -29
- package/dist/openapi/index.js.map +1 -1
- package/dist/openapi/schema-introspector.d.ts +37 -0
- package/dist/openapi/schema-introspector.d.ts.map +1 -1
- package/dist/openapi/schema-introspector.js +23 -17
- package/dist/openapi/schema-introspector.js.map +1 -1
- package/dist/outbox/index.d.ts +15 -6
- package/dist/outbox/index.d.ts.map +1 -1
- package/dist/outbox/index.js +60 -16
- package/dist/outbox/index.js.map +1 -1
- package/dist/ports/audit.d.ts +56 -10
- package/dist/ports/audit.d.ts.map +1 -1
- package/dist/ports/audit.js +71 -3
- package/dist/ports/audit.js.map +1 -1
- package/dist/ports/auth.d.ts +92 -0
- package/dist/ports/auth.d.ts.map +1 -1
- package/dist/ports/auth.js +92 -0
- package/dist/ports/auth.js.map +1 -1
- package/dist/ports/events.d.ts +2 -2
- package/dist/ports/events.d.ts.map +1 -1
- package/dist/ports/index.d.ts +62 -33
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js +28 -34
- package/dist/ports/index.js.map +1 -1
- package/dist/ports/policy.d.ts +32 -3
- package/dist/ports/policy.d.ts.map +1 -1
- package/dist/ports/policy.js +13 -2
- package/dist/ports/policy.js.map +1 -1
- package/dist/ports/testing.d.ts +1030 -2
- package/dist/ports/testing.d.ts.map +1 -1
- package/dist/ports/testing.js +1031 -1
- package/dist/ports/testing.js.map +1 -1
- package/dist/ports/unbound.d.ts +21 -0
- package/dist/ports/unbound.d.ts.map +1 -0
- package/dist/ports/unbound.js +57 -0
- package/dist/ports/unbound.js.map +1 -0
- package/dist/ports/unit-of-work.d.ts +1 -1
- package/dist/ports/unit-of-work.d.ts.map +1 -1
- package/dist/ports/unit-of-work.js +1 -1
- package/dist/ports/unit-of-work.js.map +1 -1
- package/dist/providers/index.d.ts +3 -2
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +3 -2
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/instrumentation.d.ts +45 -4
- package/dist/providers/instrumentation.d.ts.map +1 -1
- package/dist/providers/instrumentation.js +25 -6
- package/dist/providers/instrumentation.js.map +1 -1
- package/dist/providers/metadata.d.ts +39 -0
- package/dist/providers/metadata.d.ts.map +1 -0
- package/dist/providers/metadata.js +169 -0
- package/dist/providers/metadata.js.map +1 -0
- package/dist/providers/provider.d.ts +114 -9
- package/dist/providers/provider.d.ts.map +1 -1
- package/dist/providers/provider.js +3 -20
- package/dist/providers/provider.js.map +1 -1
- package/dist/schedules/index.d.ts +94 -13
- package/dist/schedules/index.d.ts.map +1 -1
- package/dist/schedules/index.js +66 -12
- package/dist/schedules/index.js.map +1 -1
- package/dist/server/audit-context.d.ts +29 -0
- package/dist/server/audit-context.d.ts.map +1 -0
- package/dist/server/audit-context.js +44 -0
- package/dist/server/audit-context.js.map +1 -0
- package/dist/server/context.d.ts +141 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +39 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/contract-like.d.ts +1 -1
- package/dist/server/contract-like.d.ts.map +1 -1
- package/dist/server/contract-like.js +1 -1
- package/dist/server/contract-like.js.map +1 -1
- package/dist/server/health.d.ts +2 -2
- package/dist/server/health.d.ts.map +1 -1
- package/dist/server/hooks/auth.d.ts +49 -10
- package/dist/server/hooks/auth.d.ts.map +1 -1
- package/dist/server/hooks/auth.js +77 -37
- package/dist/server/hooks/auth.js.map +1 -1
- package/dist/server/hooks/cors.d.ts +1 -1
- package/dist/server/hooks/cors.d.ts.map +1 -1
- package/dist/server/hooks/errors.d.ts +2 -2
- package/dist/server/hooks/errors.d.ts.map +1 -1
- package/dist/server/hooks/errors.js +2 -2
- package/dist/server/hooks/errors.js.map +1 -1
- package/dist/server/hooks/idempotency.d.ts +78 -0
- package/dist/server/hooks/idempotency.d.ts.map +1 -0
- package/dist/server/hooks/idempotency.js +154 -0
- package/dist/server/hooks/idempotency.js.map +1 -0
- package/dist/server/hooks/index.d.ts +8 -7
- package/dist/server/hooks/index.d.ts.map +1 -1
- package/dist/server/hooks/index.js +6 -5
- package/dist/server/hooks/index.js.map +1 -1
- package/dist/server/hooks/logging.d.ts +2 -2
- package/dist/server/hooks/logging.d.ts.map +1 -1
- package/dist/server/hooks/logging.js +1 -1
- package/dist/server/hooks/logging.js.map +1 -1
- package/dist/server/hooks/rate-limit.d.ts +25 -7
- package/dist/server/hooks/rate-limit.d.ts.map +1 -1
- package/dist/server/hooks/rate-limit.js +47 -12
- package/dist/server/hooks/rate-limit.js.map +1 -1
- package/dist/server/hooks.d.ts +1 -1
- package/dist/server/hooks.d.ts.map +1 -1
- package/dist/server/hooks.js +1 -1
- package/dist/server/hooks.js.map +1 -1
- package/dist/server/http.d.ts +61 -35
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +1 -20
- package/dist/server/http.js.map +1 -1
- package/dist/server/index.d.ts +36 -12
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +24 -8
- package/dist/server/index.js.map +1 -1
- package/dist/server/instrumentation.d.ts +108 -0
- package/dist/server/instrumentation.d.ts.map +1 -0
- package/dist/server/instrumentation.js +297 -0
- package/dist/server/instrumentation.js.map +1 -0
- package/dist/server/openapi.d.ts +3 -3
- package/dist/server/openapi.d.ts.map +1 -1
- package/dist/server/openapi.js +1 -1
- package/dist/server/openapi.js.map +1 -1
- package/dist/server/providers/index.d.ts +3 -3
- package/dist/server/providers/index.d.ts.map +1 -1
- package/dist/server/providers/index.js +3 -3
- package/dist/server/providers/index.js.map +1 -1
- package/dist/server/providers/loadProviderConfig.d.ts +2 -2
- package/dist/server/providers/loadProviderConfig.d.ts.map +1 -1
- package/dist/server/providers/loadProviderConfig.js +2 -2
- package/dist/server/providers/loadProviderConfig.js.map +1 -1
- package/dist/server/request-context.d.ts +67 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +79 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/server-context.d.ts +38 -0
- package/dist/server/server-context.d.ts.map +1 -0
- package/dist/server/server-context.js +38 -0
- package/dist/server/server-context.js.map +1 -0
- package/dist/server/server.d.ts +105 -33
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +434 -118
- package/dist/server/server.js.map +1 -1
- package/dist/server/types.d.ts +2 -2
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +2 -2
- package/dist/server/types.js.map +1 -1
- package/dist/server/use-case-route.d.ts +263 -0
- package/dist/server/use-case-route.d.ts.map +1 -0
- package/dist/server/use-case-route.js +77 -0
- package/dist/server/use-case-route.js.map +1 -0
- package/dist/server-only.d.ts +8 -0
- package/dist/server-only.d.ts.map +1 -0
- package/dist/server-only.js +8 -0
- package/dist/server-only.js.map +1 -0
- package/dist/tasks/index.d.ts +139 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +98 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/testing/index.d.ts +607 -5
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +426 -4
- package/dist/testing/index.js.map +1 -1
- package/dist/tracing/index.d.ts +89 -0
- package/dist/tracing/index.d.ts.map +1 -0
- package/dist/tracing/index.js +101 -0
- package/dist/tracing/index.js.map +1 -0
- package/dist/uploads/client.d.ts +1 -1
- package/dist/uploads/client.d.ts.map +1 -1
- package/dist/uploads/index.d.ts +2 -2
- package/dist/uploads/index.d.ts.map +1 -1
- package/dist/uploads/index.js +1 -1
- package/dist/uploads/index.js.map +1 -1
- package/package.json +24 -2
- package/src/application/index.ts +193 -10
- package/src/client/client.ts +148 -150
- package/src/client/error-messages.ts +35 -0
- package/src/client/index.ts +12 -4
- package/src/client/types.ts +44 -5
- package/src/client-only.ts +7 -0
- package/src/config/index.ts +6 -6
- package/src/contracts/catalog-errors.ts +115 -0
- package/src/contracts/contract-builder.ts +39 -76
- package/src/contracts/contract-group.ts +33 -68
- package/src/contracts/contract-like.ts +1 -1
- package/src/contracts/index.ts +24 -11
- package/src/contracts/openapi-meta.ts +55 -0
- package/src/contracts/path-template.ts +2 -2
- package/src/contracts/schema-shape.ts +75 -0
- package/src/contracts/success-status.ts +68 -0
- package/src/contracts/types.ts +32 -5
- package/src/contracts/utils.ts +5 -2
- package/src/domain/events.ts +6 -2
- package/src/domain/index.ts +3 -3
- package/src/errors/catalog.ts +9 -1
- package/src/errors/http.ts +11 -1
- package/src/errors/index.ts +4 -4
- package/src/errors/response.ts +4 -1
- package/src/events/index.ts +12 -26
- package/src/idempotency/index.ts +5 -3
- package/src/jobs/index.ts +14 -24
- package/src/notifications/index.ts +17 -27
- package/src/openapi/index.ts +73 -38
- package/src/openapi/schema-introspector.ts +68 -17
- package/src/outbox/index.ts +84 -19
- package/src/ports/audit.ts +120 -11
- package/src/ports/auth.ts +132 -0
- package/src/ports/events.ts +2 -2
- package/src/ports/index.ts +104 -35
- package/src/ports/policy.ts +50 -3
- package/src/ports/testing.ts +2220 -33
- package/src/ports/unbound.ts +64 -0
- package/src/ports/unit-of-work.ts +6 -2
- package/src/providers/index.ts +16 -3
- package/src/providers/instrumentation.ts +86 -7
- package/src/providers/metadata.ts +234 -0
- package/src/providers/provider.ts +168 -9
- package/src/schedules/index.ts +173 -23
- package/src/server/audit-context.ts +45 -0
- package/src/server/context.ts +224 -0
- package/src/server/contract-like.ts +1 -1
- package/src/server/health.ts +2 -2
- package/src/server/hooks/auth.ts +141 -51
- package/src/server/hooks/cors.ts +1 -1
- package/src/server/hooks/errors.ts +7 -4
- package/src/server/hooks/idempotency.ts +263 -0
- package/src/server/hooks/index.ts +14 -7
- package/src/server/hooks/logging.ts +3 -3
- package/src/server/hooks/rate-limit.ts +85 -17
- package/src/server/hooks.ts +1 -1
- package/src/server/http.ts +78 -51
- package/src/server/index.ts +62 -12
- package/src/server/instrumentation.ts +470 -0
- package/src/server/openapi.ts +4 -4
- package/src/server/providers/index.ts +6 -3
- package/src/server/providers/loadProviderConfig.ts +4 -4
- package/src/server/request-context.ts +116 -0
- package/src/server/server-context.ts +44 -0
- package/src/server/server.ts +886 -238
- package/src/server/types.ts +2 -2
- package/src/server/use-case-route.ts +430 -0
- package/src/server-only.ts +7 -0
- package/src/tasks/index.ts +275 -0
- package/src/testing/index.ts +1142 -6
- package/src/tracing/index.ts +176 -0
- package/src/uploads/client.ts +1 -1
- package/src/uploads/index.ts +7 -3
- package/dist/ports/mailer.d.ts +0 -6
- package/dist/ports/mailer.d.ts.map +0 -1
- package/dist/ports/mailer.js +0 -2
- package/dist/ports/mailer.js.map +0 -1
- package/dist/ports/schedules.d.ts +0 -9
- package/dist/ports/schedules.d.ts.map +0 -1
- package/dist/ports/schedules.js +0 -2
- package/dist/ports/schedules.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { generateContractName } from "./utils";
|
|
1
|
+
import { assertErrorsAvoidCustomResponseStatuses, assertResponsesAvoidCatalogErrorStatuses, mergeCatalogErrors, responsesFromErrors, } from "./catalog-errors.js";
|
|
2
|
+
import { ContractBuilder } from "./contract-builder.js";
|
|
3
|
+
import { parsePathTemplate } from "./path-template.js";
|
|
4
|
+
import { generateContractName } from "./utils.js";
|
|
5
5
|
function joinPathPrefix(prefix, path) {
|
|
6
6
|
const segments = [
|
|
7
7
|
...prefix.split("/").filter(Boolean),
|
|
@@ -9,36 +9,6 @@ function joinPathPrefix(prefix, path) {
|
|
|
9
9
|
];
|
|
10
10
|
return `/${segments.join("/")}`;
|
|
11
11
|
}
|
|
12
|
-
function responsesFromErrors(errors) {
|
|
13
|
-
const responses = {};
|
|
14
|
-
for (const error of Object.values(errors)) {
|
|
15
|
-
responses[error.status] = STANDARD_ERROR_RESPONSE_SCHEMA;
|
|
16
|
-
}
|
|
17
|
-
return responses;
|
|
18
|
-
}
|
|
19
|
-
function assertNoResponseStatusConflicts(current, next) {
|
|
20
|
-
const currentStatuses = new Set(Object.keys(current));
|
|
21
|
-
const conflicts = Object.keys(next).filter((status) => currentStatuses.has(status));
|
|
22
|
-
if (conflicts.length) {
|
|
23
|
-
throw new Error(`.errors() cannot declare status ${conflicts.join(", ")} because a response schema for that status already exists. Use .responses() without .errors() when you need a custom error response body.`);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
function assertNoCatalogErrorStatusConflicts(metadata, next) {
|
|
27
|
-
const errors = metadata.errors;
|
|
28
|
-
if (typeof errors !== "object" || errors === null)
|
|
29
|
-
return;
|
|
30
|
-
const errorStatuses = new Set(Object.values(errors)
|
|
31
|
-
.map((error) => typeof error === "object" &&
|
|
32
|
-
error !== null &&
|
|
33
|
-
typeof error.status === "number"
|
|
34
|
-
? String(error.status)
|
|
35
|
-
: undefined)
|
|
36
|
-
.filter((status) => status !== undefined));
|
|
37
|
-
const conflicts = Object.keys(next).filter((status) => errorStatuses.has(status));
|
|
38
|
-
if (conflicts.length) {
|
|
39
|
-
throw new Error(`.responses() cannot declare status ${conflicts.join(", ")} because that status is already declared by .errors(). Use .responses() without .errors() when you need a custom error response body.`);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
12
|
/**
|
|
43
13
|
* Feature-scoped factory for related HTTP contracts.
|
|
44
14
|
*
|
|
@@ -111,7 +81,7 @@ export class ContractGroup {
|
|
|
111
81
|
* need to be declared here.
|
|
112
82
|
*/
|
|
113
83
|
responses(responseSchemas) {
|
|
114
|
-
|
|
84
|
+
assertResponsesAvoidCatalogErrorStatuses(this._meta, responseSchemas);
|
|
115
85
|
return new ContractGroup({
|
|
116
86
|
namespace: this._namespace,
|
|
117
87
|
meta: this._meta,
|
|
@@ -124,16 +94,19 @@ export class ContractGroup {
|
|
|
124
94
|
* Declare shared route-owned application errors for contracts in this group.
|
|
125
95
|
*
|
|
126
96
|
* Catalog errors use Beignet's standard error envelope and remain separate
|
|
127
|
-
* from framework-owned errors.
|
|
97
|
+
* from framework-owned errors. Declarations merge with previously declared
|
|
98
|
+
* group errors, and contracts created from the group merge these shared
|
|
99
|
+
* errors with route-level `.errors()` declarations; later declarations win
|
|
100
|
+
* when the same catalog key is declared twice.
|
|
128
101
|
*/
|
|
129
102
|
errors(errorDefs) {
|
|
130
103
|
const errorResponses = responsesFromErrors(errorDefs);
|
|
131
|
-
|
|
104
|
+
assertErrorsAvoidCustomResponseStatuses(this._meta, this._responses, errorResponses);
|
|
132
105
|
return new ContractGroup({
|
|
133
106
|
namespace: this._namespace,
|
|
134
107
|
meta: {
|
|
135
108
|
...this._meta,
|
|
136
|
-
errors: errorDefs,
|
|
109
|
+
errors: mergeCatalogErrors(this._meta, errorDefs),
|
|
137
110
|
},
|
|
138
111
|
responses: { ...this._responses, ...errorResponses },
|
|
139
112
|
headers: this._headers,
|
|
@@ -237,7 +210,7 @@ export class ContractGroup {
|
|
|
237
210
|
*
|
|
238
211
|
* @example
|
|
239
212
|
* ```ts
|
|
240
|
-
* const todos =
|
|
213
|
+
* const todos = defineContractGroup()
|
|
241
214
|
* .namespace("todos")
|
|
242
215
|
* .prefix("/api/todos")
|
|
243
216
|
* .meta({ auth: "required" })
|
|
@@ -250,7 +223,7 @@ export class ContractGroup {
|
|
|
250
223
|
*
|
|
251
224
|
* @returns An empty immutable contract group.
|
|
252
225
|
*/
|
|
253
|
-
export function
|
|
226
|
+
export function defineContractGroup() {
|
|
254
227
|
return new ContractGroup();
|
|
255
228
|
}
|
|
256
229
|
//# sourceMappingURL=contract-group.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-group.js","sourceRoot":"","sources":["../../src/contracts/contract-group.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"contract-group.js","sourceRoot":"","sources":["../../src/contracts/contract-group.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-like.d.ts","sourceRoot":"","sources":["../../src/contracts/contract-like.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"contract-like.d.ts","sourceRoot":"","sources":["../../src/contracts/contract-like.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG;IAAE,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC1D,CAAC,SAAS,kBAAkB,GAC1B,CAAC,GACD,KAAK,GACP,CAAC,SAAS,kBAAkB,GAC1B,CAAC,GACD,KAAK,CAAC;AAEZ;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,YAAY,EACpD,CAAC,EAAE,CAAC,GACH,eAAe,CAAC,CAAC,CAAC,CAEpB"}
|
|
@@ -10,34 +10,38 @@ export type { StandardSchemaV1 } from "@standard-schema/spec";
|
|
|
10
10
|
/**
|
|
11
11
|
* Idempotency metadata types for contracts.
|
|
12
12
|
*/
|
|
13
|
-
export type { IdempotencyMeta, IdempotencyScopeMode } from "../idempotency";
|
|
13
|
+
export type { IdempotencyMeta, IdempotencyScopeMode, } from "../idempotency/index.js";
|
|
14
14
|
/**
|
|
15
15
|
* Contract builder exports.
|
|
16
16
|
*/
|
|
17
|
-
export { ContractBuilder, type
|
|
17
|
+
export { ContractBuilder, type DefineContractOptions, defineContract, } from "./contract-builder.js";
|
|
18
18
|
/**
|
|
19
19
|
* Contract group exports.
|
|
20
20
|
*/
|
|
21
|
-
export { ContractGroup,
|
|
21
|
+
export { ContractGroup, defineContractGroup } from "./contract-group.js";
|
|
22
22
|
/**
|
|
23
23
|
* Contract-like helper exports.
|
|
24
24
|
*/
|
|
25
|
-
export { type ContractLike, type ResolveContract, resolveContract, } from "./contract-like";
|
|
25
|
+
export { type ContractLike, type ResolveContract, resolveContract, } from "./contract-like.js";
|
|
26
26
|
/**
|
|
27
27
|
* OpenAPI operation metadata type.
|
|
28
28
|
*/
|
|
29
|
-
export type { OpenAPIOperationMeta } from "./openapi-meta";
|
|
29
|
+
export type { OpenAPIOperationMeta } from "./openapi-meta.js";
|
|
30
30
|
/**
|
|
31
31
|
* Path template parsing exports.
|
|
32
32
|
*/
|
|
33
|
-
export { type ParsedPathTemplate, type PathTemplateSegment, parsePathTemplate, } from "./path-template";
|
|
33
|
+
export { type ParsedPathTemplate, type PathTemplateSegment, parsePathTemplate, } from "./path-template.js";
|
|
34
34
|
/**
|
|
35
35
|
* Rate limit metadata types for contracts.
|
|
36
36
|
*/
|
|
37
|
-
export type { RateLimitMeta, RateLimitScope } from "./rate-limit";
|
|
37
|
+
export type { RateLimitMeta, RateLimitScope } from "./rate-limit.js";
|
|
38
|
+
/**
|
|
39
|
+
* Success status helpers shared by the server route binder and tooling.
|
|
40
|
+
*/
|
|
41
|
+
export { getSuccess2xxStatuses, type IsSingle2xx, inferSoleSuccessStatus, type Success2xxKeys, } from "./success-status.js";
|
|
38
42
|
/**
|
|
39
43
|
* Contract config and inference types.
|
|
40
44
|
*/
|
|
41
|
-
export type { AnyContract, BodyHttpMethod, ContractErrorDefinition, ContractErrorResponses, ContractHeaderSchemas, ContractMeta, ContractResponseSchema, ContractResponses, HttpContractConfig, HttpMethod, InferHeaderSchemaInput, InferHeaderSchemaOutput, InferInput, InferOutput, ResponsesFromErrorDefinitions, StandardErrorResponseBody, StandardErrorResponseSchema, StandardSchema, } from "./types";
|
|
42
|
-
export { BEIGNET_ERROR_OWNER_HEADER, BODY_HTTP_METHODS, getContractHeaderSchemas, methodSupportsRequestBody, STANDARD_ERROR_RESPONSE_SCHEMA, } from "./types";
|
|
45
|
+
export type { AnyContract, BodyHttpMethod, ContractErrorDefinition, ContractErrorResponses, ContractHeaderSchemas, ContractMeta, ContractResponseSchema, ContractResponses, HttpContractConfig, HttpMethod, InferHeaderSchemaInput, InferHeaderSchemaOutput, InferInput, InferOutput, MergedContractErrorResponses, ResponsesFromErrorDefinitions, StandardErrorResponseBody, StandardErrorResponseSchema, StandardSchema, } from "./types.js";
|
|
46
|
+
export { BEIGNET_ERROR_OWNER_HEADER, BODY_HTTP_METHODS, getContractHeaderSchemas, methodSupportsRequestBody, STANDARD_ERROR_RESPONSE_SCHEMA, } from "./types.js";
|
|
43
47
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D;;GAEG;AACH,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D;;GAEG;AACH,YAAY,EACV,eAAe,EACf,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC;;GAEG;AACH,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACzE;;GAEG;AACH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B;;GAEG;AACH,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D;;GAEG;AACH,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B;;GAEG;AACH,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACrE;;GAEG;AACH,OAAO,EACL,qBAAqB,EACrB,KAAK,WAAW,EAChB,sBAAsB,EACtB,KAAK,cAAc,GACpB,MAAM,qBAAqB,CAAC;AAC7B;;GAEG;AACH,YAAY,EACV,WAAW,EACX,cAAc,EACd,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,EACZ,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,sBAAsB,EACtB,uBAAuB,EACvB,UAAU,EACV,WAAW,EACX,4BAA4B,EAC5B,6BAA6B,EAC7B,yBAAyB,EACzB,2BAA2B,EAC3B,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,YAAY,CAAC"}
|
package/dist/contracts/index.js
CHANGED
|
@@ -6,18 +6,22 @@
|
|
|
6
6
|
/**
|
|
7
7
|
* Contract builder exports.
|
|
8
8
|
*/
|
|
9
|
-
export { ContractBuilder,
|
|
9
|
+
export { ContractBuilder, defineContract, } from "./contract-builder.js";
|
|
10
10
|
/**
|
|
11
11
|
* Contract group exports.
|
|
12
12
|
*/
|
|
13
|
-
export { ContractGroup,
|
|
13
|
+
export { ContractGroup, defineContractGroup } from "./contract-group.js";
|
|
14
14
|
/**
|
|
15
15
|
* Contract-like helper exports.
|
|
16
16
|
*/
|
|
17
|
-
export { resolveContract, } from "./contract-like";
|
|
17
|
+
export { resolveContract, } from "./contract-like.js";
|
|
18
18
|
/**
|
|
19
19
|
* Path template parsing exports.
|
|
20
20
|
*/
|
|
21
|
-
export { parsePathTemplate, } from "./path-template";
|
|
22
|
-
|
|
21
|
+
export { parsePathTemplate, } from "./path-template.js";
|
|
22
|
+
/**
|
|
23
|
+
* Success status helpers shared by the server route binder and tooling.
|
|
24
|
+
*/
|
|
25
|
+
export { getSuccess2xxStatuses, inferSoleSuccessStatus, } from "./success-status.js";
|
|
26
|
+
export { BEIGNET_ERROR_OWNER_HEADER, BODY_HTTP_METHODS, getContractHeaderSchemas, methodSupportsRequestBody, STANDARD_ERROR_RESPONSE_SCHEMA, } from "./types.js";
|
|
23
27
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH;;GAEG;AACH,OAAO,EACL,eAAe,EAEf,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACzE;;GAEG;AACH,OAAO,EAGL,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAK5B;;GAEG;AACH,OAAO,EAGL,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAK5B;;GAEG;AACH,OAAO,EACL,qBAAqB,EAErB,sBAAsB,GAEvB,MAAM,qBAAqB,CAAC;AAyB7B,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,YAAY,CAAC"}
|
|
@@ -1,6 +1,48 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* OpenAPI operation-level metadata for HTTP contracts.
|
|
3
3
|
*/
|
|
4
|
+
/**
|
|
5
|
+
* Inline OpenAPI schema metadata or a `$ref` to a schema component.
|
|
6
|
+
*/
|
|
7
|
+
export type OpenAPISchemaMeta = Record<string, unknown> | {
|
|
8
|
+
$ref: string;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* OpenAPI media type metadata for request and response content entries.
|
|
12
|
+
*/
|
|
13
|
+
export type OpenAPIMediaTypeMeta = {
|
|
14
|
+
schema?: OpenAPISchemaMeta;
|
|
15
|
+
examples?: Record<string, {
|
|
16
|
+
summary?: string;
|
|
17
|
+
value?: unknown;
|
|
18
|
+
}>;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* OpenAPI request body metadata used to override generated JSON request bodies.
|
|
22
|
+
*/
|
|
23
|
+
export type OpenAPIRequestBodyMeta = {
|
|
24
|
+
required?: boolean;
|
|
25
|
+
description?: string;
|
|
26
|
+
content: Record<string, OpenAPIMediaTypeMeta>;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* OpenAPI response metadata used to add or replace generated responses.
|
|
30
|
+
*/
|
|
31
|
+
export type OpenAPIResponseMeta = {
|
|
32
|
+
description: string;
|
|
33
|
+
content?: Record<string, OpenAPIMediaTypeMeta>;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* OpenAPI operation parameter metadata used for custom parameters such as cookies.
|
|
37
|
+
*/
|
|
38
|
+
export type OpenAPIParameterMeta = {
|
|
39
|
+
name: string;
|
|
40
|
+
in: "path" | "query" | "header" | "cookie";
|
|
41
|
+
required?: boolean;
|
|
42
|
+
schema?: OpenAPISchemaMeta;
|
|
43
|
+
description?: string;
|
|
44
|
+
deprecated?: boolean;
|
|
45
|
+
};
|
|
4
46
|
export type OpenAPIOperationMeta = {
|
|
5
47
|
/** Brief operation summary. */
|
|
6
48
|
summary?: string;
|
|
@@ -19,5 +61,11 @@ export type OpenAPIOperationMeta = {
|
|
|
19
61
|
operationId?: string;
|
|
20
62
|
/** Per-operation security requirements. */
|
|
21
63
|
security?: Array<Record<string, string[]>>;
|
|
64
|
+
/** Additional or replacement operation parameters. */
|
|
65
|
+
parameters?: OpenAPIParameterMeta[];
|
|
66
|
+
/** Replacement request body for non-JSON media such as multipart uploads. */
|
|
67
|
+
requestBody?: OpenAPIRequestBodyMeta;
|
|
68
|
+
/** Additional or replacement responses, useful for files and streams. */
|
|
69
|
+
responses?: Record<string, OpenAPIResponseMeta>;
|
|
22
70
|
};
|
|
23
71
|
//# sourceMappingURL=openapi-meta.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi-meta.d.ts","sourceRoot":"","sources":["../../src/contracts/openapi-meta.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wCAAwC;IACxC,YAAY,CAAC,EAAE;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"openapi-meta.d.ts","sourceRoot":"","sources":["../../src/contracts/openapi-meta.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CACf,MAAM,EACN;QACE,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CACF,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CAC/C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CAChD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wCAAwC;IACxC,YAAY,CAAC,EAAE;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3C,sDAAsD;IACtD,UAAU,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACpC,6EAA6E;IAC7E,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CACjD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi-meta.js","sourceRoot":"","sources":["../../src/contracts/openapi-meta.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"openapi-meta.js","sourceRoot":"","sources":["../../src/contracts/openapi-meta.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -38,7 +38,7 @@ export interface ParsedPathTemplate {
|
|
|
38
38
|
* Parse a Beignet route path template.
|
|
39
39
|
*
|
|
40
40
|
* Paths must start with `/`. Dynamic segments may use `:id` or `[id]`.
|
|
41
|
-
*
|
|
41
|
+
* Contract catch-all segments and partial dynamic segments are intentionally rejected.
|
|
42
42
|
*/
|
|
43
43
|
export declare function parsePathTemplate(path: string): ParsedPathTemplate;
|
|
44
44
|
//# sourceMappingURL=path-template.d.ts.map
|
|
@@ -3,7 +3,7 @@ const COLON_PARAM = new RegExp(`^:(${PARAM_NAME})$`);
|
|
|
3
3
|
const BRACKET_PARAM = new RegExp(`^\\[(${PARAM_NAME})\\]$`);
|
|
4
4
|
function createPathTemplateError(path, segment) {
|
|
5
5
|
return new Error(`Unsupported path template segment "${segment}" in "${path}". ` +
|
|
6
|
-
"Use single-segment params like :id or [id].
|
|
6
|
+
"Use single-segment params like :id or [id]. Contract catch-all params such as [...path] and partial-segment params are not supported. Expose a platform catch-all route to the Beignet server, but keep individual contracts on concrete paths.");
|
|
7
7
|
}
|
|
8
8
|
function parsePathSegment(path, segment) {
|
|
9
9
|
const colonMatch = segment.match(COLON_PARAM);
|
|
@@ -25,7 +25,7 @@ function parsePathSegment(path, segment) {
|
|
|
25
25
|
* Parse a Beignet route path template.
|
|
26
26
|
*
|
|
27
27
|
* Paths must start with `/`. Dynamic segments may use `:id` or `[id]`.
|
|
28
|
-
*
|
|
28
|
+
* Contract catch-all segments and partial dynamic segments are intentionally rejected.
|
|
29
29
|
*/
|
|
30
30
|
export function parsePathTemplate(path) {
|
|
31
31
|
if (!path.startsWith("/")) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-template.js","sourceRoot":"","sources":["../../src/contracts/path-template.ts"],"names":[],"mappings":"AAiCA,MAAM,UAAU,GAAG,gBAAgB,CAAC;AACpC,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,MAAM,UAAU,IAAI,CAAC,CAAC;AACrD,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,QAAQ,UAAU,OAAO,CAAC,CAAC;AAE5D,SAAS,uBAAuB,CAAC,IAAY,EAAE,OAAe;IAC5D,OAAO,IAAI,KAAK,CACd,sCAAsC,OAAO,SAAS,IAAI,KAAK;QAC7D,
|
|
1
|
+
{"version":3,"file":"path-template.js","sourceRoot":"","sources":["../../src/contracts/path-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal schema shape helpers shared by server route registration and
|
|
3
|
+
* OpenAPI generation.
|
|
4
|
+
*
|
|
5
|
+
* These helpers are intentionally zod-free: zod is an optional peer
|
|
6
|
+
* dependency, so shape extraction duck-types Zod's `_def.shape` internals and
|
|
7
|
+
* returns undefined for schemas it cannot introspect. This module is not
|
|
8
|
+
* exported from the package index.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Extract the field shape (field name → field schema) from an object schema.
|
|
12
|
+
*
|
|
13
|
+
* Returns undefined when the schema is not an introspectable object schema,
|
|
14
|
+
* for example a non-Zod Standard Schema.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getObjectSchemaShape(schema: unknown): Record<string, unknown> | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Compare a path template's dynamic keys against a pathParams schema shape.
|
|
19
|
+
*/
|
|
20
|
+
export declare function comparePathParamsToTemplate(args: {
|
|
21
|
+
pathKeys: readonly string[];
|
|
22
|
+
shapeKeys: readonly string[];
|
|
23
|
+
}): {
|
|
24
|
+
missingKeys: string[];
|
|
25
|
+
extraKeys: string[];
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Format a pathParams/template mismatch for error messages.
|
|
29
|
+
*
|
|
30
|
+
* Shared so server registration and OpenAPI generation report the same
|
|
31
|
+
* diagnostic details.
|
|
32
|
+
*/
|
|
33
|
+
export declare function formatPathParamsMismatch(args: {
|
|
34
|
+
missingKeys: readonly string[];
|
|
35
|
+
extraKeys: readonly string[];
|
|
36
|
+
}): string;
|
|
37
|
+
//# sourceMappingURL=schema-shape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-shape.d.ts","sourceRoot":"","sources":["../../src/contracts/schema-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAkBrC;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B,GAAG;IAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAQjD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B,GAAG,MAAM,CAWT"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal schema shape helpers shared by server route registration and
|
|
3
|
+
* OpenAPI generation.
|
|
4
|
+
*
|
|
5
|
+
* These helpers are intentionally zod-free: zod is an optional peer
|
|
6
|
+
* dependency, so shape extraction duck-types Zod's `_def.shape` internals and
|
|
7
|
+
* returns undefined for schemas it cannot introspect. This module is not
|
|
8
|
+
* exported from the package index.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Extract the field shape (field name → field schema) from an object schema.
|
|
12
|
+
*
|
|
13
|
+
* Returns undefined when the schema is not an introspectable object schema,
|
|
14
|
+
* for example a non-Zod Standard Schema.
|
|
15
|
+
*/
|
|
16
|
+
export function getObjectSchemaShape(schema) {
|
|
17
|
+
if (!schema || typeof schema !== "object")
|
|
18
|
+
return undefined;
|
|
19
|
+
const schemaDef = schema?._def;
|
|
20
|
+
if (!schemaDef || typeof schemaDef !== "object")
|
|
21
|
+
return undefined;
|
|
22
|
+
if (!("shape" in schemaDef))
|
|
23
|
+
return undefined;
|
|
24
|
+
let shape;
|
|
25
|
+
if (typeof schemaDef.shape === "function") {
|
|
26
|
+
shape = schemaDef.shape();
|
|
27
|
+
}
|
|
28
|
+
else if (typeof schemaDef.shape === "object") {
|
|
29
|
+
shape = schemaDef.shape;
|
|
30
|
+
}
|
|
31
|
+
if (!shape || typeof shape !== "object")
|
|
32
|
+
return undefined;
|
|
33
|
+
return shape;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Compare a path template's dynamic keys against a pathParams schema shape.
|
|
37
|
+
*/
|
|
38
|
+
export function comparePathParamsToTemplate(args) {
|
|
39
|
+
const missingKeys = args.pathKeys.filter((key) => !args.shapeKeys.includes(key));
|
|
40
|
+
const extraKeys = args.shapeKeys.filter((key) => !args.pathKeys.includes(key));
|
|
41
|
+
return { missingKeys, extraKeys };
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Format a pathParams/template mismatch for error messages.
|
|
45
|
+
*
|
|
46
|
+
* Shared so server registration and OpenAPI generation report the same
|
|
47
|
+
* diagnostic details.
|
|
48
|
+
*/
|
|
49
|
+
export function formatPathParamsMismatch(args) {
|
|
50
|
+
return [
|
|
51
|
+
args.missingKeys.length > 0
|
|
52
|
+
? `missing pathParams keys: ${args.missingKeys.join(", ")}`
|
|
53
|
+
: undefined,
|
|
54
|
+
args.extraKeys.length > 0
|
|
55
|
+
? `extra pathParams keys: ${args.extraKeys.join(", ")}`
|
|
56
|
+
: undefined,
|
|
57
|
+
]
|
|
58
|
+
.filter(Boolean)
|
|
59
|
+
.join("; ");
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=schema-shape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-shape.js","sourceRoot":"","sources":["../../src/contracts/schema-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAe;IAEf,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAE5D,MAAM,SAAS,GAAI,MAAkC,EAAE,IAAI,CAAC;IAC5D,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAElE,IAAI,CAAC,CAAC,OAAO,IAAI,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAE9C,IAAI,KAAc,CAAC;IACnB,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QAC1C,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;SAAM,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/C,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAE1D,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAG3C;IACC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CACtC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CACvC,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CACrC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CACtC,CAAC;IACF,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAGxC;IACC,OAAO;QACL,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YACzB,CAAC,CAAC,4BAA4B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC3D,CAAC,CAAC,SAAS;QACb,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YACvB,CAAC,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACvD,CAAC,CAAC,SAAS;KACd;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { HttpContractConfig } from "./types.js";
|
|
2
|
+
type Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
|
|
3
|
+
type ToNumber<S extends string> = S extends `${infer N extends number}` ? N : never;
|
|
4
|
+
type Any2xxCode = ToNumber<`2${Digit}${Digit}`>;
|
|
5
|
+
type NumericKey<K> = K extends number ? K : K extends `${infer N extends number}` ? N : never;
|
|
6
|
+
type UnionToIntersection<T> = (T extends unknown ? (value: T) => void : never) extends (value: infer I) => void ? I : never;
|
|
7
|
+
/**
|
|
8
|
+
* All declared 2xx status codes from a contract `responses` record, as
|
|
9
|
+
* numeric literal keys.
|
|
10
|
+
*/
|
|
11
|
+
export type Success2xxKeys<TResponses extends object> = {
|
|
12
|
+
[K in keyof TResponses]: NumericKey<K> extends Any2xxCode ? NumericKey<K> : never;
|
|
13
|
+
}[keyof TResponses];
|
|
14
|
+
/**
|
|
15
|
+
* Whether a contract `responses` record declares exactly one 2xx status.
|
|
16
|
+
*/
|
|
17
|
+
export type IsSingle2xx<TResponses extends object> = [
|
|
18
|
+
Success2xxKeys<TResponses>
|
|
19
|
+
] extends [never] ? false : [Success2xxKeys<TResponses>] extends [
|
|
20
|
+
UnionToIntersection<Success2xxKeys<TResponses>>
|
|
21
|
+
] ? true : false;
|
|
22
|
+
/**
|
|
23
|
+
* List the declared 2xx statuses of a contract at runtime.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getSuccess2xxStatuses(contract: Pick<HttpContractConfig, "responses">): number[];
|
|
26
|
+
/**
|
|
27
|
+
* Resolve the sole declared 2xx status of a contract, or `undefined` when the
|
|
28
|
+
* contract declares zero or multiple 2xx statuses.
|
|
29
|
+
*/
|
|
30
|
+
export declare function inferSoleSuccessStatus(contract: Pick<HttpContractConfig, "responses">): number | undefined;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=success-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"success-status.d.ts","sourceRoot":"","sources":["../../src/contracts/success-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnD,KAAK,QAAQ,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,MAAM,EAAE,GACnE,CAAC,GACD,KAAK,CAAC;AACV,KAAK,UAAU,GAAG,QAAQ,CAAC,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;AAChD,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GACjC,CAAC,GACD,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,MAAM,EAAE,GACnC,CAAC,GACD,KAAK,CAAC;AAEZ,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAC5B,CAAC,SAAS,OAAO,GACb,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAClB,KAAK,CACV,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,GAC9B,CAAC,GACD,KAAK,CAAC;AAEV;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,UAAU,SAAS,MAAM,IAAI;KACrD,CAAC,IAAI,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,UAAU,GACrD,UAAU,CAAC,CAAC,CAAC,GACb,KAAK;CACV,CAAC,MAAM,UAAU,CAAC,CAAC;AAEpB;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,UAAU,SAAS,MAAM,IAAI;IACnD,cAAc,CAAC,UAAU,CAAC;CAC3B,SAAS,CAAC,KAAK,CAAC,GACb,KAAK,GACL,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,SAAS;IACjC,mBAAmB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;CAChD,GACD,IAAI,GACJ,KAAK,CAAC;AAEZ;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAC9C,MAAM,EAAE,CAOV;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAC9C,MAAM,GAAG,SAAS,CAGpB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List the declared 2xx statuses of a contract at runtime.
|
|
3
|
+
*/
|
|
4
|
+
export function getSuccess2xxStatuses(contract) {
|
|
5
|
+
return Object.keys(contract.responses)
|
|
6
|
+
.map((status) => Number(status))
|
|
7
|
+
.filter((status) => Number.isInteger(status) && status >= 200 && status < 300)
|
|
8
|
+
.sort((a, b) => a - b);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Resolve the sole declared 2xx status of a contract, or `undefined` when the
|
|
12
|
+
* contract declares zero or multiple 2xx statuses.
|
|
13
|
+
*/
|
|
14
|
+
export function inferSoleSuccessStatus(contract) {
|
|
15
|
+
const statuses = getSuccess2xxStatuses(contract);
|
|
16
|
+
return statuses.length === 1 ? statuses[0] : undefined;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=success-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"success-status.js","sourceRoot":"","sources":["../../src/contracts/success-status.ts"],"names":[],"mappings":"AA4CA;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAA+C;IAE/C,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;SACnC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAC/B,MAAM,CACL,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,CACtE;SACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAA+C;IAE/C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { StandardSchemaV1 } from "@standard-schema/spec";
|
|
2
|
-
import type { IdempotencyMeta } from "../idempotency";
|
|
3
|
-
import type { OpenAPIOperationMeta } from "./openapi-meta";
|
|
4
|
-
import type { RateLimitMeta } from "./rate-limit";
|
|
2
|
+
import type { IdempotencyMeta } from "../idempotency/index.js";
|
|
3
|
+
import type { OpenAPIOperationMeta } from "./openapi-meta.js";
|
|
4
|
+
import type { RateLimitMeta } from "./rate-limit.js";
|
|
5
5
|
/**
|
|
6
6
|
* Any Standard Schema compatible validator.
|
|
7
7
|
*/
|
|
@@ -60,6 +60,15 @@ export type ContractErrorResponses = Record<string, ContractErrorDefinition>;
|
|
|
60
60
|
export type ResponsesFromErrorDefinitions<T extends ContractErrorResponses> = {
|
|
61
61
|
[K in keyof T as T[K]["status"]]: StandardErrorResponseSchema;
|
|
62
62
|
};
|
|
63
|
+
/**
|
|
64
|
+
* Merge catalog errors already declared in contract metadata with newly
|
|
65
|
+
* declared error definitions.
|
|
66
|
+
*
|
|
67
|
+
* `.errors()` declarations compose: contracts keep the union of group-declared
|
|
68
|
+
* and route-declared catalog errors. Later declarations win when the same
|
|
69
|
+
* catalog key is declared twice.
|
|
70
|
+
*/
|
|
71
|
+
export type MergedContractErrorResponses<TMeta extends ContractMeta, TErrorDefs extends ContractErrorResponses> = TMeta["errors"] extends ContractErrorResponses ? Omit<TMeta["errors"], keyof TErrorDefs> & TErrorDefs : TErrorDefs;
|
|
63
72
|
/**
|
|
64
73
|
* Header schema declaration for a contract.
|
|
65
74
|
*/
|
|
@@ -122,12 +131,23 @@ export type ContractMeta = {
|
|
|
122
131
|
/**
|
|
123
132
|
* Optional idempotency configuration for this contract.
|
|
124
133
|
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
134
|
+
* Enforced at the HTTP boundary by `createIdempotencyHooks(...)`.
|
|
135
|
+
* `runIdempotently(...)` remains the primitive for non-HTTP workflows.
|
|
127
136
|
*/
|
|
128
137
|
idempotency?: IdempotencyMeta;
|
|
129
138
|
[namespace: string]: unknown;
|
|
130
139
|
};
|
|
140
|
+
/**
|
|
141
|
+
* Omit metadata keys while preserving literal property types.
|
|
142
|
+
*
|
|
143
|
+
* `ContractMeta` carries an index signature, so the built-in `Omit` collapses
|
|
144
|
+
* `keyof` to `string` and erases literal metadata such as
|
|
145
|
+
* `idempotency: { header: "idempotency-key" }` that typed clients rely on.
|
|
146
|
+
* Key remapping keeps known properties and the index signature intact.
|
|
147
|
+
*/
|
|
148
|
+
export type OmitMetaKeys<TMeta, K extends PropertyKey> = {
|
|
149
|
+
[P in keyof TMeta as P extends K ? never : P]: TMeta[P];
|
|
150
|
+
};
|
|
131
151
|
/**
|
|
132
152
|
* Plain HTTP contract configuration consumed by server, client, and tooling.
|
|
133
153
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/contracts/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/contracts/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/contracts/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/contracts/types.ts"],"names":[],"mappings":"AAiGA;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,uBAAuB,CAAC;AA6DlE;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,MAAM;IACN,KAAK;IACL,OAAO;CACqC,CAAC;AAE/C;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAkB;IAElB,OAAQ,iBAA2C,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAgC;IACzE,WAAW,EAAE;QACX,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,SAAS;QACjB,QAAQ,CAAC,KAAK;YACZ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAChD,OAAO;oBACL,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC;iBAC9D,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,KAAgC,CAAC;YAC9C,MAAM,MAAM,GAA6B,EAAE,CAAC;YAC5C,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAClC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC,CAAC;YACjE,CAAC;YACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;gBACvE,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,CAAC;YAED,OAAO;gBACL,KAAK,EAAE;oBACL,IAAI,EAAE,IAAI,CAAC,IAAc;oBACzB,OAAO,EAAE,IAAI,CAAC,OAAiB;oBAC/B,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChE,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS;wBAC9B,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAmB,EAAE;wBACzC,CAAC,CAAC,EAAE,CAAC;iBACR;aACF,CAAC;QACJ,CAAC;KACF;CACF,CAAC;AAwGF;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAA0C;IAE1C,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAC3B,CAAC,CAAE,OAAqC;QACxC,CAAC,CAAC,CAAC,OAAyB,CAAC,CAAC;AAClC,CAAC"}
|