@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
package/dist/index.js
ADDED
|
@@ -0,0 +1,2056 @@
|
|
|
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/view/rendu.ts
|
|
58
|
+
import { compileTemplate } from "rendu";
|
|
59
|
+
|
|
60
|
+
class RenduAdapter {
|
|
61
|
+
name = "rendu";
|
|
62
|
+
cache = new Map;
|
|
63
|
+
render(template, data, context, options) {
|
|
64
|
+
const safe = {};
|
|
65
|
+
for (const [k, v] of Object.entries(data)) {
|
|
66
|
+
safe[k] = typeof v === "string" ? v : v == null ? "" : String(v);
|
|
67
|
+
}
|
|
68
|
+
const merged = this.mergeData(safe, context, options);
|
|
69
|
+
return this.getCompiled(template, options)(merged);
|
|
70
|
+
}
|
|
71
|
+
compile(template, options) {
|
|
72
|
+
const compiled = this.getCompiled(template, options);
|
|
73
|
+
return (data) => compiled(data);
|
|
74
|
+
}
|
|
75
|
+
getCompiled(template, options) {
|
|
76
|
+
const cacheKey = options ? `${options.stream ? "s" : ""}` : "";
|
|
77
|
+
let compiled = this.cache.get(cacheKey);
|
|
78
|
+
if (!compiled) {
|
|
79
|
+
compiled = compileTemplate(template, {
|
|
80
|
+
stream: options?.stream ?? false
|
|
81
|
+
});
|
|
82
|
+
this.cache.set(cacheKey, compiled);
|
|
83
|
+
}
|
|
84
|
+
return compiled;
|
|
85
|
+
}
|
|
86
|
+
mergeData(data, context, options) {
|
|
87
|
+
const merged = { ...data };
|
|
88
|
+
if (context) {
|
|
89
|
+
if (context.request)
|
|
90
|
+
merged.$REQUEST = context.request;
|
|
91
|
+
if (context.response)
|
|
92
|
+
merged.$RESPONSE = context.response;
|
|
93
|
+
if (context.globals)
|
|
94
|
+
Object.assign(merged, context.globals);
|
|
95
|
+
}
|
|
96
|
+
if (options?.layout)
|
|
97
|
+
merged.$LAYOUT = options.layout;
|
|
98
|
+
return merged;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
var init_rendu = () => {};
|
|
102
|
+
|
|
103
|
+
// src/view/edge.ts
|
|
104
|
+
class EdgeAdapter {
|
|
105
|
+
edge;
|
|
106
|
+
name = "edge";
|
|
107
|
+
constructor(edge) {
|
|
108
|
+
this.edge = edge;
|
|
109
|
+
}
|
|
110
|
+
async render(template, data, context, options) {
|
|
111
|
+
if (!this.edge) {
|
|
112
|
+
throw new Error("EdgeAdapter requires an Edge instance. " + "Install `edge.js` and pass it to `new EdgeAdapter(edge)`, " + "or use the default RenduAdapter instead.");
|
|
113
|
+
}
|
|
114
|
+
const fn = this.edge.renderRaw ?? this.edge.renderString;
|
|
115
|
+
if (!fn) {
|
|
116
|
+
throw new Error("Provided Edge instance does not implement renderRaw/renderString.");
|
|
117
|
+
}
|
|
118
|
+
return fn.call(this.edge, template, { ...data, $OPTIONS: options });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// src/view/eta.ts
|
|
123
|
+
class EtaAdapter {
|
|
124
|
+
name = "eta";
|
|
125
|
+
cache = new Map;
|
|
126
|
+
async render(template, data, _context, _options) {
|
|
127
|
+
const compiled = this.getCompiled(template);
|
|
128
|
+
return compiled(data);
|
|
129
|
+
}
|
|
130
|
+
compile(template, _options) {
|
|
131
|
+
const compiled = this.getCompiled(template);
|
|
132
|
+
return (data) => Promise.resolve(compiled(data));
|
|
133
|
+
}
|
|
134
|
+
getCompiled(template) {
|
|
135
|
+
let fn = this.cache.get(template);
|
|
136
|
+
if (!fn) {
|
|
137
|
+
let Eta;
|
|
138
|
+
try {
|
|
139
|
+
Eta = __require("eta").Eta;
|
|
140
|
+
} catch (e) {
|
|
141
|
+
throw new Error(`[nexus] EtaAdapter: the "eta" package is not installed. ` + `Run \`bun add eta\` (or \`npm install eta\`) to use .eta templates.`);
|
|
142
|
+
}
|
|
143
|
+
const eta = new Eta;
|
|
144
|
+
fn = (data) => eta.renderString(template, data);
|
|
145
|
+
this.cache.set(template, fn);
|
|
146
|
+
}
|
|
147
|
+
return fn;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// src/view/view-engine.ts
|
|
152
|
+
var exports_view_engine = {};
|
|
153
|
+
__export(exports_view_engine, {
|
|
154
|
+
setViewPaths: () => setViewPaths,
|
|
155
|
+
renderView: () => renderView,
|
|
156
|
+
loadTemplate: () => loadTemplate,
|
|
157
|
+
getViewPaths: () => getViewPaths
|
|
158
|
+
});
|
|
159
|
+
function setViewPaths(path) {
|
|
160
|
+
viewPath = path ? path.endsWith("/") || path.endsWith("\\") ? path : `${path}/` : "";
|
|
161
|
+
}
|
|
162
|
+
function getViewPaths() {
|
|
163
|
+
return viewPath;
|
|
164
|
+
}
|
|
165
|
+
function isViewFilePath(name) {
|
|
166
|
+
const lower = name.toLowerCase();
|
|
167
|
+
return VIEW_FILE_EXTS.some((ext) => lower.endsWith(ext));
|
|
168
|
+
}
|
|
169
|
+
function selectAdapter(template) {
|
|
170
|
+
const lower = template.toLowerCase();
|
|
171
|
+
if (lower.endsWith(".edge"))
|
|
172
|
+
return new EdgeAdapter;
|
|
173
|
+
if (lower.endsWith(".eta"))
|
|
174
|
+
return new EtaAdapter;
|
|
175
|
+
return new RenduAdapter;
|
|
176
|
+
}
|
|
177
|
+
async function renderView(template, data, context) {
|
|
178
|
+
let source = template;
|
|
179
|
+
if (isViewFilePath(template) && viewPath.length > 0) {
|
|
180
|
+
const loaded = await loadTemplate(viewPath, template);
|
|
181
|
+
if (loaded === null) {
|
|
182
|
+
throw new Error(`[nexus] View file not found: "${template}" (searched: ${viewPath})`);
|
|
183
|
+
}
|
|
184
|
+
source = loaded;
|
|
185
|
+
}
|
|
186
|
+
const adapter = selectAdapter(source);
|
|
187
|
+
return adapter.render(source, data, context);
|
|
188
|
+
}
|
|
189
|
+
async function loadTemplate(dir, name) {
|
|
190
|
+
if (!dir)
|
|
191
|
+
return null;
|
|
192
|
+
const full = joinPath(dir, name);
|
|
193
|
+
try {
|
|
194
|
+
const file = await readFile(full);
|
|
195
|
+
if (file !== null)
|
|
196
|
+
return file;
|
|
197
|
+
} catch {}
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
function joinPath(dir, name) {
|
|
201
|
+
if (!dir.endsWith("/") && !dir.endsWith("\\"))
|
|
202
|
+
return `${dir}/${name}`;
|
|
203
|
+
return `${dir}${name}`;
|
|
204
|
+
}
|
|
205
|
+
async function readFile(path) {
|
|
206
|
+
if (typeof globalThis.Bun !== "undefined") {
|
|
207
|
+
try {
|
|
208
|
+
const file = globalThis.Bun.file(path);
|
|
209
|
+
if (await file.exists())
|
|
210
|
+
return file.text();
|
|
211
|
+
} catch {}
|
|
212
|
+
}
|
|
213
|
+
try {
|
|
214
|
+
const fs = await import("fs/promises");
|
|
215
|
+
return await fs.readFile(path, "utf8");
|
|
216
|
+
} catch {
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
var viewPath = "", VIEW_FILE_EXTS;
|
|
221
|
+
var init_view_engine = __esm(() => {
|
|
222
|
+
init_rendu();
|
|
223
|
+
VIEW_FILE_EXTS = [".html", ".edge", ".rendu", ".eta"];
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
// src/core/constants.ts
|
|
227
|
+
var METADATA_KEY, PARAM_TYPES, HTTP_METHODS;
|
|
228
|
+
var init_constants = __esm(() => {
|
|
229
|
+
METADATA_KEY = {
|
|
230
|
+
CONTROLLER: "nexus:controller",
|
|
231
|
+
INJECTABLE: "nexus:injectable",
|
|
232
|
+
REPOSITORY: "nexus:repository",
|
|
233
|
+
MODULE: "nexus:module",
|
|
234
|
+
ROUTES: "nexus:routes",
|
|
235
|
+
PARAMS: "nexus:params",
|
|
236
|
+
VALIDATE: "nexus:validate",
|
|
237
|
+
PARAMTYPES: "design:paramtypes",
|
|
238
|
+
TYPE: "design:type",
|
|
239
|
+
RETURNTYPE: "design:returntype",
|
|
240
|
+
INJECT: "nexus:inject"
|
|
241
|
+
};
|
|
242
|
+
PARAM_TYPES = {
|
|
243
|
+
REQUEST: 0,
|
|
244
|
+
RESPONSE: 1,
|
|
245
|
+
NEXT: 2,
|
|
246
|
+
BODY: 3,
|
|
247
|
+
QUERY: 4,
|
|
248
|
+
PARAM: 5,
|
|
249
|
+
HEADERS: 6,
|
|
250
|
+
CTX: 7,
|
|
251
|
+
USER: 8
|
|
252
|
+
};
|
|
253
|
+
HTTP_METHODS = [
|
|
254
|
+
"GET",
|
|
255
|
+
"POST",
|
|
256
|
+
"PUT",
|
|
257
|
+
"DELETE",
|
|
258
|
+
"PATCH",
|
|
259
|
+
"OPTIONS",
|
|
260
|
+
"HEAD"
|
|
261
|
+
];
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
// src/core/decorators/controller.ts
|
|
265
|
+
import"reflect-metadata";
|
|
266
|
+
function Controller(prefix = "/") {
|
|
267
|
+
return (target) => {
|
|
268
|
+
const normalized = normalizePrefix(prefix);
|
|
269
|
+
const meta = { prefix: normalized };
|
|
270
|
+
Reflect.defineMetadata(METADATA_KEY.CONTROLLER, meta, target);
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
function getControllerMetadata(target) {
|
|
274
|
+
return Reflect.getMetadata(METADATA_KEY.CONTROLLER, target) ?? { prefix: "/" };
|
|
275
|
+
}
|
|
276
|
+
function isController(target) {
|
|
277
|
+
return Reflect.hasMetadata(METADATA_KEY.CONTROLLER, target);
|
|
278
|
+
}
|
|
279
|
+
function normalizePrefix(prefix) {
|
|
280
|
+
if (!prefix)
|
|
281
|
+
return "";
|
|
282
|
+
if (prefix !== "/" && prefix.endsWith("/")) {
|
|
283
|
+
return prefix.slice(0, -1);
|
|
284
|
+
}
|
|
285
|
+
return prefix;
|
|
286
|
+
}
|
|
287
|
+
var init_controller = __esm(() => {
|
|
288
|
+
init_constants();
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
// src/core/decorators/http-methods.ts
|
|
292
|
+
import"reflect-metadata";
|
|
293
|
+
function defineRoute(method, path) {
|
|
294
|
+
return (target, propertyKey, descriptor) => {
|
|
295
|
+
const routes = Reflect.getMetadata(METADATA_KEY.ROUTES, target.constructor) ?? [];
|
|
296
|
+
routes.push({
|
|
297
|
+
method,
|
|
298
|
+
path: normalizePath(path),
|
|
299
|
+
propertyKey,
|
|
300
|
+
handler: descriptor.value
|
|
301
|
+
});
|
|
302
|
+
Reflect.defineMetadata(METADATA_KEY.ROUTES, routes, target.constructor);
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
function normalizePath(path) {
|
|
306
|
+
if (!path || path === "/")
|
|
307
|
+
return "/";
|
|
308
|
+
return path.startsWith("/") ? path : `/${path}`;
|
|
309
|
+
}
|
|
310
|
+
function getRoutes(target) {
|
|
311
|
+
return Reflect.getMetadata(METADATA_KEY.ROUTES, target) ?? [];
|
|
312
|
+
}
|
|
313
|
+
var Get = (path = "/") => defineRoute("GET", path), Post = (path = "/") => defineRoute("POST", path), Put = (path = "/") => defineRoute("PUT", path), Delete = (path = "/") => defineRoute("DELETE", path), Patch = (path = "/") => defineRoute("PATCH", path), Options = (path = "/") => defineRoute("OPTIONS", path), Head = (path = "/") => defineRoute("HEAD", path);
|
|
314
|
+
var init_http_methods = __esm(() => {
|
|
315
|
+
init_constants();
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
// src/core/decorators/params.ts
|
|
319
|
+
import"reflect-metadata";
|
|
320
|
+
function createParamDecorator(type, data) {
|
|
321
|
+
return (target, propertyKey, parameterIndex) => {
|
|
322
|
+
if (propertyKey !== undefined) {
|
|
323
|
+
const params = Reflect.getMetadata(METADATA_KEY.PARAMS, target, propertyKey) ?? [];
|
|
324
|
+
params.push({
|
|
325
|
+
index: parameterIndex,
|
|
326
|
+
type,
|
|
327
|
+
name: typeof data === "string" ? data : undefined,
|
|
328
|
+
data: typeof data === "object" ? data : undefined
|
|
329
|
+
});
|
|
330
|
+
Reflect.defineMetadata(METADATA_KEY.PARAMS, params, target, propertyKey);
|
|
331
|
+
} else {
|
|
332
|
+
const params = Reflect.getMetadata(METADATA_KEY.PARAMS, target) ?? [];
|
|
333
|
+
params.push({
|
|
334
|
+
index: parameterIndex,
|
|
335
|
+
type,
|
|
336
|
+
name: typeof data === "string" ? data : undefined,
|
|
337
|
+
data: typeof data === "object" ? data : undefined
|
|
338
|
+
});
|
|
339
|
+
Reflect.defineMetadata(METADATA_KEY.PARAMS, params, target);
|
|
340
|
+
}
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
function getParamMetadata(target, propertyKey) {
|
|
344
|
+
return Reflect.getMetadata(METADATA_KEY.PARAMS, target, propertyKey) ?? [];
|
|
345
|
+
}
|
|
346
|
+
var Req = () => createParamDecorator(PARAM_TYPES.REQUEST), Res = () => createParamDecorator(PARAM_TYPES.RESPONSE), Next = () => createParamDecorator(PARAM_TYPES.NEXT), Body = (key) => createParamDecorator(PARAM_TYPES.BODY, key), Query = (key) => createParamDecorator(PARAM_TYPES.QUERY, key), Param = (key) => createParamDecorator(PARAM_TYPES.PARAM, key), Headers2 = (key) => createParamDecorator(PARAM_TYPES.HEADERS, key), Ctx = () => createParamDecorator(PARAM_TYPES.CTX), User = () => createParamDecorator(PARAM_TYPES.USER);
|
|
347
|
+
var init_params = __esm(() => {
|
|
348
|
+
init_constants();
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
// src/core/decorators/validate.ts
|
|
352
|
+
import"reflect-metadata";
|
|
353
|
+
function Validate(options) {
|
|
354
|
+
return (target, propertyKey, descriptor) => {
|
|
355
|
+
Reflect.defineMetadata(METADATA_KEY.VALIDATE, options, target.constructor, propertyKey);
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
function getValidationMetadata(target, propertyKey) {
|
|
359
|
+
return Reflect.getMetadata(METADATA_KEY.VALIDATE, target, propertyKey);
|
|
360
|
+
}
|
|
361
|
+
var init_validate = __esm(() => {
|
|
362
|
+
init_constants();
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
// src/core/di/request-scope.ts
|
|
366
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
367
|
+
import { randomUUID } from "crypto";
|
|
368
|
+
function newRequestId() {
|
|
369
|
+
return randomUUID().slice(0, 8);
|
|
370
|
+
}
|
|
371
|
+
function getRequest() {
|
|
372
|
+
return storage.getStore()?.context;
|
|
373
|
+
}
|
|
374
|
+
function getRequestScope() {
|
|
375
|
+
return storage.getStore();
|
|
376
|
+
}
|
|
377
|
+
function getRequestState(key) {
|
|
378
|
+
return storage.getStore()?.state.get(key);
|
|
379
|
+
}
|
|
380
|
+
function setRequestState(key, value) {
|
|
381
|
+
const s = storage.getStore();
|
|
382
|
+
if (s)
|
|
383
|
+
s.state.set(key, value);
|
|
384
|
+
}
|
|
385
|
+
var REQUEST, REQUEST_SCOPE, storage, RequestScopeStorage;
|
|
386
|
+
var init_request_scope = __esm(() => {
|
|
387
|
+
REQUEST = Symbol.for("nexus:REQUEST");
|
|
388
|
+
REQUEST_SCOPE = Symbol.for("nexus:REQUEST_SCOPE");
|
|
389
|
+
storage = new AsyncLocalStorage;
|
|
390
|
+
RequestScopeStorage = {
|
|
391
|
+
get() {
|
|
392
|
+
return storage.getStore();
|
|
393
|
+
},
|
|
394
|
+
run(scope, fn) {
|
|
395
|
+
return storage.run(scope, fn);
|
|
396
|
+
},
|
|
397
|
+
create(context, container) {
|
|
398
|
+
return {
|
|
399
|
+
id: newRequestId(),
|
|
400
|
+
context,
|
|
401
|
+
container,
|
|
402
|
+
state: new Map
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
};
|
|
406
|
+
});
|
|
407
|
+
|
|
408
|
+
// src/core/di/container.ts
|
|
409
|
+
import"reflect-metadata";
|
|
410
|
+
|
|
411
|
+
class DIContainer {
|
|
412
|
+
providers = new Map;
|
|
413
|
+
singletons = new Map;
|
|
414
|
+
resolving = new Set;
|
|
415
|
+
parent;
|
|
416
|
+
constructor(parent) {
|
|
417
|
+
this.parent = parent;
|
|
418
|
+
}
|
|
419
|
+
createChild() {
|
|
420
|
+
return new DIContainer(this);
|
|
421
|
+
}
|
|
422
|
+
register(providers) {
|
|
423
|
+
const list = Array.isArray(providers) ? providers : [providers];
|
|
424
|
+
for (const provider of list) {
|
|
425
|
+
this.registerOne(provider);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
registerOne(provider) {
|
|
429
|
+
const record = this.normalizeProvider(provider);
|
|
430
|
+
if (this.providers.has(record.token)) {
|
|
431
|
+
throw new Error(`Duplicate provider for token "${this.tokenName(record.token)}". ` + `Each token may only be registered once per container.`);
|
|
432
|
+
}
|
|
433
|
+
this.providers.set(record.token, record);
|
|
434
|
+
}
|
|
435
|
+
normalizeProvider(provider) {
|
|
436
|
+
if (this.isClass(provider)) {
|
|
437
|
+
const dependencies = this.readClassDependencies(provider);
|
|
438
|
+
const classScope = Reflect.getMetadata("nexus:di:scope", provider);
|
|
439
|
+
return {
|
|
440
|
+
token: provider,
|
|
441
|
+
provider,
|
|
442
|
+
scope: classScope ?? "singleton",
|
|
443
|
+
dependencies
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
const deps = this.readProviderDependencies(provider);
|
|
447
|
+
const scope = "scope" in provider && provider.scope || "singleton";
|
|
448
|
+
return {
|
|
449
|
+
token: provider.provide,
|
|
450
|
+
provider,
|
|
451
|
+
scope,
|
|
452
|
+
dependencies: deps
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
readClassDependencies(cls) {
|
|
456
|
+
const paramTypes = Reflect.getMetadata(METADATA_KEY.PARAMTYPES, cls) || [];
|
|
457
|
+
const set = new Set;
|
|
458
|
+
for (const t of paramTypes) {
|
|
459
|
+
if (t && t !== Object)
|
|
460
|
+
set.add(t);
|
|
461
|
+
}
|
|
462
|
+
return set;
|
|
463
|
+
}
|
|
464
|
+
readProviderDependencies(provider) {
|
|
465
|
+
const set = new Set;
|
|
466
|
+
if ("inject" in provider && Array.isArray(provider.inject)) {
|
|
467
|
+
for (const dep of provider.inject) {
|
|
468
|
+
if (dep && typeof dep === "object" && "token" in dep) {
|
|
469
|
+
set.add(dep.token);
|
|
470
|
+
} else if (dep) {
|
|
471
|
+
set.add(dep);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
} else if ("useClass" in provider) {
|
|
475
|
+
const cls = provider.useClass;
|
|
476
|
+
return this.readClassDependencies(cls);
|
|
477
|
+
}
|
|
478
|
+
return set;
|
|
479
|
+
}
|
|
480
|
+
resolve(token) {
|
|
481
|
+
if (this.resolving.has(token)) {
|
|
482
|
+
throw new Error(`Circular dependency detected while resolving "${this.tokenName(token)}". ` + `Resolution stack: ${[...this.resolving].map((t) => this.tokenName(t)).join(" -> ")}`);
|
|
483
|
+
}
|
|
484
|
+
const cached = this.singletons.get(token);
|
|
485
|
+
if (cached !== undefined)
|
|
486
|
+
return cached;
|
|
487
|
+
const record0 = this.providers.get(token);
|
|
488
|
+
if (record0 && record0.scope === "request") {
|
|
489
|
+
const scope = RequestScopeStorage.get();
|
|
490
|
+
if (scope) {
|
|
491
|
+
const r2 = scope.container.singletons.get(token);
|
|
492
|
+
if (r2 !== undefined)
|
|
493
|
+
return r2;
|
|
494
|
+
const inst = this.instantiate(record0);
|
|
495
|
+
scope.container.singletons.set(token, inst);
|
|
496
|
+
return inst;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
const record = this.providers.get(token);
|
|
500
|
+
if (!record) {
|
|
501
|
+
if (this.parent) {
|
|
502
|
+
try {
|
|
503
|
+
return this.parent.resolve(token);
|
|
504
|
+
} catch {}
|
|
505
|
+
}
|
|
506
|
+
throw new Error(`No provider for "${this.tokenName(token)}". ` + `Register it via DIContainer.register() or @Module({ providers: [...] }).`);
|
|
507
|
+
}
|
|
508
|
+
const owningContainer = this.providers.get(token) === record ? this : this;
|
|
509
|
+
this.resolving.add(token);
|
|
510
|
+
try {
|
|
511
|
+
const instance = owningContainer.instantiate(record);
|
|
512
|
+
if (record.scope === "singleton") {
|
|
513
|
+
owningContainer.singletons.set(token, instance);
|
|
514
|
+
}
|
|
515
|
+
return instance;
|
|
516
|
+
} finally {
|
|
517
|
+
this.resolving.delete(token);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
tryResolve(token) {
|
|
521
|
+
try {
|
|
522
|
+
return this.resolve(token);
|
|
523
|
+
} catch {
|
|
524
|
+
return;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
instantiate(record) {
|
|
528
|
+
const provider = record.provider;
|
|
529
|
+
if (this.isClass(provider)) {
|
|
530
|
+
const paramTypes = Reflect.getMetadata(METADATA_KEY.PARAMTYPES, provider) || [];
|
|
531
|
+
const injectMap = Reflect.getMetadata(METADATA_KEY.INJECT, provider) ?? new Map;
|
|
532
|
+
const maxInjectIndex = injectMap.size > 0 ? Math.max(...Array.from(injectMap.keys())) + 1 : 0;
|
|
533
|
+
const totalParams = Math.max(paramTypes.length, maxInjectIndex);
|
|
534
|
+
const params2 = new Array(totalParams);
|
|
535
|
+
for (let index = 0;index < totalParams; index++) {
|
|
536
|
+
if (injectMap.has(index)) {
|
|
537
|
+
params2[index] = this.resolve(injectMap.get(index));
|
|
538
|
+
continue;
|
|
539
|
+
}
|
|
540
|
+
const type = paramTypes[index];
|
|
541
|
+
if (!type || type === Object) {
|
|
542
|
+
throw new Error(`Cannot inject parameter at index ${index} of "${provider.name || "<anonymous>"}" ` + `(type is "Object" or "undefined"). This usually means ` + `reflect-metadata was not emitted by your toolchain (Bun's ` + `native transpiler doesn't emit decorator metadata). Use the ` + `@Inject(Token) parameter decorator to specify the dependency ` + `explicitly, e.g. \`constructor(@Inject(UserService) private users: UserService)\`.`);
|
|
543
|
+
}
|
|
544
|
+
params2[index] = this.resolve(type);
|
|
545
|
+
}
|
|
546
|
+
return new provider(...params2);
|
|
547
|
+
}
|
|
548
|
+
if ("useValue" in provider) {
|
|
549
|
+
return provider.useValue;
|
|
550
|
+
}
|
|
551
|
+
if ("useClass" in provider) {
|
|
552
|
+
const ClassRef = provider.useClass;
|
|
553
|
+
const paramTypes = Reflect.getMetadata(METADATA_KEY.PARAMTYPES, ClassRef) || [];
|
|
554
|
+
const injectMap = Reflect.getMetadata(METADATA_KEY.INJECT, ClassRef) ?? new Map;
|
|
555
|
+
const maxInjectIndex = injectMap.size > 0 ? Math.max(...Array.from(injectMap.keys())) + 1 : 0;
|
|
556
|
+
const totalParams = Math.max(paramTypes.length, maxInjectIndex);
|
|
557
|
+
const params2 = new Array(totalParams);
|
|
558
|
+
for (let index = 0;index < totalParams; index++) {
|
|
559
|
+
if (injectMap.has(index)) {
|
|
560
|
+
params2[index] = this.resolve(injectMap.get(index));
|
|
561
|
+
continue;
|
|
562
|
+
}
|
|
563
|
+
const type = paramTypes[index];
|
|
564
|
+
if (!type || type === Object) {
|
|
565
|
+
throw new Error(`Cannot inject parameter at index ${index} of "${ClassRef.name}" ` + `(type is "Object" or "undefined"). Add explicit type annotations or ` + `use @Inject(Token).`);
|
|
566
|
+
}
|
|
567
|
+
params2[index] = this.resolve(type);
|
|
568
|
+
}
|
|
569
|
+
return new ClassRef(...params2);
|
|
570
|
+
}
|
|
571
|
+
if ("useFactory" in provider) {
|
|
572
|
+
const factoryProvider = provider;
|
|
573
|
+
const inject = factoryProvider.inject ?? [];
|
|
574
|
+
const args = inject.map((dep) => {
|
|
575
|
+
if (dep && typeof dep === "object" && "token" in dep) {
|
|
576
|
+
const { token, optional } = dep;
|
|
577
|
+
return optional ? this.tryResolve(token) : this.resolve(token);
|
|
578
|
+
}
|
|
579
|
+
return this.resolve(dep);
|
|
580
|
+
});
|
|
581
|
+
return factoryProvider.useFactory(...args);
|
|
582
|
+
}
|
|
583
|
+
if ("useExisting" in provider) {
|
|
584
|
+
const existing = provider.useExisting;
|
|
585
|
+
return this.resolve(existing);
|
|
586
|
+
}
|
|
587
|
+
throw new Error(`Unknown provider shape for token "${this.tokenName(record.token)}"`);
|
|
588
|
+
}
|
|
589
|
+
has(token) {
|
|
590
|
+
return this.providers.has(token);
|
|
591
|
+
}
|
|
592
|
+
list() {
|
|
593
|
+
return [...this.providers.keys()].map((t) => this.tokenName(t));
|
|
594
|
+
}
|
|
595
|
+
isClass(value) {
|
|
596
|
+
return typeof value === "function";
|
|
597
|
+
}
|
|
598
|
+
tokenName(token) {
|
|
599
|
+
if (typeof token === "function")
|
|
600
|
+
return token.name || "<anonymous class>";
|
|
601
|
+
if (typeof token === "symbol")
|
|
602
|
+
return token.toString();
|
|
603
|
+
return String(token);
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
var ApplicationContainer;
|
|
607
|
+
var init_container = __esm(() => {
|
|
608
|
+
init_constants();
|
|
609
|
+
init_request_scope();
|
|
610
|
+
ApplicationContainer = class ApplicationContainer extends DIContainer {
|
|
611
|
+
moduleContainers = new Map;
|
|
612
|
+
registerModule(moduleClass, container) {
|
|
613
|
+
this.moduleContainers.set(moduleClass, container);
|
|
614
|
+
}
|
|
615
|
+
getModuleContainer(moduleClass) {
|
|
616
|
+
return this.moduleContainers.get(moduleClass);
|
|
617
|
+
}
|
|
618
|
+
};
|
|
619
|
+
});
|
|
620
|
+
|
|
621
|
+
// src/core/di/scanner.ts
|
|
622
|
+
class ModuleScanner {
|
|
623
|
+
root;
|
|
624
|
+
scanned = new Map;
|
|
625
|
+
constructor(root) {
|
|
626
|
+
this.root = root;
|
|
627
|
+
}
|
|
628
|
+
scan(rootModule) {
|
|
629
|
+
const rootResult = this.scanModule(rootModule, this.root);
|
|
630
|
+
const all = [...this.scanned.values()];
|
|
631
|
+
return { root: rootResult, modules: all };
|
|
632
|
+
}
|
|
633
|
+
scanModule(moduleClass, parentContainer) {
|
|
634
|
+
if (this.scanned.has(moduleClass)) {
|
|
635
|
+
return this.scanned.get(moduleClass);
|
|
636
|
+
}
|
|
637
|
+
const options = this.readModuleOptions(moduleClass);
|
|
638
|
+
const container = parentContainer.createChild();
|
|
639
|
+
this.root.registerModule(moduleClass, container);
|
|
640
|
+
const placeholder = {
|
|
641
|
+
controllers: [],
|
|
642
|
+
providers: [],
|
|
643
|
+
exports: [],
|
|
644
|
+
container
|
|
645
|
+
};
|
|
646
|
+
this.scanned.set(moduleClass, placeholder);
|
|
647
|
+
for (const imported of options.imports ?? []) {
|
|
648
|
+
const importedResult = this.scanModule(imported, parentContainer);
|
|
649
|
+
for (const exp of importedResult.exports) {
|
|
650
|
+
if (!parentContainer.has(exp)) {
|
|
651
|
+
parentContainer.register({
|
|
652
|
+
provide: exp,
|
|
653
|
+
useFactory: () => importedResult.container.resolve(exp)
|
|
654
|
+
});
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
const providers = [
|
|
659
|
+
...options.providers ?? [],
|
|
660
|
+
...options.controllers ?? []
|
|
661
|
+
];
|
|
662
|
+
container.register(providers);
|
|
663
|
+
for (const exp of options.exports ?? []) {
|
|
664
|
+
if (!parentContainer.has(exp)) {
|
|
665
|
+
parentContainer.register({
|
|
666
|
+
provide: exp,
|
|
667
|
+
useFactory: () => container.resolve(exp)
|
|
668
|
+
});
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
const result = {
|
|
672
|
+
controllers: options.controllers ?? [],
|
|
673
|
+
providers: options.providers ?? [],
|
|
674
|
+
exports: options.exports ?? [],
|
|
675
|
+
container
|
|
676
|
+
};
|
|
677
|
+
this.scanned.set(moduleClass, result);
|
|
678
|
+
return result;
|
|
679
|
+
}
|
|
680
|
+
readModuleOptions(moduleClass) {
|
|
681
|
+
const meta = Reflect.getMetadata(METADATA_KEY.MODULE, moduleClass);
|
|
682
|
+
if (!meta) {
|
|
683
|
+
throw new Error(`Class "${moduleClass.name}" is missing the @Module() decorator.`);
|
|
684
|
+
}
|
|
685
|
+
return meta;
|
|
686
|
+
}
|
|
687
|
+
get(moduleClass) {
|
|
688
|
+
return this.scanned.get(moduleClass);
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
var init_scanner = __esm(() => {
|
|
692
|
+
init_constants();
|
|
693
|
+
});
|
|
694
|
+
|
|
695
|
+
// src/core/di/request-middleware.ts
|
|
696
|
+
var exports_request_middleware = {};
|
|
697
|
+
__export(exports_request_middleware, {
|
|
698
|
+
requestScopeMiddleware: () => requestScopeMiddleware,
|
|
699
|
+
installRequestTokens: () => installRequestTokens
|
|
700
|
+
});
|
|
701
|
+
function installRequestTokens(root) {
|
|
702
|
+
const existing = root.providers;
|
|
703
|
+
if (existing && (existing.has(REQUEST) || existing.has(REQUEST_SCOPE)))
|
|
704
|
+
return;
|
|
705
|
+
root.register({
|
|
706
|
+
provide: REQUEST,
|
|
707
|
+
scope: "transient",
|
|
708
|
+
useFactory: () => RequestScopeStorage.get()?.context
|
|
709
|
+
});
|
|
710
|
+
root.register({
|
|
711
|
+
provide: REQUEST_SCOPE,
|
|
712
|
+
scope: "transient",
|
|
713
|
+
useFactory: () => RequestScopeStorage.get()
|
|
714
|
+
});
|
|
715
|
+
}
|
|
716
|
+
function requestScopeMiddleware(root) {
|
|
717
|
+
installRequestTokens(root);
|
|
718
|
+
return async (c, next) => {
|
|
719
|
+
const reqContainer = new DIContainer(root);
|
|
720
|
+
const scope = RequestScopeStorage.create(c, reqContainer);
|
|
721
|
+
return RequestScopeStorage.run(scope, () => next());
|
|
722
|
+
};
|
|
723
|
+
}
|
|
724
|
+
var init_request_middleware = __esm(() => {
|
|
725
|
+
init_container();
|
|
726
|
+
init_request_scope();
|
|
727
|
+
});
|
|
728
|
+
|
|
729
|
+
// src/core/http/middleware.ts
|
|
730
|
+
function logger() {
|
|
731
|
+
return async (c, next) => {
|
|
732
|
+
const start = performance.now();
|
|
733
|
+
await next();
|
|
734
|
+
const ms = (performance.now() - start).toFixed(2);
|
|
735
|
+
const status = c.res.status;
|
|
736
|
+
console.log(`[${c.req.method}] ${c.req.path} -> ${status} (${ms}ms)`);
|
|
737
|
+
return;
|
|
738
|
+
};
|
|
739
|
+
}
|
|
740
|
+
function cors(options) {
|
|
741
|
+
const origin = options.origin;
|
|
742
|
+
const methods = options.methods ?? [
|
|
743
|
+
"GET",
|
|
744
|
+
"POST",
|
|
745
|
+
"PUT",
|
|
746
|
+
"DELETE",
|
|
747
|
+
"PATCH",
|
|
748
|
+
"OPTIONS",
|
|
749
|
+
"HEAD"
|
|
750
|
+
];
|
|
751
|
+
const headerList = options.headers ?? ["Content-Type", "Authorization"];
|
|
752
|
+
const headersValue = Array.isArray(headerList) ? headerList.join(",") : headerList;
|
|
753
|
+
return async (c, next) => {
|
|
754
|
+
const set = (key, value) => {
|
|
755
|
+
c.res.headers.set(key, value);
|
|
756
|
+
};
|
|
757
|
+
set("Access-Control-Allow-Origin", Array.isArray(origin) ? origin.join(",") : origin);
|
|
758
|
+
set("Access-Control-Allow-Methods", methods.join(","));
|
|
759
|
+
set("Access-Control-Allow-Headers", headersValue);
|
|
760
|
+
if (options.credentials)
|
|
761
|
+
set("Access-Control-Allow-Credentials", "true");
|
|
762
|
+
if (c.req.method === "OPTIONS") {
|
|
763
|
+
return c.body(null, 204);
|
|
764
|
+
}
|
|
765
|
+
await next();
|
|
766
|
+
return;
|
|
767
|
+
};
|
|
768
|
+
}
|
|
769
|
+
function errorHandler() {
|
|
770
|
+
return async (c, next) => {
|
|
771
|
+
try {
|
|
772
|
+
await next();
|
|
773
|
+
} catch (err) {
|
|
774
|
+
const status = err?.status ?? 500;
|
|
775
|
+
const body = err?.body ?? {
|
|
776
|
+
error: err?.message ?? "Internal Server Error"
|
|
777
|
+
};
|
|
778
|
+
return c.json(body, status);
|
|
779
|
+
}
|
|
780
|
+
return;
|
|
781
|
+
};
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
// src/core/validation/validator.ts
|
|
785
|
+
function validateRequest(metadata2, input) {
|
|
786
|
+
if (!metadata2)
|
|
787
|
+
return input;
|
|
788
|
+
const result = {};
|
|
789
|
+
if (metadata2.body)
|
|
790
|
+
result.body = runSchema(metadata2.body, input.body, "body");
|
|
791
|
+
else
|
|
792
|
+
result.body = input.body;
|
|
793
|
+
if (metadata2.query)
|
|
794
|
+
result.query = runSchema(metadata2.query, input.query, "query");
|
|
795
|
+
else
|
|
796
|
+
result.query = input.query;
|
|
797
|
+
if (metadata2.params)
|
|
798
|
+
result.params = runSchema(metadata2.params, input.params, "params");
|
|
799
|
+
else
|
|
800
|
+
result.params = input.params;
|
|
801
|
+
if (metadata2.headers)
|
|
802
|
+
result.headers = runSchema(metadata2.headers, input.headers, "headers");
|
|
803
|
+
else
|
|
804
|
+
result.headers = input.headers;
|
|
805
|
+
return result;
|
|
806
|
+
}
|
|
807
|
+
function runSchema(schema, value, part) {
|
|
808
|
+
if (!isZodSchema(schema)) {
|
|
809
|
+
if (typeof schema === "function")
|
|
810
|
+
return schema(value);
|
|
811
|
+
throw new Error(`@Validate "${part}" must be a Zod schema or validator function. Got ${typeof schema}.`);
|
|
812
|
+
}
|
|
813
|
+
const parsed = schema.safeParse(value);
|
|
814
|
+
if (!parsed.success) {
|
|
815
|
+
throw new ValidationError(parsed.error);
|
|
816
|
+
}
|
|
817
|
+
return parsed.data;
|
|
818
|
+
}
|
|
819
|
+
function isZodSchema(value) {
|
|
820
|
+
return value !== null && typeof value === "object" && typeof value.safeParse === "function";
|
|
821
|
+
}
|
|
822
|
+
function formatValidationError(err) {
|
|
823
|
+
return {
|
|
824
|
+
status: err.status,
|
|
825
|
+
body: {
|
|
826
|
+
error: err.message,
|
|
827
|
+
issues: err.issues
|
|
828
|
+
}
|
|
829
|
+
};
|
|
830
|
+
}
|
|
831
|
+
var ValidationError;
|
|
832
|
+
var init_validator = __esm(() => {
|
|
833
|
+
ValidationError = class ValidationError extends Error {
|
|
834
|
+
status = 400;
|
|
835
|
+
issues;
|
|
836
|
+
constructor(zodError) {
|
|
837
|
+
super("Validation failed");
|
|
838
|
+
this.name = "ValidationError";
|
|
839
|
+
this.issues = zodError.issues;
|
|
840
|
+
}
|
|
841
|
+
};
|
|
842
|
+
});
|
|
843
|
+
|
|
844
|
+
// src/core/http/router.ts
|
|
845
|
+
import"reflect-metadata";
|
|
846
|
+
|
|
847
|
+
class NexusRouterImpl {
|
|
848
|
+
hono;
|
|
849
|
+
root;
|
|
850
|
+
#routeList = [];
|
|
851
|
+
constructor(hono, root) {
|
|
852
|
+
this.hono = hono;
|
|
853
|
+
this.root = root;
|
|
854
|
+
}
|
|
855
|
+
getHono() {
|
|
856
|
+
return this.hono;
|
|
857
|
+
}
|
|
858
|
+
getRoutes() {
|
|
859
|
+
return this.#routeList;
|
|
860
|
+
}
|
|
861
|
+
registerController(controller2, container2) {
|
|
862
|
+
if (!isController(controller2)) {
|
|
863
|
+
throw new Error(`Class "${controller2.name}" is missing the @Controller() decorator.`);
|
|
864
|
+
}
|
|
865
|
+
const { prefix } = getControllerMetadata(controller2);
|
|
866
|
+
const routes = getRoutes(controller2);
|
|
867
|
+
const resolvedContainer = container2 ?? this.resolveControllerContainer(controller2);
|
|
868
|
+
if (routes.length === 0) {
|
|
869
|
+
return;
|
|
870
|
+
}
|
|
871
|
+
for (const route of routes) {
|
|
872
|
+
const fullPath = this.joinPaths(prefix, route.path);
|
|
873
|
+
this.mountRoute(controller2, route, fullPath, resolvedContainer);
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
add(method, path, handler, methodName, container2) {
|
|
877
|
+
if (typeof handler === "function" && methodName && handler.prototype && isController(handler)) {
|
|
878
|
+
const controllerInstance = (container2 ?? this.root).resolve(handler);
|
|
879
|
+
const handlerFn = controllerInstance[methodName];
|
|
880
|
+
const fullPath = this.joinPaths(getControllerMetadata(handler).prefix, path);
|
|
881
|
+
const routes = getRoutes(handler);
|
|
882
|
+
const route = routes.find((r) => r.propertyKey === methodName);
|
|
883
|
+
if (!route) {
|
|
884
|
+
this.raw(method, fullPath, async (c) => handlerFn.call(controllerInstance, c));
|
|
885
|
+
return;
|
|
886
|
+
}
|
|
887
|
+
this.mountRoute(handler, { ...route, handler: handlerFn }, fullPath, container2 ?? this.root);
|
|
888
|
+
return;
|
|
889
|
+
}
|
|
890
|
+
this.raw(method, path, handler);
|
|
891
|
+
}
|
|
892
|
+
raw(method, path, handler) {
|
|
893
|
+
const fn = HTTP_METHOD_TO_HONO[method];
|
|
894
|
+
if (method === "HEAD") {
|
|
895
|
+
this.hono.on("HEAD", path, handler);
|
|
896
|
+
return;
|
|
897
|
+
}
|
|
898
|
+
this.hono[fn](path, handler);
|
|
899
|
+
}
|
|
900
|
+
mountRoute(controller2, route, fullPath, container2) {
|
|
901
|
+
const validation = getValidationMetadata(controller2, route.propertyKey);
|
|
902
|
+
const paramMeta = getParamMetadata(controller2.prototype, route.propertyKey);
|
|
903
|
+
this.#routeList.push({
|
|
904
|
+
method: route.method,
|
|
905
|
+
path: fullPath,
|
|
906
|
+
target: controller2.prototype,
|
|
907
|
+
propertyKey: route.propertyKey,
|
|
908
|
+
validation: validation ?? undefined
|
|
909
|
+
});
|
|
910
|
+
const honoHandler = async (c) => {
|
|
911
|
+
try {
|
|
912
|
+
const instance = container2.resolve(controller2);
|
|
913
|
+
const args = await this.buildArgs(c, paramMeta, validation);
|
|
914
|
+
const result = await Promise.resolve(route.handler.call(instance, ...args));
|
|
915
|
+
return await this.serialize(c, result);
|
|
916
|
+
} catch (err) {
|
|
917
|
+
return this.handleError(c, err);
|
|
918
|
+
}
|
|
919
|
+
};
|
|
920
|
+
const fn = HTTP_METHOD_TO_HONO[route.method];
|
|
921
|
+
if (route.method === "HEAD") {
|
|
922
|
+
this.hono.on("HEAD", fullPath, honoHandler);
|
|
923
|
+
return;
|
|
924
|
+
}
|
|
925
|
+
this.hono[fn](fullPath, honoHandler);
|
|
926
|
+
}
|
|
927
|
+
async buildArgs(c, params2, validation) {
|
|
928
|
+
let parsed;
|
|
929
|
+
const needsValidation = validation && (validation.body || validation.query || validation.params || validation.headers);
|
|
930
|
+
const hasBodyParam = params2.some((p) => p.type === PARAM_TYPES.BODY);
|
|
931
|
+
if (needsValidation || hasBodyParam) {
|
|
932
|
+
const bodyPromise = needsValidation && validation.body ? safeReadBody(c) : hasBodyParam ? safeReadBody(c) : Promise.resolve(undefined);
|
|
933
|
+
const [body] = await Promise.all([bodyPromise]);
|
|
934
|
+
parsed = validateRequest(validation ?? {}, {
|
|
935
|
+
body,
|
|
936
|
+
query: c.req.query(),
|
|
937
|
+
params: c.req.param(),
|
|
938
|
+
headers: c.req.header()
|
|
939
|
+
});
|
|
940
|
+
}
|
|
941
|
+
const positional = [];
|
|
942
|
+
for (const param of params2) {
|
|
943
|
+
positional[param.index] = this.resolveParam(c, param, parsed);
|
|
944
|
+
}
|
|
945
|
+
return positional;
|
|
946
|
+
}
|
|
947
|
+
resolveParam(c, param, parsed) {
|
|
948
|
+
switch (param.type) {
|
|
949
|
+
case PARAM_TYPES.REQUEST:
|
|
950
|
+
case PARAM_TYPES.CTX:
|
|
951
|
+
return c;
|
|
952
|
+
case PARAM_TYPES.RESPONSE:
|
|
953
|
+
return c.res;
|
|
954
|
+
case PARAM_TYPES.NEXT:
|
|
955
|
+
return async () => {};
|
|
956
|
+
case PARAM_TYPES.BODY:
|
|
957
|
+
if (parsed)
|
|
958
|
+
return parsed.body;
|
|
959
|
+
return param.name ? safeReadBody(c)?.[param.name] : safeReadBody(c);
|
|
960
|
+
case PARAM_TYPES.QUERY:
|
|
961
|
+
if (parsed) {
|
|
962
|
+
if (param.name)
|
|
963
|
+
return parsed.query?.[param.name];
|
|
964
|
+
return parsed.query;
|
|
965
|
+
}
|
|
966
|
+
return param.name ? c.req.query(param.name) : c.req.query();
|
|
967
|
+
case PARAM_TYPES.PARAM:
|
|
968
|
+
if (parsed) {
|
|
969
|
+
if (param.name)
|
|
970
|
+
return parsed.params?.[param.name];
|
|
971
|
+
return parsed.params;
|
|
972
|
+
}
|
|
973
|
+
return param.name ? c.req.param(param.name) : c.req.param();
|
|
974
|
+
case PARAM_TYPES.HEADERS:
|
|
975
|
+
if (parsed) {
|
|
976
|
+
if (param.name)
|
|
977
|
+
return parsed.headers?.[param.name] ?? c.req.header(param.name);
|
|
978
|
+
return parsed.headers ?? c.req.header();
|
|
979
|
+
}
|
|
980
|
+
return param.name ? c.req.header(param.name) : c.req.header();
|
|
981
|
+
case PARAM_TYPES.USER:
|
|
982
|
+
return c.var?.nexus?.user;
|
|
983
|
+
default:
|
|
984
|
+
return;
|
|
985
|
+
}
|
|
986
|
+
}
|
|
987
|
+
async serialize(c, value) {
|
|
988
|
+
if (value === undefined || value === null) {
|
|
989
|
+
return c.body(null, 204);
|
|
990
|
+
}
|
|
991
|
+
if (value instanceof Response) {
|
|
992
|
+
const headers = {};
|
|
993
|
+
value.headers.forEach((v, k) => {
|
|
994
|
+
headers[k] = v;
|
|
995
|
+
});
|
|
996
|
+
const text = await value.text();
|
|
997
|
+
return c.body(text, value.status, headers);
|
|
998
|
+
}
|
|
999
|
+
if (this.isInertiaResponse(value)) {
|
|
1000
|
+
return this.serializeInertia(c, value);
|
|
1001
|
+
}
|
|
1002
|
+
if (typeof value === "object") {
|
|
1003
|
+
if ("view" in value) {
|
|
1004
|
+
return renderViewResponse(c, value);
|
|
1005
|
+
}
|
|
1006
|
+
if ("redirect" in value) {
|
|
1007
|
+
return c.redirect(value.redirect, value.status ?? 302);
|
|
1008
|
+
}
|
|
1009
|
+
if ("status" in value && "body" in value) {
|
|
1010
|
+
return c.json(value.body, value.status);
|
|
1011
|
+
}
|
|
1012
|
+
return c.json(value);
|
|
1013
|
+
}
|
|
1014
|
+
if (typeof value === "string") {
|
|
1015
|
+
return c.html(value);
|
|
1016
|
+
}
|
|
1017
|
+
return c.json(value);
|
|
1018
|
+
}
|
|
1019
|
+
isInertiaResponse(value) {
|
|
1020
|
+
return value !== null && typeof value === "object" && value["__nexus_inertia_response__"] === true && typeof value.toResponse === "function";
|
|
1021
|
+
}
|
|
1022
|
+
async serializeInertia(c, value) {
|
|
1023
|
+
return await value.toResponse(c);
|
|
1024
|
+
}
|
|
1025
|
+
handleError(c, err) {
|
|
1026
|
+
if (err instanceof ValidationError) {
|
|
1027
|
+
const { status, body } = formatValidationError(err);
|
|
1028
|
+
return c.json(body, status);
|
|
1029
|
+
}
|
|
1030
|
+
throw err;
|
|
1031
|
+
}
|
|
1032
|
+
resolveControllerContainer(controller2) {
|
|
1033
|
+
for (const [, container2] of this.root.moduleContainers ?? new Map) {
|
|
1034
|
+
if (container2.has?.(controller2))
|
|
1035
|
+
return container2;
|
|
1036
|
+
}
|
|
1037
|
+
return this.root;
|
|
1038
|
+
}
|
|
1039
|
+
joinPaths(prefix, path) {
|
|
1040
|
+
if (!prefix || prefix === "/")
|
|
1041
|
+
return path || "/";
|
|
1042
|
+
if (!path || path === "/")
|
|
1043
|
+
return prefix;
|
|
1044
|
+
if (prefix.endsWith("/"))
|
|
1045
|
+
return `${prefix}${path}`;
|
|
1046
|
+
return `${prefix}${path}`;
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
async function renderViewResponse(c, value) {
|
|
1050
|
+
const { renderView: renderView2 } = await Promise.resolve().then(() => (init_view_engine(), exports_view_engine));
|
|
1051
|
+
const html = await renderView2(value.view, value.data ?? {});
|
|
1052
|
+
return c.html(html, value.status ?? 200);
|
|
1053
|
+
}
|
|
1054
|
+
async function safeReadBody(c) {
|
|
1055
|
+
try {
|
|
1056
|
+
const ct = c.req.header("content-type") ?? "";
|
|
1057
|
+
if (ct.includes("application/json")) {
|
|
1058
|
+
return await c.req.json();
|
|
1059
|
+
}
|
|
1060
|
+
if (ct.includes("application/x-www-form-urlencoded") || ct.includes("multipart/form-data")) {
|
|
1061
|
+
return await c.req.parseBody();
|
|
1062
|
+
}
|
|
1063
|
+
return await c.req.text();
|
|
1064
|
+
} catch {
|
|
1065
|
+
return;
|
|
1066
|
+
}
|
|
1067
|
+
}
|
|
1068
|
+
function createRouter(hono, container2) {
|
|
1069
|
+
return new NexusRouterImpl(hono, container2);
|
|
1070
|
+
}
|
|
1071
|
+
var HTTP_METHOD_TO_HONO;
|
|
1072
|
+
var init_router = __esm(() => {
|
|
1073
|
+
init_constants();
|
|
1074
|
+
init_controller();
|
|
1075
|
+
init_http_methods();
|
|
1076
|
+
init_params();
|
|
1077
|
+
init_validate();
|
|
1078
|
+
init_validator();
|
|
1079
|
+
HTTP_METHOD_TO_HONO = {
|
|
1080
|
+
GET: "get",
|
|
1081
|
+
POST: "post",
|
|
1082
|
+
PUT: "put",
|
|
1083
|
+
DELETE: "delete",
|
|
1084
|
+
PATCH: "patch",
|
|
1085
|
+
OPTIONS: "options",
|
|
1086
|
+
HEAD: "head"
|
|
1087
|
+
};
|
|
1088
|
+
});
|
|
1089
|
+
|
|
1090
|
+
// src/core/runtime/bun.ts
|
|
1091
|
+
var exports_bun = {};
|
|
1092
|
+
__export(exports_bun, {
|
|
1093
|
+
bunAdapter: () => bunAdapter
|
|
1094
|
+
});
|
|
1095
|
+
function bunAdapter(app, port = 3000) {
|
|
1096
|
+
const Bun = globalThis.Bun;
|
|
1097
|
+
if (!Bun || typeof Bun.serve !== "function") {
|
|
1098
|
+
throw new Error("bunAdapter() requires the Bun runtime.");
|
|
1099
|
+
}
|
|
1100
|
+
const server = Bun.serve({
|
|
1101
|
+
port,
|
|
1102
|
+
fetch: (req) => app.fetch(req),
|
|
1103
|
+
error: (err) => {
|
|
1104
|
+
console.error("[bun-adapter] error:", err);
|
|
1105
|
+
return new Response("Internal Server Error", { status: 500 });
|
|
1106
|
+
}
|
|
1107
|
+
});
|
|
1108
|
+
console.log(`[nexus] Listening on http://localhost:${server.port}`);
|
|
1109
|
+
return server;
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
// src/core/runtime/node.ts
|
|
1113
|
+
var exports_node = {};
|
|
1114
|
+
__export(exports_node, {
|
|
1115
|
+
nodeAdapter: () => nodeAdapter
|
|
1116
|
+
});
|
|
1117
|
+
import { createServer } from "http";
|
|
1118
|
+
function nodeAdapter(app, port = 3000) {
|
|
1119
|
+
const server = createServer(async (req, res) => {
|
|
1120
|
+
try {
|
|
1121
|
+
const url = `http://${req.headers.host}${req.url}`;
|
|
1122
|
+
const headers = new Headers;
|
|
1123
|
+
for (const [k, v] of Object.entries(req.headers)) {
|
|
1124
|
+
if (v == null)
|
|
1125
|
+
continue;
|
|
1126
|
+
if (Array.isArray(v))
|
|
1127
|
+
headers.set(k, v.join(", "));
|
|
1128
|
+
else
|
|
1129
|
+
headers.set(k, String(v));
|
|
1130
|
+
}
|
|
1131
|
+
const method = req.method ?? "GET";
|
|
1132
|
+
const init = { method, headers };
|
|
1133
|
+
if (method !== "GET" && method !== "HEAD") {
|
|
1134
|
+
const bodyBuf = await new Promise((resolve, reject) => {
|
|
1135
|
+
const chunks = [];
|
|
1136
|
+
req.on("data", (c) => chunks.push(c));
|
|
1137
|
+
req.on("end", () => resolve(Buffer.concat(chunks)));
|
|
1138
|
+
req.on("error", reject);
|
|
1139
|
+
});
|
|
1140
|
+
init.body = new Uint8Array(bodyBuf.buffer, bodyBuf.byteOffset, bodyBuf.byteLength);
|
|
1141
|
+
init.duplex = "half";
|
|
1142
|
+
}
|
|
1143
|
+
const honoRes = await app.fetch(new Request(url, init));
|
|
1144
|
+
res.statusCode = honoRes.status;
|
|
1145
|
+
honoRes.headers.forEach((v, k) => res.setHeader(k, v));
|
|
1146
|
+
const buf = Buffer.from(await honoRes.arrayBuffer());
|
|
1147
|
+
res.end(buf);
|
|
1148
|
+
} catch (err) {
|
|
1149
|
+
console.error("[node-adapter] error:", err);
|
|
1150
|
+
res.statusCode = 500;
|
|
1151
|
+
res.end("Internal Server Error");
|
|
1152
|
+
}
|
|
1153
|
+
});
|
|
1154
|
+
server.listen(port, () => {
|
|
1155
|
+
console.log(`[nexus] Listening on http://localhost:${port}`);
|
|
1156
|
+
});
|
|
1157
|
+
return server;
|
|
1158
|
+
}
|
|
1159
|
+
var init_node = () => {};
|
|
1160
|
+
|
|
1161
|
+
// src/core/runtime/cloudflare.ts
|
|
1162
|
+
var exports_cloudflare = {};
|
|
1163
|
+
__export(exports_cloudflare, {
|
|
1164
|
+
cloudflareAdapter: () => cloudflareAdapter
|
|
1165
|
+
});
|
|
1166
|
+
function cloudflareAdapter(app) {
|
|
1167
|
+
return {
|
|
1168
|
+
fetch: (req, env, ctx) => app.fetch(req, env, ctx)
|
|
1169
|
+
};
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1172
|
+
// src/core/http/server.ts
|
|
1173
|
+
import"reflect-metadata";
|
|
1174
|
+
import { Hono } from "hono";
|
|
1175
|
+
|
|
1176
|
+
class NexusServer {
|
|
1177
|
+
app;
|
|
1178
|
+
container;
|
|
1179
|
+
router;
|
|
1180
|
+
options;
|
|
1181
|
+
constructor(container2, options = {}) {
|
|
1182
|
+
this.container = container2;
|
|
1183
|
+
this.app = new Hono;
|
|
1184
|
+
this.router = createRouter(this.app, container2);
|
|
1185
|
+
this.options = {
|
|
1186
|
+
logging: options.logging ?? true,
|
|
1187
|
+
errorHandler: options.errorHandler ?? true,
|
|
1188
|
+
port: options.port ?? 3000
|
|
1189
|
+
};
|
|
1190
|
+
this.bootstrap();
|
|
1191
|
+
}
|
|
1192
|
+
bootstrap() {
|
|
1193
|
+
const { requestScopeMiddleware: requestScopeMiddleware2 } = (init_request_middleware(), __toCommonJS(exports_request_middleware));
|
|
1194
|
+
this.app.use("*", requestScopeMiddleware2(this.container));
|
|
1195
|
+
if (this.options.errorHandler)
|
|
1196
|
+
this.app.use("*", errorHandler());
|
|
1197
|
+
if (this.options.logging)
|
|
1198
|
+
this.app.use("*", logger());
|
|
1199
|
+
}
|
|
1200
|
+
use(...handlers) {
|
|
1201
|
+
for (const h of handlers)
|
|
1202
|
+
this.app.use("*", h);
|
|
1203
|
+
return this;
|
|
1204
|
+
}
|
|
1205
|
+
setPort(port) {
|
|
1206
|
+
this.options.port = port;
|
|
1207
|
+
return this;
|
|
1208
|
+
}
|
|
1209
|
+
async start() {
|
|
1210
|
+
const runtime = await detectRuntime();
|
|
1211
|
+
if (runtime === "bun") {
|
|
1212
|
+
const { bunAdapter: bunAdapter2 } = await Promise.resolve().then(() => exports_bun);
|
|
1213
|
+
return bunAdapter2(this.app, this.options.port);
|
|
1214
|
+
}
|
|
1215
|
+
if (runtime === "node") {
|
|
1216
|
+
const { nodeAdapter: nodeAdapter2 } = await Promise.resolve().then(() => (init_node(), exports_node));
|
|
1217
|
+
return nodeAdapter2(this.app, this.options.port);
|
|
1218
|
+
}
|
|
1219
|
+
if (runtime === "cloudflare") {
|
|
1220
|
+
const { cloudflareAdapter: cloudflareAdapter2 } = await Promise.resolve().then(() => exports_cloudflare);
|
|
1221
|
+
return cloudflareAdapter2(this.app);
|
|
1222
|
+
}
|
|
1223
|
+
throw new Error("No supported runtime detected (Bun, Node, or Cloudflare Workers).");
|
|
1224
|
+
}
|
|
1225
|
+
get fetch() {
|
|
1226
|
+
return async (req, env, ctx) => this.app.fetch(req, env, ctx);
|
|
1227
|
+
}
|
|
1228
|
+
}
|
|
1229
|
+
async function detectRuntime() {
|
|
1230
|
+
if (typeof globalThis.Bun !== "undefined")
|
|
1231
|
+
return "bun";
|
|
1232
|
+
if (typeof process !== "undefined" && process.versions?.node)
|
|
1233
|
+
return "node";
|
|
1234
|
+
return "cloudflare";
|
|
1235
|
+
}
|
|
1236
|
+
var init_server = __esm(() => {
|
|
1237
|
+
init_router();
|
|
1238
|
+
});
|
|
1239
|
+
// src/view/inertia/helpers.ts
|
|
1240
|
+
class DeferredProp {
|
|
1241
|
+
callback;
|
|
1242
|
+
group;
|
|
1243
|
+
__inertiaKind = "deferred";
|
|
1244
|
+
constructor(callback, group = "default") {
|
|
1245
|
+
this.callback = callback;
|
|
1246
|
+
this.group = group;
|
|
1247
|
+
}
|
|
1248
|
+
resolve() {
|
|
1249
|
+
return this.callback();
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1252
|
+
function isInertiaHelper(value) {
|
|
1253
|
+
return value !== null && typeof value === "object" && typeof value.__inertiaKind === "string" && typeof value.resolve === "function";
|
|
1254
|
+
}
|
|
1255
|
+
|
|
1256
|
+
// src/view/inertia/default-ssr.ts
|
|
1257
|
+
async function renderDefaultRoot(adapter, ssr, component, page, c) {
|
|
1258
|
+
const title = adapter.title();
|
|
1259
|
+
const headTags = [];
|
|
1260
|
+
let bodyHtml = "";
|
|
1261
|
+
if (ssr) {
|
|
1262
|
+
try {
|
|
1263
|
+
const result = await ssr.render(component, page.props);
|
|
1264
|
+
bodyHtml = result.html ?? "";
|
|
1265
|
+
if (result.head)
|
|
1266
|
+
headTags.push(...result.head);
|
|
1267
|
+
if (result.data) {
|
|
1268
|
+
Object.assign(page, result.data);
|
|
1269
|
+
}
|
|
1270
|
+
} catch (err) {
|
|
1271
|
+
console.error(`[inertia] SSR render failed for "${component}":`, err);
|
|
1272
|
+
}
|
|
1273
|
+
}
|
|
1274
|
+
if (ssr?.head) {
|
|
1275
|
+
try {
|
|
1276
|
+
const extra = await ssr.head();
|
|
1277
|
+
headTags.push(...extra);
|
|
1278
|
+
} catch {}
|
|
1279
|
+
}
|
|
1280
|
+
const html = `<!DOCTYPE html>
|
|
1281
|
+
<html lang="en">
|
|
1282
|
+
<head>
|
|
1283
|
+
<meta charset="utf-8">
|
|
1284
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
1285
|
+
<title>${escapeHtml(title)}</title>
|
|
1286
|
+
${headTags.join(`
|
|
1287
|
+
`)}
|
|
1288
|
+
</head>
|
|
1289
|
+
<body>
|
|
1290
|
+
<div id="app" data-page="${escapeAttr(JSON.stringify(page))}">${bodyHtml}</div>
|
|
1291
|
+
</body>
|
|
1292
|
+
</html>`;
|
|
1293
|
+
return c.html(html, 200, {
|
|
1294
|
+
Vary: "X-Inertia"
|
|
1295
|
+
});
|
|
1296
|
+
}
|
|
1297
|
+
function escapeHtml(s) {
|
|
1298
|
+
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
1299
|
+
}
|
|
1300
|
+
function escapeAttr(s) {
|
|
1301
|
+
return escapeHtml(s).replace(/'/g, "'");
|
|
1302
|
+
}
|
|
1303
|
+
|
|
1304
|
+
// src/view/inertia/inertia-response.ts
|
|
1305
|
+
var INERTIA_RESPONSE_TAG = "__nexus_inertia_response__", InertiaResponse;
|
|
1306
|
+
var init_inertia_response = __esm(() => {
|
|
1307
|
+
InertiaResponse = class InertiaResponse {
|
|
1308
|
+
adapter;
|
|
1309
|
+
component;
|
|
1310
|
+
props;
|
|
1311
|
+
[INERTIA_RESPONSE_TAG] = true;
|
|
1312
|
+
options = {};
|
|
1313
|
+
lazyCache = new Map;
|
|
1314
|
+
constructor(adapter, component, props) {
|
|
1315
|
+
this.adapter = adapter;
|
|
1316
|
+
this.component = component;
|
|
1317
|
+
this.props = props;
|
|
1318
|
+
}
|
|
1319
|
+
withEncryptHistory(encrypt = true) {
|
|
1320
|
+
this.options.encryptHistory = encrypt;
|
|
1321
|
+
return this;
|
|
1322
|
+
}
|
|
1323
|
+
withClearHistory(clear = true) {
|
|
1324
|
+
this.options.clearHistory = clear;
|
|
1325
|
+
return this;
|
|
1326
|
+
}
|
|
1327
|
+
async toResponse(c) {
|
|
1328
|
+
const url = c.req.url;
|
|
1329
|
+
const info = this.parseInertiaRequest(c);
|
|
1330
|
+
if (info.isInertia && info.clientVersion !== undefined) {
|
|
1331
|
+
const serverVersion = await this.adapter.resolveVersion();
|
|
1332
|
+
if (serverVersion !== undefined && info.clientVersion !== serverVersion) {
|
|
1333
|
+
return this.assetVersionMismatch(c.req.url);
|
|
1334
|
+
}
|
|
1335
|
+
}
|
|
1336
|
+
const page = await this.buildPage(url, info, c);
|
|
1337
|
+
if (info.isInertia) {
|
|
1338
|
+
return this.jsonResponse(page);
|
|
1339
|
+
}
|
|
1340
|
+
return this.htmlResponse(c, page);
|
|
1341
|
+
}
|
|
1342
|
+
async buildPage(url, info, c) {
|
|
1343
|
+
const shared = await this.adapter.getSharedFor(c);
|
|
1344
|
+
const allProps = { ...shared, ...this.props };
|
|
1345
|
+
const resolved = {};
|
|
1346
|
+
const deferredProps = {};
|
|
1347
|
+
const mergeProps = [];
|
|
1348
|
+
const deepMergeProps = [];
|
|
1349
|
+
const matchPropsOn = [];
|
|
1350
|
+
for (const [key, value] of Object.entries(allProps)) {
|
|
1351
|
+
if (isInertiaHelper(value)) {
|
|
1352
|
+
const helper = value;
|
|
1353
|
+
switch (helper.__inertiaKind) {
|
|
1354
|
+
case "deferred": {
|
|
1355
|
+
const d = helper;
|
|
1356
|
+
const group = d.group ?? "default";
|
|
1357
|
+
(deferredProps[group] ??= []).push(key);
|
|
1358
|
+
resolved[key] = null;
|
|
1359
|
+
break;
|
|
1360
|
+
}
|
|
1361
|
+
case "always": {
|
|
1362
|
+
resolved[key] = await Promise.resolve(helper.resolve());
|
|
1363
|
+
break;
|
|
1364
|
+
}
|
|
1365
|
+
case "optional": {
|
|
1366
|
+
const v = await Promise.resolve(helper.resolve());
|
|
1367
|
+
const o = helper;
|
|
1368
|
+
const threshold = o.threshold ?? 0;
|
|
1369
|
+
if (Array.isArray(v) && v.length <= threshold) {
|
|
1370
|
+
if (this.isPartialReload(info)) {
|
|
1371
|
+
continue;
|
|
1372
|
+
}
|
|
1373
|
+
}
|
|
1374
|
+
resolved[key] = v;
|
|
1375
|
+
break;
|
|
1376
|
+
}
|
|
1377
|
+
case "merge": {
|
|
1378
|
+
const v = await Promise.resolve(helper.resolve());
|
|
1379
|
+
mergeProps.push(key);
|
|
1380
|
+
const m = helper;
|
|
1381
|
+
if (m.matchPropsOn && m.matchPropsOn.length > 0) {
|
|
1382
|
+
deepMergeProps.push(key);
|
|
1383
|
+
matchPropsOn.push(m.matchPropsOn);
|
|
1384
|
+
}
|
|
1385
|
+
resolved[key] = v;
|
|
1386
|
+
break;
|
|
1387
|
+
}
|
|
1388
|
+
case "deepMerge": {
|
|
1389
|
+
resolved[key] = await Promise.resolve(helper.resolve());
|
|
1390
|
+
mergeProps.push(key);
|
|
1391
|
+
deepMergeProps.push(key);
|
|
1392
|
+
break;
|
|
1393
|
+
}
|
|
1394
|
+
case "once": {
|
|
1395
|
+
if (info.isInertia) {
|
|
1396
|
+
continue;
|
|
1397
|
+
}
|
|
1398
|
+
resolved[key] = await Promise.resolve(helper.resolve());
|
|
1399
|
+
break;
|
|
1400
|
+
}
|
|
1401
|
+
case "lazy": {
|
|
1402
|
+
const lz = helper;
|
|
1403
|
+
const tag = lz.tag;
|
|
1404
|
+
if (this.lazyCache.has(tag)) {
|
|
1405
|
+
resolved[key] = this.lazyCache.get(tag);
|
|
1406
|
+
} else {
|
|
1407
|
+
const v = await Promise.resolve(helper.resolve());
|
|
1408
|
+
this.lazyCache.set(tag, v);
|
|
1409
|
+
resolved[key] = v;
|
|
1410
|
+
}
|
|
1411
|
+
break;
|
|
1412
|
+
}
|
|
1413
|
+
default: {
|
|
1414
|
+
resolved[key] = await Promise.resolve(helper.resolve());
|
|
1415
|
+
}
|
|
1416
|
+
}
|
|
1417
|
+
} else {
|
|
1418
|
+
resolved[key] = value;
|
|
1419
|
+
}
|
|
1420
|
+
}
|
|
1421
|
+
const sharedKeys = new Set(Object.keys(shared));
|
|
1422
|
+
this.applyPartialFilter(resolved, info, sharedKeys);
|
|
1423
|
+
const version = await this.adapter.resolveVersion();
|
|
1424
|
+
return {
|
|
1425
|
+
component: this.component,
|
|
1426
|
+
props: resolved,
|
|
1427
|
+
url,
|
|
1428
|
+
version: version ?? "",
|
|
1429
|
+
encryptHistory: this.options.encryptHistory ?? this.adapter.encryptHistory(),
|
|
1430
|
+
clearHistory: this.options.clearHistory ?? false,
|
|
1431
|
+
deferredProps: Object.keys(deferredProps).length > 0 ? deferredProps : undefined,
|
|
1432
|
+
mergeProps: mergeProps.length > 0 ? mergeProps : undefined,
|
|
1433
|
+
deepMergeProps: deepMergeProps.length > 0 ? deepMergeProps : undefined,
|
|
1434
|
+
matchPropsOn: matchPropsOn.length > 0 ? matchPropsOn : undefined,
|
|
1435
|
+
scrollRegions: {}
|
|
1436
|
+
};
|
|
1437
|
+
}
|
|
1438
|
+
applyPartialFilter(resolved, info, sharedKeys) {
|
|
1439
|
+
if (!this.isPartialReload(info))
|
|
1440
|
+
return;
|
|
1441
|
+
if (info.partialOnly) {
|
|
1442
|
+
for (const key of Object.keys(resolved)) {
|
|
1443
|
+
const isAlways = sharedKeys.has(key);
|
|
1444
|
+
if (!info.partialOnly.includes(key) && !isAlways) {
|
|
1445
|
+
delete resolved[key];
|
|
1446
|
+
}
|
|
1447
|
+
}
|
|
1448
|
+
}
|
|
1449
|
+
if (info.partialExcept) {
|
|
1450
|
+
for (const key of Object.keys(resolved)) {
|
|
1451
|
+
const isAlways = sharedKeys.has(key);
|
|
1452
|
+
if (info.partialExcept.includes(key) && !isAlways) {
|
|
1453
|
+
delete resolved[key];
|
|
1454
|
+
}
|
|
1455
|
+
}
|
|
1456
|
+
}
|
|
1457
|
+
}
|
|
1458
|
+
isPartialReload(info) {
|
|
1459
|
+
return info.isInertia && (!!info.partialOnly || !!info.partialExcept);
|
|
1460
|
+
}
|
|
1461
|
+
parseInertiaRequest(c) {
|
|
1462
|
+
const isInertia = c.req.header("x-inertia") === "true";
|
|
1463
|
+
const partialOnlyHeader = c.req.header("x-inertia-partial-data");
|
|
1464
|
+
const partialExceptHeader = c.req.header("x-inertia-partial-except");
|
|
1465
|
+
const resetHeader = c.req.header("x-inertia-reset");
|
|
1466
|
+
return {
|
|
1467
|
+
isInertia,
|
|
1468
|
+
clientVersion: c.req.header("x-inertia-version") ?? undefined,
|
|
1469
|
+
partialComponent: c.req.header("x-inertia-partial-component") ?? undefined,
|
|
1470
|
+
partialOnly: this.csv(partialOnlyHeader),
|
|
1471
|
+
partialExcept: this.csv(partialExceptHeader),
|
|
1472
|
+
reset: this.csv(resetHeader),
|
|
1473
|
+
isHardReload: c.req.header("x-inertia-hard-reload") === "true"
|
|
1474
|
+
};
|
|
1475
|
+
}
|
|
1476
|
+
csv(value) {
|
|
1477
|
+
if (!value)
|
|
1478
|
+
return;
|
|
1479
|
+
const parts = value.split(",").map((s) => s.trim()).filter(Boolean);
|
|
1480
|
+
return parts.length > 0 ? parts : undefined;
|
|
1481
|
+
}
|
|
1482
|
+
jsonResponse(page) {
|
|
1483
|
+
return new Response(JSON.stringify(page), {
|
|
1484
|
+
status: 200,
|
|
1485
|
+
headers: {
|
|
1486
|
+
"Content-Type": "application/json",
|
|
1487
|
+
Vary: "X-Inertia",
|
|
1488
|
+
"X-Inertia": "true"
|
|
1489
|
+
}
|
|
1490
|
+
});
|
|
1491
|
+
}
|
|
1492
|
+
htmlResponse(c, page) {
|
|
1493
|
+
const ssr = this.adapter.ssr();
|
|
1494
|
+
return renderDefaultRoot(this.adapter, ssr ?? null, this.component, page, c);
|
|
1495
|
+
}
|
|
1496
|
+
assetVersionMismatch(url) {
|
|
1497
|
+
return new Response(null, {
|
|
1498
|
+
status: 409,
|
|
1499
|
+
headers: {
|
|
1500
|
+
"X-Inertia-Location": url
|
|
1501
|
+
}
|
|
1502
|
+
});
|
|
1503
|
+
}
|
|
1504
|
+
};
|
|
1505
|
+
});
|
|
1506
|
+
|
|
1507
|
+
// src/view/inertia/form-helper.ts
|
|
1508
|
+
class InertiaFormBuilder {
|
|
1509
|
+
adapter;
|
|
1510
|
+
component;
|
|
1511
|
+
props;
|
|
1512
|
+
errorMap = {};
|
|
1513
|
+
errorBagName;
|
|
1514
|
+
constructor(adapter, component, initialProps = {}) {
|
|
1515
|
+
this.adapter = adapter;
|
|
1516
|
+
this.component = component;
|
|
1517
|
+
this.props = { ...initialProps };
|
|
1518
|
+
}
|
|
1519
|
+
withProps(extra) {
|
|
1520
|
+
Object.assign(this.props, extra);
|
|
1521
|
+
return this;
|
|
1522
|
+
}
|
|
1523
|
+
with(key, value) {
|
|
1524
|
+
this.props[key] = value;
|
|
1525
|
+
return this;
|
|
1526
|
+
}
|
|
1527
|
+
withErrors(errors) {
|
|
1528
|
+
for (const [field, message] of Object.entries(errors)) {
|
|
1529
|
+
const list = Array.isArray(message) ? message : [message];
|
|
1530
|
+
this.errorMap[field] = [...this.errorMap[field] ?? [], ...list];
|
|
1531
|
+
}
|
|
1532
|
+
return this;
|
|
1533
|
+
}
|
|
1534
|
+
withError(field, message) {
|
|
1535
|
+
(this.errorMap[field] ??= []).push(message);
|
|
1536
|
+
return this;
|
|
1537
|
+
}
|
|
1538
|
+
withErrorBag(name) {
|
|
1539
|
+
this.errorBagName = name;
|
|
1540
|
+
return this;
|
|
1541
|
+
}
|
|
1542
|
+
withValues(values) {
|
|
1543
|
+
this.props.values = values;
|
|
1544
|
+
return this;
|
|
1545
|
+
}
|
|
1546
|
+
render() {
|
|
1547
|
+
if (Object.keys(this.errorMap).length > 0) {
|
|
1548
|
+
this.props.errors = { ...this.errorMap };
|
|
1549
|
+
}
|
|
1550
|
+
if (this.errorBagName) {
|
|
1551
|
+
this.props.errorBag = this.errorBagName;
|
|
1552
|
+
}
|
|
1553
|
+
return this.adapter.render(this.component, this.props);
|
|
1554
|
+
}
|
|
1555
|
+
redirect(url) {
|
|
1556
|
+
return new Response(null, {
|
|
1557
|
+
status: 303,
|
|
1558
|
+
headers: { Location: url }
|
|
1559
|
+
});
|
|
1560
|
+
}
|
|
1561
|
+
back(to) {
|
|
1562
|
+
return new Response(null, {
|
|
1563
|
+
status: 303,
|
|
1564
|
+
headers: { Location: to ?? "back" }
|
|
1565
|
+
});
|
|
1566
|
+
}
|
|
1567
|
+
getErrors() {
|
|
1568
|
+
return { ...this.errorMap };
|
|
1569
|
+
}
|
|
1570
|
+
getProps() {
|
|
1571
|
+
return { ...this.props };
|
|
1572
|
+
}
|
|
1573
|
+
}
|
|
1574
|
+
|
|
1575
|
+
// src/view/inertia/form-middleware.ts
|
|
1576
|
+
var FORM_METHODS;
|
|
1577
|
+
var init_form_middleware = __esm(() => {
|
|
1578
|
+
FORM_METHODS = new Set(["POST", "PUT", "PATCH", "DELETE"]);
|
|
1579
|
+
});
|
|
1580
|
+
|
|
1581
|
+
// src/view/inertia/inertia-adapter.ts
|
|
1582
|
+
import"reflect-metadata";
|
|
1583
|
+
var INERTIA_TOKEN, Inertia;
|
|
1584
|
+
var init_inertia_adapter = __esm(() => {
|
|
1585
|
+
init_inertia_response();
|
|
1586
|
+
INERTIA_TOKEN = Symbol.for("nexus:Inertia");
|
|
1587
|
+
Inertia = class Inertia {
|
|
1588
|
+
config;
|
|
1589
|
+
shared = {};
|
|
1590
|
+
constructor(config = {}) {
|
|
1591
|
+
this.config = {
|
|
1592
|
+
encryptHistory: false,
|
|
1593
|
+
...config
|
|
1594
|
+
};
|
|
1595
|
+
}
|
|
1596
|
+
render(component, propsOrDeferred, maybeProps) {
|
|
1597
|
+
const { component: comp, props } = this.normalizeRenderArgs(component, propsOrDeferred, maybeProps);
|
|
1598
|
+
return new InertiaResponse(this, comp, props);
|
|
1599
|
+
}
|
|
1600
|
+
location(url) {
|
|
1601
|
+
return new Response(null, {
|
|
1602
|
+
status: 409,
|
|
1603
|
+
headers: {
|
|
1604
|
+
"X-Inertia-Location": url
|
|
1605
|
+
}
|
|
1606
|
+
});
|
|
1607
|
+
}
|
|
1608
|
+
redirect(url, status = 302) {
|
|
1609
|
+
return new Response(null, {
|
|
1610
|
+
status,
|
|
1611
|
+
headers: { Location: url }
|
|
1612
|
+
});
|
|
1613
|
+
}
|
|
1614
|
+
back() {
|
|
1615
|
+
return new Response(null, {
|
|
1616
|
+
status: 302,
|
|
1617
|
+
headers: { Location: "back" }
|
|
1618
|
+
});
|
|
1619
|
+
}
|
|
1620
|
+
form(component, initialProps = {}) {
|
|
1621
|
+
return new InertiaFormBuilder(this, component, initialProps);
|
|
1622
|
+
}
|
|
1623
|
+
setVersion(version) {
|
|
1624
|
+
this.config.version = version;
|
|
1625
|
+
return this;
|
|
1626
|
+
}
|
|
1627
|
+
setSsrAdapter(adapter) {
|
|
1628
|
+
this.config.ssr = adapter ?? undefined;
|
|
1629
|
+
return this;
|
|
1630
|
+
}
|
|
1631
|
+
setTitle(title) {
|
|
1632
|
+
this.config.title = title;
|
|
1633
|
+
return this;
|
|
1634
|
+
}
|
|
1635
|
+
setEncryptHistory(encrypt = true) {
|
|
1636
|
+
this.config.encryptHistory = encrypt;
|
|
1637
|
+
return this;
|
|
1638
|
+
}
|
|
1639
|
+
setSharedProps(shared) {
|
|
1640
|
+
this.config.sharedProps = shared;
|
|
1641
|
+
return this;
|
|
1642
|
+
}
|
|
1643
|
+
share(key, value) {
|
|
1644
|
+
if (typeof key === "string") {
|
|
1645
|
+
this.shared[key] = value;
|
|
1646
|
+
} else if (key && typeof key === "object") {
|
|
1647
|
+
Object.assign(this.shared, key);
|
|
1648
|
+
}
|
|
1649
|
+
}
|
|
1650
|
+
unshare(key) {
|
|
1651
|
+
delete this.shared[key];
|
|
1652
|
+
}
|
|
1653
|
+
getShared() {
|
|
1654
|
+
return { ...this.shared };
|
|
1655
|
+
}
|
|
1656
|
+
title() {
|
|
1657
|
+
return this.config.title ?? "Nexus";
|
|
1658
|
+
}
|
|
1659
|
+
encryptHistory() {
|
|
1660
|
+
return this.config.encryptHistory ?? false;
|
|
1661
|
+
}
|
|
1662
|
+
ssr() {
|
|
1663
|
+
return this.config.ssr ?? null;
|
|
1664
|
+
}
|
|
1665
|
+
async resolveVersion() {
|
|
1666
|
+
const v = this.config.version;
|
|
1667
|
+
if (typeof v === "function")
|
|
1668
|
+
return await v();
|
|
1669
|
+
return v;
|
|
1670
|
+
}
|
|
1671
|
+
async getSharedFor(_c) {
|
|
1672
|
+
const static_ = this.getShared();
|
|
1673
|
+
const configured = this.config.sharedProps;
|
|
1674
|
+
if (typeof configured === "function") {
|
|
1675
|
+
const dyn = await configured();
|
|
1676
|
+
return { ...static_, ...dyn };
|
|
1677
|
+
}
|
|
1678
|
+
return { ...static_, ...configured ?? {} };
|
|
1679
|
+
}
|
|
1680
|
+
static TOKEN = INERTIA_TOKEN;
|
|
1681
|
+
normalizeRenderArgs(component, propsOrDeferred, maybeProps) {
|
|
1682
|
+
if (maybeProps !== undefined) {
|
|
1683
|
+
const deferred = {};
|
|
1684
|
+
for (const [k, v] of Object.entries(propsOrDeferred)) {
|
|
1685
|
+
if (v instanceof DeferredProp)
|
|
1686
|
+
deferred[k] = v;
|
|
1687
|
+
else
|
|
1688
|
+
throw new Error(`Inertia.render: 3-arg form expects the second argument to be a map of deferred props. ` + `Got non-deferred value at key "${k}".`);
|
|
1689
|
+
}
|
|
1690
|
+
return { component, props: { ...deferred, ...maybeProps } };
|
|
1691
|
+
}
|
|
1692
|
+
return { component, props: propsOrDeferred ?? {} };
|
|
1693
|
+
}
|
|
1694
|
+
};
|
|
1695
|
+
});
|
|
1696
|
+
|
|
1697
|
+
// src/view/inertia/ssr/registry.ts
|
|
1698
|
+
class ComponentRegistry {
|
|
1699
|
+
map = new Map;
|
|
1700
|
+
register(name, component) {
|
|
1701
|
+
this.map.set(name, component);
|
|
1702
|
+
return this;
|
|
1703
|
+
}
|
|
1704
|
+
registerAll(components) {
|
|
1705
|
+
for (const [name, component] of Object.entries(components)) {
|
|
1706
|
+
this.map.set(name, component);
|
|
1707
|
+
}
|
|
1708
|
+
return this;
|
|
1709
|
+
}
|
|
1710
|
+
resolve(name) {
|
|
1711
|
+
return this.map.get(name);
|
|
1712
|
+
}
|
|
1713
|
+
has(name) {
|
|
1714
|
+
return this.map.has(name);
|
|
1715
|
+
}
|
|
1716
|
+
unregister(name) {
|
|
1717
|
+
return this.map.delete(name);
|
|
1718
|
+
}
|
|
1719
|
+
names() {
|
|
1720
|
+
return [...this.map.keys()];
|
|
1721
|
+
}
|
|
1722
|
+
get size() {
|
|
1723
|
+
return this.map.size;
|
|
1724
|
+
}
|
|
1725
|
+
}
|
|
1726
|
+
|
|
1727
|
+
// src/view/inertia/ssr/react-adapter.ts
|
|
1728
|
+
var init_react_adapter = () => {};
|
|
1729
|
+
|
|
1730
|
+
// src/view/inertia/ssr/vue-adapter.ts
|
|
1731
|
+
var init_vue_adapter = () => {};
|
|
1732
|
+
|
|
1733
|
+
// src/view/inertia/ssr/svelte-adapter.ts
|
|
1734
|
+
var init_svelte_adapter = () => {};
|
|
1735
|
+
|
|
1736
|
+
// src/view/inertia/ssr/solid-adapter.ts
|
|
1737
|
+
var init_solid_adapter = () => {};
|
|
1738
|
+
|
|
1739
|
+
// src/view/inertia/ssr/index.ts
|
|
1740
|
+
var init_ssr = __esm(() => {
|
|
1741
|
+
init_react_adapter();
|
|
1742
|
+
init_vue_adapter();
|
|
1743
|
+
init_svelte_adapter();
|
|
1744
|
+
init_solid_adapter();
|
|
1745
|
+
});
|
|
1746
|
+
|
|
1747
|
+
// src/view/inertia/index.ts
|
|
1748
|
+
var init_inertia = __esm(() => {
|
|
1749
|
+
init_inertia_response();
|
|
1750
|
+
init_form_middleware();
|
|
1751
|
+
init_inertia_adapter();
|
|
1752
|
+
init_ssr();
|
|
1753
|
+
});
|
|
1754
|
+
|
|
1755
|
+
// src/core/application.ts
|
|
1756
|
+
var exports_application = {};
|
|
1757
|
+
__export(exports_application, {
|
|
1758
|
+
Application: () => Application
|
|
1759
|
+
});
|
|
1760
|
+
import"reflect-metadata";
|
|
1761
|
+
|
|
1762
|
+
class Application {
|
|
1763
|
+
container;
|
|
1764
|
+
server;
|
|
1765
|
+
inertia;
|
|
1766
|
+
viewAdapter;
|
|
1767
|
+
constructor(rootModule, options = {}) {
|
|
1768
|
+
this.container = new ApplicationContainer;
|
|
1769
|
+
const scanner2 = new ModuleScanner(this.container);
|
|
1770
|
+
const { root, modules } = scanner2.scan(rootModule);
|
|
1771
|
+
this.server = new NexusServer(this.container, options);
|
|
1772
|
+
for (const m of modules) {
|
|
1773
|
+
for (const controller2 of m.controllers) {
|
|
1774
|
+
this.server.router.registerController(controller2, m.container);
|
|
1775
|
+
}
|
|
1776
|
+
}
|
|
1777
|
+
for (const controller2 of root.controllers) {
|
|
1778
|
+
this.server.router.registerController(controller2, root.container);
|
|
1779
|
+
}
|
|
1780
|
+
this.viewAdapter = options.viewAdapter ?? new RenduAdapter;
|
|
1781
|
+
if (options.inertia) {
|
|
1782
|
+
this.inertia = new Inertia(options.inertia);
|
|
1783
|
+
this.container.register({
|
|
1784
|
+
provide: Inertia.TOKEN,
|
|
1785
|
+
useValue: this.inertia
|
|
1786
|
+
});
|
|
1787
|
+
} else {
|
|
1788
|
+
this.inertia = null;
|
|
1789
|
+
}
|
|
1790
|
+
this.tryLoadNxConfig();
|
|
1791
|
+
if (process.env["NEXUS_DEBUG"] === "1") {
|
|
1792
|
+
console.log("[nexus] Modules:", modules.length);
|
|
1793
|
+
console.log("[nexus] Controllers:", modules.flatMap((m) => m.controllers).map((c) => c.name));
|
|
1794
|
+
console.log("[nexus] Providers (root):", this.container.list());
|
|
1795
|
+
console.log("[nexus] Inertia:", this.inertia ? "enabled" : "disabled");
|
|
1796
|
+
}
|
|
1797
|
+
}
|
|
1798
|
+
tryLoadNxConfig() {
|
|
1799
|
+
if (false)
|
|
1800
|
+
;
|
|
1801
|
+
try {
|
|
1802
|
+
const mod = __require(process.cwd() + "/nx.config.ts");
|
|
1803
|
+
const cfg = mod.default ?? mod;
|
|
1804
|
+
if (cfg && typeof cfg.viewPaths === "string" && cfg.viewPaths.length > 0) {
|
|
1805
|
+
setViewPaths(cfg.viewPaths);
|
|
1806
|
+
}
|
|
1807
|
+
} catch {}
|
|
1808
|
+
}
|
|
1809
|
+
setViewAdapter(adapter) {
|
|
1810
|
+
this.viewAdapter = adapter;
|
|
1811
|
+
return this;
|
|
1812
|
+
}
|
|
1813
|
+
setViewPaths(path) {
|
|
1814
|
+
setViewPaths(path);
|
|
1815
|
+
return this;
|
|
1816
|
+
}
|
|
1817
|
+
async render(view, data = {}) {
|
|
1818
|
+
return this.viewAdapter.render(view, data);
|
|
1819
|
+
}
|
|
1820
|
+
async listen(port) {
|
|
1821
|
+
if (port) {
|
|
1822
|
+
this.server.setPort(port);
|
|
1823
|
+
}
|
|
1824
|
+
return this.server.start();
|
|
1825
|
+
}
|
|
1826
|
+
get fetch() {
|
|
1827
|
+
return this.server.fetch;
|
|
1828
|
+
}
|
|
1829
|
+
static bootstrap(rootModule, options) {
|
|
1830
|
+
return new Application(rootModule, options);
|
|
1831
|
+
}
|
|
1832
|
+
}
|
|
1833
|
+
var init_application = __esm(() => {
|
|
1834
|
+
init_container();
|
|
1835
|
+
init_scanner();
|
|
1836
|
+
init_server();
|
|
1837
|
+
init_rendu();
|
|
1838
|
+
init_view_engine();
|
|
1839
|
+
init_inertia();
|
|
1840
|
+
});
|
|
1841
|
+
|
|
1842
|
+
// src/view/index.ts
|
|
1843
|
+
init_rendu();
|
|
1844
|
+
init_view_engine();
|
|
1845
|
+
|
|
1846
|
+
// src/index.ts
|
|
1847
|
+
import"reflect-metadata";
|
|
1848
|
+
|
|
1849
|
+
// src/core/decorators/module.ts
|
|
1850
|
+
init_constants();
|
|
1851
|
+
import"reflect-metadata";
|
|
1852
|
+
function Module(options = {}) {
|
|
1853
|
+
return (target) => {
|
|
1854
|
+
Reflect.defineMetadata(METADATA_KEY.MODULE, options, target);
|
|
1855
|
+
};
|
|
1856
|
+
}
|
|
1857
|
+
function getModuleOptions(target) {
|
|
1858
|
+
return Reflect.getMetadata(METADATA_KEY.MODULE, target) ?? {};
|
|
1859
|
+
}
|
|
1860
|
+
|
|
1861
|
+
// src/core/decorators/index.ts
|
|
1862
|
+
init_controller();
|
|
1863
|
+
|
|
1864
|
+
// src/core/decorators/injectable.ts
|
|
1865
|
+
init_constants();
|
|
1866
|
+
import"reflect-metadata";
|
|
1867
|
+
function Injectable(options = {}) {
|
|
1868
|
+
return (target) => {
|
|
1869
|
+
Reflect.defineMetadata(METADATA_KEY.INJECTABLE, true, target);
|
|
1870
|
+
if (options.scope) {
|
|
1871
|
+
Reflect.defineMetadata("nexus:di:scope", options.scope, target);
|
|
1872
|
+
}
|
|
1873
|
+
};
|
|
1874
|
+
}
|
|
1875
|
+
function isInjectable(target) {
|
|
1876
|
+
return Reflect.hasMetadata(METADATA_KEY.INJECTABLE, target);
|
|
1877
|
+
}
|
|
1878
|
+
function getScope(target) {
|
|
1879
|
+
return Reflect.getMetadata("nexus:di:scope", target);
|
|
1880
|
+
}
|
|
1881
|
+
function Inject(token) {
|
|
1882
|
+
return (target, propertyKey, parameterIndex) => {
|
|
1883
|
+
const existing = Reflect.getMetadata(METADATA_KEY.INJECT, target) ?? new Map;
|
|
1884
|
+
existing.set(parameterIndex, token);
|
|
1885
|
+
Reflect.defineMetadata(METADATA_KEY.INJECT, existing, target);
|
|
1886
|
+
};
|
|
1887
|
+
}
|
|
1888
|
+
|
|
1889
|
+
// src/core/decorators/index.ts
|
|
1890
|
+
init_http_methods();
|
|
1891
|
+
init_params();
|
|
1892
|
+
init_validate();
|
|
1893
|
+
|
|
1894
|
+
// src/core/decorators/repository.ts
|
|
1895
|
+
init_constants();
|
|
1896
|
+
import"reflect-metadata";
|
|
1897
|
+
function Repository(entityToken) {
|
|
1898
|
+
return (target) => {
|
|
1899
|
+
Reflect.defineMetadata(METADATA_KEY.REPOSITORY, { entity: entityToken }, target);
|
|
1900
|
+
Reflect.defineMetadata(METADATA_KEY.INJECTABLE, true, target);
|
|
1901
|
+
};
|
|
1902
|
+
}
|
|
1903
|
+
function getRepositoryMetadata(target) {
|
|
1904
|
+
return Reflect.getMetadata(METADATA_KEY.REPOSITORY, target);
|
|
1905
|
+
}
|
|
1906
|
+
function isRepository(target) {
|
|
1907
|
+
return Reflect.hasMetadata(METADATA_KEY.REPOSITORY, target);
|
|
1908
|
+
}
|
|
1909
|
+
// src/core/decorators/metadata.ts
|
|
1910
|
+
init_constants();
|
|
1911
|
+
// src/core/di/index.ts
|
|
1912
|
+
init_request_middleware();
|
|
1913
|
+
init_container();
|
|
1914
|
+
init_scanner();
|
|
1915
|
+
init_request_scope();
|
|
1916
|
+
// src/core/http/context.ts
|
|
1917
|
+
function getNexusVar(c) {
|
|
1918
|
+
return c.var.nexus;
|
|
1919
|
+
}
|
|
1920
|
+
|
|
1921
|
+
// src/core/http/index.ts
|
|
1922
|
+
init_router();
|
|
1923
|
+
init_server();
|
|
1924
|
+
// src/core/validation/index.ts
|
|
1925
|
+
init_validator();
|
|
1926
|
+
// src/core/orm/drizzle-adapter.ts
|
|
1927
|
+
class DrizzleModule {
|
|
1928
|
+
config;
|
|
1929
|
+
token;
|
|
1930
|
+
constructor(token = "DB", config) {
|
|
1931
|
+
this.config = config;
|
|
1932
|
+
this.token = token;
|
|
1933
|
+
}
|
|
1934
|
+
build() {
|
|
1935
|
+
if (this.config.instance)
|
|
1936
|
+
return this.config.instance;
|
|
1937
|
+
if (this.config.driver && this.config.schema) {
|
|
1938
|
+
return this.config.driver({
|
|
1939
|
+
schema: this.config.schema,
|
|
1940
|
+
client: this.config.client
|
|
1941
|
+
});
|
|
1942
|
+
}
|
|
1943
|
+
throw new Error("DrizzleModule requires either `instance` or `driver` + `schema` configuration.");
|
|
1944
|
+
}
|
|
1945
|
+
asModule() {
|
|
1946
|
+
const token = this.token;
|
|
1947
|
+
const builder = () => this.build();
|
|
1948
|
+
|
|
1949
|
+
class DrizzleProvider {
|
|
1950
|
+
}
|
|
1951
|
+
Object.defineProperty(DrizzleProvider, "name", {
|
|
1952
|
+
value: `DrizzleProvider<${token}>`
|
|
1953
|
+
});
|
|
1954
|
+
return DrizzleProvider;
|
|
1955
|
+
}
|
|
1956
|
+
registerInto(container2) {
|
|
1957
|
+
container2.register({
|
|
1958
|
+
provide: this.token,
|
|
1959
|
+
useFactory: () => this.build()
|
|
1960
|
+
});
|
|
1961
|
+
}
|
|
1962
|
+
}
|
|
1963
|
+
async function getDb(config) {
|
|
1964
|
+
if (config.instance)
|
|
1965
|
+
return config.instance;
|
|
1966
|
+
if (config.driver && config.schema) {
|
|
1967
|
+
return config.driver({ schema: config.schema, client: config.client });
|
|
1968
|
+
}
|
|
1969
|
+
throw new Error("getDb requires either `instance` or `driver` + `schema` configuration.");
|
|
1970
|
+
}
|
|
1971
|
+
// src/core/runtime/index.ts
|
|
1972
|
+
init_node();
|
|
1973
|
+
|
|
1974
|
+
// src/core/index.ts
|
|
1975
|
+
init_application();
|
|
1976
|
+
init_constants();
|
|
1977
|
+
|
|
1978
|
+
// src/index.ts
|
|
1979
|
+
init_application();
|
|
1980
|
+
var src_default = Application;
|
|
1981
|
+
export {
|
|
1982
|
+
validateRequest,
|
|
1983
|
+
setViewPaths,
|
|
1984
|
+
setRequestState,
|
|
1985
|
+
requestScopeMiddleware,
|
|
1986
|
+
renderView,
|
|
1987
|
+
nodeAdapter,
|
|
1988
|
+
logger,
|
|
1989
|
+
loadTemplate,
|
|
1990
|
+
isRepository,
|
|
1991
|
+
isInjectable,
|
|
1992
|
+
isController,
|
|
1993
|
+
getViewPaths,
|
|
1994
|
+
getValidationMetadata,
|
|
1995
|
+
getScope,
|
|
1996
|
+
getRoutes,
|
|
1997
|
+
getRequestState,
|
|
1998
|
+
getRequestScope,
|
|
1999
|
+
getRequest,
|
|
2000
|
+
getRepositoryMetadata,
|
|
2001
|
+
getParamMetadata,
|
|
2002
|
+
getNexusVar,
|
|
2003
|
+
getModuleOptions,
|
|
2004
|
+
getDb,
|
|
2005
|
+
getControllerMetadata,
|
|
2006
|
+
formatValidationError,
|
|
2007
|
+
errorHandler,
|
|
2008
|
+
detectRuntime,
|
|
2009
|
+
src_default as default,
|
|
2010
|
+
createRouter,
|
|
2011
|
+
createParamDecorator,
|
|
2012
|
+
cors,
|
|
2013
|
+
cloudflareAdapter,
|
|
2014
|
+
bunAdapter,
|
|
2015
|
+
ValidationError,
|
|
2016
|
+
Validate,
|
|
2017
|
+
User,
|
|
2018
|
+
Res,
|
|
2019
|
+
RequestScopeStorage,
|
|
2020
|
+
Req,
|
|
2021
|
+
Repository,
|
|
2022
|
+
RenduAdapter,
|
|
2023
|
+
REQUEST_SCOPE,
|
|
2024
|
+
REQUEST,
|
|
2025
|
+
Query,
|
|
2026
|
+
Put,
|
|
2027
|
+
Post,
|
|
2028
|
+
Patch,
|
|
2029
|
+
Param,
|
|
2030
|
+
PARAM_TYPES,
|
|
2031
|
+
Options,
|
|
2032
|
+
NexusServer,
|
|
2033
|
+
Next,
|
|
2034
|
+
ModuleScanner,
|
|
2035
|
+
Module,
|
|
2036
|
+
METADATA_KEY,
|
|
2037
|
+
Injectable,
|
|
2038
|
+
Inject,
|
|
2039
|
+
Headers2 as Headers,
|
|
2040
|
+
Head,
|
|
2041
|
+
HTTP_METHODS,
|
|
2042
|
+
Get,
|
|
2043
|
+
EtaAdapter,
|
|
2044
|
+
EdgeAdapter,
|
|
2045
|
+
DrizzleModule,
|
|
2046
|
+
Delete,
|
|
2047
|
+
DIContainer,
|
|
2048
|
+
Ctx,
|
|
2049
|
+
Controller,
|
|
2050
|
+
Body,
|
|
2051
|
+
ApplicationContainer,
|
|
2052
|
+
Application
|
|
2053
|
+
};
|
|
2054
|
+
|
|
2055
|
+
//# debugId=ABDC5E0F1A95E8AD64756E2164756E21
|
|
2056
|
+
//# sourceMappingURL=index.js.map
|