adorn-api 1.0.4 → 1.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/README.md +766 -51
- package/dist/adapter/express/bootstrap.d.ts +24 -0
- package/dist/adapter/express/bootstrap.d.ts.map +1 -0
- package/dist/adapter/express/index.d.ts +41 -0
- package/dist/adapter/express/index.d.ts.map +1 -0
- package/dist/adapter/express/merge.d.ts +28 -0
- package/dist/adapter/express/merge.d.ts.map +1 -0
- package/dist/cli.cjs +1571 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +1552 -2
- package/dist/cli.js.map +1 -1
- package/dist/compiler/analyze/scanControllers.d.ts +35 -0
- package/dist/compiler/analyze/scanControllers.d.ts.map +1 -0
- package/dist/compiler/cache/isStale.d.ts +20 -0
- package/dist/compiler/cache/isStale.d.ts.map +1 -0
- package/dist/compiler/cache/loadArtifacts.d.ts +113 -0
- package/dist/compiler/cache/loadArtifacts.d.ts.map +1 -0
- package/dist/compiler/cache/schema.d.ts +18 -0
- package/dist/compiler/cache/schema.d.ts.map +1 -0
- package/dist/compiler/cache/writeCache.d.ts +8 -0
- package/dist/compiler/cache/writeCache.d.ts.map +1 -0
- package/dist/compiler/manifest/emit.d.ts +7 -0
- package/dist/compiler/manifest/emit.d.ts.map +1 -0
- package/dist/compiler/manifest/format.d.ts +76 -0
- package/dist/compiler/manifest/format.d.ts.map +1 -0
- package/dist/compiler/runner/createProgram.d.ts +8 -0
- package/dist/compiler/runner/createProgram.d.ts.map +1 -0
- package/dist/compiler/schema/extractAnnotations.d.ts +10 -0
- package/dist/compiler/schema/extractAnnotations.d.ts.map +1 -0
- package/dist/compiler/schema/openapi.d.ts +19 -0
- package/dist/compiler/schema/openapi.d.ts.map +1 -0
- package/dist/compiler/schema/typeToJsonSchema.d.ts +49 -0
- package/dist/compiler/schema/typeToJsonSchema.d.ts.map +1 -0
- package/dist/compiler/validation/emitPrecompiledValidators.d.ts +46 -0
- package/dist/compiler/validation/emitPrecompiledValidators.d.ts.map +1 -0
- package/dist/decorators/Auth.d.ts +5 -0
- package/dist/decorators/Auth.d.ts.map +1 -0
- package/dist/decorators/Controller.d.ts +2 -0
- package/dist/decorators/Controller.d.ts.map +1 -0
- package/dist/decorators/Public.d.ts +2 -0
- package/dist/decorators/Public.d.ts.map +1 -0
- package/dist/decorators/Use.d.ts +5 -0
- package/dist/decorators/Use.d.ts.map +1 -0
- package/dist/decorators/index.d.ts +5 -6
- package/dist/decorators/index.d.ts.map +1 -1
- package/dist/decorators/methods.d.ts +5 -145
- package/dist/decorators/methods.d.ts.map +1 -1
- package/dist/express.cjs +775 -0
- package/dist/express.cjs.map +1 -0
- package/dist/express.d.ts +6 -1
- package/dist/express.d.ts.map +1 -1
- package/dist/express.js +738 -1
- package/dist/express.js.map +1 -1
- package/dist/http.d.ts +29 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/index.cjs +573 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +12 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +490 -26
- package/dist/index.js.map +1 -1
- package/dist/metal/index.cjs +219 -0
- package/dist/metal/index.cjs.map +1 -0
- package/dist/metal/index.d.ts +6 -0
- package/dist/metal/index.d.ts.map +1 -0
- package/dist/metal/index.js +188 -0
- package/dist/metal/index.js.map +1 -0
- package/dist/metal/readMetalBag.d.ts +33 -0
- package/dist/metal/readMetalBag.d.ts.map +1 -0
- package/dist/metal/registerMetalEntities.d.ts +6 -0
- package/dist/metal/registerMetalEntities.d.ts.map +1 -0
- package/dist/metal/schemaFromEntity.d.ts +11 -0
- package/dist/metal/schemaFromEntity.d.ts.map +1 -0
- package/dist/metal/symbolMetadata.d.ts +2 -0
- package/dist/metal/symbolMetadata.d.ts.map +1 -0
- package/dist/runtime/auth/runtime.d.ts +34 -0
- package/dist/runtime/auth/runtime.d.ts.map +1 -0
- package/dist/runtime/metadata/bucket.d.ts +3 -0
- package/dist/runtime/metadata/bucket.d.ts.map +1 -0
- package/dist/runtime/metadata/key.d.ts +2 -0
- package/dist/runtime/metadata/key.d.ts.map +1 -0
- package/dist/runtime/metadata/read.d.ts +3 -0
- package/dist/runtime/metadata/read.d.ts.map +1 -0
- package/dist/runtime/metadata/types.d.ts +21 -0
- package/dist/runtime/metadata/types.d.ts.map +1 -0
- package/dist/runtime/polyfill.d.ts +2 -0
- package/dist/runtime/polyfill.d.ts.map +1 -0
- package/dist/runtime/upload.d.ts +7 -0
- package/dist/runtime/upload.d.ts.map +1 -0
- package/dist/runtime/validation/ajv.d.ts +20 -0
- package/dist/runtime/validation/ajv.d.ts.map +1 -0
- package/dist/runtime/validation/index.d.ts +2 -0
- package/dist/runtime/validation/index.d.ts.map +1 -0
- package/dist/schema/decorators.d.ts +37 -0
- package/dist/schema/decorators.d.ts.map +1 -0
- package/dist/schema/index.cjs +214 -0
- package/dist/schema/index.cjs.map +1 -0
- package/dist/schema/index.d.ts +2 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +163 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/scripts/adorn-example.cjs +148 -0
- package/dist/scripts/adorn-example.cjs.map +1 -0
- package/dist/utils/operationId.d.ts +2 -0
- package/dist/utils/operationId.d.ts.map +1 -0
- package/dist/utils/path.d.ts +2 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/package.json +92 -57
- package/dist/adapters/express/createApp.d.ts +0 -158
- package/dist/adapters/express/createApp.d.ts.map +0 -1
- package/dist/adapters/express/createApp.js +0 -141
- package/dist/adapters/express/createApp.js.map +0 -1
- package/dist/adapters/express/index.d.ts +0 -7
- package/dist/adapters/express/index.d.ts.map +0 -1
- package/dist/adapters/express/index.js +0 -7
- package/dist/adapters/express/index.js.map +0 -1
- package/dist/adapters/express/middleware/errorHandler.d.ts +0 -194
- package/dist/adapters/express/middleware/errorHandler.d.ts.map +0 -1
- package/dist/adapters/express/middleware/errorHandler.js +0 -167
- package/dist/adapters/express/middleware/errorHandler.js.map +0 -1
- package/dist/adapters/express/middleware/requestContext.d.ts +0 -2
- package/dist/adapters/express/middleware/requestContext.d.ts.map +0 -1
- package/dist/adapters/express/middleware/requestContext.js +0 -3
- package/dist/adapters/express/middleware/requestContext.js.map +0 -1
- package/dist/adapters/express/router.d.ts +0 -10
- package/dist/adapters/express/router.d.ts.map +0 -1
- package/dist/adapters/express/router.js +0 -105
- package/dist/adapters/express/router.js.map +0 -1
- package/dist/adapters/express/swagger/index.d.ts +0 -2
- package/dist/adapters/express/swagger/index.d.ts.map +0 -1
- package/dist/adapters/express/swagger/index.js +0 -2
- package/dist/adapters/express/swagger/index.js.map +0 -1
- package/dist/adapters/express/swagger/serve.d.ts +0 -12
- package/dist/adapters/express/swagger/serve.d.ts.map +0 -1
- package/dist/adapters/express/swagger/serve.js +0 -72
- package/dist/adapters/express/swagger/serve.js.map +0 -1
- package/dist/adapters/express/transport/request.d.ts +0 -4
- package/dist/adapters/express/transport/request.d.ts.map +0 -1
- package/dist/adapters/express/transport/request.js +0 -12
- package/dist/adapters/express/transport/request.js.map +0 -1
- package/dist/adapters/express/transport/response.d.ts +0 -5
- package/dist/adapters/express/transport/response.d.ts.map +0 -1
- package/dist/adapters/express/transport/response.js +0 -36
- package/dist/adapters/express/transport/response.js.map +0 -1
- package/dist/cli/commands/dev.d.ts +0 -2
- package/dist/cli/commands/dev.d.ts.map +0 -1
- package/dist/cli/commands/dev.js +0 -3
- package/dist/cli/commands/dev.js.map +0 -1
- package/dist/cli/commands/gen.d.ts +0 -2
- package/dist/cli/commands/gen.d.ts.map +0 -1
- package/dist/cli/commands/gen.js +0 -3
- package/dist/cli/commands/gen.js.map +0 -1
- package/dist/cli/main.d.ts +0 -2
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/main.js +0 -3
- package/dist/cli/main.js.map +0 -1
- package/dist/compiler/config/defaults.d.ts +0 -2
- package/dist/compiler/config/defaults.d.ts.map +0 -1
- package/dist/compiler/config/defaults.js +0 -3
- package/dist/compiler/config/defaults.js.map +0 -1
- package/dist/compiler/config/loadConfig.d.ts +0 -2
- package/dist/compiler/config/loadConfig.d.ts.map +0 -1
- package/dist/compiler/config/loadConfig.js +0 -3
- package/dist/compiler/config/loadConfig.js.map +0 -1
- package/dist/compiler/diagnostics/errors.d.ts +0 -2
- package/dist/compiler/diagnostics/errors.d.ts.map +0 -1
- package/dist/compiler/diagnostics/errors.js +0 -3
- package/dist/compiler/diagnostics/errors.js.map +0 -1
- package/dist/compiler/emit/openapi.d.ts +0 -2
- package/dist/compiler/emit/openapi.d.ts.map +0 -1
- package/dist/compiler/emit/openapi.js +0 -3
- package/dist/compiler/emit/openapi.js.map +0 -1
- package/dist/compiler/emit/routes.d.ts +0 -2
- package/dist/compiler/emit/routes.d.ts.map +0 -1
- package/dist/compiler/emit/routes.js +0 -3
- package/dist/compiler/emit/routes.js.map +0 -1
- package/dist/compiler/program/loadTsProgram.d.ts +0 -2
- package/dist/compiler/program/loadTsProgram.d.ts.map +0 -1
- package/dist/compiler/program/loadTsProgram.js +0 -3
- package/dist/compiler/program/loadTsProgram.js.map +0 -1
- package/dist/compiler/scan/actions.d.ts +0 -2
- package/dist/compiler/scan/actions.d.ts.map +0 -1
- package/dist/compiler/scan/actions.js +0 -3
- package/dist/compiler/scan/actions.js.map +0 -1
- package/dist/compiler/scan/controllers.d.ts +0 -2
- package/dist/compiler/scan/controllers.d.ts.map +0 -1
- package/dist/compiler/scan/controllers.js +0 -3
- package/dist/compiler/scan/controllers.js.map +0 -1
- package/dist/compiler/scan/types.d.ts +0 -2
- package/dist/compiler/scan/types.d.ts.map +0 -1
- package/dist/compiler/scan/types.js +0 -3
- package/dist/compiler/scan/types.js.map +0 -1
- package/dist/contracts/context.d.ts +0 -10
- package/dist/contracts/context.d.ts.map +0 -1
- package/dist/contracts/context.js +0 -2
- package/dist/contracts/context.js.map +0 -1
- package/dist/contracts/errors.d.ts +0 -22
- package/dist/contracts/errors.d.ts.map +0 -1
- package/dist/contracts/errors.js +0 -2
- package/dist/contracts/errors.js.map +0 -1
- package/dist/contracts/http.d.ts +0 -2
- package/dist/contracts/http.d.ts.map +0 -1
- package/dist/contracts/http.js +0 -3
- package/dist/contracts/http.js.map +0 -1
- package/dist/contracts/middleware.d.ts +0 -2
- package/dist/contracts/middleware.d.ts.map +0 -1
- package/dist/contracts/middleware.js +0 -3
- package/dist/contracts/middleware.js.map +0 -1
- package/dist/contracts/openapi-v3.d.ts +0 -538
- package/dist/contracts/openapi-v3.d.ts.map +0 -1
- package/dist/contracts/openapi-v3.js +0 -2
- package/dist/contracts/openapi-v3.js.map +0 -1
- package/dist/contracts/openapi.d.ts +0 -2
- package/dist/contracts/openapi.d.ts.map +0 -1
- package/dist/contracts/openapi.js +0 -2
- package/dist/contracts/openapi.js.map +0 -1
- package/dist/contracts/reply.d.ts +0 -119
- package/dist/contracts/reply.d.ts.map +0 -1
- package/dist/contracts/reply.js +0 -43
- package/dist/contracts/reply.js.map +0 -1
- package/dist/contracts/response-types.d.ts +0 -40
- package/dist/contracts/response-types.d.ts.map +0 -1
- package/dist/contracts/response-types.js +0 -2
- package/dist/contracts/response-types.js.map +0 -1
- package/dist/contracts/responses.d.ts +0 -98
- package/dist/contracts/responses.d.ts.map +0 -1
- package/dist/contracts/responses.js +0 -2
- package/dist/contracts/responses.js.map +0 -1
- package/dist/contracts/route-options.d.ts +0 -155
- package/dist/contracts/route-options.d.ts.map +0 -1
- package/dist/contracts/route-options.js +0 -2
- package/dist/contracts/route-options.js.map +0 -1
- package/dist/contracts/route-typing.d.ts +0 -25
- package/dist/contracts/route-typing.d.ts.map +0 -1
- package/dist/contracts/route-typing.js +0 -2
- package/dist/contracts/route-typing.js.map +0 -1
- package/dist/contracts/validator.d.ts +0 -146
- package/dist/contracts/validator.d.ts.map +0 -1
- package/dist/contracts/validator.js +0 -2
- package/dist/contracts/validator.js.map +0 -1
- package/dist/core/binding/binder.d.ts +0 -74
- package/dist/core/binding/binder.d.ts.map +0 -1
- package/dist/core/binding/binder.js +0 -161
- package/dist/core/binding/binder.js.map +0 -1
- package/dist/core/binding/coerce/arrays.d.ts +0 -7
- package/dist/core/binding/coerce/arrays.d.ts.map +0 -1
- package/dist/core/binding/coerce/arrays.js +0 -28
- package/dist/core/binding/coerce/arrays.js.map +0 -1
- package/dist/core/binding/coerce/csv.d.ts +0 -2
- package/dist/core/binding/coerce/csv.d.ts.map +0 -1
- package/dist/core/binding/coerce/csv.js +0 -7
- package/dist/core/binding/coerce/csv.js.map +0 -1
- package/dist/core/binding/coerce/objects.d.ts +0 -2
- package/dist/core/binding/coerce/objects.d.ts.map +0 -1
- package/dist/core/binding/coerce/objects.js +0 -3
- package/dist/core/binding/coerce/objects.js.map +0 -1
- package/dist/core/binding/coerce/primitives.d.ts +0 -70
- package/dist/core/binding/coerce/primitives.d.ts.map +0 -1
- package/dist/core/binding/coerce/primitives.js +0 -88
- package/dist/core/binding/coerce/primitives.js.map +0 -1
- package/dist/core/binding/index.d.ts +0 -2
- package/dist/core/binding/index.d.ts.map +0 -1
- package/dist/core/binding/index.js +0 -2
- package/dist/core/binding/index.js.map +0 -1
- package/dist/core/binding/rules/inferFromHttpMethod.d.ts +0 -6
- package/dist/core/binding/rules/inferFromHttpMethod.d.ts.map +0 -1
- package/dist/core/binding/rules/inferFromHttpMethod.js +0 -11
- package/dist/core/binding/rules/inferFromHttpMethod.js.map +0 -1
- package/dist/core/binding/rules/inferFromPath.d.ts +0 -2
- package/dist/core/binding/rules/inferFromPath.d.ts.map +0 -1
- package/dist/core/binding/rules/inferFromPath.js +0 -9
- package/dist/core/binding/rules/inferFromPath.js.map +0 -1
- package/dist/core/binding/rules/wrappers.d.ts +0 -2
- package/dist/core/binding/rules/wrappers.d.ts.map +0 -1
- package/dist/core/binding/rules/wrappers.js +0 -3
- package/dist/core/binding/rules/wrappers.js.map +0 -1
- package/dist/core/errors/http-error.d.ts +0 -63
- package/dist/core/errors/http-error.d.ts.map +0 -1
- package/dist/core/errors/http-error.js +0 -71
- package/dist/core/errors/http-error.js.map +0 -1
- package/dist/core/errors/index.d.ts +0 -4
- package/dist/core/errors/index.d.ts.map +0 -1
- package/dist/core/errors/index.js +0 -4
- package/dist/core/errors/index.js.map +0 -1
- package/dist/core/errors/problem.d.ts +0 -3
- package/dist/core/errors/problem.d.ts.map +0 -1
- package/dist/core/errors/problem.js +0 -33
- package/dist/core/errors/problem.js.map +0 -1
- package/dist/core/errors/validation-error.d.ts +0 -73
- package/dist/core/errors/validation-error.d.ts.map +0 -1
- package/dist/core/errors/validation-error.js +0 -82
- package/dist/core/errors/validation-error.js.map +0 -1
- package/dist/core/openapi/buildOpenApi.d.ts +0 -79
- package/dist/core/openapi/buildOpenApi.d.ts.map +0 -1
- package/dist/core/openapi/buildOpenApi.js +0 -196
- package/dist/core/openapi/buildOpenApi.js.map +0 -1
- package/dist/core/openapi/index.d.ts +0 -2
- package/dist/core/openapi/index.d.ts.map +0 -1
- package/dist/core/openapi/index.js +0 -2
- package/dist/core/openapi/index.js.map +0 -1
- package/dist/core/openapi/schema/formats.d.ts +0 -2
- package/dist/core/openapi/schema/formats.d.ts.map +0 -1
- package/dist/core/openapi/schema/formats.js +0 -3
- package/dist/core/openapi/schema/formats.js.map +0 -1
- package/dist/core/openapi/schema/registry.d.ts +0 -9
- package/dist/core/openapi/schema/registry.d.ts.map +0 -1
- package/dist/core/openapi/schema/registry.js +0 -21
- package/dist/core/openapi/schema/registry.js.map +0 -1
- package/dist/core/openapi/schema/schemaModel.d.ts +0 -2
- package/dist/core/openapi/schema/schemaModel.d.ts.map +0 -1
- package/dist/core/openapi/schema/schemaModel.js +0 -3
- package/dist/core/openapi/schema/schemaModel.js.map +0 -1
- package/dist/core/openapi/schema/schemaRegistry.d.ts +0 -2
- package/dist/core/openapi/schema/schemaRegistry.d.ts.map +0 -1
- package/dist/core/openapi/schema/schemaRegistry.js +0 -3
- package/dist/core/openapi/schema/schemaRegistry.js.map +0 -1
- package/dist/core/openapi/schema/toOpenApi.d.ts +0 -4
- package/dist/core/openapi/schema/toOpenApi.d.ts.map +0 -1
- package/dist/core/openapi/schema/toOpenApi.js +0 -82
- package/dist/core/openapi/schema/toOpenApi.js.map +0 -1
- package/dist/core/pipeline/compose.d.ts +0 -2
- package/dist/core/pipeline/compose.d.ts.map +0 -1
- package/dist/core/pipeline/compose.js +0 -3
- package/dist/core/pipeline/compose.js.map +0 -1
- package/dist/core/pipeline/errorMap.d.ts +0 -2
- package/dist/core/pipeline/errorMap.d.ts.map +0 -1
- package/dist/core/pipeline/errorMap.js +0 -3
- package/dist/core/pipeline/errorMap.js.map +0 -1
- package/dist/core/pipeline/invoke.d.ts +0 -2
- package/dist/core/pipeline/invoke.d.ts.map +0 -1
- package/dist/core/pipeline/invoke.js +0 -3
- package/dist/core/pipeline/invoke.js.map +0 -1
- package/dist/core/pipeline/result.d.ts +0 -2
- package/dist/core/pipeline/result.d.ts.map +0 -1
- package/dist/core/pipeline/result.js +0 -3
- package/dist/core/pipeline/result.js.map +0 -1
- package/dist/core/registry/buildRegistry.d.ts +0 -3
- package/dist/core/registry/buildRegistry.d.ts.map +0 -1
- package/dist/core/registry/buildRegistry.js +0 -105
- package/dist/core/registry/buildRegistry.js.map +0 -1
- package/dist/core/registry/conflicts.d.ts +0 -6
- package/dist/core/registry/conflicts.d.ts.map +0 -1
- package/dist/core/registry/conflicts.js +0 -21
- package/dist/core/registry/conflicts.js.map +0 -1
- package/dist/core/registry/index.d.ts +0 -5
- package/dist/core/registry/index.d.ts.map +0 -1
- package/dist/core/registry/index.js +0 -5
- package/dist/core/registry/index.js.map +0 -1
- package/dist/core/registry/normalize.d.ts +0 -3
- package/dist/core/registry/normalize.d.ts.map +0 -1
- package/dist/core/registry/normalize.js +0 -24
- package/dist/core/registry/normalize.js.map +0 -1
- package/dist/core/registry/types.d.ts +0 -225
- package/dist/core/registry/types.d.ts.map +0 -1
- package/dist/core/registry/types.js +0 -2
- package/dist/core/registry/types.js.map +0 -1
- package/dist/core/reply/index.d.ts +0 -3
- package/dist/core/reply/index.d.ts.map +0 -1
- package/dist/core/reply/index.js +0 -3
- package/dist/core/reply/index.js.map +0 -1
- package/dist/core/reply/reply.d.ts +0 -102
- package/dist/core/reply/reply.d.ts.map +0 -1
- package/dist/core/reply/reply.js +0 -105
- package/dist/core/reply/reply.js.map +0 -1
- package/dist/core/reply/typed.d.ts +0 -161
- package/dist/core/reply/typed.d.ts.map +0 -1
- package/dist/core/reply/typed.js +0 -154
- package/dist/core/reply/typed.js.map +0 -1
- package/dist/core/responses/helpers.d.ts +0 -10
- package/dist/core/responses/helpers.d.ts.map +0 -1
- package/dist/core/responses/helpers.js +0 -8
- package/dist/core/responses/helpers.js.map +0 -1
- package/dist/core/responses/index.d.ts +0 -4
- package/dist/core/responses/index.d.ts.map +0 -1
- package/dist/core/responses/index.js +0 -4
- package/dist/core/responses/index.js.map +0 -1
- package/dist/core/responses/normalize.d.ts +0 -3
- package/dist/core/responses/normalize.d.ts.map +0 -1
- package/dist/core/responses/normalize.js +0 -33
- package/dist/core/responses/normalize.js.map +0 -1
- package/dist/core/responses/pickStatus.d.ts +0 -3
- package/dist/core/responses/pickStatus.d.ts.map +0 -1
- package/dist/core/responses/pickStatus.js +0 -27
- package/dist/core/responses/pickStatus.js.map +0 -1
- package/dist/core/route/defineRoute.d.ts +0 -74
- package/dist/core/route/defineRoute.d.ts.map +0 -1
- package/dist/core/route/defineRoute.js +0 -59
- package/dist/core/route/defineRoute.js.map +0 -1
- package/dist/core/route/index.d.ts +0 -2
- package/dist/core/route/index.d.ts.map +0 -1
- package/dist/core/route/index.js +0 -2
- package/dist/core/route/index.js.map +0 -1
- package/dist/core/serialization/json.d.ts +0 -2
- package/dist/core/serialization/json.d.ts.map +0 -1
- package/dist/core/serialization/json.js +0 -3
- package/dist/core/serialization/json.js.map +0 -1
- package/dist/core/typing/path-params.d.ts +0 -2
- package/dist/core/typing/path-params.d.ts.map +0 -1
- package/dist/core/typing/path-params.js +0 -2
- package/dist/core/typing/path-params.js.map +0 -1
- package/dist/decorators/binding.d.ts +0 -9
- package/dist/decorators/binding.d.ts.map +0 -1
- package/dist/decorators/binding.js +0 -18
- package/dist/decorators/binding.js.map +0 -1
- package/dist/decorators/controller.d.ts +0 -6
- package/dist/decorators/controller.d.ts.map +0 -1
- package/dist/decorators/controller.js +0 -26
- package/dist/decorators/controller.js.map +0 -1
- package/dist/decorators/db.d.ts +0 -2
- package/dist/decorators/db.d.ts.map +0 -1
- package/dist/decorators/db.js +0 -3
- package/dist/decorators/db.js.map +0 -1
- package/dist/decorators/docs.d.ts +0 -8
- package/dist/decorators/docs.d.ts.map +0 -1
- package/dist/decorators/docs.js +0 -46
- package/dist/decorators/docs.js.map +0 -1
- package/dist/decorators/index.js +0 -7
- package/dist/decorators/index.js.map +0 -1
- package/dist/decorators/methods.js +0 -170
- package/dist/decorators/methods.js.map +0 -1
- package/dist/decorators/middleware.d.ts +0 -2
- package/dist/decorators/middleware.d.ts.map +0 -1
- package/dist/decorators/middleware.js +0 -3
- package/dist/decorators/middleware.js.map +0 -1
- package/dist/decorators/responses.d.ts +0 -7
- package/dist/decorators/responses.d.ts.map +0 -1
- package/dist/decorators/responses.js +0 -44
- package/dist/decorators/responses.js.map +0 -1
- package/dist/decorators/security.d.ts +0 -8
- package/dist/decorators/security.d.ts.map +0 -1
- package/dist/decorators/security.js +0 -39
- package/dist/decorators/security.js.map +0 -1
- package/dist/integrations/metal-orm/index.d.ts +0 -2
- package/dist/integrations/metal-orm/index.d.ts.map +0 -1
- package/dist/integrations/metal-orm/index.js +0 -2
- package/dist/integrations/metal-orm/index.js.map +0 -1
- package/dist/integrations/metal-orm/pagination/executePaged.d.ts +0 -2
- package/dist/integrations/metal-orm/pagination/executePaged.d.ts.map +0 -1
- package/dist/integrations/metal-orm/pagination/executePaged.js +0 -3
- package/dist/integrations/metal-orm/pagination/executePaged.js.map +0 -1
- package/dist/integrations/metal-orm/pagination/page.d.ts +0 -2
- package/dist/integrations/metal-orm/pagination/page.d.ts.map +0 -1
- package/dist/integrations/metal-orm/pagination/page.js +0 -3
- package/dist/integrations/metal-orm/pagination/page.js.map +0 -1
- package/dist/integrations/metal-orm/query/filters.d.ts +0 -2
- package/dist/integrations/metal-orm/query/filters.d.ts.map +0 -1
- package/dist/integrations/metal-orm/query/filters.js +0 -3
- package/dist/integrations/metal-orm/query/filters.js.map +0 -1
- package/dist/integrations/metal-orm/query/search.d.ts +0 -2
- package/dist/integrations/metal-orm/query/search.d.ts.map +0 -1
- package/dist/integrations/metal-orm/query/search.js +0 -3
- package/dist/integrations/metal-orm/query/search.js.map +0 -1
- package/dist/integrations/metal-orm/query/sort.d.ts +0 -2
- package/dist/integrations/metal-orm/query/sort.d.ts.map +0 -1
- package/dist/integrations/metal-orm/query/sort.js +0 -3
- package/dist/integrations/metal-orm/query/sort.js.map +0 -1
- package/dist/integrations/metal-orm/save-graph/helpers.d.ts +0 -2
- package/dist/integrations/metal-orm/save-graph/helpers.d.ts.map +0 -1
- package/dist/integrations/metal-orm/save-graph/helpers.js +0 -3
- package/dist/integrations/metal-orm/save-graph/helpers.js.map +0 -1
- package/dist/integrations/metal-orm/save-graph/types.d.ts +0 -2
- package/dist/integrations/metal-orm/save-graph/types.d.ts.map +0 -1
- package/dist/integrations/metal-orm/save-graph/types.js +0 -3
- package/dist/integrations/metal-orm/save-graph/types.js.map +0 -1
- package/dist/integrations/metal-orm/schema/column-map.d.ts +0 -96
- package/dist/integrations/metal-orm/schema/column-map.d.ts.map +0 -1
- package/dist/integrations/metal-orm/schema/column-map.js +0 -207
- package/dist/integrations/metal-orm/schema/column-map.js.map +0 -1
- package/dist/integrations/metal-orm/schema/ddl.d.ts +0 -2
- package/dist/integrations/metal-orm/schema/ddl.d.ts.map +0 -1
- package/dist/integrations/metal-orm/schema/ddl.js +0 -3
- package/dist/integrations/metal-orm/schema/ddl.js.map +0 -1
- package/dist/integrations/metal-orm/schema/dto.d.ts +0 -7
- package/dist/integrations/metal-orm/schema/dto.d.ts.map +0 -1
- package/dist/integrations/metal-orm/schema/dto.js +0 -34
- package/dist/integrations/metal-orm/schema/dto.js.map +0 -1
- package/dist/integrations/metal-orm/schema/entity.d.ts +0 -99
- package/dist/integrations/metal-orm/schema/entity.d.ts.map +0 -1
- package/dist/integrations/metal-orm/schema/entity.js +0 -99
- package/dist/integrations/metal-orm/schema/entity.js.map +0 -1
- package/dist/integrations/metal-orm/schema/filters.d.ts +0 -11
- package/dist/integrations/metal-orm/schema/filters.d.ts.map +0 -1
- package/dist/integrations/metal-orm/schema/filters.js +0 -21
- package/dist/integrations/metal-orm/schema/filters.js.map +0 -1
- package/dist/integrations/metal-orm/schema/index.d.ts +0 -5
- package/dist/integrations/metal-orm/schema/index.d.ts.map +0 -1
- package/dist/integrations/metal-orm/schema/index.js +0 -5
- package/dist/integrations/metal-orm/schema/index.js.map +0 -1
- package/dist/integrations/metal-orm/schema/openapi/entityToSchema.d.ts +0 -2
- package/dist/integrations/metal-orm/schema/openapi/entityToSchema.d.ts.map +0 -1
- package/dist/integrations/metal-orm/schema/openapi/entityToSchema.js +0 -3
- package/dist/integrations/metal-orm/schema/openapi/entityToSchema.js.map +0 -1
- package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.d.ts +0 -2
- package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.d.ts.map +0 -1
- package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.js +0 -3
- package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.js.map +0 -1
- package/dist/integrations/metal-orm/schema/sqlite.d.ts +0 -2
- package/dist/integrations/metal-orm/schema/sqlite.d.ts.map +0 -1
- package/dist/integrations/metal-orm/schema/sqlite.js +0 -3
- package/dist/integrations/metal-orm/schema/sqlite.js.map +0 -1
- package/dist/integrations/metal-orm/schema/tabledef.d.ts +0 -4
- package/dist/integrations/metal-orm/schema/tabledef.d.ts.map +0 -1
- package/dist/integrations/metal-orm/schema/tabledef.js +0 -10
- package/dist/integrations/metal-orm/schema/tabledef.js.map +0 -1
- package/dist/integrations/metal-orm/schema/types.d.ts +0 -7
- package/dist/integrations/metal-orm/schema/types.d.ts.map +0 -1
- package/dist/integrations/metal-orm/schema/types.js +0 -2
- package/dist/integrations/metal-orm/schema/types.js.map +0 -1
- package/dist/integrations/metal-orm/serialization/entitySerializer.d.ts +0 -2
- package/dist/integrations/metal-orm/serialization/entitySerializer.d.ts.map +0 -1
- package/dist/integrations/metal-orm/serialization/entitySerializer.js +0 -3
- package/dist/integrations/metal-orm/serialization/entitySerializer.js.map +0 -1
- package/dist/integrations/metal-orm/serialization/relationPolicy.d.ts +0 -2
- package/dist/integrations/metal-orm/serialization/relationPolicy.d.ts.map +0 -1
- package/dist/integrations/metal-orm/serialization/relationPolicy.js +0 -3
- package/dist/integrations/metal-orm/serialization/relationPolicy.js.map +0 -1
- package/dist/integrations/metal-orm/session/context.d.ts +0 -2
- package/dist/integrations/metal-orm/session/context.d.ts.map +0 -1
- package/dist/integrations/metal-orm/session/context.js +0 -3
- package/dist/integrations/metal-orm/session/context.js.map +0 -1
- package/dist/integrations/metal-orm/session/middleware.d.ts +0 -2
- package/dist/integrations/metal-orm/session/middleware.d.ts.map +0 -1
- package/dist/integrations/metal-orm/session/middleware.js +0 -3
- package/dist/integrations/metal-orm/session/middleware.js.map +0 -1
- package/dist/integrations/metal-orm/session/transaction.d.ts +0 -2
- package/dist/integrations/metal-orm/session/transaction.d.ts.map +0 -1
- package/dist/integrations/metal-orm/session/transaction.js +0 -3
- package/dist/integrations/metal-orm/session/transaction.js.map +0 -1
- package/dist/integrations/metal-orm/testing/setupSchema.d.ts +0 -2
- package/dist/integrations/metal-orm/testing/setupSchema.d.ts.map +0 -1
- package/dist/integrations/metal-orm/testing/setupSchema.js +0 -3
- package/dist/integrations/metal-orm/testing/setupSchema.js.map +0 -1
- package/dist/integrations/metal-orm/testing/sqliteMemory.d.ts +0 -2
- package/dist/integrations/metal-orm/testing/sqliteMemory.d.ts.map +0 -1
- package/dist/integrations/metal-orm/testing/sqliteMemory.js +0 -3
- package/dist/integrations/metal-orm/testing/sqliteMemory.js.map +0 -1
- package/dist/metadata/bag.d.ts +0 -18
- package/dist/metadata/bag.d.ts.map +0 -1
- package/dist/metadata/bag.js +0 -39
- package/dist/metadata/bag.js.map +0 -1
- package/dist/metadata/index.d.ts +0 -4
- package/dist/metadata/index.d.ts.map +0 -1
- package/dist/metadata/index.js +0 -4
- package/dist/metadata/index.js.map +0 -1
- package/dist/metadata/keys.d.ts +0 -254
- package/dist/metadata/keys.d.ts.map +0 -1
- package/dist/metadata/keys.js +0 -23
- package/dist/metadata/keys.js.map +0 -1
- package/dist/metadata/merge.d.ts +0 -9
- package/dist/metadata/merge.d.ts.map +0 -1
- package/dist/metadata/merge.js +0 -30
- package/dist/metadata/merge.js.map +0 -1
- package/dist/metal-orm.d.ts +0 -2
- package/dist/metal-orm.d.ts.map +0 -1
- package/dist/metal-orm.js +0 -2
- package/dist/metal-orm.js.map +0 -1
- package/dist/validation/native/index.d.ts +0 -3
- package/dist/validation/native/index.d.ts.map +0 -1
- package/dist/validation/native/index.js +0 -3
- package/dist/validation/native/index.js.map +0 -1
- package/dist/validation/native/ir.d.ts +0 -38
- package/dist/validation/native/ir.d.ts.map +0 -1
- package/dist/validation/native/ir.js +0 -2
- package/dist/validation/native/ir.js.map +0 -1
- package/dist/validation/native/schema.d.ts +0 -63
- package/dist/validation/native/schema.d.ts.map +0 -1
- package/dist/validation/native/schema.js +0 -271
- package/dist/validation/native/schema.js.map +0 -1
- package/dist/validation/native/validator.d.ts +0 -21
- package/dist/validation/native/validator.d.ts.map +0 -1
- package/dist/validation/native/validator.js +0 -48
- package/dist/validation/native/validator.js.map +0 -1
package/dist/cli.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/compiler/runner/createProgram.ts","../src/compiler/analyze/scanControllers.ts","../src/utils/operationId.ts","../src/compiler/schema/openapi.ts","../src/compiler/schema/typeToJsonSchema.ts","../src/compiler/schema/extractAnnotations.ts","../src/compiler/manifest/emit.ts","../src/compiler/validation/emitPrecompiledValidators.ts","../src/compiler/cache/isStale.ts","../src/compiler/cache/writeCache.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { writeFileSync, mkdirSync, rmSync, existsSync, readFileSync } from \"node:fs\";\nimport { resolve, dirname } from \"node:path\";\nimport { createProgramFromConfig } from \"./compiler/runner/createProgram.js\";\nimport { scanControllers } from \"./compiler/analyze/scanControllers.js\";\nimport { generateOpenAPI } from \"./compiler/schema/openapi.js\";\nimport { generateManifest } from \"./compiler/manifest/emit.js\";\nimport { emitPrecompiledValidators } from \"./compiler/validation/emitPrecompiledValidators.js\";\nimport { isStale } from \"./compiler/cache/isStale.js\";\nimport { writeCache } from \"./compiler/cache/writeCache.js\";\nimport ts from \"typescript\";\nimport process from \"node:process\";\n\nconst ADORN_VERSION = \"0.1.0\";\n\ntype ValidationMode = \"none\" | \"ajv-runtime\" | \"precompiled\";\n\nfunction log(msg: string) {\n process.stdout.write(msg + \"\\n\");\n}\n\nfunction debug(...args: unknown[]) {\n if (process.env.ADORN_DEBUG) {\n console.error(\"[adorn-api]\", ...args);\n }\n}\n\nasync function buildCommand(args: string[]) {\n const projectIndex = args.indexOf(\"-p\");\n const projectPath = projectIndex !== -1 ? args[projectIndex + 1] : \"./tsconfig.json\";\n const outputDir = args.includes(\"--output\")\n ? args[args.indexOf(\"--output\") + 1]\n : \".adorn\";\n const ifStale = args.includes(\"--if-stale\");\n \n const validationModeIndex = args.indexOf(\"--validation-mode\");\n const validationMode: ValidationMode = validationModeIndex !== -1 \n ? (args[validationModeIndex + 1] as ValidationMode) \n : \"ajv-runtime\";\n\n if (validationMode !== \"none\" && validationMode !== \"ajv-runtime\" && validationMode !== \"precompiled\") {\n console.error(`Invalid validation mode: ${validationMode}. Valid values: none, ajv-runtime, precompiled`);\n process.exit(1);\n }\n\n const outputPath = resolve(outputDir);\n\n if (ifStale) {\n const stale = await isStale({\n outDir: outputDir,\n project: projectPath,\n adornVersion: ADORN_VERSION,\n typescriptVersion: ts.version\n });\n\n if (!stale.stale) {\n log(\"adorn-api: artifacts up-to-date\");\n return;\n }\n\n log(`adorn-api: building artifacts (reason: ${stale.reason}${stale.detail ? `: ${stale.detail}` : \"\"})`);\n debug(\"Stale detail:\", stale.detail);\n } else {\n log(\"adorn-api: building artifacts (reason: forced-build)\");\n }\n\n const { program, checker, sourceFiles } = createProgramFromConfig(projectPath);\n const controllers = scanControllers(sourceFiles, checker);\n\n if (controllers.length === 0) {\n console.warn(\"No controllers found!\");\n process.exit(1);\n }\n\n log(`Found ${controllers.length} controller(s)`);\n\n const openapi = generateOpenAPI(controllers, checker, { title: \"API\", version: \"1.0.0\" });\n const manifest = generateManifest(controllers, checker, ADORN_VERSION, validationMode);\n\n mkdirSync(outputPath, { recursive: true });\n\n writeFileSync(resolve(outputPath, \"openapi.json\"), JSON.stringify(openapi, null, 2));\n writeFileSync(resolve(outputPath, \"manifest.json\"), JSON.stringify(manifest, null, 2));\n\n if (validationMode === \"precompiled\") {\n log(\"Generating precompiled validators...\");\n \n const manifestObj = JSON.parse(readFileSync(resolve(outputPath, \"manifest.json\"), \"utf-8\"));\n \n await emitPrecompiledValidators({\n outDir: outputPath,\n openapi,\n manifest: manifestObj,\n strict: \"off\",\n formatsMode: \"full\"\n });\n\n manifestObj.validation = {\n mode: \"precompiled\",\n precompiledModule: \"./validators.mjs\"\n };\n \n writeFileSync(resolve(outputPath, \"manifest.json\"), JSON.stringify(manifestObj, null, 2));\n \n log(\" - validators.cjs\");\n log(\" - validators.mjs\");\n log(\" - validators.meta.json\");\n }\n\n writeCache({\n outDir: outputDir,\n tsconfigAbs: resolve(projectPath),\n program,\n adornVersion: ADORN_VERSION\n });\n\n log(`Written to ${outputPath}/`);\n log(\" - openapi.json\");\n log(\" - manifest.json\");\n log(\" - cache.json\");\n}\n\nfunction cleanCommand(args: string[]) {\n const outputDir = args.includes(\"--output\")\n ? args[args.indexOf(\"--output\") + 1]\n : \".adorn\";\n\n const outputPath = resolve(outputDir);\n\n if (existsSync(outputPath)) {\n rmSync(outputPath, { recursive: true, force: true });\n }\n\n log(`adorn-api: cleaned ${outputDir}`);\n}\n\nconst command = process.argv[2];\n\nif (command === \"build\") {\n buildCommand(process.argv.slice(3)).catch((err) => {\n console.error(err);\n process.exit(1);\n });\n} else if (command === \"clean\") {\n cleanCommand(process.argv.slice(3));\n} else {\n console.log(`\nadorn-api CLI\n\nCommands:\n build Generate OpenAPI and manifest from TypeScript source\n clean Remove generated artifacts\n\nOptions:\n -p <path> Path to tsconfig.json (default: ./tsconfig.json)\n --output <dir> Output directory (default: .adorn)\n --if-stale Only rebuild if artifacts are stale\n --validation-mode <mode> Validation mode: none, ajv-runtime, precompiled (default: ajv-runtime)\n\nExamples:\n adorn-api build -p ./tsconfig.json --output .adorn\n adorn-api build --if-stale\n adorn-api build --validation-mode precompiled\n adorn-api clean\n `);\n}\n","import ts from \"typescript\";\nimport { readFileSync } from \"node:fs\";\nimport { resolve, dirname } from \"node:path\";\n\nexport interface ProgramContext {\n program: ts.Program;\n checker: ts.TypeChecker;\n sourceFiles: ts.SourceFile[];\n}\n\nexport function createProgramFromConfig(tsconfigPath: string): ProgramContext {\n const absolutePath = resolve(tsconfigPath);\n const configDir = dirname(absolutePath);\n\n const configFile = ts.readConfigFile(absolutePath, (path) => readFileSync(path, \"utf-8\"));\n if (configFile.error) {\n throw new Error(`Failed to read tsconfig: ${ts.flattenDiagnosticMessageText(configFile.error.messageText, \"\\n\")}`);\n }\n\n const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, configDir);\n if (parsed.errors.length > 0) {\n const messages = parsed.errors.map(e => ts.flattenDiagnosticMessageText(e.messageText, \"\\n\"));\n throw new Error(`Failed to parse tsconfig:\\n${messages.join(\"\\n\")}`);\n }\n\n const program = ts.createProgram(parsed.fileNames, parsed.options);\n const checker = program.getTypeChecker();\n\n const sourceFiles = program.getSourceFiles().filter(sf =>\n !sf.isDeclarationFile &&\n !sf.fileName.includes(\"node_modules\")\n );\n\n return { program, checker, sourceFiles };\n}\n","import ts from \"typescript\";\nimport { defaultOperationId } from \"../../utils/operationId.js\";\n\nexport interface ScannedController {\n className: string;\n basePath: string;\n sourceFile: ts.SourceFile;\n classDeclaration: ts.ClassDeclaration;\n operations: ScannedOperation[];\n consumes?: string[];\n produces?: string[];\n}\n\nexport interface ScannedOperation {\n methodName: string;\n httpMethod: string;\n path: string;\n operationId: string;\n methodDeclaration: ts.MethodDeclaration;\n returnType: ts.Type;\n parameters: ScannedParameter[];\n pathParamIndices: number[];\n bodyParamIndex: number | null;\n queryParamIndices: number[];\n queryObjectParamIndex: number | null;\n headerObjectParamIndex: number | null;\n cookieObjectParamIndex: number | null;\n bodyContentType?: string;\n}\n\nexport interface ScannedParameter {\n name: string;\n index: number;\n type: ts.Type;\n isOptional: boolean;\n paramNode?: ts.ParameterDeclaration;\n}\n\nexport function scanControllers(\n sourceFiles: ts.SourceFile[],\n checker: ts.TypeChecker\n): ScannedController[] {\n const controllers: ScannedController[] = [];\n\n for (const sourceFile of sourceFiles) {\n ts.forEachChild(sourceFile, (node) => {\n if (ts.isClassDeclaration(node) && node.name) {\n const controller = analyzeClass(node, sourceFile, checker);\n if (controller) {\n controllers.push(controller);\n }\n }\n });\n }\n\n return controllers;\n}\n\nfunction analyzeClass(\n node: ts.ClassDeclaration,\n sourceFile: ts.SourceFile,\n checker: ts.TypeChecker\n): ScannedController | null {\n if (!node.name) return null;\n\n const controllerDecorator = findDecorator(node, \"Controller\");\n if (!controllerDecorator) return null;\n\n const basePath = extractDecoratorStringArg(controllerDecorator) ?? \"/\";\n const className = node.name.text;\n\n const consumes = extractClassConsumes(node, checker);\n const produces = extractClassProduces(node, checker);\n\n const operations: ScannedOperation[] = [];\n\n for (const member of node.members) {\n if (ts.isMethodDeclaration(member) && member.name) {\n const operation = analyzeMethod(member, className, checker);\n if (operation) {\n operations.push(operation);\n }\n }\n }\n\n if (operations.length === 0) return null;\n\n return {\n className,\n basePath,\n sourceFile,\n classDeclaration: node,\n operations,\n consumes,\n produces,\n };\n}\n\nfunction extractClassConsumes(node: ts.ClassDeclaration, checker: ts.TypeChecker): string[] | undefined {\n const decorator = findDecorator(node, \"Consumes\");\n if (!decorator) return undefined;\n\n const callExpr = decorator.expression;\n if (!ts.isCallExpression(callExpr)) return undefined;\n const args = callExpr.arguments;\n if (args.length === 0) return undefined;\n\n const firstArg = args[0];\n if (ts.isStringLiteral(firstArg)) {\n return [firstArg.text];\n }\n if (ts.isArrayLiteralExpression(firstArg)) {\n return firstArg.elements\n .filter(ts.isStringLiteral)\n .map(e => e.text);\n }\n return undefined;\n}\n\nfunction extractClassProduces(node: ts.ClassDeclaration, checker: ts.TypeChecker): string[] | undefined {\n const decorator = findDecorator(node, \"Produces\");\n if (!decorator) return undefined;\n\n const callExpr = decorator.expression;\n if (!ts.isCallExpression(callExpr)) return undefined;\n const args = callExpr.arguments;\n if (args.length === 0) return undefined;\n\n const firstArg = args[0];\n if (ts.isStringLiteral(firstArg)) {\n return [firstArg.text];\n }\n if (ts.isArrayLiteralExpression(firstArg)) {\n return firstArg.elements\n .filter(ts.isStringLiteral)\n .map(e => e.text);\n }\n return undefined;\n}\n\nfunction analyzeMethod(\n node: ts.MethodDeclaration,\n className: string,\n checker: ts.TypeChecker\n): ScannedOperation | null {\n const methodName = ts.isIdentifier(node.name) ? node.name.text : null;\n if (!methodName) return null;\n\n const httpMethods = [\"Get\", \"Post\", \"Put\", \"Patch\", \"Delete\"];\n let httpMethod: string | null = null;\n let path = \"/\";\n\n for (const method of httpMethods) {\n const decorator = findDecorator(node, method);\n if (decorator) {\n httpMethod = method.toUpperCase();\n path = extractDecoratorStringArg(decorator) ?? \"/\";\n break;\n }\n }\n\n if (!httpMethod) return null;\n\n const signature = checker.getSignatureFromDeclaration(node);\n if (!signature) return null;\n\n let returnType = checker.getReturnTypeOfSignature(signature);\n returnType = unwrapPromise(returnType, checker);\n\n const parameters: ScannedParameter[] = [];\n for (let i = 0; i < node.parameters.length; i++) {\n const param = node.parameters[i];\n const paramName = ts.isIdentifier(param.name) ? param.name.text : `arg${i}`;\n const paramType = checker.getTypeAtLocation(param);\n const isOptional = !!param.questionToken || !!param.initializer;\n\n parameters.push({\n name: paramName,\n index: i,\n type: paramType,\n isOptional,\n paramNode: param,\n });\n }\n\n const pathParamNames = extractPathParams(path);\n const pathParamIndices = matchPathParamsToIndices(pathParamNames, parameters);\n \n const { bodyParamIndex, queryParamIndices, queryObjectParamIndex, headerObjectParamIndex, cookieObjectParamIndex, bodyContentType } = \n classifyParameters(parameters, httpMethod, pathParamIndices, checker);\n\n return {\n methodName,\n httpMethod,\n path,\n operationId: defaultOperationId(className, methodName),\n methodDeclaration: node,\n returnType,\n parameters,\n pathParamIndices,\n bodyParamIndex,\n queryParamIndices,\n queryObjectParamIndex,\n headerObjectParamIndex,\n cookieObjectParamIndex,\n bodyContentType,\n };\n}\n\nfunction extractPathParams(path: string): string[] {\n const matches = path.match(/:([^/]+)/g);\n if (!matches) return [];\n return matches.map(m => m.slice(1));\n}\n\nfunction matchPathParamsToIndices(pathParamNames: string[], parameters: ScannedParameter[]): number[] {\n const indices: number[] = [];\n for (const name of pathParamNames) {\n const param = parameters.find(p => p.name === name);\n if (param) {\n indices.push(param.index);\n }\n }\n return indices;\n}\n\nfunction classifyParameters(\n parameters: ScannedParameter[],\n httpMethod: string,\n pathParamIndices: number[],\n checker: ts.TypeChecker\n): {\n bodyParamIndex: number | null;\n queryParamIndices: number[];\n queryObjectParamIndex: number | null;\n headerObjectParamIndex: number | null;\n cookieObjectParamIndex: number | null;\n bodyContentType: string | undefined;\n} {\n const usedIndices = new Set(pathParamIndices);\n const queryParamIndices: number[] = [];\n let bodyParamIndex: number | null = null;\n let queryObjectParamIndex: number | null = null;\n let headerObjectParamIndex: number | null = null;\n let cookieObjectParamIndex: number | null = null;\n\n const isBodyMethod = [\"POST\", \"PUT\", \"PATCH\"].includes(httpMethod);\n\n for (let i = 0; i < parameters.length; i++) {\n const param = parameters[i];\n if (usedIndices.has(i)) continue;\n\n const typeStr = param.type.getSymbol()?.getName() ?? \"\";\n\n if (typeStr === \"Body\") {\n bodyParamIndex = i;\n usedIndices.add(i);\n continue;\n }\n\n if (typeStr === \"Query\") {\n queryObjectParamIndex = i;\n usedIndices.add(i);\n continue;\n }\n\n if (typeStr === \"Headers\") {\n headerObjectParamIndex = i;\n usedIndices.add(i);\n continue;\n }\n\n if (typeStr === \"Cookies\") {\n cookieObjectParamIndex = i;\n usedIndices.add(i);\n continue;\n }\n\n if (isBodyMethod && bodyParamIndex === null) {\n bodyParamIndex = i;\n usedIndices.add(i);\n continue;\n }\n\n const isObj = isObjectType(param.type, checker);\n if (isObj && queryObjectParamIndex === null && !isBodyMethod) {\n queryObjectParamIndex = i;\n usedIndices.add(i);\n continue;\n }\n\n queryParamIndices.push(i);\n usedIndices.add(i);\n }\n\n return {\n bodyParamIndex,\n queryParamIndices,\n queryObjectParamIndex,\n headerObjectParamIndex,\n cookieObjectParamIndex,\n bodyContentType: undefined,\n };\n}\n\nfunction isObjectType(type: ts.Type, checker: ts.TypeChecker): boolean {\n const objectFlags = (type.flags & ts.TypeFlags.Object) !== 0;\n if (!objectFlags) return false;\n\n const symbol = type.getSymbol();\n if (symbol?.getName() === \"__object\") return true;\n\n const properties = checker.getPropertiesOfType(type);\n if (properties.length > 0) return true;\n\n const callSignatures = type.getCallSignatures();\n if (callSignatures && callSignatures.length > 0) return false;\n\n return true;\n}\n\nfunction findDecorator(node: ts.HasDecorators, name: string): ts.Decorator | null {\n const decorators = ts.getDecorators(node);\n if (!decorators) return null;\n\n for (const decorator of decorators) {\n if (ts.isCallExpression(decorator.expression)) {\n const expr = decorator.expression.expression;\n if (ts.isIdentifier(expr) && expr.text === name) {\n return decorator;\n }\n }\n }\n return null;\n}\n\nfunction extractDecoratorStringArg(decorator: ts.Decorator): string | null {\n if (ts.isCallExpression(decorator.expression)) {\n const arg = decorator.expression.arguments[0];\n if (arg && ts.isStringLiteral(arg)) {\n return arg.text;\n }\n }\n return null;\n}\n\nfunction unwrapPromise(type: ts.Type, checker: ts.TypeChecker): ts.Type {\n const symbol = type.getSymbol();\n if (symbol?.getName() === \"Promise\") {\n const typeArgs = (type as ts.TypeReference).typeArguments;\n if (typeArgs && typeArgs.length > 0) {\n return typeArgs[0];\n }\n }\n return type;\n}\n","export function defaultOperationId(controllerName: string, methodName: string): string {\n return `${controllerName}_${methodName}`;\n}\n","import ts from \"typescript\";\nimport type { ScannedController, ScannedOperation, ScannedParameter } from \"../analyze/scanControllers.js\";\nimport { typeToJsonSchema, createSchemaContext } from \"./typeToJsonSchema.js\";\nimport { extractPropertySchemaFragments, mergeFragments } from \"./extractAnnotations.js\";\nimport type { SchemaContext, JsonSchema } from \"./typeToJsonSchema.js\";\n\nexport interface OpenAPI31 {\n openapi: \"3.1.0\";\n info: {\n title: string;\n version: string;\n };\n components: {\n schemas: Record<string, JsonSchema>;\n };\n paths: Record<string, Record<string, any>>;\n}\n\nexport function generateOpenAPI(\n controllers: ScannedController[],\n checker: ts.TypeChecker,\n options: { title?: string; version?: string } = {}\n): OpenAPI31 {\n const components = new Map<string, JsonSchema>();\n const ctx: SchemaContext = {\n checker,\n components,\n typeStack: new Set(),\n typeNameStack: [],\n };\n\n const paths: Record<string, Record<string, any>> = {};\n\n for (const controller of controllers) {\n for (const operation of controller.operations) {\n const fullPath = convertToOpenApiPath(controller.basePath, operation.path);\n\n if (!paths[fullPath]) {\n paths[fullPath] = {};\n }\n\n const method = operation.httpMethod.toLowerCase();\n paths[fullPath][method] = buildOperation(operation, ctx, controller.consumes);\n }\n }\n\n return {\n openapi: \"3.1.0\",\n info: {\n title: options.title ?? \"API\",\n version: options.version ?? \"1.0.0\",\n },\n components: {\n schemas: Object.fromEntries(components),\n },\n paths,\n };\n}\n\nfunction convertToOpenApiPath(basePath: string, path: string): string {\n const base = basePath.endsWith(\"/\") ? basePath.slice(0, -1) : basePath;\n const converted = path.replace(/:([^/]+)/g, \"{$1}\");\n return base + converted || \"/\";\n}\n\nfunction buildOperation(operation: ScannedOperation, ctx: SchemaContext, controllerConsumes?: string[]): any {\n const op: any = {\n operationId: operation.operationId,\n responses: {},\n };\n\n const parameters: any[] = [];\n\n buildPathParameters(operation, ctx, parameters);\n buildQueryParameters(operation, ctx, parameters);\n buildHeaderParameters(operation, ctx, parameters);\n buildCookieParameters(operation, ctx, parameters);\n\n if (parameters.length > 0) {\n op.parameters = parameters;\n }\n\n const responseSchema = typeToJsonSchema(operation.returnType, ctx);\n\n const status = operation.httpMethod === \"POST\" ? 201 : 200;\n op.responses[status] = {\n description: status === 201 ? \"Created\" : \"OK\",\n content: {\n \"application/json\": {\n schema: responseSchema,\n },\n },\n };\n\n if ([\"POST\", \"PUT\", \"PATCH\"].includes(operation.httpMethod) && operation.bodyParamIndex !== null) {\n const bodyParam = operation.parameters[operation.bodyParamIndex];\n if (bodyParam) {\n let bodySchema = typeToJsonSchema(bodyParam.type, ctx);\n bodySchema = mergeBodySchemaAnnotations(bodyParam, ctx, bodySchema);\n \n const contentType = operation.bodyContentType ?? controllerConsumes?.[0] ?? \"application/json\";\n \n const requestBody: any = {\n required: !bodyParam.isOptional,\n content: {},\n };\n\n if (contentType === \"multipart/form-data\") {\n requestBody.content[\"multipart/form-data\"] = {\n schema: bodySchema,\n };\n } else {\n requestBody.content[contentType] = {\n schema: bodySchema,\n };\n }\n\n op.requestBody = requestBody;\n }\n }\n\n return op;\n}\n\nfunction mergeBodySchemaAnnotations(\n bodyParam: ScannedParameter,\n ctx: SchemaContext,\n schema: JsonSchema\n): JsonSchema {\n if (!schema.properties) return schema;\n\n const typeSymbol = bodyParam.type.getSymbol();\n if (!typeSymbol) return schema;\n\n const declarations = typeSymbol.getDeclarations();\n if (!declarations || declarations.length === 0) return schema;\n\n const classDecl = declarations[0];\n if (!ts.isClassDeclaration(classDecl)) return schema;\n\n const result = { ...schema };\n const props = { ...result.properties as Record<string, JsonSchema> };\n\n for (const member of classDecl.members) {\n if (!ts.isPropertyDeclaration(member) || !member.name) continue;\n\n const propName = ts.isIdentifier(member.name) ? member.name.text : null;\n if (!propName) continue;\n if (!props[propName]) continue;\n\n const frags = extractPropertySchemaFragments(ctx.checker, member);\n if (frags.length > 0) {\n props[propName] = mergeFragments(props[propName] as Record<string, unknown>, ...frags) as JsonSchema;\n }\n }\n\n result.properties = props;\n return result;\n}\n\nfunction buildPathParameters(operation: ScannedOperation, ctx: SchemaContext, parameters: any[]): void {\n for (const paramIndex of operation.pathParamIndices) {\n const param = operation.parameters[paramIndex];\n if (param) {\n let paramSchema = typeToJsonSchema(param.type, ctx);\n if (param.paramNode) {\n const frags = extractPropertySchemaFragments(ctx.checker, param.paramNode);\n if (frags.length > 0) {\n paramSchema = mergeFragments(paramSchema as Record<string, unknown>, ...frags) as JsonSchema;\n }\n }\n parameters.push({\n name: param.name,\n in: \"path\",\n required: !param.isOptional,\n schema: paramSchema.$ref\n ? { type: \"string\", $ref: paramSchema.$ref }\n : paramSchema,\n });\n }\n }\n}\n\nfunction buildQueryParameters(operation: ScannedOperation, ctx: SchemaContext, parameters: any[]): void {\n if (operation.queryObjectParamIndex !== null) {\n const queryParam = operation.parameters[operation.queryObjectParamIndex];\n if (!queryParam) return;\n\n const querySchema = typeToJsonSchema(queryParam.type, ctx);\n if (!querySchema.properties) return;\n\n const queryObjProps = querySchema.properties;\n for (const [propName, propSchema] of Object.entries(queryObjProps as Record<string, any>)) {\n const isRequired = querySchema.required?.includes(propName) ?? false;\n const serialization = determineQuerySerialization(propSchema.type);\n parameters.push({\n name: propName,\n in: \"query\",\n required: isRequired,\n schema: propSchema,\n ...(Object.keys(serialization).length > 0 ? serialization : {}),\n });\n }\n }\n\n for (const paramIndex of operation.queryParamIndices) {\n const param = operation.parameters[paramIndex];\n if (param) {\n let paramSchema = typeToJsonSchema(param.type, ctx);\n if (param.paramNode) {\n const frags = extractPropertySchemaFragments(ctx.checker, param.paramNode);\n if (frags.length > 0) {\n paramSchema = mergeFragments(paramSchema as Record<string, unknown>, ...frags) as JsonSchema;\n }\n }\n const serialization = determineQuerySerialization(paramSchema.type);\n parameters.push({\n name: param.name,\n in: \"query\",\n required: !param.isOptional,\n schema: paramSchema.$ref\n ? { type: \"string\", $ref: paramSchema.$ref }\n : paramSchema,\n ...(Object.keys(serialization).length > 0 ? serialization : {}),\n });\n }\n }\n}\n\nfunction determineQuerySerialization(schemaType: string | string[] | undefined): { style?: string; explode?: boolean } {\n const typeArray = Array.isArray(schemaType) ? schemaType : schemaType ? [schemaType] : [];\n const isArray = typeArray.includes(\"array\");\n \n if (isArray) {\n return { style: \"form\", explode: true };\n }\n \n return {};\n}\n\nfunction buildHeaderParameters(operation: ScannedOperation, ctx: SchemaContext, parameters: any[]): void {\n if (operation.headerObjectParamIndex === null) return;\n\n const headerParam = operation.parameters[operation.headerObjectParamIndex];\n if (!headerParam) return;\n\n const headerSchema = typeToJsonSchema(headerParam.type, ctx);\n if (!headerSchema.properties) return;\n\n const headerObjProps = headerSchema.properties;\n for (const [propName, propSchema] of Object.entries(headerObjProps as Record<string, any>)) {\n const isRequired = headerSchema.required?.includes(propName) ?? false;\n parameters.push({\n name: propName,\n in: \"header\",\n required: isRequired,\n schema: propSchema,\n });\n }\n}\n\nfunction buildCookieParameters(operation: ScannedOperation, ctx: SchemaContext, parameters: any[]): void {\n if (operation.cookieObjectParamIndex === null) return;\n\n const cookieParam = operation.parameters[operation.cookieObjectParamIndex];\n if (!cookieParam) return;\n\n const cookieSchema = typeToJsonSchema(cookieParam.type, ctx);\n if (!cookieSchema.properties) return;\n\n const cookieObjProps = cookieSchema.properties;\n for (const [propName, propSchema] of Object.entries(cookieObjProps as Record<string, any>)) {\n const isRequired = cookieSchema.required?.includes(propName) ?? false;\n parameters.push({\n name: propName,\n in: \"cookie\",\n required: isRequired,\n schema: propSchema,\n style: \"form\",\n explode: true,\n });\n }\n}\n","import ts from \"typescript\";\n\nexport interface JsonSchema {\n type?: string | string[];\n properties?: Record<string, JsonSchema>;\n required?: string[];\n items?: JsonSchema;\n enum?: (string | number | boolean)[];\n $ref?: string;\n nullable?: boolean;\n description?: string;\n default?: unknown;\n examples?: unknown[];\n example?: unknown;\n anyOf?: JsonSchema[];\n oneOf?: JsonSchema[];\n allOf?: JsonSchema[];\n discriminator?: DiscriminatorObject;\n additionalProperties?: boolean | JsonSchema;\n unevaluatedProperties?: boolean | JsonSchema;\n format?: string;\n pattern?: string;\n minimum?: number;\n maximum?: number;\n exclusiveMinimum?: number;\n exclusiveMaximum?: number;\n minLength?: number;\n maxLength?: number;\n minItems?: number;\n maxItems?: number;\n minProperties?: number;\n maxProperties?: number;\n multipleOf?: number;\n const?: unknown;\n uniqueItems?: boolean;\n title?: string;\n}\n\nexport interface DiscriminatorObject {\n propertyName: string;\n mapping?: Record<string, string>;\n}\n\nexport interface SchemaContext {\n checker: ts.TypeChecker;\n components: Map<string, JsonSchema>;\n typeStack: Set<ts.Type>;\n typeNameStack: string[];\n}\n\nexport function typeToJsonSchema(\n type: ts.Type,\n ctx: SchemaContext,\n typeNode?: ts.TypeNode\n): JsonSchema {\n const { checker } = ctx;\n\n if (type.flags & ts.TypeFlags.Undefined) {\n return {};\n }\n if (type.flags & ts.TypeFlags.Null) {\n return { type: \"null\" };\n }\n\n if (type.flags & ts.TypeFlags.String) {\n return { type: \"string\" };\n }\n if (type.flags & ts.TypeFlags.Number) {\n return { type: \"number\" };\n }\n if (type.flags & ts.TypeFlags.Boolean) {\n return { type: \"boolean\" };\n }\n if (type.flags & ts.TypeFlags.BigInt) {\n return {\n type: \"string\",\n format: \"int64\",\n pattern: \"^-?\\\\d+$\"\n };\n }\n\n if (type.flags & ts.TypeFlags.StringLiteral) {\n const value = (type as ts.StringLiteralType).value;\n return { type: \"string\", enum: [value] };\n }\n if (type.flags & ts.TypeFlags.NumberLiteral) {\n const value = (type as ts.NumberLiteralType).value;\n return { type: \"number\", enum: [value] };\n }\n if (type.flags & ts.TypeFlags.BooleanLiteral) {\n const intrinsic = (type as any).intrinsicName;\n return { type: \"boolean\", enum: [intrinsic === \"true\"] };\n }\n\n if (type.isUnion()) {\n return handleUnion(type.types, ctx, typeNode);\n }\n\n if (type.isIntersection()) {\n return handleIntersection(type.types, ctx, typeNode);\n }\n\n if (checker.isArrayType(type)) {\n const typeArgs = (type as ts.TypeReference).typeArguments;\n const itemType = typeArgs?.[0];\n const items = itemType ? typeToJsonSchema(itemType, ctx) : {};\n return {\n type: \"array\",\n items,\n uniqueItems: isSetType(type, checker) ? true : undefined,\n };\n }\n\n if (type.flags & ts.TypeFlags.Object) {\n return handleObjectType(type as ts.ObjectType, ctx, typeNode);\n }\n\n return {};\n}\n\nfunction isSetType(type: ts.Type, checker: ts.TypeChecker): boolean {\n const symbol = type.getSymbol();\n if (!symbol) return false;\n const name = symbol.getName();\n if (name === \"Set\") return true;\n return false;\n}\n\nfunction handleUnion(\n types: readonly ts.Type[],\n ctx: SchemaContext,\n typeNode?: ts.TypeNode\n): JsonSchema {\n const nullType = types.find(t => t.flags & ts.TypeFlags.Null);\n const otherTypes = types.filter(t => !(t.flags & ts.TypeFlags.Null) && !(t.flags & ts.TypeFlags.Undefined));\n\n const allStringLiterals = otherTypes.every(t => t.flags & ts.TypeFlags.StringLiteral);\n if (allStringLiterals && otherTypes.length > 0) {\n const enumValues = otherTypes.map(t => (t as ts.StringLiteralType).value);\n const schema: JsonSchema = { type: \"string\", enum: enumValues };\n if (nullType) {\n schema.type = [\"string\", \"null\"];\n }\n return schema;\n }\n\n if (otherTypes.length === 1 && nullType) {\n const innerSchema = typeToJsonSchema(otherTypes[0], ctx);\n if (typeof innerSchema.type === \"string\") {\n innerSchema.type = [innerSchema.type, \"null\"];\n }\n return innerSchema;\n }\n\n if (otherTypes.length > 1) {\n const branches = otherTypes.map(t => typeToJsonSchema(t, ctx));\n const hasNull = !!nullType;\n\n const result: JsonSchema = {};\n\n if (hasNull) {\n result.anyOf = [...branches, { type: \"null\" }];\n } else {\n result.anyOf = branches;\n }\n\n const discriminatorResult = detectDiscriminatedUnion(otherTypes, ctx, branches);\n if (discriminatorResult) {\n result.oneOf = branches;\n result.discriminator = discriminatorResult;\n }\n\n return result;\n }\n\n if (otherTypes.length === 1) {\n return typeToJsonSchema(otherTypes[0], ctx);\n }\n\n return {};\n}\n\nfunction handleIntersection(\n types: readonly ts.Type[],\n ctx: SchemaContext,\n typeNode?: ts.TypeNode\n): JsonSchema {\n const brandCollapsed = tryCollapseBrandedIntersection(types, ctx, typeNode);\n if (brandCollapsed) {\n return brandCollapsed;\n }\n\n const allOf: JsonSchema[] = [];\n for (const t of types) {\n allOf.push(typeToJsonSchema(t, ctx));\n }\n\n return { allOf };\n}\n\nfunction tryCollapseBrandedIntersection(\n types: readonly ts.Type[],\n ctx: SchemaContext,\n typeNode?: ts.TypeNode\n): JsonSchema | null {\n const { checker } = ctx;\n const parts = [...types];\n\n const prim = parts.find(isPrimitiveLike);\n if (!prim) return null;\n\n const rest = parts.filter(p => p !== prim);\n if (rest.every(r => isBrandObject(checker, r, ctx))) {\n return typeToJsonSchema(prim, ctx);\n }\n\n return null;\n}\n\nfunction isPrimitiveLike(t: ts.Type): boolean {\n return (t.flags & (ts.TypeFlags.String | ts.TypeFlags.Number | ts.TypeFlags.Boolean | ts.TypeFlags.BigInt)) !== 0\n || (t.flags & ts.TypeFlags.StringLiteral) !== 0\n || (t.flags & ts.TypeFlags.NumberLiteral) !== 0;\n}\n\nfunction isBrandObject(checker: ts.TypeChecker, t: ts.Type, ctx: SchemaContext): boolean {\n if (!(t.flags & ts.TypeFlags.Object)) return false;\n\n const props = t.getProperties();\n if (props.length === 0) return false;\n\n const allowed = new Set([\"__brand\", \"__type\", \"__tag\", \"brand\"]);\n for (const p of props) {\n if (!allowed.has(p.getName())) return false;\n }\n\n const callSigs = (t as ts.ObjectType).getCallSignatures?.();\n if (callSigs && callSigs.length > 0) return false;\n\n const constructSigs = (t as ts.ObjectType).getConstructSignatures?.();\n if (constructSigs && constructSigs.length > 0) return false;\n\n return true;\n}\n\nfunction detectDiscriminatedUnion(\n types: readonly ts.Type[],\n ctx: SchemaContext,\n branches: JsonSchema[]\n): DiscriminatorObject | null {\n if (types.length < 2) return null;\n\n const candidates = findCommonPropertyNames(ctx.checker, types);\n for (const propName of candidates) {\n const requiredInAll = types.every(t => isRequiredProperty(ctx.checker, t, propName));\n if (!requiredInAll) continue;\n\n const literalSets = types.map(t => getPropertyLiteralValues(ctx.checker, t, propName));\n if (literalSets.some(s => s === null)) continue;\n\n const allSets = literalSets as Array<Set<string>>;\n if (!areSetsDisjoint(allSets)) continue;\n\n const mapping: Record<string, string> = {};\n for (let i = 0; i < types.length; i++) {\n const branchName = getBranchSchemaName(types[i], ctx);\n for (const val of allSets[i]) {\n mapping[val] = `#/components/schemas/${branchName}`;\n }\n }\n\n return { propertyName: propName, mapping };\n }\n\n return null;\n}\n\nfunction findCommonPropertyNames(checker: ts.TypeChecker, types: readonly ts.Type[]): string[] {\n if (types.length === 0) return [];\n\n const firstProps = types[0].getProperties().map(s => s.getName());\n return firstProps.filter(name =>\n types.every(m => !!checker.getPropertyOfType(m, name))\n );\n}\n\nfunction isRequiredProperty(checker: ts.TypeChecker, type: ts.Type, propName: string): boolean {\n const sym = checker.getPropertyOfType(type, propName);\n if (!sym) return false;\n\n if (sym.flags & ts.SymbolFlags.Optional) return false;\n\n const propType = checker.getTypeOfSymbol(sym);\n if (propType.isUnion?.()) {\n const hasUndefined = propType.types.some(t => (t.flags & ts.TypeFlags.Undefined) !== 0);\n if (hasUndefined) return false;\n }\n\n return true;\n}\n\nfunction getPropertyLiteralValues(checker: ts.TypeChecker, type: ts.Type, propName: string): Set<string> | null {\n const sym = checker.getPropertyOfType(type, propName);\n if (!sym) return null;\n\n const propType = checker.getTypeOfSymbol(sym);\n\n if (propType.isStringLiteral?.()) {\n return new Set([(propType as ts.StringLiteralType).value]);\n }\n\n if (propType.isUnion?.()) {\n const values = new Set<string>();\n for (const m of propType.types) {\n if (!m.isStringLiteral?.()) return null;\n values.add((m as ts.StringLiteralType).value);\n }\n return values;\n }\n\n return null;\n}\n\nfunction areSetsDisjoint(sets: Array<Set<string>>): boolean {\n const seen = new Set<string>();\n for (const s of sets) {\n for (const v of s) {\n if (seen.has(v)) return false;\n seen.add(v);\n }\n }\n return true;\n}\n\nfunction getBranchSchemaName(type: ts.Type, ctx: SchemaContext): string {\n const symbol = type.getSymbol();\n if (symbol) {\n return symbol.getName();\n }\n\n const aliasSymbol = (type as any).aliasSymbol;\n if (aliasSymbol) {\n return aliasSymbol.getName();\n }\n\n return `Anonymous_${ctx.typeNameStack.length}`;\n}\n\nfunction handleObjectType(\n type: ts.ObjectType,\n ctx: SchemaContext,\n typeNode?: ts.TypeNode\n): JsonSchema {\n const { checker, components, typeStack } = ctx;\n const symbol = type.getSymbol();\n const typeName = symbol?.getName?.() ?? getTypeNameFromNode(typeNode, ctx);\n\n if (typeName && typeName !== \"__type\") {\n if (components.has(typeName)) {\n return { $ref: `#/components/schemas/${typeName}` };\n }\n\n if (typeStack.has(type)) {\n return { $ref: `#/components/schemas/${typeName}` };\n }\n\n typeStack.add(type);\n }\n\n const schema = buildObjectSchema(type, ctx, typeNode);\n\n if (typeName && typeName !== \"__type\") {\n typeStack.delete(type);\n if (!components.has(typeName)) {\n components.set(typeName, schema);\n }\n return { $ref: `#/components/schemas/${typeName}` };\n }\n\n typeStack.delete(type);\n return schema;\n}\n\nfunction getTypeId(type: ts.Type, typeName: string): string {\n const typeFlags = type.flags.toString();\n return `${typeName}_${typeFlags}`;\n}\n\nfunction getTypeNameFromNode(typeNode: ts.TypeNode | undefined, ctx: SchemaContext): string {\n if (!typeNode) return `Anonymous_${ctx.typeNameStack.length}`;\n\n if (ts.isTypeReferenceNode(typeNode)) {\n if (ts.isIdentifier(typeNode.typeName)) {\n return typeNode.typeName.text;\n }\n }\n\n if (ts.isTypeAliasDeclaration(typeNode.parent)) {\n if (ts.isIdentifier(typeNode.parent.name)) {\n return typeNode.parent.name.text;\n }\n }\n\n return `Anonymous_${ctx.typeNameStack.length}`;\n}\n\nfunction buildObjectSchema(\n type: ts.ObjectType,\n ctx: SchemaContext,\n typeNode?: ts.TypeNode\n): JsonSchema {\n const { checker } = ctx;\n\n const properties: Record<string, JsonSchema> = {};\n const required: string[] = [];\n\n const props = checker.getPropertiesOfType(type);\n for (const prop of props) {\n const propName = prop.getName();\n const propType = checker.getTypeOfSymbol(prop);\n const isOptional = !!(prop.flags & ts.SymbolFlags.Optional);\n\n properties[propName] = typeToJsonSchema(propType, ctx);\n\n if (!isOptional) {\n required.push(propName);\n }\n }\n\n const schema: JsonSchema = {\n type: \"object\",\n properties,\n };\n\n if (required.length > 0) {\n schema.required = required;\n }\n\n if (isRecordType(type, checker)) {\n const valueType = getRecordValueType(type, checker);\n if (valueType) {\n schema.additionalProperties = typeToJsonSchema(valueType, ctx);\n }\n }\n\n return schema;\n}\n\nfunction isRecordType(type: ts.ObjectType, checker: ts.TypeChecker): boolean {\n const symbol = type.getSymbol();\n if (!symbol) return false;\n\n const name = symbol.getName();\n if (name === \"Record\") return true;\n\n return false;\n}\n\nfunction getRecordValueType(type: ts.ObjectType, checker: ts.TypeChecker): ts.Type | null {\n const symbol = type.getSymbol();\n if (!symbol) return null;\n\n const name = symbol.getName();\n if (name === \"Record\") {\n const typeRef = type as ts.TypeReference;\n const typeArgs = typeRef.typeArguments;\n if (typeArgs && typeArgs.length >= 2) {\n return typeArgs[1];\n }\n }\n\n return null;\n}\n\nexport function createSchemaContext(checker: ts.TypeChecker): SchemaContext {\n return {\n checker,\n components: new Map(),\n typeStack: new Set(),\n typeNameStack: [],\n };\n}\n","import ts from \"typescript\";\n\nexport interface SchemaFragment {\n [key: string]: unknown;\n}\n\nexport function extractPropertySchemaFragments(\n checker: ts.TypeChecker,\n prop: ts.PropertyDeclaration | ts.ParameterDeclaration\n): SchemaFragment[] {\n if (!ts.canHaveDecorators(prop)) return [];\n\n const decs = ts.getDecorators(prop);\n if (!decs || decs.length === 0) return [];\n\n const frags: SchemaFragment[] = [];\n\n for (const d of decs) {\n const expr = d.expression;\n\n let callee: ts.Expression;\n let args: ts.NodeArray<ts.Expression>;\n\n if (ts.isCallExpression(expr)) {\n callee = expr.expression;\n args = expr.arguments;\n } else {\n callee = expr;\n args = ts.factory.createNodeArray([]);\n }\n\n const sym = checker.getSymbolAtLocation(callee);\n if (!sym) continue;\n\n const resolved = resolveImportedDecorator(checker, sym);\n if (!resolved || resolved.module !== \"adorn-api/schema\") continue;\n\n const name = resolved.name;\n\n if (name === \"Schema\") {\n const obj = args[0];\n if (obj && ts.isObjectLiteralExpression(obj)) {\n const frag = objectLiteralToJson(obj);\n if (frag) frags.push(frag);\n }\n continue;\n }\n\n if (name === \"Min\" && isNumberLiteral(args[0])) {\n frags.push({ minimum: Number(args[0].text) });\n } else if (name === \"Max\" && isNumberLiteral(args[0])) {\n frags.push({ maximum: Number(args[0].text) });\n } else if (name === \"ExclusiveMin\" && isNumberLiteral(args[0])) {\n frags.push({ exclusiveMinimum: Number(args[0].text) });\n } else if (name === \"ExclusiveMax\" && isNumberLiteral(args[0])) {\n frags.push({ exclusiveMaximum: Number(args[0].text) });\n } else if (name === \"MinLength\" && isNumberLiteral(args[0])) {\n frags.push({ minLength: Number(args[0].text) });\n } else if (name === \"MaxLength\" && isNumberLiteral(args[0])) {\n frags.push({ maxLength: Number(args[0].text) });\n } else if (name === \"Format\" && isStringLiteral(args[0])) {\n frags.push({ format: args[0].text });\n } else if (name === \"Pattern\") {\n const arg = args[0];\n if (arg && ts.isRegularExpressionLiteral(arg)) {\n frags.push({ pattern: extractRegexPattern(arg.text) });\n } else if (isStringLiteral(arg)) {\n frags.push({ pattern: arg.text });\n }\n } else if (name === \"MinItems\" && isNumberLiteral(args[0])) {\n frags.push({ minItems: Number(args[0].text) });\n } else if (name === \"MaxItems\" && isNumberLiteral(args[0])) {\n frags.push({ maxItems: Number(args[0].text) });\n } else if (name === \"MinProperties\" && isNumberLiteral(args[0])) {\n frags.push({ minProperties: Number(args[0].text) });\n } else if (name === \"MaxProperties\" && isNumberLiteral(args[0])) {\n frags.push({ maxProperties: Number(args[0].text) });\n } else if (name === \"MultipleOf\" && isNumberLiteral(args[0])) {\n frags.push({ multipleOf: Number(args[0].text) });\n } else if (name === \"Example\") {\n frags.push({ example: literalToJson(args[0]) });\n } else if (name === \"Examples\" && ts.isArrayLiteralExpression(args[0])) {\n frags.push({ examples: args[0].elements.map(e => literalToJson(e)) });\n } else if (name === \"Description\" && isStringLiteral(args[0])) {\n frags.push({ description: args[0].text });\n } else if (name === \"Enum\" && ts.isArrayLiteralExpression(args[0])) {\n frags.push({ enum: args[0].elements.map(e => literalToJson(e)) });\n } else if (name === \"Const\") {\n frags.push({ const: literalToJson(args[0]) });\n } else if (name === \"Default\") {\n frags.push({ default: literalToJson(args[0]) });\n } else if (name === \"AdditionalProperties\") {\n const arg = args[0];\n if (arg && (arg.kind === ts.SyntaxKind.FalseKeyword || arg.kind === ts.SyntaxKind.TrueKeyword)) {\n frags.push({ additionalProperties: arg.kind === ts.SyntaxKind.TrueKeyword });\n } else if (arg && ts.isObjectLiteralExpression(arg)) {\n const obj = objectLiteralToJson(arg);\n if (obj) frags.push({ additionalProperties: obj });\n }\n } else if (name === \"Closed\") {\n frags.push({ additionalProperties: false });\n } else if (name === \"ClosedUnevaluated\") {\n frags.push({ unevaluatedProperties: false });\n }\n }\n\n return frags;\n}\n\nfunction resolveImportedDecorator(\n checker: ts.TypeChecker,\n sym: ts.Symbol\n): { module: string; name: string } | null {\n const target = (sym.flags & ts.SymbolFlags.Alias) ? checker.getAliasedSymbol(sym) : sym;\n const name = target.getName();\n\n const decl = target.declarations?.[0];\n if (!decl) return null;\n\n const fileName = decl.getSourceFile().fileName.replace(/\\\\/g, \"/\");\n\n if (fileName.includes(\"/node_modules/adorn-api/\") || fileName.includes(\"/src/schema/\")) {\n return { module: \"adorn-api/schema\", name };\n }\n\n return null;\n}\n\nfunction isNumberLiteral(node: ts.Node | undefined): node is ts.NumericLiteral {\n return !!node && ts.isNumericLiteral(node);\n}\n\nfunction isStringLiteral(node: ts.Node | undefined): node is ts.StringLiteral {\n return !!node && ts.isStringLiteral(node);\n}\n\nfunction extractRegexPattern(text: string): string {\n const match = text.match(/^\\/(.+)\\/[gimsuy]*$/);\n return match ? match[1] : text;\n}\n\nfunction objectLiteralToJson(obj: ts.ObjectLiteralExpression): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const name = prop.name;\n let key: string;\n if (ts.isIdentifier(name)) {\n key = name.text;\n } else if (ts.isStringLiteral(name)) {\n key = name.text;\n } else {\n continue;\n }\n out[key] = literalToJson(prop.initializer);\n }\n return out;\n}\n\nfunction literalToJson(node: ts.Expression): unknown {\n if (ts.isStringLiteral(node)) return node.text;\n if (ts.isNumericLiteral(node)) return Number(node.text);\n if (node.kind === ts.SyntaxKind.TrueKeyword) return true;\n if (node.kind === ts.SyntaxKind.FalseKeyword) return false;\n if (node.kind === ts.SyntaxKind.NullKeyword) return null;\n if (ts.isObjectLiteralExpression(node)) return objectLiteralToJson(node);\n if (ts.isArrayLiteralExpression(node)) return node.elements.map(e => literalToJson(e));\n return undefined;\n}\n\nexport function mergeFragments(base: Record<string, unknown>, ...frags: SchemaFragment[]): Record<string, unknown> {\n const result = { ...base };\n for (const frag of frags) {\n Object.assign(result, frag);\n }\n return result;\n}\n\nexport function extractJSDocDescription(checker: ts.TypeChecker, node: ts.Node): string | undefined {\n const sourceFile = node.getSourceFile();\n const docComments = ts.getLeadingCommentRanges(sourceFile.fileName, node.pos);\n if (!docComments || docComments.length === 0) return undefined;\n\n const sourceText = sourceFile.getText();\n let fullComment = \"\";\n\n for (const commentRange of docComments) {\n const comment = sourceText.substring(commentRange.pos, commentRange.end);\n const cleanComment = comment\n .replace(/^\\/\\*\\*/, \"\")\n .replace(/\\*\\/$/, \"\")\n .replace(/^\\s*\\*\\s?/gm, \"\")\n .trim();\n fullComment += cleanComment + \"\\n\";\n }\n\n return fullComment.trim() || undefined;\n}\n\nexport function extractJSDocTags(checker: ts.TypeChecker, node: ts.Node): Record<string, unknown> {\n const tags: Record<string, unknown> = {};\n\n const jsDocTags = ts.getJSDocTags(node);\n if (!jsDocTags) return tags;\n\n for (const tag of jsDocTags) {\n const tagName = tag.tagName.text;\n\n if (tagName === \"example\") {\n const exampleComment = getTagComment(tag);\n if (exampleComment) {\n const existing = (tags.examples as string[]) ?? [];\n tags.examples = [...existing, exampleComment];\n }\n } else if (tagName === \"default\") {\n const defaultComment = getTagComment(tag);\n if (defaultComment) {\n tags.default = parseDefaultValue(defaultComment);\n }\n } else if (tagName === \"description\") {\n const desc = getTagComment(tag);\n if (desc) {\n tags.description = desc;\n }\n } else if (tagName === \"deprecated\") {\n tags.deprecated = true;\n }\n }\n\n return tags;\n}\n\nfunction getTagComment(tag: ts.JSDocTag): string | undefined {\n const comment = tag.comment;\n if (typeof comment === \"string\") {\n return comment.trim();\n }\n if (comment && Array.isArray(comment) && comment.length > 0) {\n return comment.map(c => typeof c === \"string\" ? c : c.text).join(\" \").trim();\n }\n return undefined;\n}\n\nfunction parseDefaultValue(comment: string): unknown {\n const trimmed = comment.trim();\n\n if (trimmed === \"true\") return true;\n if (trimmed === \"false\") return false;\n if (trimmed === \"null\") return null;\n\n const num = Number(trimmed);\n if (!isNaN(num) && trimmed === num.toString()) return num;\n\n if ((trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))) {\n return trimmed.slice(1, -1);\n }\n\n return trimmed;\n}\n\nexport function extractClassSchemaFragments(\n checker: ts.TypeChecker,\n classDecl: ts.ClassDeclaration\n): SchemaFragment[] {\n const frags: SchemaFragment[] = [];\n\n if (!ts.canHaveDecorators(classDecl)) return [];\n\n const decs = ts.getDecorators(classDecl);\n if (!decs || decs.length === 0) return frags;\n\n for (const d of decs) {\n const expr = d.expression;\n\n let callee: ts.Expression;\n let args: ts.NodeArray<ts.Expression>;\n\n if (ts.isCallExpression(expr)) {\n callee = expr.expression;\n args = expr.arguments;\n } else {\n callee = expr;\n args = ts.factory.createNodeArray([]);\n }\n\n const sym = checker.getSymbolAtLocation(callee);\n if (!sym) continue;\n\n const resolved = resolveImportedDecorator(checker, sym);\n if (!resolved || resolved.module !== \"adorn-api/schema\") continue;\n\n const name = resolved.name;\n\n if (name === \"Schema\") {\n const obj = args[0];\n if (obj && ts.isObjectLiteralExpression(obj)) {\n const frag = objectLiteralToJson(obj);\n if (frag) frags.push(frag);\n }\n } else if (name === \"Description\" && isStringLiteral(args[0])) {\n frags.push({ description: args[0].text });\n } else if (name === \"Example\") {\n frags.push({ example: literalToJson(args[0]) });\n } else if (name === \"Examples\" && ts.isArrayLiteralExpression(args[0])) {\n frags.push({ examples: args[0].elements.map(e => literalToJson(e)) });\n } else if (name === \"Closed\") {\n frags.push({ additionalProperties: false });\n } else if (name === \"ClosedUnevaluated\") {\n frags.push({ unevaluatedProperties: false });\n }\n }\n\n const jsDocDesc = extractJSDocDescription(checker, classDecl);\n if (jsDocDesc) {\n frags.push({ description: jsDocDesc });\n }\n\n const jsDocTags = extractJSDocTags(checker, classDecl);\n if (Object.keys(jsDocTags).length > 0) {\n frags.push(jsDocTags);\n }\n\n return frags;\n}\n","import type { ScannedController, ScannedOperation } from \"../analyze/scanControllers.js\";\nimport type { ManifestV1, ControllerEntry, OperationEntry, ArgsSpec, HttpMethod } from \"./format.js\";\nimport { typeToJsonSchema } from \"../schema/typeToJsonSchema.js\";\nimport type { SchemaContext } from \"../schema/typeToJsonSchema.js\";\nimport ts from \"typescript\";\n\ntype ValidationMode = \"none\" | \"ajv-runtime\" | \"precompiled\";\n\nexport function generateManifest(\n controllers: ScannedController[],\n checker: ts.TypeChecker,\n version: string,\n validationMode: ValidationMode = \"ajv-runtime\"\n): ManifestV1 {\n const components = new Map<string, any>();\n const ctx: SchemaContext = {\n checker,\n components,\n typeStack: new Set(),\n typeNameStack: [],\n };\n\n const controllerEntries: ControllerEntry[] = controllers.map(ctrl => ({\n controllerId: ctrl.className,\n basePath: ctrl.basePath,\n operations: ctrl.operations.map(op => buildOperationEntry(op, ctx)),\n }));\n\n const validationConfig: { mode: \"none\" | \"ajv-runtime\" | \"precompiled\"; precompiledModule: string | null } = \n validationMode === \"precompiled\"\n ? { mode: \"precompiled\", precompiledModule: null }\n : validationMode === \"none\"\n ? { mode: \"none\", precompiledModule: null }\n : { mode: \"ajv-runtime\", precompiledModule: null };\n\n return {\n manifestVersion: 1,\n generatedAt: new Date().toISOString(),\n generator: {\n name: \"adorn-api\",\n version,\n typescript: ts.version,\n },\n schemas: {\n kind: \"openapi-3.1\",\n file: \"./openapi.json\",\n componentsSchemasPointer: \"/components/schemas\",\n },\n validation: validationConfig,\n controllers: controllerEntries,\n };\n}\n\nfunction buildOperationEntry(op: ScannedOperation, ctx: SchemaContext): OperationEntry {\n const args: ArgsSpec = {\n body: null,\n path: [],\n query: [],\n headers: [],\n cookies: [],\n };\n\n buildPathArgs(op, ctx, args);\n buildQueryArgs(op, ctx, args);\n buildHeaderArgs(op, ctx, args);\n buildCookieArgs(op, ctx, args);\n\n if (op.bodyParamIndex !== null) {\n const bodyParam = op.parameters[op.bodyParamIndex];\n if (bodyParam) {\n const bodySchema = typeToJsonSchema(bodyParam.type, ctx);\n const schemaRef = bodySchema.$ref ?? \"#/components/schemas/InlineBody\";\n\n args.body = {\n index: bodyParam.index,\n required: !bodyParam.isOptional,\n contentType: op.bodyContentType ?? \"application/json\",\n schemaRef,\n };\n }\n }\n\n const responseSchema = typeToJsonSchema(op.returnType, ctx);\n const status = op.httpMethod === \"POST\" ? 201 : 200;\n\n let schemaRef = responseSchema.$ref;\n let isArray = false;\n\n if (!schemaRef && responseSchema.type === \"array\" && responseSchema.items?.$ref) {\n schemaRef = responseSchema.items.$ref;\n isArray = true;\n } else if (!schemaRef) {\n schemaRef = \"#/components/schemas/InlineResponse\";\n }\n\n return {\n operationId: op.operationId,\n http: {\n method: op.httpMethod as HttpMethod,\n path: op.path,\n },\n handler: {\n methodName: op.methodName,\n },\n args,\n responses: [\n {\n status,\n contentType: \"application/json\",\n schemaRef,\n isArray,\n },\n ],\n };\n}\n\nfunction buildPathArgs(op: ScannedOperation, ctx: SchemaContext, args: ArgsSpec): void {\n for (const paramIndex of op.pathParamIndices) {\n const param = op.parameters[paramIndex];\n if (param) {\n const paramSchema = typeToJsonSchema(param.type, ctx);\n\n args.path.push({\n name: param.name,\n index: param.index,\n required: !param.isOptional,\n schemaRef: paramSchema.$ref ?? \"#/components/schemas/InlinePathParam\",\n schemaType: paramSchema.type,\n });\n }\n }\n}\n\nfunction buildQueryArgs(op: ScannedOperation, ctx: SchemaContext, args: ArgsSpec): void {\n if (op.queryObjectParamIndex !== null) {\n const queryParam = op.parameters[op.queryObjectParamIndex];\n if (queryParam) {\n const querySchema = typeToJsonSchema(queryParam.type, ctx);\n if (!querySchema.properties) return;\n\n for (const [propName, propSchema] of Object.entries(querySchema.properties as Record<string, any>)) {\n const isRequired = querySchema.required?.includes(propName) ?? false;\n let schemaRef = propSchema.$ref;\n if (!schemaRef) {\n schemaRef = \"#/components/schemas/InlineQueryParam\";\n }\n\n args.query.push({\n name: propName,\n index: queryParam.index,\n required: !isRequired,\n schemaRef,\n schemaType: propSchema.type,\n });\n }\n }\n }\n\n for (const paramIndex of op.queryParamIndices) {\n const param = op.parameters[paramIndex];\n if (param) {\n const paramSchema = typeToJsonSchema(param.type, ctx);\n const schemaRef = paramSchema.$ref ?? \"#/components/schemas/InlineQueryParam\";\n\n args.query.push({\n name: param.name,\n index: param.index,\n required: !param.isOptional,\n schemaRef,\n schemaType: paramSchema.type,\n });\n }\n }\n}\n\nfunction buildHeaderArgs(op: ScannedOperation, ctx: SchemaContext, args: ArgsSpec): void {\n if (op.headerObjectParamIndex === null) return;\n\n const headerParam = op.parameters[op.headerObjectParamIndex];\n if (!headerParam) return;\n\n const headerSchema = typeToJsonSchema(headerParam.type, ctx);\n if (!headerSchema.properties) return;\n\n for (const [propName, propSchema] of Object.entries(headerSchema.properties as Record<string, any>)) {\n const isRequired = headerSchema.required?.includes(propName) ?? false;\n let schemaRef = propSchema.$ref;\n if (!schemaRef) {\n schemaRef = \"#/components/schemas/InlineHeaderParam\";\n }\n\n args.headers.push({\n name: propName,\n index: headerParam.index,\n required: !isRequired,\n schemaRef,\n schemaType: propSchema.type,\n });\n }\n}\n\nfunction buildCookieArgs(op: ScannedOperation, ctx: SchemaContext, args: ArgsSpec): void {\n if (op.cookieObjectParamIndex === null) return;\n\n const cookieParam = op.parameters[op.cookieObjectParamIndex];\n if (!cookieParam) return;\n\n const cookieSchema = typeToJsonSchema(cookieParam.type, ctx);\n if (!cookieSchema.properties) return;\n\n for (const [propName, propSchema] of Object.entries(cookieSchema.properties as Record<string, any>)) {\n const isRequired = cookieSchema.required?.includes(propName) ?? false;\n let schemaRef = propSchema.$ref;\n if (!schemaRef) {\n schemaRef = \"#/components/schemas/InlineCookieParam\";\n }\n\n args.cookies.push({\n name: propName,\n index: cookieParam.index,\n required: !isRequired,\n schemaRef,\n schemaType: propSchema.type,\n serialization: { style: \"form\", explode: true },\n });\n }\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport crypto from \"node:crypto\";\n\nimport Ajv from \"ajv\";\nimport addFormats from \"ajv-formats\";\nimport type { AnySchema } from \"ajv\";\n\ninterface OpenApi {\n openapi: string;\n components?: {\n schemas?: Record<string, unknown>;\n };\n}\n\ninterface Manifest {\n manifestVersion: number;\n controllers: Array<{\n controllerId: string;\n basePath: string;\n operations: Array<{\n operationId: string;\n args: {\n body?: {\n schemaRef: string;\n contentType: string;\n } | null;\n response?: Array<{\n status: number;\n contentType: string;\n schemaRef?: string;\n }>;\n };\n responses: Array<{\n status: number;\n contentType: string;\n schemaRef: string;\n }>;\n }>;\n }>;\n}\n\nconst OAS_SCHEMA_ONLY = new Set([\"discriminator\", \"xml\", \"externalDocs\", \"example\"]);\n\nfunction sanitizeSchemaForAjv(schema: unknown): unknown {\n if (schema == null || typeof schema !== \"object\") return schema;\n if (Array.isArray(schema)) return schema.map(sanitizeSchemaForAjv);\n\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(schema as Record<string, unknown>)) {\n if (OAS_SCHEMA_ONLY.has(k)) continue;\n if (k.startsWith(\"x-\")) continue;\n out[k] = sanitizeSchemaForAjv(v);\n }\n return out;\n}\n\nfunction rewriteComponentRefs(schema: unknown): unknown {\n if (schema == null || typeof schema !== \"object\") return schema;\n if (Array.isArray(schema)) return schema.map(rewriteComponentRefs);\n\n if (typeof (schema as Record<string, unknown>).$ref === \"string\") {\n const ref = (schema as Record<string, unknown>).$ref as string;\n const m = ref.match(/^#\\/components\\/schemas\\/(.+)$/);\n if (m) {\n return { ...schema, $ref: m[1] };\n }\n }\n\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(schema as Record<string, unknown>)) {\n out[k] = rewriteComponentRefs(v);\n }\n return out;\n}\n\nfunction safeId(s: string): string {\n return s.replace(/[^A-Za-z0-9_]/g, \"_\").replace(/^[^A-Za-z_]/, \"_$&\");\n}\n\nfunction schemaNameFromRef(schemaRef: string): string {\n return schemaRef.replace(/^#\\/components\\/schemas\\//, \"\");\n}\n\nexport interface EmitPrecompiledValidatorsOptions {\n outDir: string;\n openapi: OpenApi;\n manifest: Manifest;\n strict?: \"off\" | \"log\" | \"error\";\n formatsMode?: \"fast\" | \"full\";\n}\n\nexport async function emitPrecompiledValidators(opts: EmitPrecompiledValidatorsOptions): Promise<{\n validatorsCjsPath: string;\n validatorsEsmPath: string;\n hash: string;\n}> {\n const outDir = opts.outDir;\n const cjsPath = path.join(outDir, \"validators.cjs\");\n const esmPath = path.join(outDir, \"validators.mjs\");\n const metaPath = path.join(outDir, \"validators.meta.json\");\n\n fs.mkdirSync(outDir, { recursive: true });\n\n const schemas: AnySchema[] = [];\n\n for (const [name, sch] of Object.entries(opts.openapi.components?.schemas ?? {})) {\n const clean = rewriteComponentRefs(sanitizeSchemaForAjv(sch));\n schemas.push({ ...(clean as object), $id: name } as AnySchema);\n }\n\n const opIndex: Record<string, { body?: string; response: Record<string, string> }> = {};\n\n for (const ctrl of opts.manifest.controllers ?? []) {\n for (const op of ctrl.operations ?? []) {\n const entry: { body?: string; response: Record<string, string> } = { response: {} };\n opIndex[op.operationId] = entry;\n\n if (op.args.body?.schemaRef) {\n const typeName = schemaNameFromRef(op.args.body.schemaRef);\n const id = safeId(`op_${op.operationId}_body`);\n schemas.push({ $id: id, $ref: typeName } as AnySchema);\n entry.body = id;\n }\n\n for (const r of op.responses ?? []) {\n if (!r.schemaRef) continue;\n const typeName = schemaNameFromRef(r.schemaRef);\n const key = `${r.status}|${r.contentType}`;\n const id = safeId(`op_${op.operationId}_res_${r.status}_${r.contentType}`);\n schemas.push({ $id: id, $ref: typeName } as AnySchema);\n entry.response[key] = id;\n }\n }\n }\n\n const strictOpt = opts.strict === \"off\" ? false : opts.strict === \"log\" ? \"log\" : true;\n\n const ajv = new Ajv.default({\n schemas,\n allErrors: true,\n strict: strictOpt,\n code: { source: true },\n });\n\n addFormats.default(ajv, { mode: opts.formatsMode ?? \"full\" });\n\n let cjs: string;\n const standaloneModule = require(\"ajv/dist/standalone\");\n if (typeof standaloneModule === \"function\") {\n cjs = standaloneModule(ajv);\n } else if (standaloneModule && typeof standaloneModule.default === \"function\") {\n cjs = standaloneModule.default(ajv);\n } else {\n throw new Error(\"Unable to find standalone code generator in ajv/dist/standalone\");\n }\n\n cjs += \"\\n\\n// --- adorn-api operation lookup (generated) ---\\n\";\n cjs += \"exports.validators = {\\n\";\n for (const [operationId, v] of Object.entries(opIndex)) {\n cjs += ` ${JSON.stringify(operationId)}: {\\n`;\n cjs += ` body: ${v.body ? `exports[${JSON.stringify(v.body)}]` : \"undefined\"},\\n`;\n cjs += ` response: {\\n`;\n for (const [key, id] of Object.entries(v.response)) {\n cjs += ` ${JSON.stringify(key)}: exports[${JSON.stringify(id)}],\\n`;\n }\n cjs += ` }\\n`;\n cjs += ` },\\n`;\n }\n cjs += \"};\\n\";\n\n fs.writeFileSync(cjsPath, cjs, \"utf8\");\n\n const esm = `// .adorn/validators.mjs (generated)\nimport { createRequire } from \"node:module\";\nconst require = createRequire(import.meta.url);\nconst cjs = require(\"./validators.cjs\");\n\nexport const validators = cjs.validators;\n\nexport function validateBody(operationId, data) {\n const v = validators?.[operationId]?.body;\n if (!v) return { ok: true, errors: null };\n const ok = v(data);\n return { ok, errors: ok ? null : v.errors };\n}\n\nexport function validateResponse(operationId, status, contentType, data) {\n const key = String(status) + \"|\" + String(contentType);\n const v = validators?.[operationId]?.response?.[key];\n if (!v) return { ok: true, errors: null };\n const ok = v(data);\n return { ok, errors: ok ? null : v.errors };\n}\n`;\n fs.writeFileSync(esmPath, esm, \"utf8\");\n\n const hash = crypto.createHash(\"sha256\").update(cjs).digest(\"hex\");\n fs.writeFileSync(metaPath, JSON.stringify({ hash }, null, 2), \"utf8\");\n\n return { validatorsCjsPath: cjsPath, validatorsEsmPath: esmPath, hash };\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport ts from \"typescript\";\nimport type { AdornCacheV1 } from \"./schema.js\";\n\nexport type StaleResult =\n | { stale: false; reason: \"up-to-date\" }\n | { stale: true; reason: string; detail?: string };\n\nfunction readJson<T>(p: string): T | null {\n try {\n return JSON.parse(fs.readFileSync(p, \"utf8\")) as T;\n } catch {\n return null;\n }\n}\n\nfunction statMtimeMs(p: string): number | null {\n try {\n return fs.statSync(p).mtimeMs;\n } catch {\n return null;\n }\n}\n\nfunction ensureAbs(p: string): string {\n return path.isAbsolute(p) ? p : path.resolve(p);\n}\n\nexport function collectTsconfigChain(tsconfigPathAbs: string): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n\n function visit(pAbs: string) {\n if (seen.has(pAbs)) return;\n seen.add(pAbs);\n out.push(pAbs);\n\n const raw = readJson<any>(pAbs);\n const ext = raw?.extends;\n if (!ext) return;\n\n let resolved: string | null = null;\n\n if (ext.startsWith(\".\") || ext.startsWith(\"/\") || /^[A-Za-z]:\\\\/.test(ext)) {\n resolved = ensureAbs(path.resolve(path.dirname(pAbs), ext));\n if (!resolved.endsWith(\".json\")) resolved += \".json\";\n } else {\n try {\n const req = (module as any).createRequire?.(import.meta.url) ?? require;\n resolved = req.resolve(ext);\n } catch {\n try {\n const req = (module as any).createRequire?.(import.meta.url) ?? require;\n resolved = req.resolve(ext.endsWith(\".json\") ? ext : `${ext}.json`);\n } catch {\n resolved = null;\n }\n }\n }\n\n if (resolved) visit(resolved);\n }\n\n visit(tsconfigPathAbs);\n return out;\n}\n\nexport function findLockfile(startDir: string): { path: string; mtimeMs: number } | null {\n const names = [\"pnpm-lock.yaml\", \"package-lock.json\", \"yarn.lock\"];\n let dir = startDir;\n\n for (let i = 0; i < 20; i++) {\n for (const n of names) {\n const p = path.join(dir, n);\n const mt = statMtimeMs(p);\n if (mt != null) return { path: p, mtimeMs: mt };\n }\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n return null;\n}\n\nexport async function isStale(params: {\n outDir: string;\n project: string;\n adornVersion: string;\n typescriptVersion: string;\n}): Promise<StaleResult> {\n const outDirAbs = ensureAbs(params.outDir);\n const tsconfigAbs = ensureAbs(params.project);\n\n const manifestPath = path.join(outDirAbs, \"manifest.json\");\n const cachePath = path.join(outDirAbs, \"cache.json\");\n\n if (!fs.existsSync(manifestPath)) return { stale: true, reason: \"missing-manifest\" };\n\n const cache = readJson<AdornCacheV1>(cachePath);\n if (!cache) return { stale: true, reason: \"missing-cache\" };\n\n if (cache.generator.version !== params.adornVersion) {\n return { stale: true, reason: \"generator-version-changed\", detail: `${cache.generator.version} -> ${params.adornVersion}` };\n }\n\n if (ensureAbs(cache.project.tsconfigPath) !== tsconfigAbs) {\n return { stale: true, reason: \"tsconfig-changed\", detail: \"different project path\" };\n }\n\n const chain = collectTsconfigChain(tsconfigAbs);\n for (const cfg of chain) {\n const mt = statMtimeMs(cfg);\n if (mt == null) return { stale: true, reason: \"config-missing\", detail: cfg };\n\n const cachedMt = cache.project.configFiles[cfg];\n if (cachedMt == null || Math.abs(cachedMt - mt) > 0.0001) {\n return { stale: true, reason: \"config-updated\", detail: cfg };\n }\n }\n\n if (cache.project.lockfile?.path) {\n const mt = statMtimeMs(cache.project.lockfile.path);\n if (mt == null) return { stale: true, reason: \"lockfile-missing\", detail: cache.project.lockfile.path };\n\n if (Math.abs(cache.project.lockfile.mtimeMs - mt) > 0.0001) {\n return { stale: true, reason: \"lockfile-updated\", detail: cache.project.lockfile.path };\n }\n }\n\n for (const [file, cachedMt] of Object.entries(cache.inputs)) {\n const mt = statMtimeMs(file);\n if (mt == null) return { stale: true, reason: \"input-missing\", detail: file };\n if (Math.abs(cachedMt - mt) > 0.0001) return { stale: true, reason: \"input-updated\", detail: file };\n }\n\n return { stale: false, reason: \"up-to-date\" };\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport ts from \"typescript\";\nimport { collectTsconfigChain, findLockfile } from \"./isStale.js\";\nimport type { AdornCacheV1 } from \"./schema.js\";\n\nfunction statMtimeMs(p: string): number {\n return fs.statSync(p).mtimeMs;\n}\n\nfunction ensureDir(p: string) {\n fs.mkdirSync(p, { recursive: true });\n}\n\nfunction isProjectSourceFile(f: string): boolean {\n if (f.includes(`${path.sep}node_modules${path.sep}`)) return false;\n if (f.includes(`${path.sep}typescript${path.sep}lib${path.sep}`)) return false;\n return /\\.(ts|tsx|mts|cts)$/.test(f);\n}\n\nexport function writeCache(params: {\n outDir: string;\n tsconfigAbs: string;\n program: ts.Program;\n adornVersion: string;\n}): void {\n const outDirAbs = path.isAbsolute(params.outDir) ? params.outDir : path.resolve(params.outDir);\n ensureDir(outDirAbs);\n\n const configFiles = collectTsconfigChain(params.tsconfigAbs);\n const configMtimes: Record<string, number> = {};\n for (const cfg of configFiles) configMtimes[cfg] = statMtimeMs(cfg);\n\n const lock = findLockfile(path.dirname(params.tsconfigAbs));\n\n const inputs: Record<string, number> = {};\n for (const sf of params.program.getSourceFiles()) {\n const f = sf.fileName;\n if (!isProjectSourceFile(f)) continue;\n try {\n inputs[f] = statMtimeMs(f);\n } catch {\n }\n }\n\n const cache: AdornCacheV1 = {\n cacheVersion: 1,\n generator: {\n name: \"adorn-api\",\n version: params.adornVersion,\n typescript: ts.version\n },\n project: {\n tsconfigPath: params.tsconfigAbs,\n configFiles: configMtimes,\n lockfile: lock ?? null\n },\n inputs\n };\n\n fs.writeFileSync(path.join(outDirAbs, \"cache.json\"), JSON.stringify(cache, null, 2), \"utf8\");\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,IAAAA,kBAA2E;AAC3E,IAAAC,oBAAiC;;;ACFjC,wBAAe;AACf,qBAA6B;AAC7B,uBAAiC;AAQ1B,SAAS,wBAAwB,cAAsC;AAC5E,QAAM,mBAAe,0BAAQ,YAAY;AACzC,QAAM,gBAAY,0BAAQ,YAAY;AAEtC,QAAM,aAAa,kBAAAC,QAAG,eAAe,cAAc,CAACC,cAAS,6BAAaA,OAAM,OAAO,CAAC;AACxF,MAAI,WAAW,OAAO;AACpB,UAAM,IAAI,MAAM,4BAA4B,kBAAAD,QAAG,6BAA6B,WAAW,MAAM,aAAa,IAAI,CAAC,EAAE;AAAA,EACnH;AAEA,QAAM,SAAS,kBAAAA,QAAG,2BAA2B,WAAW,QAAQ,kBAAAA,QAAG,KAAK,SAAS;AACjF,MAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,UAAM,WAAW,OAAO,OAAO,IAAI,OAAK,kBAAAA,QAAG,6BAA6B,EAAE,aAAa,IAAI,CAAC;AAC5F,UAAM,IAAI,MAAM;AAAA,EAA8B,SAAS,KAAK,IAAI,CAAC,EAAE;AAAA,EACrE;AAEA,QAAM,UAAU,kBAAAA,QAAG,cAAc,OAAO,WAAW,OAAO,OAAO;AACjE,QAAM,UAAU,QAAQ,eAAe;AAEvC,QAAM,cAAc,QAAQ,eAAe,EAAE;AAAA,IAAO,QAClD,CAAC,GAAG,qBACJ,CAAC,GAAG,SAAS,SAAS,cAAc;AAAA,EACtC;AAEA,SAAO,EAAE,SAAS,SAAS,YAAY;AACzC;;;AClCA,IAAAE,qBAAe;;;ACAR,SAAS,mBAAmB,gBAAwB,YAA4B;AACrF,SAAO,GAAG,cAAc,IAAI,UAAU;AACxC;;;ADoCO,SAAS,gBACd,aACA,SACqB;AACrB,QAAM,cAAmC,CAAC;AAE1C,aAAW,cAAc,aAAa;AACpC,uBAAAC,QAAG,aAAa,YAAY,CAAC,SAAS;AACpC,UAAI,mBAAAA,QAAG,mBAAmB,IAAI,KAAK,KAAK,MAAM;AAC5C,cAAM,aAAa,aAAa,MAAM,YAAY,OAAO;AACzD,YAAI,YAAY;AACd,sBAAY,KAAK,UAAU;AAAA,QAC7B;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,SAAS,aACP,MACA,YACA,SAC0B;AAC1B,MAAI,CAAC,KAAK,KAAM,QAAO;AAEvB,QAAM,sBAAsB,cAAc,MAAM,YAAY;AAC5D,MAAI,CAAC,oBAAqB,QAAO;AAEjC,QAAM,WAAW,0BAA0B,mBAAmB,KAAK;AACnE,QAAM,YAAY,KAAK,KAAK;AAE5B,QAAM,WAAW,qBAAqB,MAAM,OAAO;AACnD,QAAM,WAAW,qBAAqB,MAAM,OAAO;AAEnD,QAAM,aAAiC,CAAC;AAExC,aAAW,UAAU,KAAK,SAAS;AACjC,QAAI,mBAAAA,QAAG,oBAAoB,MAAM,KAAK,OAAO,MAAM;AACjD,YAAM,YAAY,cAAc,QAAQ,WAAW,OAAO;AAC1D,UAAI,WAAW;AACb,mBAAW,KAAK,SAAS;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAEA,MAAI,WAAW,WAAW,EAAG,QAAO;AAEpC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,qBAAqB,MAA2B,SAA+C;AACtG,QAAM,YAAY,cAAc,MAAM,UAAU;AAChD,MAAI,CAAC,UAAW,QAAO;AAEvB,QAAM,WAAW,UAAU;AAC3B,MAAI,CAAC,mBAAAA,QAAG,iBAAiB,QAAQ,EAAG,QAAO;AAC3C,QAAM,OAAO,SAAS;AACtB,MAAI,KAAK,WAAW,EAAG,QAAO;AAE9B,QAAM,WAAW,KAAK,CAAC;AACvB,MAAI,mBAAAA,QAAG,gBAAgB,QAAQ,GAAG;AAChC,WAAO,CAAC,SAAS,IAAI;AAAA,EACvB;AACA,MAAI,mBAAAA,QAAG,yBAAyB,QAAQ,GAAG;AACzC,WAAO,SAAS,SACb,OAAO,mBAAAA,QAAG,eAAe,EACzB,IAAI,OAAK,EAAE,IAAI;AAAA,EACpB;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,MAA2B,SAA+C;AACtG,QAAM,YAAY,cAAc,MAAM,UAAU;AAChD,MAAI,CAAC,UAAW,QAAO;AAEvB,QAAM,WAAW,UAAU;AAC3B,MAAI,CAAC,mBAAAA,QAAG,iBAAiB,QAAQ,EAAG,QAAO;AAC3C,QAAM,OAAO,SAAS;AACtB,MAAI,KAAK,WAAW,EAAG,QAAO;AAE9B,QAAM,WAAW,KAAK,CAAC;AACvB,MAAI,mBAAAA,QAAG,gBAAgB,QAAQ,GAAG;AAChC,WAAO,CAAC,SAAS,IAAI;AAAA,EACvB;AACA,MAAI,mBAAAA,QAAG,yBAAyB,QAAQ,GAAG;AACzC,WAAO,SAAS,SACb,OAAO,mBAAAA,QAAG,eAAe,EACzB,IAAI,OAAK,EAAE,IAAI;AAAA,EACpB;AACA,SAAO;AACT;AAEA,SAAS,cACP,MACA,WACA,SACyB;AACzB,QAAM,aAAa,mBAAAA,QAAG,aAAa,KAAK,IAAI,IAAI,KAAK,KAAK,OAAO;AACjE,MAAI,CAAC,WAAY,QAAO;AAExB,QAAM,cAAc,CAAC,OAAO,QAAQ,OAAO,SAAS,QAAQ;AAC5D,MAAI,aAA4B;AAChC,MAAIC,QAAO;AAEX,aAAW,UAAU,aAAa;AAChC,UAAM,YAAY,cAAc,MAAM,MAAM;AAC5C,QAAI,WAAW;AACb,mBAAa,OAAO,YAAY;AAChC,MAAAA,QAAO,0BAA0B,SAAS,KAAK;AAC/C;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,WAAY,QAAO;AAExB,QAAM,YAAY,QAAQ,4BAA4B,IAAI;AAC1D,MAAI,CAAC,UAAW,QAAO;AAEvB,MAAI,aAAa,QAAQ,yBAAyB,SAAS;AAC3D,eAAa,cAAc,YAAY,OAAO;AAE9C,QAAM,aAAiC,CAAC;AACxC,WAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,KAAK;AAC/C,UAAM,QAAQ,KAAK,WAAW,CAAC;AAC/B,UAAM,YAAY,mBAAAD,QAAG,aAAa,MAAM,IAAI,IAAI,MAAM,KAAK,OAAO,MAAM,CAAC;AACzE,UAAM,YAAY,QAAQ,kBAAkB,KAAK;AACjD,UAAM,aAAa,CAAC,CAAC,MAAM,iBAAiB,CAAC,CAAC,MAAM;AAEpD,eAAW,KAAK;AAAA,MACd,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,MACN;AAAA,MACA,WAAW;AAAA,IACb,CAAC;AAAA,EACH;AAEA,QAAM,iBAAiB,kBAAkBC,KAAI;AAC7C,QAAM,mBAAmB,yBAAyB,gBAAgB,UAAU;AAE5E,QAAM,EAAE,gBAAgB,mBAAmB,uBAAuB,wBAAwB,wBAAwB,gBAAgB,IAChI,mBAAmB,YAAY,YAAY,kBAAkB,OAAO;AAEtE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,MAAAA;AAAA,IACA,aAAa,mBAAmB,WAAW,UAAU;AAAA,IACrD,mBAAmB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,kBAAkBA,OAAwB;AACjD,QAAM,UAAUA,MAAK,MAAM,WAAW;AACtC,MAAI,CAAC,QAAS,QAAO,CAAC;AACtB,SAAO,QAAQ,IAAI,OAAK,EAAE,MAAM,CAAC,CAAC;AACpC;AAEA,SAAS,yBAAyB,gBAA0B,YAA0C;AACpG,QAAM,UAAoB,CAAC;AAC3B,aAAW,QAAQ,gBAAgB;AACjC,UAAM,QAAQ,WAAW,KAAK,OAAK,EAAE,SAAS,IAAI;AAClD,QAAI,OAAO;AACT,cAAQ,KAAK,MAAM,KAAK;AAAA,IAC1B;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,mBACP,YACA,YACA,kBACA,SAQA;AACA,QAAM,cAAc,IAAI,IAAI,gBAAgB;AAC5C,QAAM,oBAA8B,CAAC;AACrC,MAAI,iBAAgC;AACpC,MAAI,wBAAuC;AAC3C,MAAI,yBAAwC;AAC5C,MAAI,yBAAwC;AAE5C,QAAM,eAAe,CAAC,QAAQ,OAAO,OAAO,EAAE,SAAS,UAAU;AAEjE,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,UAAM,QAAQ,WAAW,CAAC;AAC1B,QAAI,YAAY,IAAI,CAAC,EAAG;AAExB,UAAM,UAAU,MAAM,KAAK,UAAU,GAAG,QAAQ,KAAK;AAErD,QAAI,YAAY,QAAQ;AACtB,uBAAiB;AACjB,kBAAY,IAAI,CAAC;AACjB;AAAA,IACF;AAEA,QAAI,YAAY,SAAS;AACvB,8BAAwB;AACxB,kBAAY,IAAI,CAAC;AACjB;AAAA,IACF;AAEA,QAAI,YAAY,WAAW;AACzB,+BAAyB;AACzB,kBAAY,IAAI,CAAC;AACjB;AAAA,IACF;AAEA,QAAI,YAAY,WAAW;AACzB,+BAAyB;AACzB,kBAAY,IAAI,CAAC;AACjB;AAAA,IACF;AAEA,QAAI,gBAAgB,mBAAmB,MAAM;AAC3C,uBAAiB;AACjB,kBAAY,IAAI,CAAC;AACjB;AAAA,IACF;AAEA,UAAM,QAAQ,aAAa,MAAM,MAAM,OAAO;AAC9C,QAAI,SAAS,0BAA0B,QAAQ,CAAC,cAAc;AAC5D,8BAAwB;AACxB,kBAAY,IAAI,CAAC;AACjB;AAAA,IACF;AAEA,sBAAkB,KAAK,CAAC;AACxB,gBAAY,IAAI,CAAC;AAAA,EACnB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,EACnB;AACF;AAEA,SAAS,aAAa,MAAe,SAAkC;AACrE,QAAM,eAAe,KAAK,QAAQ,mBAAAD,QAAG,UAAU,YAAY;AAC3D,MAAI,CAAC,YAAa,QAAO;AAEzB,QAAM,SAAS,KAAK,UAAU;AAC9B,MAAI,QAAQ,QAAQ,MAAM,WAAY,QAAO;AAE7C,QAAM,aAAa,QAAQ,oBAAoB,IAAI;AACnD,MAAI,WAAW,SAAS,EAAG,QAAO;AAElC,QAAM,iBAAiB,KAAK,kBAAkB;AAC9C,MAAI,kBAAkB,eAAe,SAAS,EAAG,QAAO;AAExD,SAAO;AACT;AAEA,SAAS,cAAc,MAAwB,MAAmC;AAChF,QAAM,aAAa,mBAAAA,QAAG,cAAc,IAAI;AACxC,MAAI,CAAC,WAAY,QAAO;AAExB,aAAW,aAAa,YAAY;AAClC,QAAI,mBAAAA,QAAG,iBAAiB,UAAU,UAAU,GAAG;AAC7C,YAAM,OAAO,UAAU,WAAW;AAClC,UAAI,mBAAAA,QAAG,aAAa,IAAI,KAAK,KAAK,SAAS,MAAM;AAC/C,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,0BAA0B,WAAwC;AACzE,MAAI,mBAAAA,QAAG,iBAAiB,UAAU,UAAU,GAAG;AAC7C,UAAM,MAAM,UAAU,WAAW,UAAU,CAAC;AAC5C,QAAI,OAAO,mBAAAA,QAAG,gBAAgB,GAAG,GAAG;AAClC,aAAO,IAAI;AAAA,IACb;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,cAAc,MAAe,SAAkC;AACtE,QAAM,SAAS,KAAK,UAAU;AAC9B,MAAI,QAAQ,QAAQ,MAAM,WAAW;AACnC,UAAM,WAAY,KAA0B;AAC5C,QAAI,YAAY,SAAS,SAAS,GAAG;AACnC,aAAO,SAAS,CAAC;AAAA,IACnB;AAAA,EACF;AACA,SAAO;AACT;;;AEnWA,IAAAE,qBAAe;;;ACAf,IAAAC,qBAAe;AAkDR,SAAS,iBACd,MACA,KACA,UACY;AACZ,QAAM,EAAE,QAAQ,IAAI;AAEpB,MAAI,KAAK,QAAQ,mBAAAC,QAAG,UAAU,WAAW;AACvC,WAAO,CAAC;AAAA,EACV;AACA,MAAI,KAAK,QAAQ,mBAAAA,QAAG,UAAU,MAAM;AAClC,WAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AAEA,MAAI,KAAK,QAAQ,mBAAAA,QAAG,UAAU,QAAQ;AACpC,WAAO,EAAE,MAAM,SAAS;AAAA,EAC1B;AACA,MAAI,KAAK,QAAQ,mBAAAA,QAAG,UAAU,QAAQ;AACpC,WAAO,EAAE,MAAM,SAAS;AAAA,EAC1B;AACA,MAAI,KAAK,QAAQ,mBAAAA,QAAG,UAAU,SAAS;AACrC,WAAO,EAAE,MAAM,UAAU;AAAA,EAC3B;AACA,MAAI,KAAK,QAAQ,mBAAAA,QAAG,UAAU,QAAQ;AACpC,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS;AAAA,IACX;AAAA,EACF;AAEA,MAAI,KAAK,QAAQ,mBAAAA,QAAG,UAAU,eAAe;AAC3C,UAAM,QAAS,KAA8B;AAC7C,WAAO,EAAE,MAAM,UAAU,MAAM,CAAC,KAAK,EAAE;AAAA,EACzC;AACA,MAAI,KAAK,QAAQ,mBAAAA,QAAG,UAAU,eAAe;AAC3C,UAAM,QAAS,KAA8B;AAC7C,WAAO,EAAE,MAAM,UAAU,MAAM,CAAC,KAAK,EAAE;AAAA,EACzC;AACA,MAAI,KAAK,QAAQ,mBAAAA,QAAG,UAAU,gBAAgB;AAC5C,UAAM,YAAa,KAAa;AAChC,WAAO,EAAE,MAAM,WAAW,MAAM,CAAC,cAAc,MAAM,EAAE;AAAA,EACzD;AAEA,MAAI,KAAK,QAAQ,GAAG;AAClB,WAAO,YAAY,KAAK,OAAO,KAAK,QAAQ;AAAA,EAC9C;AAEA,MAAI,KAAK,eAAe,GAAG;AACzB,WAAO,mBAAmB,KAAK,OAAO,KAAK,QAAQ;AAAA,EACrD;AAEA,MAAI,QAAQ,YAAY,IAAI,GAAG;AAC7B,UAAM,WAAY,KAA0B;AAC5C,UAAM,WAAW,WAAW,CAAC;AAC7B,UAAM,QAAQ,WAAW,iBAAiB,UAAU,GAAG,IAAI,CAAC;AAC5D,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,aAAa,UAAU,MAAM,OAAO,IAAI,OAAO;AAAA,IACjD;AAAA,EACF;AAEA,MAAI,KAAK,QAAQ,mBAAAA,QAAG,UAAU,QAAQ;AACpC,WAAO,iBAAiB,MAAuB,KAAK,QAAQ;AAAA,EAC9D;AAEA,SAAO,CAAC;AACV;AAEA,SAAS,UAAU,MAAe,SAAkC;AAClE,QAAM,SAAS,KAAK,UAAU;AAC9B,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,OAAO,OAAO,QAAQ;AAC5B,MAAI,SAAS,MAAO,QAAO;AAC3B,SAAO;AACT;AAEA,SAAS,YACP,OACA,KACA,UACY;AACZ,QAAM,WAAW,MAAM,KAAK,OAAK,EAAE,QAAQ,mBAAAA,QAAG,UAAU,IAAI;AAC5D,QAAM,aAAa,MAAM,OAAO,OAAK,EAAE,EAAE,QAAQ,mBAAAA,QAAG,UAAU,SAAS,EAAE,EAAE,QAAQ,mBAAAA,QAAG,UAAU,UAAU;AAE1G,QAAM,oBAAoB,WAAW,MAAM,OAAK,EAAE,QAAQ,mBAAAA,QAAG,UAAU,aAAa;AACpF,MAAI,qBAAqB,WAAW,SAAS,GAAG;AAC9C,UAAM,aAAa,WAAW,IAAI,OAAM,EAA2B,KAAK;AACxE,UAAM,SAAqB,EAAE,MAAM,UAAU,MAAM,WAAW;AAC9D,QAAI,UAAU;AACZ,aAAO,OAAO,CAAC,UAAU,MAAM;AAAA,IACjC;AACA,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,WAAW,KAAK,UAAU;AACvC,UAAM,cAAc,iBAAiB,WAAW,CAAC,GAAG,GAAG;AACvD,QAAI,OAAO,YAAY,SAAS,UAAU;AACxC,kBAAY,OAAO,CAAC,YAAY,MAAM,MAAM;AAAA,IAC9C;AACA,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,SAAS,GAAG;AACzB,UAAM,WAAW,WAAW,IAAI,OAAK,iBAAiB,GAAG,GAAG,CAAC;AAC7D,UAAM,UAAU,CAAC,CAAC;AAElB,UAAM,SAAqB,CAAC;AAE5B,QAAI,SAAS;AACX,aAAO,QAAQ,CAAC,GAAG,UAAU,EAAE,MAAM,OAAO,CAAC;AAAA,IAC/C,OAAO;AACL,aAAO,QAAQ;AAAA,IACjB;AAEA,UAAM,sBAAsB,yBAAyB,YAAY,KAAK,QAAQ;AAC9E,QAAI,qBAAqB;AACvB,aAAO,QAAQ;AACf,aAAO,gBAAgB;AAAA,IACzB;AAEA,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,WAAW,GAAG;AAC3B,WAAO,iBAAiB,WAAW,CAAC,GAAG,GAAG;AAAA,EAC5C;AAEA,SAAO,CAAC;AACV;AAEA,SAAS,mBACP,OACA,KACA,UACY;AACZ,QAAM,iBAAiB,+BAA+B,OAAO,KAAK,QAAQ;AAC1E,MAAI,gBAAgB;AAClB,WAAO;AAAA,EACT;AAEA,QAAM,QAAsB,CAAC;AAC7B,aAAW,KAAK,OAAO;AACrB,UAAM,KAAK,iBAAiB,GAAG,GAAG,CAAC;AAAA,EACrC;AAEA,SAAO,EAAE,MAAM;AACjB;AAEA,SAAS,+BACP,OACA,KACA,UACmB;AACnB,QAAM,EAAE,QAAQ,IAAI;AACpB,QAAM,QAAQ,CAAC,GAAG,KAAK;AAEvB,QAAM,OAAO,MAAM,KAAK,eAAe;AACvC,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,OAAO,MAAM,OAAO,OAAK,MAAM,IAAI;AACzC,MAAI,KAAK,MAAM,OAAK,cAAc,SAAS,GAAG,GAAG,CAAC,GAAG;AACnD,WAAO,iBAAiB,MAAM,GAAG;AAAA,EACnC;AAEA,SAAO;AACT;AAEA,SAAS,gBAAgB,GAAqB;AAC5C,UAAQ,EAAE,SAAS,mBAAAA,QAAG,UAAU,SAAS,mBAAAA,QAAG,UAAU,SAAS,mBAAAA,QAAG,UAAU,UAAU,mBAAAA,QAAG,UAAU,aAAa,MAC1G,EAAE,QAAQ,mBAAAA,QAAG,UAAU,mBAAmB,MAC1C,EAAE,QAAQ,mBAAAA,QAAG,UAAU,mBAAmB;AAClD;AAEA,SAAS,cAAc,SAAyB,GAAY,KAA6B;AACvF,MAAI,EAAE,EAAE,QAAQ,mBAAAA,QAAG,UAAU,QAAS,QAAO;AAE7C,QAAM,QAAQ,EAAE,cAAc;AAC9B,MAAI,MAAM,WAAW,EAAG,QAAO;AAE/B,QAAM,UAAU,oBAAI,IAAI,CAAC,WAAW,UAAU,SAAS,OAAO,CAAC;AAC/D,aAAW,KAAK,OAAO;AACrB,QAAI,CAAC,QAAQ,IAAI,EAAE,QAAQ,CAAC,EAAG,QAAO;AAAA,EACxC;AAEA,QAAM,WAAY,EAAoB,oBAAoB;AAC1D,MAAI,YAAY,SAAS,SAAS,EAAG,QAAO;AAE5C,QAAM,gBAAiB,EAAoB,yBAAyB;AACpE,MAAI,iBAAiB,cAAc,SAAS,EAAG,QAAO;AAEtD,SAAO;AACT;AAEA,SAAS,yBACP,OACA,KACA,UAC4B;AAC5B,MAAI,MAAM,SAAS,EAAG,QAAO;AAE7B,QAAM,aAAa,wBAAwB,IAAI,SAAS,KAAK;AAC7D,aAAW,YAAY,YAAY;AACjC,UAAM,gBAAgB,MAAM,MAAM,OAAK,mBAAmB,IAAI,SAAS,GAAG,QAAQ,CAAC;AACnF,QAAI,CAAC,cAAe;AAEpB,UAAM,cAAc,MAAM,IAAI,OAAK,yBAAyB,IAAI,SAAS,GAAG,QAAQ,CAAC;AACrF,QAAI,YAAY,KAAK,OAAK,MAAM,IAAI,EAAG;AAEvC,UAAM,UAAU;AAChB,QAAI,CAAC,gBAAgB,OAAO,EAAG;AAE/B,UAAM,UAAkC,CAAC;AACzC,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,aAAa,oBAAoB,MAAM,CAAC,GAAG,GAAG;AACpD,iBAAW,OAAO,QAAQ,CAAC,GAAG;AAC5B,gBAAQ,GAAG,IAAI,wBAAwB,UAAU;AAAA,MACnD;AAAA,IACF;AAEA,WAAO,EAAE,cAAc,UAAU,QAAQ;AAAA,EAC3C;AAEA,SAAO;AACT;AAEA,SAAS,wBAAwB,SAAyB,OAAqC;AAC7F,MAAI,MAAM,WAAW,EAAG,QAAO,CAAC;AAEhC,QAAM,aAAa,MAAM,CAAC,EAAE,cAAc,EAAE,IAAI,OAAK,EAAE,QAAQ,CAAC;AAChE,SAAO,WAAW;AAAA,IAAO,UACvB,MAAM,MAAM,OAAK,CAAC,CAAC,QAAQ,kBAAkB,GAAG,IAAI,CAAC;AAAA,EACvD;AACF;AAEA,SAAS,mBAAmB,SAAyB,MAAe,UAA2B;AAC7F,QAAM,MAAM,QAAQ,kBAAkB,MAAM,QAAQ;AACpD,MAAI,CAAC,IAAK,QAAO;AAEjB,MAAI,IAAI,QAAQ,mBAAAA,QAAG,YAAY,SAAU,QAAO;AAEhD,QAAM,WAAW,QAAQ,gBAAgB,GAAG;AAC5C,MAAI,SAAS,UAAU,GAAG;AACxB,UAAM,eAAe,SAAS,MAAM,KAAK,QAAM,EAAE,QAAQ,mBAAAA,QAAG,UAAU,eAAe,CAAC;AACtF,QAAI,aAAc,QAAO;AAAA,EAC3B;AAEA,SAAO;AACT;AAEA,SAAS,yBAAyB,SAAyB,MAAe,UAAsC;AAC9G,QAAM,MAAM,QAAQ,kBAAkB,MAAM,QAAQ;AACpD,MAAI,CAAC,IAAK,QAAO;AAEjB,QAAM,WAAW,QAAQ,gBAAgB,GAAG;AAE5C,MAAI,SAAS,kBAAkB,GAAG;AAChC,WAAO,oBAAI,IAAI,CAAE,SAAkC,KAAK,CAAC;AAAA,EAC3D;AAEA,MAAI,SAAS,UAAU,GAAG;AACxB,UAAM,SAAS,oBAAI,IAAY;AAC/B,eAAW,KAAK,SAAS,OAAO;AAC9B,UAAI,CAAC,EAAE,kBAAkB,EAAG,QAAO;AACnC,aAAO,IAAK,EAA2B,KAAK;AAAA,IAC9C;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,SAAS,gBAAgB,MAAmC;AAC1D,QAAM,OAAO,oBAAI,IAAY;AAC7B,aAAW,KAAK,MAAM;AACpB,eAAW,KAAK,GAAG;AACjB,UAAI,KAAK,IAAI,CAAC,EAAG,QAAO;AACxB,WAAK,IAAI,CAAC;AAAA,IACZ;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,MAAe,KAA4B;AACtE,QAAM,SAAS,KAAK,UAAU;AAC9B,MAAI,QAAQ;AACV,WAAO,OAAO,QAAQ;AAAA,EACxB;AAEA,QAAM,cAAe,KAAa;AAClC,MAAI,aAAa;AACf,WAAO,YAAY,QAAQ;AAAA,EAC7B;AAEA,SAAO,aAAa,IAAI,cAAc,MAAM;AAC9C;AAEA,SAAS,iBACP,MACA,KACA,UACY;AACZ,QAAM,EAAE,SAAS,YAAY,UAAU,IAAI;AAC3C,QAAM,SAAS,KAAK,UAAU;AAC9B,QAAM,WAAW,QAAQ,UAAU,KAAK,oBAAoB,UAAU,GAAG;AAEzE,MAAI,YAAY,aAAa,UAAU;AACrC,QAAI,WAAW,IAAI,QAAQ,GAAG;AAC5B,aAAO,EAAE,MAAM,wBAAwB,QAAQ,GAAG;AAAA,IACpD;AAEA,QAAI,UAAU,IAAI,IAAI,GAAG;AACvB,aAAO,EAAE,MAAM,wBAAwB,QAAQ,GAAG;AAAA,IACpD;AAEA,cAAU,IAAI,IAAI;AAAA,EACpB;AAEA,QAAM,SAAS,kBAAkB,MAAM,KAAK,QAAQ;AAEpD,MAAI,YAAY,aAAa,UAAU;AACrC,cAAU,OAAO,IAAI;AACrB,QAAI,CAAC,WAAW,IAAI,QAAQ,GAAG;AAC7B,iBAAW,IAAI,UAAU,MAAM;AAAA,IACjC;AACA,WAAO,EAAE,MAAM,wBAAwB,QAAQ,GAAG;AAAA,EACpD;AAEA,YAAU,OAAO,IAAI;AACrB,SAAO;AACT;AAOA,SAAS,oBAAoB,UAAmC,KAA4B;AAC1F,MAAI,CAAC,SAAU,QAAO,aAAa,IAAI,cAAc,MAAM;AAE3D,MAAI,mBAAAC,QAAG,oBAAoB,QAAQ,GAAG;AACpC,QAAI,mBAAAA,QAAG,aAAa,SAAS,QAAQ,GAAG;AACtC,aAAO,SAAS,SAAS;AAAA,IAC3B;AAAA,EACF;AAEA,MAAI,mBAAAA,QAAG,uBAAuB,SAAS,MAAM,GAAG;AAC9C,QAAI,mBAAAA,QAAG,aAAa,SAAS,OAAO,IAAI,GAAG;AACzC,aAAO,SAAS,OAAO,KAAK;AAAA,IAC9B;AAAA,EACF;AAEA,SAAO,aAAa,IAAI,cAAc,MAAM;AAC9C;AAEA,SAAS,kBACP,MACA,KACA,UACY;AACZ,QAAM,EAAE,QAAQ,IAAI;AAEpB,QAAM,aAAyC,CAAC;AAChD,QAAM,WAAqB,CAAC;AAE5B,QAAM,QAAQ,QAAQ,oBAAoB,IAAI;AAC9C,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAW,KAAK,QAAQ;AAC9B,UAAM,WAAW,QAAQ,gBAAgB,IAAI;AAC7C,UAAM,aAAa,CAAC,EAAE,KAAK,QAAQ,mBAAAA,QAAG,YAAY;AAElD,eAAW,QAAQ,IAAI,iBAAiB,UAAU,GAAG;AAErD,QAAI,CAAC,YAAY;AACf,eAAS,KAAK,QAAQ;AAAA,IACxB;AAAA,EACF;AAEA,QAAM,SAAqB;AAAA,IACzB,MAAM;AAAA,IACN;AAAA,EACF;AAEA,MAAI,SAAS,SAAS,GAAG;AACvB,WAAO,WAAW;AAAA,EACpB;AAEA,MAAI,aAAa,MAAM,OAAO,GAAG;AAC/B,UAAM,YAAY,mBAAmB,MAAM,OAAO;AAClD,QAAI,WAAW;AACb,aAAO,uBAAuB,iBAAiB,WAAW,GAAG;AAAA,IAC/D;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,aAAa,MAAqB,SAAkC;AAC3E,QAAM,SAAS,KAAK,UAAU;AAC9B,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,OAAO,OAAO,QAAQ;AAC5B,MAAI,SAAS,SAAU,QAAO;AAE9B,SAAO;AACT;AAEA,SAAS,mBAAmB,MAAqB,SAAyC;AACxF,QAAM,SAAS,KAAK,UAAU;AAC9B,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,OAAO,OAAO,QAAQ;AAC5B,MAAI,SAAS,UAAU;AACrB,UAAM,UAAU;AAChB,UAAM,WAAW,QAAQ;AACzB,QAAI,YAAY,SAAS,UAAU,GAAG;AACpC,aAAO,SAAS,CAAC;AAAA,IACnB;AAAA,EACF;AAEA,SAAO;AACT;;;ACxdA,IAAAC,qBAAe;AAMR,SAAS,+BACd,SACA,MACkB;AAClB,MAAI,CAAC,mBAAAC,QAAG,kBAAkB,IAAI,EAAG,QAAO,CAAC;AAEzC,QAAM,OAAO,mBAAAA,QAAG,cAAc,IAAI;AAClC,MAAI,CAAC,QAAQ,KAAK,WAAW,EAAG,QAAO,CAAC;AAExC,QAAM,QAA0B,CAAC;AAEjC,aAAW,KAAK,MAAM;AACpB,UAAM,OAAO,EAAE;AAEf,QAAI;AACJ,QAAI;AAEJ,QAAI,mBAAAA,QAAG,iBAAiB,IAAI,GAAG;AAC7B,eAAS,KAAK;AACd,aAAO,KAAK;AAAA,IACd,OAAO;AACL,eAAS;AACT,aAAO,mBAAAA,QAAG,QAAQ,gBAAgB,CAAC,CAAC;AAAA,IACtC;AAEA,UAAM,MAAM,QAAQ,oBAAoB,MAAM;AAC9C,QAAI,CAAC,IAAK;AAEV,UAAM,WAAW,yBAAyB,SAAS,GAAG;AACtD,QAAI,CAAC,YAAY,SAAS,WAAW,mBAAoB;AAEzD,UAAM,OAAO,SAAS;AAEtB,QAAI,SAAS,UAAU;AACrB,YAAM,MAAM,KAAK,CAAC;AAClB,UAAI,OAAO,mBAAAA,QAAG,0BAA0B,GAAG,GAAG;AAC5C,cAAM,OAAO,oBAAoB,GAAG;AACpC,YAAI,KAAM,OAAM,KAAK,IAAI;AAAA,MAC3B;AACA;AAAA,IACF;AAEA,QAAI,SAAS,SAAS,gBAAgB,KAAK,CAAC,CAAC,GAAG;AAC9C,YAAM,KAAK,EAAE,SAAS,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;AAAA,IAC9C,WAAW,SAAS,SAAS,gBAAgB,KAAK,CAAC,CAAC,GAAG;AACrD,YAAM,KAAK,EAAE,SAAS,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;AAAA,IAC9C,WAAW,SAAS,kBAAkB,gBAAgB,KAAK,CAAC,CAAC,GAAG;AAC9D,YAAM,KAAK,EAAE,kBAAkB,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;AAAA,IACvD,WAAW,SAAS,kBAAkB,gBAAgB,KAAK,CAAC,CAAC,GAAG;AAC9D,YAAM,KAAK,EAAE,kBAAkB,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;AAAA,IACvD,WAAW,SAAS,eAAe,gBAAgB,KAAK,CAAC,CAAC,GAAG;AAC3D,YAAM,KAAK,EAAE,WAAW,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;AAAA,IAChD,WAAW,SAAS,eAAe,gBAAgB,KAAK,CAAC,CAAC,GAAG;AAC3D,YAAM,KAAK,EAAE,WAAW,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;AAAA,IAChD,WAAW,SAAS,YAAY,gBAAgB,KAAK,CAAC,CAAC,GAAG;AACxD,YAAM,KAAK,EAAE,QAAQ,KAAK,CAAC,EAAE,KAAK,CAAC;AAAA,IACrC,WAAW,SAAS,WAAW;AAC7B,YAAM,MAAM,KAAK,CAAC;AAClB,UAAI,OAAO,mBAAAA,QAAG,2BAA2B,GAAG,GAAG;AAC7C,cAAM,KAAK,EAAE,SAAS,oBAAoB,IAAI,IAAI,EAAE,CAAC;AAAA,MACvD,WAAW,gBAAgB,GAAG,GAAG;AAC/B,cAAM,KAAK,EAAE,SAAS,IAAI,KAAK,CAAC;AAAA,MAClC;AAAA,IACF,WAAW,SAAS,cAAc,gBAAgB,KAAK,CAAC,CAAC,GAAG;AAC1D,YAAM,KAAK,EAAE,UAAU,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;AAAA,IAC/C,WAAW,SAAS,cAAc,gBAAgB,KAAK,CAAC,CAAC,GAAG;AAC1D,YAAM,KAAK,EAAE,UAAU,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;AAAA,IAC/C,WAAW,SAAS,mBAAmB,gBAAgB,KAAK,CAAC,CAAC,GAAG;AAC/D,YAAM,KAAK,EAAE,eAAe,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;AAAA,IACpD,WAAW,SAAS,mBAAmB,gBAAgB,KAAK,CAAC,CAAC,GAAG;AAC/D,YAAM,KAAK,EAAE,eAAe,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;AAAA,IACpD,WAAW,SAAS,gBAAgB,gBAAgB,KAAK,CAAC,CAAC,GAAG;AAC5D,YAAM,KAAK,EAAE,YAAY,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;AAAA,IACjD,WAAW,SAAS,WAAW;AAC7B,YAAM,KAAK,EAAE,SAAS,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;AAAA,IAChD,WAAW,SAAS,cAAc,mBAAAA,QAAG,yBAAyB,KAAK,CAAC,CAAC,GAAG;AACtE,YAAM,KAAK,EAAE,UAAU,KAAK,CAAC,EAAE,SAAS,IAAI,OAAK,cAAc,CAAC,CAAC,EAAE,CAAC;AAAA,IACtE,WAAW,SAAS,iBAAiB,gBAAgB,KAAK,CAAC,CAAC,GAAG;AAC7D,YAAM,KAAK,EAAE,aAAa,KAAK,CAAC,EAAE,KAAK,CAAC;AAAA,IAC1C,WAAW,SAAS,UAAU,mBAAAA,QAAG,yBAAyB,KAAK,CAAC,CAAC,GAAG;AAClE,YAAM,KAAK,EAAE,MAAM,KAAK,CAAC,EAAE,SAAS,IAAI,OAAK,cAAc,CAAC,CAAC,EAAE,CAAC;AAAA,IAClE,WAAW,SAAS,SAAS;AAC3B,YAAM,KAAK,EAAE,OAAO,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;AAAA,IAC9C,WAAW,SAAS,WAAW;AAC7B,YAAM,KAAK,EAAE,SAAS,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;AAAA,IAChD,WAAW,SAAS,wBAAwB;AAC1C,YAAM,MAAM,KAAK,CAAC;AAClB,UAAI,QAAQ,IAAI,SAAS,mBAAAA,QAAG,WAAW,gBAAgB,IAAI,SAAS,mBAAAA,QAAG,WAAW,cAAc;AAC9F,cAAM,KAAK,EAAE,sBAAsB,IAAI,SAAS,mBAAAA,QAAG,WAAW,YAAY,CAAC;AAAA,MAC7E,WAAW,OAAO,mBAAAA,QAAG,0BAA0B,GAAG,GAAG;AACnD,cAAM,MAAM,oBAAoB,GAAG;AACnC,YAAI,IAAK,OAAM,KAAK,EAAE,sBAAsB,IAAI,CAAC;AAAA,MACnD;AAAA,IACF,WAAW,SAAS,UAAU;AAC5B,YAAM,KAAK,EAAE,sBAAsB,MAAM,CAAC;AAAA,IAC5C,WAAW,SAAS,qBAAqB;AACvC,YAAM,KAAK,EAAE,uBAAuB,MAAM,CAAC;AAAA,IAC7C;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,yBACP,SACA,KACyC;AACzC,QAAM,SAAU,IAAI,QAAQ,mBAAAA,QAAG,YAAY,QAAS,QAAQ,iBAAiB,GAAG,IAAI;AACpF,QAAM,OAAO,OAAO,QAAQ;AAE5B,QAAM,OAAO,OAAO,eAAe,CAAC;AACpC,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,WAAW,KAAK,cAAc,EAAE,SAAS,QAAQ,OAAO,GAAG;AAEjE,MAAI,SAAS,SAAS,0BAA0B,KAAK,SAAS,SAAS,cAAc,GAAG;AACtF,WAAO,EAAE,QAAQ,oBAAoB,KAAK;AAAA,EAC5C;AAEA,SAAO;AACT;AAEA,SAAS,gBAAgB,MAAsD;AAC7E,SAAO,CAAC,CAAC,QAAQ,mBAAAA,QAAG,iBAAiB,IAAI;AAC3C;AAEA,SAAS,gBAAgB,MAAqD;AAC5E,SAAO,CAAC,CAAC,QAAQ,mBAAAA,QAAG,gBAAgB,IAAI;AAC1C;AAEA,SAAS,oBAAoB,MAAsB;AACjD,QAAM,QAAQ,KAAK,MAAM,qBAAqB;AAC9C,SAAO,QAAQ,MAAM,CAAC,IAAI;AAC5B;AAEA,SAAS,oBAAoB,KAA0D;AACrF,QAAM,MAA+B,CAAC;AACtC,aAAW,QAAQ,IAAI,YAAY;AACjC,QAAI,CAAC,mBAAAA,QAAG,qBAAqB,IAAI,EAAG;AACpC,UAAM,OAAO,KAAK;AAClB,QAAI;AACJ,QAAI,mBAAAA,QAAG,aAAa,IAAI,GAAG;AACzB,YAAM,KAAK;AAAA,IACb,WAAW,mBAAAA,QAAG,gBAAgB,IAAI,GAAG;AACnC,YAAM,KAAK;AAAA,IACb,OAAO;AACL;AAAA,IACF;AACA,QAAI,GAAG,IAAI,cAAc,KAAK,WAAW;AAAA,EAC3C;AACA,SAAO;AACT;AAEA,SAAS,cAAc,MAA8B;AACnD,MAAI,mBAAAA,QAAG,gBAAgB,IAAI,EAAG,QAAO,KAAK;AAC1C,MAAI,mBAAAA,QAAG,iBAAiB,IAAI,EAAG,QAAO,OAAO,KAAK,IAAI;AACtD,MAAI,KAAK,SAAS,mBAAAA,QAAG,WAAW,YAAa,QAAO;AACpD,MAAI,KAAK,SAAS,mBAAAA,QAAG,WAAW,aAAc,QAAO;AACrD,MAAI,KAAK,SAAS,mBAAAA,QAAG,WAAW,YAAa,QAAO;AACpD,MAAI,mBAAAA,QAAG,0BAA0B,IAAI,EAAG,QAAO,oBAAoB,IAAI;AACvE,MAAI,mBAAAA,QAAG,yBAAyB,IAAI,EAAG,QAAO,KAAK,SAAS,IAAI,OAAK,cAAc,CAAC,CAAC;AACrF,SAAO;AACT;AAEO,SAAS,eAAe,SAAkC,OAAkD;AACjH,QAAM,SAAS,EAAE,GAAG,KAAK;AACzB,aAAW,QAAQ,OAAO;AACxB,WAAO,OAAO,QAAQ,IAAI;AAAA,EAC5B;AACA,SAAO;AACT;;;AF9JO,SAAS,gBACd,aACA,SACA,UAAgD,CAAC,GACtC;AACX,QAAM,aAAa,oBAAI,IAAwB;AAC/C,QAAM,MAAqB;AAAA,IACzB;AAAA,IACA;AAAA,IACA,WAAW,oBAAI,IAAI;AAAA,IACnB,eAAe,CAAC;AAAA,EAClB;AAEA,QAAM,QAA6C,CAAC;AAEpD,aAAW,cAAc,aAAa;AACpC,eAAW,aAAa,WAAW,YAAY;AAC7C,YAAM,WAAW,qBAAqB,WAAW,UAAU,UAAU,IAAI;AAEzE,UAAI,CAAC,MAAM,QAAQ,GAAG;AACpB,cAAM,QAAQ,IAAI,CAAC;AAAA,MACrB;AAEA,YAAM,SAAS,UAAU,WAAW,YAAY;AAChD,YAAM,QAAQ,EAAE,MAAM,IAAI,eAAe,WAAW,KAAK,WAAW,QAAQ;AAAA,IAC9E;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,MACJ,OAAO,QAAQ,SAAS;AAAA,MACxB,SAAS,QAAQ,WAAW;AAAA,IAC9B;AAAA,IACA,YAAY;AAAA,MACV,SAAS,OAAO,YAAY,UAAU;AAAA,IACxC;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,qBAAqB,UAAkBC,OAAsB;AACpE,QAAM,OAAO,SAAS,SAAS,GAAG,IAAI,SAAS,MAAM,GAAG,EAAE,IAAI;AAC9D,QAAM,YAAYA,MAAK,QAAQ,aAAa,MAAM;AAClD,SAAO,OAAO,aAAa;AAC7B;AAEA,SAAS,eAAe,WAA6B,KAAoB,oBAAoC;AAC3G,QAAM,KAAU;AAAA,IACd,aAAa,UAAU;AAAA,IACvB,WAAW,CAAC;AAAA,EACd;AAEA,QAAM,aAAoB,CAAC;AAE3B,sBAAoB,WAAW,KAAK,UAAU;AAC9C,uBAAqB,WAAW,KAAK,UAAU;AAC/C,wBAAsB,WAAW,KAAK,UAAU;AAChD,wBAAsB,WAAW,KAAK,UAAU;AAEhD,MAAI,WAAW,SAAS,GAAG;AACzB,OAAG,aAAa;AAAA,EAClB;AAEA,QAAM,iBAAiB,iBAAiB,UAAU,YAAY,GAAG;AAEjE,QAAM,SAAS,UAAU,eAAe,SAAS,MAAM;AACvD,KAAG,UAAU,MAAM,IAAI;AAAA,IACrB,aAAa,WAAW,MAAM,YAAY;AAAA,IAC1C,SAAS;AAAA,MACP,oBAAoB;AAAA,QAClB,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,QAAQ,OAAO,OAAO,EAAE,SAAS,UAAU,UAAU,KAAK,UAAU,mBAAmB,MAAM;AAChG,UAAM,YAAY,UAAU,WAAW,UAAU,cAAc;AAC/D,QAAI,WAAW;AACb,UAAI,aAAa,iBAAiB,UAAU,MAAM,GAAG;AACrD,mBAAa,2BAA2B,WAAW,KAAK,UAAU;AAElE,YAAM,cAAc,UAAU,mBAAmB,qBAAqB,CAAC,KAAK;AAE5E,YAAM,cAAmB;AAAA,QACvB,UAAU,CAAC,UAAU;AAAA,QACrB,SAAS,CAAC;AAAA,MACZ;AAEA,UAAI,gBAAgB,uBAAuB;AACzC,oBAAY,QAAQ,qBAAqB,IAAI;AAAA,UAC3C,QAAQ;AAAA,QACV;AAAA,MACF,OAAO;AACL,oBAAY,QAAQ,WAAW,IAAI;AAAA,UACjC,QAAQ;AAAA,QACV;AAAA,MACF;AAEA,SAAG,cAAc;AAAA,IACnB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,2BACP,WACA,KACA,QACY;AACZ,MAAI,CAAC,OAAO,WAAY,QAAO;AAE/B,QAAM,aAAa,UAAU,KAAK,UAAU;AAC5C,MAAI,CAAC,WAAY,QAAO;AAExB,QAAM,eAAe,WAAW,gBAAgB;AAChD,MAAI,CAAC,gBAAgB,aAAa,WAAW,EAAG,QAAO;AAEvD,QAAM,YAAY,aAAa,CAAC;AAChC,MAAI,CAAC,mBAAAC,QAAG,mBAAmB,SAAS,EAAG,QAAO;AAE9C,QAAM,SAAS,EAAE,GAAG,OAAO;AAC3B,QAAM,QAAQ,EAAE,GAAG,OAAO,WAAyC;AAEnE,aAAW,UAAU,UAAU,SAAS;AACtC,QAAI,CAAC,mBAAAA,QAAG,sBAAsB,MAAM,KAAK,CAAC,OAAO,KAAM;AAEvD,UAAM,WAAW,mBAAAA,QAAG,aAAa,OAAO,IAAI,IAAI,OAAO,KAAK,OAAO;AACnE,QAAI,CAAC,SAAU;AACf,QAAI,CAAC,MAAM,QAAQ,EAAG;AAEtB,UAAM,QAAQ,+BAA+B,IAAI,SAAS,MAAM;AAChE,QAAI,MAAM,SAAS,GAAG;AACpB,YAAM,QAAQ,IAAI,eAAe,MAAM,QAAQ,GAA8B,GAAG,KAAK;AAAA,IACvF;AAAA,EACF;AAEA,SAAO,aAAa;AACpB,SAAO;AACT;AAEA,SAAS,oBAAoB,WAA6B,KAAoB,YAAyB;AACrG,aAAW,cAAc,UAAU,kBAAkB;AACnD,UAAM,QAAQ,UAAU,WAAW,UAAU;AAC7C,QAAI,OAAO;AACT,UAAI,cAAc,iBAAiB,MAAM,MAAM,GAAG;AAClD,UAAI,MAAM,WAAW;AACnB,cAAM,QAAQ,+BAA+B,IAAI,SAAS,MAAM,SAAS;AACzE,YAAI,MAAM,SAAS,GAAG;AACpB,wBAAc,eAAe,aAAwC,GAAG,KAAK;AAAA,QAC/E;AAAA,MACF;AACA,iBAAW,KAAK;AAAA,QACd,MAAM,MAAM;AAAA,QACZ,IAAI;AAAA,QACJ,UAAU,CAAC,MAAM;AAAA,QACjB,QAAQ,YAAY,OAChB,EAAE,MAAM,UAAU,MAAM,YAAY,KAAK,IACzC;AAAA,MACN,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,qBAAqB,WAA6B,KAAoB,YAAyB;AACtG,MAAI,UAAU,0BAA0B,MAAM;AAC5C,UAAM,aAAa,UAAU,WAAW,UAAU,qBAAqB;AACvE,QAAI,CAAC,WAAY;AAEjB,UAAM,cAAc,iBAAiB,WAAW,MAAM,GAAG;AACzD,QAAI,CAAC,YAAY,WAAY;AAE7B,UAAM,gBAAgB,YAAY;AAClC,eAAW,CAAC,UAAU,UAAU,KAAK,OAAO,QAAQ,aAAoC,GAAG;AACzF,YAAM,aAAa,YAAY,UAAU,SAAS,QAAQ,KAAK;AAC/D,YAAM,gBAAgB,4BAA4B,WAAW,IAAI;AACjE,iBAAW,KAAK;AAAA,QACd,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,GAAI,OAAO,KAAK,aAAa,EAAE,SAAS,IAAI,gBAAgB,CAAC;AAAA,MAC/D,CAAC;AAAA,IACH;AAAA,EACF;AAEA,aAAW,cAAc,UAAU,mBAAmB;AACpD,UAAM,QAAQ,UAAU,WAAW,UAAU;AAC7C,QAAI,OAAO;AACT,UAAI,cAAc,iBAAiB,MAAM,MAAM,GAAG;AAClD,UAAI,MAAM,WAAW;AACnB,cAAM,QAAQ,+BAA+B,IAAI,SAAS,MAAM,SAAS;AACzE,YAAI,MAAM,SAAS,GAAG;AACpB,wBAAc,eAAe,aAAwC,GAAG,KAAK;AAAA,QAC/E;AAAA,MACF;AACA,YAAM,gBAAgB,4BAA4B,YAAY,IAAI;AAClE,iBAAW,KAAK;AAAA,QACd,MAAM,MAAM;AAAA,QACZ,IAAI;AAAA,QACJ,UAAU,CAAC,MAAM;AAAA,QACjB,QAAQ,YAAY,OAChB,EAAE,MAAM,UAAU,MAAM,YAAY,KAAK,IACzC;AAAA,QACJ,GAAI,OAAO,KAAK,aAAa,EAAE,SAAS,IAAI,gBAAgB,CAAC;AAAA,MAC/D,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,4BAA4B,YAAkF;AACrH,QAAM,YAAY,MAAM,QAAQ,UAAU,IAAI,aAAa,aAAa,CAAC,UAAU,IAAI,CAAC;AACxF,QAAM,UAAU,UAAU,SAAS,OAAO;AAE1C,MAAI,SAAS;AACX,WAAO,EAAE,OAAO,QAAQ,SAAS,KAAK;AAAA,EACxC;AAEA,SAAO,CAAC;AACV;AAEA,SAAS,sBAAsB,WAA6B,KAAoB,YAAyB;AACvG,MAAI,UAAU,2BAA2B,KAAM;AAE/C,QAAM,cAAc,UAAU,WAAW,UAAU,sBAAsB;AACzE,MAAI,CAAC,YAAa;AAElB,QAAM,eAAe,iBAAiB,YAAY,MAAM,GAAG;AAC3D,MAAI,CAAC,aAAa,WAAY;AAE9B,QAAM,iBAAiB,aAAa;AACpC,aAAW,CAAC,UAAU,UAAU,KAAK,OAAO,QAAQ,cAAqC,GAAG;AAC1F,UAAM,aAAa,aAAa,UAAU,SAAS,QAAQ,KAAK;AAChE,eAAW,KAAK;AAAA,MACd,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AACF;AAEA,SAAS,sBAAsB,WAA6B,KAAoB,YAAyB;AACvG,MAAI,UAAU,2BAA2B,KAAM;AAE/C,QAAM,cAAc,UAAU,WAAW,UAAU,sBAAsB;AACzE,MAAI,CAAC,YAAa;AAElB,QAAM,eAAe,iBAAiB,YAAY,MAAM,GAAG;AAC3D,MAAI,CAAC,aAAa,WAAY;AAE9B,QAAM,iBAAiB,aAAa;AACpC,aAAW,CAAC,UAAU,UAAU,KAAK,OAAO,QAAQ,cAAqC,GAAG;AAC1F,UAAM,aAAa,aAAa,UAAU,SAAS,QAAQ,KAAK;AAChE,eAAW,KAAK;AAAA,MACd,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;;;AGtRA,IAAAC,qBAAe;AAIR,SAAS,iBACd,aACA,SACA,SACA,iBAAiC,eACrB;AACZ,QAAM,aAAa,oBAAI,IAAiB;AACxC,QAAM,MAAqB;AAAA,IACzB;AAAA,IACA;AAAA,IACA,WAAW,oBAAI,IAAI;AAAA,IACnB,eAAe,CAAC;AAAA,EAClB;AAEA,QAAM,oBAAuC,YAAY,IAAI,WAAS;AAAA,IACpE,cAAc,KAAK;AAAA,IACnB,UAAU,KAAK;AAAA,IACf,YAAY,KAAK,WAAW,IAAI,QAAM,oBAAoB,IAAI,GAAG,CAAC;AAAA,EACpE,EAAE;AAEF,QAAM,mBACJ,mBAAmB,gBACjB,EAAE,MAAM,eAAe,mBAAmB,KAAK,IAC/C,mBAAmB,SACjB,EAAE,MAAM,QAAQ,mBAAmB,KAAK,IACxC,EAAE,MAAM,eAAe,mBAAmB,KAAK;AAErD,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,IACpC,WAAW;AAAA,MACT,MAAM;AAAA,MACN;AAAA,MACA,YAAY,mBAAAC,QAAG;AAAA,IACjB;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,0BAA0B;AAAA,IAC5B;AAAA,IACA,YAAY;AAAA,IACZ,aAAa;AAAA,EACf;AACF;AAEA,SAAS,oBAAoB,IAAsB,KAAoC;AACrF,QAAM,OAAiB;AAAA,IACrB,MAAM;AAAA,IACN,MAAM,CAAC;AAAA,IACP,OAAO,CAAC;AAAA,IACR,SAAS,CAAC;AAAA,IACV,SAAS,CAAC;AAAA,EACZ;AAEA,gBAAc,IAAI,KAAK,IAAI;AAC3B,iBAAe,IAAI,KAAK,IAAI;AAC5B,kBAAgB,IAAI,KAAK,IAAI;AAC7B,kBAAgB,IAAI,KAAK,IAAI;AAE7B,MAAI,GAAG,mBAAmB,MAAM;AAC9B,UAAM,YAAY,GAAG,WAAW,GAAG,cAAc;AACjD,QAAI,WAAW;AACb,YAAM,aAAa,iBAAiB,UAAU,MAAM,GAAG;AACvD,YAAMC,aAAY,WAAW,QAAQ;AAErC,WAAK,OAAO;AAAA,QACV,OAAO,UAAU;AAAA,QACjB,UAAU,CAAC,UAAU;AAAA,QACrB,aAAa,GAAG,mBAAmB;AAAA,QACnC,WAAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBAAiB,iBAAiB,GAAG,YAAY,GAAG;AAC1D,QAAM,SAAS,GAAG,eAAe,SAAS,MAAM;AAEhD,MAAI,YAAY,eAAe;AAC/B,MAAI,UAAU;AAEd,MAAI,CAAC,aAAa,eAAe,SAAS,WAAW,eAAe,OAAO,MAAM;AAC/E,gBAAY,eAAe,MAAM;AACjC,cAAU;AAAA,EACZ,WAAW,CAAC,WAAW;AACrB,gBAAY;AAAA,EACd;AAEA,SAAO;AAAA,IACL,aAAa,GAAG;AAAA,IAChB,MAAM;AAAA,MACJ,QAAQ,GAAG;AAAA,MACX,MAAM,GAAG;AAAA,IACX;AAAA,IACA,SAAS;AAAA,MACP,YAAY,GAAG;AAAA,IACjB;AAAA,IACA;AAAA,IACA,WAAW;AAAA,MACT;AAAA,QACE;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,cAAc,IAAsB,KAAoB,MAAsB;AACrF,aAAW,cAAc,GAAG,kBAAkB;AAC5C,UAAM,QAAQ,GAAG,WAAW,UAAU;AACtC,QAAI,OAAO;AACT,YAAM,cAAc,iBAAiB,MAAM,MAAM,GAAG;AAEpD,WAAK,KAAK,KAAK;AAAA,QACb,MAAM,MAAM;AAAA,QACZ,OAAO,MAAM;AAAA,QACb,UAAU,CAAC,MAAM;AAAA,QACjB,WAAW,YAAY,QAAQ;AAAA,QAC/B,YAAY,YAAY;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,eAAe,IAAsB,KAAoB,MAAsB;AACtF,MAAI,GAAG,0BAA0B,MAAM;AACrC,UAAM,aAAa,GAAG,WAAW,GAAG,qBAAqB;AACzD,QAAI,YAAY;AACd,YAAM,cAAc,iBAAiB,WAAW,MAAM,GAAG;AACzD,UAAI,CAAC,YAAY,WAAY;AAE7B,iBAAW,CAAC,UAAU,UAAU,KAAK,OAAO,QAAQ,YAAY,UAAiC,GAAG;AAClG,cAAM,aAAa,YAAY,UAAU,SAAS,QAAQ,KAAK;AAC/D,YAAI,YAAY,WAAW;AAC3B,YAAI,CAAC,WAAW;AACd,sBAAY;AAAA,QACd;AAEA,aAAK,MAAM,KAAK;AAAA,UACd,MAAM;AAAA,UACN,OAAO,WAAW;AAAA,UAClB,UAAU,CAAC;AAAA,UACX;AAAA,UACA,YAAY,WAAW;AAAA,QACzB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,aAAW,cAAc,GAAG,mBAAmB;AAC7C,UAAM,QAAQ,GAAG,WAAW,UAAU;AACtC,QAAI,OAAO;AACT,YAAM,cAAc,iBAAiB,MAAM,MAAM,GAAG;AACpD,YAAM,YAAY,YAAY,QAAQ;AAEtC,WAAK,MAAM,KAAK;AAAA,QACd,MAAM,MAAM;AAAA,QACZ,OAAO,MAAM;AAAA,QACb,UAAU,CAAC,MAAM;AAAA,QACjB;AAAA,QACA,YAAY,YAAY;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,IAAsB,KAAoB,MAAsB;AACvF,MAAI,GAAG,2BAA2B,KAAM;AAExC,QAAM,cAAc,GAAG,WAAW,GAAG,sBAAsB;AAC3D,MAAI,CAAC,YAAa;AAElB,QAAM,eAAe,iBAAiB,YAAY,MAAM,GAAG;AAC3D,MAAI,CAAC,aAAa,WAAY;AAE9B,aAAW,CAAC,UAAU,UAAU,KAAK,OAAO,QAAQ,aAAa,UAAiC,GAAG;AACnG,UAAM,aAAa,aAAa,UAAU,SAAS,QAAQ,KAAK;AAChE,QAAI,YAAY,WAAW;AAC3B,QAAI,CAAC,WAAW;AACd,kBAAY;AAAA,IACd;AAEA,SAAK,QAAQ,KAAK;AAAA,MAChB,MAAM;AAAA,MACN,OAAO,YAAY;AAAA,MACnB,UAAU,CAAC;AAAA,MACX;AAAA,MACA,YAAY,WAAW;AAAA,IACzB,CAAC;AAAA,EACH;AACF;AAEA,SAAS,gBAAgB,IAAsB,KAAoB,MAAsB;AACvF,MAAI,GAAG,2BAA2B,KAAM;AAExC,QAAM,cAAc,GAAG,WAAW,GAAG,sBAAsB;AAC3D,MAAI,CAAC,YAAa;AAElB,QAAM,eAAe,iBAAiB,YAAY,MAAM,GAAG;AAC3D,MAAI,CAAC,aAAa,WAAY;AAE9B,aAAW,CAAC,UAAU,UAAU,KAAK,OAAO,QAAQ,aAAa,UAAiC,GAAG;AACnG,UAAM,aAAa,aAAa,UAAU,SAAS,QAAQ,KAAK;AAChE,QAAI,YAAY,WAAW;AAC3B,QAAI,CAAC,WAAW;AACd,kBAAY;AAAA,IACd;AAEA,SAAK,QAAQ,KAAK;AAAA,MAChB,MAAM;AAAA,MACN,OAAO,YAAY;AAAA,MACnB,UAAU,CAAC;AAAA,MACX;AAAA,MACA,YAAY,WAAW;AAAA,MACvB,eAAe,EAAE,OAAO,QAAQ,SAAS,KAAK;AAAA,IAChD,CAAC;AAAA,EACH;AACF;;;AClOA,IAAAC,kBAAe;AACf,IAAAC,oBAAiB;AACjB,yBAAmB;AAEnB,iBAAgB;AAChB,yBAAuB;AAqCvB,IAAM,kBAAkB,oBAAI,IAAI,CAAC,iBAAiB,OAAO,gBAAgB,SAAS,CAAC;AAEnF,SAAS,qBAAqB,QAA0B;AACtD,MAAI,UAAU,QAAQ,OAAO,WAAW,SAAU,QAAO;AACzD,MAAI,MAAM,QAAQ,MAAM,EAAG,QAAO,OAAO,IAAI,oBAAoB;AAEjE,QAAM,MAA+B,CAAC;AACtC,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,MAAiC,GAAG;AACtE,QAAI,gBAAgB,IAAI,CAAC,EAAG;AAC5B,QAAI,EAAE,WAAW,IAAI,EAAG;AACxB,QAAI,CAAC,IAAI,qBAAqB,CAAC;AAAA,EACjC;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,QAA0B;AACtD,MAAI,UAAU,QAAQ,OAAO,WAAW,SAAU,QAAO;AACzD,MAAI,MAAM,QAAQ,MAAM,EAAG,QAAO,OAAO,IAAI,oBAAoB;AAEjE,MAAI,OAAQ,OAAmC,SAAS,UAAU;AAChE,UAAM,MAAO,OAAmC;AAChD,UAAM,IAAI,IAAI,MAAM,gCAAgC;AACpD,QAAI,GAAG;AACL,aAAO,EAAE,GAAG,QAAQ,MAAM,EAAE,CAAC,EAAE;AAAA,IACjC;AAAA,EACF;AAEA,QAAM,MAA+B,CAAC;AACtC,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,MAAiC,GAAG;AACtE,QAAI,CAAC,IAAI,qBAAqB,CAAC;AAAA,EACjC;AACA,SAAO;AACT;AAEA,SAAS,OAAO,GAAmB;AACjC,SAAO,EAAE,QAAQ,kBAAkB,GAAG,EAAE,QAAQ,eAAe,KAAK;AACtE;AAEA,SAAS,kBAAkB,WAA2B;AACpD,SAAO,UAAU,QAAQ,6BAA6B,EAAE;AAC1D;AAUA,eAAsB,0BAA0B,MAI7C;AACD,QAAM,SAAS,KAAK;AACpB,QAAM,UAAU,kBAAAC,QAAK,KAAK,QAAQ,gBAAgB;AAClD,QAAM,UAAU,kBAAAA,QAAK,KAAK,QAAQ,gBAAgB;AAClD,QAAM,WAAW,kBAAAA,QAAK,KAAK,QAAQ,sBAAsB;AAEzD,kBAAAC,QAAG,UAAU,QAAQ,EAAE,WAAW,KAAK,CAAC;AAExC,QAAM,UAAuB,CAAC;AAE9B,aAAW,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,KAAK,QAAQ,YAAY,WAAW,CAAC,CAAC,GAAG;AAChF,UAAM,QAAQ,qBAAqB,qBAAqB,GAAG,CAAC;AAC5D,YAAQ,KAAK,EAAE,GAAI,OAAkB,KAAK,KAAK,CAAc;AAAA,EAC/D;AAEA,QAAM,UAA+E,CAAC;AAEtF,aAAW,QAAQ,KAAK,SAAS,eAAe,CAAC,GAAG;AAClD,eAAW,MAAM,KAAK,cAAc,CAAC,GAAG;AACtC,YAAM,QAA6D,EAAE,UAAU,CAAC,EAAE;AAClF,cAAQ,GAAG,WAAW,IAAI;AAE1B,UAAI,GAAG,KAAK,MAAM,WAAW;AAC3B,cAAM,WAAW,kBAAkB,GAAG,KAAK,KAAK,SAAS;AACzD,cAAM,KAAK,OAAO,MAAM,GAAG,WAAW,OAAO;AAC7C,gBAAQ,KAAK,EAAE,KAAK,IAAI,MAAM,SAAS,CAAc;AACrD,cAAM,OAAO;AAAA,MACf;AAEA,iBAAW,KAAK,GAAG,aAAa,CAAC,GAAG;AAClC,YAAI,CAAC,EAAE,UAAW;AAClB,cAAM,WAAW,kBAAkB,EAAE,SAAS;AAC9C,cAAM,MAAM,GAAG,EAAE,MAAM,IAAI,EAAE,WAAW;AACxC,cAAM,KAAK,OAAO,MAAM,GAAG,WAAW,QAAQ,EAAE,MAAM,IAAI,EAAE,WAAW,EAAE;AACzE,gBAAQ,KAAK,EAAE,KAAK,IAAI,MAAM,SAAS,CAAc;AACrD,cAAM,SAAS,GAAG,IAAI;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY,KAAK,WAAW,QAAQ,QAAQ,KAAK,WAAW,QAAQ,QAAQ;AAElF,QAAM,MAAM,IAAI,WAAAC,QAAI,QAAQ;AAAA,IAC1B;AAAA,IACA,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,MAAM,EAAE,QAAQ,KAAK;AAAA,EACvB,CAAC;AAED,qBAAAC,QAAW,QAAQ,KAAK,EAAE,MAAM,KAAK,eAAe,OAAO,CAAC;AAE5D,MAAI;AACJ,QAAM,mBAAmB,QAAQ,qBAAqB;AACtD,MAAI,OAAO,qBAAqB,YAAY;AAC1C,UAAM,iBAAiB,GAAG;AAAA,EAC5B,WAAW,oBAAoB,OAAO,iBAAiB,YAAY,YAAY;AAC7E,UAAM,iBAAiB,QAAQ,GAAG;AAAA,EACpC,OAAO;AACL,UAAM,IAAI,MAAM,iEAAiE;AAAA,EACnF;AAEA,SAAO;AACP,SAAO;AACP,aAAW,CAAC,aAAa,CAAC,KAAK,OAAO,QAAQ,OAAO,GAAG;AACtD,WAAO,KAAK,KAAK,UAAU,WAAW,CAAC;AAAA;AACvC,WAAO,aAAa,EAAE,OAAO,WAAW,KAAK,UAAU,EAAE,IAAI,CAAC,MAAM,WAAW;AAAA;AAC/E,WAAO;AAAA;AACP,eAAW,CAAC,KAAK,EAAE,KAAK,OAAO,QAAQ,EAAE,QAAQ,GAAG;AAClD,aAAO,SAAS,KAAK,UAAU,GAAG,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;AAAA;AAAA,IACpE;AACA,WAAO;AAAA;AACP,WAAO;AAAA;AAAA,EACT;AACA,SAAO;AAEP,kBAAAF,QAAG,cAAc,SAAS,KAAK,MAAM;AAErC,QAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBZ,kBAAAA,QAAG,cAAc,SAAS,KAAK,MAAM;AAErC,QAAM,OAAO,mBAAAG,QAAO,WAAW,QAAQ,EAAE,OAAO,GAAG,EAAE,OAAO,KAAK;AACjE,kBAAAH,QAAG,cAAc,UAAU,KAAK,UAAU,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM;AAEpE,SAAO,EAAE,mBAAmB,SAAS,mBAAmB,SAAS,KAAK;AACxE;;;ACzMA,IAAAI,kBAAe;AACf,IAAAC,oBAAiB;AACjB,IAAAC,qBAAe;AAFf;AASA,SAAS,SAAY,GAAqB;AACxC,MAAI;AACF,WAAO,KAAK,MAAM,gBAAAC,QAAG,aAAa,GAAG,MAAM,CAAC;AAAA,EAC9C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,YAAY,GAA0B;AAC7C,MAAI;AACF,WAAO,gBAAAA,QAAG,SAAS,CAAC,EAAE;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,UAAU,GAAmB;AACpC,SAAO,kBAAAC,QAAK,WAAW,CAAC,IAAI,IAAI,kBAAAA,QAAK,QAAQ,CAAC;AAChD;AAEO,SAAS,qBAAqB,iBAAmC;AACtE,QAAM,MAAgB,CAAC;AACvB,QAAM,OAAO,oBAAI,IAAY;AAE7B,WAAS,MAAM,MAAc;AAC3B,QAAI,KAAK,IAAI,IAAI,EAAG;AACpB,SAAK,IAAI,IAAI;AACb,QAAI,KAAK,IAAI;AAEb,UAAM,MAAM,SAAc,IAAI;AAC9B,UAAM,MAAM,KAAK;AACjB,QAAI,CAAC,IAAK;AAEV,QAAI,WAA0B;AAE9B,QAAI,IAAI,WAAW,GAAG,KAAK,IAAI,WAAW,GAAG,KAAK,eAAe,KAAK,GAAG,GAAG;AAC1E,iBAAW,UAAU,kBAAAA,QAAK,QAAQ,kBAAAA,QAAK,QAAQ,IAAI,GAAG,GAAG,CAAC;AAC1D,UAAI,CAAC,SAAS,SAAS,OAAO,EAAG,aAAY;AAAA,IAC/C,OAAO;AACL,UAAI;AACF,cAAM,MAAO,OAAe,gBAAgB,YAAY,GAAG,KAAK;AAChE,mBAAW,IAAI,QAAQ,GAAG;AAAA,MAC5B,QAAQ;AACN,YAAI;AACF,gBAAM,MAAO,OAAe,gBAAgB,YAAY,GAAG,KAAK;AAChE,qBAAW,IAAI,QAAQ,IAAI,SAAS,OAAO,IAAI,MAAM,GAAG,GAAG,OAAO;AAAA,QACpE,QAAQ;AACN,qBAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAEA,QAAI,SAAU,OAAM,QAAQ;AAAA,EAC9B;AAEA,QAAM,eAAe;AACrB,SAAO;AACT;AAEO,SAAS,aAAa,UAA4D;AACvF,QAAM,QAAQ,CAAC,kBAAkB,qBAAqB,WAAW;AACjE,MAAI,MAAM;AAEV,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,eAAW,KAAK,OAAO;AACrB,YAAM,IAAI,kBAAAA,QAAK,KAAK,KAAK,CAAC;AAC1B,YAAM,KAAK,YAAY,CAAC;AACxB,UAAI,MAAM,KAAM,QAAO,EAAE,MAAM,GAAG,SAAS,GAAG;AAAA,IAChD;AACA,UAAM,SAAS,kBAAAA,QAAK,QAAQ,GAAG;AAC/B,QAAI,WAAW,IAAK;AACpB,UAAM;AAAA,EACR;AACA,SAAO;AACT;AAEA,eAAsB,QAAQ,QAKL;AACvB,QAAM,YAAY,UAAU,OAAO,MAAM;AACzC,QAAM,cAAc,UAAU,OAAO,OAAO;AAE5C,QAAM,eAAe,kBAAAA,QAAK,KAAK,WAAW,eAAe;AACzD,QAAM,YAAY,kBAAAA,QAAK,KAAK,WAAW,YAAY;AAEnD,MAAI,CAAC,gBAAAD,QAAG,WAAW,YAAY,EAAG,QAAO,EAAE,OAAO,MAAM,QAAQ,mBAAmB;AAEnF,QAAM,QAAQ,SAAuB,SAAS;AAC9C,MAAI,CAAC,MAAO,QAAO,EAAE,OAAO,MAAM,QAAQ,gBAAgB;AAE1D,MAAI,MAAM,UAAU,YAAY,OAAO,cAAc;AACnD,WAAO,EAAE,OAAO,MAAM,QAAQ,6BAA6B,QAAQ,GAAG,MAAM,UAAU,OAAO,OAAO,OAAO,YAAY,GAAG;AAAA,EAC5H;AAEA,MAAI,UAAU,MAAM,QAAQ,YAAY,MAAM,aAAa;AACzD,WAAO,EAAE,OAAO,MAAM,QAAQ,oBAAoB,QAAQ,yBAAyB;AAAA,EACrF;AAEA,QAAM,QAAQ,qBAAqB,WAAW;AAC9C,aAAW,OAAO,OAAO;AACvB,UAAM,KAAK,YAAY,GAAG;AAC1B,QAAI,MAAM,KAAM,QAAO,EAAE,OAAO,MAAM,QAAQ,kBAAkB,QAAQ,IAAI;AAE5E,UAAM,WAAW,MAAM,QAAQ,YAAY,GAAG;AAC9C,QAAI,YAAY,QAAQ,KAAK,IAAI,WAAW,EAAE,IAAI,MAAQ;AACxD,aAAO,EAAE,OAAO,MAAM,QAAQ,kBAAkB,QAAQ,IAAI;AAAA,IAC9D;AAAA,EACF;AAEA,MAAI,MAAM,QAAQ,UAAU,MAAM;AAChC,UAAM,KAAK,YAAY,MAAM,QAAQ,SAAS,IAAI;AAClD,QAAI,MAAM,KAAM,QAAO,EAAE,OAAO,MAAM,QAAQ,oBAAoB,QAAQ,MAAM,QAAQ,SAAS,KAAK;AAEtG,QAAI,KAAK,IAAI,MAAM,QAAQ,SAAS,UAAU,EAAE,IAAI,MAAQ;AAC1D,aAAO,EAAE,OAAO,MAAM,QAAQ,oBAAoB,QAAQ,MAAM,QAAQ,SAAS,KAAK;AAAA,IACxF;AAAA,EACF;AAEA,aAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,MAAM,MAAM,GAAG;AAC3D,UAAM,KAAK,YAAY,IAAI;AAC3B,QAAI,MAAM,KAAM,QAAO,EAAE,OAAO,MAAM,QAAQ,iBAAiB,QAAQ,KAAK;AAC5E,QAAI,KAAK,IAAI,WAAW,EAAE,IAAI,KAAQ,QAAO,EAAE,OAAO,MAAM,QAAQ,iBAAiB,QAAQ,KAAK;AAAA,EACpG;AAEA,SAAO,EAAE,OAAO,OAAO,QAAQ,aAAa;AAC9C;;;ACzIA,IAAAE,kBAAe;AACf,IAAAC,oBAAiB;AACjB,IAAAC,qBAAe;AAIf,SAASC,aAAY,GAAmB;AACtC,SAAO,gBAAAC,QAAG,SAAS,CAAC,EAAE;AACxB;AAEA,SAAS,UAAU,GAAW;AAC5B,kBAAAA,QAAG,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AACrC;AAEA,SAAS,oBAAoB,GAAoB;AAC/C,MAAI,EAAE,SAAS,GAAG,kBAAAC,QAAK,GAAG,eAAe,kBAAAA,QAAK,GAAG,EAAE,EAAG,QAAO;AAC7D,MAAI,EAAE,SAAS,GAAG,kBAAAA,QAAK,GAAG,aAAa,kBAAAA,QAAK,GAAG,MAAM,kBAAAA,QAAK,GAAG,EAAE,EAAG,QAAO;AACzE,SAAO,sBAAsB,KAAK,CAAC;AACrC;AAEO,SAAS,WAAW,QAKlB;AACP,QAAM,YAAY,kBAAAA,QAAK,WAAW,OAAO,MAAM,IAAI,OAAO,SAAS,kBAAAA,QAAK,QAAQ,OAAO,MAAM;AAC7F,YAAU,SAAS;AAEnB,QAAM,cAAc,qBAAqB,OAAO,WAAW;AAC3D,QAAM,eAAuC,CAAC;AAC9C,aAAW,OAAO,YAAa,cAAa,GAAG,IAAIF,aAAY,GAAG;AAElE,QAAM,OAAO,aAAa,kBAAAE,QAAK,QAAQ,OAAO,WAAW,CAAC;AAE1D,QAAM,SAAiC,CAAC;AACxC,aAAW,MAAM,OAAO,QAAQ,eAAe,GAAG;AAChD,UAAM,IAAI,GAAG;AACb,QAAI,CAAC,oBAAoB,CAAC,EAAG;AAC7B,QAAI;AACF,aAAO,CAAC,IAAIF,aAAY,CAAC;AAAA,IAC3B,QAAQ;AAAA,IACR;AAAA,EACF;AAEA,QAAM,QAAsB;AAAA,IAC1B,cAAc;AAAA,IACd,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS,OAAO;AAAA,MAChB,YAAY,mBAAAG,QAAG;AAAA,IACjB;AAAA,IACA,SAAS;AAAA,MACP,cAAc,OAAO;AAAA,MACrB,aAAa;AAAA,MACb,UAAU,QAAQ;AAAA,IACpB;AAAA,IACA;AAAA,EACF;AAEA,kBAAAF,QAAG,cAAc,kBAAAC,QAAK,KAAK,WAAW,YAAY,GAAG,KAAK,UAAU,OAAO,MAAM,CAAC,GAAG,MAAM;AAC7F;;;AVnDA,IAAAE,qBAAe;AACf,0BAAoB;AAEpB,IAAM,gBAAgB;AAItB,SAAS,IAAI,KAAa;AACxB,sBAAAC,QAAQ,OAAO,MAAM,MAAM,IAAI;AACjC;AAEA,SAAS,SAAS,MAAiB;AACjC,MAAI,oBAAAA,QAAQ,IAAI,aAAa;AAC3B,YAAQ,MAAM,eAAe,GAAG,IAAI;AAAA,EACtC;AACF;AAEA,eAAe,aAAa,MAAgB;AAC1C,QAAM,eAAe,KAAK,QAAQ,IAAI;AACtC,QAAM,cAAc,iBAAiB,KAAK,KAAK,eAAe,CAAC,IAAI;AACnE,QAAM,YAAY,KAAK,SAAS,UAAU,IACtC,KAAK,KAAK,QAAQ,UAAU,IAAI,CAAC,IACjC;AACJ,QAAM,UAAU,KAAK,SAAS,YAAY;AAE1C,QAAM,sBAAsB,KAAK,QAAQ,mBAAmB;AAC5D,QAAM,iBAAiC,wBAAwB,KAC1D,KAAK,sBAAsB,CAAC,IAC7B;AAEJ,MAAI,mBAAmB,UAAU,mBAAmB,iBAAiB,mBAAmB,eAAe;AACrG,YAAQ,MAAM,4BAA4B,cAAc,gDAAgD;AACxG,wBAAAA,QAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,iBAAa,2BAAQ,SAAS;AAEpC,MAAI,SAAS;AACX,UAAM,QAAQ,MAAM,QAAQ;AAAA,MAC1B,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,cAAc;AAAA,MACd,mBAAmB,mBAAAC,QAAG;AAAA,IACxB,CAAC;AAED,QAAI,CAAC,MAAM,OAAO;AAChB,UAAI,iCAAiC;AACrC;AAAA,IACF;AAEA,QAAI,0CAA0C,MAAM,MAAM,GAAG,MAAM,SAAS,KAAK,MAAM,MAAM,KAAK,EAAE,GAAG;AACvG,UAAM,iBAAiB,MAAM,MAAM;AAAA,EACrC,OAAO;AACL,QAAI,sDAAsD;AAAA,EAC5D;AAEA,QAAM,EAAE,SAAS,SAAS,YAAY,IAAI,wBAAwB,WAAW;AAC7E,QAAM,cAAc,gBAAgB,aAAa,OAAO;AAExD,MAAI,YAAY,WAAW,GAAG;AAC5B,YAAQ,KAAK,uBAAuB;AACpC,wBAAAD,QAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI,SAAS,YAAY,MAAM,gBAAgB;AAE/C,QAAM,UAAU,gBAAgB,aAAa,SAAS,EAAE,OAAO,OAAO,SAAS,QAAQ,CAAC;AACxF,QAAM,WAAW,iBAAiB,aAAa,SAAS,eAAe,cAAc;AAErF,iCAAU,YAAY,EAAE,WAAW,KAAK,CAAC;AAEzC,yCAAc,2BAAQ,YAAY,cAAc,GAAG,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AACnF,yCAAc,2BAAQ,YAAY,eAAe,GAAG,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAErF,MAAI,mBAAmB,eAAe;AACpC,QAAI,sCAAsC;AAE1C,UAAM,cAAc,KAAK,UAAM,kCAAa,2BAAQ,YAAY,eAAe,GAAG,OAAO,CAAC;AAE1F,UAAM,0BAA0B;AAAA,MAC9B,QAAQ;AAAA,MACR;AAAA,MACA,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,aAAa;AAAA,IACf,CAAC;AAED,gBAAY,aAAa;AAAA,MACvB,MAAM;AAAA,MACN,mBAAmB;AAAA,IACrB;AAEA,2CAAc,2BAAQ,YAAY,eAAe,GAAG,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC;AAExF,QAAI,oBAAoB;AACxB,QAAI,oBAAoB;AACxB,QAAI,0BAA0B;AAAA,EAChC;AAEA,aAAW;AAAA,IACT,QAAQ;AAAA,IACR,iBAAa,2BAAQ,WAAW;AAAA,IAChC;AAAA,IACA,cAAc;AAAA,EAChB,CAAC;AAED,MAAI,cAAc,UAAU,GAAG;AAC/B,MAAI,kBAAkB;AACtB,MAAI,mBAAmB;AACvB,MAAI,gBAAgB;AACtB;AAEA,SAAS,aAAa,MAAgB;AACpC,QAAM,YAAY,KAAK,SAAS,UAAU,IACtC,KAAK,KAAK,QAAQ,UAAU,IAAI,CAAC,IACjC;AAEJ,QAAM,iBAAa,2BAAQ,SAAS;AAEpC,UAAI,4BAAW,UAAU,GAAG;AAC1B,gCAAO,YAAY,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,EACrD;AAEA,MAAI,sBAAsB,SAAS,EAAE;AACvC;AAEA,IAAM,UAAU,oBAAAA,QAAQ,KAAK,CAAC;AAE9B,IAAI,YAAY,SAAS;AACvB,eAAa,oBAAAA,QAAQ,KAAK,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ;AACjD,YAAQ,MAAM,GAAG;AACjB,wBAAAA,QAAQ,KAAK,CAAC;AAAA,EAChB,CAAC;AACH,WAAW,YAAY,SAAS;AAC9B,eAAa,oBAAAA,QAAQ,KAAK,MAAM,CAAC,CAAC;AACpC,OAAO;AACL,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkBX;AACH;","names":["import_node_fs","import_node_path","ts","path","import_typescript","ts","path","import_typescript","import_typescript","ts","ts","import_typescript","ts","path","ts","import_typescript","ts","schemaRef","import_node_fs","import_node_path","path","fs","Ajv","addFormats","crypto","import_node_fs","import_node_path","import_typescript","fs","path","import_node_fs","import_node_path","import_typescript","statMtimeMs","fs","path","ts","import_typescript","process","ts"]}
|
package/dist/cli.d.ts
CHANGED