adorn-api 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -249
- package/dist/adapters/express/createApp.d.ts +20 -0
- package/dist/adapters/express/createApp.d.ts.map +1 -0
- package/dist/adapters/express/createApp.js +35 -0
- package/dist/adapters/express/createApp.js.map +1 -0
- package/dist/adapters/express/index.d.ts +7 -0
- package/dist/adapters/express/index.d.ts.map +1 -0
- package/dist/adapters/express/index.js +7 -0
- package/dist/adapters/express/index.js.map +1 -0
- package/dist/adapters/express/middleware/errorHandler.d.ts +3 -0
- package/dist/adapters/express/middleware/errorHandler.d.ts.map +1 -0
- package/dist/adapters/express/middleware/errorHandler.js +6 -0
- package/dist/adapters/express/middleware/errorHandler.js.map +1 -0
- package/dist/adapters/express/middleware/requestContext.d.ts +2 -0
- package/dist/adapters/express/middleware/requestContext.d.ts.map +1 -0
- package/dist/adapters/express/middleware/requestContext.js +3 -0
- package/dist/adapters/express/middleware/requestContext.js.map +1 -0
- package/dist/adapters/express/router.d.ts +10 -0
- package/dist/adapters/express/router.d.ts.map +1 -0
- package/dist/adapters/express/router.js +103 -0
- package/dist/adapters/express/router.js.map +1 -0
- package/dist/adapters/express/swagger/index.d.ts +2 -0
- package/dist/adapters/express/swagger/index.d.ts.map +1 -0
- package/dist/adapters/express/swagger/index.js +2 -0
- package/dist/adapters/express/swagger/index.js.map +1 -0
- package/dist/adapters/express/swagger/serve.d.ts +12 -0
- package/dist/adapters/express/swagger/serve.d.ts.map +1 -0
- package/dist/adapters/express/swagger/serve.js +72 -0
- package/dist/adapters/express/swagger/serve.js.map +1 -0
- package/dist/adapters/express/transport/request.d.ts +4 -0
- package/dist/adapters/express/transport/request.d.ts.map +1 -0
- package/dist/adapters/express/transport/request.js +12 -0
- package/dist/adapters/express/transport/request.js.map +1 -0
- package/dist/adapters/express/transport/response.d.ts +5 -0
- package/dist/adapters/express/transport/response.d.ts.map +1 -0
- package/dist/adapters/express/transport/response.js +36 -0
- package/dist/adapters/express/transport/response.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +2 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +3 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/gen.d.ts +2 -0
- package/dist/cli/commands/gen.d.ts.map +1 -0
- package/dist/cli/commands/gen.js +3 -0
- package/dist/cli/commands/gen.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +3 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -0
- package/dist/compiler/config/defaults.d.ts +2 -0
- package/dist/compiler/config/defaults.d.ts.map +1 -0
- package/dist/compiler/config/defaults.js +3 -0
- package/dist/compiler/config/defaults.js.map +1 -0
- package/dist/compiler/config/loadConfig.d.ts +2 -0
- package/dist/compiler/config/loadConfig.d.ts.map +1 -0
- package/dist/compiler/config/loadConfig.js +3 -0
- package/dist/compiler/config/loadConfig.js.map +1 -0
- package/dist/compiler/diagnostics/errors.d.ts +2 -0
- package/dist/compiler/diagnostics/errors.d.ts.map +1 -0
- package/dist/compiler/diagnostics/errors.js +3 -0
- package/dist/compiler/diagnostics/errors.js.map +1 -0
- package/dist/compiler/emit/openapi.d.ts +2 -0
- package/dist/compiler/emit/openapi.d.ts.map +1 -0
- package/dist/compiler/emit/openapi.js +3 -0
- package/dist/compiler/emit/openapi.js.map +1 -0
- package/dist/compiler/emit/routes.d.ts +2 -0
- package/dist/compiler/emit/routes.d.ts.map +1 -0
- package/dist/compiler/emit/routes.js +3 -0
- package/dist/compiler/emit/routes.js.map +1 -0
- package/dist/compiler/program/loadTsProgram.d.ts +2 -0
- package/dist/compiler/program/loadTsProgram.d.ts.map +1 -0
- package/dist/compiler/program/loadTsProgram.js +3 -0
- package/dist/compiler/program/loadTsProgram.js.map +1 -0
- package/dist/compiler/scan/actions.d.ts +2 -0
- package/dist/compiler/scan/actions.d.ts.map +1 -0
- package/dist/compiler/scan/actions.js +3 -0
- package/dist/compiler/scan/actions.js.map +1 -0
- package/dist/compiler/scan/controllers.d.ts +2 -0
- package/dist/compiler/scan/controllers.d.ts.map +1 -0
- package/dist/compiler/scan/controllers.js +3 -0
- package/dist/compiler/scan/controllers.js.map +1 -0
- package/dist/compiler/scan/types.d.ts +2 -0
- package/dist/compiler/scan/types.d.ts.map +1 -0
- package/dist/compiler/scan/types.js +3 -0
- package/dist/compiler/scan/types.js.map +1 -0
- package/dist/contracts/context.d.ts +10 -0
- package/dist/contracts/context.d.ts.map +1 -0
- package/dist/contracts/context.js +2 -0
- package/dist/contracts/context.js.map +1 -0
- package/dist/contracts/errors.d.ts +22 -0
- package/dist/contracts/errors.d.ts.map +1 -0
- package/dist/contracts/errors.js +2 -0
- package/dist/contracts/errors.js.map +1 -0
- package/dist/contracts/http.d.ts +2 -0
- package/dist/contracts/http.d.ts.map +1 -0
- package/dist/contracts/http.js +3 -0
- package/dist/contracts/http.js.map +1 -0
- package/dist/contracts/middleware.d.ts +2 -0
- package/dist/contracts/middleware.d.ts.map +1 -0
- package/dist/contracts/middleware.js +3 -0
- package/dist/contracts/middleware.js.map +1 -0
- package/dist/contracts/openapi-v3.d.ts +77 -0
- package/dist/contracts/openapi-v3.d.ts.map +1 -0
- package/dist/contracts/openapi-v3.js +2 -0
- package/dist/contracts/openapi-v3.js.map +1 -0
- package/dist/contracts/openapi.d.ts +2 -0
- package/dist/contracts/openapi.d.ts.map +1 -0
- package/dist/contracts/openapi.js +2 -0
- package/dist/contracts/openapi.js.map +1 -0
- package/dist/contracts/reply.d.ts +11 -0
- package/dist/contracts/reply.d.ts.map +1 -0
- package/dist/contracts/reply.js +4 -0
- package/dist/contracts/reply.js.map +1 -0
- package/dist/contracts/response-types.d.ts +40 -0
- package/dist/contracts/response-types.d.ts.map +1 -0
- package/dist/contracts/response-types.js +2 -0
- package/dist/contracts/response-types.js.map +1 -0
- package/dist/contracts/responses.d.ts +18 -0
- package/dist/contracts/responses.d.ts.map +1 -0
- package/dist/contracts/responses.js +2 -0
- package/dist/contracts/responses.js.map +1 -0
- package/dist/contracts/route-options.d.ts +24 -0
- package/dist/contracts/route-options.d.ts.map +1 -0
- package/dist/contracts/route-options.js +2 -0
- package/dist/contracts/route-options.js.map +1 -0
- package/dist/contracts/route-typing.d.ts +25 -0
- package/dist/contracts/route-typing.d.ts.map +1 -0
- package/dist/contracts/route-typing.js +2 -0
- package/dist/contracts/route-typing.js.map +1 -0
- package/dist/contracts/validator.d.ts +25 -0
- package/dist/contracts/validator.d.ts.map +1 -0
- package/dist/contracts/validator.js +2 -0
- package/dist/contracts/validator.js.map +1 -0
- package/dist/core/binding/binder.d.ts +19 -0
- package/dist/core/binding/binder.d.ts.map +1 -0
- package/dist/core/binding/binder.js +128 -0
- package/dist/core/binding/binder.js.map +1 -0
- package/dist/core/binding/coerce/arrays.d.ts +7 -0
- package/dist/core/binding/coerce/arrays.d.ts.map +1 -0
- package/dist/core/binding/coerce/arrays.js +28 -0
- package/dist/core/binding/coerce/arrays.js.map +1 -0
- package/dist/core/binding/coerce/csv.d.ts +2 -0
- package/dist/core/binding/coerce/csv.d.ts.map +1 -0
- package/dist/core/binding/coerce/csv.js +7 -0
- package/dist/core/binding/coerce/csv.js.map +1 -0
- package/dist/core/binding/coerce/objects.d.ts +2 -0
- package/dist/core/binding/coerce/objects.d.ts.map +1 -0
- package/dist/core/binding/coerce/objects.js +3 -0
- package/dist/core/binding/coerce/objects.js.map +1 -0
- package/dist/core/binding/coerce/primitives.d.ts +3 -0
- package/dist/core/binding/coerce/primitives.d.ts.map +1 -0
- package/dist/core/binding/coerce/primitives.js +18 -0
- package/dist/core/binding/coerce/primitives.js.map +1 -0
- package/dist/core/binding/index.d.ts +2 -0
- package/dist/core/binding/index.d.ts.map +1 -0
- package/dist/core/binding/index.js +2 -0
- package/dist/core/binding/index.js.map +1 -0
- package/dist/core/binding/rules/inferFromHttpMethod.d.ts +6 -0
- package/dist/core/binding/rules/inferFromHttpMethod.d.ts.map +1 -0
- package/dist/core/binding/rules/inferFromHttpMethod.js +11 -0
- package/dist/core/binding/rules/inferFromHttpMethod.js.map +1 -0
- package/dist/core/binding/rules/inferFromPath.d.ts +2 -0
- package/dist/core/binding/rules/inferFromPath.d.ts.map +1 -0
- package/dist/core/binding/rules/inferFromPath.js +9 -0
- package/dist/core/binding/rules/inferFromPath.js.map +1 -0
- package/dist/core/binding/rules/wrappers.d.ts +2 -0
- package/dist/core/binding/rules/wrappers.d.ts.map +1 -0
- package/dist/core/binding/rules/wrappers.js +3 -0
- package/dist/core/binding/rules/wrappers.js.map +1 -0
- package/dist/core/errors/http-error.d.ts +9 -0
- package/dist/core/errors/http-error.d.ts.map +1 -0
- package/dist/core/errors/http-error.js +17 -0
- package/dist/core/errors/http-error.js.map +1 -0
- package/dist/core/errors/index.d.ts +4 -0
- package/dist/core/errors/index.d.ts.map +1 -0
- package/dist/core/errors/index.js +4 -0
- package/dist/core/errors/index.js.map +1 -0
- package/dist/core/errors/problem.d.ts +3 -0
- package/dist/core/errors/problem.d.ts.map +1 -0
- package/dist/core/errors/problem.js +33 -0
- package/dist/core/errors/problem.js.map +1 -0
- package/dist/core/errors/validation-error.d.ts +8 -0
- package/dist/core/errors/validation-error.d.ts.map +1 -0
- package/dist/core/errors/validation-error.js +17 -0
- package/dist/core/errors/validation-error.js.map +1 -0
- package/dist/core/openapi/buildOpenApi.d.ts +14 -0
- package/dist/core/openapi/buildOpenApi.d.ts.map +1 -0
- package/dist/core/openapi/buildOpenApi.js +134 -0
- package/dist/core/openapi/buildOpenApi.js.map +1 -0
- package/dist/core/openapi/index.d.ts +2 -0
- package/dist/core/openapi/index.d.ts.map +1 -0
- package/dist/core/openapi/index.js +2 -0
- package/dist/core/openapi/index.js.map +1 -0
- package/dist/core/openapi/schema/formats.d.ts +2 -0
- package/dist/core/openapi/schema/formats.d.ts.map +1 -0
- package/dist/core/openapi/schema/formats.js +3 -0
- package/dist/core/openapi/schema/formats.js.map +1 -0
- package/dist/core/openapi/schema/registry.d.ts +9 -0
- package/dist/core/openapi/schema/registry.d.ts.map +1 -0
- package/dist/core/openapi/schema/registry.js +21 -0
- package/dist/core/openapi/schema/registry.js.map +1 -0
- package/dist/core/openapi/schema/schemaModel.d.ts +2 -0
- package/dist/core/openapi/schema/schemaModel.d.ts.map +1 -0
- package/dist/core/openapi/schema/schemaModel.js +3 -0
- package/dist/core/openapi/schema/schemaModel.js.map +1 -0
- package/dist/core/openapi/schema/schemaRegistry.d.ts +2 -0
- package/dist/core/openapi/schema/schemaRegistry.d.ts.map +1 -0
- package/dist/core/openapi/schema/schemaRegistry.js +3 -0
- package/dist/core/openapi/schema/schemaRegistry.js.map +1 -0
- package/dist/core/openapi/schema/toOpenApi.d.ts +4 -0
- package/dist/core/openapi/schema/toOpenApi.d.ts.map +1 -0
- package/dist/core/openapi/schema/toOpenApi.js +82 -0
- package/dist/core/openapi/schema/toOpenApi.js.map +1 -0
- package/dist/core/pipeline/compose.d.ts +2 -0
- package/dist/core/pipeline/compose.d.ts.map +1 -0
- package/dist/core/pipeline/compose.js +3 -0
- package/dist/core/pipeline/compose.js.map +1 -0
- package/dist/core/pipeline/errorMap.d.ts +2 -0
- package/dist/core/pipeline/errorMap.d.ts.map +1 -0
- package/dist/core/pipeline/errorMap.js +3 -0
- package/dist/core/pipeline/errorMap.js.map +1 -0
- package/dist/core/pipeline/invoke.d.ts +2 -0
- package/dist/core/pipeline/invoke.d.ts.map +1 -0
- package/dist/core/pipeline/invoke.js +3 -0
- package/dist/core/pipeline/invoke.js.map +1 -0
- package/dist/core/pipeline/result.d.ts +2 -0
- package/dist/core/pipeline/result.d.ts.map +1 -0
- package/dist/core/pipeline/result.js +3 -0
- package/dist/core/pipeline/result.js.map +1 -0
- package/dist/core/registry/buildRegistry.d.ts +3 -0
- package/dist/core/registry/buildRegistry.d.ts.map +1 -0
- package/dist/core/registry/buildRegistry.js +61 -0
- package/dist/core/registry/buildRegistry.js.map +1 -0
- package/dist/core/registry/conflicts.d.ts +6 -0
- package/dist/core/registry/conflicts.d.ts.map +1 -0
- package/dist/core/registry/conflicts.js +21 -0
- package/dist/core/registry/conflicts.js.map +1 -0
- package/dist/core/registry/index.d.ts +5 -0
- package/dist/core/registry/index.d.ts.map +1 -0
- package/dist/core/registry/index.js +5 -0
- package/dist/core/registry/index.js.map +1 -0
- package/dist/core/registry/normalize.d.ts +3 -0
- package/dist/core/registry/normalize.d.ts.map +1 -0
- package/dist/core/registry/normalize.js +24 -0
- package/dist/core/registry/normalize.js.map +1 -0
- package/dist/core/registry/types.d.ts +32 -0
- package/dist/core/registry/types.d.ts.map +1 -0
- package/dist/core/registry/types.js +2 -0
- package/dist/core/registry/types.js.map +1 -0
- package/dist/core/reply/index.d.ts +3 -0
- package/dist/core/reply/index.d.ts.map +1 -0
- package/dist/core/reply/index.js +3 -0
- package/dist/core/reply/index.js.map +1 -0
- package/dist/core/reply/reply.d.ts +8 -0
- package/dist/core/reply/reply.d.ts.map +1 -0
- package/dist/core/reply/reply.js +18 -0
- package/dist/core/reply/reply.js.map +1 -0
- package/dist/core/reply/typed.d.ts +27 -0
- package/dist/core/reply/typed.d.ts.map +1 -0
- package/dist/core/reply/typed.js +19 -0
- package/dist/core/reply/typed.js.map +1 -0
- package/dist/core/responses/helpers.d.ts +10 -0
- package/dist/core/responses/helpers.d.ts.map +1 -0
- package/dist/core/responses/helpers.js +8 -0
- package/dist/core/responses/helpers.js.map +1 -0
- package/dist/core/responses/index.d.ts +4 -0
- package/dist/core/responses/index.d.ts.map +1 -0
- package/dist/core/responses/index.js +4 -0
- package/dist/core/responses/index.js.map +1 -0
- package/dist/core/responses/normalize.d.ts +3 -0
- package/dist/core/responses/normalize.d.ts.map +1 -0
- package/dist/core/responses/normalize.js +32 -0
- package/dist/core/responses/normalize.js.map +1 -0
- package/dist/core/responses/pickStatus.d.ts +3 -0
- package/dist/core/responses/pickStatus.d.ts.map +1 -0
- package/dist/core/responses/pickStatus.js +27 -0
- package/dist/core/responses/pickStatus.js.map +1 -0
- package/dist/core/route/defineRoute.d.ts +27 -0
- package/dist/core/route/defineRoute.d.ts.map +1 -0
- package/dist/core/route/defineRoute.js +18 -0
- package/dist/core/route/defineRoute.js.map +1 -0
- package/dist/core/route/index.d.ts +2 -0
- package/dist/core/route/index.d.ts.map +1 -0
- package/dist/core/route/index.js +2 -0
- package/dist/core/route/index.js.map +1 -0
- package/dist/core/serialization/json.d.ts +2 -0
- package/dist/core/serialization/json.d.ts.map +1 -0
- package/dist/core/serialization/json.js +3 -0
- package/dist/core/serialization/json.js.map +1 -0
- package/dist/core/typing/path-params.d.ts +2 -0
- package/dist/core/typing/path-params.d.ts.map +1 -0
- package/dist/core/typing/path-params.js +2 -0
- package/dist/core/typing/path-params.js.map +1 -0
- package/dist/decorators/binding.d.ts +9 -0
- package/dist/decorators/binding.d.ts.map +1 -0
- package/dist/decorators/binding.js +18 -0
- package/dist/decorators/binding.js.map +1 -0
- package/dist/decorators/controller.d.ts +6 -0
- package/dist/decorators/controller.d.ts.map +1 -0
- package/dist/decorators/controller.js +26 -0
- package/dist/decorators/controller.js.map +1 -0
- package/dist/decorators/db.d.ts +2 -0
- package/dist/decorators/db.d.ts.map +1 -0
- package/dist/decorators/db.js +3 -0
- package/dist/decorators/db.js.map +1 -0
- package/dist/decorators/docs.d.ts +2 -0
- package/dist/decorators/docs.d.ts.map +1 -0
- package/dist/decorators/docs.js +3 -0
- package/dist/decorators/docs.js.map +1 -0
- package/dist/decorators/index.d.ts +4 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/index.js +4 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/decorators/methods.d.ts +24 -0
- package/dist/decorators/methods.d.ts.map +1 -0
- package/dist/decorators/methods.js +46 -0
- package/dist/decorators/methods.js.map +1 -0
- package/dist/decorators/middleware.d.ts +2 -0
- package/dist/decorators/middleware.d.ts.map +1 -0
- package/dist/decorators/middleware.js +3 -0
- package/dist/decorators/middleware.js.map +1 -0
- package/dist/decorators/responses.d.ts +2 -0
- package/dist/decorators/responses.d.ts.map +1 -0
- package/dist/decorators/responses.js +3 -0
- package/dist/decorators/responses.js.map +1 -0
- package/dist/decorators/security.d.ts +2 -0
- package/dist/decorators/security.d.ts.map +1 -0
- package/dist/decorators/security.js +3 -0
- package/dist/decorators/security.js.map +1 -0
- package/dist/express.d.ts +2 -0
- package/dist/express.d.ts.map +1 -0
- package/dist/express.js +2 -0
- package/dist/express.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -0
- package/dist/integrations/metal-orm/index.d.ts +2 -0
- package/dist/integrations/metal-orm/index.d.ts.map +1 -0
- package/dist/integrations/metal-orm/index.js +2 -0
- package/dist/integrations/metal-orm/index.js.map +1 -0
- package/dist/integrations/metal-orm/pagination/executePaged.d.ts +2 -0
- package/dist/integrations/metal-orm/pagination/executePaged.d.ts.map +1 -0
- package/dist/integrations/metal-orm/pagination/executePaged.js +3 -0
- package/dist/integrations/metal-orm/pagination/executePaged.js.map +1 -0
- package/dist/integrations/metal-orm/pagination/page.d.ts +2 -0
- package/dist/integrations/metal-orm/pagination/page.d.ts.map +1 -0
- package/dist/integrations/metal-orm/pagination/page.js +3 -0
- package/dist/integrations/metal-orm/pagination/page.js.map +1 -0
- package/dist/integrations/metal-orm/query/filters.d.ts +2 -0
- package/dist/integrations/metal-orm/query/filters.d.ts.map +1 -0
- package/dist/integrations/metal-orm/query/filters.js +3 -0
- package/dist/integrations/metal-orm/query/filters.js.map +1 -0
- package/dist/integrations/metal-orm/query/search.d.ts +2 -0
- package/dist/integrations/metal-orm/query/search.d.ts.map +1 -0
- package/dist/integrations/metal-orm/query/search.js +3 -0
- package/dist/integrations/metal-orm/query/search.js.map +1 -0
- package/dist/integrations/metal-orm/query/sort.d.ts +2 -0
- package/dist/integrations/metal-orm/query/sort.d.ts.map +1 -0
- package/dist/integrations/metal-orm/query/sort.js +3 -0
- package/dist/integrations/metal-orm/query/sort.js.map +1 -0
- package/dist/integrations/metal-orm/save-graph/helpers.d.ts +2 -0
- package/dist/integrations/metal-orm/save-graph/helpers.d.ts.map +1 -0
- package/dist/integrations/metal-orm/save-graph/helpers.js +3 -0
- package/dist/integrations/metal-orm/save-graph/helpers.js.map +1 -0
- package/dist/integrations/metal-orm/save-graph/types.d.ts +2 -0
- package/dist/integrations/metal-orm/save-graph/types.d.ts.map +1 -0
- package/dist/integrations/metal-orm/save-graph/types.js +3 -0
- package/dist/integrations/metal-orm/save-graph/types.js.map +1 -0
- package/dist/integrations/metal-orm/schema/column-map.d.ts +5 -0
- package/dist/integrations/metal-orm/schema/column-map.d.ts.map +1 -0
- package/dist/integrations/metal-orm/schema/column-map.js +80 -0
- package/dist/integrations/metal-orm/schema/column-map.js.map +1 -0
- package/dist/integrations/metal-orm/schema/ddl.d.ts +2 -0
- package/dist/integrations/metal-orm/schema/ddl.d.ts.map +1 -0
- package/dist/integrations/metal-orm/schema/ddl.js +3 -0
- package/dist/integrations/metal-orm/schema/ddl.js.map +1 -0
- package/dist/integrations/metal-orm/schema/dto.d.ts +7 -0
- package/dist/integrations/metal-orm/schema/dto.d.ts.map +1 -0
- package/dist/integrations/metal-orm/schema/dto.js +34 -0
- package/dist/integrations/metal-orm/schema/dto.js.map +1 -0
- package/dist/integrations/metal-orm/schema/entity.d.ts +17 -0
- package/dist/integrations/metal-orm/schema/entity.d.ts.map +1 -0
- package/dist/integrations/metal-orm/schema/entity.js +27 -0
- package/dist/integrations/metal-orm/schema/entity.js.map +1 -0
- package/dist/integrations/metal-orm/schema/filters.d.ts +11 -0
- package/dist/integrations/metal-orm/schema/filters.d.ts.map +1 -0
- package/dist/integrations/metal-orm/schema/filters.js +20 -0
- package/dist/integrations/metal-orm/schema/filters.js.map +1 -0
- package/dist/integrations/metal-orm/schema/index.d.ts +5 -0
- package/dist/integrations/metal-orm/schema/index.d.ts.map +1 -0
- package/dist/integrations/metal-orm/schema/index.js +5 -0
- package/dist/integrations/metal-orm/schema/index.js.map +1 -0
- package/dist/integrations/metal-orm/schema/openapi/entityToSchema.d.ts +2 -0
- package/dist/integrations/metal-orm/schema/openapi/entityToSchema.d.ts.map +1 -0
- package/dist/integrations/metal-orm/schema/openapi/entityToSchema.js +3 -0
- package/dist/integrations/metal-orm/schema/openapi/entityToSchema.js.map +1 -0
- package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.d.ts +2 -0
- package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.d.ts.map +1 -0
- package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.js +3 -0
- package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.js.map +1 -0
- package/dist/integrations/metal-orm/schema/sqlite.d.ts +2 -0
- package/dist/integrations/metal-orm/schema/sqlite.d.ts.map +1 -0
- package/dist/integrations/metal-orm/schema/sqlite.js +3 -0
- package/dist/integrations/metal-orm/schema/sqlite.js.map +1 -0
- package/dist/integrations/metal-orm/schema/tabledef.d.ts +4 -0
- package/dist/integrations/metal-orm/schema/tabledef.d.ts.map +1 -0
- package/dist/integrations/metal-orm/schema/tabledef.js +10 -0
- package/dist/integrations/metal-orm/schema/tabledef.js.map +1 -0
- package/dist/integrations/metal-orm/schema/types.d.ts +7 -0
- package/dist/integrations/metal-orm/schema/types.d.ts.map +1 -0
- package/dist/integrations/metal-orm/schema/types.js +2 -0
- package/dist/integrations/metal-orm/schema/types.js.map +1 -0
- package/dist/integrations/metal-orm/serialization/entitySerializer.d.ts +2 -0
- package/dist/integrations/metal-orm/serialization/entitySerializer.d.ts.map +1 -0
- package/dist/integrations/metal-orm/serialization/entitySerializer.js +3 -0
- package/dist/integrations/metal-orm/serialization/entitySerializer.js.map +1 -0
- package/dist/integrations/metal-orm/serialization/relationPolicy.d.ts +2 -0
- package/dist/integrations/metal-orm/serialization/relationPolicy.d.ts.map +1 -0
- package/dist/integrations/metal-orm/serialization/relationPolicy.js +3 -0
- package/dist/integrations/metal-orm/serialization/relationPolicy.js.map +1 -0
- package/dist/integrations/metal-orm/session/context.d.ts +2 -0
- package/dist/integrations/metal-orm/session/context.d.ts.map +1 -0
- package/dist/integrations/metal-orm/session/context.js +3 -0
- package/dist/integrations/metal-orm/session/context.js.map +1 -0
- package/dist/integrations/metal-orm/session/middleware.d.ts +2 -0
- package/dist/integrations/metal-orm/session/middleware.d.ts.map +1 -0
- package/dist/integrations/metal-orm/session/middleware.js +3 -0
- package/dist/integrations/metal-orm/session/middleware.js.map +1 -0
- package/dist/integrations/metal-orm/session/transaction.d.ts +2 -0
- package/dist/integrations/metal-orm/session/transaction.d.ts.map +1 -0
- package/dist/integrations/metal-orm/session/transaction.js +3 -0
- package/dist/integrations/metal-orm/session/transaction.js.map +1 -0
- package/dist/integrations/metal-orm/testing/setupSchema.d.ts +2 -0
- package/dist/integrations/metal-orm/testing/setupSchema.d.ts.map +1 -0
- package/dist/integrations/metal-orm/testing/setupSchema.js +3 -0
- package/dist/integrations/metal-orm/testing/setupSchema.js.map +1 -0
- package/dist/integrations/metal-orm/testing/sqliteMemory.d.ts +2 -0
- package/dist/integrations/metal-orm/testing/sqliteMemory.d.ts.map +1 -0
- package/dist/integrations/metal-orm/testing/sqliteMemory.js +3 -0
- package/dist/integrations/metal-orm/testing/sqliteMemory.js.map +1 -0
- package/dist/metadata/bag.d.ts +17 -0
- package/dist/metadata/bag.d.ts.map +1 -0
- package/dist/metadata/bag.js +38 -0
- package/dist/metadata/bag.js.map +1 -0
- package/dist/metadata/index.d.ts +4 -0
- package/dist/metadata/index.d.ts.map +1 -0
- package/dist/metadata/index.js +4 -0
- package/dist/metadata/index.js.map +1 -0
- package/dist/metadata/keys.d.ts +52 -0
- package/dist/metadata/keys.d.ts.map +1 -0
- package/dist/metadata/keys.js +29 -0
- package/dist/metadata/keys.js.map +1 -0
- package/dist/metadata/merge.d.ts +9 -0
- package/dist/metadata/merge.d.ts.map +1 -0
- package/dist/metadata/merge.js +27 -0
- package/dist/metadata/merge.js.map +1 -0
- package/dist/metal-orm.d.ts +2 -0
- package/dist/metal-orm.d.ts.map +1 -0
- package/dist/metal-orm.js +2 -0
- package/dist/metal-orm.js.map +1 -0
- package/dist/validation/native/index.d.ts +3 -0
- package/dist/validation/native/index.d.ts.map +1 -0
- package/dist/validation/native/index.js +3 -0
- package/dist/validation/native/index.js.map +1 -0
- package/dist/validation/native/ir.d.ts +38 -0
- package/dist/validation/native/ir.d.ts.map +1 -0
- package/dist/validation/native/ir.js +2 -0
- package/dist/validation/native/ir.js.map +1 -0
- package/dist/validation/native/schema.d.ts +63 -0
- package/dist/validation/native/schema.d.ts.map +1 -0
- package/dist/validation/native/schema.js +271 -0
- package/dist/validation/native/schema.js.map +1 -0
- package/dist/validation/native/validator.d.ts +21 -0
- package/dist/validation/native/validator.d.ts.map +1 -0
- package/dist/validation/native/validator.js +48 -0
- package/dist/validation/native/validator.js.map +1 -0
- package/package.json +53 -34
- package/dist/cli/generate-routes.js +0 -101
- package/dist/cli/generate-swagger.js +0 -197
- package/dist/controllers/advanced.controller.js +0 -131
- package/dist/controllers/user.controller.js +0 -121
- package/dist/entities/user.entity.js +0 -1
- package/dist/lib/common.js +0 -62
- package/dist/lib/decorators.js +0 -116
- package/dist/middleware/auth.middleware.js +0 -13
- package/dist/routes.js +0 -80
- package/dist/server.js +0 -18
- package/dist/src/cli/generate-routes.js +0 -105
- package/dist/src/cli/generate-swagger.js +0 -197
- package/dist/src/index.js +0 -4
- package/dist/src/lib/common.js +0 -62
- package/dist/src/lib/decorators.js +0 -116
- package/dist/src/routes.js +0 -80
- package/dist/src/server.js +0 -18
- package/dist/tests/example-app/controllers/advanced.controller.js +0 -130
- package/dist/tests/example-app/controllers/controllers/advanced.controller.js +0 -131
- package/dist/tests/example-app/controllers/controllers/user.controller.js +0 -121
- package/dist/tests/example-app/controllers/user.controller.js +0 -121
- package/dist/tests/example-app/entities/entities/user.entity.js +0 -1
- package/dist/tests/example-app/entities/user.entity.js +0 -1
- package/dist/tests/example-app/middleware/auth.middleware.js +0 -13
- package/dist/tests/example-app/middleware/middleware/auth.middleware.js +0 -13
- package/dist/tests/example-app/routes.js +0 -80
- package/dist/tests/example-app/server.js +0 -23
- package/scripts/run-example.js +0 -32
- package/src/cli/generate-routes.ts +0 -123
- package/src/cli/generate-swagger.ts +0 -216
- package/src/index.js +0 -20
- package/src/index.ts +0 -4
- package/src/lib/common.js +0 -68
- package/src/lib/common.ts +0 -35
- package/src/lib/decorators.js +0 -128
- package/src/lib/decorators.ts +0 -136
- package/swagger.json +0 -238
- package/tests/e2e.test.ts +0 -72
- package/tests/example-app/controllers/advanced.controller.ts +0 -52
- package/tests/example-app/controllers/user.controller.ts +0 -35
- package/tests/example-app/entities/user.entity.ts +0 -8
- package/tests/example-app/middleware/auth.middleware.ts +0 -16
- package/tests/example-app/routes.ts +0 -102
- package/tests/example-app/server.ts +0 -30
- package/tests/generators.test.ts +0 -48
- package/tests/utils.ts +0 -46
- package/tsconfig.json +0 -20
package/README.md
CHANGED
|
@@ -1,249 +1,51 @@
|
|
|
1
|
-
# Adorn API
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
This generates:
|
|
55
|
-
- `swagger.json` - OpenAPI 3.0 specification
|
|
56
|
-
- `src/routes.ts` - Express route handlers
|
|
57
|
-
|
|
58
|
-
### 3. Start Your Server
|
|
59
|
-
|
|
60
|
-
```typescript
|
|
61
|
-
// src/server.ts
|
|
62
|
-
import express from "express";
|
|
63
|
-
import { RegisterRoutes } from "./routes.js";
|
|
64
|
-
|
|
65
|
-
const app = express();
|
|
66
|
-
app.use(express.json());
|
|
67
|
-
|
|
68
|
-
RegisterRoutes(app);
|
|
69
|
-
|
|
70
|
-
app.listen(3000, () => {
|
|
71
|
-
console.log("Server running on http://localhost:3000");
|
|
72
|
-
});
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
Visit http://localhost:3000/docs to see your Swagger UI.
|
|
76
|
-
|
|
77
|
-
## Advanced Usage
|
|
78
|
-
|
|
79
|
-
### Inheritance & Generics
|
|
80
|
-
|
|
81
|
-
```typescript
|
|
82
|
-
import { PaginationQuery, EntityResponse, CreateInput } from "../lib/common.js";
|
|
83
|
-
|
|
84
|
-
// Inherit pagination properties
|
|
85
|
-
class UserListRequest extends PaginationQuery {
|
|
86
|
-
search?: string;
|
|
87
|
-
|
|
88
|
-
@FromPath()
|
|
89
|
-
tenantId!: string;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Use generic type helpers
|
|
93
|
-
class CreateUserDto implements CreateInput<User, 'name' | 'email'> {
|
|
94
|
-
@FromBody()
|
|
95
|
-
name!: string;
|
|
96
|
-
|
|
97
|
-
@FromBody()
|
|
98
|
-
email!: string;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
@Controller("advanced")
|
|
102
|
-
export class AdvancedController {
|
|
103
|
-
@Get("/{tenantId}/users")
|
|
104
|
-
public async listUsers(req: UserListRequest): Promise<EntityResponse<User[]>> {
|
|
105
|
-
return [/* ... */];
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Authentication
|
|
111
|
-
|
|
112
|
-
```typescript
|
|
113
|
-
import { Authorized } from "../lib/decorators.js";
|
|
114
|
-
|
|
115
|
-
@Controller("profile")
|
|
116
|
-
export class ProfileController {
|
|
117
|
-
@Authorized("admin")
|
|
118
|
-
@Post("/update")
|
|
119
|
-
public async update(req: UpdateProfileDto) {
|
|
120
|
-
// Only accessible with valid Bearer token
|
|
121
|
-
return { success: true };
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
## Project Structure
|
|
127
|
-
|
|
128
|
-
```
|
|
129
|
-
adorn-api/
|
|
130
|
-
├── src/
|
|
131
|
-
│ ├── lib/
|
|
132
|
-
│ │ ├── decorators.ts # Standard decorators (@Get, @Post, @Controller, etc.)
|
|
133
|
-
│ │ └── common.ts # Common types (PaginationQuery, EntityResponse, etc.)
|
|
134
|
-
│ ├── cli/
|
|
135
|
-
│ │ ├── generate-swagger.ts # Swagger/OpenAPI generator
|
|
136
|
-
│ │ └── generate-routes.ts # Express route generator
|
|
137
|
-
│ └── index.ts # Main library entry point
|
|
138
|
-
├── tests/
|
|
139
|
-
│ └── example-app/ # Example application using adorn-api
|
|
140
|
-
│ ├── controllers/ # Example controllers
|
|
141
|
-
│ ├── entities/ # Example entities
|
|
142
|
-
│ ├── middleware/ # Example middleware
|
|
143
|
-
│ ├── routes.ts # Generated routes (auto-generated)
|
|
144
|
-
│ └── server.ts # Example Express server
|
|
145
|
-
├── swagger.json # Generated OpenAPI spec
|
|
146
|
-
└── package.json
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
## Development
|
|
150
|
-
|
|
151
|
-
### Available Scripts
|
|
152
|
-
|
|
153
|
-
- `npm run build` - Compile TypeScript to JavaScript
|
|
154
|
-
- `npm run gen:spec` - Generate Swagger documentation only
|
|
155
|
-
- `npm run gen:routes` - Generate Express routes only
|
|
156
|
-
- `npm run gen` - Generate both Swagger and routes
|
|
157
|
-
- `npm run example` - Run the example application
|
|
158
|
-
|
|
159
|
-
### Testing the Library
|
|
160
|
-
|
|
161
|
-
```bash
|
|
162
|
-
# Generate from example app
|
|
163
|
-
npm run gen
|
|
164
|
-
|
|
165
|
-
# Run the example server
|
|
166
|
-
npm run example
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
## How It Works
|
|
170
|
-
|
|
171
|
-
### 1. Decorators (src/lib/decorators.ts)
|
|
172
|
-
|
|
173
|
-
Uses **Standard TC39 Decorators** with `context.addInitializer()` to attach metadata:
|
|
174
|
-
|
|
175
|
-
```typescript
|
|
176
|
-
export function Get(path: string) {
|
|
177
|
-
return function (originalMethod: any, context: ClassMethodDecoratorContext) {
|
|
178
|
-
context.addInitializer(function () {
|
|
179
|
-
// Store route metadata
|
|
180
|
-
const routes = (this as any)[META_KEY] || [];
|
|
181
|
-
routes.push({ method: 'get', path, methodName: String(context.name) });
|
|
182
|
-
(this as any)[META_KEY] = routes;
|
|
183
|
-
});
|
|
184
|
-
return originalMethod;
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
### 2. Swagger Generator (src/cli/generate-swagger.ts)
|
|
190
|
-
|
|
191
|
-
Uses **ts-morph** to statically analyze TypeScript code:
|
|
192
|
-
|
|
193
|
-
- Parses `@Controller` and `@Get`/`@Post` decorators
|
|
194
|
-
- Resolves DTO types including inheritance and generics
|
|
195
|
-
- Converts TypeScript types to JSON Schema
|
|
196
|
-
- Handles union types (enums), nested objects, and Promise unwrapping
|
|
197
|
-
- Generates OpenAPI 3.0 specification
|
|
198
|
-
|
|
199
|
-
### 3. Route Generator (src/cli/generate-routes.ts)
|
|
200
|
-
|
|
201
|
-
Generates actual Express route handlers:
|
|
202
|
-
|
|
203
|
-
```typescript
|
|
204
|
-
// Generated code in src/routes.ts
|
|
205
|
-
app.get('/users/:userId', async (req: Request, res: Response) => {
|
|
206
|
-
const controller = new UserController();
|
|
207
|
-
const input: any = {};
|
|
208
|
-
Object.assign(input, req.query);
|
|
209
|
-
Object.assign(input, req.params);
|
|
210
|
-
Object.assign(input, req.body);
|
|
211
|
-
|
|
212
|
-
const response = await controller.getUser(input);
|
|
213
|
-
res.status(200).json(response);
|
|
214
|
-
});
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
## Why Standard Decorators?
|
|
218
|
-
|
|
219
|
-
1. **Future-Proof**: Uses the official TC39 decorator proposal (Stage 3)
|
|
220
|
-
2. **No Experimental Flags**: Works with `"experimentalDecorators": false`
|
|
221
|
-
3. **Better Type Safety**: Leverages TypeScript's type system instead of runtime reflection
|
|
222
|
-
4. **Cleaner API**: Single-parameter DTO pattern is more explicit than parameter decorators
|
|
223
|
-
|
|
224
|
-
## Comparison with tsoa
|
|
225
|
-
|
|
226
|
-
| Feature | tsoa (Legacy) | adorn-api |
|
|
227
|
-
|---------|---------------|-----------|
|
|
228
|
-
| Decorators | Experimental (`emitDecoratorMetadata`) | Standard TC39 |
|
|
229
|
-
| Parameter Decorators | `@Body() body: string` | DTO classes with `@FromBody()` |
|
|
230
|
-
| Type Safety | Runtime reflection | Edit-time type checking |
|
|
231
|
-
| Inheritance | Limited | Full support |
|
|
232
|
-
| Generics | Complex | Native TypeScript |
|
|
233
|
-
| Future Compatibility | Deprecated in future TS | Officially supported |
|
|
234
|
-
|
|
235
|
-
## Next Steps
|
|
236
|
-
|
|
237
|
-
To make this production-ready:
|
|
238
|
-
|
|
239
|
-
1. **Validation**: Integrate Zod or class-validator in the route generator
|
|
240
|
-
2. **Error Handling**: Add centralized error handling middleware
|
|
241
|
-
3. **Database Integration**: Add ORM support (Prisma, TypeORM, etc.)
|
|
242
|
-
4. **Testing**: Add unit and integration test utilities
|
|
243
|
-
5. **CORS**: Add CORS configuration
|
|
244
|
-
6. **Rate Limiting**: Add rate limiting middleware
|
|
245
|
-
7. **Logging**: Add structured logging (Winston, Pino)
|
|
246
|
-
|
|
247
|
-
## License
|
|
248
|
-
|
|
249
|
-
ISC
|
|
1
|
+
# Adorn API
|
|
2
|
+
Adorn API turns TypeScript classes into HTTP controllers with Stage-3 decorators, then wires Express routes, validation, and OpenAPI docs from the same metadata. It stays small and focused while still supporting MetalORM-backed persistence when you want it.
|
|
3
|
+
|
|
4
|
+
## Why Adorn API
|
|
5
|
+
- One source of truth: decorators and schemas drive routing, validation, and OpenAPI.
|
|
6
|
+
- Express-native by default, without locking you into a large framework.
|
|
7
|
+
- MetalORM helpers keep DTOs, filters, and entities in sync.
|
|
8
|
+
- Test-first ergonomics with clear e2e coverage of the runtime wiring.
|
|
9
|
+
|
|
10
|
+
## Features
|
|
11
|
+
- Controller decorators (`@Controller`, `@Get`, `@Post`, etc.) backed by a registry/router that mounts on Express.
|
|
12
|
+
- Built-in OpenAPI generator with optional Swagger UI serving through the Express adapter.
|
|
13
|
+
- MetalORM helpers (`entityDto`, `filtersFromEntity`, `tableDefOf`) to reuse entity metadata for payload validation and database filtering.
|
|
14
|
+
- End-to-end coverage for both direct API handlers and MetalORM REST routes using Vitest + Supertest.
|
|
15
|
+
|
|
16
|
+
For detailed writeups of each feature, see the companion guides under `docs/`.
|
|
17
|
+
|
|
18
|
+
## Requirements
|
|
19
|
+
- Node.js v18+
|
|
20
|
+
- SQLite (only for in-memory tests; runtime persistence is pluggable via MetalORM executors)
|
|
21
|
+
|
|
22
|
+
## Getting started
|
|
23
|
+
1. `npm install` to pull runtime and dev dependencies (Express, MetalORM, Vitest).
|
|
24
|
+
2. `npm run build` to compile the TypeScript sources into `dist/`.
|
|
25
|
+
3. `npm run test` to run the full Vitest suite (unit + integration/e2e tests).
|
|
26
|
+
|
|
27
|
+
For quick feedback on a single spec file: `npm run test -- test/e2e/metal-orm.adorn-api.rest.spec.ts`.
|
|
28
|
+
|
|
29
|
+
## Scripts
|
|
30
|
+
- `npm run clean`: removes the `dist` directory.
|
|
31
|
+
- `npm run build`: transpiles `src/**/*.ts` via the `tsconfig.build.json` bundle target.
|
|
32
|
+
- `npm run typecheck`: runs `tsc` with strict settings against `src` + `test`.
|
|
33
|
+
- `npm run check`: runs the decorated-return contract check plus the test suite.
|
|
34
|
+
- `npm run test` / `npm run test:e2e`: run the entire Vitest suite or just the e2e directory.
|
|
35
|
+
|
|
36
|
+
## MetalORM integration
|
|
37
|
+
- Controllers create `OrmSession` instances with a shared in-memory SQLite executor for tests.
|
|
38
|
+
- DTOs and filter schemas derive directly from `metal-orm` entity definitions via helpers in `src/integrations/metal-orm/schema`.
|
|
39
|
+
- The REST controller examples show how to load entities via `selectFromEntity`, update tracked instances, and rely on `OrmSession` flush/commit semantics without manually writing SQL.
|
|
40
|
+
|
|
41
|
+
Learn more about MetalORM on npm: https://www.npmjs.com/package/metal-orm
|
|
42
|
+
|
|
43
|
+
## Project layout
|
|
44
|
+
- `src/`: exports glue code (`express`, `metal-orm`, validation helpers, adapters).
|
|
45
|
+
- `test/e2e/`: Vitest suites exercising the Express and MetalORM API surface.
|
|
46
|
+
- `src/types/metal-orm.d.ts`: local type definitions used while the shared MetalORM package upgrades.
|
|
47
|
+
|
|
48
|
+
## Next steps
|
|
49
|
+
1. Add real decorators and metadata for your domain models under `src`.
|
|
50
|
+
2. Extend `src/adapters/express` to add middleware or transports as needed.
|
|
51
|
+
3. Hook a persistent MetalORM executor when moving beyond the in-memory SQLite setup used in tests.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type Express } from 'express';
|
|
2
|
+
import type { ControllerCtor } from '../../core/registry/types.js';
|
|
3
|
+
import type { Validator } from '../../contracts/validator.js';
|
|
4
|
+
import { type ApplyRoutesOptions } from './router.js';
|
|
5
|
+
import type { OpenApiBuildOptions } from '../../core/openapi/buildOpenApi.js';
|
|
6
|
+
export type CreateAdornExpressAppOptions = ApplyRoutesOptions & {
|
|
7
|
+
controllers: ControllerCtor[];
|
|
8
|
+
mountPath?: string;
|
|
9
|
+
jsonBodyParser?: boolean;
|
|
10
|
+
validator?: Validator;
|
|
11
|
+
openapi?: (OpenApiBuildOptions & {
|
|
12
|
+
enabled?: boolean;
|
|
13
|
+
jsonPath?: string;
|
|
14
|
+
docsPath?: string;
|
|
15
|
+
swaggerUi?: boolean;
|
|
16
|
+
swaggerUiConfig?: Record<string, unknown>;
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
export declare function createAdornExpressApp(options: CreateAdornExpressAppOptions): Express;
|
|
20
|
+
//# sourceMappingURL=createApp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createApp.d.ts","sourceRoot":"","sources":["../../../src/adapters/express/createApp.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAgC,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAG9E,MAAM,MAAM,4BAA4B,GAAG,kBAAkB,GAAG;IAC9D,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB,OAAO,CAAC,EAAE,CAAC,mBAAmB,GAAG;QAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC3C,CAAC,CAAC;CACJ,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAyCpF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import express, {} from 'express';
|
|
2
|
+
import { buildRegistry } from '../../core/registry/buildRegistry.js';
|
|
3
|
+
import { applyRegistryToExpressRouter } from './router.js';
|
|
4
|
+
import { adornErrorHandler } from './middleware/errorHandler.js';
|
|
5
|
+
import { serveOpenApi } from './swagger/serve.js';
|
|
6
|
+
export function createAdornExpressApp(options) {
|
|
7
|
+
const app = express();
|
|
8
|
+
if (options.jsonBodyParser ?? true) {
|
|
9
|
+
app.use(express.json());
|
|
10
|
+
}
|
|
11
|
+
const registry = buildRegistry(options.controllers);
|
|
12
|
+
const router = express.Router();
|
|
13
|
+
applyRegistryToExpressRouter(router, registry, options);
|
|
14
|
+
const oa = options.openapi;
|
|
15
|
+
if (oa?.enabled ?? true) {
|
|
16
|
+
if (oa?.title && oa?.version) {
|
|
17
|
+
const openApiOptions = {
|
|
18
|
+
title: oa.title,
|
|
19
|
+
version: oa.version,
|
|
20
|
+
...(oa.servers !== undefined ? { servers: oa.servers } : {}),
|
|
21
|
+
};
|
|
22
|
+
const serveOptions = {
|
|
23
|
+
...(oa.jsonPath !== undefined ? { jsonPath: oa.jsonPath } : {}),
|
|
24
|
+
...(oa.docsPath !== undefined ? { docsPath: oa.docsPath } : {}),
|
|
25
|
+
...(oa.swaggerUi !== undefined ? { swaggerUi: oa.swaggerUi } : {}),
|
|
26
|
+
...(oa.swaggerUiConfig !== undefined ? { swaggerUiConfig: oa.swaggerUiConfig } : {}),
|
|
27
|
+
};
|
|
28
|
+
router.use(serveOpenApi(registry, openApiOptions, serveOptions));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
app.use(options.mountPath ?? '/', router);
|
|
32
|
+
app.use(adornErrorHandler);
|
|
33
|
+
return app;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=createApp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createApp.js","sourceRoot":"","sources":["../../../src/adapters/express/createApp.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAgB,MAAM,SAAS,CAAC;AAGhD,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAA2B,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAiBlD,MAAM,UAAU,qBAAqB,CAAC,OAAqC;IACzE,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IAEtB,IAAI,OAAO,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;QACnC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAEpD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAChC,4BAA4B,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAExD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAC3B,IAAI,EAAE,EAAE,OAAO,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC;YAC7B,MAAM,cAAc,GAAwB;gBAC1C,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,OAAO,EAAE,EAAE,CAAC,OAAO;gBACnB,GAAG,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7D,CAAC;YACF,MAAM,YAAY,GAAG;gBACnB,GAAG,CAAC,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/D,GAAG,CAAC,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/D,GAAG,CAAC,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClE,GAAG,CAAC,EAAE,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrF,CAAC;YAEF,MAAM,CAAC,GAAG,CACR,YAAY,CACV,QAAQ,EACR,cAAc,EACd,YAAY,CACb,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1C,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAE3B,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './createApp.js';
|
|
2
|
+
export * from './router.js';
|
|
3
|
+
export * from './transport/request.js';
|
|
4
|
+
export * from './transport/response.js';
|
|
5
|
+
export * from './middleware/errorHandler.js';
|
|
6
|
+
export * from './swagger/index.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/express/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './createApp.js';
|
|
2
|
+
export * from './router.js';
|
|
3
|
+
export * from './transport/request.js';
|
|
4
|
+
export * from './transport/response.js';
|
|
5
|
+
export * from './middleware/errorHandler.js';
|
|
6
|
+
export * from './swagger/index.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/express/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapters/express/middleware/errorHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG/D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,QAI/F"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { toProblemDetails } from '../../../core/errors/problem.js';
|
|
2
|
+
export function adornErrorHandler(err, req, res, _next) {
|
|
3
|
+
const problem = toProblemDetails(err, req.originalUrl || req.path);
|
|
4
|
+
res.status(problem.status).json(problem);
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=errorHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../../../src/adapters/express/middleware/errorHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,MAAM,UAAU,iBAAiB,CAAC,GAAY,EAAE,GAAY,EAAE,GAAa,EAAE,KAAmB;IAC9F,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAEnE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestContext.d.ts","sourceRoot":"","sources":["../../../../src/adapters/express/middleware/requestContext.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestContext.js","sourceRoot":"","sources":["../../../../src/adapters/express/middleware/requestContext.ts"],"names":[],"mappings":";AAAA,oEAAoE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Request, Response, Router } from 'express';
|
|
2
|
+
import type { Registry, ControllerCtor } from '../../core/registry/types.js';
|
|
3
|
+
export type ControllerFactory = (ctor: ControllerCtor, req: Request, res: Response) => any;
|
|
4
|
+
export type ApplyRoutesOptions = {
|
|
5
|
+
lifecycle?: 'singleton' | 'transient';
|
|
6
|
+
controllerFactory?: ControllerFactory;
|
|
7
|
+
passContext?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare function applyRegistryToExpressRouter(router: Router, registry: Registry, opts?: ApplyRoutesOptions): void;
|
|
10
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/adapters/express/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAc,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAUzF,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,GAAG,CAAC;AAE3F,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;IACtC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAkCF,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,IAAI,GAAE,kBAAuB,GAC5B,IAAI,CAoFN"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { createExpressContext } from './transport/request.js';
|
|
2
|
+
import { sendJson, sendReply } from './transport/response.js';
|
|
3
|
+
import { bindArgs } from '../../core/binding/binder.js';
|
|
4
|
+
import { ValidationError } from '../../core/errors/validation-error.js';
|
|
5
|
+
import { isReply } from '../../contracts/reply.js';
|
|
6
|
+
import { pickSuccessStatus } from '../../core/responses/pickStatus.js';
|
|
7
|
+
function toExpressPath(template) {
|
|
8
|
+
return template.replace(/\{([^}]+)\}/g, (_m, name) => `:${String(name)}`);
|
|
9
|
+
}
|
|
10
|
+
function wrapAsync(fn) {
|
|
11
|
+
return (req, res, next) => {
|
|
12
|
+
try {
|
|
13
|
+
const p = fn(req, res, next);
|
|
14
|
+
if (p && typeof p.then === 'function')
|
|
15
|
+
p.catch(next);
|
|
16
|
+
}
|
|
17
|
+
catch (e) {
|
|
18
|
+
next(e);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function methodToExpress(router, method) {
|
|
23
|
+
switch (method) {
|
|
24
|
+
case 'GET':
|
|
25
|
+
return router.get.bind(router);
|
|
26
|
+
case 'POST':
|
|
27
|
+
return router.post.bind(router);
|
|
28
|
+
case 'PUT':
|
|
29
|
+
return router.put.bind(router);
|
|
30
|
+
case 'PATCH':
|
|
31
|
+
return router.patch.bind(router);
|
|
32
|
+
case 'DELETE':
|
|
33
|
+
return router.delete.bind(router);
|
|
34
|
+
default:
|
|
35
|
+
throw new Error(`Unsupported HTTP method: ${method}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export function applyRegistryToExpressRouter(router, registry, opts = {}) {
|
|
39
|
+
const lifecycle = opts.lifecycle ?? 'singleton';
|
|
40
|
+
const passContext = opts.passContext ?? true;
|
|
41
|
+
const singletonCache = new Map();
|
|
42
|
+
const getControllerInstance = (ctor, req, res) => {
|
|
43
|
+
if (opts.controllerFactory)
|
|
44
|
+
return opts.controllerFactory(ctor, req, res);
|
|
45
|
+
if (lifecycle === 'transient')
|
|
46
|
+
return new ctor();
|
|
47
|
+
const cached = singletonCache.get(ctor);
|
|
48
|
+
if (cached)
|
|
49
|
+
return cached;
|
|
50
|
+
const created = new ctor();
|
|
51
|
+
singletonCache.set(ctor, created);
|
|
52
|
+
return created;
|
|
53
|
+
};
|
|
54
|
+
for (const r of registry.routes) {
|
|
55
|
+
const expressPath = toExpressPath(r.fullPath);
|
|
56
|
+
const register = methodToExpress(router, r.method);
|
|
57
|
+
register(expressPath, wrapAsync(async (req, res) => {
|
|
58
|
+
const controller = getControllerInstance(r.controller, req, res);
|
|
59
|
+
const handler = controller?.[r.handlerName];
|
|
60
|
+
if (typeof handler !== 'function') {
|
|
61
|
+
throw Object.assign(new Error(`Handler not found: ${r.controller.name}.${r.handlerName}`), {
|
|
62
|
+
status: 500,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
const ctx = createExpressContext(req, res);
|
|
66
|
+
const { args, prepared } = bindArgs(r, handler, ctx, {
|
|
67
|
+
passContext,
|
|
68
|
+
coerce: 'smart',
|
|
69
|
+
csv: true,
|
|
70
|
+
});
|
|
71
|
+
const validate = r.options?.validate;
|
|
72
|
+
if (validate?.params) {
|
|
73
|
+
const res = validate.params.parse(prepared.params, ['params']);
|
|
74
|
+
if (!res.ok)
|
|
75
|
+
throw ValidationError.fromIssues(res.issues, 'Params validation failed');
|
|
76
|
+
prepared.params = res.value;
|
|
77
|
+
}
|
|
78
|
+
if (validate?.query) {
|
|
79
|
+
const res = validate.query.parse(prepared.query, ['query']);
|
|
80
|
+
if (!res.ok)
|
|
81
|
+
throw ValidationError.fromIssues(res.issues, 'Query validation failed');
|
|
82
|
+
prepared.query = res.value;
|
|
83
|
+
}
|
|
84
|
+
if (validate?.body) {
|
|
85
|
+
const res = validate.body.parse(prepared.body, ['body']);
|
|
86
|
+
if (!res.ok)
|
|
87
|
+
throw ValidationError.fromIssues(res.issues, 'Body validation failed');
|
|
88
|
+
prepared.body = res.value;
|
|
89
|
+
}
|
|
90
|
+
const result = await handler.apply(controller, args);
|
|
91
|
+
if (res.headersSent)
|
|
92
|
+
return;
|
|
93
|
+
if (isReply(result)) {
|
|
94
|
+
sendReply(res, result);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const routeOptions = (r.options ?? {});
|
|
98
|
+
const status = pickSuccessStatus(r.method, routeOptions.responses, routeOptions.successStatus);
|
|
99
|
+
sendJson(res, status, result);
|
|
100
|
+
}));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/adapters/express/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/express/swagger/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapters/express/swagger/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Router } from 'express';
|
|
2
|
+
import type { Registry } from '../../../core/registry/types.js';
|
|
3
|
+
import { type OpenApiBuildOptions } from '../../../core/openapi/buildOpenApi.js';
|
|
4
|
+
export type ServeOpenApiOptions = {
|
|
5
|
+
jsonPath?: string;
|
|
6
|
+
docsPath?: string;
|
|
7
|
+
swaggerUi?: boolean;
|
|
8
|
+
getRegistry?: () => Registry;
|
|
9
|
+
swaggerUiConfig?: Record<string, unknown>;
|
|
10
|
+
};
|
|
11
|
+
export declare function serveOpenApi(registry: Registry, buildOpts: OpenApiBuildOptions, opts?: ServeOpenApiOptions): Router;
|
|
12
|
+
//# sourceMappingURL=serve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../../src/adapters/express/swagger/serve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAGzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAE/F,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,WAAW,CAAC,EAAE,MAAM,QAAQ,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C,CAAC;AAEF,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,mBAAmB,EAC9B,IAAI,GAAE,mBAAwB,GAC7B,MAAM,CA6DR"}
|