@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,24 @@
|
|
|
1
|
+
import type { SseStreamController } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* The `sse()` helper.
|
|
4
|
+
*
|
|
5
|
+
* @param c Hono context. Pass via `@Req()` in a controller.
|
|
6
|
+
* @param handler Callback that pushes events onto the stream.
|
|
7
|
+
* @returns A `Response` with `text/event-stream` content type.
|
|
8
|
+
*/
|
|
9
|
+
export declare function sse(c: any, handler: (stream: SseStreamController) => void | Promise<void>): Response;
|
|
10
|
+
/**
|
|
11
|
+
* `sseJson()` — convenience alias for `sse()`. Object payloads are
|
|
12
|
+
* auto-JSON-stringified in either form.
|
|
13
|
+
*/
|
|
14
|
+
export declare const sseJson: typeof sse;
|
|
15
|
+
/**
|
|
16
|
+
* Extract the `Last-Event-ID` header from a Hono context. Returns
|
|
17
|
+
* `null` if the header is missing.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getLastEventId(c: {
|
|
20
|
+
req: {
|
|
21
|
+
header(name: string): string | undefined;
|
|
22
|
+
};
|
|
23
|
+
}): string | null;
|
|
24
|
+
//# sourceMappingURL=sse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/sse/sse.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;;GAMG;AACH,wBAAgB,GAAG,CAClB,CAAC,EAAE,GAAG,EACN,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAC5D,QAAQ,CAaV;AAED;;;GAGG;AACH,eAAO,MAAM,OAAO,YAAM,CAAC;AAE3B;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE;IAAE,GAAG,EAAE;QAAE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAGtG"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nexusjs/sse` — Server-Sent Events.
|
|
3
|
+
*
|
|
4
|
+
* @Get('/events')
|
|
5
|
+
* events() {
|
|
6
|
+
* return sse((stream) => {
|
|
7
|
+
* const id = setInterval(() => {
|
|
8
|
+
* stream.send({ event: 'tick', data: Date.now() });
|
|
9
|
+
* }, 1000);
|
|
10
|
+
* stream.onClose(() => clearInterval(id));
|
|
11
|
+
* });
|
|
12
|
+
* }
|
|
13
|
+
*
|
|
14
|
+
* // Or with reconnection support:
|
|
15
|
+
* @Get('/events')
|
|
16
|
+
* events(@LastEventId() lastId: string | null) {
|
|
17
|
+
* return sse(async (stream) => {
|
|
18
|
+
* // Replay events with id > lastId (if you have them).
|
|
19
|
+
* // Then continue with the live stream.
|
|
20
|
+
* });
|
|
21
|
+
* }
|
|
22
|
+
*
|
|
23
|
+
* Features:
|
|
24
|
+
* - Type-safe event payloads
|
|
25
|
+
* - Auto-cleanup on client disconnect
|
|
26
|
+
* - Last-Event-ID support for reconnection
|
|
27
|
+
* - JSON helpers (auto-stringify objects)
|
|
28
|
+
* - `retry:` hint to control client reconnect timing
|
|
29
|
+
*/
|
|
30
|
+
import "reflect-metadata";
|
|
31
|
+
import { METADATA_KEY } from "../core/constants.js";
|
|
32
|
+
/**
|
|
33
|
+
* A single SSE event. The shape mirrors the wire format:
|
|
34
|
+
*
|
|
35
|
+
* - `id` — event id (used for `Last-Event-ID` reconnection)
|
|
36
|
+
* - `event` — event name (client subscribes via EventSource.addEventListener)
|
|
37
|
+
* - `data` — payload (string, object, or number)
|
|
38
|
+
* - `retry` — reconnect delay in ms (sent as `retry: <ms>`)
|
|
39
|
+
*
|
|
40
|
+
* `data` accepts anything JSON-serializable. Objects are auto-stringified
|
|
41
|
+
* via `JSON.stringify`. Strings are sent verbatim (one `data:` line per
|
|
42
|
+
* newline).
|
|
43
|
+
*/
|
|
44
|
+
export interface SseEvent<T = unknown> {
|
|
45
|
+
id?: string | number;
|
|
46
|
+
event?: string;
|
|
47
|
+
data: T;
|
|
48
|
+
/** Reconnect delay (ms) hint. */
|
|
49
|
+
retry?: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Per-stream controller. Returned to the `sse()` callback.
|
|
53
|
+
*
|
|
54
|
+
* const stream = new SseStream(api);
|
|
55
|
+
* stream.send({ data: 'hello' }); // data-only event
|
|
56
|
+
* stream.send({ event: 'tick', data: { x: 1 } });
|
|
57
|
+
* stream.close();
|
|
58
|
+
*/
|
|
59
|
+
export interface SseStreamController {
|
|
60
|
+
/** Push an event. Safe to call after `close()` (no-op). */
|
|
61
|
+
send<T = unknown>(event: SseEvent<T> | string): void;
|
|
62
|
+
/** Close the stream. Idempotent. Awaits pending writes. */
|
|
63
|
+
close(): void | Promise<void>;
|
|
64
|
+
/** True after `close()` has been called. */
|
|
65
|
+
get closed(): boolean;
|
|
66
|
+
/** Register a callback to run on client disconnect (or `close()`). */
|
|
67
|
+
onClose(cb: () => void): void;
|
|
68
|
+
/** Sleep for `ms` milliseconds (preserves the connection). */
|
|
69
|
+
sleep(ms: number): Promise<void>;
|
|
70
|
+
}
|
|
71
|
+
/** Marks a controller method as an SSE endpoint. OpenAPI hint. */
|
|
72
|
+
export declare function SseEventMeta(options?: {
|
|
73
|
+
name?: string;
|
|
74
|
+
description?: string;
|
|
75
|
+
}): MethodDecorator;
|
|
76
|
+
/**
|
|
77
|
+
* `@LastEventId()` — inject the `Last-Event-ID` header from the
|
|
78
|
+
* client's reconnect attempt. `null` if the header is missing.
|
|
79
|
+
*/
|
|
80
|
+
export declare function LastEventId(): ParameterDecorator;
|
|
81
|
+
export declare const SSE_META = "nexus:sse:event";
|
|
82
|
+
export declare const SSE_LAST_EVENT_ID_META = "nexus:sse:lastEventId";
|
|
83
|
+
export { METADATA_KEY };
|
|
84
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sse/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMpD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,OAAO;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IACnC,2DAA2D;IAC3D,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IACrD,2DAA2D;IAC3D,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,4CAA4C;IAC5C,IAAI,MAAM,IAAI,OAAO,CAAC;IACtB,sEAAsE;IACtE,OAAO,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC9B,8DAA8D;IAC9D,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAMD,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,eAAe,CASnG;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,kBAAkB,CAQhD;AAED,eAAO,MAAM,QAAQ,oBAAoB,CAAC;AAC1C,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public API for `nexusjs/static`.
|
|
3
|
+
*
|
|
4
|
+
* Quick start:
|
|
5
|
+
*
|
|
6
|
+
* // src/app/app.module.ts
|
|
7
|
+
* import { Module } from 'nexusjs';
|
|
8
|
+
* import { StaticModule } from 'nexusjs/static';
|
|
9
|
+
*
|
|
10
|
+
* @Module({
|
|
11
|
+
* imports: [
|
|
12
|
+
* StaticModule.forRoot({
|
|
13
|
+
* root: './public',
|
|
14
|
+
* prefix: '/public',
|
|
15
|
+
* }),
|
|
16
|
+
* ],
|
|
17
|
+
* })
|
|
18
|
+
* export class AppModule {}
|
|
19
|
+
*
|
|
20
|
+
* // any service that needs to mount the middleware on a sub-app
|
|
21
|
+
* import { StaticService } from 'nexusjs/static';
|
|
22
|
+
*
|
|
23
|
+
* @Injectable()
|
|
24
|
+
* class CustomServer {
|
|
25
|
+
* constructor(@Inject(StaticService.TOKEN) private static: StaticService) {}
|
|
26
|
+
* mount(app: Hono) {
|
|
27
|
+
* app.use('/public/*', this.static.middleware());
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
*
|
|
31
|
+
* Features:
|
|
32
|
+
* - Path-traversal protection (no `..`, no absolute paths)
|
|
33
|
+
* - ETag-based conditional GET (304 Not Modified)
|
|
34
|
+
* - Range requests (HTTP 206) for video / large files
|
|
35
|
+
* - Sensible `Cache-Control` defaults
|
|
36
|
+
* - `index.html` fallback for directory requests
|
|
37
|
+
* - MIME-type inference for common formats
|
|
38
|
+
*/
|
|
39
|
+
export { StaticService, type ServeStaticOptions } from "./static.service.js";
|
|
40
|
+
export { StaticModule } from "./static.module.js";
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/static/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
function __accessProp(key) {
|
|
7
|
+
return this[key];
|
|
8
|
+
}
|
|
9
|
+
var __toCommonJS = (from) => {
|
|
10
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
11
|
+
if (entry)
|
|
12
|
+
return entry;
|
|
13
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (var key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(entry, key))
|
|
17
|
+
__defProp(entry, key, {
|
|
18
|
+
get: __accessProp.bind(from, key),
|
|
19
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
__moduleCache.set(from, entry);
|
|
23
|
+
return entry;
|
|
24
|
+
};
|
|
25
|
+
var __moduleCache;
|
|
26
|
+
var __returnValue = (v) => v;
|
|
27
|
+
function __exportSetter(name, newValue) {
|
|
28
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
29
|
+
}
|
|
30
|
+
var __export = (target, all) => {
|
|
31
|
+
for (var name in all)
|
|
32
|
+
__defProp(target, name, {
|
|
33
|
+
get: all[name],
|
|
34
|
+
enumerable: true,
|
|
35
|
+
configurable: true,
|
|
36
|
+
set: __exportSetter.bind(all, name)
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
var __legacyDecorateClassTS = function(decorators, target, key, desc) {
|
|
40
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
41
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
42
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
43
|
+
else
|
|
44
|
+
for (var i = decorators.length - 1;i >= 0; i--)
|
|
45
|
+
if (d = decorators[i])
|
|
46
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
47
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
48
|
+
};
|
|
49
|
+
var __legacyDecorateParamTS = (index, decorator) => (target, key) => decorator(target, key, index);
|
|
50
|
+
var __legacyMetadataTS = (k, v) => {
|
|
51
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
|
|
52
|
+
return Reflect.metadata(k, v);
|
|
53
|
+
};
|
|
54
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
55
|
+
var __require = import.meta.require;
|
|
56
|
+
|
|
57
|
+
// src/core/constants.ts
|
|
58
|
+
var METADATA_KEY, PARAM_TYPES, HTTP_METHODS;
|
|
59
|
+
var init_constants = __esm(() => {
|
|
60
|
+
METADATA_KEY = {
|
|
61
|
+
CONTROLLER: "nexus:controller",
|
|
62
|
+
INJECTABLE: "nexus:injectable",
|
|
63
|
+
REPOSITORY: "nexus:repository",
|
|
64
|
+
MODULE: "nexus:module",
|
|
65
|
+
ROUTES: "nexus:routes",
|
|
66
|
+
PARAMS: "nexus:params",
|
|
67
|
+
VALIDATE: "nexus:validate",
|
|
68
|
+
PARAMTYPES: "design:paramtypes",
|
|
69
|
+
TYPE: "design:type",
|
|
70
|
+
RETURNTYPE: "design:returntype",
|
|
71
|
+
INJECT: "nexus:inject"
|
|
72
|
+
};
|
|
73
|
+
PARAM_TYPES = {
|
|
74
|
+
REQUEST: 0,
|
|
75
|
+
RESPONSE: 1,
|
|
76
|
+
NEXT: 2,
|
|
77
|
+
BODY: 3,
|
|
78
|
+
QUERY: 4,
|
|
79
|
+
PARAM: 5,
|
|
80
|
+
HEADERS: 6,
|
|
81
|
+
CTX: 7,
|
|
82
|
+
USER: 8
|
|
83
|
+
};
|
|
84
|
+
HTTP_METHODS = [
|
|
85
|
+
"GET",
|
|
86
|
+
"POST",
|
|
87
|
+
"PUT",
|
|
88
|
+
"DELETE",
|
|
89
|
+
"PATCH",
|
|
90
|
+
"OPTIONS",
|
|
91
|
+
"HEAD"
|
|
92
|
+
];
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// src/static/static.service.ts
|
|
96
|
+
import { createReadStream } from "fs";
|
|
97
|
+
import { stat, open } from "fs/promises";
|
|
98
|
+
import { resolve as pathResolve, normalize, join, sep } from "path";
|
|
99
|
+
|
|
100
|
+
class StaticService {
|
|
101
|
+
static TOKEN = Symbol.for("nexus:StaticService");
|
|
102
|
+
#root;
|
|
103
|
+
#prefix;
|
|
104
|
+
#index;
|
|
105
|
+
#cacheControl;
|
|
106
|
+
#etag;
|
|
107
|
+
#range;
|
|
108
|
+
#maxFileSize;
|
|
109
|
+
constructor(options = {}) {
|
|
110
|
+
this.#root = pathResolve(options.root ?? "./public");
|
|
111
|
+
const prefix = options.prefix ?? "/";
|
|
112
|
+
this.#prefix = prefix === "/" ? "/" : prefix.replace(/\/$/, "");
|
|
113
|
+
this.#index = options.index === false ? false : options.index ?? "index.html";
|
|
114
|
+
this.#cacheControl = options.cacheControl ?? "public, max-age=3600";
|
|
115
|
+
this.#etag = options.etag ?? true;
|
|
116
|
+
this.#range = options.range ?? true;
|
|
117
|
+
this.#maxFileSize = options.maxFileSize ?? 100 * 1024 * 1024;
|
|
118
|
+
}
|
|
119
|
+
middleware() {
|
|
120
|
+
return async (c, next) => {
|
|
121
|
+
const url = new URL(c.req.url);
|
|
122
|
+
const pathname = decodeURIComponent(url.pathname);
|
|
123
|
+
if (!pathname.startsWith(this.#prefix)) {
|
|
124
|
+
return next();
|
|
125
|
+
}
|
|
126
|
+
const rel = pathname.slice(this.#prefix.length).replace(/^\//, "");
|
|
127
|
+
const safe = this.#safeResolve(rel);
|
|
128
|
+
if (!safe)
|
|
129
|
+
return next();
|
|
130
|
+
let statResult;
|
|
131
|
+
try {
|
|
132
|
+
statResult = await stat(safe);
|
|
133
|
+
} catch {
|
|
134
|
+
return next();
|
|
135
|
+
}
|
|
136
|
+
let filePath = safe;
|
|
137
|
+
if (statResult.isDirectory()) {
|
|
138
|
+
if (this.#index === false)
|
|
139
|
+
return next();
|
|
140
|
+
filePath = join(safe, this.#index);
|
|
141
|
+
try {
|
|
142
|
+
const idx = await stat(filePath);
|
|
143
|
+
if (!idx.isFile())
|
|
144
|
+
return next();
|
|
145
|
+
} catch {
|
|
146
|
+
return next();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
let fileStat;
|
|
150
|
+
try {
|
|
151
|
+
fileStat = await stat(filePath);
|
|
152
|
+
} catch {
|
|
153
|
+
return next();
|
|
154
|
+
}
|
|
155
|
+
const size = fileStat.size;
|
|
156
|
+
if (size > this.#maxFileSize)
|
|
157
|
+
return next();
|
|
158
|
+
const etag = this.#etag ? `"${this.#computeEtag(filePath, size, fileStat.mtimeMs)}"` : null;
|
|
159
|
+
if (etag) {
|
|
160
|
+
const inm = c.req.header("if-none-match");
|
|
161
|
+
if (inm && inm === etag) {
|
|
162
|
+
return new Response(null, { status: 304 });
|
|
163
|
+
}
|
|
164
|
+
c.header("ETag", etag);
|
|
165
|
+
}
|
|
166
|
+
const range = c.req.header("range");
|
|
167
|
+
if (this.#range && range) {
|
|
168
|
+
const m = /^bytes=(\d*)-(\d*)$/.exec(range);
|
|
169
|
+
if (m) {
|
|
170
|
+
const start = m[1] ? Number(m[1]) : 0;
|
|
171
|
+
const end = m[2] ? Number(m[2]) : size - 1;
|
|
172
|
+
if (start >= size || end >= size || start > end) {
|
|
173
|
+
return new Response("Range Not Satisfiable", {
|
|
174
|
+
status: 416,
|
|
175
|
+
headers: { "Content-Range": `bytes */${size}` }
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
const slice = await this.#readSlice(filePath, start, end);
|
|
179
|
+
return new Response(slice, {
|
|
180
|
+
status: 206,
|
|
181
|
+
headers: {
|
|
182
|
+
"Content-Type": this.#mime(filePath),
|
|
183
|
+
"Content-Length": String(end - start + 1),
|
|
184
|
+
"Content-Range": `bytes ${start}-${end}/${size}`,
|
|
185
|
+
"Cache-Control": this.#cacheControl,
|
|
186
|
+
"Accept-Ranges": "bytes"
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
const body = createReadStream(filePath);
|
|
192
|
+
return new Response(body, {
|
|
193
|
+
status: 200,
|
|
194
|
+
headers: {
|
|
195
|
+
"Content-Type": this.#mime(filePath),
|
|
196
|
+
"Content-Length": String(size),
|
|
197
|
+
"Cache-Control": this.#cacheControl,
|
|
198
|
+
"Accept-Ranges": "bytes",
|
|
199
|
+
...etag ? { ETag: etag } : {}
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
#safeResolve(rel) {
|
|
205
|
+
if (rel.includes(".."))
|
|
206
|
+
return null;
|
|
207
|
+
if (rel.startsWith("/") || /^[a-zA-Z]:/.test(rel))
|
|
208
|
+
return null;
|
|
209
|
+
const joined = join(this.#root, rel);
|
|
210
|
+
const norm = normalize(joined);
|
|
211
|
+
if (!norm.startsWith(this.#root + sep) && norm !== this.#root)
|
|
212
|
+
return null;
|
|
213
|
+
return norm;
|
|
214
|
+
}
|
|
215
|
+
#computeEtag(_path, size, mtimeMs) {
|
|
216
|
+
const bucket = Math.floor(mtimeMs / 1000);
|
|
217
|
+
const hash = `${size}-${bucket}`;
|
|
218
|
+
return Buffer.from(hash).toString("base64url");
|
|
219
|
+
}
|
|
220
|
+
async#readSlice(path, start, end) {
|
|
221
|
+
const fh = await open(path, "r");
|
|
222
|
+
try {
|
|
223
|
+
const length = end - start + 1;
|
|
224
|
+
const buf = Buffer.alloc(length);
|
|
225
|
+
await fh.read(buf, 0, length, start);
|
|
226
|
+
return buf;
|
|
227
|
+
} finally {
|
|
228
|
+
await fh.close();
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
#mime(path) {
|
|
232
|
+
const ext = path.slice(path.lastIndexOf(".") + 1).toLowerCase();
|
|
233
|
+
const map = {
|
|
234
|
+
html: "text/html; charset=utf-8",
|
|
235
|
+
htm: "text/html; charset=utf-8",
|
|
236
|
+
css: "text/css; charset=utf-8",
|
|
237
|
+
js: "application/javascript; charset=utf-8",
|
|
238
|
+
mjs: "application/javascript; charset=utf-8",
|
|
239
|
+
json: "application/json; charset=utf-8",
|
|
240
|
+
svg: "image/svg+xml",
|
|
241
|
+
png: "image/png",
|
|
242
|
+
jpeg: "image/jpeg",
|
|
243
|
+
jpg: "image/jpeg",
|
|
244
|
+
gif: "image/gif",
|
|
245
|
+
webp: "image/webp",
|
|
246
|
+
ico: "image/x-icon",
|
|
247
|
+
pdf: "application/pdf",
|
|
248
|
+
txt: "text/plain; charset=utf-8",
|
|
249
|
+
woff: "font/woff",
|
|
250
|
+
woff2: "font/woff2",
|
|
251
|
+
mp4: "video/mp4",
|
|
252
|
+
webm: "video/webm",
|
|
253
|
+
mp3: "audio/mpeg"
|
|
254
|
+
};
|
|
255
|
+
return map[ext] ?? "application/octet-stream";
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// src/static/static.module.ts
|
|
259
|
+
import"reflect-metadata";
|
|
260
|
+
|
|
261
|
+
// src/core/decorators/module.ts
|
|
262
|
+
init_constants();
|
|
263
|
+
import"reflect-metadata";
|
|
264
|
+
function Module(options = {}) {
|
|
265
|
+
return (target) => {
|
|
266
|
+
Reflect.defineMetadata(METADATA_KEY.MODULE, options, target);
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
function getModuleOptions(target) {
|
|
270
|
+
return Reflect.getMetadata(METADATA_KEY.MODULE, target) ?? {};
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// src/static/static.module.ts
|
|
274
|
+
class StaticModule {
|
|
275
|
+
static forRoot(options = {}) {
|
|
276
|
+
class ConfiguredStaticModule {
|
|
277
|
+
}
|
|
278
|
+
ConfiguredStaticModule = __legacyDecorateClassTS([
|
|
279
|
+
Module({
|
|
280
|
+
providers: [
|
|
281
|
+
StaticService,
|
|
282
|
+
{ provide: StaticService.TOKEN, useExisting: StaticService },
|
|
283
|
+
{ provide: "STATIC_OPTIONS", useValue: options }
|
|
284
|
+
],
|
|
285
|
+
exports: [StaticService, StaticService.TOKEN]
|
|
286
|
+
})
|
|
287
|
+
], ConfiguredStaticModule);
|
|
288
|
+
Object.defineProperty(ConfiguredStaticModule, "name", {
|
|
289
|
+
value: "ConfiguredStaticModule"
|
|
290
|
+
});
|
|
291
|
+
return ConfiguredStaticModule;
|
|
292
|
+
}
|
|
293
|
+
static mount(options = {}) {
|
|
294
|
+
const svc = new StaticService(options);
|
|
295
|
+
return svc.middleware();
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
StaticModule = __legacyDecorateClassTS([
|
|
299
|
+
Module({
|
|
300
|
+
providers: [
|
|
301
|
+
StaticService,
|
|
302
|
+
{ provide: StaticService.TOKEN, useExisting: StaticService }
|
|
303
|
+
],
|
|
304
|
+
exports: [StaticService, StaticService.TOKEN]
|
|
305
|
+
})
|
|
306
|
+
], StaticModule);
|
|
307
|
+
export {
|
|
308
|
+
StaticService,
|
|
309
|
+
StaticModule
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
//# debugId=C32AAEEE9103D3BF64756E2164756E21
|
|
313
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/core/constants.ts", "../src/static/static.service.ts", "../src/static/static.module.ts", "../src/core/decorators/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 * Static file serving — middleware + helpers.\n *\n * Mirrors `@adonisjs/static` + `serve-static`. Built on the platform's\n * native filesystem (Bun.file() on Bun, node:fs elsewhere).\n */\n\nimport type { Context, MiddlewareHandler } from \"hono\";\nimport { createReadStream } from \"node:fs\";\nimport { stat, open } from \"node:fs/promises\";\nimport { resolve as pathResolve, normalize, join, sep } from \"node:path\";\n\n/** Configuration for `serveStatic`. */\nexport interface ServeStaticOptions {\n\t/** Filesystem root to serve files from. Default: `./public`. */\n\troot?: string;\n\t/** URL prefix. Default: `/`. */\n\tprefix?: string;\n\t/** Default file when a directory is requested. Default: `index.html`. */\n\tindex?: string | false;\n\t/** `Cache-Control` header. Default: `'public, max-age=3600'`. */\n\tcacheControl?: string;\n\t/** Enable ETag generation. Default: `true`. */\n\tetag?: boolean;\n\t/** Enable range requests (for video / large files). Default: `true`. */\n\trange?: boolean;\n\t/** Max file size in bytes; larger files return 404. Default: 100 MB. */\n\tmaxFileSize?: number;\n}\n\n/** StaticService — emits the `serveStatic` middleware. */\nexport class StaticService {\n\t/** DI token — use with `@Inject(StaticService.TOKEN)`. */\n\tstatic readonly TOKEN = Symbol.for(\"nexus:StaticService\");\n\n\t#root: string;\n\t#prefix: string;\n\t#index: string | false;\n\t#cacheControl: string;\n\t#etag: boolean;\n\t#range: boolean;\n\t#maxFileSize: number;\n\n\tconstructor(options: ServeStaticOptions = {}) {\n\t\tthis.#root = pathResolve(options.root ?? \"./public\");\n\t\t// Normalize prefix to always start with `/` and end without `/` (except root).\n\t\tconst prefix = options.prefix ?? \"/\";\n\t\tthis.#prefix = prefix === \"/\" ? \"/\" : prefix.replace(/\\/$/, \"\");\n\t\tthis.#index =\n\t\t\toptions.index === false ? false : (options.index ?? \"index.html\");\n\t\tthis.#cacheControl = options.cacheControl ?? \"public, max-age=3600\";\n\t\tthis.#etag = options.etag ?? true;\n\t\tthis.#range = options.range ?? true;\n\t\tthis.#maxFileSize = options.maxFileSize ?? 100 * 1024 * 1024;\n\t}\n\n\t/**\n\t * Build a Hono middleware that serves files from `root`.\n\t *\n\t * app.use('/public/*', staticService.middleware());\n\t */\n\tmiddleware(): MiddlewareHandler {\n\t\treturn async (c, next) => {\n\t\t\tconst url = new URL(c.req.url);\n\t\t\tconst pathname = decodeURIComponent(url.pathname);\n\t\t\tif (!pathname.startsWith(this.#prefix)) {\n\t\t\t\treturn next();\n\t\t\t}\n\t\t\t// pathname e.g. \"/static/test.html\", prefix e.g. \"/static\"\n\t\t\t// → slice gives \"/test.html\". Strip leading \"/\" so\n\t\t\t// #safeResolve doesn't reject it as an absolute path.\n\t\t\tconst rel = pathname.slice(this.#prefix.length).replace(/^\\//, \"\");\n\t\t\tconst safe = this.#safeResolve(rel);\n\t\t\tif (!safe) return next();\n\n\t\t\tlet statResult: Awaited<ReturnType<typeof stat>>;\n\t\t\ttry {\n\t\t\t\tstatResult = await stat(safe);\n\t\t\t} catch {\n\t\t\t\treturn next();\n\t\t\t}\n\n\t\t\tlet filePath = safe;\n\t\t\tif (statResult.isDirectory()) {\n\t\t\t\tif (this.#index === false) return next();\n\t\t\t\tfilePath = join(safe, this.#index);\n\t\t\t\ttry {\n\t\t\t\t\tconst idx = await stat(filePath);\n\t\t\t\t\tif (!idx.isFile()) return next();\n\t\t\t\t} catch {\n\t\t\t\t\treturn next();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Size guard.\n\t\t\tlet fileStat: Awaited<ReturnType<typeof stat>>;\n\t\t\ttry {\n\t\t\t\tfileStat = await stat(filePath);\n\t\t\t} catch {\n\t\t\t\treturn next();\n\t\t\t}\n\t\t\tconst size = fileStat.size;\n\t\t\tif (size > this.#maxFileSize) return next();\n\n\t\t\t// ETag.\n\t\t\tconst etag = this.#etag\n\t\t\t\t? `\"${this.#computeEtag(filePath, size, fileStat.mtimeMs)}\"`\n\t\t\t\t: null;\n\t\t\tif (etag) {\n\t\t\t\tconst inm = c.req.header(\"if-none-match\");\n\t\t\t\tif (inm && inm === etag) {\n\t\t\t\t\treturn new Response(null, { status: 304 });\n\t\t\t\t}\n\t\t\t\tc.header(\"ETag\", etag);\n\t\t\t}\n\n\t\t\t// Range requests.\n\t\t\tconst range = c.req.header(\"range\");\n\t\t\tif (this.#range && range) {\n\t\t\t\tconst m = /^bytes=(\\d*)-(\\d*)$/.exec(range);\n\t\t\t\tif (m) {\n\t\t\t\t\tconst start = m[1] ? Number(m[1]) : 0;\n\t\t\t\t\tconst end = m[2] ? Number(m[2]) : size - 1;\n\t\t\t\t\tif (start >= size || end >= size || start > end) {\n\t\t\t\t\t\treturn new Response(\"Range Not Satisfiable\", {\n\t\t\t\t\t\t\tstatus: 416,\n\t\t\t\t\t\t\theaders: { \"Content-Range\": `bytes */${size}` },\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tconst slice = await this.#readSlice(filePath, start, end);\n\t\t\t\t\treturn new Response(slice as BodyInit, {\n\t\t\t\t\t\tstatus: 206,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Content-Type\": this.#mime(filePath),\n\t\t\t\t\t\t\t\"Content-Length\": String(end - start + 1),\n\t\t\t\t\t\t\t\"Content-Range\": `bytes ${start}-${end}/${size}`,\n\t\t\t\t\t\t\t\"Cache-Control\": this.#cacheControl,\n\t\t\t\t\t\t\t\"Accept-Ranges\": \"bytes\",\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Full body.\n\t\t\tconst body = createReadStream(filePath);\n\t\t\treturn new Response(body as unknown as ReadableStream, {\n\t\t\t\tstatus: 200,\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": this.#mime(filePath),\n\t\t\t\t\t\"Content-Length\": String(size),\n\t\t\t\t\t\"Cache-Control\": this.#cacheControl,\n\t\t\t\t\t\"Accept-Ranges\": \"bytes\",\n\t\t\t\t\t...(etag ? { ETag: etag } : {}),\n\t\t\t\t},\n\t\t\t});\n\t\t};\n\t}\n\n\t// ===========================================================================\n\t// Internal\n\t// ===========================================================================\n\n\t#safeResolve(rel: string): string | null {\n\t\t// Reject path traversal: no `..`, no absolute paths, no drive letters.\n\t\tif (rel.includes(\"..\")) return null;\n\t\tif (rel.startsWith(\"/\") || /^[a-zA-Z]:/.test(rel)) return null;\n\t\tconst joined = join(this.#root, rel);\n\t\tconst norm = normalize(joined);\n\t\t// Make sure the result is still under `root`.\n\t\tif (!norm.startsWith(this.#root + sep) && norm !== this.#root) return null;\n\t\treturn norm;\n\t}\n\n\t#computeEtag(_path: string, size: number, mtimeMs: number): string {\n\t\t// Simple hash: size + mtime bucket.\n\t\tconst bucket = Math.floor(mtimeMs / 1000);\n\t\tconst hash = `${size}-${bucket}`;\n\t\treturn Buffer.from(hash).toString(\"base64url\");\n\t}\n\n\tasync #readSlice(path: string, start: number, end: number): Promise<Buffer> {\n\t\tconst fh = await open(path, \"r\");\n\t\ttry {\n\t\t\tconst length = end - start + 1;\n\t\t\tconst buf = Buffer.alloc(length);\n\t\t\tawait fh.read(buf, 0, length, start);\n\t\t\treturn buf;\n\t\t} finally {\n\t\t\tawait fh.close();\n\t\t}\n\t}\n\n\t#mime(path: string): string {\n\t\tconst ext = path.slice(path.lastIndexOf(\".\") + 1).toLowerCase();\n\t\tconst map: Record<string, string> = {\n\t\t\thtml: \"text/html; charset=utf-8\",\n\t\t\thtm: \"text/html; charset=utf-8\",\n\t\t\tcss: \"text/css; charset=utf-8\",\n\t\t\tjs: \"application/javascript; charset=utf-8\",\n\t\t\tmjs: \"application/javascript; charset=utf-8\",\n\t\t\tjson: \"application/json; charset=utf-8\",\n\t\t\tsvg: \"image/svg+xml\",\n\t\t\tpng: \"image/png\",\n\t\t\tjpeg: \"image/jpeg\",\n\t\t\tjpg: \"image/jpeg\",\n\t\t\tgif: \"image/gif\",\n\t\t\twebp: \"image/webp\",\n\t\t\tico: \"image/x-icon\",\n\t\t\tpdf: \"application/pdf\",\n\t\t\ttxt: \"text/plain; charset=utf-8\",\n\t\t\twoff: \"font/woff\",\n\t\t\twoff2: \"font/woff2\",\n\t\t\tmp4: \"video/mp4\",\n\t\t\twebm: \"video/webm\",\n\t\t\tmp3: \"audio/mpeg\",\n\t\t};\n\t\treturn map[ext] ?? \"application/octet-stream\";\n\t}\n}\n",
|
|
7
|
+
"/**\n * `StaticModule` — drop-in module for static file serving.\n *\n * Usage:\n * @Module({\n * imports: [\n * StaticModule.forRoot({\n * root: './public',\n * prefix: '/public',\n * cacheControl: 'public, max-age=86400',\n * }),\n * ],\n * })\n * export class AppModule {}\n *\n * Then `GET /public/*` serves files from `./public/*` with proper\n * Content-Type, ETag, and Range support.\n */\n\nimport \"reflect-metadata\";\nimport { Module } from \"../core/decorators/module.js\";\nimport { StaticService } from \"./static.service.js\";\nimport type { ServeStaticOptions } from \"./static.service.js\";\n\n@Module({\n\tproviders: [\n\t\tStaticService,\n\t\t{ provide: StaticService.TOKEN, useExisting: StaticService },\n\t],\n\texports: [StaticService, StaticService.TOKEN],\n})\nexport class StaticModule {\n\tstatic forRoot(options: ServeStaticOptions = {}) {\n\t\t@Module({\n\t\t\tproviders: [\n\t\t\t\tStaticService,\n\t\t\t\t{ provide: StaticService.TOKEN, useExisting: StaticService },\n\t\t\t\t{ provide: \"STATIC_OPTIONS\", useValue: options },\n\t\t\t],\n\t\t\texports: [StaticService, StaticService.TOKEN],\n\t\t})\n\t\tclass ConfiguredStaticModule {}\n\n\t\tObject.defineProperty(ConfiguredStaticModule, \"name\", {\n\t\t\tvalue: \"ConfiguredStaticModule\",\n\t\t});\n\n\t\treturn ConfiguredStaticModule;\n\t}\n\n\t/**\n\t * Convenience: create a middleware handler and mount it directly\n\t * on the Hono app. Useful in `main.ts` to serve static files\n\t * without going through DI.\n\t *\n\t * ```ts\n\t * import { StaticModule } from 'nexusjs/static';\n\t * const app = new Application(AppModule);\n\t * app.server.app.use('/static/*', StaticModule.mount({\n\t * root: './public',\n\t * prefix: '/static',\n\t * }));\n\t * ```\n\t */\n\tstatic mount(options: ServeStaticOptions = {}) {\n\t\tconst svc = new StaticService(options);\n\t\treturn svc.middleware();\n\t}\n}\n",
|
|
8
|
+
"/**\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"
|
|
9
|
+
],
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "C32AAEEE9103D3BF64756E2164756E21",
|
|
12
|
+
"names": []
|
|
13
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `StaticModule` — drop-in module for static file serving.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* @Module({
|
|
6
|
+
* imports: [
|
|
7
|
+
* StaticModule.forRoot({
|
|
8
|
+
* root: './public',
|
|
9
|
+
* prefix: '/public',
|
|
10
|
+
* cacheControl: 'public, max-age=86400',
|
|
11
|
+
* }),
|
|
12
|
+
* ],
|
|
13
|
+
* })
|
|
14
|
+
* export class AppModule {}
|
|
15
|
+
*
|
|
16
|
+
* Then `GET /public/*` serves files from `./public/*` with proper
|
|
17
|
+
* Content-Type, ETag, and Range support.
|
|
18
|
+
*/
|
|
19
|
+
import "reflect-metadata";
|
|
20
|
+
import type { ServeStaticOptions } from "./static.service.js";
|
|
21
|
+
export declare class StaticModule {
|
|
22
|
+
static forRoot(options?: ServeStaticOptions): {
|
|
23
|
+
new (): {};
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Convenience: create a middleware handler and mount it directly
|
|
27
|
+
* on the Hono app. Useful in `main.ts` to serve static files
|
|
28
|
+
* without going through DI.
|
|
29
|
+
*
|
|
30
|
+
* ```ts
|
|
31
|
+
* import { StaticModule } from 'nexusjs/static';
|
|
32
|
+
* const app = new Application(AppModule);
|
|
33
|
+
* app.server.app.use('/static/*', StaticModule.mount({
|
|
34
|
+
* root: './public',
|
|
35
|
+
* prefix: '/static',
|
|
36
|
+
* }));
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
static mount(options?: ServeStaticOptions): import("hono").MiddlewareHandler;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=static.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static.module.d.ts","sourceRoot":"","sources":["../../src/static/static.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,qBAOa,YAAY;IACxB,MAAM,CAAC,OAAO,CAAC,OAAO,GAAE,kBAAuB;;;IAkB/C;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,GAAE,kBAAuB;CAI7C"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static file serving — middleware + helpers.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors `@adonisjs/static` + `serve-static`. Built on the platform's
|
|
5
|
+
* native filesystem (Bun.file() on Bun, node:fs elsewhere).
|
|
6
|
+
*/
|
|
7
|
+
import type { MiddlewareHandler } from "hono";
|
|
8
|
+
/** Configuration for `serveStatic`. */
|
|
9
|
+
export interface ServeStaticOptions {
|
|
10
|
+
/** Filesystem root to serve files from. Default: `./public`. */
|
|
11
|
+
root?: string;
|
|
12
|
+
/** URL prefix. Default: `/`. */
|
|
13
|
+
prefix?: string;
|
|
14
|
+
/** Default file when a directory is requested. Default: `index.html`. */
|
|
15
|
+
index?: string | false;
|
|
16
|
+
/** `Cache-Control` header. Default: `'public, max-age=3600'`. */
|
|
17
|
+
cacheControl?: string;
|
|
18
|
+
/** Enable ETag generation. Default: `true`. */
|
|
19
|
+
etag?: boolean;
|
|
20
|
+
/** Enable range requests (for video / large files). Default: `true`. */
|
|
21
|
+
range?: boolean;
|
|
22
|
+
/** Max file size in bytes; larger files return 404. Default: 100 MB. */
|
|
23
|
+
maxFileSize?: number;
|
|
24
|
+
}
|
|
25
|
+
/** StaticService — emits the `serveStatic` middleware. */
|
|
26
|
+
export declare class StaticService {
|
|
27
|
+
#private;
|
|
28
|
+
/** DI token — use with `@Inject(StaticService.TOKEN)`. */
|
|
29
|
+
static readonly TOKEN: unique symbol;
|
|
30
|
+
constructor(options?: ServeStaticOptions);
|
|
31
|
+
/**
|
|
32
|
+
* Build a Hono middleware that serves files from `root`.
|
|
33
|
+
*
|
|
34
|
+
* app.use('/public/*', staticService.middleware());
|
|
35
|
+
*/
|
|
36
|
+
middleware(): MiddlewareHandler;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=static.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static.service.d.ts","sourceRoot":"","sources":["../../src/static/static.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAW,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAKvD,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IAClC,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACvB,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,0DAA0D;AAC1D,qBAAa,aAAa;;IACzB,0DAA0D;IAC1D,MAAM,CAAC,QAAQ,CAAC,KAAK,gBAAqC;gBAU9C,OAAO,GAAE,kBAAuB;IAa5C;;;;OAIG;IACH,UAAU,IAAI,iBAAiB;CA6J/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tracing/decorators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@Trace()` — class-method decorator that wraps the call in a span.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* class UserService {
|
|
6
|
+
* @Trace() // span name = class.method
|
|
7
|
+
* async findById(id: string) { ... }
|
|
8
|
+
*
|
|
9
|
+
* @Trace("user.lookup") // explicit span name
|
|
10
|
+
* async lookup(name: string) { ... }
|
|
11
|
+
*
|
|
12
|
+
* @Trace({ name: "user.cache.get", attributes: { cache: "lru" } })
|
|
13
|
+
* async getFromCache(key: string) { ... }
|
|
14
|
+
* }
|
|
15
|
+
*
|
|
16
|
+
* The decorator reads the `TracingService` from the global registry
|
|
17
|
+
* (set by `TracingModule.forRoot()`). When no service is registered
|
|
18
|
+
* the decorator is a pass-through.
|
|
19
|
+
*
|
|
20
|
+
* Sync methods stay sync; async methods stay async. The decorator
|
|
21
|
+
* detects `AsyncFunction` and uses `withSpan` / `withSpanSync` accordingly.
|
|
22
|
+
*/
|
|
23
|
+
import type { SpanOptions } from "../types.js";
|
|
24
|
+
export type TraceOptions = string | undefined | (SpanOptions & {
|
|
25
|
+
name: string;
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* Method decorator: wrap a call in a span.
|
|
29
|
+
*
|
|
30
|
+
* The decorator works on both async and sync methods. The wrapped
|
|
31
|
+
* function preserves `this` so decorators on classes still see the
|
|
32
|
+
* right instance.
|
|
33
|
+
*/
|
|
34
|
+
export declare function Trace(opts?: TraceOptions): (target: object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
35
|
+
/** Read the @Trace options for a given method (used by OpenAPI integration). */
|
|
36
|
+
export declare function getTraceOptions(target: object, method: string): TraceOptions | undefined;
|
|
37
|
+
//# sourceMappingURL=trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../../src/tracing/decorators/trace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,aAAa,CAAC;AAG3D,MAAM,MAAM,YAAY,GACrB,MAAM,GACN,SAAS,GACT,CAAC,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAIpC;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,IAAI,CAAC,EAAE,YAAY,IACvB,QAAQ,MAAM,EAAE,aAAa,MAAM,GAAG,MAAM,EAAE,YAAY,kBAAkB,wBAyC7F;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAExF"}
|