chore: TypeScript 5.9 (nodenext), NestJS 11, Jest 30 - #59
Open
jrhender wants to merge 2 commits into
Open
Conversation
This was referenced Jul 3, 2026
- TypeScript 4.8 -> 5.9 with module/moduleResolution 'nodenext' and
target es2022. nodenext is what later allows type-checked require()
of the ESM-only Credo 0.6+ packages. skipLibCheck added to the root
tsconfig (the app and e2e tsconfigs already had it), which also makes
the @peculiar/* and webcrypto-core version pins from the workspace
migration unnecessary - removed.
- NestJS 10 -> 11 (Express 5): @nestjs/config ^4, @nestjs/typeorm ^11,
@nestjs/swagger ^11, @nestjs/axios ^4, @nestjs/serve-static ^5,
reflect-metadata ^0.2. Express 5 requires the middleware wildcard
route '{*splat}' instead of '*', and @nestjs/config's forRoot can now
return a Promise<DynamicModule>.
- @nestjs/swagger 11 requires additionalProperties on 'object' typed
@ApiProperty declarations; openapi.json regenerated (operationIds now
carry a _v1 suffix, no path/schema changes).
- Jest 29 -> 30 (ts-jest 29.4, @types/jest 30), supertest 7,
@types/node 24 declared explicitly in every package to keep a single
hoisted copy.
Verified: workspace builds, all unit tests (68) and the e2e project
pass on Node 22; the 4 Resident Card e2e tests that need to fetch the
w3id.org JSON-LD context are environment-limited locally and covered
in CI. App boots, seeds DIDs, serves Swagger, 404 middleware wildcard
works on Express 5.
Known follow-up: @nestjs/swagger warns about the duplicate
ExchangeResponseDto class name (exchanges vs workflows modules); it
becomes an error in swagger v12.
Part of #57
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: John Henderson <jrhender@users.noreply.github.com>
jrhender
force-pushed
the
chore/pnpm-workspaces-node22
branch
from
July 3, 2026 13:18
57f8efe to
354d97e
Compare
jrhender
force-pushed
the
chore/ts5-nestjs11-jest30
branch
from
July 3, 2026 13:18
a7d0da9 to
5d25207
Compare
Express 5 no longer defaults req.body to {} for bodyless requests (the
behaviour also varies with the Node version of the HTTP client). The VC
API spec allows starting/re-entering an exchange by posting an empty
body, which crashed the exchange participation endpoints with
"Cannot read properties of undefined" (caught by the Resident Card
workflow e2e test in CI on Node 22).
Registered as an AppModule middleware so it applies to the production
app and to test apps built directly from AppModule.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: John Henderson <jrhender@users.noreply.github.com>
jrhender
force-pushed
the
chore/ts5-nestjs11-jest30
branch
from
July 3, 2026 13:39
5d25207 to
a3e8ce4
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Second of five stacked PRs for #57 (stacked on #58).
module/moduleResolution: nodenextandtarget: es2022.nodenextis what later allows type-checkedrequire()of the ESM-only Credo 0.6+ packages.skipLibCheckadded to the root tsconfig (the app and e2e tsconfigs already had it), which also makes the@peculiar/*pins from chore: replace Rush with pnpm workspaces and move to Node 22 #58 unnecessary — removed.@nestjs/config^4,@nestjs/typeorm^11,@nestjs/swagger^11,@nestjs/axios^4,@nestjs/serve-static^5,reflect-metadata^0.2. Express 5 needs the'{*splat}'middleware wildcard instead of'*', andConfigModule.forRootcan now return aPromise<DynamicModule>.@nestjs/swagger11 requiresadditionalPropertieson'object'-typed@ApiPropertydeclarations;openapi.jsonregenerated (operationIds gain a_v1suffix; no path or schema changes).Known follow-up:
@nestjs/swaggerwarns about the duplicateExchangeResponseDtoclass name (exchanges vs workflows modules); it becomes an error in swagger v12.Verification
Part of #57
🤖 Generated with Claude Code