@kabyeon/nexusjs 0.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +860 -0
- package/dist/auth/auth.controller.d.ts +175 -0
- package/dist/auth/auth.controller.d.ts.map +1 -0
- package/dist/auth/auth.d.ts +47 -0
- package/dist/auth/auth.d.ts.map +1 -0
- package/dist/auth/auth.module.d.ts +34 -0
- package/dist/auth/auth.module.d.ts.map +1 -0
- package/dist/auth/auth.service.d.ts +192 -0
- package/dist/auth/auth.service.d.ts.map +1 -0
- package/dist/auth/decorators/current-user.d.ts +58 -0
- package/dist/auth/decorators/current-user.d.ts.map +1 -0
- package/dist/auth/index.d.ts +43 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +730 -0
- package/dist/auth/index.js.map +25 -0
- package/dist/auth/middleware.d.ts +50 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/types.d.ts +135 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/cache/cache.module.d.ts +22 -0
- package/dist/cache/cache.module.d.ts.map +1 -0
- package/dist/cache/cache.service.d.ts +37 -0
- package/dist/cache/cache.service.d.ts.map +1 -0
- package/dist/cache/index.d.ts +9 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +814 -0
- package/dist/cache/index.js.map +25 -0
- package/dist/cache/stores/drizzle.d.ts +76 -0
- package/dist/cache/stores/drizzle.d.ts.map +1 -0
- package/dist/cache/stores/index.d.ts +10 -0
- package/dist/cache/stores/index.d.ts.map +1 -0
- package/dist/cache/stores/memory.d.ts +34 -0
- package/dist/cache/stores/memory.d.ts.map +1 -0
- package/dist/cache/stores/redis.d.ts +46 -0
- package/dist/cache/stores/redis.d.ts.map +1 -0
- package/dist/cache/types.d.ts +88 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cli/commands/config.d.ts +44 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/db-generate.d.ts +20 -0
- package/dist/cli/commands/db-generate.d.ts.map +1 -0
- package/dist/cli/commands/db-migrate.d.ts +33 -0
- package/dist/cli/commands/db-migrate.d.ts.map +1 -0
- package/dist/cli/commands/db-seed.d.ts +43 -0
- package/dist/cli/commands/db-seed.d.ts.map +1 -0
- package/dist/cli/commands/index.d.ts +11 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/info.d.ts +11 -0
- package/dist/cli/commands/info.d.ts.map +1 -0
- package/dist/cli/commands/init.d.ts +38 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/make-auth.d.ts +17 -0
- package/dist/cli/commands/make-auth.d.ts.map +1 -0
- package/dist/cli/commands/make-controller.d.ts +16 -0
- package/dist/cli/commands/make-controller.d.ts.map +1 -0
- package/dist/cli/commands/make-crud.d.ts +28 -0
- package/dist/cli/commands/make-crud.d.ts.map +1 -0
- package/dist/cli/commands/make-listener.d.ts +15 -0
- package/dist/cli/commands/make-listener.d.ts.map +1 -0
- package/dist/cli/commands/make-middleware.d.ts +7 -0
- package/dist/cli/commands/make-middleware.d.ts.map +1 -0
- package/dist/cli/commands/make-migration.d.ts +21 -0
- package/dist/cli/commands/make-migration.d.ts.map +1 -0
- package/dist/cli/commands/make-model.d.ts +22 -0
- package/dist/cli/commands/make-model.d.ts.map +1 -0
- package/dist/cli/commands/make-module.d.ts +11 -0
- package/dist/cli/commands/make-module.d.ts.map +1 -0
- package/dist/cli/commands/make-queue.d.ts +17 -0
- package/dist/cli/commands/make-queue.d.ts.map +1 -0
- package/dist/cli/commands/make-schedule.d.ts +17 -0
- package/dist/cli/commands/make-schedule.d.ts.map +1 -0
- package/dist/cli/commands/make-service.d.ts +7 -0
- package/dist/cli/commands/make-service.d.ts.map +1 -0
- package/dist/cli/commands/make-session.d.ts +15 -0
- package/dist/cli/commands/make-session.d.ts.map +1 -0
- package/dist/cli/commands/make-validator.d.ts +7 -0
- package/dist/cli/commands/make-validator.d.ts.map +1 -0
- package/dist/cli/commands/new.d.ts +14 -0
- package/dist/cli/commands/new.d.ts.map +1 -0
- package/dist/cli/commands/repl.d.ts +42 -0
- package/dist/cli/commands/repl.d.ts.map +1 -0
- package/dist/cli/commands/route-list.d.ts +12 -0
- package/dist/cli/commands/route-list.d.ts.map +1 -0
- package/dist/cli/core/args.d.ts +29 -0
- package/dist/cli/core/args.d.ts.map +1 -0
- package/dist/cli/core/config.d.ts +137 -0
- package/dist/cli/core/config.d.ts.map +1 -0
- package/dist/cli/core/fs.d.ts +38 -0
- package/dist/cli/core/fs.d.ts.map +1 -0
- package/dist/cli/core/index.d.ts +42 -0
- package/dist/cli/core/index.d.ts.map +1 -0
- package/dist/cli/core/logger.d.ts +46 -0
- package/dist/cli/core/logger.d.ts.map +1 -0
- package/dist/cli/core/loose-json.d.ts +26 -0
- package/dist/cli/core/loose-json.d.ts.map +1 -0
- package/dist/cli/core/prompts.d.ts +22 -0
- package/dist/cli/core/prompts.d.ts.map +1 -0
- package/dist/cli/core/template.d.ts +26 -0
- package/dist/cli/core/template.d.ts.map +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +6136 -0
- package/dist/cli/index.js.map +91 -0
- package/dist/cli/templates/controller/adonis.d.ts +10 -0
- package/dist/cli/templates/controller/adonis.d.ts.map +1 -0
- package/dist/cli/templates/controller/functional.d.ts +9 -0
- package/dist/cli/templates/controller/functional.d.ts.map +1 -0
- package/dist/cli/templates/controller/nest.d.ts +17 -0
- package/dist/cli/templates/controller/nest.d.ts.map +1 -0
- package/dist/cli/templates/crud/controller.d.ts +8 -0
- package/dist/cli/templates/crud/controller.d.ts.map +1 -0
- package/dist/cli/templates/crud/dto.d.ts +8 -0
- package/dist/cli/templates/crud/dto.d.ts.map +1 -0
- package/dist/cli/templates/crud/index.d.ts +33 -0
- package/dist/cli/templates/crud/index.d.ts.map +1 -0
- package/dist/cli/templates/crud/module.d.ts +6 -0
- package/dist/cli/templates/crud/module.d.ts.map +1 -0
- package/dist/cli/templates/crud/test.d.ts +10 -0
- package/dist/cli/templates/crud/test.d.ts.map +1 -0
- package/dist/cli/templates/index.d.ts +39 -0
- package/dist/cli/templates/index.d.ts.map +1 -0
- package/dist/cli/templates/middleware/middleware.d.ts +8 -0
- package/dist/cli/templates/middleware/middleware.d.ts.map +1 -0
- package/dist/cli/templates/migration/drizzle.d.ts +12 -0
- package/dist/cli/templates/migration/drizzle.d.ts.map +1 -0
- package/dist/cli/templates/migration/sql.d.ts +10 -0
- package/dist/cli/templates/migration/sql.d.ts.map +1 -0
- package/dist/cli/templates/model/drizzle-dialect.d.ts +29 -0
- package/dist/cli/templates/model/drizzle-dialect.d.ts.map +1 -0
- package/dist/cli/templates/model/drizzle.d.ts +14 -0
- package/dist/cli/templates/model/drizzle.d.ts.map +1 -0
- package/dist/cli/templates/model/kysely.d.ts +12 -0
- package/dist/cli/templates/model/kysely.d.ts.map +1 -0
- package/dist/cli/templates/model/prisma.d.ts +12 -0
- package/dist/cli/templates/model/prisma.d.ts.map +1 -0
- package/dist/cli/templates/module/module.d.ts +16 -0
- package/dist/cli/templates/module/module.d.ts.map +1 -0
- package/dist/cli/templates/project/drizzle.config.d.ts +12 -0
- package/dist/cli/templates/project/drizzle.config.d.ts.map +1 -0
- package/dist/cli/templates/project/nx.config.d.ts +7 -0
- package/dist/cli/templates/project/nx.config.d.ts.map +1 -0
- package/dist/cli/templates/repository/repository.d.ts +13 -0
- package/dist/cli/templates/repository/repository.d.ts.map +1 -0
- package/dist/cli/templates/service/service.d.ts +12 -0
- package/dist/cli/templates/service/service.d.ts.map +1 -0
- package/dist/cli/templates/validator/validator.d.ts +8 -0
- package/dist/cli/templates/validator/validator.d.ts.map +1 -0
- package/dist/config/config.module.d.ts +39 -0
- package/dist/config/config.module.d.ts.map +1 -0
- package/dist/config/config.service.d.ts +47 -0
- package/dist/config/config.service.d.ts.map +1 -0
- package/dist/config/index.d.ts +39 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +436 -0
- package/dist/config/index.js.map +21 -0
- package/dist/config/types.d.ts +78 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/core/application.d.ts +77 -0
- package/dist/core/application.d.ts.map +1 -0
- package/dist/core/constants.d.ts +48 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/decorators/controller.d.ts +21 -0
- package/dist/core/decorators/controller.d.ts.map +1 -0
- package/dist/core/decorators/http-methods.d.ts +33 -0
- package/dist/core/decorators/http-methods.d.ts.map +1 -0
- package/dist/core/decorators/index.d.ts +12 -0
- package/dist/core/decorators/index.d.ts.map +1 -0
- package/dist/core/decorators/injectable.d.ts +42 -0
- package/dist/core/decorators/injectable.d.ts.map +1 -0
- package/dist/core/decorators/metadata.d.ts +7 -0
- package/dist/core/decorators/metadata.d.ts.map +1 -0
- package/dist/core/decorators/module.d.ts +23 -0
- package/dist/core/decorators/module.d.ts.map +1 -0
- package/dist/core/decorators/params.d.ts +33 -0
- package/dist/core/decorators/params.d.ts.map +1 -0
- package/dist/core/decorators/repository.d.ts +24 -0
- package/dist/core/decorators/repository.d.ts.map +1 -0
- package/dist/core/decorators/validate.d.ts +21 -0
- package/dist/core/decorators/validate.d.ts.map +1 -0
- package/dist/core/di/container.d.ts +70 -0
- package/dist/core/di/container.d.ts.map +1 -0
- package/dist/core/di/index.d.ts +9 -0
- package/dist/core/di/index.d.ts.map +1 -0
- package/dist/core/di/request-middleware.d.ts +36 -0
- package/dist/core/di/request-middleware.d.ts.map +1 -0
- package/dist/core/di/request-scope.d.ts +45 -0
- package/dist/core/di/request-scope.d.ts.map +1 -0
- package/dist/core/di/scanner.d.ts +36 -0
- package/dist/core/di/scanner.d.ts.map +1 -0
- package/dist/core/di/tokens.d.ts +98 -0
- package/dist/core/di/tokens.d.ts.map +1 -0
- package/dist/core/http/context.d.ts +30 -0
- package/dist/core/http/context.d.ts.map +1 -0
- package/dist/core/http/index.d.ts +8 -0
- package/dist/core/http/index.d.ts.map +1 -0
- package/dist/core/http/middleware.d.ts +31 -0
- package/dist/core/http/middleware.d.ts.map +1 -0
- package/dist/core/http/router.d.ts +46 -0
- package/dist/core/http/router.d.ts.map +1 -0
- package/dist/core/http/server.d.ts +58 -0
- package/dist/core/http/server.d.ts.map +1 -0
- package/dist/core/index.d.ts +20 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/orm/drizzle-adapter.d.ts +73 -0
- package/dist/core/orm/drizzle-adapter.d.ts.map +1 -0
- package/dist/core/orm/index.d.ts +5 -0
- package/dist/core/orm/index.d.ts.map +1 -0
- package/dist/core/runtime/bun.d.ts +13 -0
- package/dist/core/runtime/bun.d.ts.map +1 -0
- package/dist/core/runtime/cloudflare.d.ts +18 -0
- package/dist/core/runtime/cloudflare.d.ts.map +1 -0
- package/dist/core/runtime/index.d.ts +11 -0
- package/dist/core/runtime/index.d.ts.map +1 -0
- package/dist/core/runtime/node.d.ts +10 -0
- package/dist/core/runtime/node.d.ts.map +1 -0
- package/dist/core/validation/index.d.ts +5 -0
- package/dist/core/validation/index.d.ts.map +1 -0
- package/dist/core/validation/validator.d.ts +46 -0
- package/dist/core/validation/validator.d.ts.map +1 -0
- package/dist/crypto/encryption.d.ts +71 -0
- package/dist/crypto/encryption.d.ts.map +1 -0
- package/dist/crypto/hash.d.ts +52 -0
- package/dist/crypto/hash.d.ts.map +1 -0
- package/dist/crypto/index.d.ts +49 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +533 -0
- package/dist/crypto/index.js.map +14 -0
- package/dist/crypto/module.d.ts +28 -0
- package/dist/crypto/module.d.ts.map +1 -0
- package/dist/crypto/types.d.ts +81 -0
- package/dist/crypto/types.d.ts.map +1 -0
- package/dist/drive/drive.module.d.ts +20 -0
- package/dist/drive/drive.module.d.ts.map +1 -0
- package/dist/drive/drive.service.d.ts +21 -0
- package/dist/drive/drive.service.d.ts.map +1 -0
- package/dist/drive/drivers/index.d.ts +9 -0
- package/dist/drive/drivers/index.d.ts.map +1 -0
- package/dist/drive/drivers/local.d.ts +24 -0
- package/dist/drive/drivers/local.d.ts.map +1 -0
- package/dist/drive/drivers/memory.d.ts +19 -0
- package/dist/drive/drivers/memory.d.ts.map +1 -0
- package/dist/drive/drivers/s3.d.ts +44 -0
- package/dist/drive/drivers/s3.d.ts.map +1 -0
- package/dist/drive/index.d.ts +9 -0
- package/dist/drive/index.d.ts.map +1 -0
- package/dist/drive/index.js +714 -0
- package/dist/drive/index.js.map +25 -0
- package/dist/drive/types.d.ts +97 -0
- package/dist/drive/types.d.ts.map +1 -0
- package/dist/drizzle/decorators/columns.d.ts +16 -0
- package/dist/drizzle/decorators/columns.d.ts.map +1 -0
- package/dist/drizzle/decorators/index.d.ts +6 -0
- package/dist/drizzle/decorators/index.d.ts.map +1 -0
- package/dist/drizzle/drivers/base.d.ts +32 -0
- package/dist/drizzle/drivers/base.d.ts.map +1 -0
- package/dist/drizzle/drivers/bun-sqlite.d.ts +6 -0
- package/dist/drizzle/drivers/bun-sqlite.d.ts.map +1 -0
- package/dist/drizzle/drivers/d1.d.ts +7 -0
- package/dist/drizzle/drivers/d1.d.ts.map +1 -0
- package/dist/drizzle/drivers/index.d.ts +14 -0
- package/dist/drizzle/drivers/index.d.ts.map +1 -0
- package/dist/drizzle/drivers/mysql.d.ts +6 -0
- package/dist/drizzle/drivers/mysql.d.ts.map +1 -0
- package/dist/drizzle/drivers/postgres.d.ts +12 -0
- package/dist/drizzle/drivers/postgres.d.ts.map +1 -0
- package/dist/drizzle/drivers/sqlite.d.ts +8 -0
- package/dist/drizzle/drivers/sqlite.d.ts.map +1 -0
- package/dist/drizzle/drizzle.module.d.ts +29 -0
- package/dist/drizzle/drizzle.module.d.ts.map +1 -0
- package/dist/drizzle/drizzle.service.d.ts +52 -0
- package/dist/drizzle/drizzle.service.d.ts.map +1 -0
- package/dist/drizzle/index.d.ts +13 -0
- package/dist/drizzle/index.d.ts.map +1 -0
- package/dist/drizzle/index.js +979 -0
- package/dist/drizzle/index.js.map +32 -0
- package/dist/drizzle/model.d.ts +26 -0
- package/dist/drizzle/model.d.ts.map +1 -0
- package/dist/drizzle/raw-query.d.ts +41 -0
- package/dist/drizzle/raw-query.d.ts.map +1 -0
- package/dist/drizzle/repository/index.d.ts +6 -0
- package/dist/drizzle/repository/index.d.ts.map +1 -0
- package/dist/drizzle/repository/repository.d.ts +60 -0
- package/dist/drizzle/repository/repository.d.ts.map +1 -0
- package/dist/drizzle/types.d.ts +160 -0
- package/dist/drizzle/types.d.ts.map +1 -0
- package/dist/events/decorators/on-event.d.ts +49 -0
- package/dist/events/decorators/on-event.d.ts.map +1 -0
- package/dist/events/emitter.d.ts +52 -0
- package/dist/events/emitter.d.ts.map +1 -0
- package/dist/events/event.service.d.ts +27 -0
- package/dist/events/event.service.d.ts.map +1 -0
- package/dist/events/events.module.d.ts +35 -0
- package/dist/events/events.module.d.ts.map +1 -0
- package/dist/events/index.d.ts +43 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +646 -0
- package/dist/events/index.js.map +23 -0
- package/dist/events/types.d.ts +120 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/grpc/decorators.d.ts +34 -0
- package/dist/grpc/decorators.d.ts.map +1 -0
- package/dist/grpc/index.d.ts +70 -0
- package/dist/grpc/index.d.ts.map +1 -0
- package/dist/grpc/index.js +528 -0
- package/dist/grpc/index.js.map +22 -0
- package/dist/grpc/module.d.ts +32 -0
- package/dist/grpc/module.d.ts.map +1 -0
- package/dist/grpc/service.d.ts +60 -0
- package/dist/grpc/service.d.ts.map +1 -0
- package/dist/grpc/types.d.ts +79 -0
- package/dist/grpc/types.d.ts.map +1 -0
- package/dist/health/health.controller.d.ts +61 -0
- package/dist/health/health.controller.d.ts.map +1 -0
- package/dist/health/health.module.d.ts +29 -0
- package/dist/health/health.module.d.ts.map +1 -0
- package/dist/health/health.service.d.ts +34 -0
- package/dist/health/health.service.d.ts.map +1 -0
- package/dist/health/index.d.ts +38 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js +599 -0
- package/dist/health/index.js.map +25 -0
- package/dist/health/indicators/drizzle.d.ts +18 -0
- package/dist/health/indicators/drizzle.d.ts.map +1 -0
- package/dist/health/indicators/index.d.ts +59 -0
- package/dist/health/indicators/index.d.ts.map +1 -0
- package/dist/health/types.d.ts +105 -0
- package/dist/health/types.d.ts.map +1 -0
- package/dist/i18n/decorators.d.ts +14 -0
- package/dist/i18n/decorators.d.ts.map +1 -0
- package/dist/i18n/index.d.ts +48 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +589 -0
- package/dist/i18n/index.js.map +17 -0
- package/dist/i18n/middleware.d.ts +26 -0
- package/dist/i18n/middleware.d.ts.map +1 -0
- package/dist/i18n/module.d.ts +39 -0
- package/dist/i18n/module.d.ts.map +1 -0
- package/dist/i18n/service.d.ts +130 -0
- package/dist/i18n/service.d.ts.map +1 -0
- package/dist/i18n/types.d.ts +65 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2056 -0
- package/dist/index.js.map +53 -0
- package/dist/limiter/backends/drizzle.d.ts +40 -0
- package/dist/limiter/backends/drizzle.d.ts.map +1 -0
- package/dist/limiter/backends/index.d.ts +6 -0
- package/dist/limiter/backends/index.d.ts.map +1 -0
- package/dist/limiter/backends/memory.d.ts +28 -0
- package/dist/limiter/backends/memory.d.ts.map +1 -0
- package/dist/limiter/index.d.ts +9 -0
- package/dist/limiter/index.d.ts.map +1 -0
- package/dist/limiter/index.js +640 -0
- package/dist/limiter/index.js.map +25 -0
- package/dist/limiter/limiter.middleware.d.ts +11 -0
- package/dist/limiter/limiter.middleware.d.ts.map +1 -0
- package/dist/limiter/limiter.module.d.ts +23 -0
- package/dist/limiter/limiter.module.d.ts.map +1 -0
- package/dist/limiter/limiter.service.d.ts +18 -0
- package/dist/limiter/limiter.service.d.ts.map +1 -0
- package/dist/limiter/types.d.ts +99 -0
- package/dist/limiter/types.d.ts.map +1 -0
- package/dist/logger/index.d.ts +36 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +538 -0
- package/dist/logger/index.js.map +22 -0
- package/dist/logger/logger.module.d.ts +35 -0
- package/dist/logger/logger.module.d.ts.map +1 -0
- package/dist/logger/logger.service.d.ts +55 -0
- package/dist/logger/logger.service.d.ts.map +1 -0
- package/dist/logger/transports/index.d.ts +35 -0
- package/dist/logger/transports/index.d.ts.map +1 -0
- package/dist/logger/types.d.ts +58 -0
- package/dist/logger/types.d.ts.map +1 -0
- package/dist/mail/index.d.ts +9 -0
- package/dist/mail/index.d.ts.map +1 -0
- package/dist/mail/index.js +479 -0
- package/dist/mail/index.js.map +25 -0
- package/dist/mail/mail.module.d.ts +21 -0
- package/dist/mail/mail.module.d.ts.map +1 -0
- package/dist/mail/mail.service.d.ts +18 -0
- package/dist/mail/mail.service.d.ts.map +1 -0
- package/dist/mail/transports/file.d.ts +19 -0
- package/dist/mail/transports/file.d.ts.map +1 -0
- package/dist/mail/transports/index.d.ts +9 -0
- package/dist/mail/transports/index.d.ts.map +1 -0
- package/dist/mail/transports/null.d.ts +11 -0
- package/dist/mail/transports/null.d.ts.map +1 -0
- package/dist/mail/transports/smtp.d.ts +40 -0
- package/dist/mail/transports/smtp.d.ts.map +1 -0
- package/dist/mail/types.d.ts +73 -0
- package/dist/mail/types.d.ts.map +1 -0
- package/dist/metrics/controller.d.ts +27 -0
- package/dist/metrics/controller.d.ts.map +1 -0
- package/dist/metrics/counter.d.ts +36 -0
- package/dist/metrics/counter.d.ts.map +1 -0
- package/dist/metrics/decorators/counted.d.ts +26 -0
- package/dist/metrics/decorators/counted.d.ts.map +1 -0
- package/dist/metrics/decorators/index.d.ts +3 -0
- package/dist/metrics/decorators/index.d.ts.map +1 -0
- package/dist/metrics/decorators/timed.d.ts +25 -0
- package/dist/metrics/decorators/timed.d.ts.map +1 -0
- package/dist/metrics/gauge.d.ts +38 -0
- package/dist/metrics/gauge.d.ts.map +1 -0
- package/dist/metrics/histogram.d.ts +52 -0
- package/dist/metrics/histogram.d.ts.map +1 -0
- package/dist/metrics/index.d.ts +35 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +1033 -0
- package/dist/metrics/index.js.map +21 -0
- package/dist/metrics/module.d.ts +33 -0
- package/dist/metrics/module.d.ts.map +1 -0
- package/dist/metrics/registry.d.ts +52 -0
- package/dist/metrics/registry.d.ts.map +1 -0
- package/dist/metrics/service.d.ts +42 -0
- package/dist/metrics/service.d.ts.map +1 -0
- package/dist/metrics/summary.d.ts +50 -0
- package/dist/metrics/summary.d.ts.map +1 -0
- package/dist/metrics/types.d.ts +115 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/openapi/decorators/body.d.ts +9 -0
- package/dist/openapi/decorators/body.d.ts.map +1 -0
- package/dist/openapi/decorators/index.d.ts +11 -0
- package/dist/openapi/decorators/index.d.ts.map +1 -0
- package/dist/openapi/decorators/operation.d.ts +9 -0
- package/dist/openapi/decorators/operation.d.ts.map +1 -0
- package/dist/openapi/decorators/param.d.ts +17 -0
- package/dist/openapi/decorators/param.d.ts.map +1 -0
- package/dist/openapi/decorators/property.d.ts +24 -0
- package/dist/openapi/decorators/property.d.ts.map +1 -0
- package/dist/openapi/decorators/response.d.ts +10 -0
- package/dist/openapi/decorators/response.d.ts.map +1 -0
- package/dist/openapi/decorators/security.d.ts +9 -0
- package/dist/openapi/decorators/security.d.ts.map +1 -0
- package/dist/openapi/decorators/tags.d.ts +2 -0
- package/dist/openapi/decorators/tags.d.ts.map +1 -0
- package/dist/openapi/index.d.ts +10 -0
- package/dist/openapi/index.d.ts.map +1 -0
- package/dist/openapi/index.js +974 -0
- package/dist/openapi/index.js.map +31 -0
- package/dist/openapi/openapi.module.d.ts +46 -0
- package/dist/openapi/openapi.module.d.ts.map +1 -0
- package/dist/openapi/openapi.service.d.ts +55 -0
- package/dist/openapi/openapi.service.d.ts.map +1 -0
- package/dist/openapi/scalar.d.ts +16 -0
- package/dist/openapi/scalar.d.ts.map +1 -0
- package/dist/openapi/types.d.ts +266 -0
- package/dist/openapi/types.d.ts.map +1 -0
- package/dist/openapi/zod-to-json-schema.d.ts +34 -0
- package/dist/openapi/zod-to-json-schema.d.ts.map +1 -0
- package/dist/package.json +59 -0
- package/dist/queue/backends/bullmq.d.ts +41 -0
- package/dist/queue/backends/bullmq.d.ts.map +1 -0
- package/dist/queue/backends/cloudflare.d.ts +84 -0
- package/dist/queue/backends/cloudflare.d.ts.map +1 -0
- package/dist/queue/backends/index.d.ts +7 -0
- package/dist/queue/backends/index.d.ts.map +1 -0
- package/dist/queue/backends/memory.d.ts +24 -0
- package/dist/queue/backends/memory.d.ts.map +1 -0
- package/dist/queue/decorators/on-queue-ready.d.ts +43 -0
- package/dist/queue/decorators/on-queue-ready.d.ts.map +1 -0
- package/dist/queue/index.d.ts +57 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +961 -0
- package/dist/queue/index.js.map +25 -0
- package/dist/queue/queue.module.d.ts +46 -0
- package/dist/queue/queue.module.d.ts.map +1 -0
- package/dist/queue/queue.service.d.ts +61 -0
- package/dist/queue/queue.service.d.ts.map +1 -0
- package/dist/queue/types.d.ts +204 -0
- package/dist/queue/types.d.ts.map +1 -0
- package/dist/redis/adapters/bun.d.ts +27 -0
- package/dist/redis/adapters/bun.d.ts.map +1 -0
- package/dist/redis/adapters/cloudflare.d.ts +51 -0
- package/dist/redis/adapters/cloudflare.d.ts.map +1 -0
- package/dist/redis/adapters/index.d.ts +29 -0
- package/dist/redis/adapters/index.d.ts.map +1 -0
- package/dist/redis/adapters/memory.d.ts +28 -0
- package/dist/redis/adapters/memory.d.ts.map +1 -0
- package/dist/redis/adapters/node.d.ts +36 -0
- package/dist/redis/adapters/node.d.ts.map +1 -0
- package/dist/redis/index.d.ts +33 -0
- package/dist/redis/index.d.ts.map +1 -0
- package/dist/redis/index.js +667 -0
- package/dist/redis/index.js.map +25 -0
- package/dist/redis/module.d.ts +32 -0
- package/dist/redis/module.d.ts.map +1 -0
- package/dist/redis/types.d.ts +146 -0
- package/dist/redis/types.d.ts.map +1 -0
- package/dist/schedule/backends/cloudflare.d.ts +55 -0
- package/dist/schedule/backends/cloudflare.d.ts.map +1 -0
- package/dist/schedule/backends/index.d.ts +3 -0
- package/dist/schedule/backends/index.d.ts.map +1 -0
- package/dist/schedule/backends/memory.d.ts +39 -0
- package/dist/schedule/backends/memory.d.ts.map +1 -0
- package/dist/schedule/cron-parser.d.ts +48 -0
- package/dist/schedule/cron-parser.d.ts.map +1 -0
- package/dist/schedule/decorators/cron.d.ts +71 -0
- package/dist/schedule/decorators/cron.d.ts.map +1 -0
- package/dist/schedule/index.d.ts +51 -0
- package/dist/schedule/index.d.ts.map +1 -0
- package/dist/schedule/index.js +1108 -0
- package/dist/schedule/index.js.map +25 -0
- package/dist/schedule/schedule.module.d.ts +44 -0
- package/dist/schedule/schedule.module.d.ts.map +1 -0
- package/dist/schedule/schedule.service.d.ts +51 -0
- package/dist/schedule/schedule.service.d.ts.map +1 -0
- package/dist/schedule/types.d.ts +150 -0
- package/dist/schedule/types.d.ts.map +1 -0
- package/dist/session/backends/cookie.d.ts +56 -0
- package/dist/session/backends/cookie.d.ts.map +1 -0
- package/dist/session/backends/drizzle.d.ts +65 -0
- package/dist/session/backends/drizzle.d.ts.map +1 -0
- package/dist/session/backends/index.d.ts +6 -0
- package/dist/session/backends/index.d.ts.map +1 -0
- package/dist/session/backends/memory.d.ts +32 -0
- package/dist/session/backends/memory.d.ts.map +1 -0
- package/dist/session/backends/redis.d.ts +53 -0
- package/dist/session/backends/redis.d.ts.map +1 -0
- package/dist/session/decorators/current-session.d.ts +56 -0
- package/dist/session/decorators/current-session.d.ts.map +1 -0
- package/dist/session/index.d.ts +42 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +1498 -0
- package/dist/session/index.js.map +28 -0
- package/dist/session/session-middleware.d.ts +29 -0
- package/dist/session/session-middleware.d.ts.map +1 -0
- package/dist/session/session.module.d.ts +35 -0
- package/dist/session/session.module.d.ts.map +1 -0
- package/dist/session/session.service.d.ts +49 -0
- package/dist/session/session.service.d.ts.map +1 -0
- package/dist/session/types.d.ts +201 -0
- package/dist/session/types.d.ts.map +1 -0
- package/dist/shield/guards/csrf.d.ts +33 -0
- package/dist/shield/guards/csrf.d.ts.map +1 -0
- package/dist/shield/guards/headers.d.ts +22 -0
- package/dist/shield/guards/headers.d.ts.map +1 -0
- package/dist/shield/guards/index.d.ts +6 -0
- package/dist/shield/guards/index.d.ts.map +1 -0
- package/dist/shield/index.d.ts +8 -0
- package/dist/shield/index.d.ts.map +1 -0
- package/dist/shield/index.js +728 -0
- package/dist/shield/index.js.map +25 -0
- package/dist/shield/shield.module.d.ts +25 -0
- package/dist/shield/shield.module.d.ts.map +1 -0
- package/dist/shield/shield.service.d.ts +21 -0
- package/dist/shield/shield.service.d.ts.map +1 -0
- package/dist/shield/types.d.ts +95 -0
- package/dist/shield/types.d.ts.map +1 -0
- package/dist/sse/index.d.ts +7 -0
- package/dist/sse/index.d.ts.map +1 -0
- package/dist/sse/index.js +214 -0
- package/dist/sse/index.js.map +13 -0
- package/dist/sse/sse-stream.d.ts +46 -0
- package/dist/sse/sse-stream.d.ts.map +1 -0
- package/dist/sse/sse.d.ts +24 -0
- package/dist/sse/sse.d.ts.map +1 -0
- package/dist/sse/types.d.ts +84 -0
- package/dist/sse/types.d.ts.map +1 -0
- package/dist/static/index.d.ts +41 -0
- package/dist/static/index.d.ts.map +1 -0
- package/dist/static/index.js +313 -0
- package/dist/static/index.js.map +13 -0
- package/dist/static/static.module.d.ts +41 -0
- package/dist/static/static.module.d.ts.map +1 -0
- package/dist/static/static.service.d.ts +38 -0
- package/dist/static/static.service.d.ts.map +1 -0
- package/dist/tracing/decorators/index.d.ts +2 -0
- package/dist/tracing/decorators/index.d.ts.map +1 -0
- package/dist/tracing/decorators/trace.d.ts +37 -0
- package/dist/tracing/decorators/trace.d.ts.map +1 -0
- package/dist/tracing/hono-instrumentation.d.ts +21 -0
- package/dist/tracing/hono-instrumentation.d.ts.map +1 -0
- package/dist/tracing/index.d.ts +29 -0
- package/dist/tracing/index.d.ts.map +1 -0
- package/dist/tracing/index.js +782 -0
- package/dist/tracing/index.js.map +24 -0
- package/dist/tracing/module.d.ts +45 -0
- package/dist/tracing/module.d.ts.map +1 -0
- package/dist/tracing/propagation.d.ts +53 -0
- package/dist/tracing/propagation.d.ts.map +1 -0
- package/dist/tracing/service.d.ts +95 -0
- package/dist/tracing/service.d.ts.map +1 -0
- package/dist/tracing/types.d.ts +90 -0
- package/dist/tracing/types.d.ts.map +1 -0
- package/dist/upload/decorators/index.d.ts +6 -0
- package/dist/upload/decorators/index.d.ts.map +1 -0
- package/dist/upload/decorators/upload.d.ts +16 -0
- package/dist/upload/decorators/upload.d.ts.map +1 -0
- package/dist/upload/decorators/uploaded-file.d.ts +10 -0
- package/dist/upload/decorators/uploaded-file.d.ts.map +1 -0
- package/dist/upload/index.d.ts +9 -0
- package/dist/upload/index.d.ts.map +1 -0
- package/dist/upload/index.js +553 -0
- package/dist/upload/index.js.map +25 -0
- package/dist/upload/types.d.ts +103 -0
- package/dist/upload/types.d.ts.map +1 -0
- package/dist/upload/upload.middleware.d.ts +15 -0
- package/dist/upload/upload.middleware.d.ts.map +1 -0
- package/dist/upload/upload.module.d.ts +33 -0
- package/dist/upload/upload.module.d.ts.map +1 -0
- package/dist/upload/upload.service.d.ts +29 -0
- package/dist/upload/upload.service.d.ts.map +1 -0
- package/dist/view/edge.d.ts +23 -0
- package/dist/view/edge.d.ts.map +1 -0
- package/dist/view/eta.d.ts +30 -0
- package/dist/view/eta.d.ts.map +1 -0
- package/dist/view/index.d.ts +34 -0
- package/dist/view/index.d.ts.map +1 -0
- package/dist/view/index.js +240 -0
- package/dist/view/index.js.map +14 -0
- package/dist/view/inertia/default-ssr.d.ts +15 -0
- package/dist/view/inertia/default-ssr.d.ts.map +1 -0
- package/dist/view/inertia/form-helper.d.ts +102 -0
- package/dist/view/inertia/form-helper.d.ts.map +1 -0
- package/dist/view/inertia/form-middleware.d.ts +53 -0
- package/dist/view/inertia/form-middleware.d.ts.map +1 -0
- package/dist/view/inertia/helpers.d.ts +149 -0
- package/dist/view/inertia/helpers.d.ts.map +1 -0
- package/dist/view/inertia/index.d.ts +18 -0
- package/dist/view/inertia/index.d.ts.map +1 -0
- package/dist/view/inertia/inertia-adapter.d.ts +93 -0
- package/dist/view/inertia/inertia-adapter.d.ts.map +1 -0
- package/dist/view/inertia/inertia-response.d.ts +51 -0
- package/dist/view/inertia/inertia-response.d.ts.map +1 -0
- package/dist/view/inertia/ssr/index.d.ts +13 -0
- package/dist/view/inertia/ssr/index.d.ts.map +1 -0
- package/dist/view/inertia/ssr/react-adapter.d.ts +33 -0
- package/dist/view/inertia/ssr/react-adapter.d.ts.map +1 -0
- package/dist/view/inertia/ssr/registry.d.ts +42 -0
- package/dist/view/inertia/ssr/registry.d.ts.map +1 -0
- package/dist/view/inertia/ssr/solid-adapter.d.ts +31 -0
- package/dist/view/inertia/ssr/solid-adapter.d.ts.map +1 -0
- package/dist/view/inertia/ssr/svelte-adapter.d.ts +31 -0
- package/dist/view/inertia/ssr/svelte-adapter.d.ts.map +1 -0
- package/dist/view/inertia/ssr/vue-adapter.d.ts +26 -0
- package/dist/view/inertia/ssr/vue-adapter.d.ts.map +1 -0
- package/dist/view/inertia/types.d.ts +131 -0
- package/dist/view/inertia/types.d.ts.map +1 -0
- package/dist/view/rendu.d.ts +11 -0
- package/dist/view/rendu.d.ts.map +1 -0
- package/dist/view/types.d.ts +52 -0
- package/dist/view/types.d.ts.map +1 -0
- package/dist/view/view-engine.d.ts +28 -0
- package/dist/view/view-engine.d.ts.map +1 -0
- package/dist/ws/client.d.ts +42 -0
- package/dist/ws/client.d.ts.map +1 -0
- package/dist/ws/decorators.d.ts +44 -0
- package/dist/ws/decorators.d.ts.map +1 -0
- package/dist/ws/index.d.ts +57 -0
- package/dist/ws/index.d.ts.map +1 -0
- package/dist/ws/index.js +796 -0
- package/dist/ws/index.js.map +26 -0
- package/dist/ws/module.d.ts +48 -0
- package/dist/ws/module.d.ts.map +1 -0
- package/dist/ws/runtime/bun.d.ts +41 -0
- package/dist/ws/runtime/bun.d.ts.map +1 -0
- package/dist/ws/runtime/index.d.ts +14 -0
- package/dist/ws/runtime/index.d.ts.map +1 -0
- package/dist/ws/runtime/node.d.ts +46 -0
- package/dist/ws/runtime/node.d.ts.map +1 -0
- package/dist/ws/runtime/types.d.ts +18 -0
- package/dist/ws/runtime/types.d.ts.map +1 -0
- package/dist/ws/service.d.ts +65 -0
- package/dist/ws/service.d.ts.map +1 -0
- package/dist/ws/types.d.ts +77 -0
- package/dist/ws/types.d.ts.map +1 -0
- package/package.json +262 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/core/constants.ts", "../src/core/decorators/controller.ts", "../src/core/decorators/http-methods.ts", "../src/core/decorators/params.ts", "../src/core/decorators/validate.ts", "../src/ws/service.ts", "../src/ws/client.ts", "../src/core/decorators/module.ts", "../src/core/decorators/index.ts", "../src/core/decorators/injectable.ts", "../src/core/decorators/repository.ts", "../src/core/decorators/metadata.ts", "../src/ws/runtime/index.ts", "../src/ws/module.ts", "../src/ws/decorators.ts", "../src/ws/runtime/bun.ts", "../src/ws/runtime/node.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Metadata keys used by reflect-metadata for storing decorator data.\n *\n * These constants are the contract between decorators and the framework\n * core (DI container, router, validator).\n */\nexport const METADATA_KEY = {\n\t/** Marks a class as a Nest-style controller, stores route prefix. */\n\tCONTROLLER: \"nexus:controller\",\n\n\t/** Marks a class as an injectable provider. */\n\tINJECTABLE: \"nexus:injectable\",\n\n\t/** Marks a class as a repository. */\n\tREPOSITORY: \"nexus:repository\",\n\n\t/** Marks a class as a module. Stores module options. */\n\tMODULE: \"nexus:module\",\n\n\t/** HTTP method routes registered on a controller (Get/Post/...). */\n\tROUTES: \"nexus:routes\",\n\n\t/** Method parameter type metadata (body/query/param/headers/ctx). */\n\tPARAMS: \"nexus:params\",\n\n\t/** Validation schema per method (Zod schema or class). */\n\tVALIDATE: \"nexus:validate\",\n\n\t/** Class-level design:paramtypes (built-in). */\n\tPARAMTYPES: \"design:paramtypes\",\n\n\t/** Class-level design:type (built-in). */\n\tTYPE: \"design:type\",\n\n\t/** Class-level design:returntype (built-in). */\n\tRETURNTYPE: \"design:returntype\",\n\n\t/** Provider token to inject for a parameter (for custom tokens). */\n\tINJECT: \"nexus:inject\",\n} as const;\n\nexport type MetadataKey = (typeof METADATA_KEY)[keyof typeof METADATA_KEY];\n\n/** Available parameter decorator locations. */\nexport const PARAM_TYPES = {\n\tREQUEST: 0,\n\tRESPONSE: 1,\n\tNEXT: 2,\n\tBODY: 3,\n\tQUERY: 4,\n\tPARAM: 5,\n\tHEADERS: 6,\n\tCTX: 7,\n\tUSER: 8,\n} as const;\n\nexport type ParamType = (typeof PARAM_TYPES)[keyof typeof PARAM_TYPES];\n\n/** HTTP methods supported by the router. */\nexport const HTTP_METHODS = [\n\t\"GET\",\n\t\"POST\",\n\t\"PUT\",\n\t\"DELETE\",\n\t\"PATCH\",\n\t\"OPTIONS\",\n\t\"HEAD\",\n] as const;\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n",
|
|
6
|
+
"/**\n * @Controller decorator.\n *\n * Marks a class as a controller and registers a route prefix.\n * Routes inside the controller class are decorated with @Get/@Post/etc.\n *\n * @example\n * ```ts\n * @Controller('/users')\n * class UserController {\n * @Get('/')\n * list() { ... }\n * }\n * ```\n */\nimport \"reflect-metadata\";\nimport { METADATA_KEY } from \"../constants.js\";\nimport type { ControllerMetadata } from \"../di/tokens.js\";\n\nexport function Controller(prefix: string = \"/\"): ClassDecorator {\n\treturn (target: object) => {\n\t\tconst normalized = normalizePrefix(prefix);\n\t\tconst meta: ControllerMetadata = { prefix: normalized };\n\t\tReflect.defineMetadata(METADATA_KEY.CONTROLLER, meta, target);\n\t};\n}\n\nexport function getControllerMetadata(target: any): ControllerMetadata {\n\treturn (\n\t\tReflect.getMetadata(METADATA_KEY.CONTROLLER, target) ?? { prefix: \"/\" }\n\t);\n}\n\nexport function isController(target: any): boolean {\n\treturn Reflect.hasMetadata(METADATA_KEY.CONTROLLER, target);\n}\n\n/**\n * Normalize a prefix so we can safely concatenate it with handler paths.\n * - Empty string becomes '/'.\n * - Trailing slashes are trimmed (we re-add them on the join).\n * - No leading slash is added; the router always joins with `/`.\n */\nfunction normalizePrefix(prefix: string): string {\n\tif (!prefix) return \"\";\n\tif (prefix !== \"/\" && prefix.endsWith(\"/\")) {\n\t\treturn prefix.slice(0, -1);\n\t}\n\treturn prefix;\n}\n",
|
|
7
|
+
"/**\n * HTTP method decorators.\n *\n * `@Get`, `@Post`, `@Put`, `@Delete`, `@Patch`, `@Options`, `@Head` mark a\n * controller method as a route handler. The path argument is appended to\n * the controller's prefix.\n *\n * @example\n * ```ts\n * @Controller('/users')\n * class UserController {\n * @Get('/')\n * list() {}\n *\n * @Post('/')\n * create(@Body() body: CreateUserDto) {}\n * }\n * ```\n */\nimport \"reflect-metadata\";\nimport { HTTP_METHODS, METADATA_KEY, type HttpMethod } from \"../constants.js\";\nimport type { RouteMetadata } from \"../di/tokens.js\";\n\nfunction defineRoute(method: HttpMethod, path: string): MethodDecorator {\n\treturn (\n\t\ttarget: object,\n\t\tpropertyKey: string | symbol,\n\t\tdescriptor: PropertyDescriptor,\n\t) => {\n\t\tconst routes: RouteMetadata[] =\n\t\t\tReflect.getMetadata(METADATA_KEY.ROUTES, target.constructor) ?? [];\n\n\t\troutes.push({\n\t\t\tmethod,\n\t\t\tpath: normalizePath(path),\n\t\t\tpropertyKey,\n\t\t\thandler: descriptor.value,\n\t\t});\n\n\t\tReflect.defineMetadata(METADATA_KEY.ROUTES, routes, target.constructor);\n\t};\n}\n\nfunction normalizePath(path: string): string {\n\tif (!path || path === \"/\") return \"/\";\n\treturn path.startsWith(\"/\") ? path : `/${path}`;\n}\n\nexport const Get = (path: string = \"/\") => defineRoute(\"GET\", path);\nexport const Post = (path: string = \"/\") => defineRoute(\"POST\", path);\nexport const Put = (path: string = \"/\") => defineRoute(\"PUT\", path);\nexport const Delete = (path: string = \"/\") => defineRoute(\"DELETE\", path);\nexport const Patch = (path: string = \"/\") => defineRoute(\"PATCH\", path);\nexport const Options = (path: string = \"/\") => defineRoute(\"OPTIONS\", path);\nexport const Head = (path: string = \"/\") => defineRoute(\"HEAD\", path);\n\nexport function getRoutes(target: any): RouteMetadata[] {\n\treturn Reflect.getMetadata(METADATA_KEY.ROUTES, target) ?? [];\n}\n\nexport { HTTP_METHODS };\nexport type { RouteMetadata };\n",
|
|
8
|
+
"/**\n * Parameter decorators.\n *\n * These mark a controller method argument as a source of request data:\n * - `@Req()` → Hono context\n * - `@Res()` → Response helper\n * - `@Next()` → next() callback (for middleware-style handlers)\n * - `@Body()` → request body (parsed)\n * - `@Query('key')` → a single query param, or full query object\n * - `@Param('key')` → a single path param, or full params object\n * - `@Headers('k')` → a single header, or full headers object\n * - `@Ctx()` → Hono context (alias for @Req)\n * - `@User()` → authenticated user (resolved via auth provider)\n *\n * The metadata is read by the router at mount time to build the\n * handler invocation list.\n */\nimport \"reflect-metadata\";\nimport { METADATA_KEY, PARAM_TYPES } from \"../constants.js\";\nimport type { ParamMetadata } from \"../di/tokens.js\";\n\nexport function createParamDecorator(\n\ttype: number,\n\tdata?: string | object,\n): ParameterDecorator {\n\treturn (\n\t\ttarget: object,\n\t\tpropertyKey: string | symbol | undefined,\n\t\tparameterIndex: number,\n\t) => {\n\t\t// Method parameter: target is the prototype, propertyKey is the method name.\n\t\t// Constructor parameter: target is the class, propertyKey is undefined.\n\t\tif (propertyKey !== undefined) {\n\t\t\tconst params: ParamMetadata[] =\n\t\t\t\tReflect.getMetadata(METADATA_KEY.PARAMS, target, propertyKey) ?? [];\n\t\t\tparams.push({\n\t\t\t\tindex: parameterIndex,\n\t\t\t\ttype,\n\t\t\t\tname: typeof data === \"string\" ? data : undefined,\n\t\t\t\tdata: typeof data === \"object\" ? data : undefined,\n\t\t\t});\n\t\t\tReflect.defineMetadata(METADATA_KEY.PARAMS, params, target, propertyKey);\n\t\t} else {\n\t\t\tconst params: ParamMetadata[] =\n\t\t\t\tReflect.getMetadata(METADATA_KEY.PARAMS, target) ?? [];\n\t\t\tparams.push({\n\t\t\t\tindex: parameterIndex,\n\t\t\t\ttype,\n\t\t\t\tname: typeof data === \"string\" ? data : undefined,\n\t\t\t\tdata: typeof data === \"object\" ? data : undefined,\n\t\t\t});\n\t\t\tReflect.defineMetadata(METADATA_KEY.PARAMS, params, target);\n\t\t}\n\t};\n}\n\nexport const Req = () => createParamDecorator(PARAM_TYPES.REQUEST);\nexport const Res = () => createParamDecorator(PARAM_TYPES.RESPONSE);\nexport const Next = () => createParamDecorator(PARAM_TYPES.NEXT);\nexport const Body = (key?: string) =>\n\tcreateParamDecorator(PARAM_TYPES.BODY, key);\nexport const Query = (key?: string) =>\n\tcreateParamDecorator(PARAM_TYPES.QUERY, key);\nexport const Param = (key?: string) =>\n\tcreateParamDecorator(PARAM_TYPES.PARAM, key);\nexport const Headers = (key?: string) =>\n\tcreateParamDecorator(PARAM_TYPES.HEADERS, key);\nexport const Ctx = () => createParamDecorator(PARAM_TYPES.CTX);\nexport const User = () => createParamDecorator(PARAM_TYPES.USER);\n\nexport function getParamMetadata(\n\ttarget: any,\n\tpropertyKey: string | symbol,\n): ParamMetadata[] {\n\treturn Reflect.getMetadata(METADATA_KEY.PARAMS, target, propertyKey) ?? [];\n}\n\nexport { PARAM_TYPES };\n",
|
|
9
|
+
"/**\n * @Validate decorator.\n *\n * Attaches Zod schemas (or class validators) to a route handler. Each\n * schema is run against the corresponding request part before the handler\n * executes; failed validation throws or returns a 400 response.\n *\n * @example\n * ```ts\n * const UserSchema = z.object({ name: z.string(), email: z.email() });\n *\n * @Post('/')\n * @Validate({ body: UserSchema })\n * create(@Body() body: z.infer<typeof UserSchema>) { ... }\n * ```\n */\nimport \"reflect-metadata\";\nimport { METADATA_KEY } from \"../constants.js\";\nimport type { ValidationMetadata } from \"../di/tokens.js\";\n\nexport function Validate(options: ValidationMetadata): MethodDecorator {\n\treturn (\n\t\ttarget: object,\n\t\tpropertyKey: string | symbol,\n\t\tdescriptor: PropertyDescriptor,\n\t) => {\n\t\tReflect.defineMetadata(\n\t\t\tMETADATA_KEY.VALIDATE,\n\t\t\toptions,\n\t\t\ttarget.constructor,\n\t\t\tpropertyKey,\n\t\t);\n\t};\n}\n\nexport function getValidationMetadata(\n\ttarget: any,\n\tpropertyKey: string | symbol,\n): ValidationMetadata | undefined {\n\treturn Reflect.getMetadata(METADATA_KEY.VALIDATE, target, propertyKey);\n}\n",
|
|
10
|
+
"/**\n * `WebSocketService` — connection registry, rooms, broadcasting.\n *\n * The service is the central state for all open WebSocket\n * connections. It is registered in the DI container as a singleton\n * and consumed by `@WebSocketGateway` classes.\n *\n * Features:\n * - **Connection registry** — `getConnections()` returns all\n * currently-open clients.\n * - **Per-connection lookup** — `getConnection(id)`.\n * - **Rooms** — `joinRoom`, `leaveRoom`, `broadcastToRoom`. Rooms\n * are auto-cleaned when empty.\n * - **Broadcast** — `broadcast(data)` sends to all open clients.\n * - **Targeted send** — `sendTo(id, data)`.\n * - **Lifecycle tracking** — `onConnect` / `onDisconnect` callbacks\n * for metrics, audit logging, etc.\n */\n\nimport type { WebSocketClient, WsMessage, WsClientData } from \"./types.js\";\nimport { WebSocketClientImpl } from \"./client.js\";\n\nexport const WEBSOCKET_SERVICE_TOKEN = Symbol.for(\"nexus:WebSocketService\");\n\nexport class WebSocketService {\n\t/** id -> client */\n\tprivate clients = new Map<string, WebSocketClientImpl>();\n\t/** room -> Set<id> */\n\tprivate rooms = new Map<string, Set<string>>();\n\t/** Lifecycle callbacks. */\n\tprivate onConnectListeners: Array<(c: WebSocketClient) => void> = [];\n\tprivate onDisconnectListeners: Array<(c: WebSocketClient) => void> = [];\n\n\t/* ---------------- registry ---------------- */\n\n\t/** Register a new client. Returns the framework id. */\n\tregister(client: WebSocketClientImpl): string {\n\t\tthis.clients.set(client.id, client);\n\t\tfor (const cb of this.onConnectListeners) {\n\t\t\ttry {\n\t\t\t\tcb(client);\n\t\t\t} catch {\n\t\t\t\t/* ignore listener errors */\n\t\t\t}\n\t\t}\n\t\treturn client.id;\n\t}\n\n\t/** Remove a client from the registry. Auto-cleans empty rooms. */\n\tunregister(client: WebSocketClientImpl): void {\n\t\tthis.clients.delete(client.id);\n\t\tfor (const room of client.rooms) {\n\t\t\tconst set = this.rooms.get(room);\n\t\t\tif (set) {\n\t\t\t\tset.delete(client.id);\n\t\t\t\tif (set.size === 0) this.rooms.delete(room);\n\t\t\t}\n\t\t}\n\t\tfor (const cb of this.onDisconnectListeners) {\n\t\t\ttry {\n\t\t\t\tcb(client);\n\t\t\t} catch {\n\t\t\t\t/* ignore listener errors */\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Number of currently-open connections. */\n\tget size(): number {\n\t\treturn this.clients.size;\n\t}\n\n\t/** Get all open connections. */\n\tgetConnections(): WebSocketClient[] {\n\t\treturn [...this.clients.values()];\n\t}\n\n\t/** Get a connection by id. */\n\tgetConnection(id: string): WebSocketClient | undefined {\n\t\treturn this.clients.get(id);\n\t}\n\n\t/* ---------------- rooms ---------------- */\n\n\t/** Join a room. */\n\tjoinRoom(client: WebSocketClient, room: string): void {\n\t\tconst impl = client as WebSocketClientImpl;\n\t\timpl.joinRoom(room);\n\t\tlet set = this.rooms.get(room);\n\t\tif (!set) {\n\t\t\tset = new Set();\n\t\t\tthis.rooms.set(room, set);\n\t\t}\n\t\tset.add(client.id);\n\t}\n\n\t/** Leave a room. */\n\tleaveRoom(client: WebSocketClient, room: string): void {\n\t\tconst impl = client as WebSocketClientImpl;\n\t\timpl.leaveRoom(room);\n\t\tconst set = this.rooms.get(room);\n\t\tif (set) {\n\t\t\tset.delete(client.id);\n\t\t\tif (set.size === 0) this.rooms.delete(room);\n\t\t}\n\t}\n\n\t/** Leave all rooms. */\n\tleaveAllRooms(client: WebSocketClient): void {\n\t\tconst impl = client as WebSocketClientImpl;\n\t\tfor (const room of impl.rooms) {\n\t\t\tconst set = this.rooms.get(room);\n\t\t\tif (set) {\n\t\t\t\tset.delete(client.id);\n\t\t\t\tif (set.size === 0) this.rooms.delete(room);\n\t\t\t}\n\t\t}\n\t\timpl.rooms.clear();\n\t}\n\n\t/** All client ids in a room. */\n\tgetRoomMembers(room: string): WebSocketClient[] {\n\t\tconst ids = this.rooms.get(room);\n\t\tif (!ids) return [];\n\t\tconst out: WebSocketClient[] = [];\n\t\tfor (const id of ids) {\n\t\t\tconst c = this.clients.get(id);\n\t\t\tif (c) out.push(c);\n\t\t}\n\t\treturn out;\n\t}\n\n\t/** All room names currently in use. */\n\tgetRooms(): string[] {\n\t\treturn [...this.rooms.keys()];\n\t}\n\n\t/** Whether a room has any members. */\n\thasRoom(room: string): boolean {\n\t\tconst set = this.rooms.get(room);\n\t\treturn !!set && set.size > 0;\n\t}\n\n\t/* ---------------- broadcast ---------------- */\n\n\t/** Send to all open clients. */\n\tbroadcast(data: WsMessage, filter?: (client: WebSocketClient) => boolean): void {\n\t\tfor (const client of this.clients.values()) {\n\t\t\tif (filter && !filter(client)) continue;\n\t\t\ttry {\n\t\t\t\tclient.send(data);\n\t\t\t} catch {\n\t\t\t\t/* ignore send errors */\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Send to all clients in a room. */\n\tbroadcastToRoom(room: string, data: WsMessage): void {\n\t\tconst ids = this.rooms.get(room);\n\t\tif (!ids) return;\n\t\tfor (const id of ids) {\n\t\t\tconst client = this.clients.get(id);\n\t\t\tif (!client) continue;\n\t\t\ttry {\n\t\t\t\tclient.send(data);\n\t\t\t} catch {\n\t\t\t\t/* ignore send errors */\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Send to a single client by id. */\n\tsendTo(id: string, data: WsMessage): boolean {\n\t\tconst client = this.clients.get(id);\n\t\tif (!client) return false;\n\t\ttry {\n\t\t\tclient.send(data);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/** Close all connections (graceful shutdown). */\n\tcloseAll(code = 1001, reason = \"Server shutting down\"): void {\n\t\tfor (const client of this.clients.values()) {\n\t\t\ttry {\n\t\t\t\tclient.close(code, reason);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\t}\n\t}\n\n\t/* ---------------- lifecycle listeners ---------------- */\n\n\t/** Register a callback for new connections. */\n\tonConnect(cb: (client: WebSocketClient) => void): void {\n\t\tthis.onConnectListeners.push(cb);\n\t}\n\n\t/** Register a callback for closed connections. */\n\tonDisconnect(cb: (client: WebSocketClient) => void): void {\n\t\tthis.onDisconnectListeners.push(cb);\n\t}\n}\n",
|
|
11
|
+
"/**\n * `WebSocketClient` — the framework's per-connection wrapper.\n *\n * Hono's `WSContext` is a thin wrapper over the underlying\n * WebSocket. `WebSocketClient` adds:\n * - A unique connection id (UUID-ish).\n * - Room membership tracking.\n * - User-attached data (auth userId, custom keys).\n * - A stable `send()` API that JSON-encodes objects.\n *\n * Constructed by the runtime adapter (`runtime/bun.ts` or\n * `runtime/node.ts`) and passed to the gateway's lifecycle hooks.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type { WsMessage, WsReadyState, WsClientData } from \"./types.js\";\n\n/** Minimal interface that the wrapper needs from the underlying WSContext. */\nexport interface UnderlyingWs {\n\tsend(data: string | ArrayBuffer | Uint8Array, options?: { compress?: boolean }): void;\n\tclose(code?: number, reason?: string): void;\n\treadonly readyState: number;\n\treadonly url: string | null;\n\treadonly protocol: string | null;\n}\n\nexport class WebSocketClientImpl {\n\treadonly id: string;\n\treadonly rooms: Set<string> = new Set();\n\tdata: WsClientData = {};\n\tprivate _underlying: UnderlyingWs;\n\n\tconstructor(underlying: UnderlyingWs, id?: string) {\n\t\tthis.id = id ?? randomUUID();\n\t\tthis._underlying = underlying;\n\t}\n\n\tget url(): string | null {\n\t\treturn this._underlying.url;\n\t}\n\n\tget protocol(): string | null {\n\t\treturn this._underlying.protocol;\n\t}\n\n\tget readyState(): WsReadyState {\n\t\treturn this._underlying.readyState as WsReadyState;\n\t}\n\n\tsend(data: WsMessage): void {\n\t\tif (typeof data === \"object\" && !(data instanceof ArrayBuffer) && !(data instanceof Uint8Array)) {\n\t\t\tthis._underlying.send(JSON.stringify(data));\n\t\t} else {\n\t\t\tthis._underlying.send(data as string | ArrayBuffer | Uint8Array);\n\t\t}\n\t}\n\n\tclose(code?: number, reason?: string): void {\n\t\tthis._underlying.close(code, reason);\n\t}\n\n\tsetData(data: Partial<WsClientData>): void {\n\t\tObject.assign(this.data, data);\n\t}\n\n\tjoinRoom(room: string): void {\n\t\tthis.rooms.add(room);\n\t}\n\n\tleaveRoom(room: string): void {\n\t\tthis.rooms.delete(room);\n\t}\n\n\t/** Internal: get the underlying WSContext (for the runtime layer). */\n\traw(): UnderlyingWs {\n\t\treturn this._underlying;\n\t}\n}\n",
|
|
12
|
+
"/**\n * @Module decorator.\n *\n * Marks a class as a Nest-style module: a logical grouping of\n * controllers and providers with explicit imports/exports.\n *\n * @example\n * ```ts\n * @Module({\n * imports: [UserModule],\n * controllers: [UserController],\n * providers: [UserService],\n * exports: [UserService],\n * })\n * class AppModule {}\n * ```\n */\nimport \"reflect-metadata\";\nimport { METADATA_KEY } from \"../constants.js\";\nimport type { ModuleOptions, Type } from \"../di/tokens.js\";\n\nexport function Module(options: ModuleOptions = {}): ClassDecorator {\n\treturn (target: object) => {\n\t\tReflect.defineMetadata(METADATA_KEY.MODULE, options, target);\n\t};\n}\n\n/** Read the @Module options from a class. */\nexport function getModuleOptions(target: Type<any>): ModuleOptions {\n\treturn Reflect.getMetadata(METADATA_KEY.MODULE, target) ?? {};\n}\n",
|
|
13
|
+
"/**\n * Convenience barrel for all decorators.\n */\nexport * from \"./module.js\";\nexport * from \"./controller.js\";\nexport * from \"./injectable.js\";\nexport * from \"./http-methods.js\";\nexport * from \"./params.js\";\nexport * from \"./validate.js\";\nexport * from \"./repository.js\";\nexport * from \"./metadata.js\";\n",
|
|
14
|
+
"/**\n * @Injectable decorator.\n *\n * Marks a class as available for DI. The container uses reflect-metadata's\n * `design:paramtypes` to read constructor parameter types and resolve them\n * automatically.\n *\n * @example\n * ```ts\n * @Injectable()\n * class UserService {\n * constructor(private repo: UserRepository) {}\n * }\n *\n * @Injectable({ scope: 'request' })\n * class RequestContext {\n * constructor(@Inject(REQUEST) private req: any) {}\n * }\n * ```\n */\nimport \"reflect-metadata\";\nimport { METADATA_KEY } from \"../constants.js\";\n\nexport interface InjectableOptions {\n\tscope?: \"singleton\" | \"request\" | \"transient\";\n}\n\nexport function Injectable(options: InjectableOptions = {}): ClassDecorator {\n\treturn (target: object) => {\n\t\tReflect.defineMetadata(METADATA_KEY.INJECTABLE, true, target);\n\t\tif (options.scope) {\n\t\t\tReflect.defineMetadata(\n\t\t\t\t\"nexus:di:scope\",\n\t\t\t\toptions.scope,\n\t\t\t\ttarget,\n\t\t\t);\n\t\t}\n\t};\n}\n\nexport function isInjectable(target: any): boolean {\n\treturn Reflect.hasMetadata(METADATA_KEY.INJECTABLE, target);\n}\n\n/**\n * Read the scope declared on a class via `@Injectable({ scope })`.\n * Returns undefined when no scope is declared (defaults to singleton).\n */\nexport function getScope(\n\ttarget: any,\n): \"singleton\" | \"request\" | \"transient\" | undefined {\n\treturn Reflect.getMetadata(\"nexus:di:scope\", target);\n}\n\n/**\n * Mark a parameter as resolved by a specific token instead of its declared\n * type. Useful for interfaces, abstract classes, or string tokens.\n *\n * @example\n * ```ts\n * constructor(@Inject('CONFIG') private config: AppConfig) {}\n * ```\n */\nexport function Inject<T = any>(token: any): ParameterDecorator {\n\treturn (\n\t\ttarget: object,\n\t\tpropertyKey: string | symbol | undefined,\n\t\tparameterIndex: number,\n\t) => {\n\t\tconst existing: Map<number, any> =\n\t\t\tReflect.getMetadata(METADATA_KEY.INJECT, target) ?? new Map();\n\t\texisting.set(parameterIndex, token);\n\t\tReflect.defineMetadata(METADATA_KEY.INJECT, existing, target);\n\t};\n}",
|
|
15
|
+
"/**\n * @Repository decorator.\n *\n * Marks a class as a Spring-style repository. Repositories are normal\n * `@Injectable()` classes; the decorator is a marker so the framework\n * can register them with a database adapter (Drizzle/Prisma) and emit\n * a friendly error if you forget to wire one.\n *\n * @example\n * ```ts\n * @Repository()\n * class UserRepository {\n * findAll() { return db.select().from(users); }\n * }\n * ```\n */\nimport \"reflect-metadata\";\nimport { METADATA_KEY } from \"../constants.js\";\nimport type { InjectionToken } from \"../di/tokens.js\";\n\nexport function Repository(entityToken?: InjectionToken<any>): ClassDecorator {\n\treturn (target: object) => {\n\t\tReflect.defineMetadata(\n\t\t\tMETADATA_KEY.REPOSITORY,\n\t\t\t{ entity: entityToken },\n\t\t\ttarget,\n\t\t);\n\t\tReflect.defineMetadata(METADATA_KEY.INJECTABLE, true, target);\n\t};\n}\n\nexport function getRepositoryMetadata(\n\ttarget: any,\n): { entity?: InjectionToken<any> } | undefined {\n\treturn Reflect.getMetadata(METADATA_KEY.REPOSITORY, target);\n}\n\nexport function isRepository(target: any): boolean {\n\treturn Reflect.hasMetadata(METADATA_KEY.REPOSITORY, target);\n}\n",
|
|
16
|
+
"/**\n * Reflect-metadata helper. Centralizes the keys the framework uses so\n * decorator files stay clean.\n */\nexport { METADATA_KEY, PARAM_TYPES, HTTP_METHODS } from \"../constants.js\";\nexport type { MetadataKey, ParamType, HttpMethod } from \"../constants.js\";\n",
|
|
17
|
+
"/**\n * Runtime detection & helper for `nexusjs/ws`.\n */\n\nexport type WsRuntime = \"bun\" | \"node\" | \"cloudflare\" | \"unknown\";\n\n/**\n * Detect the current JavaScript runtime.\n *\n * - `bun` — Bun (native `Bun.serve` WebSocket)\n * - `node` — Node.js (uses the `ws` package)\n * - `cloudflare` — Cloudflare Workers / Pages (Durable Objects only)\n * - `unknown` — fall-through; no adapter auto-installed\n */\nexport function detectRuntime(): WsRuntime {\n\tif (typeof (globalThis as { Bun?: unknown }).Bun !== \"undefined\") return \"bun\";\n\tif (typeof process !== \"undefined\" && process.versions?.node) return \"node\";\n\t// Cloudflare: `caches` global + absence of `process.versions.node` is a strong signal.\n\tif (\n\t\ttypeof (globalThis as { caches?: unknown }).caches !== \"undefined\" &&\n\t\ttypeof (globalThis as { WebSocketPair?: unknown }).WebSocketPair !== \"undefined\"\n\t) {\n\t\treturn \"cloudflare\";\n\t}\n\treturn \"unknown\";\n}\n",
|
|
18
|
+
"/**\n * `WebSocketModule` — wires `WebSocketService` into the DI container\n * and provides runtime-specific helpers for the application.\n *\n * Usage (Bun):\n *\n * @Module({\n * imports: [\n * WebSocketModule.forRoot({\n * gateways: [ChatGateway],\n * path: '/ws',\n * }),\n * ],\n * })\n * class AppModule {}\n *\n * const app = new Application(AppModule);\n * const { websocket } = await app.wireWebSocket();\n * Bun.serve({\n * port: 3000,\n * fetch: app.fetch,\n * websocket,\n * });\n *\n * Usage (Node):\n *\n * const app = new Application(AppModule);\n * const { server, wss } = await app.serveNodeWebSocket(3000);\n */\n\nimport { Inject, Module } from \"../core/decorators/index.js\";\nimport { WebSocketService, WEBSOCKET_SERVICE_TOKEN } from \"./service.js\";\nimport type { WebSocketConfig } from \"./types.js\";\nimport { detectRuntime } from \"./runtime/index.js\";\nimport type { GatewayClass } from \"./runtime/types.js\";\n\n@Module({\n\tproviders: [\n\t\tWebSocketService,\n\t\t{ provide: WEBSOCKET_SERVICE_TOKEN, useExisting: WebSocketService },\n\t],\n\texports: [WebSocketService, WEBSOCKET_SERVICE_TOKEN],\n})\nexport class WebSocketModule {\n\tstatic forRoot(config: WebSocketConfig & { gateways?: GatewayClass[] } = {}) {\n\t\tconst fullConfig: Required<WebSocketConfig> & { gateways: GatewayClass[] } = {\n\t\t\tpath: config.path ?? \"/ws\",\n\t\t\tjson: config.json ?? true,\n\t\t\theartbeatSeconds: config.heartbeatSeconds ?? 30,\n\t\t\tonUnknownRuntime: config.onUnknownRuntime ?? \"throw\",\n\t\t\tgateways: config.gateways ?? [],\n\t\t};\n\n\t\t@Module({\n\t\t\tproviders: [\n\t\t\t\tWebSocketService,\n\t\t\t\t{ provide: WEBSOCKET_SERVICE_TOKEN, useExisting: WebSocketService },\n\t\t\t\t{ provide: \"WS_CONFIG\", useValue: fullConfig },\n\t\t\t],\n\t\t\texports: [WebSocketService, WEBSOCKET_SERVICE_TOKEN, \"WS_CONFIG\"],\n\t\t})\n\t\tclass ConfiguredWebSocketModule {\n\t\t\tconstructor(@Inject(WEBSOCKET_SERVICE_TOKEN) readonly service: WebSocketService) {}\n\n\t\t\t/** Detect the runtime at boot time. */\n\t\t\tdetectRuntime() {\n\t\t\t\treturn detectRuntime();\n\t\t\t}\n\t\t}\n\t\tObject.defineProperty(ConfiguredWebSocketModule, \"name\", {\n\t\t\tvalue: \"ConfiguredWebSocketModule\",\n\t\t});\n\n\t\treturn ConfiguredWebSocketModule as unknown as typeof ConfiguredWebSocketModule & {\n\t\t\treadonly config: typeof fullConfig;\n\t\t};\n\t}\n}\n",
|
|
19
|
+
"/**\n * WebSocket decorators.\n *\n * Two layers:\n * 1. `@WebSocketGateway(path)` — class-level. Marks the class as a\n * WebSocket gateway. The framework scans for these and registers\n * a Hono `upgradeWebSocket` handler at `<path>`.\n * 2. `@OnWebSocketOpen()`, `@OnWebSocketMessage()`, etc. —\n * method-level. Wire lifecycle events to specific methods on\n * the gateway class.\n *\n * Implementation note: lifecycle decorators store metadata on the\n * method function itself (via a `Symbol.for` key). The class-level\n * `@WebSocketGateway` walks the prototype to collect them. This\n * pattern is robust regardless of the target passed by the TS\n * decorator transform.\n */\n\nimport type { WsLifecycle } from \"./types.js\";\n\nconst GATEWAY_KEY = Symbol.for(\"nexus:ws:gateway\");\nconst LIFECYCLE_KEY = Symbol.for(\"nexus:ws:lifecycle\");\n\ninterface GatewayMetadata {\n\tpath: string;\n\thandlers: Record<string, string>;\n}\n\n/**\n * Mark a class as a WebSocket gateway. `path` is the URL path the\n * gateway listens on (e.g. `/ws`, `/chat`).\n *\n * @Injectable()\n * @WebSocketGateway('/ws')\n * class ChatGateway { ... }\n */\nexport function WebSocketGateway(path: string): ClassDecorator {\n\treturn function (target: Function) {\n\t\tconst ctor = target as unknown as { prototype: object };\n\t\tconst proto = ctor.prototype ?? (target as unknown as object);\n\t\t// Collect lifecycle handlers from method-level decorators.\n\t\tconst handlers: Record<string, string> = {};\n\t\tfor (const name of Object.getOwnPropertyNames(proto)) {\n\t\t\tif (name === \"constructor\") continue;\n\t\t\tconst m = (proto as any)[name];\n\t\t\tif (typeof m === \"function\" && (m as any)[LIFECYCLE_KEY]) {\n\t\t\t\tObject.assign(handlers, (m as any)[LIFECYCLE_KEY]);\n\t\t\t}\n\t\t}\n\t\t(proto as any)[GATEWAY_KEY] = { path, handlers } satisfies GatewayMetadata;\n\t};\n}\n\n/** Read the gateway path. Internal — used by the framework. */\nexport function getGatewayPath(target: object): string | undefined {\n\tconst t = target as any;\n\tconst meta: GatewayMetadata | undefined = t[GATEWAY_KEY];\n\treturn meta?.path;\n}\n\n/* ------------------------------------------------------------------ *\n * Lifecycle method decorators\n * ------------------------------------------------------------------ */\n\nfunction makeLifecycleDecorator(lifecycle: WsLifecycle) {\n\treturn function (\n\t\t_target: object,\n\t\tpropertyKey: string | symbol,\n\t\tdescriptor: PropertyDescriptor,\n\t) {\n\t\tconst fn = descriptor.value as Function & { [LIFECYCLE_KEY]?: Record<string, string> };\n\t\tif (typeof fn !== \"function\") return descriptor;\n\t\tfn[LIFECYCLE_KEY] = fn[LIFECYCLE_KEY] ?? {};\n\t\tfn[LIFECYCLE_KEY][lifecycle] = String(propertyKey);\n\t\treturn descriptor;\n\t};\n}\n\n/** Method decorator factory: bind to `onOpen` lifecycle. */\nexport function OnWebSocketOpen(): MethodDecorator {\n\treturn makeLifecycleDecorator(\"open\");\n}\n/** Method decorator factory: bind to `onMessage` lifecycle. */\nexport function OnWebSocketMessage(): MethodDecorator {\n\treturn makeLifecycleDecorator(\"message\");\n}\n/** Method decorator factory: bind to `onClose` lifecycle. */\nexport function OnWebSocketClose(): MethodDecorator {\n\treturn makeLifecycleDecorator(\"close\");\n}\n/** Method decorator factory: bind to `onError` lifecycle. */\nexport function OnWebSocketError(): MethodDecorator {\n\treturn makeLifecycleDecorator(\"error\");\n}\n\n/** Read the bound lifecycle methods. Internal — used by the framework. */\nexport function getLifecycleHandlers(target: object): {\n\topen?: string;\n\tmessage?: string;\n\tclose?: string;\n\terror?: string;\n} {\n\tconst t = target as any;\n\t// 1. Prefer the metadata stored by @WebSocketGateway.\n\tif (t[GATEWAY_KEY]?.handlers) return t[GATEWAY_KEY].handlers;\n\t// 2. Walk the prototype and collect from method functions.\n\tconst out: Record<string, string> = {};\n\tconst proto = t.prototype ?? t;\n\tfor (const name of Object.getOwnPropertyNames(proto)) {\n\t\tif (name === \"constructor\") continue;\n\t\tconst m = (proto as any)[name];\n\t\tif (typeof m === \"function\" && (m as any)[LIFECYCLE_KEY]) {\n\t\t\tObject.assign(out, (m as any)[LIFECYCLE_KEY]);\n\t\t}\n\t}\n\treturn out;\n}\n",
|
|
20
|
+
"/**\n * Bun runtime adapter for `nexusjs/ws`.\n *\n * Uses Hono's `createBunWebSocket` to bridge Hono's `WSEvents`\n * to Bun's native WebSocket API.\n *\n * The user wires the returned `websocket` config into\n * `Bun.serve({ websocket, fetch: app.fetch })`. The framework\n * also calls `Bun.serve` automatically if `serve` is provided\n * to `WebSocketModule.forRoot({ serve: { port: 3000 } })`.\n */\n\nimport type { Hono } from \"hono\";\nimport { getGatewayPath, getLifecycleHandlers } from \"../decorators.js\";\nimport type { WebSocketService } from \"../service.js\";\nimport { WebSocketClientImpl } from \"../client.js\";\nimport type { WebSocketGatewayOptions, GatewayClass } from \"./types.js\";\n\n/** Adapter that wires `@WebSocketGateway` classes to Bun's WebSocket. */\nexport class BunWsAdapter {\n\treadonly service: WebSocketService;\n\tprivate readonly options: WebSocketGatewayOptions;\n\n\tconstructor(service: WebSocketService, options: WebSocketGatewayOptions = {}) {\n\t\tthis.service = service;\n\t\tthis.options = options;\n\t}\n\n\t/**\n\t * Returns the `websocket` config object that the user passes to\n\t * `Bun.serve({ websocket, fetch: app.fetch })`.\n\t *\n\t * The `upgradeWebSocket` middleware is also installed on the\n\t * Hono app at every registered gateway's path.\n\t */\n\tasync install(app: Hono, gateways: GatewayClass[]): Promise<{ websocket: BunWebSocketConfig }> {\n\t\t// Lazy-import Hono's Bun adapter to keep Node builds from breaking.\n\t\t// @ts-ignore - bun adapter is Bun-only\n\t\tconst { createBunWebSocket } = await import(\"hono/bun\");\n\t\tconst { upgradeWebSocket, websocket } = createBunWebSocket();\n\n\t\tfor (const Gateway of gateways) {\n\t\t\tconst path = getGatewayPath(Gateway.prototype);\n\t\t\tif (!path) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`WebSocket gateway ${Gateway.name} is missing @WebSocketGateway(path)`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst handlers = getLifecycleHandlers(Gateway.prototype);\n\t\t\tconst opts = this.options;\n\n\t\t\tapp.get(\n\t\t\t\tpath,\n\t\t\t\tupgradeWebSocket((_c: unknown) => {\n\t\t\t\t\t// Build the gateway instance per-connection. (DI happens\n\t\t\t\t\t// via the service — the gateway pulls dependencies from\n\t\t\t\t\t// the container through the service.)\n\t\t\t\t\tconst gateway = new Gateway();\n\t\t\t\t\t// Inject the service if the gateway has a setter / field.\n\t\t\t\t\tif (gateway && \"setService\" in (gateway as any) && typeof (gateway as any).setService === \"function\") {\n\t\t\t\t\t\t(gateway as any).setService(this.service);\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tonOpen: (_evt: Event, ws: any) => {\n\t\t\t\t\t\t\tconst client = new WebSocketClientImpl(ws);\n\t\t\t\t\t\t\tthis.service.register(client);\n\t\t\t\t\t\t\t(opts.onOpen ?? this.defaultOnOpen)(client);\n\t\t\t\t\t\t\tif (handlers.open) {\n\t\t\t\t\t\t\t\tPromise.resolve((gateway as any)[handlers.open](client)).catch(\n\t\t\t\t\t\t\t\t\t(err) => opts.onError?.(client, err as Error),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonMessage: (evt: MessageEvent, ws: any) => {\n\t\t\t\t\t\t\tconst id = (ws as any).__clientId as string | undefined;\n\t\t\t\t\t\t\tconst client = id ? this.service.getConnection(id) as WebSocketClientImpl | undefined : undefined;\n\t\t\t\t\t\t\tif (!client) return;\n\t\t\t\t\t\t\tconst raw = evt.data;\n\t\t\t\t\t\t\tconst data = this.parseMessage(raw);\n\t\t\t\t\t\t\tif (handlers.message) {\n\t\t\t\t\t\t\t\tPromise.resolve((gateway as any)[handlers.message](client, data)).catch(\n\t\t\t\t\t\t\t\t\t(err) => opts.onError?.(client, err as Error),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonClose: (evt: CloseEvent, ws: any) => {\n\t\t\t\t\t\t\tconst id = (ws as any).__clientId as string | undefined;\n\t\t\t\t\t\t\tconst client = id ? this.service.getConnection(id) as WebSocketClientImpl | undefined : undefined;\n\t\t\t\t\t\t\tif (!client) return;\n\t\t\t\t\t\t\tthis.service.unregister(client);\n\t\t\t\t\t\t\t(opts.onClose ?? this.defaultOnClose)(client, evt.code, evt.reason);\n\t\t\t\t\t\t\tif (handlers.close) {\n\t\t\t\t\t\t\t\tPromise.resolve((gateway as any)[handlers.close](client, evt.code, evt.reason)).catch(\n\t\t\t\t\t\t\t\t\t(err) => opts.onError?.(client, err as Error),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonError: (evt: Event, ws: any) => {\n\t\t\t\t\t\t\tconst id = (ws as any).__clientId as string | undefined;\n\t\t\t\t\t\t\tconst client = id ? this.service.getConnection(id) as WebSocketClientImpl | undefined : undefined;\n\t\t\t\t\t\t\tif (!client) return;\n\t\t\t\t\t\t\tconst err = (evt as any).error ?? new Error(\"WebSocket error\");\n\t\t\t\t\t\t\tif (handlers.error) {\n\t\t\t\t\t\t\t\tPromise.resolve((gateway as any)[handlers.error](client, err)).catch(() => {});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\topts.onError?.(client, err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\treturn { websocket };\n\t}\n\n\tprivate parseMessage(raw: unknown): unknown {\n\t\tif (this.options.json === false) return raw;\n\t\tif (typeof raw === \"string\") {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(raw);\n\t\t\t} catch {\n\t\t\t\treturn raw;\n\t\t\t}\n\t\t}\n\t\treturn raw;\n\t}\n\n\tprivate defaultOnOpen(_client: any): void {}\n\tprivate defaultOnClose(_client: any, _code: number, _reason: string): void {}\n}\n\n\n/** Bun's `websocket` config shape (subset we use). */\nexport interface BunWebSocketConfig {\n\topen?: (ws: any) => void;\n\tmessage?: (ws: any, message: any) => void;\n\tclose?: (ws: any, code: number, reason: string) => void;\n\terror?: (ws: any, error: Error) => void;\n\t// ... other Bun WS options\n}\n",
|
|
21
|
+
"/**\n * Node runtime adapter for `nexusjs/ws`.\n *\n * Uses the `ws` package directly. The user provides a\n * `WebSocketServer` (or one is created automatically) and the\n * framework wires connection events to the gateway's lifecycle\n * handlers.\n *\n * The `ws` package is an optional peer dependency. Apps targeting\n * Bun don't need to install it.\n *\n * Usage (with auto-server):\n *\n * const mod = WebSocketModule.forRoot({ path: '/ws' });\n * const { app, wsServer } = await mod.mountNode(gateways);\n * const server = createServer(app.fetch);\n * server.listen(3000);\n * wsServer.emit('connection', ws, req); // via the framework\n *\n * Usage (with existing `http.Server`):\n *\n * const server = http.createServer(app.fetch);\n * const wss = new WebSocketServer({ server });\n * mod.bindNode(wss, gateways);\n * server.listen(3000);\n */\n\nimport type { Hono } from \"hono\";\nimport { getGatewayPath, getLifecycleHandlers } from \"../decorators.js\";\nimport type { WebSocketService } from \"../service.js\";\nimport { WebSocketClientImpl } from \"../client.js\";\nimport type { WebSocketGatewayOptions, GatewayClass } from \"./types.js\";\n\n/** Adapter that wires `@WebSocketGateway` classes to a `ws.WebSocketServer`. */\nexport class NodeWsAdapter {\n\treadonly service: WebSocketService;\n\tprivate readonly options: WebSocketGatewayOptions;\n\n\tconstructor(service: WebSocketService, options: WebSocketGatewayOptions = {}) {\n\t\tthis.service = service;\n\t\tthis.options = options;\n\t}\n\n\t/**\n\t * Create a `WebSocketServer` that upgrades at the given gateway\n\t * paths. The user is responsible for binding it to an HTTP\n\t * server.\n\t */\n\tasync bind(gateways: GatewayClass[]): Promise<NodeWsServer> {\n\t\t// Lazy-import `ws` to keep Bun builds clean.\n\t\tlet WS: typeof import(\"ws\");\n\t\ttry {\n\t\t\tWS = (await import(\"ws\")).default ? await import(\"ws\") : (await import(\"ws\"));\n\t\t\t// @ts-ignore - ws exports shape varies\n\t\t\tconst WebSocketServer = (WS as any).WebSocketServer ?? (WS as any).Server ?? (WS as any).default?.WebSocketServer;\n\t\t\tif (!WebSocketServer) throw new Error(\"no WebSocketServer export\");\n\t\t} catch (err) {\n\t\t\tthrow new Error(\n\t\t\t\t\"WebSocketModule.forRoot() on Node requires the `ws` package. \" +\n\t\t\t\t\t\"Install with: bun add ws\",\n\t\t\t);\n\t\t}\n\n\t\t// Build the per-path upgrade handlers map.\n\t\tconst handlers = new Map<string, (req: any) => boolean>();\n\t\tconst gatewayInstances = new Map<string, GatewayClass>();\n\t\tfor (const Gateway of gateways) {\n\t\t\tconst path = getGatewayPath(Gateway.prototype);\n\t\t\tif (!path) continue;\n\t\t\tgatewayInstances.set(path, Gateway);\n\t\t\thandlers.set(path, (req: any) => {\n\t\t\t\tconst url = new URL(req.url ?? \"/\", \"http://localhost\");\n\t\t\t\treturn url.pathname === path;\n\t\t\t});\n\t\t}\n\n\t\t// @ts-ignore - WS is dynamically imported\n\t\tconst wss = new (WS as any).WebSocketServer({ noServer: true });\n\t\tconst opts = this.options;\n\t\tconst service = this.service;\n\n\t\twss.on(\"connection\", (ws: any, req: any) => {\n\t\t\tconst url = new URL(req.url ?? \"/\", \"http://localhost\");\n\t\t\tconst path = url.pathname;\n\t\t\tconst Gateway = gatewayInstances.get(path);\n\t\t\tif (!Gateway) {\n\t\t\t\tws.close(1008, \"Unknown path\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst gateway = new Gateway();\n\t\t\tif (gateway && \"setService\" in (gateway as any) && typeof (gateway as any).setService === \"function\") {\n\t\t\t\t(gateway as any).setService(service);\n\t\t\t}\n\t\t\tconst client = new WebSocketClientImpl(adaptUnderlying(ws, req));\n\t\t\tservice.register(client);\n\t\t\t(opts.onOpen ?? (() => {}))(client);\n\n\t\t\tconst handlers = getLifecycleHandlers(Gateway.prototype);\n\n\t\t\tws.on(\"message\", (data: any) => {\n\t\t\t\tconst parsed = this.parseMessage(data);\n\t\t\t\tif (handlers.message) {\n\t\t\t\t\tPromise.resolve((gateway as any)[handlers.message](client, parsed)).catch(\n\t\t\t\t\t\t(err) => opts.onError?.(client, err as Error),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tws.on(\"close\", (code: number, reasonBuf: any) => {\n\t\t\t\tconst reason = reasonBuf?.toString?.() ?? \"\";\n\t\t\t\tservice.unregister(client);\n\t\t\t\t(opts.onClose ?? (() => {}))(client, code, reason);\n\t\t\t\tif (handlers.close) {\n\t\t\t\t\tPromise.resolve((gateway as any)[handlers.close](client, code, reason)).catch(\n\t\t\t\t\t\t(err) => opts.onError?.(client, err as Error),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tws.on(\"error\", (err: Error) => {\n\t\t\t\tif (handlers.error) {\n\t\t\t\t\tPromise.resolve((gateway as any)[handlers.error](client, err)).catch(() => {});\n\t\t\t\t} else {\n\t\t\t\t\topts.onError?.(client, err);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn {\n\t\t\thandleUpgrade(req: any, socket: any, head: any, callback?: (ws: any) => void) {\n\t\t\t\tconst url = new URL(req.url ?? \"/\", \"http://localhost\");\n\t\t\t\tconst handler = handlers.get(url.pathname);\n\t\t\t\tif (!handler || !handler(req)) {\n\t\t\t\t\tsocket.write(\"HTTP/1.1 404 Not Found\\r\\n\\r\\n\");\n\t\t\t\t\tsocket.destroy();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\twss.handleUpgrade(req, socket, head, callback ?? (() => {}));\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate parseMessage(raw: unknown): unknown {\n\t\tif (this.options.json === false) return raw;\n\t\tif (typeof raw === \"string\") {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(raw);\n\t\t\t} catch {\n\t\t\t\treturn raw;\n\t\t\t}\n\t\t}\n\t\tif (raw && typeof raw === \"object\" && \"toString\" in raw) {\n\t\t\t// ws sometimes gives Buffer\n\t\t\tconst s = (raw as any).toString();\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(s);\n\t\t\t} catch {\n\t\t\t\treturn s;\n\t\t\t}\n\t\t}\n\t\treturn raw;\n\t}\n}\n\n/** Adapts a `ws.WebSocket` to the `UnderlyingWs` interface. */\nfunction adaptUnderlying(ws: any, req: any) {\n\treturn {\n\t\tsend(data: string | ArrayBuffer | Uint8Array, _options?: { compress?: boolean }) {\n\t\t\t// ws accepts string | Buffer | ArrayBuffer | Buffer[]\n\t\t\tws.send(data as any);\n\t\t},\n\t\tclose(code?: number, reason?: string) {\n\t\t\tws.close(code, reason);\n\t\t},\n\t\tget readyState() {\n\t\t\treturn ws.readyState;\n\t\t},\n\t\tget url() {\n\t\t\treturn req.url ?? null;\n\t\t},\n\t\tget protocol() {\n\t\t\treturn ws.protocol ?? null;\n\t\t},\n\t};\n}\n\n/** A handle to attach the WS upgrade to a Node HTTP server. */\nexport interface NodeWsServer {\n\thandleUpgrade(req: any, socket: any, head: any, callback?: (ws: any) => void): void;\n}\n"
|
|
22
|
+
],
|
|
23
|
+
"mappings": "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",
|
|
24
|
+
"debugId": "CC6E4E5365D7A8D564756E2164756E21",
|
|
25
|
+
"names": []
|
|
26
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `WebSocketModule` — wires `WebSocketService` into the DI container
|
|
3
|
+
* and provides runtime-specific helpers for the application.
|
|
4
|
+
*
|
|
5
|
+
* Usage (Bun):
|
|
6
|
+
*
|
|
7
|
+
* @Module({
|
|
8
|
+
* imports: [
|
|
9
|
+
* WebSocketModule.forRoot({
|
|
10
|
+
* gateways: [ChatGateway],
|
|
11
|
+
* path: '/ws',
|
|
12
|
+
* }),
|
|
13
|
+
* ],
|
|
14
|
+
* })
|
|
15
|
+
* class AppModule {}
|
|
16
|
+
*
|
|
17
|
+
* const app = new Application(AppModule);
|
|
18
|
+
* const { websocket } = await app.wireWebSocket();
|
|
19
|
+
* Bun.serve({
|
|
20
|
+
* port: 3000,
|
|
21
|
+
* fetch: app.fetch,
|
|
22
|
+
* websocket,
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* Usage (Node):
|
|
26
|
+
*
|
|
27
|
+
* const app = new Application(AppModule);
|
|
28
|
+
* const { server, wss } = await app.serveNodeWebSocket(3000);
|
|
29
|
+
*/
|
|
30
|
+
import { WebSocketService } from "./service.js";
|
|
31
|
+
import type { WebSocketConfig } from "./types.js";
|
|
32
|
+
import type { GatewayClass } from "./runtime/types.js";
|
|
33
|
+
export declare class WebSocketModule {
|
|
34
|
+
static forRoot(config?: WebSocketConfig & {
|
|
35
|
+
gateways?: GatewayClass[];
|
|
36
|
+
}): {
|
|
37
|
+
new (service: WebSocketService): {
|
|
38
|
+
readonly service: WebSocketService;
|
|
39
|
+
/** Detect the runtime at boot time. */
|
|
40
|
+
detectRuntime(): import("./index.js").WsRuntime;
|
|
41
|
+
};
|
|
42
|
+
} & {
|
|
43
|
+
readonly config: Required<WebSocketConfig> & {
|
|
44
|
+
gateways: GatewayClass[];
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/ws/module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,gBAAgB,EAA2B,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,qBAOa,eAAe;IAC3B,MAAM,CAAC,OAAO,CAAC,MAAM,GAAE,eAAe,GAAG;QAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAA;KAAO,GA6B3B;sBAXiB,gBAAgB;8BAAhB,gBAAgB;YAE/E,uCAAuC;;;QAS0C;QACjF,QAAQ,CAAC,MAAM;sBA7B0C,YAAY,EAAE;UA6BpC;KACnC;CAEF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bun runtime adapter for `nexusjs/ws`.
|
|
3
|
+
*
|
|
4
|
+
* Uses Hono's `createBunWebSocket` to bridge Hono's `WSEvents`
|
|
5
|
+
* to Bun's native WebSocket API.
|
|
6
|
+
*
|
|
7
|
+
* The user wires the returned `websocket` config into
|
|
8
|
+
* `Bun.serve({ websocket, fetch: app.fetch })`. The framework
|
|
9
|
+
* also calls `Bun.serve` automatically if `serve` is provided
|
|
10
|
+
* to `WebSocketModule.forRoot({ serve: { port: 3000 } })`.
|
|
11
|
+
*/
|
|
12
|
+
import type { Hono } from "hono";
|
|
13
|
+
import type { WebSocketService } from "../service.js";
|
|
14
|
+
import type { WebSocketGatewayOptions, GatewayClass } from "./types.js";
|
|
15
|
+
/** Adapter that wires `@WebSocketGateway` classes to Bun's WebSocket. */
|
|
16
|
+
export declare class BunWsAdapter {
|
|
17
|
+
readonly service: WebSocketService;
|
|
18
|
+
private readonly options;
|
|
19
|
+
constructor(service: WebSocketService, options?: WebSocketGatewayOptions);
|
|
20
|
+
/**
|
|
21
|
+
* Returns the `websocket` config object that the user passes to
|
|
22
|
+
* `Bun.serve({ websocket, fetch: app.fetch })`.
|
|
23
|
+
*
|
|
24
|
+
* The `upgradeWebSocket` middleware is also installed on the
|
|
25
|
+
* Hono app at every registered gateway's path.
|
|
26
|
+
*/
|
|
27
|
+
install(app: Hono, gateways: GatewayClass[]): Promise<{
|
|
28
|
+
websocket: BunWebSocketConfig;
|
|
29
|
+
}>;
|
|
30
|
+
private parseMessage;
|
|
31
|
+
private defaultOnOpen;
|
|
32
|
+
private defaultOnClose;
|
|
33
|
+
}
|
|
34
|
+
/** Bun's `websocket` config shape (subset we use). */
|
|
35
|
+
export interface BunWebSocketConfig {
|
|
36
|
+
open?: (ws: any) => void;
|
|
37
|
+
message?: (ws: any, message: any) => void;
|
|
38
|
+
close?: (ws: any, code: number, reason: string) => void;
|
|
39
|
+
error?: (ws: any, error: Error) => void;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=bun.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bun.d.ts","sourceRoot":"","sources":["../../../src/ws/runtime/bun.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAExE,yEAAyE;AACzE,qBAAa,YAAY;IACxB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;gBAEtC,OAAO,EAAE,gBAAgB,EAAE,OAAO,GAAE,uBAA4B;IAK5E;;;;;;OAMG;IACG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,kBAAkB,CAAA;KAAE,CAAC;IAkF9F,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,cAAc;CACtB;AAGD,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IAClC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;IAC1C,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAExC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime detection & helper for `nexusjs/ws`.
|
|
3
|
+
*/
|
|
4
|
+
export type WsRuntime = "bun" | "node" | "cloudflare" | "unknown";
|
|
5
|
+
/**
|
|
6
|
+
* Detect the current JavaScript runtime.
|
|
7
|
+
*
|
|
8
|
+
* - `bun` — Bun (native `Bun.serve` WebSocket)
|
|
9
|
+
* - `node` — Node.js (uses the `ws` package)
|
|
10
|
+
* - `cloudflare` — Cloudflare Workers / Pages (Durable Objects only)
|
|
11
|
+
* - `unknown` — fall-through; no adapter auto-installed
|
|
12
|
+
*/
|
|
13
|
+
export declare function detectRuntime(): WsRuntime;
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ws/runtime/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;AAElE;;;;;;;GAOG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAWzC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node runtime adapter for `nexusjs/ws`.
|
|
3
|
+
*
|
|
4
|
+
* Uses the `ws` package directly. The user provides a
|
|
5
|
+
* `WebSocketServer` (or one is created automatically) and the
|
|
6
|
+
* framework wires connection events to the gateway's lifecycle
|
|
7
|
+
* handlers.
|
|
8
|
+
*
|
|
9
|
+
* The `ws` package is an optional peer dependency. Apps targeting
|
|
10
|
+
* Bun don't need to install it.
|
|
11
|
+
*
|
|
12
|
+
* Usage (with auto-server):
|
|
13
|
+
*
|
|
14
|
+
* const mod = WebSocketModule.forRoot({ path: '/ws' });
|
|
15
|
+
* const { app, wsServer } = await mod.mountNode(gateways);
|
|
16
|
+
* const server = createServer(app.fetch);
|
|
17
|
+
* server.listen(3000);
|
|
18
|
+
* wsServer.emit('connection', ws, req); // via the framework
|
|
19
|
+
*
|
|
20
|
+
* Usage (with existing `http.Server`):
|
|
21
|
+
*
|
|
22
|
+
* const server = http.createServer(app.fetch);
|
|
23
|
+
* const wss = new WebSocketServer({ server });
|
|
24
|
+
* mod.bindNode(wss, gateways);
|
|
25
|
+
* server.listen(3000);
|
|
26
|
+
*/
|
|
27
|
+
import type { WebSocketService } from "../service.js";
|
|
28
|
+
import type { WebSocketGatewayOptions, GatewayClass } from "./types.js";
|
|
29
|
+
/** Adapter that wires `@WebSocketGateway` classes to a `ws.WebSocketServer`. */
|
|
30
|
+
export declare class NodeWsAdapter {
|
|
31
|
+
readonly service: WebSocketService;
|
|
32
|
+
private readonly options;
|
|
33
|
+
constructor(service: WebSocketService, options?: WebSocketGatewayOptions);
|
|
34
|
+
/**
|
|
35
|
+
* Create a `WebSocketServer` that upgrades at the given gateway
|
|
36
|
+
* paths. The user is responsible for binding it to an HTTP
|
|
37
|
+
* server.
|
|
38
|
+
*/
|
|
39
|
+
bind(gateways: GatewayClass[]): Promise<NodeWsServer>;
|
|
40
|
+
private parseMessage;
|
|
41
|
+
}
|
|
42
|
+
/** A handle to attach the WS upgrade to a Node HTTP server. */
|
|
43
|
+
export interface NodeWsServer {
|
|
44
|
+
handleUpgrade(req: any, socket: any, head: any, callback?: (ws: any) => void): void;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/ws/runtime/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAExE,gFAAgF;AAChF,qBAAa,aAAa;IACzB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;gBAEtC,OAAO,EAAE,gBAAgB,EAAE,OAAO,GAAE,uBAA4B;IAK5E;;;;OAIG;IACG,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IA+F3D,OAAO,CAAC,YAAY;CAoBpB;AAwBD,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC5B,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;CACpF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime adapter types for `nexusjs/ws`.
|
|
3
|
+
*/
|
|
4
|
+
import type { WebSocketClient } from "../types.js";
|
|
5
|
+
/** Options shared by all runtime adapters. */
|
|
6
|
+
export interface WebSocketGatewayOptions {
|
|
7
|
+
/** Auto-parse JSON messages. Default: true. */
|
|
8
|
+
json?: boolean;
|
|
9
|
+
/** Called after a client connects. */
|
|
10
|
+
onOpen?: (client: WebSocketClient) => void;
|
|
11
|
+
/** Called after a client disconnects. */
|
|
12
|
+
onClose?: (client: WebSocketClient, code: number, reason: string) => void;
|
|
13
|
+
/** Called on a connection error. */
|
|
14
|
+
onError?: (client: WebSocketClient, err: Error) => void;
|
|
15
|
+
}
|
|
16
|
+
/** A WebSocket gateway class — a class that has `@WebSocketGateway(path)`. */
|
|
17
|
+
export type GatewayClass = new (...args: any[]) => any;
|
|
18
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ws/runtime/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,8CAA8C;AAC9C,MAAM,WAAW,uBAAuB;IACvC,+CAA+C;IAC/C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sCAAsC;IACtC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3C,yCAAyC;IACzC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1E,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CACxD;AAED,8EAA8E;AAC9E,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `WebSocketService` — connection registry, rooms, broadcasting.
|
|
3
|
+
*
|
|
4
|
+
* The service is the central state for all open WebSocket
|
|
5
|
+
* connections. It is registered in the DI container as a singleton
|
|
6
|
+
* and consumed by `@WebSocketGateway` classes.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - **Connection registry** — `getConnections()` returns all
|
|
10
|
+
* currently-open clients.
|
|
11
|
+
* - **Per-connection lookup** — `getConnection(id)`.
|
|
12
|
+
* - **Rooms** — `joinRoom`, `leaveRoom`, `broadcastToRoom`. Rooms
|
|
13
|
+
* are auto-cleaned when empty.
|
|
14
|
+
* - **Broadcast** — `broadcast(data)` sends to all open clients.
|
|
15
|
+
* - **Targeted send** — `sendTo(id, data)`.
|
|
16
|
+
* - **Lifecycle tracking** — `onConnect` / `onDisconnect` callbacks
|
|
17
|
+
* for metrics, audit logging, etc.
|
|
18
|
+
*/
|
|
19
|
+
import type { WebSocketClient, WsMessage } from "./types.js";
|
|
20
|
+
import { WebSocketClientImpl } from "./client.js";
|
|
21
|
+
export declare const WEBSOCKET_SERVICE_TOKEN: unique symbol;
|
|
22
|
+
export declare class WebSocketService {
|
|
23
|
+
/** id -> client */
|
|
24
|
+
private clients;
|
|
25
|
+
/** room -> Set<id> */
|
|
26
|
+
private rooms;
|
|
27
|
+
/** Lifecycle callbacks. */
|
|
28
|
+
private onConnectListeners;
|
|
29
|
+
private onDisconnectListeners;
|
|
30
|
+
/** Register a new client. Returns the framework id. */
|
|
31
|
+
register(client: WebSocketClientImpl): string;
|
|
32
|
+
/** Remove a client from the registry. Auto-cleans empty rooms. */
|
|
33
|
+
unregister(client: WebSocketClientImpl): void;
|
|
34
|
+
/** Number of currently-open connections. */
|
|
35
|
+
get size(): number;
|
|
36
|
+
/** Get all open connections. */
|
|
37
|
+
getConnections(): WebSocketClient[];
|
|
38
|
+
/** Get a connection by id. */
|
|
39
|
+
getConnection(id: string): WebSocketClient | undefined;
|
|
40
|
+
/** Join a room. */
|
|
41
|
+
joinRoom(client: WebSocketClient, room: string): void;
|
|
42
|
+
/** Leave a room. */
|
|
43
|
+
leaveRoom(client: WebSocketClient, room: string): void;
|
|
44
|
+
/** Leave all rooms. */
|
|
45
|
+
leaveAllRooms(client: WebSocketClient): void;
|
|
46
|
+
/** All client ids in a room. */
|
|
47
|
+
getRoomMembers(room: string): WebSocketClient[];
|
|
48
|
+
/** All room names currently in use. */
|
|
49
|
+
getRooms(): string[];
|
|
50
|
+
/** Whether a room has any members. */
|
|
51
|
+
hasRoom(room: string): boolean;
|
|
52
|
+
/** Send to all open clients. */
|
|
53
|
+
broadcast(data: WsMessage, filter?: (client: WebSocketClient) => boolean): void;
|
|
54
|
+
/** Send to all clients in a room. */
|
|
55
|
+
broadcastToRoom(room: string, data: WsMessage): void;
|
|
56
|
+
/** Send to a single client by id. */
|
|
57
|
+
sendTo(id: string, data: WsMessage): boolean;
|
|
58
|
+
/** Close all connections (graceful shutdown). */
|
|
59
|
+
closeAll(code?: number, reason?: string): void;
|
|
60
|
+
/** Register a callback for new connections. */
|
|
61
|
+
onConnect(cb: (client: WebSocketClient) => void): void;
|
|
62
|
+
/** Register a callback for closed connections. */
|
|
63
|
+
onDisconnect(cb: (client: WebSocketClient) => void): void;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/ws/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAgB,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,uBAAuB,eAAuC,CAAC;AAE5E,qBAAa,gBAAgB;IAC5B,mBAAmB;IACnB,OAAO,CAAC,OAAO,CAA0C;IACzD,sBAAsB;IACtB,OAAO,CAAC,KAAK,CAAkC;IAC/C,2BAA2B;IAC3B,OAAO,CAAC,kBAAkB,CAA2C;IACrE,OAAO,CAAC,qBAAqB,CAA2C;IAIxE,uDAAuD;IACvD,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IAY7C,kEAAkE;IAClE,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAkB7C,4CAA4C;IAC5C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,gCAAgC;IAChC,cAAc,IAAI,eAAe,EAAE;IAInC,8BAA8B;IAC9B,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAMtD,mBAAmB;IACnB,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAWrD,oBAAoB;IACpB,SAAS,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAUtD,uBAAuB;IACvB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAY5C,gCAAgC;IAChC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE;IAW/C,uCAAuC;IACvC,QAAQ,IAAI,MAAM,EAAE;IAIpB,sCAAsC;IACtC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAO9B,gCAAgC;IAChC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,GAAG,IAAI;IAW/E,qCAAqC;IACrC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAcpD,qCAAqC;IACrC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO;IAW5C,iDAAiD;IACjD,QAAQ,CAAC,IAAI,SAAO,EAAE,MAAM,SAAyB,GAAG,IAAI;IAY5D,+CAA+C;IAC/C,SAAS,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;IAItD,kDAAkD;IAClD,YAAY,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;CAGzD"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public types for `nexusjs/ws`.
|
|
3
|
+
*
|
|
4
|
+
* `nexusjs/ws` is a thin abstraction over Hono's runtime-specific
|
|
5
|
+
* WebSocket support. The same `@WebSocketGateway` / `@OnWebSocketMessage`
|
|
6
|
+
* pattern works on Bun (via `hono/adapter/bun/websocket`) and Node
|
|
7
|
+
* (via the `ws` package).
|
|
8
|
+
*
|
|
9
|
+
* Cloudflare Workers WebSockets require a Durable Objects context
|
|
10
|
+
* and are out of scope for v0.5 — see `docs/user-guide/ws.md` for
|
|
11
|
+
* the integration recipe.
|
|
12
|
+
*/
|
|
13
|
+
/** Mirrors the standard `WebSocket.readyState` enum. */
|
|
14
|
+
export declare const enum WsReadyState {
|
|
15
|
+
CONNECTING = 0,
|
|
16
|
+
OPEN = 1,
|
|
17
|
+
CLOSING = 2,
|
|
18
|
+
CLOSED = 3
|
|
19
|
+
}
|
|
20
|
+
/** A message that can be sent or received. */
|
|
21
|
+
export type WsMessage = string | ArrayBuffer | Uint8Array | object;
|
|
22
|
+
/** Decode options. */
|
|
23
|
+
export interface WsDecodeOptions {
|
|
24
|
+
/** Parse JSON strings automatically. Default: true. */
|
|
25
|
+
json?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/** User-attached arbitrary data on a connection. */
|
|
28
|
+
export interface WsClientData {
|
|
29
|
+
/** Optional authenticated user id. */
|
|
30
|
+
userId?: string | number;
|
|
31
|
+
/** Free-form key-value bag for app use. */
|
|
32
|
+
[key: string]: unknown;
|
|
33
|
+
}
|
|
34
|
+
/** A wrapper around the underlying WebSocket that adds identity, rooms, and data. */
|
|
35
|
+
export interface WebSocketClient {
|
|
36
|
+
/** Unique connection id (assigned by the framework). */
|
|
37
|
+
readonly id: string;
|
|
38
|
+
/** Rooms this client has joined. */
|
|
39
|
+
readonly rooms: ReadonlySet<string>;
|
|
40
|
+
/** User-attached data. */
|
|
41
|
+
readonly data: WsClientData;
|
|
42
|
+
/** The Hono URL the client connected to. */
|
|
43
|
+
readonly url: string | null;
|
|
44
|
+
/** Optional sub-protocol negotiated. */
|
|
45
|
+
readonly protocol: string | null;
|
|
46
|
+
/** Current readyState. */
|
|
47
|
+
readonly readyState: WsReadyState;
|
|
48
|
+
/** Send a message. Plain objects are JSON-encoded. */
|
|
49
|
+
send(data: WsMessage): void;
|
|
50
|
+
/** Close the connection. */
|
|
51
|
+
close(code?: number, reason?: string): void;
|
|
52
|
+
/** Attach arbitrary data to the client (mutation is reflected on `client.data`). */
|
|
53
|
+
setData(data: Partial<WsClientData>): void;
|
|
54
|
+
/** Join a room. */
|
|
55
|
+
joinRoom(room: string): void;
|
|
56
|
+
/** Leave a room. */
|
|
57
|
+
leaveRoom(room: string): void;
|
|
58
|
+
}
|
|
59
|
+
export interface WebSocketConfig {
|
|
60
|
+
/** Default mount path prefix. Default: "/ws". */
|
|
61
|
+
path?: string;
|
|
62
|
+
/** Whether to auto-parse JSON messages. Default: true. */
|
|
63
|
+
json?: boolean;
|
|
64
|
+
/** Heartbeat interval in seconds. 0 = disabled. Default: 30. */
|
|
65
|
+
heartbeatSeconds?: number;
|
|
66
|
+
/** How to handle unknown runtimes. Default: "throw". */
|
|
67
|
+
onUnknownRuntime?: "throw" | "noop";
|
|
68
|
+
}
|
|
69
|
+
export type WsLifecycle = "open" | "message" | "close" | "error";
|
|
70
|
+
/** The method handlers on a gateway. */
|
|
71
|
+
export interface WsLifecycleHandlers {
|
|
72
|
+
open?: (client: WebSocketClient) => void | Promise<void>;
|
|
73
|
+
message?: (client: WebSocketClient, data: unknown) => void | Promise<void>;
|
|
74
|
+
close?: (client: WebSocketClient, code: number, reason: string) => void | Promise<void>;
|
|
75
|
+
error?: (client: WebSocketClient, error: Error) => void | Promise<void>;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ws/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,wDAAwD;AACxD,0BAAkB,YAAY;IAC7B,UAAU,IAAI;IACd,IAAI,IAAI;IACR,OAAO,IAAI;IACX,MAAM,IAAI;CACV;AAMD,8CAA8C;AAC9C,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;AAEnE,sBAAsB;AACtB,MAAM,WAAW,eAAe;IAC/B,uDAAuD;IACvD,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAMD,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC5B,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,2CAA2C;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED,qFAAqF;AACrF,MAAM,WAAW,eAAe;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,4CAA4C;IAC5C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,wCAAwC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,0BAA0B;IAC1B,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;IAElC,sDAAsD;IACtD,IAAI,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,4BAA4B;IAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,oFAAoF;IACpF,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAC3C,mBAAmB;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,oBAAoB;IACpB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAMD,MAAM,WAAW,eAAe;IAC/B,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACpC;AAMD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAEjE,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IACnC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE"}
|