@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,25 @@
|
|
|
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/redis/adapters/bun.ts", "../src/redis/adapters/cloudflare.ts", "../src/redis/adapters/memory.ts", "../src/redis/adapters/node.ts", "../src/redis/adapters/index.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/redis/module.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 * Bun runtime adapter for `nexusjs/redis`.\n *\n * Uses the built-in `Bun.redis` client. No extra package needed.\n * The client is lazily opened on first use.\n */\n\nimport type {\n\tRedisClient,\n\tRedisConfig,\n\tRedisScanOptions,\n\tRedisScanResult,\n\tRedisSetOptions,\n\tRedisValue,\n} from \"../types.js\";\n\n/** The shape we need from `Bun.redis()`. */\ninterface BunRedisClient {\n\tget(key: string): Promise<string | null>;\n\tset(\n\t\tkey: string,\n\t\tvalue: string,\n\t\toptions?: { EX?: number; PX?: number; NX?: boolean; XX?: boolean },\n\t): Promise<\"OK\" | null>;\n\tdel(key: string): Promise<number>;\n\texists(key: string): Promise<number>;\n\tincr(key: string): Promise<number>;\n\tscan(cursor: number, options?: { MATCH?: string; COUNT?: number }): Promise<{\n\t\tcursor: number;\n\t\tkeys: string[];\n\t}>;\n\tclose(): void | Promise<void>;\n}\n\nexport class BunRedisAdapter implements RedisClient {\n\treadonly adapter = \"bun\" as const;\n\tprivate client: BunRedisClient | null = null;\n\tprivate readonly url: string;\n\tprivate readonly keyPrefix: string;\n\tprivate readonly defaultTtlSeconds: number;\n\n\tconstructor(config: RedisConfig = {}) {\n\t\tthis.url = config.url ?? process.env[\"REDIS_URL\"] ?? \"redis://localhost:6379\";\n\t\tthis.keyPrefix = config.keyPrefix ?? \"\";\n\t\tthis.defaultTtlSeconds = config.defaultTtlSeconds ?? 0;\n\t}\n\n\tprivate getClient(): BunRedisClient {\n\t\tif (this.client) return this.client;\n\t\t// Bun.redis is a global; cast through unknown so we can compile\n\t\t// in environments that don't have Bun's lib.d.ts loaded.\n\t\tconst bun = (globalThis as unknown as { Bun?: { redis: (url: string) => BunRedisClient } }).Bun;\n\t\tif (!bun || typeof bun.redis !== \"function\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"BunRedisAdapter can only be used in a Bun runtime. \" +\n\t\t\t\t\t\"On Node, use NodeRedisAdapter (install ioredis).\",\n\t\t\t);\n\t\t}\n\t\tthis.client = bun.redis(this.url);\n\t\treturn this.client!;\n\t}\n\n\tprivate k(key: string): string {\n\t\treturn this.keyPrefix + key;\n\t}\n\n\tasync get(key: string): Promise<RedisValue> {\n\t\treturn this.getClient().get(this.k(key));\n\t}\n\n\tasync set(key: string, value: string, options?: RedisSetOptions): Promise<void> {\n\t\tconst ex = options?.ex ?? this.defaultTtlSeconds ?? undefined;\n\t\tconst px = options?.px ?? undefined;\n\t\tconst bunOpts: { EX?: number; PX?: number; NX?: boolean; XX?: boolean } = {};\n\t\tif (ex) bunOpts.EX = ex;\n\t\tif (px) bunOpts.PX = px;\n\t\tif (options?.nx) bunOpts.NX = true;\n\t\tif (options?.xx) bunOpts.XX = true;\n\t\tawait this.getClient().set(this.k(key), value, bunOpts);\n\t}\n\n\tasync del(key: string): Promise<number> {\n\t\treturn this.getClient().del(this.k(key));\n\t}\n\n\tasync exists(key: string): Promise<boolean> {\n\t\treturn (await this.getClient().exists(this.k(key))) > 0;\n\t}\n\n\tasync incr(key: string, by = 1, options?: { ex?: number }): Promise<number> {\n\t\tconst fullKey = this.k(key);\n\t\tconst client = this.getClient();\n\t\tconst value = await client.incr(fullKey);\n\t\t// On the first increment (value === 1), apply the TTL if requested.\n\t\tif (options?.ex && value === by) {\n\t\t\tawait client.set(fullKey, String(value), { EX: options.ex });\n\t\t}\n\t\treturn value;\n\t}\n\n\tasync scan(options: RedisScanOptions = {}): Promise<RedisScanResult> {\n\t\tconst cursor = typeof options.cursor === \"number\" ? options.cursor : 0;\n\t\tconst res = await this.getClient().scan(cursor, {\n\t\t\tMATCH: options.match ?? \"*\",\n\t\t\tCOUNT: options.count ?? 100,\n\t\t});\n\t\treturn {\n\t\t\tcursor: res.cursor,\n\t\t\tkeys: (res.keys ?? []).map((k) =>\n\t\t\t\tthis.keyPrefix && k.startsWith(this.keyPrefix)\n\t\t\t\t\t? k.slice(this.keyPrefix.length)\n\t\t\t\t\t: k,\n\t\t\t),\n\t\t};\n\t}\n\n\tasync close(): Promise<void> {\n\t\tif (this.client) {\n\t\t\tawait this.client.close();\n\t\t\tthis.client = null;\n\t\t}\n\t}\n}\n",
|
|
11
|
+
"/**\n * Cloudflare Workers KV adapter for `nexusjs/redis`.\n *\n * Workers KV is **not** Redis, but the surface is close enough\n * that the same `RedisClient` API can sit on top of it. The\n * adapter:\n *\n * - Maps `set(key, value, { ex })` to `KVNamespace.put()` with\n * `expirationTtl` (seconds).\n * - Maps `scan({ match })` to `KVNamespace.list({ prefix })`,\n * which is the closest thing KV offers to Redis `SCAN MATCH`.\n * The `cursor` field is a Cloudflare opaque string.\n * - `del` uses `KVNamespace.delete()`.\n * - `incr` falls back to a small read-modify-write: get the\n * value, parse as int, add, put back. (KV doesn't have\n * atomic INCR.) Use with care — concurrent writes can lose\n * updates. For high-contention counters use a real Redis.\n *\n * Cloudflare imposes a 25 MB value limit per key and a global\n * 100k reads / 1000 writes per second per KV namespace. Don't\n * store large objects in KV.\n *\n * To use:\n *\n * // In a Worker request handler:\n * const client = createRedisClient({\n * adapter: \"cloudflare\",\n * kv: c.env.SESSIONS, // KVNamespace binding from wrangler.toml\n * });\n */\n\nimport type {\n\tKVNamespaceLike,\n\tRedisClient,\n\tRedisConfig,\n\tRedisScanOptions,\n\tRedisScanResult,\n\tRedisSetOptions,\n\tRedisValue,\n} from \"../types.js\";\n\nexport class CloudflareKVAdapter implements RedisClient {\n\treadonly adapter = \"cloudflare\" as const;\n\tprivate kv: KVNamespaceLike | null = null;\n\tprivate readonly keyPrefix: string;\n\tprivate readonly defaultTtlSeconds: number;\n\n\tconstructor(config: RedisConfig = {}) {\n\t\tthis.keyPrefix = config.keyPrefix ?? \"\";\n\t\tthis.defaultTtlSeconds = config.defaultTtlSeconds ?? 0;\n\t\tif (config.kv) this.kv = config.kv;\n\t}\n\n\tprivate getKV(): KVNamespaceLike {\n\t\tif (this.kv) return this.kv;\n\t\t// Auto-detect from `globalThis.env` (Workers context).\n\t\tconst env = (globalThis as unknown as { env?: { KV?: KVNamespaceLike } }).env;\n\t\tif (env?.KV) {\n\t\t\tthis.kv = env.KV;\n\t\t\treturn this.kv;\n\t\t}\n\t\tthrow new Error(\n\t\t\t\"CloudflareKVAdapter could not find a KV binding. \" +\n\t\t\t\t\"Pass it explicitly via RedisConfig({ kv }) or run inside a \" +\n\t\t\t\t\"Workers request handler where `c.env.KV` is available.\",\n\t\t);\n\t}\n\n\tprivate k(key: string): string {\n\t\treturn this.keyPrefix + key;\n\t}\n\n\tprivate stripPrefix(key: string): string {\n\t\treturn this.keyPrefix && key.startsWith(this.keyPrefix)\n\t\t\t? key.slice(this.keyPrefix.length)\n\t\t\t: key;\n\t}\n\n\tasync get(key: string): Promise<RedisValue> {\n\t\treturn this.getKV().get(this.k(key));\n\t}\n\n\tasync set(key: string, value: string, options?: RedisSetOptions): Promise<void> {\n\t\tconst ex = options?.ex ?? this.defaultTtlSeconds ?? undefined;\n\t\tif (ex && ex > 0) {\n\t\t\tawait this.getKV().put(this.k(key), value, { expirationTtl: ex });\n\t\t} else {\n\t\t\tawait this.getKV().put(this.k(key), value);\n\t\t}\n\t}\n\n\tasync del(key: string): Promise<number> {\n\t\t// KV.delete returns void; we conservatively return 1 if a value\n\t\t// existed before, 0 otherwise.\n\t\tconst existed = (await this.getKV().get(this.k(key))) !== null;\n\t\tawait this.getKV().delete(this.k(key));\n\t\treturn existed ? 1 : 0;\n\t}\n\n\tasync exists(key: string): Promise<boolean> {\n\t\treturn (await this.getKV().get(this.k(key))) !== null;\n\t}\n\n\tasync incr(key: string, by = 1, options?: { ex?: number }): Promise<number> {\n\t\t// Naive read-modify-write. KV doesn't have atomic INCR. Don't\n\t\t// use this for high-contention counters.\n\t\tconst fullKey = this.k(key);\n\t\tconst raw = await this.getKV().get(fullKey);\n\t\tconst current = raw ? Number.parseInt(raw, 10) || 0 : 0;\n\t\tconst next = current + by;\n\t\tconst ex = options?.ex ?? this.defaultTtlSeconds ?? undefined;\n\t\tif (ex && ex > 0) {\n\t\t\tawait this.getKV().put(fullKey, String(next), { expirationTtl: ex });\n\t\t} else {\n\t\t\tawait this.getKV().put(fullKey, String(next));\n\t\t}\n\t\treturn next;\n\t}\n\n\tasync scan(options: RedisScanOptions = {}): Promise<RedisScanResult> {\n\t\t// KV.list() supports `prefix` only — convert a `match` glob\n\t\t// to a prefix. Full glob support would require client-side\n\t\t// filtering. The cursor is a Cloudflare opaque string.\n\t\tconst match = options.match ?? \"*\";\n\t\tconst prefix = globToPrefix(match, this.keyPrefix);\n\t\tconst res = await this.getKV().list({\n\t\t\tprefix,\n\t\t\tlimit: options.count ?? 100,\n\t\t\tcursor: typeof options.cursor === \"string\" ? options.cursor : undefined,\n\t\t});\n\t\treturn {\n\t\t\tcursor: res.cursor,\n\t\t\tkeys: (res.keys ?? []).map((k) => this.stripPrefix(k.name)),\n\t\t};\n\t}\n\n\tasync close(): Promise<void> {\n\t\t// KV has no client to close.\n\t}\n}\n\n/** Convert a Redis-style glob (`*`, `?`, `[abc]`) to a KV prefix. */\nfunction globToPrefix(glob: string, keyPrefix: string): string {\n\t// Everything up to the first glob meta-character.\n\tconst meta = /[*?\\[]/.exec(glob);\n\tconst base = meta ? glob.slice(0, meta.index) : glob;\n\treturn (keyPrefix ?? \"\") + base;\n}\n",
|
|
12
|
+
"/**\n * In-memory adapter for `nexusjs/redis`.\n *\n * Used for tests and single-process dev. Not cluster-safe; values\n * don't survive process restart.\n */\n\nimport type {\n\tRedisClient,\n\tRedisConfig,\n\tRedisScanOptions,\n\tRedisScanResult,\n\tRedisSetOptions,\n\tRedisValue,\n} from \"../types.js\";\n\ninterface Entry {\n\tvalue: string;\n\texpiresAt: number | null; // ms epoch; null = no expiry\n}\n\nexport class MemoryRedisAdapter implements RedisClient {\n\treadonly adapter = \"memory\" as const;\n\tprivate data = new Map<string, Entry>();\n\tprivate readonly keyPrefix: string;\n\tprivate readonly defaultTtlSeconds: number;\n\n\tconstructor(config: RedisConfig = {}) {\n\t\tthis.keyPrefix = config.keyPrefix ?? \"\";\n\t\tthis.defaultTtlSeconds = config.defaultTtlSeconds ?? 0;\n\t}\n\n\tprivate k(key: string): string {\n\t\treturn this.keyPrefix + key;\n\t}\n\n\tprivate stripPrefix(key: string): string {\n\t\treturn this.keyPrefix && key.startsWith(this.keyPrefix)\n\t\t\t? key.slice(this.keyPrefix.length)\n\t\t\t: key;\n\t}\n\n\tprivate isExpired(e: Entry | undefined): e is undefined {\n\t\treturn !e || (e.expiresAt !== null && e.expiresAt < Date.now());\n\t}\n\n\tprivate purge(key: string): void {\n\t\tconst e = this.data.get(key);\n\t\tif (this.isExpired(e)) this.data.delete(key);\n\t}\n\n\tasync get(key: string): Promise<RedisValue> {\n\t\tconst k = this.k(key);\n\t\tthis.purge(k);\n\t\tconst e = this.data.get(k);\n\t\treturn e ? e.value : null;\n\t}\n\n\tasync set(key: string, value: string, options?: RedisSetOptions): Promise<void> {\n\t\tconst k = this.k(key);\n\t\tconst ttl =\n\t\t\toptions?.ex !== undefined\n\t\t\t\t? options.ex\n\t\t\t\t: options?.px !== undefined\n\t\t\t\t\t? options.px / 1000\n\t\t\t\t\t: this.defaultTtlSeconds;\n\t\tconst expiresAt = ttl && ttl > 0 ? Date.now() + ttl * 1000 : null;\n\t\tif (options?.nx && !this.isExpired(this.data.get(k))) return; // NX semantics\n\t\tif (options?.xx && this.isExpired(this.data.get(k))) return; // XX semantics\n\t\tthis.data.set(k, { value, expiresAt });\n\t}\n\n\tasync del(key: string): Promise<number> {\n\t\tconst k = this.k(key);\n\t\tconst existed = this.data.delete(k);\n\t\treturn existed ? 1 : 0;\n\t}\n\n\tasync exists(key: string): Promise<boolean> {\n\t\tconst k = this.k(key);\n\t\tthis.purge(k);\n\t\treturn this.data.has(k);\n\t}\n\n\tasync incr(key: string, by = 1, options?: { ex?: number }): Promise<number> {\n\t\tconst k = this.k(key);\n\t\tthis.purge(k);\n\t\tconst e = this.data.get(k);\n\t\tconst current = e ? Number.parseInt(e.value, 10) || 0 : 0;\n\t\tconst next = current + by;\n\t\tconst ttl = options?.ex ?? this.defaultTtlSeconds ?? undefined;\n\t\tconst expiresAt = ttl && ttl > 0 ? Date.now() + ttl * 1000 : null;\n\t\tthis.data.set(k, { value: String(next), expiresAt });\n\t\treturn next;\n\t}\n\n\tasync scan(options: RedisScanOptions = {}): Promise<RedisScanResult> {\n\t\tconst match = options.match ?? \"*\";\n\t\t// The match pattern is matched against the full key (with\n\t\t// prefix included). Callers should write patterns that\n\t\t// include the prefix.\n\t\tconst re = globToRegex(match);\n\t\tconst keys: string[] = [];\n\t\tfor (const k of this.data.keys()) {\n\t\t\tif (this.keyPrefix && !k.startsWith(this.keyPrefix)) continue;\n\t\t\tif (re.test(k)) keys.push(this.stripPrefix(k));\n\t\t}\n\t\treturn { cursor: \"0\", keys };\n\t}\n\n\tasync close(): Promise<void> {\n\t\tthis.data.clear();\n\t}\n}\n\nfunction globToRegex(glob: string): RegExp {\n\tconst escaped = glob\n\t\t.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n\t\t.replace(/\\*/g, \".*\")\n\t\t.replace(/\\?/g, \".\");\n\treturn new RegExp(\"^\" + escaped + \"$\");\n}\n",
|
|
13
|
+
"/**\n * Node.js runtime adapter for `nexusjs/redis`.\n *\n * Uses the `ioredis` package. The package is an **optional**\n * peer dependency of `nexusjs` — install it only when targeting\n * Node:\n *\n * bun add ioredis\n *\n * The adapter opens a single shared client per `RedisConfig` and\n * reuses it across `get` / `set` / `del` / `scan` calls. Use\n * `await client.close()` to release the connection.\n */\n\nimport type {\n\tRedisClient,\n\tRedisConfig,\n\tRedisScanOptions,\n\tRedisScanResult,\n\tRedisSetOptions,\n\tRedisValue,\n} from \"../types.js\";\n\n/** The shape we need from `ioredis`. We don't depend on the\n * package at the type level so users who don't install it\n * still type-check. */\ninterface IORedisLike {\n\tget(key: string): Promise<string | null>;\n\tset(\n\t\tkey: string,\n\t\tvalue: string,\n\t\tmodeOrEx?: string | number,\n\t\tduration?: number,\n\t\tflag?: \"NX\" | \"XX\",\n\t): Promise<\"OK\" | null>;\n\tdel(key: string | string[]): Promise<number>;\n\texists(key: string): Promise<number>;\n\tincr(key: string): Promise<number>;\n\texpire(key: string, seconds: number): Promise<number>;\n\tscan(\n\t\tcursor: number | string,\n\t\tmatch: string,\n\t\tcount: number,\n\t): Promise<[string | number, string[]]>;\n\tquit(): Promise<\"OK\">;\n\tdisconnect(): void;\n}\n\nexport class NodeRedisAdapter implements RedisClient {\n\treadonly adapter = \"node\" as const;\n\tprivate client: IORedisLike | null = null;\n\tprivate readonly url: string;\n\tprivate readonly keyPrefix: string;\n\tprivate readonly defaultTtlSeconds: number;\n\tprivate readonly nodeOptions: Record<string, unknown>;\n\n\tconstructor(config: RedisConfig = {}) {\n\t\tthis.url = config.url ?? process.env[\"REDIS_URL\"] ?? \"redis://localhost:6379\";\n\t\tthis.keyPrefix = config.keyPrefix ?? \"\";\n\t\tthis.defaultTtlSeconds = config.defaultTtlSeconds ?? 0;\n\t\tthis.nodeOptions = config.nodeOptions ?? {};\n\t}\n\n\tprivate async getClient(): Promise<IORedisLike> {\n\t\tif (this.client) return this.client;\n\t\ttry {\n\t\t\t// @ts-ignore - optional peer dep\n\t\t\tconst mod = await import(\"ioredis\");\n\t\t\tconst Ctor = (mod as any).default ?? (mod as any);\n\t\t\tif (typeof Ctor !== \"function\") {\n\t\t\t\tthrow new Error(\"ioredis module did not export a constructor\");\n\t\t\t}\n\t\t\tthis.client = new Ctor(this.url, this.nodeOptions) as IORedisLike;\n\t\t} catch (err) {\n\t\t\tthrow new Error(\n\t\t\t\t\"NodeRedisAdapter requires the `ioredis` package. \" +\n\t\t\t\t\t\"Install with: bun add ioredis\",\n\t\t\t);\n\t\t}\n\t\treturn this.client!;\n\t}\n\n\tprivate k(key: string): string {\n\t\treturn this.keyPrefix + key;\n\t}\n\n\tprivate stripPrefix(key: string): string {\n\t\treturn this.keyPrefix && key.startsWith(this.keyPrefix)\n\t\t\t? key.slice(this.keyPrefix.length)\n\t\t\t: key;\n\t}\n\n\tasync get(key: string): Promise<RedisValue> {\n\t\treturn (await this.getClient()).get(this.k(key));\n\t}\n\n\tasync set(key: string, value: string, options?: RedisSetOptions): Promise<void> {\n\t\tconst ex = options?.ex ?? this.defaultTtlSeconds ?? undefined;\n\t\tconst c = await this.getClient();\n\t\tconst fullKey = this.k(key);\n\t\t// ioredis set signature: set(key, value, EX, seconds, NX|XX) or\n\t\t// set(key, value, NX|XX). We dispatch on the combination of\n\t\t// flags.\n\t\tif (options?.nx) {\n\t\t\tawait c.set(fullKey, value, \"EX\", ex ?? 0, \"NX\");\n\t\t} else if (options?.xx) {\n\t\t\tawait c.set(fullKey, value, \"EX\", ex ?? 0, \"XX\");\n\t\t} else if (ex) {\n\t\t\tawait c.set(fullKey, value, \"EX\", ex);\n\t\t} else {\n\t\t\tawait c.set(fullKey, value);\n\t\t}\n\t}\n\n\tasync del(key: string): Promise<number> {\n\t\treturn (await this.getClient()).del(this.k(key));\n\t}\n\n\tasync exists(key: string): Promise<boolean> {\n\t\tconst n = await (await this.getClient()).exists(this.k(key));\n\t\treturn n > 0;\n\t}\n\n\tasync incr(key: string, by = 1, options?: { ex?: number }): Promise<number> {\n\t\tconst fullKey = this.k(key);\n\t\tconst c = await this.getClient();\n\t\tlet value: number;\n\t\tif (by === 1) {\n\t\t\tvalue = await c.incr(fullKey);\n\t\t} else {\n\t\t\t// ioredis doesn't have incrby with delta? It does — use\n\t\t\t// the multi-step: `incrby` is the ioredis method. Patch\n\t\t\t// the IORedisLike to include it.\n\t\t\tvalue = await (c as unknown as { incrby: (k: string, n: number) => Promise<number> }).incrby(fullKey, by);\n\t\t}\n\t\tif (options?.ex && value === by) {\n\t\t\tawait c.expire(fullKey, options.ex);\n\t\t}\n\t\treturn value;\n\t}\n\n\tasync scan(options: RedisScanOptions = {}): Promise<RedisScanResult> {\n\t\tconst cursor = typeof options.cursor === \"number\" || typeof options.cursor === \"string\"\n\t\t\t? options.cursor\n\t\t\t: 0;\n\t\tconst [next, keys] = await (await this.getClient()).scan(\n\t\t\tcursor,\n\t\t\toptions.match ?? \"*\",\n\t\t\toptions.count ?? 100,\n\t\t);\n\t\treturn {\n\t\t\tcursor: next,\n\t\t\tkeys: (keys ?? []).map((k) => this.stripPrefix(k)),\n\t\t};\n\t}\n\n\tasync close(): Promise<void> {\n\t\tif (this.client) {\n\t\t\ttry {\n\t\t\t\tawait this.client.quit();\n\t\t\t} catch {\n\t\t\t\tthis.client.disconnect();\n\t\t\t}\n\t\t\tthis.client = null;\n\t\t}\n\t}\n}\n",
|
|
14
|
+
"/**\n * Runtime detection and factory for `nexusjs/redis` adapters.\n *\n * - `Bun` → `BunRedisAdapter` (built-in `Bun.redis`, no extra package).\n * - `node` → `NodeRedisAdapter` (uses `ioredis` — install separately).\n * - `cloudflare` (Workers / Pages) → `CloudflareKVAdapter` (Workers KV).\n * - `memory` → `MemoryRedisAdapter` (always available, no external dep).\n *\n * The factory `createRedisClient(config)` auto-detects when\n * `config.adapter` is omitted.\n */\n\nimport type { RedisAdapterKind, RedisClient, RedisConfig } from \"../types.js\";\nimport { BunRedisAdapter } from \"./bun.js\";\nimport { CloudflareKVAdapter } from \"./cloudflare.js\";\nimport { MemoryRedisAdapter } from \"./memory.js\";\nimport { NodeRedisAdapter } from \"./node.js\";\n\n/** Detect the active runtime. */\nexport function detectRedisRuntime(): RedisAdapterKind {\n\t// Cloudflare Workers — most specific first.\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\tif (typeof (globalThis as { Bun?: unknown }).Bun !== \"undefined\") return \"bun\";\n\tif (typeof process !== \"undefined\" && process.versions?.node) return \"node\";\n\treturn \"memory\";\n}\n\n/**\n * Create a Redis client with the configured (or auto-detected)\n * adapter.\n *\n * const client = createRedisClient({ adapter: \"bun\", url: \"redis://localhost:6379\" });\n * await client.set(\"hello\", \"world\", { ex: 60 });\n * console.log(await client.get(\"hello\")); // → \"world\"\n */\nexport function createRedisClient(config: RedisConfig = {}): RedisClient {\n\tconst adapter = config.adapter ?? detectRedisRuntime();\n\tswitch (adapter) {\n\t\tcase \"bun\":\n\t\t\treturn new BunRedisAdapter(config);\n\t\tcase \"node\":\n\t\t\treturn new NodeRedisAdapter(config);\n\t\tcase \"cloudflare\":\n\t\t\treturn new CloudflareKVAdapter(config);\n\t\tcase \"memory\":\n\t\t\treturn new MemoryRedisAdapter(config);\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = adapter;\n\t\t\tthrow new Error(`unknown redis adapter: ${_exhaustive as string}`);\n\t\t}\n\t}\n}\n\nexport {\n\tBunRedisAdapter,\n\tCloudflareKVAdapter,\n\tMemoryRedisAdapter,\n\tNodeRedisAdapter,\n};",
|
|
15
|
+
"/**\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",
|
|
16
|
+
"/**\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",
|
|
17
|
+
"/**\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}",
|
|
18
|
+
"/**\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",
|
|
19
|
+
"/**\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",
|
|
20
|
+
"/**\n * `RedisModule` — wires `RedisClient` into the DI container.\n *\n * @Module({\n * imports: [\n * RedisModule.forRoot({\n * adapter: \"bun\", // or \"node\" | \"cloudflare\" | \"memory\"\n * url: \"redis://localhost:6379\",\n * keyPrefix: \"myapp:\",\n * }),\n * ],\n * })\n * class AppModule {}\n *\n * @Injectable()\n * class UserService {\n * constructor(@Inject(REDIS_CLIENT_TOKEN) private redis: RedisClient) {}\n * async countVisits(userId: string) {\n * return this.redis.incr(`visits:${userId}`, 1, { ex: 60 * 60 });\n * }\n * }\n *\n * Most users won't import `RedisModule` directly — the\n * `SessionModule` and `CacheModule` use it under the hood when\n * the user configures a `redis` / `cloudflare-kv` backend.\n */\n\nimport { Module } from \"../core/decorators/index.js\";\nimport { createRedisClient } from \"./adapters/index.js\";\nimport type { RedisClient, RedisConfig } from \"./types.js\";\n\nexport const REDIS_CLIENT_TOKEN = Symbol.for(\"nexus:RedisClient\");\n\n@Module({\n\tproviders: [\n\t\t{\n\t\t\tprovide: REDIS_CLIENT_TOKEN,\n\t\t\tuseFactory: () => createRedisClient(),\n\t\t},\n\t],\n\texports: [REDIS_CLIENT_TOKEN],\n})\nexport class RedisModule {\n\tstatic forRoot(config: RedisConfig = {}) {\n\t\t@Module({\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tprovide: REDIS_CLIENT_TOKEN,\n\t\t\t\t\tuseFactory: () => createRedisClient(config),\n\t\t\t\t},\n\t\t\t\t{ provide: \"REDIS_CONFIG\", useValue: config },\n\t\t\t],\n\t\t\texports: [REDIS_CLIENT_TOKEN, \"REDIS_CONFIG\"],\n\t\t})\n\t\tclass ConfiguredRedisModule {}\n\t\tObject.defineProperty(ConfiguredRedisModule, \"name\", {\n\t\t\tvalue: \"ConfiguredRedisModule\",\n\t\t});\n\t\treturn ConfiguredRedisModule as unknown as typeof RedisModule;\n\t}\n}\n"
|
|
21
|
+
],
|
|
22
|
+
"mappings": "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",
|
|
23
|
+
"debugId": "1A5033ACD8F39BF864756E2164756E21",
|
|
24
|
+
"names": []
|
|
25
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `RedisModule` — wires `RedisClient` into the DI container.
|
|
3
|
+
*
|
|
4
|
+
* @Module({
|
|
5
|
+
* imports: [
|
|
6
|
+
* RedisModule.forRoot({
|
|
7
|
+
* adapter: "bun", // or "node" | "cloudflare" | "memory"
|
|
8
|
+
* url: "redis://localhost:6379",
|
|
9
|
+
* keyPrefix: "myapp:",
|
|
10
|
+
* }),
|
|
11
|
+
* ],
|
|
12
|
+
* })
|
|
13
|
+
* class AppModule {}
|
|
14
|
+
*
|
|
15
|
+
* @Injectable()
|
|
16
|
+
* class UserService {
|
|
17
|
+
* constructor(@Inject(REDIS_CLIENT_TOKEN) private redis: RedisClient) {}
|
|
18
|
+
* async countVisits(userId: string) {
|
|
19
|
+
* return this.redis.incr(`visits:${userId}`, 1, { ex: 60 * 60 });
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
*
|
|
23
|
+
* Most users won't import `RedisModule` directly — the
|
|
24
|
+
* `SessionModule` and `CacheModule` use it under the hood when
|
|
25
|
+
* the user configures a `redis` / `cloudflare-kv` backend.
|
|
26
|
+
*/
|
|
27
|
+
import type { RedisConfig } from "./types.js";
|
|
28
|
+
export declare const REDIS_CLIENT_TOKEN: unique symbol;
|
|
29
|
+
export declare class RedisModule {
|
|
30
|
+
static forRoot(config?: RedisConfig): typeof RedisModule;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/redis/module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3D,eAAO,MAAM,kBAAkB,eAAkC,CAAC;AAElE,qBASa,WAAW;IACvB,MAAM,CAAC,OAAO,CAAC,MAAM,GAAE,WAAgB,GAeK,OAAO,WAAW;CAE9D"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public types for `nexusjs/redis`.
|
|
3
|
+
*
|
|
4
|
+
* `nexusjs/redis` is a thin, runtime-aware abstraction over a
|
|
5
|
+
* Redis-compatible key-value store. The same API works on:
|
|
6
|
+
*
|
|
7
|
+
* - **Bun** (primary): uses the built-in `Bun.redis` — no
|
|
8
|
+
* extra package needed.
|
|
9
|
+
* - **Node.js**: uses the `ioredis` package (optional peer dep).
|
|
10
|
+
* - **Cloudflare Workers / Pages**: uses Workers KV
|
|
11
|
+
* (`c.env.KV`). KV is **not** Redis, but the surface is
|
|
12
|
+
* close enough that a single API serves both — KV is
|
|
13
|
+
* eventually consistent and limited to ~25 MB per value,
|
|
14
|
+
* so use it only for ephemeral state like sessions and
|
|
15
|
+
* short-lived cache.
|
|
16
|
+
*
|
|
17
|
+
* For the Cloudflare case, set `adapter: "cloudflare"` and
|
|
18
|
+
* pass the `KVNamespace` binding via `client.env.KV`. The
|
|
19
|
+
* framework will pick it up automatically when running in
|
|
20
|
+
* the Workers runtime.
|
|
21
|
+
*
|
|
22
|
+
* Zero hard deps. `ioredis` is an **optional** peer dep —
|
|
23
|
+
* install it only when targeting Node.
|
|
24
|
+
*/
|
|
25
|
+
export type RedisAdapterKind = "bun" | "node" | "cloudflare" | "memory";
|
|
26
|
+
/** A single key/value with optional expiry. */
|
|
27
|
+
export interface RedisSetOptions {
|
|
28
|
+
/** TTL in seconds. */
|
|
29
|
+
ex?: number;
|
|
30
|
+
/** TTL in milliseconds. */
|
|
31
|
+
px?: number;
|
|
32
|
+
/** Only set if the key does not exist. */
|
|
33
|
+
nx?: boolean;
|
|
34
|
+
/** Only set if the key already exists. */
|
|
35
|
+
xx?: boolean;
|
|
36
|
+
}
|
|
37
|
+
/** Result of a `get` call — `null` if missing. */
|
|
38
|
+
export type RedisValue = string | null;
|
|
39
|
+
/** A single key returned by `scan` / `keys`. */
|
|
40
|
+
export type RedisKey = string;
|
|
41
|
+
/** Cursor returned by `scan`. */
|
|
42
|
+
export type RedisCursor = string | number;
|
|
43
|
+
/** Scan options. */
|
|
44
|
+
export interface RedisScanOptions {
|
|
45
|
+
/** Match pattern. Default: `*` (all keys). */
|
|
46
|
+
match?: string;
|
|
47
|
+
/** Number of keys per cursor step. Default: 100. */
|
|
48
|
+
count?: number;
|
|
49
|
+
/** Starting cursor. Default: 0. */
|
|
50
|
+
cursor?: RedisCursor;
|
|
51
|
+
}
|
|
52
|
+
/** Result of a single `scan` step. */
|
|
53
|
+
export interface RedisScanResult {
|
|
54
|
+
/** Next cursor; `"0"` means iteration is complete. */
|
|
55
|
+
cursor: RedisCursor;
|
|
56
|
+
/** Keys found in this step. */
|
|
57
|
+
keys: RedisKey[];
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The minimal Redis-compatible API surface that NexusJS modules
|
|
61
|
+
* (session, cache, queue) depend on. Adapters implement this.
|
|
62
|
+
*/
|
|
63
|
+
export interface RedisClient {
|
|
64
|
+
readonly adapter: RedisAdapterKind;
|
|
65
|
+
/** Get a value by key. `null` if missing. */
|
|
66
|
+
get(key: string): Promise<RedisValue>;
|
|
67
|
+
/**
|
|
68
|
+
* Set a value with optional expiry. Resolves once the value
|
|
69
|
+
* is durably written.
|
|
70
|
+
*/
|
|
71
|
+
set(key: string, value: string, options?: RedisSetOptions): Promise<void>;
|
|
72
|
+
/** Delete a key. Returns the number of keys removed (0 or 1). */
|
|
73
|
+
del(key: string): Promise<number>;
|
|
74
|
+
/** Test whether a key exists. */
|
|
75
|
+
exists(key: string): Promise<boolean>;
|
|
76
|
+
/**
|
|
77
|
+
* Increment a counter, optionally setting an initial value
|
|
78
|
+
* with `ex` (only applied on creation). Resolves to the new
|
|
79
|
+
* value.
|
|
80
|
+
*/
|
|
81
|
+
incr(key: string, by?: number, options?: {
|
|
82
|
+
ex?: number;
|
|
83
|
+
}): Promise<number>;
|
|
84
|
+
/**
|
|
85
|
+
* Iterate keys. Each call returns a cursor; pass the next
|
|
86
|
+
* cursor back in until `cursor === "0"`. For Cloudflare KV
|
|
87
|
+
* this is implemented via `KV.list()`.
|
|
88
|
+
*/
|
|
89
|
+
scan(options?: RedisScanOptions): Promise<RedisScanResult>;
|
|
90
|
+
/** Close the client (release sockets, etc.). No-op for in-memory. */
|
|
91
|
+
close(): Promise<void>;
|
|
92
|
+
}
|
|
93
|
+
export interface RedisConfig {
|
|
94
|
+
/**
|
|
95
|
+
* Adapter to use. Default: auto-detected from the runtime.
|
|
96
|
+
* - `"bun"`: uses `Bun.redis`
|
|
97
|
+
* - `"node"`: uses `ioredis`
|
|
98
|
+
* - `"cloudflare"`: uses Workers KV (set `client.env.KV`)
|
|
99
|
+
* - `"memory"`: in-process map (no external dep; useful
|
|
100
|
+
* for tests / single-process dev)
|
|
101
|
+
*/
|
|
102
|
+
adapter?: RedisAdapterKind;
|
|
103
|
+
/**
|
|
104
|
+
* Redis server URL. Used by `bun` and `node` adapters.
|
|
105
|
+
* Default: `process.env.REDIS_URL ?? "redis://localhost:6379"`.
|
|
106
|
+
*/
|
|
107
|
+
url?: string;
|
|
108
|
+
/** Key prefix. Default: `""` (no prefix). */
|
|
109
|
+
keyPrefix?: string;
|
|
110
|
+
/** Default TTL in seconds. `0` = no expiry. Default: 0. */
|
|
111
|
+
defaultTtlSeconds?: number;
|
|
112
|
+
/**
|
|
113
|
+
* Cloudflare-only. The `KVNamespace` binding to use. The
|
|
114
|
+
* framework auto-detects `c.env?.KV` at boot when running
|
|
115
|
+
* on Workers; you can also pass it explicitly.
|
|
116
|
+
*/
|
|
117
|
+
kv?: KVNamespaceLike;
|
|
118
|
+
/**
|
|
119
|
+
* Node-only. Extra `ioredis` options (tls, password, db index,
|
|
120
|
+
* retry strategy, etc.). Ignored by other adapters.
|
|
121
|
+
*/
|
|
122
|
+
nodeOptions?: Record<string, unknown>;
|
|
123
|
+
}
|
|
124
|
+
/** Minimal shape we need from Workers `KVNamespace`. */
|
|
125
|
+
export interface KVNamespaceLike {
|
|
126
|
+
get(key: string): Promise<string | null>;
|
|
127
|
+
put(key: string, value: string, options?: {
|
|
128
|
+
expirationTtl?: number;
|
|
129
|
+
expiration?: number | string;
|
|
130
|
+
metadata?: unknown;
|
|
131
|
+
}): Promise<void>;
|
|
132
|
+
delete(key: string): Promise<void>;
|
|
133
|
+
list<Metadata = unknown>(options?: {
|
|
134
|
+
prefix?: string;
|
|
135
|
+
limit?: number;
|
|
136
|
+
cursor?: string;
|
|
137
|
+
}): Promise<{
|
|
138
|
+
keys: {
|
|
139
|
+
name: string;
|
|
140
|
+
metadata?: Metadata;
|
|
141
|
+
}[];
|
|
142
|
+
cursor: string;
|
|
143
|
+
list_complete: boolean;
|
|
144
|
+
}>;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/redis/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudflare Cron Triggers backend.
|
|
3
|
+
*
|
|
4
|
+
* Cloudflare Cron Triggers are configured in `wrangler.toml`:
|
|
5
|
+
*
|
|
6
|
+
* [[triggers.crons]]
|
|
7
|
+
* cron = "every 15m (your expression)"
|
|
8
|
+
*
|
|
9
|
+
* The trigger fires a Worker's `scheduled(event, env, ctx)` handler.
|
|
10
|
+
* We dispatch that to the registered task by name.
|
|
11
|
+
*
|
|
12
|
+
* This backend is a **registration-only facade**: tasks are stored
|
|
13
|
+
* locally (so `nx route:list`-style introspection works), but the
|
|
14
|
+
* actual scheduling is at the platform level. The worker's `scheduled`
|
|
15
|
+
* export calls `dispatch(event)` to run the matching task.
|
|
16
|
+
*/
|
|
17
|
+
import type { ScheduleRegistry, ScheduleHandler, ScheduledTask, CronExpression, CronOptions, ScheduleEventListener } from "../types.js";
|
|
18
|
+
/** Shape of the Worker's `scheduled` event. Mirrors `cloudflare-types`. */
|
|
19
|
+
export interface CloudflareScheduledEvent {
|
|
20
|
+
cron: string;
|
|
21
|
+
/** ISO timestamp of when the trigger fired. */
|
|
22
|
+
scheduledTime: Date | number;
|
|
23
|
+
}
|
|
24
|
+
export interface CloudflareSchedulesOptions {
|
|
25
|
+
/** Validate that registered expressions match the wrangler.toml trigger. Default: true. */
|
|
26
|
+
validateAgainstTrigger?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare class CloudflareSchedulesBackend implements ScheduleRegistry {
|
|
29
|
+
#private;
|
|
30
|
+
constructor(options?: CloudflareSchedulesOptions);
|
|
31
|
+
addCron(name: string, expression: CronExpression, handler: ScheduleHandler, options?: CronOptions): string;
|
|
32
|
+
addInterval(): string;
|
|
33
|
+
addTimeout(): string;
|
|
34
|
+
delete(idOrName: string): boolean;
|
|
35
|
+
list(): ScheduledTask[];
|
|
36
|
+
get(idOrName: string): ScheduledTask | undefined;
|
|
37
|
+
pause(): boolean;
|
|
38
|
+
resume(): boolean;
|
|
39
|
+
stop(): Promise<void>;
|
|
40
|
+
on(listener: ScheduleEventListener): () => void;
|
|
41
|
+
/**
|
|
42
|
+
* Return the Worker's `scheduled()` handler. Mount it in the
|
|
43
|
+
* default export:
|
|
44
|
+
*
|
|
45
|
+
* export default {
|
|
46
|
+
* fetch: app.fetch,
|
|
47
|
+
* scheduled: backend.scheduledHandler(),
|
|
48
|
+
* };
|
|
49
|
+
*
|
|
50
|
+
* The handler dispatches based on the trigger's cron expression
|
|
51
|
+
* (or, when validation is disabled, by event ordering).
|
|
52
|
+
*/
|
|
53
|
+
scheduledHandler(): (event: CloudflareScheduledEvent) => Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=cloudflare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../../src/schedule/backends/cloudflare.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACX,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,cAAc,EACd,WAAW,EAEX,qBAAqB,EACrB,MAAM,aAAa,CAAC;AAUrB,2EAA2E;AAC3E,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,aAAa,EAAE,IAAI,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,0BAA0B;IAC1C,2FAA2F;IAC3F,sBAAsB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,qBAAa,0BAA2B,YAAW,gBAAgB;;gBAOtD,OAAO,GAAE,0BAA+B;IAIpD,OAAO,CACN,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,WAAgB,GACvB,MAAM;IAcT,WAAW,IAAI,MAAM;IAOrB,UAAU,IAAI,MAAM;IAOpB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAWjC,IAAI,IAAI,aAAa,EAAE;IAWvB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAgBhD,KAAK,IAAI,OAAO;IAKhB,MAAM,IAAI,OAAO;IAIX,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B,EAAE,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,IAAI;IAS/C;;;;;;;;;;;OAWG;IACH,gBAAgB,IAAI,CAAC,KAAK,EAAE,wBAAwB,KAAK,OAAO,CAAC,IAAI,CAAC;CAkDtE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/schedule/backends/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,QAAQ,GACR,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,0BAA0B,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,GAC/B,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-process scheduler backend.
|
|
3
|
+
*
|
|
4
|
+
* Runs on a single setInterval tick (default 1s) and dispatches due
|
|
5
|
+
* tasks. Honors cron expressions via `CronExpression.next()`, fixed
|
|
6
|
+
* intervals via `setInterval`, and one-shot delays via `setTimeout`.
|
|
7
|
+
*
|
|
8
|
+
* Use for Bun / Node long-running servers. For Cloudflare Workers,
|
|
9
|
+
* use the dedicated `CloudflareSchedulesBackend` which integrates
|
|
10
|
+
* with Cron Triggers.
|
|
11
|
+
*/
|
|
12
|
+
import type { ScheduleRegistry, ScheduleHandler, ScheduledTask, CronExpression, CronOptions, ScheduleEventListener } from "../types.js";
|
|
13
|
+
import { CronExpression as CronExpr } from "../cron-parser.js";
|
|
14
|
+
export interface MemoryBackendOptions {
|
|
15
|
+
/** Tick interval in ms. Default: 1000. */
|
|
16
|
+
tickMs?: number;
|
|
17
|
+
/** Default cron timezone. */
|
|
18
|
+
defaultTimezone?: string;
|
|
19
|
+
/** Skip tasks that fall behind by more than this many ms. Default: 60_000. */
|
|
20
|
+
maxDriftMs?: number;
|
|
21
|
+
}
|
|
22
|
+
export declare class MemorySchedulesBackend implements ScheduleRegistry {
|
|
23
|
+
#private;
|
|
24
|
+
constructor(options?: MemoryBackendOptions);
|
|
25
|
+
addCron(name: string, expression: CronExpression, handler: ScheduleHandler, options?: CronOptions): string;
|
|
26
|
+
addInterval(name: string, ms: number, handler: ScheduleHandler): string;
|
|
27
|
+
addTimeout(name: string, ms: number, handler: ScheduleHandler): string;
|
|
28
|
+
delete(idOrName: string): boolean;
|
|
29
|
+
list(): ScheduledTask[];
|
|
30
|
+
get(idOrName: string): ScheduledTask | undefined;
|
|
31
|
+
pause(idOrName: string): boolean;
|
|
32
|
+
resume(idOrName: string): boolean;
|
|
33
|
+
stop(): Promise<void>;
|
|
34
|
+
on(listener: ScheduleEventListener): () => void;
|
|
35
|
+
/** Start the tick loop. Idempotent. */
|
|
36
|
+
start(): void;
|
|
37
|
+
}
|
|
38
|
+
export { CronExpr };
|
|
39
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/schedule/backends/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACX,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,cAAc,EACd,WAAW,EAEX,qBAAqB,EAErB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAY,MAAM,mBAAmB,CAAC;AAmBzE,MAAM,WAAW,oBAAoB;IACpC,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,sBAAuB,YAAW,gBAAgB;;gBAUlD,OAAO,GAAE,oBAAyB;IAU9C,OAAO,CACN,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,WAAgB,GACvB,MAAM;IA4BT,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM;IAyBvE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM;IAyBtE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAYjC,IAAI,IAAI,aAAa,EAAE;IAIvB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAOhD,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAWhC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAgB3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B,EAAE,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,IAAI;IAS/C,uCAAuC;IACvC,KAAK,IAAI,IAAI;CAmHb;AAID,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cron expression parser + next-run calculator.
|
|
3
|
+
*
|
|
4
|
+
* Supports the standard 5-field crontab syntax, an optional 6-field
|
|
5
|
+
* variant (with seconds), common aliases, and "@every <duration>".
|
|
6
|
+
*
|
|
7
|
+
* * * * * * every minute
|
|
8
|
+
* 0 * * * * every hour
|
|
9
|
+
* star-slash-15 every 15m
|
|
10
|
+
* 0 9 * * 1-5 9am on weekdays
|
|
11
|
+
* 0 0 1 * * first of the month
|
|
12
|
+
* 30 14 1 4 * Apr 1st at 14:30
|
|
13
|
+
* @yearly @annually 0 0 1 1 *
|
|
14
|
+
* @monthly 0 0 1 * *
|
|
15
|
+
* @weekly 0 0 * * 0
|
|
16
|
+
* @daily @midnight 0 0 * * *
|
|
17
|
+
* @hourly 0 * * * *
|
|
18
|
+
* @every 1h30m every 90 minutes
|
|
19
|
+
*
|
|
20
|
+
* Field names (JAN, FEB, SUN, MON, ...) are accepted case-insensitively.
|
|
21
|
+
*/
|
|
22
|
+
/** A single field expanded into a set of allowed numeric values. */
|
|
23
|
+
export declare class CronField {
|
|
24
|
+
readonly values: Set<number>;
|
|
25
|
+
constructor(field: string, range: [number, number]);
|
|
26
|
+
contains(n: number): boolean;
|
|
27
|
+
}
|
|
28
|
+
/** A fully-parsed cron expression. */
|
|
29
|
+
export declare class CronExpression {
|
|
30
|
+
readonly fields: CronField[];
|
|
31
|
+
readonly hasSeconds: boolean;
|
|
32
|
+
constructor(raw: string);
|
|
33
|
+
/**
|
|
34
|
+
* Return the next Date at or after `from` that matches this
|
|
35
|
+
* expression. Returns null if no match is found within `maxYears`
|
|
36
|
+
* (default 5) — which would indicate a misconfigured expression.
|
|
37
|
+
*/
|
|
38
|
+
next(from: Date, maxYears?: number): Date | null;
|
|
39
|
+
private matches;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Parse a cron expression. Throws on invalid syntax. The returned
|
|
43
|
+
* object can be queried for the next match (`expr.next(new Date())`).
|
|
44
|
+
*/
|
|
45
|
+
export declare function parseCron(expression: string): CronExpression;
|
|
46
|
+
/** Convenience: return the next Date matching `expression` after `from`. */
|
|
47
|
+
export declare function nextCron(expression: string, from?: Date): Date | null;
|
|
48
|
+
//# sourceMappingURL=cron-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-parser.d.ts","sourceRoot":"","sources":["../../src/schedule/cron-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AA0CH,oEAAoE;AACpE,qBAAa,SAAS;IACrB,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBAEjB,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IAIlD,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;CAG5B;AAED,sCAAsC;AACtC,qBAAa,cAAc;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;gBAEjB,GAAG,EAAE,MAAM;IA6BvB;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,SAAI,GAAG,IAAI,GAAG,IAAI;IAuF3C,OAAO,CAAC,OAAO;CAkCf;AAgHD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAE5D;AAED,4EAA4E;AAC5E,wBAAgB,QAAQ,CACvB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,IAAiB,GACrB,IAAI,GAAG,IAAI,CAEb"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@Cron(expression)` — schedule a method as a cron task.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors `@nestjs/schedule`'s decorator. The decorated method runs
|
|
5
|
+
* on the cron schedule; pair it with `ScheduleModule.scanForSchedulers`
|
|
6
|
+
* to register at boot.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* @Injectable()
|
|
10
|
+
* class CleanupWorker {
|
|
11
|
+
* constructor(@Inject(ScheduleService.TOKEN) private schedule: ScheduleService) {}
|
|
12
|
+
*
|
|
13
|
+
* @Cron('0 * * * *') // every hour
|
|
14
|
+
* async hourly() {
|
|
15
|
+
* // ...
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* @Cron('@daily', { timezone: 'UTC' })
|
|
19
|
+
* async dailyDigest() {
|
|
20
|
+
* // ...
|
|
21
|
+
* }
|
|
22
|
+
* }
|
|
23
|
+
*
|
|
24
|
+
* // src/app/main.ts
|
|
25
|
+
* const app = new Application(AppModule);
|
|
26
|
+
* const schedule = app.container.resolve(ScheduleService);
|
|
27
|
+
* for (const instance of getInjectables(app)) {
|
|
28
|
+
* await schedule.scanForSchedulers(instance);
|
|
29
|
+
* }
|
|
30
|
+
* schedule.start();
|
|
31
|
+
*/
|
|
32
|
+
import "reflect-metadata";
|
|
33
|
+
import type { ScheduleService } from "../schedule.service.js";
|
|
34
|
+
import type { CronExpression, CronOptions } from "../types.js";
|
|
35
|
+
/**
|
|
36
|
+
* Schedule the decorated method as a cron task.
|
|
37
|
+
*/
|
|
38
|
+
export declare function Cron(expression: CronExpression, options?: CronOptions): MethodDecorator;
|
|
39
|
+
/**
|
|
40
|
+
* Schedule the decorated method to run every `milliseconds`.
|
|
41
|
+
*/
|
|
42
|
+
export declare function Interval(milliseconds: number, name?: string): MethodDecorator;
|
|
43
|
+
/**
|
|
44
|
+
* Schedule the decorated method to run once after `milliseconds`.
|
|
45
|
+
*/
|
|
46
|
+
export declare function Timeout(milliseconds: number, name?: string): MethodDecorator;
|
|
47
|
+
/**
|
|
48
|
+
* Get the cron hooks declared on a class.
|
|
49
|
+
*/
|
|
50
|
+
export declare function getCronHooks(target: unknown): Array<{
|
|
51
|
+
method: string;
|
|
52
|
+
expression: CronExpression;
|
|
53
|
+
options: CronOptions;
|
|
54
|
+
}>;
|
|
55
|
+
export declare function getIntervalHooks(target: unknown): Array<{
|
|
56
|
+
method: string;
|
|
57
|
+
milliseconds: number;
|
|
58
|
+
name?: string;
|
|
59
|
+
}>;
|
|
60
|
+
export declare function getTimeoutHooks(target: unknown): Array<{
|
|
61
|
+
method: string;
|
|
62
|
+
milliseconds: number;
|
|
63
|
+
name?: string;
|
|
64
|
+
}>;
|
|
65
|
+
/**
|
|
66
|
+
* Scan an instance for `@Cron` / `@Interval` / `@Timeout` hooks and
|
|
67
|
+
* register them with the `ScheduleService`.
|
|
68
|
+
*/
|
|
69
|
+
export declare function scanForSchedulers(instance: object, service: ScheduleService): Promise<string[]>;
|
|
70
|
+
export type { ScheduleService };
|
|
71
|
+
//# sourceMappingURL=cron.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../../src/schedule/decorators/cron.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAmB,MAAM,aAAa,CAAC;AAMhF;;GAEG;AACH,wBAAgB,IAAI,CACnB,UAAU,EAAE,cAAc,EAC1B,OAAO,GAAE,WAAgB,GACvB,eAAe,CAqBjB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,CAiB7E;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,CAiB5E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC3B,MAAM,EAAE,OAAO,GACb,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC,CAY7E;AAED,wBAAgB,gBAAgB,CAC/B,MAAM,EAAE,OAAO,GACb,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAQhE;AAED,wBAAgB,eAAe,CAC9B,MAAM,EAAE,OAAO,GACb,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAQhE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC,CA0CnB;AAGD,YAAY,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public API for the NexusJS schedule module.
|
|
3
|
+
*
|
|
4
|
+
* Two backends out of the box:
|
|
5
|
+
* - In-process — runs on Bun / Node via setInterval + cron tick.
|
|
6
|
+
* - Cloudflare Cron Triggers — Workers-native, fires from wrangler.toml.
|
|
7
|
+
*
|
|
8
|
+
* Mirrors `@nestjs/schedule`'s decorator API: `@Cron`, `@Interval`,
|
|
9
|
+
* `@Timeout`. Plus a programmatic `ScheduleService` for dynamic
|
|
10
|
+
* registration.
|
|
11
|
+
*
|
|
12
|
+
* Quick start:
|
|
13
|
+
*
|
|
14
|
+
* // src/app/app.module.ts
|
|
15
|
+
* import { Module } from 'nexusjs';
|
|
16
|
+
* import { ScheduleModule } from 'nexusjs/schedule';
|
|
17
|
+
*
|
|
18
|
+
* @Module({
|
|
19
|
+
* imports: [ScheduleModule.forRoot({ backend: 'memory' })],
|
|
20
|
+
* })
|
|
21
|
+
* export class AppModule {}
|
|
22
|
+
*
|
|
23
|
+
* // any service
|
|
24
|
+
* import { ScheduleService, Cron, Interval, scanForSchedulers } from 'nexusjs/schedule';
|
|
25
|
+
*
|
|
26
|
+
* @Injectable()
|
|
27
|
+
* class CleanupWorker {
|
|
28
|
+
* constructor(@Inject(ScheduleService.TOKEN) private schedule: ScheduleService) {}
|
|
29
|
+
*
|
|
30
|
+
* @Cron('0 * * * *') // every hour
|
|
31
|
+
* async hourly() { /* ... *\/ }
|
|
32
|
+
*
|
|
33
|
+
* @Interval(60_000) // every minute
|
|
34
|
+
* async tick() { /* ... *\/ }
|
|
35
|
+
* }
|
|
36
|
+
*
|
|
37
|
+
* // bootstrap
|
|
38
|
+
* const app = new Application(AppModule);
|
|
39
|
+
* const schedule = app.container.resolve(ScheduleService);
|
|
40
|
+
* await scanForSchedulers(worker, schedule);
|
|
41
|
+
* schedule.start();
|
|
42
|
+
*/
|
|
43
|
+
export * from "./types.js";
|
|
44
|
+
export { MemorySchedulesBackend, CloudflareSchedulesBackend, CronExpr, } from "./backends/index.js";
|
|
45
|
+
export type { MemoryBackendOptions } from "./backends/memory.js";
|
|
46
|
+
export type { CloudflareScheduledEvent, CloudflareSchedulesOptions, } from "./backends/cloudflare.js";
|
|
47
|
+
export { ScheduleService } from "./schedule.service.js";
|
|
48
|
+
export { ScheduleModule } from "./schedule.module.js";
|
|
49
|
+
export { Cron, Interval, Timeout, scanForSchedulers, getCronHooks, getIntervalHooks, getTimeoutHooks, } from "./decorators/cron.js";
|
|
50
|
+
export { parseCron, nextCron, CronExpression as CronExpressionClass, CronField, } from "./cron-parser.js";
|
|
51
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schedule/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EACN,sBAAsB,EACtB,0BAA0B,EAC1B,QAAQ,GACR,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,YAAY,EACX,wBAAwB,EACxB,0BAA0B,GAC1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACN,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,eAAe,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,SAAS,EACT,QAAQ,EACR,cAAc,IAAI,mBAAmB,EACrC,SAAS,GACT,MAAM,kBAAkB,CAAC"}
|