adorn-api 1.0.23 → 1.0.24
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/.eslintignore +3 -0
- package/.eslintrc.cjs +30 -0
- package/README.md +375 -531
- package/dist/core/express-adapter.d.ts +27 -0
- package/dist/core/express-adapter.d.ts.map +1 -0
- package/dist/core/express-adapter.js +146 -0
- package/dist/core/express-adapter.js.map +1 -0
- package/dist/core/http-error.d.ts +7 -0
- package/dist/core/http-error.d.ts.map +1 -0
- package/dist/core/http-error.js +14 -0
- package/dist/core/http-error.js.map +1 -0
- package/dist/decorators/controller.decorator.d.ts +2 -0
- package/dist/decorators/controller.decorator.d.ts.map +1 -0
- package/dist/decorators/controller.decorator.js +26 -0
- package/dist/decorators/controller.decorator.js.map +1 -0
- package/dist/decorators/create.decorator.d.ts +8 -0
- package/dist/decorators/create.decorator.d.ts.map +1 -0
- package/dist/decorators/create.decorator.js +67 -0
- package/dist/decorators/create.decorator.js.map +1 -0
- package/dist/decorators/http-method.decorator.d.ts +16 -0
- package/dist/decorators/http-method.decorator.d.ts.map +1 -0
- package/dist/decorators/http-method.decorator.js +117 -0
- package/dist/decorators/http-method.decorator.js.map +1 -0
- package/dist/decorators/http-params.d.ts +17 -0
- package/dist/decorators/http-params.d.ts.map +1 -0
- package/dist/decorators/http-params.js +26 -0
- package/dist/decorators/http-params.js.map +1 -0
- package/dist/decorators/index.d.ts +10 -5
- package/dist/decorators/index.d.ts.map +1 -1
- package/dist/decorators/index.js +14 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/decorators/list.decorator.d.ts +18 -0
- package/dist/decorators/list.decorator.d.ts.map +1 -0
- package/dist/decorators/list.decorator.js +99 -0
- package/dist/decorators/list.decorator.js.map +1 -0
- package/dist/decorators/middleware.decorator.d.ts +4 -0
- package/dist/decorators/middleware.decorator.d.ts.map +1 -0
- package/dist/decorators/middleware.decorator.js +34 -0
- package/dist/decorators/middleware.decorator.js.map +1 -0
- package/dist/decorators/response.decorator.d.ts +8 -0
- package/dist/decorators/response.decorator.d.ts.map +1 -0
- package/dist/decorators/response.decorator.js +44 -0
- package/dist/decorators/response.decorator.js.map +1 -0
- package/dist/decorators/route-options.d.ts +14 -0
- package/dist/decorators/route-options.d.ts.map +1 -0
- package/dist/decorators/route-options.js +22 -0
- package/dist/decorators/route-options.js.map +1 -0
- package/dist/decorators/schema.decorator.d.ts +82 -0
- package/dist/decorators/schema.decorator.d.ts.map +1 -0
- package/dist/decorators/schema.decorator.js +123 -0
- package/dist/decorators/schema.decorator.js.map +1 -0
- package/dist/decorators/update.decorator.d.ts +8 -0
- package/dist/decorators/update.decorator.d.ts.map +1 -0
- package/dist/decorators/update.decorator.js +63 -0
- package/dist/decorators/update.decorator.js.map +1 -0
- package/dist/index.d.ts +11 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -637
- package/dist/index.js.map +1 -1
- package/dist/metadata/metadata-storage.d.ts +38 -0
- package/dist/metadata/metadata-storage.d.ts.map +1 -0
- package/dist/metadata/metadata-storage.js +102 -0
- package/dist/metadata/metadata-storage.js.map +1 -0
- package/dist/metal-orm-integration/dto-helper.d.ts +5 -0
- package/dist/metal-orm-integration/dto-helper.d.ts.map +1 -0
- package/dist/metal-orm-integration/dto-helper.js +48 -0
- package/dist/metal-orm-integration/dto-helper.js.map +1 -0
- package/dist/metal-orm-integration/dto-response.decorator.d.ts +4 -0
- package/dist/metal-orm-integration/dto-response.decorator.d.ts.map +1 -0
- package/dist/metal-orm-integration/dto-response.decorator.js +69 -0
- package/dist/metal-orm-integration/dto-response.decorator.js.map +1 -0
- package/dist/metal-orm-integration/entity-schema-builder.d.ts +20 -0
- package/dist/metal-orm-integration/entity-schema-builder.d.ts.map +1 -0
- package/dist/metal-orm-integration/entity-schema-builder.js +356 -0
- package/dist/metal-orm-integration/entity-schema-builder.js.map +1 -0
- package/dist/metal-orm-integration/index.d.ts +5 -0
- package/dist/metal-orm-integration/index.d.ts.map +1 -0
- package/dist/metal-orm-integration/index.js +5 -0
- package/dist/metal-orm-integration/index.js.map +1 -0
- package/dist/metal-orm-integration/schema-modifier.d.ts +11 -0
- package/dist/metal-orm-integration/schema-modifier.d.ts.map +1 -0
- package/dist/metal-orm-integration/schema-modifier.js +62 -0
- package/dist/metal-orm-integration/schema-modifier.js.map +1 -0
- package/dist/openapi/index.d.ts +4 -0
- package/dist/openapi/index.d.ts.map +1 -0
- package/dist/openapi/index.js +4 -0
- package/dist/openapi/index.js.map +1 -0
- package/dist/openapi/openapi-generator.d.ts +22 -0
- package/dist/openapi/openapi-generator.d.ts.map +1 -0
- package/dist/openapi/openapi-generator.js +428 -0
- package/dist/openapi/openapi-generator.js.map +1 -0
- package/dist/openapi/swagger-ui.d.ts +11 -0
- package/dist/openapi/swagger-ui.d.ts.map +1 -0
- package/dist/openapi/swagger-ui.js +20 -0
- package/dist/openapi/swagger-ui.js.map +1 -0
- package/dist/openapi/zod-to-openapi.d.ts +4 -0
- package/dist/openapi/zod-to-openapi.d.ts.map +1 -0
- package/dist/openapi/zod-to-openapi.js +184 -0
- package/dist/openapi/zod-to-openapi.js.map +1 -0
- package/dist/types/common.d.ts +4 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +2 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/controller.d.ts +14 -0
- package/dist/types/controller.d.ts.map +1 -0
- package/dist/types/controller.js +2 -0
- package/dist/types/controller.js.map +1 -0
- package/dist/types/metadata.d.ts +48 -0
- package/dist/types/metadata.d.ts.map +1 -0
- package/dist/types/metadata.js +2 -0
- package/dist/types/metadata.js.map +1 -0
- package/dist/types/openapi.d.ts +30 -0
- package/dist/types/openapi.d.ts.map +1 -0
- package/dist/types/openapi.js +2 -0
- package/dist/types/openapi.js.map +1 -0
- package/dist/validation/zod-adapter.d.ts +15 -0
- package/dist/validation/zod-adapter.d.ts.map +1 -0
- package/dist/validation/zod-adapter.js +61 -0
- package/dist/validation/zod-adapter.js.map +1 -0
- package/examples/basic/app.ts +15 -0
- package/examples/basic/index.ts +6 -0
- package/examples/basic/user.controller.ts +35 -0
- package/examples/basic/user.dtos.ts +23 -0
- package/examples/metal-orm-sqlite/app.ts +18 -0
- package/examples/metal-orm-sqlite/db.ts +90 -0
- package/examples/metal-orm-sqlite/index.ts +6 -0
- package/examples/metal-orm-sqlite/post.controller.ts +209 -0
- package/examples/metal-orm-sqlite/post.dtos.ts +78 -0
- package/examples/metal-orm-sqlite/post.entity.ts +24 -0
- package/examples/metal-orm-sqlite/user.controller.helpers.ts +305 -0
- package/examples/metal-orm-sqlite/user.controller.ts +231 -0
- package/examples/metal-orm-sqlite/user.dtos.ts +88 -0
- package/examples/metal-orm-sqlite/user.entity.ts +21 -0
- package/examples/metal-orm-sqlite-music/album.controller.ts +278 -0
- package/examples/metal-orm-sqlite-music/album.dtos.ts +85 -0
- package/examples/metal-orm-sqlite-music/album.entity.ts +28 -0
- package/examples/metal-orm-sqlite-music/app.ts +19 -0
- package/examples/metal-orm-sqlite-music/artist.controller.ts +272 -0
- package/examples/metal-orm-sqlite-music/artist.dtos.ts +68 -0
- package/examples/metal-orm-sqlite-music/artist.entity.ts +27 -0
- package/examples/metal-orm-sqlite-music/db.ts +148 -0
- package/examples/metal-orm-sqlite-music/index.ts +6 -0
- package/examples/metal-orm-sqlite-music/track.controller.ts +221 -0
- package/examples/metal-orm-sqlite-music/track.dtos.ts +82 -0
- package/examples/metal-orm-sqlite-music/track.entity.ts +27 -0
- package/examples/openapi/health.controller.ts +11 -0
- package/examples/openapi/health.dto.ts +7 -0
- package/examples/openapi/index.ts +12 -0
- package/examples/restful/app.ts +15 -0
- package/examples/restful/index.ts +9 -0
- package/examples/restful/task.controller.ts +118 -0
- package/examples/restful/task.dtos.ts +66 -0
- package/examples/restful/task.store.ts +95 -0
- package/examples/tsconfig.json +8 -0
- package/examples/utils/start-server.ts +56 -0
- package/package.json +33 -97
- package/scripts/run-example.js +29 -0
- package/src/adapter/express.ts +589 -0
- package/src/adapter/metal-orm/convention-overrides.ts +115 -0
- package/src/adapter/metal-orm/crud-dtos.ts +141 -0
- package/src/adapter/metal-orm/dto.ts +20 -0
- package/src/adapter/metal-orm/error-dtos.ts +51 -0
- package/src/adapter/metal-orm/field-builder.ts +185 -0
- package/src/adapter/metal-orm/filters.ts +52 -0
- package/src/adapter/metal-orm/index.ts +66 -0
- package/src/adapter/metal-orm/paged-dtos.ts +94 -0
- package/src/adapter/metal-orm/pagination.ts +28 -0
- package/src/adapter/metal-orm/types.ts +250 -0
- package/src/adapter/metal-orm/utils.ts +36 -0
- package/src/adapter/metal-orm.test.ts +439 -0
- package/src/core/__tests__/coerce.test.ts +39 -0
- package/src/core/__tests__/dto-compose.test.ts +68 -0
- package/src/core/__tests__/schema-builder.test.ts +82 -0
- package/src/core/coerce.ts +190 -0
- package/src/core/decorators.ts +645 -0
- package/src/core/errors.ts +55 -0
- package/src/core/metadata.ts +110 -0
- package/src/core/openapi.ts +282 -0
- package/src/core/schema-builder.ts +287 -0
- package/src/core/schema.ts +400 -0
- package/src/core/types.ts +14 -0
- package/src/e2e/http-error.e2e.test.ts +52 -0
- package/src/e2e/sqlite-metal-orm.e2e.test.ts +174 -0
- package/src/e2e/sqlite.e2e.test.ts +126 -0
- package/src/index.ts +8 -0
- package/tsconfig.eslint.json +7 -0
- package/tsconfig.json +18 -0
- package/vitest.config.ts +8 -0
- package/dist/adapter/express/auth.d.ts +0 -13
- package/dist/adapter/express/auth.d.ts.map +0 -1
- package/dist/adapter/express/bootstrap.d.ts +0 -40
- package/dist/adapter/express/bootstrap.d.ts.map +0 -1
- package/dist/adapter/express/coercion.d.ts +0 -102
- package/dist/adapter/express/coercion.d.ts.map +0 -1
- package/dist/adapter/express/index.d.ts +0 -6
- package/dist/adapter/express/index.d.ts.map +0 -1
- package/dist/adapter/express/merge.d.ts +0 -45
- package/dist/adapter/express/merge.d.ts.map +0 -1
- package/dist/adapter/express/openapi.d.ts +0 -66
- package/dist/adapter/express/openapi.d.ts.map +0 -1
- package/dist/adapter/express/router.d.ts +0 -10
- package/dist/adapter/express/router.d.ts.map +0 -1
- package/dist/adapter/express/swagger.d.ts +0 -18
- package/dist/adapter/express/swagger.d.ts.map +0 -1
- package/dist/adapter/express/types.d.ts +0 -110
- package/dist/adapter/express/types.d.ts.map +0 -1
- package/dist/adapter/express/validation.d.ts +0 -27
- package/dist/adapter/express/validation.d.ts.map +0 -1
- package/dist/cli/progress.d.ts +0 -124
- package/dist/cli/progress.d.ts.map +0 -1
- package/dist/cli.cjs +0 -4622
- package/dist/cli.cjs.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -4603
- package/dist/cli.js.map +0 -1
- package/dist/compiler/analyze/index.d.ts +0 -5
- package/dist/compiler/analyze/index.d.ts.map +0 -1
- package/dist/compiler/analyze/scanControllers.d.ts +0 -88
- package/dist/compiler/analyze/scanControllers.d.ts.map +0 -1
- package/dist/compiler/cache/isStale.d.ts +0 -46
- package/dist/compiler/cache/isStale.d.ts.map +0 -1
- package/dist/compiler/cache/loadArtifacts.d.ts +0 -149
- package/dist/compiler/cache/loadArtifacts.d.ts.map +0 -1
- package/dist/compiler/cache/schema.d.ts +0 -32
- package/dist/compiler/cache/schema.d.ts.map +0 -1
- package/dist/compiler/cache/writeCache.d.ts +0 -14
- package/dist/compiler/cache/writeCache.d.ts.map +0 -1
- package/dist/compiler/gems.d.ts +0 -75
- package/dist/compiler/gems.d.ts.map +0 -1
- package/dist/compiler/generator/index.d.ts +0 -7
- package/dist/compiler/generator/index.d.ts.map +0 -1
- package/dist/compiler/generator/manifest.d.ts +0 -23
- package/dist/compiler/generator/manifest.d.ts.map +0 -1
- package/dist/compiler/generator/openapi.d.ts +0 -118
- package/dist/compiler/generator/openapi.d.ts.map +0 -1
- package/dist/compiler/graph/builder.d.ts +0 -24
- package/dist/compiler/graph/builder.d.ts.map +0 -1
- package/dist/compiler/graph/index.d.ts +0 -7
- package/dist/compiler/graph/index.d.ts.map +0 -1
- package/dist/compiler/graph/schemaGraph.d.ts +0 -67
- package/dist/compiler/graph/schemaGraph.d.ts.map +0 -1
- package/dist/compiler/graph/types.d.ts +0 -203
- package/dist/compiler/graph/types.d.ts.map +0 -1
- package/dist/compiler/index.d.ts +0 -12
- package/dist/compiler/index.d.ts.map +0 -1
- package/dist/compiler/ir/index.d.ts +0 -7
- package/dist/compiler/ir/index.d.ts.map +0 -1
- package/dist/compiler/ir/pipeline.d.ts +0 -82
- package/dist/compiler/ir/pipeline.d.ts.map +0 -1
- package/dist/compiler/ir/stages.d.ts +0 -40
- package/dist/compiler/ir/stages.d.ts.map +0 -1
- package/dist/compiler/ir/visitor.d.ts +0 -98
- package/dist/compiler/ir/visitor.d.ts.map +0 -1
- package/dist/compiler/manifest/emit.d.ts +0 -21
- package/dist/compiler/manifest/emit.d.ts.map +0 -1
- package/dist/compiler/manifest/format.d.ts +0 -119
- package/dist/compiler/manifest/format.d.ts.map +0 -1
- package/dist/compiler/manifest/index.d.ts +0 -6
- package/dist/compiler/manifest/index.d.ts.map +0 -1
- package/dist/compiler/runner/createProgram.d.ts +0 -24
- package/dist/compiler/runner/createProgram.d.ts.map +0 -1
- package/dist/compiler/runner/index.d.ts +0 -5
- package/dist/compiler/runner/index.d.ts.map +0 -1
- package/dist/compiler/schema/extractAnnotations.d.ts +0 -57
- package/dist/compiler/schema/extractAnnotations.d.ts.map +0 -1
- package/dist/compiler/schema/index.d.ts +0 -10
- package/dist/compiler/schema/index.d.ts.map +0 -1
- package/dist/compiler/schema/intersectionHandler.d.ts +0 -44
- package/dist/compiler/schema/intersectionHandler.d.ts.map +0 -1
- package/dist/compiler/schema/objectHandler.d.ts +0 -146
- package/dist/compiler/schema/objectHandler.d.ts.map +0 -1
- package/dist/compiler/schema/openapi.d.ts +0 -71
- package/dist/compiler/schema/openapi.d.ts.map +0 -1
- package/dist/compiler/schema/parameters.d.ts +0 -90
- package/dist/compiler/schema/parameters.d.ts.map +0 -1
- package/dist/compiler/schema/partitioner.d.ts +0 -85
- package/dist/compiler/schema/partitioner.d.ts.map +0 -1
- package/dist/compiler/schema/primitives.d.ts +0 -68
- package/dist/compiler/schema/primitives.d.ts.map +0 -1
- package/dist/compiler/schema/queryBuilderAnalyzer.d.ts +0 -95
- package/dist/compiler/schema/queryBuilderAnalyzer.d.ts.map +0 -1
- package/dist/compiler/schema/queryBuilderSchemaBuilder.d.ts +0 -13
- package/dist/compiler/schema/queryBuilderSchemaBuilder.d.ts.map +0 -1
- package/dist/compiler/schema/serviceCallAnalyzer.d.ts +0 -102
- package/dist/compiler/schema/serviceCallAnalyzer.d.ts.map +0 -1
- package/dist/compiler/schema/splitOpenapi.d.ts +0 -46
- package/dist/compiler/schema/splitOpenapi.d.ts.map +0 -1
- package/dist/compiler/schema/typeToJsonSchema.d.ts +0 -26
- package/dist/compiler/schema/typeToJsonSchema.d.ts.map +0 -1
- package/dist/compiler/schema/types.d.ts +0 -70
- package/dist/compiler/schema/types.d.ts.map +0 -1
- package/dist/compiler/schema/unionHandler.d.ts +0 -70
- package/dist/compiler/schema/unionHandler.d.ts.map +0 -1
- package/dist/compiler/transform/dedup.d.ts +0 -35
- package/dist/compiler/transform/dedup.d.ts.map +0 -1
- package/dist/compiler/transform/flatten.d.ts +0 -50
- package/dist/compiler/transform/flatten.d.ts.map +0 -1
- package/dist/compiler/transform/index.d.ts +0 -7
- package/dist/compiler/transform/index.d.ts.map +0 -1
- package/dist/compiler/transform/inline.d.ts +0 -46
- package/dist/compiler/transform/inline.d.ts.map +0 -1
- package/dist/compiler/validation/emitPrecompiledValidators.d.ts +0 -62
- package/dist/compiler/validation/emitPrecompiledValidators.d.ts.map +0 -1
- package/dist/compiler/validation/index.d.ts +0 -5
- package/dist/compiler/validation/index.d.ts.map +0 -1
- package/dist/decorators/Auth.d.ts +0 -22
- package/dist/decorators/Auth.d.ts.map +0 -1
- package/dist/decorators/Controller.d.ts +0 -17
- package/dist/decorators/Controller.d.ts.map +0 -1
- package/dist/decorators/Public.d.ts +0 -15
- package/dist/decorators/Public.d.ts.map +0 -1
- package/dist/decorators/Use.d.ts +0 -23
- package/dist/decorators/Use.d.ts.map +0 -1
- package/dist/decorators/methods.d.ts +0 -26
- package/dist/decorators/methods.d.ts.map +0 -1
- package/dist/express.cjs +0 -1186
- package/dist/express.cjs.map +0 -1
- package/dist/express.d.ts +0 -8
- package/dist/express.d.ts.map +0 -1
- package/dist/express.js +0 -1150
- package/dist/express.js.map +0 -1
- package/dist/http.d.ts +0 -33
- package/dist/http.d.ts.map +0 -1
- package/dist/index.cjs +0 -724
- package/dist/index.cjs.map +0 -1
- package/dist/metal/applyListQuery.d.ts +0 -100
- package/dist/metal/applyListQuery.d.ts.map +0 -1
- package/dist/metal/index.cjs +0 -278
- package/dist/metal/index.cjs.map +0 -1
- package/dist/metal/index.d.ts +0 -15
- package/dist/metal/index.d.ts.map +0 -1
- package/dist/metal/index.js +0 -243
- package/dist/metal/index.js.map +0 -1
- package/dist/metal/listQuery.d.ts +0 -26
- package/dist/metal/listQuery.d.ts.map +0 -1
- package/dist/metal/queryOptions.d.ts +0 -16
- package/dist/metal/queryOptions.d.ts.map +0 -1
- package/dist/metal/readMetalBag.d.ts +0 -69
- package/dist/metal/readMetalBag.d.ts.map +0 -1
- package/dist/metal/registerMetalEntities.d.ts +0 -26
- package/dist/metal/registerMetalEntities.d.ts.map +0 -1
- package/dist/metal/schemaFromEntity.d.ts +0 -41
- package/dist/metal/schemaFromEntity.d.ts.map +0 -1
- package/dist/metal/searchWhere.d.ts +0 -97
- package/dist/metal/searchWhere.d.ts.map +0 -1
- package/dist/metal/symbolMetadata.d.ts +0 -8
- package/dist/metal/symbolMetadata.d.ts.map +0 -1
- package/dist/runtime/auth/runtime.d.ts +0 -183
- package/dist/runtime/auth/runtime.d.ts.map +0 -1
- package/dist/runtime/metadata/bucket.d.ts +0 -2
- package/dist/runtime/metadata/bucket.d.ts.map +0 -1
- package/dist/runtime/metadata/key.d.ts +0 -2
- package/dist/runtime/metadata/key.d.ts.map +0 -1
- package/dist/runtime/metadata/read.d.ts +0 -2
- package/dist/runtime/metadata/read.d.ts.map +0 -1
- package/dist/runtime/metadata/types.d.ts +0 -95
- package/dist/runtime/metadata/types.d.ts.map +0 -1
- package/dist/runtime/polyfill.d.ts +0 -2
- package/dist/runtime/polyfill.d.ts.map +0 -1
- package/dist/runtime/upload.d.ts +0 -44
- package/dist/runtime/upload.d.ts.map +0 -1
- package/dist/runtime/validation/ajv.d.ts +0 -120
- package/dist/runtime/validation/ajv.d.ts.map +0 -1
- package/dist/runtime/validation/index.d.ts +0 -11
- package/dist/runtime/validation/index.d.ts.map +0 -1
- package/dist/schema/decorators.d.ts +0 -37
- package/dist/schema/decorators.d.ts.map +0 -1
- package/dist/schema/index.cjs +0 -214
- package/dist/schema/index.cjs.map +0 -1
- package/dist/schema/index.d.ts +0 -2
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js +0 -163
- package/dist/schema/index.js.map +0 -1
- package/dist/scripts/adorn-example.cjs +0 -404
- package/dist/scripts/adorn-example.cjs.map +0 -1
- package/dist/utils/operationId.d.ts +0 -2
- package/dist/utils/operationId.d.ts.map +0 -1
- package/dist/utils/path.d.ts +0 -2
- package/dist/utils/path.d.ts.map +0 -1
- package/dist/utils/port.d.ts +0 -9
- package/dist/utils/port.d.ts.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime/polyfill.ts","../src/runtime/metadata/key.ts","../src/runtime/metadata/bucket.ts","../src/decorators/Controller.ts","../src/decorators/methods.ts","../src/decorators/Use.ts","../src/decorators/Auth.ts","../src/decorators/Public.ts","../src/runtime/metadata/read.ts","../src/schema/decorators.ts","../src/runtime/validation/ajv.ts","../src/http.ts","../src/compiler/cache/loadArtifacts.ts","../src/utils/port.ts"],"sourcesContent":["/**\n * Polyfill for Symbol.metadata in environments that don't natively support it.\n * This polyfill must run before any decorated classes are imported to ensure\n * the metadata API is available for decorator metadata storage.\n * \n * @remarks\n * This module provides a global polyfill for the `Symbol.metadata` well-known symbol.\n * Some JavaScript environments (like older browsers or non-standard runtimes) may not\n * natively support this symbol, which is required by the adorn-api decorator system.\n * \n * @example\n * ```typescript\n * // Import this first before any decorated classes\n * import \"adorn-api/runtime/polyfill\";\n * \n * // Now decorators can safely use Symbol.metadata\n * @Controller()\n * class MyController { }\n * ```\n * \n * @package\n */\n(Symbol as any).metadata ??= Symbol(\"Symbol.metadata\");\n\n/**\n * Export symbol to prevent tree-shaking of the polyfill module.\n * This ensures the polyfill code is retained in production builds.\n * \n * @internal\n */\nexport const ADORN_POLYFILL = Symbol(\"adorn-polyfill\");\n","/**\n * Symbol key used to store Adorn metadata in class decorator metadata.\n * \n * @remarks\n * This Symbol.for() call creates a global symbol that is used as the key\n * for storing Adorn-specific metadata in the decorator metadata store.\n * Using Symbol.for() ensures the same symbol is used across different\n * module loads.\n * \n * @internal\n */\nexport const ADORN_META = Symbol.for(\"adorn-api/meta\");\n","import { ADORN_META } from \"./key.js\";\nimport type { AdornBucket } from \"./types.js\";\n\n/**\n * Retrieves the AdornBucket from decorator metadata, creating it if necessary.\n * \n * @remarks\n * This function safely accesses the AdornBucket stored in decorator metadata.\n * If the bucket doesn't exist, it creates a new one with default values.\n * The bucket is stored under the ADORN_META symbol key.\n * \n * @param metadata - The decorator context metadata object\n * @returns The AdornBucket for the decorated class\n * @throws Error if metadata is undefined (polyfill not loaded)\n * \n * @internal\n */\nexport function getBucket(metadata: DecoratorMetadata): AdornBucket {\n if (!metadata) {\n throw new Error(\"Decorator context.metadata is undefined. Ensure Symbol.metadata polyfill runs before decorators.\");\n }\n let bucket = metadata[ADORN_META] as AdornBucket | undefined;\n if (!bucket) {\n bucket = { ops: [], controllerUse: [] };\n metadata[ADORN_META] = bucket;\n }\n if (!bucket.controllerUse) {\n bucket.controllerUse = [];\n }\n return bucket;\n}\n","import { getBucket } from \"../runtime/metadata/bucket.js\";\n\n/**\n * Decorator to mark a class as a controller with a base path.\n * All methods in the controller will be relative to this base path.\n * \n * @param basePath - The base path for all routes in this controller\n * \n * @example\n * ```ts\n * @Controller(\"/users\")\n * export class UsersController {\n * @Get(\"/:id\")\n * getUser() { }\n * }\n * ```\n */\nexport function Controller(basePath: string) {\n return function <T extends new (...args: any[]) => any>(\n target: T,\n context: ClassDecoratorContext<T>\n ): T | void {\n const bucket = getBucket(context.metadata);\n bucket.basePath = basePath;\n };\n}\n","import { getBucket } from \"../runtime/metadata/bucket.js\";\nimport type { HttpMethod } from \"../runtime/metadata/types.js\";\n\nfunction createMethodDecorator(httpMethod: HttpMethod, path: string) {\n return function <T extends (...args: any[]) => any>(\n target: T,\n context: ClassMethodDecoratorContext<any, T>\n ): T | void {\n if (context.private || context.static) {\n return;\n }\n\n const methodName = String(context.name);\n const bucket = getBucket(context.metadata);\n\n let op = bucket.ops.find(op => op.methodName === methodName);\n if (!op) {\n op = {\n httpMethod,\n path,\n methodName,\n };\n bucket.ops.push(op);\n } else {\n op.httpMethod = httpMethod;\n op.path = path;\n }\n };\n}\n\n/**\n * Creates a method decorator for HTTP GET requests.\n * @param path - The route path for this endpoint\n */\nexport const Get = (path: string) => createMethodDecorator(\"GET\", path);\n\n/**\n * Creates a method decorator for HTTP POST requests.\n * @param path - The route path for this endpoint\n */\nexport const Post = (path: string) => createMethodDecorator(\"POST\", path);\n\n/**\n * Creates a method decorator for HTTP PUT requests.\n * @param path - The route path for this endpoint\n */\nexport const Put = (path: string) => createMethodDecorator(\"PUT\", path);\n\n/**\n * Creates a method decorator for HTTP PATCH requests.\n * @param path - The route path for this endpoint\n */\nexport const Patch = (path: string) => createMethodDecorator(\"PATCH\", path);\n\n/**\n * Creates a method decorator for HTTP DELETE requests.\n * @param path - The route path for this endpoint\n */\nexport const Delete = (path: string) => createMethodDecorator(\"DELETE\", path);\n","import { getBucket } from \"../runtime/metadata/bucket.js\";\nimport type { ExpressMw, HttpMethod } from \"../runtime/metadata/types.js\";\n\ntype UseTarget = string | ExpressMw;\n\n/**\n * Decorator to apply middleware to a controller class or individual methods.\n * \n * @param middleware - One or more middleware functions or paths (for path-specific middleware)\n * \n * @example\n * ```ts\n * // Apply to entire controller\n * @Use(cors(), helmet())\n * @Controller(\"/api\")\n * class ApiController { }\n * \n * // Apply to specific method\n * @Use(express.json())\n * @Post(\"/upload\")\n * uploadFile() { }\n * ```\n */\nexport function Use(...middleware: UseTarget[]) {\n return function (\n target: any,\n context: ClassDecoratorContext | ClassMethodDecoratorContext\n ) {\n if (context.kind === \"class\") {\n const bucket = getBucket(context.metadata);\n if (!bucket.controllerUse) {\n bucket.controllerUse = [];\n }\n bucket.controllerUse.push(...middleware);\n } else if (context.kind === \"method\") {\n const methodName = String(context.name);\n const bucket = getBucket(context.metadata);\n let op = bucket.ops.find(op => op.methodName === methodName);\n if (!op) {\n op = {\n httpMethod: \"GET\" as HttpMethod,\n path: \"/\",\n methodName,\n };\n bucket.ops.push(op);\n }\n if (!op.use) {\n op.use = [];\n }\n op.use.push(...middleware);\n } else {\n throw new Error(\"@Use decorator can only be applied to classes or methods\");\n }\n };\n}\n","import { getBucket } from \"../runtime/metadata/bucket.js\";\nimport type { HttpMethod } from \"../runtime/metadata/types.js\";\n\n/**\n * Decorator to mark a method as requiring authentication.\n * \n * @param scheme - The authentication scheme to use (e.g., \"Bearer\", \"Basic\")\n * @param options - Optional authentication configuration\n * @param options.scopes - Required permission scopes for this endpoint\n * @param options.optional - If true, authentication is optional (useful for mixed auth endpoints)\n * \n * @example\n * ```ts\n * @Auth(\"Bearer\", { scopes: [\"admin\"] })\n * @Delete(\"/users/:id\")\n * deleteUser() {\n * // Implementation\n * }\n * ```\n */\nexport function Auth(scheme: string, options?: { scopes?: string[]; optional?: boolean }) {\n return function (\n target: any,\n context: ClassMethodDecoratorContext\n ) {\n if (context.kind !== \"method\") {\n throw new Error(\"@Auth decorator can only be applied to methods\");\n }\n\n const methodName = String(context.name);\n const bucket = getBucket(context.metadata);\n let op = bucket.ops.find(op => op.methodName === methodName);\n if (!op) {\n op = {\n httpMethod: \"GET\" as HttpMethod,\n path: \"/\",\n methodName,\n };\n bucket.ops.push(op);\n }\n\n op.auth = {\n scheme,\n scopes: options?.scopes,\n optional: options?.optional ?? false,\n };\n };\n}\n","import { getBucket } from \"../runtime/metadata/bucket.js\";\nimport type { HttpMethod } from \"../runtime/metadata/types.js\";\n\n/**\n * Decorator to mark a method as public (no authentication required).\n * Use this to explicitly allow unauthenticated access to specific endpoints.\n * \n * @example\n * ```ts\n * @Public()\n * @Get(\"/health\")\n * healthCheck() {\n * return { status: \"ok\" };\n * }\n * ```\n */\nexport function Public() {\n return function (\n target: any,\n context: ClassMethodDecoratorContext\n ) {\n if (context.kind !== \"method\") {\n throw new Error(\"@Public decorator can only be applied to methods\");\n }\n\n const methodName = String(context.name);\n const bucket = getBucket(context.metadata);\n let op = bucket.ops.find(op => op.methodName === methodName);\n if (!op) {\n op = {\n httpMethod: \"GET\" as HttpMethod,\n path: \"/\",\n methodName,\n };\n bucket.ops.push(op);\n }\n\n op.auth = \"public\";\n };\n}\n","import { ADORN_META } from \"./key.js\";\nimport type { AdornBucket } from \"./types.js\";\n\n/**\n * Reads the AdornBucket metadata from a class constructor.\n * \n * @remarks\n * This function retrieves the AdornBucket stored on a class via the\n * Symbol.metadata mechanism. It safely handles cases where metadata\n * is not available (e.g., polyfill not loaded or class not decorated).\n * \n * @param ctor - The class constructor to read metadata from\n * @returns The AdornBucket if found, or null if not available\n * \n * @example\n * ```typescript\n * @Controller()\n * class MyController { }\n * \n * const bucket = readAdornBucket(MyController);\n * if (bucket) {\n * console.log(bucket.ops);\n * }\n * ```\n * \n * @internal\n */\nexport function readAdornBucket(ctor: Function): AdornBucket | null {\n const metaSym = (Symbol as any).metadata as symbol | undefined;\n if (!metaSym) {\n return null;\n }\n\n const classMetadata = (ctor as any)[metaSym] as DecoratorMetadata | undefined;\n if (!classMetadata) {\n return null;\n }\n\n const bucket = classMetadata[ADORN_META] as AdornBucket | undefined;\n return bucket ?? null;\n}\n","const ADORN_META = Symbol.for(\"adorn-api.metadata\");\n\ninterface SchemaFrag {\n [key: string]: unknown;\n}\n\ninterface SchemaMetadata {\n schema: {\n props: Record<string, SchemaFrag[]>;\n };\n}\n\nfunction getOrCreateMetadata(metadata: Record<PropertyKey, unknown>): SchemaMetadata {\n const meta = (metadata[ADORN_META] ??= {}) as SchemaMetadata;\n meta.schema ??= { props: {} };\n return meta;\n}\n\nfunction pushSchemaFrag(\n target: Object,\n propertyKey: string | symbol,\n metadata: Record<PropertyKey, unknown>,\n frag: SchemaFrag\n): void {\n const meta = getOrCreateMetadata(metadata);\n const props = meta.schema.props;\n (props[propertyKey as string] ??= []).push(frag);\n}\n\ntype PropertyDecorator = (target: Object, propertyKey: string | symbol, descriptor?: PropertyDescriptor) => void;\n\nexport function Schema(frag: SchemaFrag): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, frag);\n };\n}\n\nexport function Min(n: number): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { minimum: n });\n };\n}\n\nexport function Max(n: number): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { maximum: n });\n };\n}\n\nexport function ExclusiveMin(n: number): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { exclusiveMinimum: n });\n };\n}\n\nexport function ExclusiveMax(n: number): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { exclusiveMaximum: n });\n };\n}\n\nexport function MinLength(n: number): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { minLength: n });\n };\n}\n\nexport function MaxLength(n: number): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { maxLength: n });\n };\n}\n\nexport function Pattern(re: RegExp | string): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { pattern: typeof re === \"string\" ? re : re.source });\n };\n}\n\nexport function Format(fmt: string): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { format: fmt });\n };\n}\n\nexport function MinItems(n: number): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { minItems: n });\n };\n}\n\nexport function MaxItems(n: number): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { maxItems: n });\n };\n}\n\nexport function MinProperties(n: number): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { minProperties: n });\n };\n}\n\nexport function MaxProperties(n: number): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { maxProperties: n });\n };\n}\n\nexport function MultipleOf(n: number): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { multipleOf: n });\n };\n}\n\nexport function Example(value: unknown): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { example: value });\n };\n}\n\nexport function Examples(values: unknown[]): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { examples: values });\n };\n}\n\nexport function Description(desc: string): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { description: desc });\n };\n}\n\nexport function Enum<T extends string | number>(vals: T[]): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { enum: vals });\n };\n}\n\nexport function Const<T>(val: T): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { const: val });\n };\n}\n\nexport function Default<T>(val: T): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { default: val });\n };\n}\n\nexport function AdditionalProperties(value: boolean | Record<string, unknown>): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { additionalProperties: value });\n };\n}\n\nexport function Closed(): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { additionalProperties: false });\n };\n}\n\nexport function ClosedUnevaluated(): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n pushSchemaFrag(target, propertyKey, {}, { unevaluatedProperties: false });\n };\n}\n\nexport function Union(mode: \"anyOf\" | \"oneOf\" | \"allOf\"): ClassDecorator {\n return function (target: Function): void {\n (target as any)[ADORN_META] = (target as any)[ADORN_META] ?? {};\n const meta = (target as any)[ADORN_META] as SchemaMetadata;\n meta.schema = meta.schema ?? { props: {} };\n (meta.schema as any).unionMode = mode;\n };\n}\n\nexport { ADORN_META };\nexport type { SchemaFrag, SchemaMetadata };\n","import Ajv from \"ajv\";\nimport addFormats from \"ajv-formats\";\nimport type { ErrorObject } from \"ajv\";\n\n/**\n * Runtime validation module using AJV.\n * \n * @remarks\n * This module provides validation utilities using the AJV JSON schema validator.\n * It includes interfaces for validation results, errors, and helper functions\n * for creating validators and formatting error messages.\n * \n * @package\n */\n\n/**\n * Represents a single validation error with details.\n * \n * @public\n */\nexport interface ValidationError {\n /**\n * The JSON path to the invalid property.\n */\n path: string;\n \n /**\n * Human-readable error message.\n */\n message: string;\n \n /**\n * The AJV keyword that failed validation.\n */\n keyword: string;\n \n /**\n * Additional parameters from the validation error.\n */\n params: Record<string, unknown>;\n}\n\n/**\n * Result of a validation operation.\n * \n * @public\n */\nexport interface ValidationResult {\n /**\n * Whether the data passed validation.\n */\n valid: boolean;\n \n /**\n * Array of validation errors if validation failed, null otherwise.\n */\n errors: ValidationError[] | null;\n}\n\n/**\n * Error thrown when request validation fails.\n * \n * @public\n */\nexport class ValidationErrorResponse extends Error {\n /**\n * HTTP status code for validation errors.\n */\n statusCode: number;\n \n /**\n * Detailed validation errors.\n */\n errors: ValidationError[];\n\n /**\n * Creates a new ValidationErrorResponse.\n * \n * @param statusCode - HTTP status code (typically 400)\n * @param errors - Array of validation errors\n */\n constructor(statusCode: number, errors: ValidationError[]) {\n super(\"Validation failed\");\n this.name = \"ValidationErrorResponse\";\n this.statusCode = statusCode;\n this.errors = errors;\n }\n}\n\n/**\n * Creates a configured AJV validator instance.\n * \n * @remarks\n * This function creates an AJV validator with adorn-api's default configuration,\n * including support for custom formats like \"br-phone\" for Brazilian phone numbers.\n * \n * @returns A configured AJV validator instance\n * \n * @example\n * ```typescript\n * const validator = createValidator();\n * const validate = validator.compile(mySchema);\n * const result = validate(myData);\n * ```\n * \n * @public\n */\nexport function createValidator() {\n const ajv = new Ajv.default({\n allErrors: true,\n coerceTypes: false,\n strict: false,\n validateFormats: true,\n });\n\n addFormats.default(ajv);\n\n ajv.addFormat(\"br-phone\", /^\\(\\d{2}\\)\\s\\d{5}-\\d{4}$/);\n\n return ajv;\n}\n\n/**\n * Validates data against a JSON schema.\n * \n * @remarks\n * This function compiles the schema and validates the data, returning a\n * structured result with formatted error messages.\n * \n * @param ajv - The AJV validator instance\n * @param data - The data to validate\n * @param schema - The JSON schema to validate against\n * @param dataPath - Base path for error messages (default: \"#\")\n * @returns ValidationResult with validity and any errors\n * \n * @public\n */\nexport function validateData(\n ajv: ReturnType<typeof createValidator>,\n data: unknown,\n schema: Record<string, unknown>,\n dataPath: string = \"#\"\n): ValidationResult {\n const validate = ajv.compile(schema);\n const valid = validate(data);\n\n if (valid) {\n return { valid: true, errors: null };\n }\n\n const errors: ValidationError[] = (validate.errors || []).map((err: ErrorObject) => ({\n path: formatErrorPath(dataPath, err),\n message: err.message || \"Invalid value\",\n keyword: err.keyword,\n params: err.params as Record<string, unknown>,\n }));\n\n return { valid: false, errors };\n}\n\n/**\n * Formats an error path for display.\n * \n * @internal\n */\nfunction formatErrorPath(basePath: string, err: ErrorObject): string {\n const instancePath = err.instancePath;\n\n if (!instancePath || instancePath === \"\") {\n return basePath;\n }\n\n if (basePath === \"#\" || basePath.endsWith(\"/\")) {\n return `${basePath}${instancePath.slice(1)}`;\n }\n\n return `${basePath}${instancePath}`;\n}\n\n/**\n * Formats validation errors into a structured API response.\n * \n * @remarks\n * This function converts validation errors into a format suitable for API\n * responses, grouping errors by their path.\n * \n * @param errors - Array of validation errors\n * @returns Formatted error response object\n * \n * @public\n */\nexport function formatValidationErrors(errors: ValidationError[]): Record<string, unknown> {\n const formatted: Record<string, string[]> = {};\n\n for (const error of errors) {\n const path = error.path || \"body\";\n if (!formatted[path]) {\n formatted[path] = [];\n }\n formatted[path].push(error.message);\n }\n\n return {\n error: \"Validation failed\",\n details: formatted,\n };\n}\n","import \"./runtime/polyfill.js\";\n\nconst ADORN_META = Symbol.for(\"adorn-api.metadata\");\n\ninterface HttpMetadata {\n consumes?: string[];\n produces?: string[];\n fileParts?: Record<string, FilePartOptions>;\n cookies?: Record<string, boolean>;\n}\n\ninterface FilePartOptions {\n contentType?: string;\n headers?: Record<string, string>;\n}\n\ntype DecoratorMetadata = Record<PropertyKey, unknown> & { [ADORN_META]?: HttpMetadata };\n\nfunction getMetadata(target: Object | DecoratorMetadata): HttpMetadata {\n const host = target as DecoratorMetadata;\n const metadata = host[ADORN_META] ?? {};\n host[ADORN_META] = metadata;\n return metadata;\n}\n\nexport function PartType(contentTypeOrOptions: string | FilePartOptions): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n const metadata = getMetadata(target);\n const options: FilePartOptions = typeof contentTypeOrOptions === \"string\"\n ? { contentType: contentTypeOrOptions }\n : contentTypeOrOptions;\n metadata.fileParts ??= {};\n metadata.fileParts[propertyKey.toString()] = options;\n };\n}\n\nexport function File(): PropertyDecorator {\n return function (target: Object, propertyKey: string | symbol): void {\n const metadata = getMetadata(target);\n metadata.fileParts ??= {};\n metadata.fileParts[propertyKey.toString()] = metadata.fileParts[propertyKey.toString()] ?? {};\n };\n}\n\nexport function Consumes(...contentTypes: string[]): ClassDecorator {\n return function (target: Function): void {\n const metadata = getMetadata(target.prototype);\n metadata.consumes = contentTypes;\n };\n}\n\nexport function Produces(...contentTypes: string[]): ClassDecorator {\n return function (target: Function): void {\n const metadata = getMetadata(target.prototype);\n metadata.produces = contentTypes;\n };\n}\n\nexport type Query<T = any> = T;\nexport type Body<T = any> = T;\nexport type Headers<T = any> = T;\nexport type Cookies<T = any> = T;\n\nexport interface PaginationParams {\n page: number;\n pageSize: number;\n}\n\nexport type PaginatedResponse<T> = {\n items: T[];\n totalItems: number;\n page: number;\n pageSize: number;\n};\n\nexport { ADORN_META };\nexport type { HttpMetadata, FilePartOptions, PartType as PartType2 };\n","/**\n * Cache management module for compiled artifacts.\n * Loads OpenAPI specs, manifests, and validators from the output directory.\n */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { stat } from \"node:fs/promises\";\n\n/**\n * OpenAPI specification interface as loaded from openapi.json\n */\ninterface OpenApi {\n openapi: string;\n components?: {\n schemas?: Record<string, unknown>;\n };\n paths?: Record<string, unknown>;\n info?: Record<string, unknown>;\n security?: Array<Record<string, string[]>>;\n}\n\n/**\n * Manifest interface describing the compiled API structure.\n * Contains metadata about the generation process and all controllers/operations.\n */\ninterface Manifest {\n manifestVersion: number;\n generatedAt: string;\n generator: {\n name: string;\n version: string;\n typescript: string;\n };\n schemas: {\n kind: string;\n file: string;\n componentsSchemasPointer: string;\n };\n validation: {\n mode: \"none\" | \"ajv-runtime\" | \"precompiled\";\n precompiledModule: string | null;\n };\n controllers: Array<{\n controllerId: string;\n basePath: string;\n operations: Array<{\n operationId: string;\n http: {\n method: string;\n path: string;\n };\n handler: {\n methodName: string;\n };\n args: {\n body: {\n index: number;\n required: boolean;\n contentType: string;\n schemaRef: string;\n } | null;\n path: Array<{\n name: string;\n index: number;\n required: boolean;\n schemaRef: string;\n schemaType?: string | string[];\n }>;\n query: Array<{\n name: string;\n index: number;\n required: boolean;\n schemaRef: string;\n schemaType?: string | string[];\n }>;\n headers: Array<{\n name: string;\n index: number;\n required: boolean;\n schemaRef: string;\n schemaType?: string | string[];\n }>;\n cookies: Array<{\n name: string;\n index: number;\n required: boolean;\n schemaRef: string;\n schemaType?: string | string[];\n }>;\n };\n responses: Array<{\n status: number;\n contentType: string;\n schemaRef: string;\n isArray?: boolean;\n }>;\n }>;\n }>;\n}\n\n/**\n * Validator module interface for precompiled validation logic.\n */\ninterface ValidatorModule {\n validators: Record<string, {\n body?: (data: unknown) => boolean;\n response: Record<string, (data: unknown) => boolean>;\n }>;\n validateBody: (operationId: string, data: unknown) => { ok: boolean; errors: unknown[] | null };\n validateResponse: (operationId: string, status: number, contentType: string, data: unknown) => { ok: boolean; errors: unknown[] | null };\n}\n\n/**\n * Internal cache entry for tracking loaded artifacts and their modification times.\n */\ninterface ArtifactCacheEntry {\n openapi: OpenApi | null;\n manifest: Manifest | null;\n validators: ValidatorModule | null;\n mtimes: {\n openapi: number | null;\n manifest: number | null;\n validators: number | null;\n };\n}\n\nconst artifactCache = new Map<string, ArtifactCacheEntry>();\n\nasync function getMtime(filePath: string): Promise<number | null> {\n try {\n const stats = await stat(filePath);\n return stats.mtimeMs;\n } catch {\n return null;\n }\n}\n\n/**\n * Options for loading artifacts from the output directory.\n */\nexport interface LoadArtifactsOptions {\n outDir: string;\n}\n\n/**\n * Result of loading artifacts from the output directory.\n */\nexport interface LoadedArtifacts {\n openapi: OpenApi;\n manifest: Manifest;\n validators: ValidatorModule | null;\n}\n\n/**\n * Loads OpenAPI spec, manifest, and validators from the output directory.\n * Results are cached in memory to avoid repeated file I/O.\n * \n * @param options - Object containing the output directory path\n * @returns Promise resolving to loaded artifacts including OpenAPI spec, manifest, and validators\n */\nexport async function loadArtifacts(options: LoadArtifactsOptions): Promise<LoadedArtifacts> {\n const { outDir } = options;\n const cacheKey = path.resolve(outDir);\n\n const entry = artifactCache.get(cacheKey);\n\n const openapiPath = path.join(outDir, \"openapi.json\");\n const manifestPath = path.join(outDir, \"manifest.json\");\n const validatorsPath = path.join(outDir, \"validators.mjs\");\n\n const openapiMtime = await getMtime(openapiPath);\n const manifestMtime = await getMtime(manifestPath);\n const validatorsMtime = await getMtime(validatorsPath);\n\n if (entry) {\n const mtimesMatch = \n entry.mtimes.openapi === openapiMtime &&\n entry.mtimes.manifest === manifestMtime &&\n entry.mtimes.validators === validatorsMtime;\n\n if (mtimesMatch) {\n if (entry.openapi && entry.manifest) {\n return {\n openapi: entry.openapi,\n manifest: entry.manifest,\n validators: entry.validators,\n };\n }\n }\n }\n\n const openapiContent = fs.readFileSync(openapiPath, \"utf-8\");\n const manifestContent = fs.readFileSync(manifestPath, \"utf-8\");\n\n const openapi = JSON.parse(openapiContent) as OpenApi;\n const manifest = JSON.parse(manifestContent) as Manifest;\n\n let validators: ValidatorModule | null = null;\n\n if (manifest.validation.mode === \"precompiled\" && manifest.validation.precompiledModule) {\n try {\n const validatorsModule = await import(path.join(outDir, manifest.validation.precompiledModule));\n validators = validatorsModule as ValidatorModule;\n } catch (err) {\n console.warn(`Failed to load precompiled validators: ${err}`);\n }\n }\n\n artifactCache.set(cacheKey, {\n openapi,\n manifest,\n validators,\n mtimes: {\n openapi: openapiMtime,\n manifest: manifestMtime,\n validators: validatorsMtime,\n },\n });\n\n return {\n openapi,\n manifest,\n validators,\n };\n}\n\n/**\n * Clears the in-memory artifact cache.\n * If an output directory is specified, only that entry is removed.\n * Otherwise, the entire cache is cleared.\n * \n * @param outDir - Optional specific output directory to clear from cache\n */\nexport function clearArtifactCache(outDir?: string): void {\n if (outDir) {\n const cacheKey = path.resolve(outDir);\n artifactCache.delete(cacheKey);\n } else {\n artifactCache.clear();\n }\n}\n\n/**\n * Returns statistics about the current artifact cache state.\n * Useful for debugging and monitoring cache behavior.\n * \n * @returns Object containing cache size and array of cached keys\n */\nexport function getArtifactCacheStats(): { size: number; keys: string[] } {\n return {\n size: artifactCache.size,\n keys: Array.from(artifactCache.keys()),\n };\n}\n","import { createServer, Server } from \"net\";\nimport { exec } from \"child_process\";\nimport { promisify } from \"util\";\n\nconst execAsync = promisify(exec);\n\nexport interface ProcessInfo {\n pid: number;\n command?: string;\n}\n\nexport async function isPortAvailable(port: number, host: string = \"0.0.0.0\"): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n const server: Server = createServer();\n\n server.on(\"error\", (err: any) => {\n if (err.code === \"EADDRINUSE\") {\n resolve(false);\n } else {\n resolve(false);\n }\n });\n\n server.once(\"listening\", () => {\n server.close(() => {\n resolve(true);\n });\n });\n\n server.listen(port, host);\n });\n}\n\nexport async function findProcessOnPort(port: number): Promise<ProcessInfo | null> {\n try {\n const platform = process.platform;\n\n if (platform === \"win32\") {\n const { stdout } = await execAsync(`netstat -ano | findstr :${port}`);\n \n for (const line of stdout.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.includes(\"PID\")) continue;\n \n const parts = trimmed.split(/\\s+/);\n if (parts.length >= 5) {\n const address = parts[1];\n const pid = parseInt(parts[parts.length - 1], 10);\n \n if (address.includes(`:${port}`) && !isNaN(pid)) {\n const command = await getProcessNameOnWindows(pid);\n return { pid, command };\n }\n }\n }\n } else {\n const { stdout } = await execAsync(`lsof -ti:${port}`);\n const pids = stdout.trim().split(\"\\n\").filter(Boolean).map(Number);\n \n if (pids.length > 0) {\n const pid = pids[0];\n const command = await getProcessNameOnUnix(pid);\n return { pid, command };\n }\n }\n\n return null;\n } catch (error: any) {\n if (error.message.includes(\"matches found\")) {\n return null;\n }\n return null;\n }\n}\n\nasync function getProcessNameOnWindows(pid: number): Promise<string | undefined> {\n try {\n const { stdout } = await execAsync(`tasklist /FI \"PID eq ${pid}\" /FO CSV /NH`);\n const line = stdout.trim().split(\"\\n\")[0];\n if (line) {\n const parts = line.split('\",\"');\n if (parts.length >= 2) {\n return parts[0].replace(/\"/g, \"\");\n }\n }\n } catch {\n return undefined;\n }\n}\n\nasync function getProcessNameOnUnix(pid: number): Promise<string | undefined> {\n try {\n const { stdout } = await execAsync(`ps -p ${pid} -o comm=`);\n return stdout.trim() || undefined;\n } catch {\n return undefined;\n }\n}\n\nexport async function killProcess(pid: number): Promise<boolean> {\n try {\n process.kill(pid, \"SIGTERM\");\n \n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error(\"Process did not terminate gracefully\"));\n }, 5000);\n \n const check = () => {\n try {\n process.kill(pid, 0);\n setTimeout(check, 500);\n } catch {\n clearInterval(interval);\n clearTimeout(timeout);\n resolve();\n }\n };\n \n const interval = setInterval(check, 500);\n });\n \n return true;\n } catch {\n try {\n process.kill(pid, \"SIGKILL\");\n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error(\"Process did not terminate\"));\n }, 3000);\n \n setTimeout(() => {\n try {\n process.kill(pid, 0);\n clearTimeout(timeout);\n reject(new Error(\"Process still running\"));\n } catch {\n clearTimeout(timeout);\n resolve();\n }\n }, 1000);\n });\n \n return true;\n } catch {\n return false;\n }\n }\n}\n\nexport async function waitForPort(port: number, host: string = \"0.0.0.0\", timeout: number = 5000): Promise<boolean> {\n const start = Date.now();\n \n while (Date.now() - start < timeout) {\n if (await isPortAvailable(port, host)) {\n return true;\n }\n await new Promise(resolve => setTimeout(resolve, 200));\n }\n \n return false;\n}\n"],"mappings":"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","names":["path","op","op","op","op","ADORN_META","path","ADORN_META"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,cAAc,uBAAuB,CAAC;AAEtC,OAAO;AACP,OAAO,EACL,cAAc,EACd,SAAS,EACT,WAAW,GACZ,MAAM,2BAA2B,CAAC;AAEnC,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,QAAQ;AACR,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAElC,UAAU;AACV,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAyB,MAAM,yBAAyB,CAAC;AAEhF,eAAe;AACf,cAAc,kCAAkC,CAAC;AAEjD,aAAa;AACb,OAAO,EACL,6BAA6B,EAC7B,eAAe,GAEhB,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ControllerMetadata, RouteMetadata, ParameterMetadata } from '../types/metadata.js';
|
|
2
|
+
interface PendingParameter {
|
|
3
|
+
name: string;
|
|
4
|
+
type: ParameterMetadata['type'];
|
|
5
|
+
schema?: any;
|
|
6
|
+
}
|
|
7
|
+
declare class MetadataStorage {
|
|
8
|
+
private static instance;
|
|
9
|
+
private controllers;
|
|
10
|
+
private controllerList;
|
|
11
|
+
private routes;
|
|
12
|
+
private parameterIndex;
|
|
13
|
+
private pendingMiddlewares;
|
|
14
|
+
private pendingGuards;
|
|
15
|
+
private pendingParameters;
|
|
16
|
+
private constructor();
|
|
17
|
+
static getInstance(): MetadataStorage;
|
|
18
|
+
setController(controllerClass: Function, metadata: ControllerMetadata): void;
|
|
19
|
+
getController(controllerClass: Function): ControllerMetadata | undefined;
|
|
20
|
+
getAllControllers(): Function[];
|
|
21
|
+
addRoute(controllerClass: Function, route: RouteMetadata): void;
|
|
22
|
+
getRoutes(controllerClass: Function): RouteMetadata[];
|
|
23
|
+
addPendingMiddleware(method: Function, middleware: Function): void;
|
|
24
|
+
getPendingMiddlewares(method: Function): Function[];
|
|
25
|
+
clearPendingMiddlewares(method: Function): void;
|
|
26
|
+
addPendingGuard(method: Function, guard: Function): void;
|
|
27
|
+
getPendingGuards(method: Function): Function[];
|
|
28
|
+
clearPendingGuards(method: Function): void;
|
|
29
|
+
addPendingParameter(method: Function, param: PendingParameter): void;
|
|
30
|
+
getPendingParameters(method: Function): PendingParameter[];
|
|
31
|
+
clearPendingParameters(method: Function): void;
|
|
32
|
+
getNextParameterIndex(controllerClass: Function, methodName: string): number;
|
|
33
|
+
reset(): void;
|
|
34
|
+
clear(): void;
|
|
35
|
+
}
|
|
36
|
+
export declare const metadataStorage: MetadataStorage;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=metadata-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-storage.d.ts","sourceRoot":"","sources":["../../src/metadata/metadata-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAE9B,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED,cAAM,eAAe;IACnB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IAEzC,OAAO,CAAC,WAAW,CAA+C;IAClE,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,cAAc,CAA6B;IAGnD,OAAO,CAAC,kBAAkB,CAAuC;IACjE,OAAO,CAAC,aAAa,CAAuC;IAC5D,OAAO,CAAC,iBAAiB,CAA+C;IAExE,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,eAAe;IASrC,aAAa,CAAC,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAO5E,aAAa,CAAC,eAAe,EAAE,QAAQ,GAAG,kBAAkB,GAAG,SAAS;IAIxE,iBAAiB,IAAI,QAAQ,EAAE;IAM/B,QAAQ,CAAC,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI;IAO/D,SAAS,CAAC,eAAe,EAAE,QAAQ,GAAG,aAAa,EAAE;IAMrD,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,GAAG,IAAI;IAOlE,qBAAqB,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE;IAInD,uBAAuB,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;IAM/C,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI;IAOxD,gBAAgB,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE;IAI9C,kBAAkB,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;IAM1C,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAOpE,oBAAoB,CAAC,MAAM,EAAE,QAAQ,GAAG,gBAAgB,EAAE;IAI1D,sBAAsB,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;IAM9C,qBAAqB,CAAC,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAS5E,KAAK,IAAI,IAAI;IAUb,KAAK,IAAI,IAAI;CAGd;AAED,eAAO,MAAM,eAAe,iBAAgC,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
class MetadataStorage {
|
|
2
|
+
static instance;
|
|
3
|
+
controllers = new WeakMap();
|
|
4
|
+
controllerList = [];
|
|
5
|
+
routes = new Map();
|
|
6
|
+
parameterIndex = new Map();
|
|
7
|
+
// Pending items for method decorators (processed when class decorator runs)
|
|
8
|
+
pendingMiddlewares = new WeakMap();
|
|
9
|
+
pendingGuards = new WeakMap();
|
|
10
|
+
pendingParameters = new WeakMap();
|
|
11
|
+
constructor() { }
|
|
12
|
+
static getInstance() {
|
|
13
|
+
if (!MetadataStorage.instance) {
|
|
14
|
+
MetadataStorage.instance = new MetadataStorage();
|
|
15
|
+
}
|
|
16
|
+
return MetadataStorage.instance;
|
|
17
|
+
}
|
|
18
|
+
// --- Controller Methods ---
|
|
19
|
+
setController(controllerClass, metadata) {
|
|
20
|
+
this.controllers.set(controllerClass, metadata);
|
|
21
|
+
if (!this.controllerList.includes(controllerClass)) {
|
|
22
|
+
this.controllerList.push(controllerClass);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
getController(controllerClass) {
|
|
26
|
+
return this.controllers.get(controllerClass);
|
|
27
|
+
}
|
|
28
|
+
getAllControllers() {
|
|
29
|
+
return [...this.controllerList];
|
|
30
|
+
}
|
|
31
|
+
// --- Route Methods ---
|
|
32
|
+
addRoute(controllerClass, route) {
|
|
33
|
+
if (!this.routes.has(controllerClass)) {
|
|
34
|
+
this.routes.set(controllerClass, []);
|
|
35
|
+
}
|
|
36
|
+
this.routes.get(controllerClass).push(route);
|
|
37
|
+
}
|
|
38
|
+
getRoutes(controllerClass) {
|
|
39
|
+
return this.routes.get(controllerClass) || [];
|
|
40
|
+
}
|
|
41
|
+
// --- Pending Middleware Methods ---
|
|
42
|
+
addPendingMiddleware(method, middleware) {
|
|
43
|
+
if (!this.pendingMiddlewares.has(method)) {
|
|
44
|
+
this.pendingMiddlewares.set(method, []);
|
|
45
|
+
}
|
|
46
|
+
this.pendingMiddlewares.get(method).push(middleware);
|
|
47
|
+
}
|
|
48
|
+
getPendingMiddlewares(method) {
|
|
49
|
+
return this.pendingMiddlewares.get(method) || [];
|
|
50
|
+
}
|
|
51
|
+
clearPendingMiddlewares(method) {
|
|
52
|
+
this.pendingMiddlewares.delete(method);
|
|
53
|
+
}
|
|
54
|
+
// --- Pending Guard Methods ---
|
|
55
|
+
addPendingGuard(method, guard) {
|
|
56
|
+
if (!this.pendingGuards.has(method)) {
|
|
57
|
+
this.pendingGuards.set(method, []);
|
|
58
|
+
}
|
|
59
|
+
this.pendingGuards.get(method).push(guard);
|
|
60
|
+
}
|
|
61
|
+
getPendingGuards(method) {
|
|
62
|
+
return this.pendingGuards.get(method) || [];
|
|
63
|
+
}
|
|
64
|
+
clearPendingGuards(method) {
|
|
65
|
+
this.pendingGuards.delete(method);
|
|
66
|
+
}
|
|
67
|
+
// --- Pending Parameter Methods ---
|
|
68
|
+
addPendingParameter(method, param) {
|
|
69
|
+
if (!this.pendingParameters.has(method)) {
|
|
70
|
+
this.pendingParameters.set(method, []);
|
|
71
|
+
}
|
|
72
|
+
this.pendingParameters.get(method).push(param);
|
|
73
|
+
}
|
|
74
|
+
getPendingParameters(method) {
|
|
75
|
+
return this.pendingParameters.get(method) || [];
|
|
76
|
+
}
|
|
77
|
+
clearPendingParameters(method) {
|
|
78
|
+
this.pendingParameters.delete(method);
|
|
79
|
+
}
|
|
80
|
+
// --- Parameter Index Tracking ---
|
|
81
|
+
getNextParameterIndex(controllerClass, methodName) {
|
|
82
|
+
const key = `${controllerClass.name}.${methodName}`;
|
|
83
|
+
const current = this.parameterIndex.get(key) || 0;
|
|
84
|
+
this.parameterIndex.set(key, current + 1);
|
|
85
|
+
return current;
|
|
86
|
+
}
|
|
87
|
+
// --- Reset/Clear ---
|
|
88
|
+
reset() {
|
|
89
|
+
this.controllers = new WeakMap();
|
|
90
|
+
this.pendingMiddlewares = new WeakMap();
|
|
91
|
+
this.pendingGuards = new WeakMap();
|
|
92
|
+
this.pendingParameters = new WeakMap();
|
|
93
|
+
this.controllerList = [];
|
|
94
|
+
this.routes.clear();
|
|
95
|
+
this.parameterIndex.clear();
|
|
96
|
+
}
|
|
97
|
+
clear() {
|
|
98
|
+
this.reset();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
export const metadataStorage = MetadataStorage.getInstance();
|
|
102
|
+
//# sourceMappingURL=metadata-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-storage.js","sourceRoot":"","sources":["../../src/metadata/metadata-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dto-helper.d.ts","sourceRoot":"","sources":["../../src/metal-orm-integration/dto-helper.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAS;IACpB,MAAM,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAe1D,OAAO,CAAC,MAAM,CAAC,sBAAsB;CAkCtC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export class DtoHelper {
|
|
2
|
+
static extractDtoProperties(dto) {
|
|
3
|
+
if (!dto)
|
|
4
|
+
return {};
|
|
5
|
+
const properties = {};
|
|
6
|
+
Object.keys(dto).forEach((key) => {
|
|
7
|
+
const value = dto[key];
|
|
8
|
+
if (value && typeof value === 'object' && 'type' in value) {
|
|
9
|
+
properties[key] = this.mapColumnTypeToOpenApi(value);
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
return properties;
|
|
13
|
+
}
|
|
14
|
+
static mapColumnTypeToOpenApi(column) {
|
|
15
|
+
const colType = column.type;
|
|
16
|
+
switch (colType) {
|
|
17
|
+
case 'int':
|
|
18
|
+
case 'integer':
|
|
19
|
+
return { type: 'integer', format: 'int32' };
|
|
20
|
+
case 'bigint':
|
|
21
|
+
return { type: 'integer', format: 'int64' };
|
|
22
|
+
case 'varchar':
|
|
23
|
+
case 'text':
|
|
24
|
+
case 'string':
|
|
25
|
+
return { type: 'string' };
|
|
26
|
+
case 'boolean':
|
|
27
|
+
return { type: 'boolean' };
|
|
28
|
+
case 'decimal':
|
|
29
|
+
case 'float':
|
|
30
|
+
case 'double':
|
|
31
|
+
return { type: 'number' };
|
|
32
|
+
case 'date':
|
|
33
|
+
return { type: 'string', format: 'date' };
|
|
34
|
+
case 'timestamp':
|
|
35
|
+
case 'datetime':
|
|
36
|
+
return { type: 'string', format: 'date-time' };
|
|
37
|
+
case 'uuid':
|
|
38
|
+
return { type: 'string', format: 'uuid' };
|
|
39
|
+
case 'json':
|
|
40
|
+
return { type: 'object' };
|
|
41
|
+
case 'enum':
|
|
42
|
+
return { type: 'string', enum: column.values };
|
|
43
|
+
default:
|
|
44
|
+
return { type: 'string' };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=dto-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dto-helper.js","sourceRoot":"","sources":["../../src/metal-orm-integration/dto-helper.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,SAAS;IACpB,MAAM,CAAC,oBAAoB,CAAC,GAAQ;QAClC,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QAEpB,MAAM,UAAU,GAAwB,EAAE,CAAC;QAE3C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;gBAC1D,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,MAAM,CAAC,sBAAsB,CAAC,MAAW;QAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;QAE5B,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,KAAK,CAAC;YACX,KAAK,SAAS;gBACZ,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;YAC9C,KAAK,QAAQ;gBACX,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;YAC9C,KAAK,SAAS,CAAC;YACf,KAAK,MAAM,CAAC;YACZ,KAAK,QAAQ;gBACX,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC5B,KAAK,SAAS;gBACZ,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YAC7B,KAAK,SAAS,CAAC;YACf,KAAK,OAAO,CAAC;YACb,KAAK,QAAQ;gBACX,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC5B,KAAK,MAAM;gBACT,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAC5C,KAAK,WAAW,CAAC;YACjB,KAAK,UAAU;gBACb,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;YACjD,KAAK,MAAM;gBACT,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAC5C,KAAK,MAAM;gBACT,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC5B,KAAK,MAAM;gBACT,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;YACjD;gBACE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dto-response.decorator.d.ts","sourceRoot":"","sources":["../../src/metal-orm-integration/dto-response.decorator.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CAAC,QAAQ,EAAE,GAAG,IAErC,gBAAgB,QAAQ,EACxB,SAAS,2BAA2B,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,KACxD,QAAQ,GAAG,IAAI,CAwBnB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { metadataStorage } from '../metadata/metadata-storage.js';
|
|
2
|
+
export function DtoResponse(dtoClass) {
|
|
3
|
+
return function (originalMethod, context) {
|
|
4
|
+
if (context.kind === 'method') {
|
|
5
|
+
const methodName = String(context.name);
|
|
6
|
+
const controllerClass = context.constructor;
|
|
7
|
+
const routes = metadataStorage.getRoutes(controllerClass);
|
|
8
|
+
const route = routes.find((r) => r.handlerName === methodName);
|
|
9
|
+
if (route) {
|
|
10
|
+
const dtoProperties = extractDtoProperties(dtoClass);
|
|
11
|
+
route.response = {
|
|
12
|
+
status: route.response?.status || 200,
|
|
13
|
+
description: route.response?.description || 'Success',
|
|
14
|
+
schema: {
|
|
15
|
+
type: 'object',
|
|
16
|
+
properties: dtoProperties,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
return originalMethod;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function extractDtoProperties(dto) {
|
|
25
|
+
if (!dto)
|
|
26
|
+
return {};
|
|
27
|
+
const properties = {};
|
|
28
|
+
if (dto.tableDef && dto.tableDef.columns) {
|
|
29
|
+
Object.keys(dto.tableDef.columns).forEach((key) => {
|
|
30
|
+
const column = dto.tableDef.columns[key];
|
|
31
|
+
properties[key] = mapColumnTypeToOpenApi(column);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return properties;
|
|
35
|
+
}
|
|
36
|
+
function mapColumnTypeToOpenApi(column) {
|
|
37
|
+
const colType = column.type;
|
|
38
|
+
switch (colType) {
|
|
39
|
+
case 'int':
|
|
40
|
+
case 'integer':
|
|
41
|
+
return { type: 'integer', format: 'int32' };
|
|
42
|
+
case 'bigint':
|
|
43
|
+
return { type: 'integer', format: 'int64' };
|
|
44
|
+
case 'varchar':
|
|
45
|
+
case 'text':
|
|
46
|
+
case 'string':
|
|
47
|
+
return { type: 'string' };
|
|
48
|
+
case 'boolean':
|
|
49
|
+
return { type: 'boolean' };
|
|
50
|
+
case 'decimal':
|
|
51
|
+
case 'float':
|
|
52
|
+
case 'double':
|
|
53
|
+
return { type: 'number' };
|
|
54
|
+
case 'date':
|
|
55
|
+
return { type: 'string', format: 'date' };
|
|
56
|
+
case 'timestamp':
|
|
57
|
+
case 'datetime':
|
|
58
|
+
return { type: 'string', format: 'date-time' };
|
|
59
|
+
case 'uuid':
|
|
60
|
+
return { type: 'string', format: 'uuid' };
|
|
61
|
+
case 'json':
|
|
62
|
+
return { type: 'object' };
|
|
63
|
+
case 'enum':
|
|
64
|
+
return { type: 'string', enum: column.values };
|
|
65
|
+
default:
|
|
66
|
+
return { type: 'string' };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=dto-response.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dto-response.decorator.js","sourceRoot":"","sources":["../../src/metal-orm-integration/dto-response.decorator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
type EntitySchemaBuilderOptions = {
|
|
3
|
+
exclude?: string[];
|
|
4
|
+
include?: string[];
|
|
5
|
+
includeRelations?: string[];
|
|
6
|
+
flat?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare class EntitySchemaBuilder {
|
|
9
|
+
private static readonly TYPE_MAP;
|
|
10
|
+
static create(entity: any, options?: EntitySchemaBuilderOptions): z.ZodObject<any>;
|
|
11
|
+
static update(entity: any, options?: EntitySchemaBuilderOptions): z.ZodObject<any>;
|
|
12
|
+
static idParams(entity: any): z.ZodObject<any>;
|
|
13
|
+
static response(entity: any, options?: EntitySchemaBuilderOptions): any;
|
|
14
|
+
private static columnsToTableDef;
|
|
15
|
+
private static getColumns;
|
|
16
|
+
private static columnToZod;
|
|
17
|
+
private static columnToOpenApi;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=entity-schema-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-schema-builder.d.ts","sourceRoot":"","sources":["../../src/metal-orm-integration/entity-schema-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,KAAK,0BAA0B,GAAG;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CA0C9B;IAEF,MAAM,CAAC,MAAM,CACX,MAAM,EAAE,GAAG,EACX,OAAO,GAAE,0BAA+B,GACvC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;IAuDnB,MAAM,CAAC,MAAM,CACX,MAAM,EAAE,GAAG,EACX,OAAO,GAAE,0BAA+B,GACvC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;IA0CnB,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;IAqD9C,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,GAAE,0BAA+B,GAAG,GAAG;IAsD3E,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAsBhC,OAAO,CAAC,MAAM,CAAC,UAAU;IAuCzB,OAAO,CAAC,MAAM,CAAC,WAAW;IAuE1B,OAAO,CAAC,MAAM,CAAC,eAAe;CA4D/B"}
|