exisjs 0.6.1 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -3
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +2 -8
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +33 -44
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/exports.d.ts.map +1 -1
- package/dist/cli/commands/exports.js +5 -32
- package/dist/cli/commands/exports.js.map +1 -1
- package/dist/cli/commands/generate.d.ts +2 -13
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +27 -60
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +4 -4
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +2 -6
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/index.js +11 -23
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/routes.d.ts.map +1 -1
- package/dist/cli/routes.js +20 -8
- package/dist/cli/routes.js.map +1 -1
- package/dist/config/config.d.ts +2 -1
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +7 -5
- package/dist/config/config.js.map +1 -1
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +3 -2
- package/dist/config/env.js.map +1 -1
- package/dist/config/types.d.ts +7 -2
- package/dist/config/types.d.ts.map +1 -1
- package/dist/decorators/constants.d.ts +9 -2
- package/dist/decorators/constants.d.ts.map +1 -1
- package/dist/decorators/constants.js +3 -2
- package/dist/decorators/constants.js.map +1 -1
- package/dist/decorators/core/metadata.d.ts +31 -0
- package/dist/decorators/core/metadata.d.ts.map +1 -1
- package/dist/decorators/core/metadata.js +110 -1
- package/dist/decorators/core/metadata.js.map +1 -1
- package/dist/decorators/core.d.ts +19 -4
- package/dist/decorators/core.d.ts.map +1 -1
- package/dist/decorators/core.js +29 -4
- package/dist/decorators/core.js.map +1 -1
- package/dist/decorators/middleware.d.ts +17 -17
- package/dist/decorators/middleware.d.ts.map +1 -1
- package/dist/decorators/middleware.js +111 -208
- package/dist/decorators/middleware.js.map +1 -1
- package/dist/decorators/params.d.ts +54 -12
- package/dist/decorators/params.d.ts.map +1 -1
- package/dist/decorators/params.js +40 -20
- package/dist/decorators/params.js.map +1 -1
- package/dist/decorators/routing.d.ts +0 -2
- package/dist/decorators/routing.d.ts.map +1 -1
- package/dist/decorators/routing.js +3 -4
- package/dist/decorators/routing.js.map +1 -1
- package/dist/di/container.d.ts +5 -1
- package/dist/di/container.d.ts.map +1 -1
- package/dist/di/container.js +56 -8
- package/dist/di/container.js.map +1 -1
- package/dist/di/decorators.d.ts +30 -0
- package/dist/di/decorators.d.ts.map +1 -0
- package/dist/di/decorators.js +59 -0
- package/dist/di/decorators.js.map +1 -0
- package/dist/di/index.d.ts +1 -0
- package/dist/di/index.d.ts.map +1 -1
- package/dist/di/index.js +4 -1
- package/dist/di/index.js.map +1 -1
- package/dist/docs/ARCHITECTURE.md +46 -285
- package/dist/docs/BENCHMARKS.md +5 -5
- package/dist/docs/README.md +8 -11
- package/dist/docs/content/boundaries.mdx +151 -0
- package/dist/docs/content/cli/commands.mdx +66 -104
- package/dist/docs/content/cli/overview.mdx +37 -47
- package/dist/docs/content/cli/usage.mdx +29 -15
- package/dist/docs/content/decorators.mdx +142 -81
- package/dist/docs/content/installation.mdx +20 -1
- package/dist/docs/content/middleware.mdx +65 -291
- package/dist/docs/content/modules.mdx +22 -1
- package/dist/docs/content/providers.mdx +33 -1
- package/dist/docs/content/security.mdx +44 -246
- package/dist/docs/content/structure.mdx +227 -100
- package/dist/docs/content/validation.mdx +0 -17
- package/dist/docs/reference/decorators.mdx +34 -216
- package/dist/docs/reference/di.mdx +35 -11
- package/dist/docs/reference/logger.mdx +100 -0
- package/dist/docs/reference/middleware.mdx +41 -217
- package/dist/docs/reference/router.mdx +9 -9
- package/dist/docs/reference/validator.mdx +2 -5
- package/dist/error/errors.d.ts.map +1 -1
- package/dist/error/errors.js +19 -5
- package/dist/error/errors.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/start-server.js +10 -0
- package/dist/lib/start-server.js.map +1 -1
- package/dist/logger/index.d.ts +81 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +142 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/middleware/dedupe.d.ts +1 -1
- package/dist/middleware/dedupe.js +1 -1
- package/dist/middleware/middleware.d.ts +3 -5
- package/dist/middleware/middleware.d.ts.map +1 -1
- package/dist/middleware/middleware.js +2 -6
- package/dist/middleware/middleware.js.map +1 -1
- package/dist/middleware/rate-limit.d.ts +0 -2
- package/dist/middleware/rate-limit.d.ts.map +1 -1
- package/dist/middleware/rate-limit.js +2 -14
- package/dist/middleware/rate-limit.js.map +1 -1
- package/dist/module/index.d.ts +2 -0
- package/dist/module/index.d.ts.map +1 -1
- package/dist/module/index.js +3 -1
- package/dist/module/index.js.map +1 -1
- package/dist/plugin/manager.d.ts +1 -1
- package/dist/plugin/manager.d.ts.map +1 -1
- package/dist/plugin/manager.js +47 -0
- package/dist/plugin/manager.js.map +1 -1
- package/dist/router/{gateway.d.ts → boundary.d.ts} +21 -13
- package/dist/router/boundary.d.ts.map +1 -0
- package/dist/router/boundary.js +11 -0
- package/dist/router/boundary.js.map +1 -0
- package/dist/router/controller-registrar.d.ts.map +1 -1
- package/dist/router/controller-registrar.js +33 -6
- package/dist/router/controller-registrar.js.map +1 -1
- package/dist/router/index.d.ts +3 -6
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +3 -7
- package/dist/router/index.js.map +1 -1
- package/dist/router/route-builder.d.ts +0 -28
- package/dist/router/route-builder.d.ts.map +1 -1
- package/dist/router/route-builder.js +2 -5
- package/dist/router/route-builder.js.map +1 -1
- package/dist/router/route-scanner.d.ts +1 -2
- package/dist/router/route-scanner.d.ts.map +1 -1
- package/dist/router/route-scanner.js +225 -203
- package/dist/router/route-scanner.js.map +1 -1
- package/dist/router/router.d.ts +4 -6
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +36 -72
- package/dist/router/router.js.map +1 -1
- package/dist/router/types.d.ts +2 -6
- package/dist/router/types.d.ts.map +1 -1
- package/dist/server/{bun-adapter.d.ts → adapters/bun-adapter.d.ts} +1 -1
- package/dist/server/adapters/bun-adapter.d.ts.map +1 -0
- package/dist/server/{bun-adapter.js → adapters/bun-adapter.js} +2 -24
- package/dist/server/adapters/bun-adapter.js.map +1 -0
- package/dist/server/{uws-adapter.d.ts → adapters/uws-adapter.d.ts} +1 -1
- package/dist/server/adapters/uws-adapter.d.ts.map +1 -0
- package/dist/server/{uws-adapter.js → adapters/uws-adapter.js} +1 -28
- package/dist/server/adapters/uws-adapter.js.map +1 -0
- package/dist/server/app.d.ts +10 -31
- package/dist/server/app.d.ts.map +1 -1
- package/dist/server/app.js +20 -135
- package/dist/server/app.js.map +1 -1
- package/dist/server/bootstrapper.d.ts +4 -15
- package/dist/server/bootstrapper.d.ts.map +1 -1
- package/dist/server/bootstrapper.js +30 -229
- package/dist/server/bootstrapper.js.map +1 -1
- package/dist/server/define.d.ts +2 -2
- package/dist/server/define.d.ts.map +1 -1
- package/dist/server/define.js +3 -3
- package/dist/server/define.js.map +1 -1
- package/dist/server/engines/bun-engine.d.ts +16 -0
- package/dist/server/engines/bun-engine.d.ts.map +1 -0
- package/dist/server/engines/bun-engine.js +41 -0
- package/dist/server/engines/bun-engine.js.map +1 -0
- package/dist/server/engines/engine.d.ts +16 -0
- package/dist/server/engines/engine.d.ts.map +1 -0
- package/dist/{queue/types.js → server/engines/engine.js} +1 -1
- package/dist/server/engines/engine.js.map +1 -0
- package/dist/server/engines/node-engine.d.ts +22 -0
- package/dist/server/engines/node-engine.d.ts.map +1 -0
- package/dist/server/engines/node-engine.js +130 -0
- package/dist/server/engines/node-engine.js.map +1 -0
- package/dist/server/engines/uws-engine.d.ts +16 -0
- package/dist/server/engines/uws-engine.d.ts.map +1 -0
- package/dist/server/engines/uws-engine.js +48 -0
- package/dist/server/engines/uws-engine.js.map +1 -0
- package/dist/server/request-handler.d.ts +0 -1
- package/dist/server/request-handler.d.ts.map +1 -1
- package/dist/server/request-handler.js +74 -48
- package/dist/server/request-handler.js.map +1 -1
- package/dist/server/request.d.ts +0 -8
- package/dist/server/request.d.ts.map +1 -1
- package/dist/server/request.js +0 -16
- package/dist/server/request.js.map +1 -1
- package/dist/server/response.d.ts.map +1 -1
- package/dist/server/response.js +2 -1
- package/dist/server/response.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +0 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/time.d.ts +6 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +15 -0
- package/dist/utils/time.js.map +1 -0
- package/dist/validator/index.d.ts +1 -7
- package/dist/validator/index.d.ts.map +1 -1
- package/dist/validator/index.js +1 -5
- package/dist/validator/index.js.map +1 -1
- package/dist/validator/tex-types.d.ts +15 -2
- package/dist/validator/tex-types.d.ts.map +1 -1
- package/dist/validator/tex-types.js +8 -0
- package/dist/validator/tex-types.js.map +1 -1
- package/dist/validator/tex.d.ts.map +1 -1
- package/dist/validator/tex.js +21 -2
- package/dist/validator/tex.js.map +1 -1
- package/package.json +9 -151
- package/dist/adapters/aws-lambda.d.ts +0 -21
- package/dist/adapters/aws-lambda.d.ts.map +0 -1
- package/dist/adapters/aws-lambda.js +0 -125
- package/dist/adapters/aws-lambda.js.map +0 -1
- package/dist/adapters/bun.d.ts +0 -9
- package/dist/adapters/bun.d.ts.map +0 -1
- package/dist/adapters/bun.js +0 -23
- package/dist/adapters/bun.js.map +0 -1
- package/dist/adapters/cloudflare.d.ts +0 -10
- package/dist/adapters/cloudflare.d.ts.map +0 -1
- package/dist/adapters/cloudflare.js +0 -22
- package/dist/adapters/cloudflare.js.map +0 -1
- package/dist/adapters/deno.d.ts +0 -7
- package/dist/adapters/deno.d.ts.map +0 -1
- package/dist/adapters/deno.js +0 -21
- package/dist/adapters/deno.js.map +0 -1
- package/dist/adapters/fastly.d.ts +0 -6
- package/dist/adapters/fastly.d.ts.map +0 -1
- package/dist/adapters/fastly.js +0 -20
- package/dist/adapters/fastly.js.map +0 -1
- package/dist/adapters/fetch.d.ts +0 -30
- package/dist/adapters/fetch.d.ts.map +0 -1
- package/dist/adapters/fetch.js +0 -119
- package/dist/adapters/fetch.js.map +0 -1
- package/dist/adapters/index.d.ts +0 -9
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js +0 -28
- package/dist/adapters/index.js.map +0 -1
- package/dist/adapters/netlify.d.ts +0 -8
- package/dist/adapters/netlify.d.ts.map +0 -1
- package/dist/adapters/netlify.js +0 -20
- package/dist/adapters/netlify.js.map +0 -1
- package/dist/adapters/vercel.d.ts +0 -17
- package/dist/adapters/vercel.d.ts.map +0 -1
- package/dist/adapters/vercel.js +0 -23
- package/dist/adapters/vercel.js.map +0 -1
- package/dist/auth/index.d.ts +0 -8
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -49
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/jwt.d.ts +0 -20
- package/dist/auth/jwt.d.ts.map +0 -1
- package/dist/auth/jwt.js +0 -59
- package/dist/auth/jwt.js.map +0 -1
- package/dist/auth/oauth/core.d.ts +0 -96
- package/dist/auth/oauth/core.d.ts.map +0 -1
- package/dist/auth/oauth/core.js +0 -203
- package/dist/auth/oauth/core.js.map +0 -1
- package/dist/auth/oauth/index.d.ts +0 -45
- package/dist/auth/oauth/index.d.ts.map +0 -1
- package/dist/auth/oauth/index.js +0 -64
- package/dist/auth/oauth/index.js.map +0 -1
- package/dist/auth/oauth/middleware.d.ts +0 -63
- package/dist/auth/oauth/middleware.d.ts.map +0 -1
- package/dist/auth/oauth/middleware.js +0 -164
- package/dist/auth/oauth/middleware.js.map +0 -1
- package/dist/auth/oauth/providers/custom.d.ts +0 -41
- package/dist/auth/oauth/providers/custom.d.ts.map +0 -1
- package/dist/auth/oauth/providers/custom.js +0 -204
- package/dist/auth/oauth/providers/custom.js.map +0 -1
- package/dist/auth/oauth/providers/discord.d.ts +0 -23
- package/dist/auth/oauth/providers/discord.d.ts.map +0 -1
- package/dist/auth/oauth/providers/discord.js +0 -130
- package/dist/auth/oauth/providers/discord.js.map +0 -1
- package/dist/auth/oauth/providers/facebook.d.ts +0 -28
- package/dist/auth/oauth/providers/facebook.d.ts.map +0 -1
- package/dist/auth/oauth/providers/facebook.js +0 -124
- package/dist/auth/oauth/providers/facebook.js.map +0 -1
- package/dist/auth/oauth/providers/github.d.ts +0 -25
- package/dist/auth/oauth/providers/github.d.ts.map +0 -1
- package/dist/auth/oauth/providers/github.js +0 -132
- package/dist/auth/oauth/providers/github.js.map +0 -1
- package/dist/auth/oauth/providers/google.d.ts +0 -23
- package/dist/auth/oauth/providers/google.d.ts.map +0 -1
- package/dist/auth/oauth/providers/google.js +0 -134
- package/dist/auth/oauth/providers/google.js.map +0 -1
- package/dist/auth/oauth/providers/microsoft.d.ts +0 -28
- package/dist/auth/oauth/providers/microsoft.d.ts.map +0 -1
- package/dist/auth/oauth/providers/microsoft.js +0 -136
- package/dist/auth/oauth/providers/microsoft.js.map +0 -1
- package/dist/auth/oauth/types.d.ts +0 -158
- package/dist/auth/oauth/types.d.ts.map +0 -1
- package/dist/auth/oauth/types.js +0 -4
- package/dist/auth/oauth/types.js.map +0 -1
- package/dist/auth/password.d.ts +0 -25
- package/dist/auth/password.d.ts.map +0 -1
- package/dist/auth/password.js +0 -93
- package/dist/auth/password.js.map +0 -1
- package/dist/auth/rbac.d.ts +0 -10
- package/dist/auth/rbac.d.ts.map +0 -1
- package/dist/auth/rbac.js +0 -34
- package/dist/auth/rbac.js.map +0 -1
- package/dist/auth/session.d.ts +0 -26
- package/dist/auth/session.d.ts.map +0 -1
- package/dist/auth/session.js +0 -134
- package/dist/auth/session.js.map +0 -1
- package/dist/cache/index.d.ts +0 -4
- package/dist/cache/index.d.ts.map +0 -1
- package/dist/cache/index.js +0 -25
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/store.d.ts +0 -58
- package/dist/cache/store.d.ts.map +0 -1
- package/dist/cache/store.js +0 -298
- package/dist/cache/store.js.map +0 -1
- package/dist/cron/parser.d.ts +0 -2
- package/dist/cron/parser.d.ts.map +0 -1
- package/dist/cron/parser.js +0 -52
- package/dist/cron/parser.js.map +0 -1
- package/dist/cron/scheduler.d.ts +0 -23
- package/dist/cron/scheduler.d.ts.map +0 -1
- package/dist/cron/scheduler.js +0 -114
- package/dist/cron/scheduler.js.map +0 -1
- package/dist/database/adapters/mongodb.d.ts +0 -58
- package/dist/database/adapters/mongodb.d.ts.map +0 -1
- package/dist/database/adapters/mongodb.js +0 -264
- package/dist/database/adapters/mongodb.js.map +0 -1
- package/dist/database/adapters/mysql.d.ts +0 -27
- package/dist/database/adapters/mysql.d.ts.map +0 -1
- package/dist/database/adapters/mysql.js +0 -188
- package/dist/database/adapters/mysql.js.map +0 -1
- package/dist/database/adapters/postgres.d.ts +0 -28
- package/dist/database/adapters/postgres.d.ts.map +0 -1
- package/dist/database/adapters/postgres.js +0 -174
- package/dist/database/adapters/postgres.js.map +0 -1
- package/dist/database/adapters/sqlite.d.ts +0 -27
- package/dist/database/adapters/sqlite.d.ts.map +0 -1
- package/dist/database/adapters/sqlite.js +0 -149
- package/dist/database/adapters/sqlite.js.map +0 -1
- package/dist/database/index.d.ts +0 -42
- package/dist/database/index.d.ts.map +0 -1
- package/dist/database/index.js +0 -58
- package/dist/database/index.js.map +0 -1
- package/dist/database/manager.d.ts +0 -141
- package/dist/database/manager.d.ts.map +0 -1
- package/dist/database/manager.js +0 -337
- package/dist/database/manager.js.map +0 -1
- package/dist/database/migration.d.ts +0 -57
- package/dist/database/migration.d.ts.map +0 -1
- package/dist/database/migration.js +0 -329
- package/dist/database/migration.js.map +0 -1
- package/dist/database/query-builder.d.ts +0 -95
- package/dist/database/query-builder.d.ts.map +0 -1
- package/dist/database/query-builder.js +0 -404
- package/dist/database/query-builder.js.map +0 -1
- package/dist/database/sql/index.d.ts +0 -18
- package/dist/database/sql/index.d.ts.map +0 -1
- package/dist/database/sql/index.js +0 -74
- package/dist/database/sql/index.js.map +0 -1
- package/dist/database/sql/schema.d.ts +0 -38
- package/dist/database/sql/schema.d.ts.map +0 -1
- package/dist/database/sql/schema.js +0 -80
- package/dist/database/sql/schema.js.map +0 -1
- package/dist/database/synchronizer.d.ts +0 -12
- package/dist/database/synchronizer.d.ts.map +0 -1
- package/dist/database/synchronizer.js +0 -82
- package/dist/database/synchronizer.js.map +0 -1
- package/dist/database/types.d.ts +0 -184
- package/dist/database/types.d.ts.map +0 -1
- package/dist/database/types.js +0 -4
- package/dist/database/types.js.map +0 -1
- package/dist/dataloader/dataloader.d.ts +0 -23
- package/dist/dataloader/dataloader.d.ts.map +0 -1
- package/dist/dataloader/dataloader.js +0 -98
- package/dist/dataloader/dataloader.js.map +0 -1
- package/dist/dataloader/index.d.ts +0 -3
- package/dist/dataloader/index.d.ts.map +0 -1
- package/dist/dataloader/index.js +0 -19
- package/dist/dataloader/index.js.map +0 -1
- package/dist/dataloader/registry.d.ts +0 -17
- package/dist/dataloader/registry.d.ts.map +0 -1
- package/dist/dataloader/registry.js +0 -47
- package/dist/dataloader/registry.js.map +0 -1
- package/dist/dev/dep-graph.d.ts +0 -2
- package/dist/dev/dep-graph.d.ts.map +0 -1
- package/dist/dev/dep-graph.js +0 -111
- package/dist/dev/dep-graph.js.map +0 -1
- package/dist/dev/hot-reload.d.ts +0 -30
- package/dist/dev/hot-reload.d.ts.map +0 -1
- package/dist/dev/hot-reload.js +0 -262
- package/dist/dev/hot-reload.js.map +0 -1
- package/dist/docs/content/adapters.mdx +0 -199
- package/dist/docs/content/cache.mdx +0 -239
- package/dist/docs/content/circuit-breaker.mdx +0 -130
- package/dist/docs/content/cron.mdx +0 -109
- package/dist/docs/content/database.mdx +0 -278
- package/dist/docs/content/gateways.mdx +0 -376
- package/dist/docs/content/oauth.mdx +0 -179
- package/dist/docs/content/queues.mdx +0 -177
- package/dist/docs/content/rpc.mdx +0 -146
- package/dist/docs/content/sse.mdx +0 -159
- package/dist/docs/content/websockets.mdx +0 -289
- package/dist/docs/integrations/README.md +0 -23
- package/dist/docs/integrations/jwt.mdx +0 -151
- package/dist/docs/integrations/mongo.mdx +0 -183
- package/dist/docs/integrations/observability.mdx +0 -125
- package/dist/docs/integrations/openai.mdx +0 -108
- package/dist/docs/integrations/postgres.mdx +0 -190
- package/dist/docs/integrations/posthog.mdx +0 -122
- package/dist/docs/integrations/redis.mdx +0 -141
- package/dist/docs/integrations/resend.mdx +0 -117
- package/dist/docs/integrations/s3.mdx +0 -122
- package/dist/docs/integrations/swagger.mdx +0 -113
- package/dist/docs/reference/adapters.mdx +0 -130
- package/dist/docs/reference/auth.mdx +0 -183
- package/dist/docs/reference/cache.mdx +0 -132
- package/dist/docs/reference/circuit-breaker.mdx +0 -71
- package/dist/docs/reference/queue.mdx +0 -155
- package/dist/docs/reference/storage.mdx +0 -116
- package/dist/docs/reference/swagger.mdx +0 -132
- package/dist/integrations/drizzle.d.ts +0 -10
- package/dist/integrations/drizzle.d.ts.map +0 -1
- package/dist/integrations/drizzle.js +0 -34
- package/dist/integrations/drizzle.js.map +0 -1
- package/dist/integrations/jwt.d.ts +0 -12
- package/dist/integrations/jwt.d.ts.map +0 -1
- package/dist/integrations/jwt.js +0 -29
- package/dist/integrations/jwt.js.map +0 -1
- package/dist/integrations/mongodb.d.ts +0 -13
- package/dist/integrations/mongodb.d.ts.map +0 -1
- package/dist/integrations/mongodb.js +0 -48
- package/dist/integrations/mongodb.js.map +0 -1
- package/dist/integrations/mongoose.d.ts +0 -13
- package/dist/integrations/mongoose.d.ts.map +0 -1
- package/dist/integrations/mongoose.js +0 -84
- package/dist/integrations/mongoose.js.map +0 -1
- package/dist/integrations/openai.d.ts +0 -12
- package/dist/integrations/openai.d.ts.map +0 -1
- package/dist/integrations/openai.js +0 -47
- package/dist/integrations/openai.js.map +0 -1
- package/dist/integrations/postgres.d.ts +0 -13
- package/dist/integrations/postgres.d.ts.map +0 -1
- package/dist/integrations/postgres.js +0 -55
- package/dist/integrations/postgres.js.map +0 -1
- package/dist/integrations/posthog.d.ts +0 -13
- package/dist/integrations/posthog.d.ts.map +0 -1
- package/dist/integrations/posthog.js +0 -49
- package/dist/integrations/posthog.js.map +0 -1
- package/dist/integrations/prisma.d.ts +0 -10
- package/dist/integrations/prisma.d.ts.map +0 -1
- package/dist/integrations/prisma.js +0 -39
- package/dist/integrations/prisma.js.map +0 -1
- package/dist/integrations/redis.d.ts +0 -12
- package/dist/integrations/redis.d.ts.map +0 -1
- package/dist/integrations/redis.js +0 -48
- package/dist/integrations/redis.js.map +0 -1
- package/dist/integrations/resend.d.ts +0 -12
- package/dist/integrations/resend.d.ts.map +0 -1
- package/dist/integrations/resend.js +0 -47
- package/dist/integrations/resend.js.map +0 -1
- package/dist/integrations/s3.d.ts +0 -15
- package/dist/integrations/s3.d.ts.map +0 -1
- package/dist/integrations/s3.js +0 -60
- package/dist/integrations/s3.js.map +0 -1
- package/dist/integrations/supabase.d.ts +0 -13
- package/dist/integrations/supabase.d.ts.map +0 -1
- package/dist/integrations/supabase.js +0 -51
- package/dist/integrations/supabase.js.map +0 -1
- package/dist/middleware/cache.d.ts +0 -21
- package/dist/middleware/cache.d.ts.map +0 -1
- package/dist/middleware/cache.js +0 -156
- package/dist/middleware/cache.js.map +0 -1
- package/dist/observability/health.d.ts +0 -23
- package/dist/observability/health.d.ts.map +0 -1
- package/dist/observability/health.js +0 -49
- package/dist/observability/health.js.map +0 -1
- package/dist/observability/index.d.ts +0 -4
- package/dist/observability/index.d.ts.map +0 -1
- package/dist/observability/index.js +0 -10
- package/dist/observability/index.js.map +0 -1
- package/dist/observability/metrics.d.ts +0 -6
- package/dist/observability/metrics.d.ts.map +0 -1
- package/dist/observability/metrics.js +0 -60
- package/dist/observability/metrics.js.map +0 -1
- package/dist/observability/otel.d.ts +0 -27
- package/dist/observability/otel.d.ts.map +0 -1
- package/dist/observability/otel.js +0 -45
- package/dist/observability/otel.js.map +0 -1
- package/dist/observability/prometheus.d.ts +0 -30
- package/dist/observability/prometheus.d.ts.map +0 -1
- package/dist/observability/prometheus.js +0 -31
- package/dist/observability/prometheus.js.map +0 -1
- package/dist/queue/client.d.ts +0 -13
- package/dist/queue/client.d.ts.map +0 -1
- package/dist/queue/client.js +0 -83
- package/dist/queue/client.js.map +0 -1
- package/dist/queue/drivers/MemoryDriver.d.ts +0 -21
- package/dist/queue/drivers/MemoryDriver.d.ts.map +0 -1
- package/dist/queue/drivers/MemoryDriver.js +0 -176
- package/dist/queue/drivers/MemoryDriver.js.map +0 -1
- package/dist/queue/drivers/RedisDriver.d.ts +0 -19
- package/dist/queue/drivers/RedisDriver.d.ts.map +0 -1
- package/dist/queue/drivers/RedisDriver.js +0 -130
- package/dist/queue/drivers/RedisDriver.js.map +0 -1
- package/dist/queue/index.d.ts +0 -18
- package/dist/queue/index.d.ts.map +0 -1
- package/dist/queue/index.js +0 -37
- package/dist/queue/index.js.map +0 -1
- package/dist/queue/manager.d.ts +0 -18
- package/dist/queue/manager.d.ts.map +0 -1
- package/dist/queue/manager.js +0 -59
- package/dist/queue/manager.js.map +0 -1
- package/dist/queue/types.d.ts +0 -55
- package/dist/queue/types.d.ts.map +0 -1
- package/dist/queue/types.js.map +0 -1
- package/dist/queue/worker.d.ts +0 -18
- package/dist/queue/worker.d.ts.map +0 -1
- package/dist/queue/worker.js +0 -176
- package/dist/queue/worker.js.map +0 -1
- package/dist/router/gateway.d.ts.map +0 -1
- package/dist/router/gateway.js +0 -11
- package/dist/router/gateway.js.map +0 -1
- package/dist/server/bun-adapter.d.ts.map +0 -1
- package/dist/server/bun-adapter.js.map +0 -1
- package/dist/server/sse.d.ts +0 -16
- package/dist/server/sse.d.ts.map +0 -1
- package/dist/server/sse.js +0 -51
- package/dist/server/sse.js.map +0 -1
- package/dist/server/uws-adapter.d.ts.map +0 -1
- package/dist/server/uws-adapter.js.map +0 -1
- package/dist/storage/index.d.ts +0 -15
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/index.js +0 -7
- package/dist/storage/index.js.map +0 -1
- package/dist/swagger/index.d.ts +0 -9
- package/dist/swagger/index.d.ts.map +0 -1
- package/dist/swagger/index.js +0 -165
- package/dist/swagger/index.js.map +0 -1
- package/dist/threads/pool.d.ts +0 -14
- package/dist/threads/pool.d.ts.map +0 -1
- package/dist/threads/pool.js +0 -93
- package/dist/threads/pool.js.map +0 -1
- package/dist/threads/worker-runner.d.ts +0 -2
- package/dist/threads/worker-runner.d.ts.map +0 -1
- package/dist/threads/worker-runner.js +0 -71
- package/dist/threads/worker-runner.js.map +0 -1
- package/dist/validator/validator.d.ts +0 -360
- package/dist/validator/validator.d.ts.map +0 -1
- package/dist/validator/validator.js +0 -931
- package/dist/validator/validator.js.map +0 -1
- package/dist/websocket/orchestrator.d.ts +0 -11
- package/dist/websocket/orchestrator.d.ts.map +0 -1
- package/dist/websocket/orchestrator.js +0 -238
- package/dist/websocket/orchestrator.js.map +0 -1
- package/dist/websocket/server.d.ts +0 -66
- package/dist/websocket/server.d.ts.map +0 -1
- package/dist/websocket/server.js +0 -158
- package/dist/websocket/server.js.map +0 -1
- package/dist/websocket/socket.d.ts +0 -119
- package/dist/websocket/socket.d.ts.map +0 -1
- package/dist/websocket/socket.js +0 -242
- package/dist/websocket/socket.js.map +0 -1
|
@@ -3,11 +3,11 @@ title: "Decorators"
|
|
|
3
3
|
description: "API Reference for ExisJS Class-Based Routing and Decorators."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Decorators (
|
|
6
|
+
# Decorators (`exisjs/decorators`)
|
|
7
7
|
|
|
8
|
-
ExisJS provides a robust Object-Oriented Programming (OOP) paradigm via the `exisjs/decorators` module.
|
|
8
|
+
ExisJS provides a robust Object-Oriented Programming (OOP) paradigm via the `exisjs/decorators` module.
|
|
9
9
|
|
|
10
|
-
Unlike
|
|
10
|
+
Unlike frameworks that depend on heavy reflection libraries, ExisJS decorators are built completely on standard ECMAScript decorators and **do not require `reflect-metadata`**.
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
@@ -20,8 +20,7 @@ Marks a class as a Controller. All route handler methods within the class will b
|
|
|
20
20
|
```typescript filename="src/http/users/route.ts"
|
|
21
21
|
import { Controller } from 'exisjs/decorators'
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
@Controller('/api/users')
|
|
23
|
+
@Controller('/users')
|
|
25
24
|
export default class UserController {
|
|
26
25
|
// ...
|
|
27
26
|
}
|
|
@@ -40,7 +39,6 @@ Defines an HTTP route handler on a class method. You can optionally pass a schem
|
|
|
40
39
|
- `@Connect(path?, schema?)`
|
|
41
40
|
- `@Trace(path?, schema?)`
|
|
42
41
|
- `@All(path?, schema?)`
|
|
43
|
-
- `@Query(path?, schema?)`: Can be used as a method decorator to handle custom `QUERY` method requests (e.g., RPC or GraphQL-like endpoints).
|
|
44
42
|
|
|
45
43
|
```typescript filename="src/http/users/route.ts"
|
|
46
44
|
import { Controller, Get, Post } from 'exisjs/decorators'
|
|
@@ -60,234 +58,54 @@ export default class UserController {
|
|
|
60
58
|
}
|
|
61
59
|
```
|
|
62
60
|
|
|
63
|
-
### Real-Time Methods
|
|
64
|
-
- `@Ws(path?, schema?)`: Maps the handler to a WebSocket connection.
|
|
65
|
-
- `@Sse(path?, schema?)`: Maps the handler to a Server-Sent Events stream.
|
|
66
|
-
|
|
67
61
|
---
|
|
68
62
|
|
|
69
63
|
## 2. Parameter Injection
|
|
70
64
|
|
|
71
|
-
Parameter decorators automatically extract data from the incoming request and inject them directly into your method arguments
|
|
65
|
+
Parameter decorators automatically extract data from the incoming request and inject them directly into your method arguments:
|
|
72
66
|
|
|
73
|
-
- `@Body()`: Parses and injects the JSON request body.
|
|
74
|
-
- `@Param(
|
|
75
|
-
- `@
|
|
76
|
-
- `@
|
|
77
|
-
- `@HostParam(
|
|
67
|
+
- `@Body(nameOrPipe?)`: Parses and injects the JSON request body (or passes it through a validator/pipe).
|
|
68
|
+
- `@Param(nameOrPipe?)`: Injects a URL path parameter (e.g., `id` from `/:id`).
|
|
69
|
+
- `@Headers(nameOrPipe?)`: Injects an HTTP header by name.
|
|
70
|
+
- `@QueryParam(nameOrPipe?)` / `@Query(nameOrPipe?)`: Injects a URL query parameter (e.g., `?search=term`).
|
|
71
|
+
- `@HostParam(nameOrPipe?)`: Injects a subdomain parameter.
|
|
78
72
|
- `@Req()`: Injects the raw ExisJS Request object.
|
|
79
|
-
- `@Res(options?)`: Injects the raw ExisJS Response object
|
|
73
|
+
- `@Res(options?)`: Injects the raw ExisJS Response object (`{ passthrough: true }`).
|
|
80
74
|
- `@Ip()`: Injects the client's IP address.
|
|
81
|
-
- `@Session()`: Injects the active session object (requires session middleware).
|
|
82
75
|
- `@Next()`: Injects the Next function.
|
|
83
|
-
-
|
|
84
|
-
- `@Stream()`: Injects the active SSE instance (for `@Sse`).
|
|
85
|
-
- `@UploadedFile() / @UploadedFiles()`: Injects multipart/form-data files.
|
|
86
|
-
|
|
87
|
-
```typescript filename="src/http/users/route.ts"
|
|
88
|
-
import { Controller, Get, Post, Param, Body, Ip } from 'exisjs/decorators'
|
|
89
|
-
|
|
90
|
-
@Controller('/users')
|
|
91
|
-
export default class UserController {
|
|
92
|
-
@Get('/:id')
|
|
93
|
-
getUser(@Param('id') id: string, @Ip() ip: string) {
|
|
94
|
-
return { id, requestedBy: ip }
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
@Post('/')
|
|
98
|
-
createUser(@Body() body: { email: string }) {
|
|
99
|
-
return { email: body.email }
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
```
|
|
76
|
+
- `createParamDecorator(factory)`: Exports a factory to create custom parameter decorators (e.g. `@CurrentUser()`).
|
|
103
77
|
|
|
104
78
|
---
|
|
105
79
|
|
|
106
|
-
## 3. Middleware &
|
|
107
|
-
|
|
108
|
-
### `@Use(...middlewares)`
|
|
109
|
-
Applies Express-style middleware functions to a specific route handler or an entire controller class.
|
|
110
|
-
|
|
111
|
-
```typescript filename="src/http/secure/route.ts"
|
|
112
|
-
import { Controller, Get, Use } from 'exisjs/decorators'
|
|
113
|
-
import { authMiddleware } from '../middleware/auth'
|
|
114
|
-
|
|
115
|
-
@Controller('/secure')
|
|
116
|
-
@Use(authMiddleware)
|
|
117
|
-
export default class SecureController {
|
|
118
|
-
@Get('/')
|
|
119
|
-
getSecureData() {
|
|
120
|
-
return { secure: true }
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### `@Cache(options)`
|
|
126
|
-
Automatically caches `GET` responses in memory or Redis.
|
|
127
|
-
|
|
128
|
-
### `@Idempotent(options)`
|
|
129
|
-
Enforces idempotency based on the `Idempotency-Key` header, preventing duplicate mutations (e.g., duplicate payments).
|
|
130
|
-
|
|
131
|
-
```typescript filename="src/http/payments/route.ts"
|
|
132
|
-
import { Controller, Post, Idempotent } from 'exisjs/decorators'
|
|
133
|
-
|
|
134
|
-
@Controller('/payments')
|
|
135
|
-
export default class PaymentController {
|
|
136
|
-
@Post('/checkout')
|
|
137
|
-
@Idempotent()
|
|
138
|
-
checkout() {
|
|
139
|
-
return { status: 'processing' }
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
## 4. Responses & Metadata
|
|
147
|
-
|
|
148
|
-
### `@HttpCode(code)`
|
|
149
|
-
Forces a specific HTTP status code for successful responses.
|
|
150
|
-
|
|
151
|
-
### `@Header(name, value)`
|
|
152
|
-
Automatically injects a specific response header before sending the response.
|
|
80
|
+
## 3. Middleware & Pipeline Decorators
|
|
153
81
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
### `@Returns(schema)`
|
|
158
|
-
Explicitly defines the response schema for OpenAPI (Swagger) generation.
|
|
159
|
-
|
|
160
|
-
```typescript filename="src/http/documents/route.ts"
|
|
161
|
-
import { Controller, Post, HttpCode, Header } from 'exisjs/decorators'
|
|
162
|
-
|
|
163
|
-
@Controller('/documents')
|
|
164
|
-
export default class DocumentController {
|
|
165
|
-
@Post('/')
|
|
166
|
-
@HttpCode(201)
|
|
167
|
-
@Header('X-Custom-Status', 'Processed')
|
|
168
|
-
createDoc() {
|
|
169
|
-
return { created: true }
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
```
|
|
82
|
+
- `@Use(...middlewaresOrGuardsOrInterceptorsOrFilters)`: Unified decorator that binds middlewares, guards (`canActivate`), interceptors (`intercept`), or exception filters (`catch`) to a controller class or method.
|
|
83
|
+
- `@Idempotent(options?)`: Caches responses based on the `Idempotency-Key` header using native in-memory off-heap storage.
|
|
173
84
|
|
|
174
85
|
---
|
|
175
86
|
|
|
176
|
-
##
|
|
87
|
+
## 4. Response & Metadata Modifiers
|
|
177
88
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
- `@
|
|
181
|
-
- `@
|
|
182
|
-
- `@
|
|
183
|
-
- `@
|
|
184
|
-
- `@
|
|
89
|
+
- `@HttpCode(code: number)`: Enforces a custom HTTP status code on success.
|
|
90
|
+
- `@Header(name: string, value: string)`: Appends an HTTP header to the response.
|
|
91
|
+
- `@Returns(schema)`: Attaches response schema for OpenAPI documentation.
|
|
92
|
+
- `@Redirect(url: string, statusCode?: number)`: Redirects request to target URL.
|
|
93
|
+
- `@Permissions(...permissions: string[])`: Sets required permissions on the route.
|
|
94
|
+
- `@Hosts(...hosts: string[])`: Restricts routes to specific Host headers.
|
|
95
|
+
- `@SetMetadata(key, value)`: Attaches arbitrary custom metadata to a class or handler method, retrievable via `Reflector`.
|
|
96
|
+
- `Reflector`: Utility class to inspect metadata attached by `@SetMetadata`:
|
|
97
|
+
- `Reflector.get(key, target)`: Retrieves metadata for a specific target.
|
|
98
|
+
- `Reflector.getAllAndOverride(key, targets)`: Retrieves metadata, overriding higher-level targets with lower-level targets.
|
|
99
|
+
- `Reflector.getAllAndMerge(key, targets)`: Merges array/object metadata across multiple targets.
|
|
185
100
|
|
|
186
101
|
---
|
|
187
102
|
|
|
188
|
-
##
|
|
189
|
-
|
|
190
|
-
### `@Server(options?)`
|
|
191
|
-
Marks a class as the root Server entry point. Used to register global configuration and dependencies.
|
|
192
|
-
|
|
193
|
-
**Options Interface:**
|
|
194
|
-
```typescript
|
|
195
|
-
interface ServerConfig {
|
|
196
|
-
plugins?: any[]
|
|
197
|
-
providers?: any[]
|
|
198
|
-
cron?: any[]
|
|
199
|
-
queue?: any[]
|
|
200
|
-
}
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
```typescript filename="src/http/server.ts"
|
|
204
|
-
import { Server } from 'exisjs/decorators'
|
|
205
|
-
import { corsPlugin } from 'exisjs/middleware'
|
|
206
|
-
|
|
207
|
-
@Server({
|
|
208
|
-
plugins: [corsPlugin]
|
|
209
|
-
})
|
|
210
|
-
export default class RootServer {
|
|
211
|
-
async onStart(app) {
|
|
212
|
-
app.log.info("App booted!")
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
```
|
|
103
|
+
## 5. Dependency Injection & Modules
|
|
216
104
|
|
|
217
|
-
|
|
218
|
-
Marks a class as
|
|
105
|
+
- `@Module({ imports?, controllers?, providers?, exports? })`: OOP class decorator equivalent to `defineModule()` for structuring application modules.
|
|
106
|
+
- `@Injectable(options?)`: Marks a service class as an IoC provider managed by the container. Supports `{ scope: 'singleton' | 'request' | 'transient' }`.
|
|
107
|
+
- `@Inject(token)`: Constructor parameter decorator for injecting dependencies by class, string, or symbol token.
|
|
108
|
+
- `@Optional()`: Constructor parameter decorator resolving missing dependencies to `undefined` without throwing.
|
|
109
|
+
- `@Boundary(config)`: Marks a class as a folder-scoped Boundary configuring CORS, headers, exclusions, and pipeline steps.
|
|
110
|
+
- `@Server(config)`: Marks a class as a root server definition.
|
|
219
111
|
|
|
220
|
-
**Options Interface:**
|
|
221
|
-
```typescript
|
|
222
|
-
interface GatewayConfig {
|
|
223
|
-
exclude?: any[]
|
|
224
|
-
middleware?: any[]
|
|
225
|
-
filters?: any[]
|
|
226
|
-
guards?: any[]
|
|
227
|
-
interceptors?: any[]
|
|
228
|
-
timeout?: number | ((req: any) => number)
|
|
229
|
-
metadata?: Record<string, any>
|
|
230
|
-
cors?: any
|
|
231
|
-
headers?: Record<string, string>
|
|
232
|
-
imports?: any[]
|
|
233
|
-
providers?: any[]
|
|
234
|
-
}
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
```typescript filename="src/http/gateway.ts"
|
|
238
|
-
import { Gateway } from 'exisjs/decorators'
|
|
239
|
-
import { helmet, hpp } from 'exisjs/middleware'
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* Root Gateway (gatekeeper for the entire application)
|
|
243
|
-
*
|
|
244
|
-
* Gateways apply configuration to all routes within their directory and subdirectories.
|
|
245
|
-
* This acts as the global security and infrastructure layer.
|
|
246
|
-
*/
|
|
247
|
-
@Gateway({
|
|
248
|
-
// 1. Cross-Origin Resource Sharing (CORS)
|
|
249
|
-
cors: {
|
|
250
|
-
origin: ['https://myapp.com', /localhost:\d+/],
|
|
251
|
-
credentials: true,
|
|
252
|
-
},
|
|
253
|
-
|
|
254
|
-
// 2. Global Headers
|
|
255
|
-
headers: {
|
|
256
|
-
'X-Powered-By': 'ExisJS',
|
|
257
|
-
'X-Application-Version': '1.0.0',
|
|
258
|
-
},
|
|
259
|
-
|
|
260
|
-
// 3. Global Middleware
|
|
261
|
-
middleware: [
|
|
262
|
-
helmet(), // Sets secure HTTP headers
|
|
263
|
-
hpp(), // Prevents HTTP Parameter Pollution
|
|
264
|
-
],
|
|
265
|
-
|
|
266
|
-
// 4. Exclude Paths
|
|
267
|
-
exclude: [{ path: '/health', method: 'GET' }],
|
|
268
|
-
|
|
269
|
-
// 5. Dependency Injection Providers
|
|
270
|
-
providers: [
|
|
271
|
-
['ConfigService', { useValue: { apiKey: process.env.API_KEY || 'default' } }],
|
|
272
|
-
],
|
|
273
|
-
|
|
274
|
-
// 6. Global Metadata
|
|
275
|
-
metadata: {
|
|
276
|
-
tenant: 'root',
|
|
277
|
-
},
|
|
278
|
-
|
|
279
|
-
// 7. Request Timeout
|
|
280
|
-
timeout: 10000,
|
|
281
|
-
})
|
|
282
|
-
export default class RootGateway {}
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
### `@Injectable(options?)`
|
|
286
|
-
Marks a class as a provider for Dependency Injection, meaning it can be automatically injected into controllers or other services by the IoC container.
|
|
287
|
-
|
|
288
|
-
**Options Interface:**
|
|
289
|
-
```typescript
|
|
290
|
-
interface InjectableOptions {
|
|
291
|
-
scope?: 'singleton' | 'request'
|
|
292
|
-
}
|
|
293
|
-
```
|
|
@@ -51,17 +51,26 @@ app.provide(AuthService, AuthService)
|
|
|
51
51
|
|
|
52
52
|
---
|
|
53
53
|
|
|
54
|
-
## Scopes (`singleton
|
|
54
|
+
## Scopes (`singleton`, `request`, `transient`)
|
|
55
55
|
|
|
56
56
|
By default, all providers in ExisJS are **Singletons**. They are instantiated once and cached for the lifetime of the application.
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
ExisJS supports three provider scopes in the `@Injectable()` decorator and `app.provide()`:
|
|
59
|
+
|
|
60
|
+
- **`singleton` (Default)**: Instantiated once and cached for the lifetime of the application.
|
|
61
|
+
- **`request`**: A new instance is created exclusively for each incoming HTTP request, and garbage collected afterward.
|
|
62
|
+
- **`transient`**: A new instance is created every single time the dependency is injected or resolved.
|
|
59
63
|
|
|
60
64
|
```typescript
|
|
61
65
|
app.provide('TraceLogger', {
|
|
62
66
|
useClass: RequestScopedLogger,
|
|
63
67
|
scope: 'request'
|
|
64
68
|
})
|
|
69
|
+
|
|
70
|
+
app.provide('OperationContext', {
|
|
71
|
+
useClass: OperationContext,
|
|
72
|
+
scope: 'transient'
|
|
73
|
+
})
|
|
65
74
|
```
|
|
66
75
|
|
|
67
76
|
> [!WARNING]
|
|
@@ -78,7 +87,7 @@ The true superpower of ExisJS is the `inject()` hook.
|
|
|
78
87
|
Powered by Node.js `AsyncLocalStorage`, `inject()` can be called from **anywhere** within a request lifecycle (Controllers, Middlewares, nested utility functions) without needing to explicitly pass the `app` or `req` objects down the call chain!
|
|
79
88
|
|
|
80
89
|
```typescript filename="src/http/users/route.ts"
|
|
81
|
-
import { route } from 'exisjs/router'
|
|
90
|
+
import { route, controller } from 'exisjs/router'
|
|
82
91
|
import { inject } from 'exisjs/di'
|
|
83
92
|
import { Database } from '../db' // The class definition
|
|
84
93
|
|
|
@@ -100,24 +109,39 @@ export default controller({
|
|
|
100
109
|
> [!NOTE]
|
|
101
110
|
> `inject()` relies on the active execution context. If you call `inject()` outside of an active HTTP request or application lifecycle hook (e.g., in a background `setInterval` without context), it will throw an error.
|
|
102
111
|
|
|
103
|
-
### 2.
|
|
104
|
-
|
|
105
|
-
Unlike other frameworks like NestJS, ExisJS does **not** rely on slow, metadata-heavy Constructor Injection.
|
|
112
|
+
### 2. Constructor Injection in Classes (OOP)
|
|
106
113
|
|
|
107
|
-
|
|
114
|
+
ExisJS supports full OOP constructor parameter injection. You can inject services directly via type annotation or specify tokens with `@Inject()`, and designate optional dependencies with `@Optional()`:
|
|
108
115
|
|
|
109
116
|
```typescript filename="src/http/users/route.ts"
|
|
110
|
-
import { Controller, Get } from 'exisjs/decorators'
|
|
111
|
-
import {
|
|
112
|
-
|
|
117
|
+
import { Controller, Get, Param, Inject, Optional } from 'exisjs/decorators'
|
|
118
|
+
import { UserService } from './service'
|
|
119
|
+
|
|
120
|
+
@Controller('/users')
|
|
121
|
+
export default class UserController {
|
|
122
|
+
constructor(
|
|
123
|
+
private userService: UserService,
|
|
124
|
+
@Inject('DATABASE_URL') private dbUrl: string,
|
|
125
|
+
@Optional() @Inject('ANALYTICS') private analytics?: any
|
|
126
|
+
) {}
|
|
127
|
+
|
|
128
|
+
@Get('/:id')
|
|
129
|
+
async getUser(@Param('id') id: string) {
|
|
130
|
+
return this.userService.findById(id)
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
```
|
|
113
134
|
|
|
135
|
+
You can also use property-level `inject()` inside your Controller methods:
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
114
138
|
@Controller('/users')
|
|
115
139
|
export default class UserController {
|
|
116
140
|
@Get('/')
|
|
117
141
|
async getUsers() {
|
|
118
|
-
// Inject dependencies perfectly cleanly right where you need them!
|
|
119
142
|
const db = inject(Database)
|
|
120
143
|
return db.query('SELECT * FROM users')
|
|
121
144
|
}
|
|
122
145
|
}
|
|
123
146
|
```
|
|
147
|
+
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Logger"
|
|
3
|
+
description: "API Reference for the ExisJS structured logger (exisjs/logger)."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Logger (`exisjs/logger`)
|
|
7
|
+
|
|
8
|
+
ExisJS includes a built-in, high-performance structured logger powered by Pino. It provides colored, pretty-printed logs in development and fast, structured JSON in production.
|
|
9
|
+
|
|
10
|
+
All logger APIs are imported directly from the dedicated subpath `exisjs/logger`.
|
|
11
|
+
|
|
12
|
+
```typescript
|
|
13
|
+
import { logger, configureLogger, setLogger } from 'exisjs/logger'
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 1. Global Logger Singleton (`logger`)
|
|
19
|
+
|
|
20
|
+
The `logger` singleton can be imported and called anywhere in your application:
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { logger } from 'exisjs/logger'
|
|
24
|
+
|
|
25
|
+
logger.info('Server boot sequence initiated')
|
|
26
|
+
logger.warn({ origin: req.headers.origin }, 'Untrusted origin detected')
|
|
27
|
+
logger.error({ err }, 'Failed to persist record to database')
|
|
28
|
+
logger.debug({ payload }, 'Parsing incoming request payload')
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Methods
|
|
32
|
+
- `logger.info([obj], msg, ...args)`
|
|
33
|
+
- `logger.warn([obj], msg, ...args)`
|
|
34
|
+
- `logger.error([obj], msg, ...args)`
|
|
35
|
+
- `logger.debug([obj], msg, ...args)`
|
|
36
|
+
- `logger.trace([obj], msg, ...args)`
|
|
37
|
+
- `logger.fatal([obj], msg, ...args)`
|
|
38
|
+
- `logger.child(bindings)`: Creates a child logger with bound metadata (e.g. `{ requestId: '123' }`).
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 2. Configuration (`configureLogger`)
|
|
43
|
+
|
|
44
|
+
Use `configureLogger()` to adjust log levels, toggle pretty printing, and customize sensitive field redactions across the entire application:
|
|
45
|
+
|
|
46
|
+
```typescript filename="src/http/server.ts"
|
|
47
|
+
import { configureLogger } from 'exisjs/logger'
|
|
48
|
+
|
|
49
|
+
configureLogger({
|
|
50
|
+
level: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
|
|
51
|
+
pretty: process.env.NODE_ENV !== 'production',
|
|
52
|
+
redact: ['*.password', '*.token', '*.secret', 'req.headers.cookie'],
|
|
53
|
+
})
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Options
|
|
57
|
+
- `level` (`'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal' | 'silent'`): Minimum level to output (default: `'info'`).
|
|
58
|
+
- `pretty` (`boolean`): Whether to format log lines with bracketed timestamp and colorized labels (`[HH:MM:ss] LEVEL: message`). Default is `true` in development and `false` in production.
|
|
59
|
+
- `redact` (`string[]`): Property paths to censor automatically from log payloads.
|
|
60
|
+
- `replaceRedact` (`boolean`): When `true`, replaces default redact paths instead of merging with them.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 3. Custom Logger Instance (`setLogger`)
|
|
65
|
+
|
|
66
|
+
If you want to plug in your own custom Pino instance or transport (e.g., streaming logs directly to Loki, Datadog, or Elasticsearch), pass it to `setLogger()`:
|
|
67
|
+
|
|
68
|
+
```typescript filename="src/http/server.ts"
|
|
69
|
+
import { setLogger } from 'exisjs/logger'
|
|
70
|
+
import pino from 'pino'
|
|
71
|
+
|
|
72
|
+
const customPino = pino({
|
|
73
|
+
level: 'info',
|
|
74
|
+
transport: {
|
|
75
|
+
target: 'pino-loki',
|
|
76
|
+
options: { host: 'http://localhost:3100' }
|
|
77
|
+
}
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
setLogger(customPino)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 4. Request-Scoped Logger (`req.log`)
|
|
86
|
+
|
|
87
|
+
Every incoming HTTP request in ExisJS automatically receives a child logger bound to `req.log`. It automatically includes request context such as `req.requestId`:
|
|
88
|
+
|
|
89
|
+
```typescript filename="src/http/users/route.ts"
|
|
90
|
+
import { route, controller } from 'exisjs/router'
|
|
91
|
+
|
|
92
|
+
export default controller({
|
|
93
|
+
profile: route.get('/profile', {
|
|
94
|
+
async handle({ req }) {
|
|
95
|
+
req.log.info('Fetching user profile')
|
|
96
|
+
return { ok: true }
|
|
97
|
+
}
|
|
98
|
+
})
|
|
99
|
+
})
|
|
100
|
+
```
|