release: v12.0.0 major release (approx. Q3 2026)#16391
release: v12.0.0 major release (approx. Q3 2026)#16391kamilmysliwiec wants to merge 158 commits intomasterfrom
Conversation
feat: standard schema validation pipe, and standard serializer, introduce internal export subpath
refactor: minor codebase tweaks
sample: migrate all samples to esm and vitest
refactor: migrate from mocha, chai, sinon to vitest
|
Schematics PR nestjs/schematics#2302 A current version of this PR has been published under the next tag ( |
There was a problem hiding this comment.
Pull request overview
Prepares the v12.0.0 major release work by aligning integration packages/tests with the ESM migration and moving the test stack from Mocha/Chai/Sinon/Jest-style patterns toward Vitest.
Changes:
- Updated many internal imports to include
.jsextensions and adjusted CommonJS-only globals (__dirname) usage towardimport.meta.dirname. - Migrated a large set of integration tests from Chai/Sinon idioms to Vitest
expect+vi. - Updated integration
tsconfig.jsonfiles for Vitest globals, interop, and newer TS targets; replaced the root gulp entrypoint with an ESMgulpfile.mjs.
Reviewed changes
Copilot reviewed 300 out of 1637 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| integration/scopes/src/durable/durable.guard.ts | Use .js specifier for ESM |
| integration/scopes/src/durable/durable.controller.ts | Use .js specifiers for ESM |
| integration/scopes/src/circular-transient/test.controller.ts | Use .js specifiers for ESM |
| integration/scopes/src/circular-transient/hello.module.ts | Use .js specifiers for ESM |
| integration/scopes/src/circular-transient/hello.controller.ts | Use .js specifiers for ESM |
| integration/scopes/src/circular-hello/users/user-by-id.pipe.ts | Use .js specifier for ESM |
| integration/scopes/src/circular-hello/hello.module.ts | Use .js specifiers for ESM |
| integration/scopes/src/circular-hello/hello.controller.ts | Use .js specifiers for ESM |
| integration/scopes/src/app.module.ts | Use .js specifier for ESM |
| integration/scopes/e2e/resolve-scoped.spec.ts | Chai → Vitest expect; lifecycle hook tweak |
| integration/scopes/e2e/request-scope.spec.ts | Chai → Vitest; supertest import style |
| integration/scopes/e2e/request-modules-scope.spec.ts | Chai → Vitest; supertest import style |
| integration/scopes/e2e/msvc-request-scope.spec.ts | Chai → Vitest; supertest import style |
| integration/scopes/e2e/inject-inquirer.spec.ts | Sinon → vi.fn; Chai → Vitest expect |
| integration/scopes/e2e/circular-transient-scope.spec.ts | Chai → Vitest; supertest import style |
| integration/scopes/e2e/circular-request-scope.spec.ts | Chai → Vitest; supertest import style |
| integration/repl/tsconfig.json | Vitest globals + ES target bump |
| integration/repl/src/users/users.service.ts | Use .js specifiers for ESM |
| integration/repl/src/users/users.module.ts | Use .js specifiers for ESM |
| integration/repl/src/users/users.controller.ts | Use .js specifiers for ESM |
| integration/repl/src/users/dto/update-user.dto.ts | Use .js specifier for ESM |
| integration/repl/src/repl.ts | Use .js specifier for ESM |
| integration/repl/src/long-living-app.module.ts | Use .js specifier for ESM |
| integration/repl/src/database/database.module.ts | Use .js specifier for ESM |
| integration/repl/src/app.module.ts | Use .js specifier for ESM |
| integration/repl/e2e/repl-process.spec.ts | Switch REPL spawn strategy; Vitest expect |
| integration/nest-application/use-body-parser/tsconfig.json | Vitest globals + ES target bump |
| integration/nest-application/use-body-parser/src/app.module.ts | Use .js specifier for ESM |
| integration/nest-application/use-body-parser/e2e/fastify.spec.ts | Chai → Vitest expect; .js import |
| integration/nest-application/use-body-parser/e2e/express.spec.ts | Chai → Vitest expect; .js import |
| integration/nest-application/sse/tsconfig.json | Vitest globals + ES target bump |
| integration/nest-application/sse/src/app.module.ts | Use .js specifier for ESM |
| integration/nest-application/sse/e2e/fastify.spec.ts | Callback → Promise form + Vitest expect |
| integration/nest-application/sse/e2e/express.spec.ts | Callback → Promise form + Vitest expect |
| integration/nest-application/raw-body/tsconfig.json | Vitest globals + ES target bump |
| integration/nest-application/raw-body/src/fastify.module.ts | Use .js specifier for ESM |
| integration/nest-application/raw-body/src/express.module.ts | Use .js specifier for ESM |
| integration/nest-application/raw-body/e2e/fastify.spec.ts | Chai → Vitest expect; .js import |
| integration/nest-application/raw-body/e2e/express.spec.ts | Chai → Vitest expect; .js import |
| integration/nest-application/listen/tsconfig.json | Vitest globals + ES target bump |
| integration/nest-application/listen/src/app.module.ts | Use .js specifiers for ESM |
| integration/nest-application/listen/src/app.controller.ts | Use .js specifier for ESM |
| integration/nest-application/listen/e2e/fastify.spec.ts | Use rejects assertions for listen errors |
| integration/nest-application/listen/e2e/express.spec.ts | Use rejects assertions for listen errors |
| integration/nest-application/global-prefix/tsconfig.json | Vitest globals + ES target bump |
| integration/nest-application/global-prefix/src/app.module.ts | Use .js specifier for ESM |
| integration/nest-application/global-prefix/e2e/global-prefix.spec.ts | supertest default import + .js import |
| integration/nest-application/get-url/tsconfig.json | Vitest globals + ES target bump |
| integration/nest-application/get-url/src/app.module.ts | Use .js specifiers for ESM |
| integration/nest-application/get-url/src/app.controller.ts | Use .js specifier for ESM |
| integration/nest-application/get-url/e2e/fastify.spec.ts | Stabilize loopback expectations + Vitest |
| integration/nest-application/get-url/e2e/express.spec.ts | Stabilize loopback expectations + Vitest |
| integration/nest-application/app-locals/tsconfig.json | Vitest globals + ES target bump |
| integration/nest-application/app-locals/src/app.module.ts | Use .js specifier for ESM |
| integration/nest-application/app-locals/e2e/express.spec.ts | Chai → Vitest expect; .js import |
| integration/mongoose/tsconfig.json | Vitest globals + ES target bump |
| integration/mongoose/src/main.ts | Use .js specifier for ESM |
| integration/mongoose/src/cats/schemas/cat.schema.ts | Switch mongoose import style |
| integration/mongoose/src/cats/cats.service.ts | Use .js specifiers for ESM |
| integration/mongoose/src/cats/cats.module.ts | Use .js specifiers for ESM |
| integration/mongoose/src/cats/cats.controller.ts | Use .js specifiers for ESM |
| integration/mongoose/src/async-options.module.ts | Use .js specifier for ESM |
| integration/mongoose/src/async-existing-options.module.ts | Use .js specifier for ESM |
| integration/mongoose/src/async-class-options.module.ts | Use .js specifier for ESM |
| integration/mongoose/src/app.module.ts | Use .js specifier for ESM |
| integration/mongoose/e2e/mongoose.spec.ts | supertest default import + .js import |
| integration/mongoose/e2e/async-options.spec.ts | supertest default import + .js import |
| integration/mongoose/e2e/async-existing-options.spec.ts | supertest default import + .js import |
| integration/mongoose/e2e/async-class-options.spec.ts | supertest default import + .js import |
| integration/module-utils/tsconfig.json | Vitest globals + ES target bump |
| integration/module-utils/test/integration-module.spec.ts | Chai → Vitest expect; .js import |
| integration/module-utils/src/integration.module.ts | Use .js specifiers for ESM |
| integration/module-utils/src/integration.module-definition.ts | Use .js specifier for ESM |
| integration/microservices/tsconfig.json | Vitest globals + ES target bump |
| integration/microservices/src/tcp-tls/app.module.ts | Move path reads to import.meta.dirname |
| integration/microservices/src/tcp-tls/app.controller.ts | Move path reads to import.meta.dirname |
| integration/microservices/src/nats/nats.controller.ts | Update nats import + .js specifier |
| integration/microservices/src/main.ts | Use .js specifier for ESM |
| integration/microservices/src/kafka/kafka.messages.controller.ts | Use .js specifiers for ESM |
| integration/microservices/src/kafka/kafka.controller.ts | Use .js specifiers for ESM |
| integration/microservices/src/kafka/entities/user.entity.ts | Use .js specifier for ESM |
| integration/microservices/src/kafka/entities/business.entity.ts | Use .js specifiers for ESM |
| integration/microservices/src/kafka/dtos/business.dto.ts | Use .js specifier for ESM |
| integration/microservices/src/kafka-concurrent/kafka-concurrent.controller.ts | Use .js specifier for ESM |
| integration/microservices/src/grpc/grpc.controller.ts | Use import.meta.dirname for proto paths |
| integration/microservices/src/grpc-advanced/advanced.grpc.controller.ts | Use import.meta.dirname for proto paths |
| integration/microservices/src/disconnected.controller.ts | Add additional connection-refused detection |
| integration/microservices/src/app.module.ts | Use .js specifier for ESM |
| integration/microservices/e2e/topic-exchange-rmq.spec.ts | supertest default import + .js import |
| integration/microservices/e2e/sum-rpc.spec.ts | Chai → Vitest expect; .js imports |
| integration/microservices/e2e/sum-rpc-tls.spec.ts | Chai → Vitest; import.meta.dirname |
| integration/microservices/e2e/sum-rpc-async.spec.ts | Chai → Vitest; Promise-form test |
| integration/microservices/e2e/sum-rmq.spec.ts | Chai → Vitest; Promise-form test |
| integration/microservices/e2e/sum-redis.spec.ts | Chai → Vitest; reduced mocha-specific config |
| integration/microservices/e2e/sum-nats.spec.ts | Chai → Vitest; Promise-form test |
| integration/microservices/e2e/sum-kafka.spec.ts | Chai → Vitest; hooks conversion |
| integration/microservices/e2e/orders-grpc.spec.ts | Chai → Vitest; import.meta.dirname |
| integration/microservices/e2e/mqtt-record-builder.spec.ts | supertest default import + .js import |
| integration/microservices/e2e/math-grpc.spec.ts | Chai/Sinon → Vitest; import.meta.dirname |
| integration/microservices/e2e/fanout-exchange-rmq.spec.ts | supertest default import + .js imports |
| integration/microservices/e2e/disconnected-client.spec.ts | supertest default import + .js import |
| integration/microservices/e2e/concurrent-kafka.spec.ts | supertest default import + .js imports |
| integration/microservices/e2e/broadcast-redis.spec.ts | supertest default import + .js import |
| integration/microservices/e2e/broadcast-nats.spec.ts | supertest default import + .js import |
| integration/microservices/e2e/broadcast-mqtt.spec.ts | supertest default import + .js import |
| integration/lazy-modules/tsconfig.json | Vitest globals + ES target bump |
| integration/lazy-modules/src/transient.service.ts | Use .js specifier for ESM |
| integration/lazy-modules/src/transient.module.ts | Use .js specifiers for ESM |
| integration/lazy-modules/src/request.service.ts | Use .js specifier for ESM |
| integration/lazy-modules/src/request.module.ts | Use .js specifiers for ESM |
| integration/lazy-modules/src/main.ts | Use .js specifier for ESM |
| integration/lazy-modules/src/lazy.module.ts | Use .js specifier for ESM |
| integration/lazy-modules/src/lazy.controller.ts | Use .js dynamic imports for ESM |
| integration/lazy-modules/src/eager.module.ts | Use .js specifier for ESM |
| integration/lazy-modules/src/app.module.ts | Use .js specifiers for ESM |
| integration/lazy-modules/e2e/lazy-import-transient-providers.spec.ts | Chai → Vitest; add teardown |
| integration/lazy-modules/e2e/lazy-import-request-providers.spec.ts | Chai → Vitest; add teardown |
| integration/lazy-modules/e2e/lazy-import-global-modules.spec.ts | Chai-as-promised → Vitest resolves |
| integration/inspector/tsconfig.json | Vitest globals + ES target bump |
| integration/inspector/src/users/users.service.ts | Use .js specifiers for ESM |
| integration/inspector/src/users/users.module.ts | Use .js specifiers for ESM |
| integration/inspector/src/users/users.controller.ts | Use .js specifiers for ESM |
| integration/inspector/src/users/dto/update-user.dto.ts | Use .js specifier for ESM |
| integration/inspector/src/request-chain/request-chain.service.ts | Use .js specifier for ESM |
| integration/inspector/src/request-chain/request-chain.module.ts | Use .js specifiers for ESM |
| integration/inspector/src/request-chain/request-chain.controller.ts | Use .js specifiers for ESM |
| integration/inspector/src/request-chain/interceptors/logging.interceptor.ts | Use .js specifier for ESM |
| integration/inspector/src/request-chain/helper/helper.module.ts | Use .js specifier for ESM |
| integration/inspector/src/properties/properties.service.ts | Use .js specifier for ESM |
| integration/inspector/src/properties/properties.module.ts | Use .js specifiers for ESM |
| integration/inspector/src/external-svc/external-svc.service.ts | Use .js specifiers for ESM |
| integration/inspector/src/external-svc/external-svc.module.ts | Use .js specifiers for ESM |
| integration/inspector/src/external-svc/external-svc.controller.ts | Use .js specifiers for ESM |
| integration/inspector/src/external-svc/dto/update-external-svc.dto.ts | Use .js specifier for ESM |
| integration/inspector/src/durable/durable.module.ts | Use .js specifiers for ESM |
| integration/inspector/src/durable/durable.controller.ts | Use .js specifier for ESM |
| integration/inspector/src/dogs/dto/update-dog.dto.ts | Use .js specifier for ESM |
| integration/inspector/src/dogs/dogs.service.ts | Use .js specifiers for ESM |
| integration/inspector/src/dogs/dogs.module.ts | Use .js specifiers for ESM |
| integration/inspector/src/dogs/dogs.controller.ts | Use .js specifiers for ESM |
| integration/inspector/src/defaults/defaults.service.ts | Use .js specifier for ESM |
| integration/inspector/src/defaults/defaults.module.ts | Use .js specifier for ESM |
| integration/inspector/src/database/dto/update-database.dto.ts | Use .js specifier for ESM |
| integration/inspector/src/database/database.service.ts | Use .js specifiers for ESM |
| integration/inspector/src/database/database.module.ts | Use .js specifiers for ESM |
| integration/inspector/src/database/database.controller.ts | Use .js specifiers for ESM |
| integration/inspector/src/core/core.module.ts | Use .js specifiers for ESM |
| integration/inspector/src/circular-modules/input.service.ts | Use .js specifier for ESM |
| integration/inspector/src/circular-modules/input.module.ts | Use .js specifiers for ESM |
| integration/inspector/src/circular-modules/circular.service.ts | Use .js specifier for ESM |
| integration/inspector/src/circular-modules/circular.module.ts | Use .js specifiers for ESM |
| integration/inspector/src/circular-hello/users/user-by-id.pipe.ts | Use .js specifier for ESM |
| integration/inspector/src/circular-hello/hello.module.ts | Use .js specifiers for ESM |
| integration/inspector/src/circular-hello/hello.controller.ts | Use .js specifiers for ESM |
| integration/inspector/src/chat/dto/update-chat.dto.ts | Use .js specifier for ESM |
| integration/inspector/src/chat/chat.service.ts | Use .js specifiers for ESM |
| integration/inspector/src/chat/chat.module.ts | Use .js specifiers for ESM |
| integration/inspector/src/chat/chat.gateway.ts | Use .js specifiers for ESM |
| integration/inspector/src/cats/cats.service.ts | Use .js specifier for ESM |
| integration/inspector/src/cats/cats.module.ts | Use .js specifiers for ESM |
| integration/inspector/src/cats/cats.controller.ts | Use .js specifiers for ESM |
| integration/inspector/src/app.module.ts | Use .js specifiers for ESM |
| integration/inspector/e2e/graph-inspector.spec.ts | Sinon/Chai → Vitest; import.meta.dirname |
| integration/inspector/e2e/fixtures/post-init-graph.json | Snapshot update for inspector output |
| integration/injector/tsconfig.json | Vitest globals + ES target bump |
| integration/injector/src/scoped/transient3.service.ts | Use .js specifier for ESM |
| integration/injector/src/scoped/transient.service.ts | Use .js specifier for ESM |
| integration/injector/src/scoped/scoped.module.ts | Use .js specifiers for ESM |
| integration/injector/src/properties/properties.service.ts | Use .js specifier for ESM |
| integration/injector/src/properties/properties.module.ts | Use .js specifiers for ESM |
| integration/injector/src/multiple-providers/multiple-providers.module.ts | Use .js specifiers for ESM |
| integration/injector/src/inject/inject.service.ts | Use .js specifier for ESM |
| integration/injector/src/inject/inject.module.ts | Use .js specifier for ESM |
| integration/injector/src/exports/exports.module.ts | Use .js specifier for ESM |
| integration/injector/src/defaults/defaults.service.ts | Use .js specifier for ESM |
| integration/injector/src/defaults/defaults.module.ts | Use .js specifier for ESM |
| integration/injector/src/circular/input.service.ts | Add lazy ref workaround for ESM TDZ |
| integration/injector/src/circular/circular.service.ts | Add lazy ref workaround for ESM TDZ |
| integration/injector/src/circular/circular.module.ts | Use .js specifiers for ESM |
| integration/injector/src/circular-structure-dynamic-module/circular.module.ts | Use .js specifier for ESM |
| integration/injector/src/circular-properties/input.service.ts | Lazy ref workaround for ESM TDZ |
| integration/injector/src/circular-properties/input-properties.module.ts | Use .js specifiers for ESM |
| integration/injector/src/circular-properties/circular.service.ts | Lazy ref workaround for ESM TDZ |
| integration/injector/src/circular-properties/circular-properties.module.ts | Use .js specifiers for ESM |
| integration/injector/src/circular-modules/input.service.ts | Lazy ref workaround for ESM TDZ |
| integration/injector/src/circular-modules/input.module.ts | Use .js specifiers for ESM |
| integration/injector/src/circular-modules/circular.service.ts | Lazy ref workaround for ESM TDZ |
| integration/injector/src/circular-modules/circular.module.ts | Use .js specifiers for ESM |
| integration/injector/src/app.module.ts | Use .js specifier for ESM |
| integration/injector/e2e/request-scope-bubbling.spec.ts | Chai → Vitest assertions |
| integration/injector/e2e/property-injection.spec.ts | Use .js deep imports; Vitest rejects |
| integration/injector/e2e/optional-factory-provider-dep.spec.ts | Chai → Vitest; message matching |
| integration/injector/e2e/multiple-providers.spec.ts | Chai → Vitest; .js import |
| integration/injector/e2e/many-global-modules.spec.ts | Sinon → vi.spyOn; Chai → Vitest |
| integration/injector/e2e/introspection.spec.ts | Add teardown; Chai → Vitest |
| integration/injector/e2e/injector.spec.ts | Chai-as-promised → Vitest rejects |
| integration/injector/e2e/inherited-optional.spec.ts | New regression test for optional inheritance |
| integration/injector/e2e/default-values.spec.ts | Chai → Vitest; .js imports |
| integration/injector/e2e/core-injectables.spec.ts | Chai → Vitest; add teardown |
| integration/injector/e2e/circular.spec.ts | Chai → Vitest; .js imports |
| integration/injector/e2e/circular-structure-dynamic-modules.spec.ts | Chai → Vitest; .js imports |
| integration/injector/e2e/circular-property-injection.spec.ts | Chai → Vitest; .js imports |
| integration/injector/e2e/circular-modules.spec.ts | Chai → Vitest; .js imports |
| integration/injector/e2e/circular-custom-providers.spec.ts | Chai → Vitest; error asserts |
| integration/hooks/tsconfig.json | Vitest globals + ES target bump |
| integration/hooks/e2e/on-module-init.spec.ts | Sinon/Chai → Vitest; add new ordering test |
| integration/hooks/e2e/on-module-destroy.spec.ts | Sinon/Chai → Vitest; add ordering test |
| integration/hooks/e2e/on-app-shutdown.spec.ts | Sinon/Chai → Vitest; add ordering test |
| integration/hooks/e2e/on-app-boostrap.spec.ts | Sinon/Chai → Vitest; add ordering test |
| integration/hooks/e2e/lifecycle-hook-order.spec.ts | Sinon → Vitest call-order assertions |
| integration/hooks/e2e/before-app-shutdown.spec.ts | Sinon/Chai → Vitest; add ordering test |
| integration/hello-world/tsconfig.json | Vitest globals + ES target bump |
| integration/hello-world/src/host/users/user-by-id.pipe.ts | Use .js specifier for ESM |
| integration/hello-world/src/host/host.module.ts | Use .js specifiers for ESM |
| integration/hello-world/src/host/host.controller.ts | Use .js specifiers for ESM |
| integration/hello-world/src/host-array/users/user-by-id.pipe.ts | Use .js specifier for ESM |
| integration/hello-world/src/host-array/host-array.module.ts | Use .js specifiers for ESM |
| integration/hello-world/src/host-array/host-array.controller.ts | Use .js specifiers for ESM |
| integration/hello-world/src/hello/users/user-by-id.pipe.ts | Use .js specifier for ESM |
| integration/hello-world/src/hello/hello.module.ts | Use .js specifiers for ESM |
| integration/hello-world/src/hello/hello.controller.ts | Use .js specifiers for ESM |
| integration/hello-world/src/app.module.ts | Use .js specifiers for ESM |
| integration/hello-world/e2e/router-module.spec.ts | supertest default import + beforeAll |
| integration/hello-world/e2e/router-module-middleware.spec.ts | .js import + supertest default import |
| integration/hello-world/e2e/middleware.spec.ts | .js import + supertest default import |
| integration/hello-world/e2e/middleware-with-versioning.spec.ts | Update deep import + .js imports |
| integration/hello-world/e2e/middleware-run-match-route.ts | Update testing/supertest imports for ESM |
| integration/hello-world/e2e/middleware-execute-order.spec.ts | supertest default import |
| integration/hello-world/e2e/middleware-class.spec.ts | .js import + supertest default import |
| integration/hello-world/e2e/local-pipes.spec.ts | supertest default import + .js import |
| integration/hello-world/e2e/interceptors.spec.ts | supertest default import + .js import |
| integration/hello-world/e2e/hello-world.spec.ts | supertest default import + .js import |
| integration/hello-world/e2e/guards.spec.ts | Add more assertions + app teardown |
| integration/hello-world/e2e/fastify-multiple.spec.ts | Replace commented disable with describe.skip |
| integration/hello-world/e2e/fastify-middleware-before-init.spec.ts | Chai → Vitest expect |
| integration/hello-world/e2e/fastify-adapter.spec.ts | Chai → Vitest; add status assertions |
| integration/hello-world/e2e/express-multiple.spec.ts | default imports + .js import |
| integration/hello-world/e2e/express-instance.spec.ts | default imports + .js import |
| integration/hello-world/e2e/exclude-middleware.spec.ts | .js import + supertest default import |
| integration/hello-world/e2e/exclude-middleware-fastify.spec.ts | .js import + supertest default import |
| integration/hello-world/e2e/exceptions.spec.ts | Chai → Vitest; async route fix |
| integration/graphql-schema-first/tsconfig.json | Vitest globals + ES target bump |
| integration/graphql-schema-first/src/main.ts | Use .js specifier for ESM |
| integration/graphql-schema-first/src/config.service.ts | Use import.meta.dirname for typePaths |
| integration/graphql-schema-first/src/config.module.ts | Use .js specifier for ESM |
| integration/graphql-schema-first/src/cats/cats.service.ts | Use .js specifier for ESM |
| integration/graphql-schema-first/src/cats/cats.resolvers.ts | Use .js specifiers for ESM |
| integration/graphql-schema-first/src/cats/cats.module.ts | Use .js specifiers for ESM |
| integration/graphql-schema-first/src/cats/cats-request-scoped.service.ts | Use .js specifier for ESM |
| integration/graphql-schema-first/src/async-options.module.ts | Use .js specifier; import.meta.dirname |
| integration/graphql-schema-first/src/async-options-existing.module.ts | Use .js specifiers for ESM |
| integration/graphql-schema-first/src/async-options-class.module.ts | Use .js specifier; import.meta.dirname |
| integration/graphql-schema-first/src/app.module.ts | Use .js specifier; import.meta.dirname |
| integration/graphql-schema-first/e2e/graphql.spec.ts | supertest default import + .js import |
| integration/graphql-schema-first/e2e/graphql-request-scoped.spec.ts | Chai → Vitest; import.meta.dirname |
| integration/graphql-schema-first/e2e/graphql-async.spec.ts | supertest default import + .js import |
| integration/graphql-schema-first/e2e/graphql-async-existing.spec.ts | supertest default import + .js import |
| integration/graphql-schema-first/e2e/graphql-async-class.spec.ts | supertest default import + .js import |
| integration/graphql-code-first/tsconfig.json | Vitest globals + ES target bump |
| integration/graphql-code-first/src/recipes/recipes.service.ts | Use .js specifiers for ESM |
| integration/graphql-code-first/src/recipes/recipes.resolver.ts | Use .js specifiers for ESM |
| integration/graphql-code-first/src/recipes/recipes.module.ts | Use .js specifiers for ESM |
| integration/graphql-code-first/src/main.ts | Use .js specifier for ESM |
| integration/graphql-code-first/src/app.module.ts | Use .js specifier for ESM |
| integration/graphql-code-first/e2e/pipes.spec.ts | supertest default import + .js import |
| integration/graphql-code-first/e2e/guards-filters.spec.ts | supertest default import + .js import |
| integration/graphql-code-first/e2e/code-first.spec.ts | supertest default import + .js import |
| integration/graceful-shutdown/tsconfig.json | New integration tsconfig w/ vitest globals |
| integration/graceful-shutdown/src/app.module.ts | Simplify module providers/controllers |
| integration/graceful-shutdown/src/app.controller.ts | Add slow endpoint for shutdown testing |
| integration/graceful-shutdown/e2e/express.spec.ts | New graceful shutdown semantics tests |
| integration/discovery/tsconfig.json | Vitest globals + ES target bump |
| integration/discovery/src/webhooks.explorer.ts | Use .js specifier for ESM |
| integration/discovery/src/my-webhook/my-webhook.module.ts | Use .js specifiers for ESM |
| integration/discovery/src/my-webhook/flush.webhook.ts | Use .js specifier for ESM |
| integration/discovery/src/my-webhook/cleanup.webhook.ts | Use .js specifier for ESM |
| integration/discovery/src/app.module.ts | Use .js specifiers for ESM |
| integration/discovery/e2e/discover-by-meta.spec.ts | Chai → Vitest; add teardown |
| integration/cors/tsconfig.json | Vitest globals + ES target bump |
| integration/cors/src/app.module.ts | Use .js specifier for ESM |
| integration/cors/e2e/fastify.spec.ts | hooks conversion; .js import; supertest default |
| integration/cors/e2e/express.spec.ts | hooks conversion; .js import; supertest default |
| integration/auto-mock/tsconfig.json | Vitest globals + ES target bump |
| integration/auto-mock/test/bar.service.spec.ts | Chai/Sinon → Vitest; .js imports |
| integration/auto-mock/src/bar.service.ts | Use .js specifier for ESM |
| hooks/mocha-init-hook.ts | Remove Mocha-specific init hook |
| gulpfile.mjs | New ESM gulp entrypoint |
| gulpfile.js | Remove CJS gulp entrypoint |
| CONTRIBUTING.md | Update Node requirement |
| .circleci/config.yml | Drop legacy-node param; bump current Node version |
Comments suppressed due to low confidence (1)
integration/microservices/tsconfig.json:1
- Several updated sources under integration/microservices now use ESM-only features (e.g., import.meta.dirname), but this tsconfig still emits/targets CommonJS. TypeScript typically rejects import.meta unless --module is set to an ESM-capable value (e.g., NodeNext/node16/es2022+). Align this tsconfig's module/moduleResolution with the new ESM patterns (or revert sources back to __dirname if this project must remain CommonJS).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
|
Hey, finally some amazing news around NestJS updates! Quick question for swagger decorator(s). Will it also support |
That's the plan yes |
Adds overloads for `@EventPattern` to allow validation that decorated method signatures match event payload types based on a specified mapping type. Includes tests demonstrating correct usage and error cases with `// @ts-expect-error`.
…d-typing feat(microservices): add event typings to the `@EventPattern` decorator
|
https://vite.dev/blog/announcing-vite8 Seems that the vite team moved way faster than expected 👀 . |
|
@wonderbeel yeah will update this PR shortly |
|
@kamilmysliwiec hey man, great news :D... Congrats... I created a new app using the @nestjs/cli@next but package.json file of the new app still uses v11 |
|
@gperdomor yeah it's not yet updated. Vite 8 is now released so the ts-esm schematic will work as expected = will update CLI soon |
One question regarding Vite 8. I have seen that it supports emitDecoratorMetadata, so does that mean that nestjs could use Vite 8 for both dev server and bundler for production builds without needing SWC? Or for example when using vitest in nestjs. |
|
@angelhodar yeah we will just use vitest with oxc instead of vitest + swc. For bundling (monorepos) you could use rspack. For regular apps tsc/swc depending on what you prefer |
|
Hey! In v12 how decorators like
|
|
Nothing changes here @vaskouk, you can still use |
Sorry i didn't phrase it correctly, with class-validator yes, but what if someone wants to switch to zod schema validation. |
|
If you want to use zod, you need to use zod schemas, not classes with annotations. |
Yes got it, so the same like |
|
See 35-zod-validation sample in this PR |
PR Checklist
Please check if your PR fulfills the following requirements:
PR Type
What kind of change does this PR introduce?
Description
Approximate release window: early Q3 2026
Overview
ESM migration
require(esm)support.require(esm)was the missing piece that made the move to ESM practical - without it, the migration wouldn't have made much sense. https://joyeecheung.github.io/blog/2024/03/18/require-esm-in-node-js/ https://nodejs.org/api/esm.html#requireCLI (ESM/CJS)
Testing stack changes
Website redesign
Minor breaking changes
Schema support in route decorators
@Body,@Query, etc.) will support a newschemaoption that accepts a Standard Schema–compatible object. https://standardschema.dev/)class-validator.PRs:
transformsignatures for improved type safety #16147isHttpErrorcheck stricter #14753Packages will soon (possibly in Q2) be released under the
nexttag to let everyone play with them before they make it to the officiallatesttag.Does this PR introduce a breaking change?
Other information