Skip to content

release: v12.0.0 major release (approx. Q3 2026)#16391

Draft
kamilmysliwiec wants to merge 158 commits intomasterfrom
v12.0.0
Draft

release: v12.0.0 major release (approx. Q3 2026)#16391
kamilmysliwiec wants to merge 158 commits intomasterfrom
v12.0.0

Conversation

@kamilmysliwiec
Copy link
Member

@kamilmysliwiec kamilmysliwiec commented Feb 19, 2026

PR Checklist

Please check if your PR fulfills the following requirements:

PR Type

What kind of change does this PR introduce?

  • Bugfix
  • Feature
  • Code style update (formatting, local variables)
  • Refactoring (no functional changes, no api changes)
  • Build related changes
  • CI related changes
  • Other... Please describe: v12.0.0 release

Description

Approximate release window: early Q3 2026

Overview

  1. ESM migration

  2. CLI (ESM/CJS)

    • The NestJS CLI will prompt users to choose whether to generate a CJS or ESM project (ESM projects will use vitest + oxlint by default)
    • Webpack -> Rspack ✅ (webpack is now deprecated)
  3. Testing stack changes

  4. Website redesign

    • A complete redesign of the NestJS websites is coming soon - we're taking them to the next level.
  5. Minor breaking changes

    • There will be a few minor breaking changes across other NestJS packages, but nothing significant.
  6. Schema support in route decorators

    • All route decorators (e.g., @Body, @Query, etc.) will support a new schema option that accepts a Standard Schema–compatible object. https://standardschema.dev/)
    • This enables the use of modern validation libraries such as Zod, Valibot, ArkType, and others, as an alternative to class-validator.
    • The same capability will also be available in the serializer interceptor.

PRs:

Packages will soon (possibly in Q2) be released under the next tag to let everyone play with them before they make it to the official latest tag.

Does this PR introduce a breaking change?

  • Yes
  • No

Other information

glebbash and others added 30 commits March 4, 2025 12:52
feat: standard schema validation pipe, and standard serializer, introduce internal export subpath
sample: migrate all samples to esm and vitest
refactor: migrate from mocha, chai, sinon to vitest
@kamilmysliwiec
Copy link
Member Author

Schematics PR nestjs/schematics#2302
CLI PR nestjs/nest-cli#3280

A current version of this PR has been published under the next tag (12.0.0-alpha.1)

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 .js extensions and adjusted CommonJS-only globals (__dirname) usage toward import.meta.dirname.
  • Migrated a large set of integration tests from Chai/Sinon idioms to Vitest expect + vi.
  • Updated integration tsconfig.json files for Vitest globals, interop, and newer TS targets; replaced the root gulp entrypoint with an ESM gulpfile.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.

kamilmysliwiec and others added 3 commits March 11, 2026 15:46
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>
@vaskouk
Copy link

vaskouk commented Mar 12, 2026

Hey, finally some amazing news around NestJS updates!

Quick question for swagger decorator(s). Will it also support schema field for zod and other schema definitions? Like we use currently DTO

@kamilmysliwiec
Copy link
Member Author

Quick question for swagger decorator(s). Will it also support schema field for zod and other schema definitions? Like we use currently DTO

That's the plan yes

joelday and others added 2 commits March 12, 2026 09:37
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
@wonderbeel
Copy link

https://vite.dev/blog/announcing-vite8
https://vitest.dev/blog/vitest-4-1.html

Seems that the vite team moved way faster than expected 👀 .
Any chance of using vitest 4.1 with oxc directly instead of keeping SWC around (one less dep to care about and just more consistency)?

@kamilmysliwiec
Copy link
Member Author

@wonderbeel yeah will update this PR shortly

@gperdomor
Copy link
Contributor

@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

@kamilmysliwiec
Copy link
Member Author

@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

@angelhodar
Copy link

@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.

@kamilmysliwiec
Copy link
Member Author

@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

@vaskouk
Copy link

vaskouk commented Mar 17, 2026

Hey! In v12 how decorators like @Body will validate such?

@Body() payload: CreateCustomBrandPayloadDto

@kamilmysliwiec
Copy link
Member Author

Nothing changes here @vaskouk, you can still use ValidationPipe with class-validator.

@vaskouk
Copy link

vaskouk commented Mar 17, 2026

Nothing changes here @vaskouk, you can still use ValidationPipe with class-validator.

Sorry i didn't phrase it correctly, with class-validator yes, but what if someone wants to switch to zod schema validation. ValidationPipe will still do the work?

@kamilmysliwiec
Copy link
Member Author

If you want to use zod, you need to use zod schemas, not classes with annotations.

@vaskouk
Copy link

vaskouk commented Mar 17, 2026

If you want to use zod, you need to use zod schemas, not classes with annotations.

Yes got it, so the same like @Body() payload: CreateCustomBrandPayloadSchema ? which will be the zod schema

@kamilmysliwiec
Copy link
Member Author

See 35-zod-validation sample in this PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.