Skip to content

fix(v28): simpler call for descriptors#3301

Merged
RobinTail merged 1 commit intomake-v28from
fix-simpler-call-descriptors
Apr 6, 2026
Merged

fix(v28): simpler call for descriptors#3301
RobinTail merged 1 commit intomake-v28from
fix-simpler-call-descriptors

Conversation

@RobinTail
Copy link
Copy Markdown
Owner

@RobinTail RobinTail commented Apr 6, 2026

simple improvement

@RobinTail RobinTail added this to the v28 milestone Apr 6, 2026
@RobinTail RobinTail added the refactoring The better way to achieve the same result label Apr 6, 2026
@RobinTail RobinTail changed the base branch from master to make-v28 April 6, 2026 18:54
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 6, 2026

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

This major version release (v27→v28-beta) introduces breaking changes to the createConfig() API with property renames (wrongMethodBehaviorhintAllowedMethods, methodLikeRouteBehaviorrecognizeMethodDependentRoutes), drops Node.js 20 support, replaces unrun with direct node execution, systematically adds explicit .ts file extensions to all imports, and converts numerous imports to type-only semantics with corresponding TypeScript compiler configuration updates.

Changes

Cohort / File(s) Summary
Version & Dependencies Bump
CHANGELOG.md, SECURITY.md, express-zod-api/package.json, migration/package.json, zod-plugin/CHANGELOG.md, zod-plugin/package.json
Version bumped to v28.0.0-beta.x; Node.js engine constraints narrowed to ^22.19.0 || ^24.0.0; undici, eslint, typescript-eslint dependencies updated.
Configuration API Breaking Changes
express-zod-api/src/config-type.ts, express-zod-api/src/routing-walker.ts, express-zod-api/src/routing.ts, express-zod-api/src/documentation.ts, migration/index.ts, migration/index.spec.ts
Renamed CommonConfig properties: wrongMethodBehavior (404|405) → hintAllowedMethods (boolean); methodLikeRouteBehavior ("method"|"path") → recognizeMethodDependentRoutes (boolean). Updated routing logic, migration rules, and tests to reflect new config semantics.
TypeScript File Extension Resolution
example/*, cjs-test/tsconfig.json, compat-test/quick-start.spec.ts, esm-test/quick-start.spec.ts, express-zod-api/tsdown.config.ts, migration/tsdown.config.ts, tools/license.ts, tools/make-tests.ts, tsconfig.json, zod-plugin/tsdown.config.ts
Added explicit .ts extensions to local module imports; updated tsconfig base from node20 to node22; enabled allowImportingTsExtensions and verbatimModuleSyntax compiler options; updated JSON import assertions.
Type-Only Imports Refactoring
express-zod-api/src/...ts (builtin-logger, common-helpers, config-type, deep-checks, diagnostics, documentation-helpers, documentation, endpoint, endpoints-factory, errors, graceful-helpers, integration-base, integration, json-schema-helpers, last-resort, middleware, result-handler, result-helpers, routing-walker, routing, server-helpers, server, sse, testing, zts-helpers, zts), express-zod-api/tests/...spec.ts (builtin-logger, common-helpers, config-type, deep-checks, documentation-helpers, documentation, endpoints-factory, index, integration, io-schema, logger-helpers, method, result-handler, routing, server-helpers, server, sse, system, testing, zts), example/middlewares.ts, issue952-test/tags.ts, README.md
Converted numerous imports to type-only syntax (import type) across ~70 files to eliminate runtime dependencies and improve tree-shaking; affected imports include Express types, internal config/routing types, and middleware/handler interfaces.
Build System & Script Execution
.github/workflows/...yml, example/package.json, package.json, migration/package.json, zod-plugin/package.json
Replaced unrun tool invocations with direct node execution in npm scripts and GitHub Actions workflows; removed unrun from dev dependencies; updated build scripts from tsdown --config-loader unrun to tsdown.
Promise API Modernization
express-zod-api/src/graceful-helpers.ts, express-zod-api/src/middleware.ts, express-zod-api/tests/graceful-shutdown.spec.ts
Refactored Promise construction from new Promise((resolve, reject) => ...) to Promise.withResolvers<T>() pattern in async helper functions.
Workflow & CI Trigger Updates
.github/workflows/codeql-analysis.yml, .github/workflows/headers.yml, .github/workflows/node.js.yml
Updated GitHub Actions branch triggers: removed v23, added v27 and make-v28; changed headers.ts command from pnpm unrun to pnpm node; narrowed Node.js test matrix to 22.19.0 and 24.0.0 only.
ESLint & Linting Configuration
eslint.config.js, compat-test/eslint.config.js, migration/README.md, package.json, pnpm-workspace.yaml
Updated ESLint from v9 to v10; enabled no-duplicate-imports rule globally; updated migration rule reference from migration/v27 to migration/v28; adjusted publicHoistPattern and updated typescript-eslint versions.
Documentation & Test Updates
README.md, compat-test/package.json, compat-test/migration.spec.ts, example/index.spec.ts, example/generate-documentation.ts, example/generate-client.ts
Updated README examples to use type-only imports and new config property names; adjusted migration test fixtures to validate property renaming; updated compat/example test setup with new module resolution patterns.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

  • #2939: Implements the same config property renaming (wrongMethodBehavior/methodLikeRouteBehaviorhintAllowedMethods/recognizeMethodDependentRoutes) and related routing/migration logic updates that form the core API changes in this PR.
  • #2889: Migrates the build system from tsup to tsdown, including tsdown.config updates and build script changes that are applied across multiple packages in this PR.
  • #3080: Implements systematic addition of explicit .ts file extensions to import specifiers across the codebase and related TypeScript compiler configuration changes matching this PR's module-resolution updates.

Suggested labels

breaking, CI/CD, documentation


🐰 A hop, skip, and a type-safe leap,
v28's config now runs deep,
With .ts imports clear,
And types holding dear,
Breaking changes for a brighter sweep! 🚀

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Title check ⚠️ Warning The title mentions only a minor refactoring detail ('simpler call for descriptors') but the PR makes extensive changes including version bumps (v27→v28), breaking API changes to createConfig(), TypeScript import optimizations, Node.js version constraints, and migration tooling updates. Revise the title to reflect the main purpose, such as 'chore(v28): major version release with config API updates and build optimizations' or similar to accurately represent the comprehensive scope of changes.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix-simpler-call-descriptors

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@socket-security

This comment was marked as outdated.

Copy link
Copy Markdown
Contributor

@pullfrog pullfrog Bot left a comment

Choose a reason for hiding this comment

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

Reviewed — no issues found.

Pullfrog  | View workflow run | Using Claude Opus𝕏

@coveralls-official
Copy link
Copy Markdown

Coverage Status

coverage: 100.0%. remained the same — fix-simpler-call-descriptors into make-v28

@RobinTail RobinTail merged commit c4603d4 into make-v28 Apr 6, 2026
11 of 12 checks passed
@RobinTail RobinTail deleted the fix-simpler-call-descriptors branch April 6, 2026 18:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactoring The better way to achieve the same result

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant