exisjs 0.6.1 → 0.7.0
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/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 +3 -2
- package/dist/config/config.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 +2 -2
- package/dist/decorators/constants.d.ts.map +1 -1
- package/dist/decorators/constants.js +2 -2
- package/dist/decorators/constants.js.map +1 -1
- package/dist/decorators/core.d.ts +4 -3
- package/dist/decorators/core.d.ts.map +1 -1
- package/dist/decorators/core.js +7 -4
- package/dist/decorators/core.js.map +1 -1
- package/dist/decorators/middleware.d.ts +0 -10
- package/dist/decorators/middleware.d.ts.map +1 -1
- package/dist/decorators/middleware.js +0 -25
- package/dist/decorators/middleware.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 +1 -3
- package/dist/decorators/routing.js.map +1 -1
- package/dist/di/inject.d.ts +1 -2
- package/dist/di/inject.d.ts.map +1 -1
- package/dist/di/inject.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 +107 -80
- package/dist/docs/content/installation.mdx +20 -1
- package/dist/docs/content/middleware.mdx +65 -291
- 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 +24 -217
- package/dist/docs/reference/middleware.mdx +41 -217
- package/dist/docs/reference/validator.mdx +2 -5
- package/dist/error/errors.d.ts.map +1 -1
- package/dist/error/errors.js +16 -0
- package/dist/error/errors.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- 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/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/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 +0 -4
- 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 +216 -193
- 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 +9 -30
- package/dist/server/app.d.ts.map +1 -1
- package/dist/server/app.js +19 -134
- 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/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
|
@@ -5,162 +5,289 @@ nextTitle: "Configuration"
|
|
|
5
5
|
|
|
6
6
|
# Project Structure
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
ExisJS is a minimal, opinionated core: file-system routing, dependency injection,
|
|
9
|
+
validation, sanitization, and a request pipeline. Everything else — databases,
|
|
10
|
+
auth, caching, queues, websockets — is an official `@exisjs/*` package you add
|
|
11
|
+
only when you need it. Nothing in this structure requires them.
|
|
9
12
|
|
|
10
|
-
ExisJS enforces a strict `src/` directory convention. All application code
|
|
13
|
+
ExisJS enforces a strict `src/` directory convention. All application code
|
|
14
|
+
**must** live inside `src/`.
|
|
11
15
|
|
|
12
16
|
---
|
|
13
17
|
|
|
14
18
|
## The Default Structure
|
|
15
19
|
|
|
16
|
-
Here is a look at a standard ExisJS project structure:
|
|
17
|
-
|
|
18
20
|
```text
|
|
19
21
|
my-backend/
|
|
20
22
|
├── .exis/ # Internal framework cache and build artifacts
|
|
21
23
|
├── src/
|
|
22
24
|
│ ├── http/
|
|
23
|
-
│ │ ├── server.ts #
|
|
24
|
-
│ │ ├── route.ts # Root
|
|
25
|
-
│ │ ├──
|
|
25
|
+
│ │ ├── server.ts # Application entry point
|
|
26
|
+
│ │ ├── route.ts # Root routes (e.g. GET /api)
|
|
27
|
+
│ │ ├── boundary.ts # Root boundary (config + request pipeline)
|
|
26
28
|
│ │ ├── users/
|
|
27
|
-
│ │ │ ├── route.ts # User endpoints
|
|
28
|
-
│ │ │
|
|
29
|
-
│ │ │ └── controller.ts # Business logic helpers
|
|
29
|
+
│ │ │ ├── route.ts # User endpoints
|
|
30
|
+
│ │ │ └── schema.ts # Validation schemas (tex) — mandatory alongside route.ts
|
|
30
31
|
│ │ ├── posts/
|
|
31
|
-
│ │ │
|
|
32
|
+
│ │ │ ├── route.ts
|
|
33
|
+
│ │ │ ├── schema.ts
|
|
34
|
+
│ │ │ └── service.ts # Business logic / data access, DI-injectable
|
|
32
35
|
│ │ └── admin/
|
|
33
|
-
│ │ ├──
|
|
34
|
-
│ │ ├── route.ts
|
|
36
|
+
│ │ ├── boundary.ts # Applies to /admin/* and everything nested
|
|
37
|
+
│ │ ├── route.ts
|
|
35
38
|
│ │ └── posts/
|
|
36
|
-
│ │ ├── route.ts
|
|
39
|
+
│ │ ├── route.ts
|
|
40
|
+
│ │ ├── schema.ts
|
|
37
41
|
│ │ └── service.ts
|
|
38
|
-
│ ├──
|
|
39
|
-
│
|
|
40
|
-
│
|
|
41
|
-
│
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
├── tests/ # Test files
|
|
46
|
-
├── .env # Local environment variables
|
|
47
|
-
├── exis.config.ts # The ExisJS server configuration file
|
|
42
|
+
│ ├── models/ # Free-form. Populated once you add a data package.
|
|
43
|
+
│ ├── services/ # Free-form. Shared business logic.
|
|
44
|
+
│ ├── dto/ # Free-form. Request/response types.
|
|
45
|
+
│ └── config/env.ts # Type-safe environment schema (tex)
|
|
46
|
+
├── tests/
|
|
47
|
+
├── .env
|
|
48
|
+
├── exis.config.ts
|
|
48
49
|
├── package.json
|
|
49
50
|
└── tsconfig.json
|
|
50
51
|
```
|
|
51
52
|
|
|
53
|
+
> `src/jobs/` is **not** part of the core structure. It only appears once you
|
|
54
|
+
> install `@exisjs/queue` — see that package's docs for its convention.
|
|
55
|
+
|
|
52
56
|
---
|
|
53
57
|
|
|
54
|
-
##
|
|
58
|
+
## File Roles (identical meaning in both paradigms)
|
|
55
59
|
|
|
56
|
-
|
|
57
|
-
|
|
60
|
+
A file's name declares its role. Functional vs. class-based (OOP) only changes
|
|
61
|
+
_syntax_, never _responsibility_.
|
|
58
62
|
|
|
59
|
-
|
|
63
|
+
| File | Role | Never contains |
|
|
64
|
+
| ------------- | ---------------------------------------------------------------------------------------------------- | -------------------------------- |
|
|
65
|
+
| `route.ts` | Binds a URL + method to a handler. | Business logic, validation logic |
|
|
66
|
+
| `schema.ts` | `tex` validation schemas, imported by `route.ts`. Mandatory for every `route.ts` that accepts input. | Handlers, routing |
|
|
67
|
+
| `service.ts` | Business logic and data access. DI-injectable. | Routing, response shaping |
|
|
68
|
+
| `boundary.ts` | Folder-scoped config + request pipeline for everything in this folder and below. | — |
|
|
60
69
|
|
|
61
|
-
|
|
62
|
-
ExisJS strongly encourages type-safe environment variables. By defining an `env.ts` file using the built-in validator (`tex.env()`), your application will crash at boot if a required environment variable (like `DATABASE_URL`) is missing — preventing silent runtime failures.
|
|
70
|
+
---
|
|
63
71
|
|
|
64
|
-
|
|
65
|
-
|
|
72
|
+
## `src/http/**/route.ts`
|
|
73
|
+
|
|
74
|
+
Any `route.ts` (or `.js`) under `src/http/` maps to a URL from its folder path:
|
|
75
|
+
|
|
76
|
+
- `src/http/route.ts` → `/api`
|
|
77
|
+
- `src/http/users/route.ts` → `/api/users`
|
|
78
|
+
- `src/http/users/[id]/route.ts` → `/api/users/:id`
|
|
79
|
+
- `src/http/(internal)/debug/route.ts` → `/api/debug` (group folders are ignored)
|
|
80
|
+
|
|
81
|
+
### Functional
|
|
82
|
+
|
|
83
|
+
```typescript filename="src/http/users/route.ts"
|
|
84
|
+
import { controller, route } from "exisjs/router";
|
|
85
|
+
import { UserParamsSchema } from "./schema";
|
|
86
|
+
import { fetchUser } from "./service";
|
|
66
87
|
|
|
67
|
-
export
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
88
|
+
export default controller({
|
|
89
|
+
getUser: route.get("/users/:id", {
|
|
90
|
+
params: UserParamsSchema,
|
|
91
|
+
async handle({ params }) {
|
|
92
|
+
return fetchUser(params.id);
|
|
93
|
+
},
|
|
94
|
+
}),
|
|
95
|
+
});
|
|
72
96
|
```
|
|
73
97
|
|
|
74
|
-
###
|
|
75
|
-
This is your application's bootstrap file. Instead of manually invoking `app.listen()`, you export your server configuration. The ExisJS CLI automatically reads this file, connects your plugins, mounts the file-system router, and starts the server.
|
|
98
|
+
### Class-based (OOP)
|
|
76
99
|
|
|
77
|
-
|
|
100
|
+
The decorated class **is** the route file — no separate controller file:
|
|
78
101
|
|
|
79
|
-
```typescript filename="src/http/
|
|
80
|
-
import {
|
|
102
|
+
```typescript filename="src/http/users/route.ts"
|
|
103
|
+
import { Controller, Get, Param } from "exisjs/decorators";
|
|
104
|
+
import { UserParamsSchema } from "./schema";
|
|
105
|
+
import { UserService } from "./service";
|
|
81
106
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
107
|
+
@Controller("/users")
|
|
108
|
+
export default class UserRoute {
|
|
109
|
+
constructor(private userService: UserService) {}
|
|
110
|
+
|
|
111
|
+
@Get("/:id", UserParamsSchema)
|
|
112
|
+
async getUser(@Param("id") id: string) {
|
|
113
|
+
return this.userService.fetchUser(id);
|
|
88
114
|
}
|
|
89
|
-
}
|
|
115
|
+
}
|
|
90
116
|
```
|
|
91
117
|
|
|
92
|
-
|
|
118
|
+
> [!IMPORTANT]
|
|
119
|
+
> Choose **one paradigm** — Functional or OOP — for the entire project.
|
|
120
|
+
> Mixing them causes a fatal error at startup.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## `src/http/**/schema.ts`
|
|
93
125
|
|
|
94
|
-
```typescript filename="src/http/
|
|
95
|
-
import {
|
|
96
|
-
import type { App } from 'exisjs'
|
|
126
|
+
```typescript filename="src/http/users/schema.ts"
|
|
127
|
+
import { tex } from "exisjs/validator";
|
|
97
128
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
129
|
+
export const UserParamsSchema = tex.object({ id: tex.string() });
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
`tex` is the only validation engine. Schemas here are also the source for
|
|
133
|
+
OpenAPI generation once `@exisjs/swagger` is installed.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## `src/http/**/service.ts`
|
|
138
|
+
|
|
139
|
+
Plain functions (functional) or an `@Injectable()` class (OOP) — the data/business
|
|
140
|
+
layer, identical concept in both paradigms:
|
|
141
|
+
|
|
142
|
+
```typescript filename="src/http/users/service.ts"
|
|
143
|
+
// Functional
|
|
144
|
+
export async function fetchUser(id: string) {
|
|
145
|
+
// ...
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
```typescript filename="src/http/users/service.ts"
|
|
150
|
+
// OOP
|
|
151
|
+
import { Injectable } from "exisjs/decorators";
|
|
152
|
+
|
|
153
|
+
@Injectable()
|
|
154
|
+
export class UserService {
|
|
155
|
+
async fetchUser(id: string) {
|
|
156
|
+
// ...
|
|
105
157
|
}
|
|
106
158
|
}
|
|
107
159
|
```
|
|
108
160
|
|
|
109
|
-
|
|
110
|
-
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## `src/http/**/boundary.ts`
|
|
164
|
+
|
|
165
|
+
A `boundary.ts` applies to every route in its folder and all subfolders. It has
|
|
166
|
+
two independent halves:
|
|
111
167
|
|
|
112
|
-
|
|
113
|
-
|
|
168
|
+
1. **Config** — pure data, via `defineBoundary()` (functional) or `@Boundary()`
|
|
169
|
+
(OOP argument). CORS, headers, DI providers, excluded paths.
|
|
170
|
+
2. **Pipeline** — real code, auto-detected by function signature. No imports,
|
|
171
|
+
no manual registration required.
|
|
114
172
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
- `src/http/users/settings/route.ts` maps to `/api/users/settings`
|
|
120
|
-
- `src/http/(internal)/debug/route.ts` maps to `/api/debug` (group folders are ignored)
|
|
173
|
+
| Signature | Detected as | Runs |
|
|
174
|
+
| ---------------------------------------------------------------------------- | ------------ | ---------------------------------------------------- |
|
|
175
|
+
| `(req, res, next)` | A chain step | In file/declaration order, before the route |
|
|
176
|
+
| `(ctx, next)` — default export (functional) or a method named `handle` (OOP) | The wrapper | Around all chain steps and the nested route/boundary |
|
|
121
177
|
|
|
122
|
-
###
|
|
123
|
-
Gateways allow you to apply configurations to entire folders. If you place a `gateway.ts` file inside `src/http/admin/`, the Guards, Middlewares, and Providers defined in that Gateway will automatically apply to every single route inside `/admin/*`. Like servers, these can be built using `defineGateway({...})` or the `@Gateway()` decorator.
|
|
178
|
+
### Functional
|
|
124
179
|
|
|
125
|
-
|
|
126
|
-
|
|
180
|
+
```typescript filename="src/http/admin/boundary.ts"
|
|
181
|
+
import { defineBoundary } from "exisjs/router";
|
|
182
|
+
import type { Request, Response, Next, BoundaryContext } from "exisjs/router";
|
|
127
183
|
|
|
128
|
-
|
|
129
|
-
|
|
184
|
+
export const config = defineBoundary({
|
|
185
|
+
cors: { origin: ["https://myapp.com"], credentials: true },
|
|
186
|
+
headers: { "X-Powered-By": "ExisJS" },
|
|
187
|
+
exclude: [{ path: "/health", method: "GET" }],
|
|
188
|
+
});
|
|
130
189
|
|
|
131
|
-
export
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
190
|
+
export function auth(req: Request, res: Response, next: Next) {
|
|
191
|
+
if (!req.headers["x-api-key"]) throw new UnauthorizedError("Missing API key");
|
|
192
|
+
next();
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export default async function (ctx: BoundaryContext, next: Next) {
|
|
196
|
+
try {
|
|
197
|
+
return { success: true, data: await next() };
|
|
198
|
+
} catch (err) {
|
|
199
|
+
return { success: false, error: { message: (err as Error).message } };
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Class-based (OOP)
|
|
205
|
+
|
|
206
|
+
```typescript filename="src/http/admin/boundary.ts"
|
|
207
|
+
import { Boundary } from "exisjs/decorators";
|
|
208
|
+
import type { Request, Response, Next, BoundaryContext } from "exisjs/router";
|
|
209
|
+
|
|
210
|
+
@Boundary({
|
|
211
|
+
cors: { origin: ["https://myapp.com"], credentials: true },
|
|
212
|
+
headers: { "X-Powered-By": "ExisJS" },
|
|
213
|
+
})
|
|
214
|
+
export default class AdminBoundary {
|
|
215
|
+
auth(req: Request, res: Response, next: Next) {
|
|
216
|
+
if (!req.headers["x-api-key"])
|
|
217
|
+
throw new UnauthorizedError("Missing API key");
|
|
218
|
+
next();
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
async handle(ctx: BoundaryContext, next: Next) {
|
|
222
|
+
try {
|
|
223
|
+
return { success: true, data: await next() };
|
|
224
|
+
} catch (err) {
|
|
225
|
+
return { success: false, error: { message: (err as Error).message } };
|
|
226
|
+
}
|
|
136
227
|
}
|
|
137
|
-
}
|
|
228
|
+
}
|
|
138
229
|
```
|
|
139
230
|
|
|
140
|
-
|
|
141
|
-
|
|
231
|
+
A nested folder's `boundary.ts` always runs _inside_ its parent's `next()` —
|
|
232
|
+
pipeline depth mirrors folder depth automatically.
|
|
142
233
|
|
|
143
|
-
|
|
144
|
-
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## `exis.config.ts`
|
|
145
237
|
|
|
146
|
-
|
|
147
|
-
|
|
238
|
+
Global infrastructure: port, SSL, CORS defaults, security headers, and
|
|
239
|
+
official package registration.
|
|
148
240
|
|
|
149
|
-
|
|
150
|
-
|
|
241
|
+
```typescript filename="exis.config.ts"
|
|
242
|
+
import { defineConfig } from "exisjs";
|
|
151
243
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
244
|
+
export default defineConfig({
|
|
245
|
+
port: 3000,
|
|
246
|
+
cors: { origin: "*" },
|
|
247
|
+
// plugins: [] — official packages (@exisjs/database, @exisjs/auth, etc.)
|
|
248
|
+
// are registered here once installed. None are required by default.
|
|
249
|
+
});
|
|
250
|
+
```
|
|
155
251
|
|
|
156
252
|
---
|
|
157
253
|
|
|
158
|
-
##
|
|
254
|
+
## `src/env.ts`
|
|
159
255
|
|
|
160
|
-
|
|
256
|
+
```typescript filename="src/env.ts"
|
|
257
|
+
import { tex } from "exisjs/validator";
|
|
258
|
+
|
|
259
|
+
export const env = tex
|
|
260
|
+
.object({
|
|
261
|
+
PORT: tex.number({ coerce: true, optional: true }),
|
|
262
|
+
NODE_ENV: tex.enum(["development", "production", "test"]),
|
|
263
|
+
})
|
|
264
|
+
.parse(process.env);
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Boot fails immediately if a required variable is missing.
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## `.exis/`
|
|
272
|
+
|
|
273
|
+
Internal build cache — compiled route manifest, used for O(1) boot in
|
|
274
|
+
production. Add to `.gitignore`.
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## Custom Directories
|
|
279
|
+
|
|
280
|
+
Only `src/http/` (routing) and, if `@exisjs/queue` is installed, `src/jobs/`
|
|
281
|
+
are enforced. Everything else — `src/models/`, `src/services/`, `src/dto/` —
|
|
282
|
+
is free-form.
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## The ExisJS CLI
|
|
161
287
|
|
|
162
|
-
- `exis dev
|
|
163
|
-
- `exis build
|
|
164
|
-
- `exis start
|
|
165
|
-
- `exis routes
|
|
166
|
-
- `exis generate <type
|
|
288
|
+
- `exis dev` — dev server with HMR
|
|
289
|
+
- `exis build` — compile for production
|
|
290
|
+
- `exis start` — run compiled output
|
|
291
|
+
- `exis routes` — print every compiled endpoint
|
|
292
|
+
- `exis generate <type>` — scaffold a route, boundary, service, or schema
|
|
293
|
+
- `exis add <package>` — install and wire an official package (e.g. `exis add database`)
|
|
@@ -216,23 +216,6 @@ export default class BooksController {
|
|
|
216
216
|
}
|
|
217
217
|
```
|
|
218
218
|
|
|
219
|
-
### Database Integration (Mongoose)
|
|
220
|
-
|
|
221
|
-
Because the ExisJS Validator is native to the framework, it is tightly coupled with our database and documentation adapters. You can generate Mongoose schemas directly from your validation schemas using `.toMongoSchema()`!
|
|
222
|
-
|
|
223
|
-
```typescript filename="src/models/User.ts"
|
|
224
|
-
import mongoose from 'mongoose'
|
|
225
|
-
import { tex } from 'exisjs/validator'
|
|
226
|
-
|
|
227
|
-
export const UserValidator = tex.object({
|
|
228
|
-
email: tex.email(),
|
|
229
|
-
password: tex.string({ min: 8 }),
|
|
230
|
-
role: tex.enum(['admin', 'user'], { default: 'user' })
|
|
231
|
-
})
|
|
232
|
-
|
|
233
|
-
// Pass the ExisJS Validator directly into Mongoose!
|
|
234
|
-
export const User = mongoose.model('User', new mongoose.Schema(UserValidator.toMongoSchema()))
|
|
235
|
-
```
|
|
236
219
|
|
|
237
220
|
## Error Handling
|
|
238
221
|
|