Skip to content

build: migrate from tsc to tsdown - #2448

Merged
dinwwwh merged 1 commit into
mainfrom
claude/charming-lamport-1i70iz
Nov 9, 2026
Merged

dinwwwh merged 1 commit into
mainfrom
claude/charming-lamport-1i70iz

Conversation

@dinwwwh

@dinwwwh dinwwwh commented Nov 9, 2026 •

Copy link
Copy Markdown
Member

Why

Builds move from per-package tsc to tsdown, driven by one shared config at the root. Output keeps tsc's shape (one .js and .d.ts per source module), so publishConfig.exports and sideEffects stay as they are. Same migration as middleapi/standard-server#188 and middleapi/openapi-spec#395, which use a simpler config.

Changes

  • One root tsdown.config.ts. tsdown finds it from each package directory, so every prepack is just tsdown. Entries come from each package's exports. unbundle keeps one file per module; relative imports like ../package.json are still bundled in (@orpc/opentelemetry inlines only name and version), and packages stay external.
  • Declarations come from oxc (dts: { generator: 'oxc' }). The tsgo generator drops the DecoratedProcedure import from @orpc/effect's extensions/effect.d.ts, because it is used only inside a declare module '@orpc/server' augmentation. That is the bug reported in oRPC v2 migration feedback: what hurt, and what should change before stable? #2446 (comment 19474307). oxc needs explicit types on exports. Only @orpc/shared's regex constants lacked them; a missing annotation now fails the build.
  • Re-exports stay tree-shakeable. Rolldown writes re-exports as import { a } from 'x'; export { a }, which Expo's tree shaking can't see through (the problem behind build: migrate from unbuild to obuild transform mode #2362). A small renderChunk hook in the config turns them back into export { a } from 'x', in the import's position so evaluation order is unchanged. tsdown and rolldown have no option for this.
  • Undeclared imports fail the build. deps.onlyImport lists each package's dependencies and peerDependencies plus the runtime modules (bun, bun:*, node:*, cloudflare:*). Any .js or .d.ts in dist that imports something else fails the build, including CommonJS-only packages and type-only imports.
  • Runtime modules are marked external through rolldown's external option, using the same list. neverBundle: true keeps Node built-ins and npm-style names as written, but other prefix: modules (e.g. cloudflare:workers) fall through to resolution and warn that they can't be resolved.
  • Bundler module resolution. The root tsconfig uses module: preserve with moduleResolution: bundler, and the .ts/.tsx extension is dropped from relative imports across packages, tests, benches and the docs site. dist still imports with .js extensions. verbatimModuleSyntax stays: without it pnpm check misses type-only re-exports, which then only fail at build time.
  • Cleanup and bumps. The emit-only options in tsconfig.lib.json and the bun/cloudflare/nest tsconfig.build.json files are gone. oxlint, oxlint-tsgolint, oxfmt and @orpc/nest's @oxc-project/runtime are bumped.
  • JSDoc kept under oxc. ORPCModule is written as export @Module({}) class, since oxc drops a class's JSDoc that sits above its decorators. TmpFile.path is now a documented field rather than a documented constructor parameter.

Verification

  • pnpm check, pnpm test and pnpm docs:validate pass, and all 29 packages build without warnings.
  • Every relative import in dist resolves, and every publishConfig.exports and sideEffects path exists.
  • The emitted declarations type-check for a nodenext consumer with skipLibCheck: false.
  • oRPC v2 migration feedback: what hurt, and what should change before stable? #2446 reproduction, built against dist: with tsgo declarations, a missing required context and a wrong input type both compile. With oxc both are rejected, matching the source types.
  • Declaration diff, tsgo vs oxc: the same 312 files, 295 identical apart from formatting. The rest differ only in kept override modifiers, quoted member names, and three file-level comments in json-schema that aren't attached to any declaration.
  • Re-export hook: it rewrites 44 of 309 .js files and no .d.ts. Loading each rewritten file in Node gives the same export names and value types as a build without the hook.
  • onlyImport: adding an undeclared valibot (runtime and type-only) or change-case import to @orpc/zod fails the build with … is imported in index.js but is not included in deps.onlyImport option. A bun:sqlite import in @orpc/bun builds cleanly and stays an import.
  • Expo SDK 58 (Android export, EXPO_UNSTABLE_TREE_SHAKING=1), importing only OpenAPILink and the client:
Build Bundle Server-only markers
tsc (beta.49) 1,024,626 B 0/12
tsdown, no hook 1,109,354 B 12/12
this PR 1,027,558 B 0/12

Behavior changes

  • dist no longer contains empty .js files for type-only modules, nor .d.ts files that no public type refers to (for example router-hidden.d.ts). Nothing imports them.
  • Declarations no longer contain non-JSDoc comments.
  • @orpc/nest bundles its decorator helpers under dist/_virtual/_@oxc-project_runtime@0.157.0/….

🤖 Generated with Claude Code

https://claude.ai/code/session_01VVaw7RpPRpasxuSAB8fbND

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
orpc 8b607e9 Commit Preview URL

Branch Preview URL
Nov 09 2026, 06:56 AM

@coderabbitai

coderabbitai Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 722 files, which is 422 over the limit of 300.

To get a review, reduce the PR to 300 files or fewer by splitting it into smaller PRs or changing its base branch.

Usage-priced reviews support at most 300 files.

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: f92b9769-7b0c-49b5-b422-11337f6f7d46
Commits

Reviewing files that changed from the base of the PR and between e60dd33 and 8b607e9.

Files ignored due to path filters: 1

  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
Files selected for processing: 722

  • .github/workflows/codspeed.yaml
  • apps/content/blume.config.ts
  • apps/content/sponsors/ads.ts
  • apps/content/sponsors/client.ts
  • apps/content/sponsors/data.ts
  • apps/content/tsconfig.json
  • benches/openapi-link-handler.bench.ts
  • benches/openapi-serializer.bench.ts
  • benches/rpc-link-handler.bench.ts
  • benches/rpc-serializer.bench.ts
  • benches/static-file-handler.bench.ts
  • package.json
  • packages/ai-sdk/package.json
  • packages/ai-sdk/src/index.test.ts
  • packages/ai-sdk/src/index.ts
  • packages/ai-sdk/src/tool-meta.test-d.ts
  • packages/ai-sdk/src/tool-meta.test.ts
  • packages/ai-sdk/src/tool-meta.ts
  • packages/ai-sdk/src/tool.test-d.ts
  • packages/ai-sdk/src/tool.test.ts
  • packages/ai-sdk/src/tool.ts
  • packages/arktype/package.json
  • packages/arktype/src/converter.test.ts
  • packages/arktype/src/index.test.ts
  • packages/arktype/src/index.ts
  • packages/bun/package.json
  • packages/bun/src/index.test.ts
  • packages/bun/src/index.ts
  • packages/bun/src/redis-lock.test.ts
  • packages/bun/src/redis-publisher.test.ts
  • packages/bun/src/redis-ratelimit.test.ts
  • packages/bun/tests/lock-redis-adapters-compatibility.test.ts
  • packages/bun/tests/publisher-redis-adapters-compatibility.test.ts
  • packages/bun/tests/ratelimit-redis-adapters-compatibility.test.ts
  • packages/bun/tests/rpc/__shared__/client-server.bun-fetch.ts
  • packages/bun/tests/rpc/__shared__/client-server.bun-websocket.ts
  • packages/bun/tests/rpc/__shared__/client-server.compression-bun-fetch.ts
  • packages/bun/tests/rpc/__shared__/client-server.compression-bun-websocket.ts
  • packages/bun/tests/rpc/cancel-and-abort.test.ts
  • packages/bun/tests/rpc/data-transfer.test.ts
  • packages/bun/tsconfig.build.json
  • packages/client/package.json
  • packages/client/src/adapters/fetch/index.test.ts
  • packages/client/src/adapters/fetch/index.ts
  • packages/client/src/adapters/fetch/rpc-link.test-d.ts
  • packages/client/src/adapters/fetch/rpc-link.test.ts
  • packages/client/src/adapters/fetch/rpc-link.ts
  • packages/client/src/adapters/fetch/transport.ts
  • packages/client/src/adapters/message-port/index.test.ts
  • packages/client/src/adapters/message-port/index.ts
  • packages/client/src/adapters/message-port/message-port.test.ts
  • packages/client/src/adapters/message-port/rpc-link.test.ts
  • packages/client/src/adapters/message-port/rpc-link.ts
  • packages/client/src/adapters/message-port/transport.ts
  • packages/client/src/adapters/standard/codec.ts
  • packages/client/src/adapters/standard/index.test.ts
  • packages/client/src/adapters/standard/index.ts
  • packages/client/src/adapters/standard/link.test.ts
  • packages/client/src/adapters/standard/link.ts
  • packages/client/src/adapters/standard/plugin.test.ts
  • packages/client/src/adapters/standard/plugin.ts
  • packages/client/src/adapters/standard/rpc-link-codec.test.ts
  • packages/client/src/adapters/standard/rpc-link-codec.ts
  • packages/client/src/adapters/standard/transport.ts
  • packages/client/src/adapters/websocket/index.test.ts
  • packages/client/src/adapters/websocket/index.ts
  • packages/client/src/adapters/websocket/rpc-link.test.ts
  • packages/client/src/adapters/websocket/rpc-link.ts
  • packages/client/src/adapters/websocket/transport.ts
  • packages/client/src/async-iterator-object.test.ts
  • packages/client/src/client-safe.test-d.ts
  • packages/client/src/client-safe.test.ts
  • packages/client/src/client-safe.ts
  • packages/client/src/client.test-d.ts
  • packages/client/src/client.test.ts
  • packages/client/src/client.ts
  • packages/client/src/dynamic-link.test-d.ts
  • packages/client/src/dynamic-link.test.ts
  • packages/client/src/dynamic-link.ts
  • packages/client/src/error-utils.test-d.ts
  • packages/client/src/error-utils.test.ts
  • packages/client/src/error-utils.ts
  • packages/client/src/error.test-d.ts
  • packages/client/src/error.test.ts
  • packages/client/src/index.test.ts
  • packages/client/src/index.ts
  • packages/client/src/plugins/batch.test.ts
  • packages/client/src/plugins/batch.ts
  • packages/client/src/plugins/cookie-jar.test.ts
  • packages/client/src/plugins/cookie-jar.ts
  • packages/client/src/plugins/dedupe.test.ts
  • packages/client/src/plugins/dedupe.ts
  • packages/client/src/plugins/index.test.ts
  • packages/client/src/plugins/index.ts
  • packages/client/src/plugins/request-compression.test.ts
  • packages/client/src/plugins/request-compression.ts
  • packages/client/src/plugins/response-compression.test.ts
  • packages/client/src/plugins/response-compression.ts
  • packages/client/src/plugins/retry-after.test.ts
  • packages/client/src/plugins/retry-after.ts
  • packages/client/src/plugins/retry.test.ts
  • packages/client/src/plugins/retry.ts
  • packages/client/src/plugins/timeout.test.ts
  • packages/client/src/plugins/timeout.ts
  • packages/client/src/rpc-json-serializer.test.ts
  • packages/client/src/rpc-serializer.test.ts
  • packages/client/src/rpc-serializer.ts
  • packages/client/src/types.test-d.ts
  • packages/client/src/utils.test-d.ts
  • packages/client/src/utils.test.ts
  • packages/client/src/utils.ts
  • packages/cloudflare/package.json
  • packages/cloudflare/src/index.test.ts
  • packages/cloudflare/src/index.ts
  • packages/cloudflare/src/lock-object.test.ts
  • packages/cloudflare/src/lock.test.ts
  • packages/cloudflare/src/publisher.test.ts
  • packages/cloudflare/src/ratelimit.test.ts
  • packages/cloudflare/src/tracer.test.ts
  • packages/cloudflare/tests/__shared__/main.ts
  • packages/cloudflare/tsconfig.build.json
  • packages/contract/package.json
  • packages/contract/src/builder-variants.test-d.ts
  • packages/contract/src/builder-variants.ts
  • packages/contract/src/builder.test-d.ts
  • packages/contract/src/builder.test.ts
  • packages/contract/src/builder.ts
  • packages/contract/src/client-factory.test-d.ts
  • packages/contract/src/client-factory.test.ts
  • packages/contract/src/client-factory.ts
  • packages/contract/src/error-factory.test-d.ts
  • packages/contract/src/error-factory.test.ts
  • packages/contract/src/error-factory.ts
  • packages/contract/src/error-utils.test-d.ts
  • packages/contract/src/error-utils.test.ts
  • packages/contract/src/error-utils.ts
  • packages/contract/src/error.test-d.ts
  • packages/contract/src/error.test.ts
  • packages/contract/src/error.ts
  • packages/contract/src/index.test.ts
  • packages/contract/src/index.ts
  • packages/contract/src/meta-built-in.test.ts
  • packages/contract/src/meta-built-in.ts
  • packages/contract/src/meta-utils.test.ts
  • packages/contract/src/meta-utils.ts
  • packages/contract/src/meta.test.ts
  • packages/contract/src/meta.ts
  • packages/contract/src/plugins/index.test.ts
  • packages/contract/src/plugins/index.ts
  • packages/contract/src/plugins/request-validation.test.ts
  • packages/contract/src/plugins/request-validation.ts
  • packages/contract/src/plugins/response-validation.test.ts
  • packages/contract/src/plugins/response-validation.ts
  • packages/contract/src/procedure-client.test-d.ts
  • packages/contract/src/procedure-client.ts
  • packages/contract/src/procedure.test.ts
  • packages/contract/src/procedure.ts
  • packages/contract/src/router-client.test-d.ts
  • packages/contract/src/router-client.ts
  • packages/contract/src/router-utils.test-d.ts
  • packages/contract/src/router-utils.test.ts
  • packages/contract/src/router-utils.ts
  • packages/contract/src/router.test-d.ts
  • packages/contract/src/router.ts
  • packages/contract/src/schema-built-in.test.ts
  • packages/contract/src/schema-built-in.ts
  • packages/contract/src/schema-utils.test.ts
  • packages/contract/src/schema-utils.ts
  • packages/contract/src/schema.test-d.ts
  • packages/effect/package.json
  • packages/effect/src/client.test-d.ts
  • packages/effect/src/client.test.ts
  • packages/effect/src/context.test-d.ts
  • packages/effect/src/converter.test.ts
  • packages/effect/src/error.test-d.ts
  • packages/effect/src/error.test.ts
  • packages/effect/src/extensions/effect.test-d.ts
  • packages/effect/src/extensions/effect.test.ts
  • packages/effect/src/extensions/effect.ts
  • packages/effect/src/extensions/schema.test-d.ts
  • packages/effect/src/extensions/schema.test.ts
  • packages/effect/src/extensions/schema.ts
  • packages/effect/src/handler.test-d.ts
  • packages/effect/src/handler.test.ts
  • packages/effect/src/handler.ts
  • packages/effect/src/index.test.ts
  • packages/effect/src/index.ts
  • packages/effect/src/middleware.test-d.ts
  • packages/effect/src/middleware.test.ts
  • packages/effect/src/middleware.ts
  • packages/effect/src/runtime.test.ts
  • packages/effect/src/schema.test.ts
  • packages/evlog/package.json
  • packages/evlog/src/adapters/node.test.ts
  • packages/evlog/src/context.test.ts
  • packages/evlog/src/handler-plugin.test.ts
  • packages/evlog/src/handler-plugin.ts
  • packages/evlog/src/index.test.ts
  • packages/evlog/src/index.ts
  • packages/hibernation/package.json
  • packages/hibernation/src/encode-event.test.ts
  • packages/hibernation/src/handler-plugin.test.ts
  • packages/hibernation/src/index.test.ts
  • packages/hibernation/src/index.ts
  • packages/json-schema/package.json
  • packages/json-schema/src/coercer.test.ts
  • packages/json-schema/src/coercer.ts
  • packages/json-schema/src/composition-utils.test.ts
  • packages/json-schema/src/composition-utils.ts
  • packages/json-schema/src/constants.ts
  • packages/json-schema/src/convert.test.ts
  • packages/json-schema/src/convert.ts
  • packages/json-schema/src/index.test.ts
  • packages/json-schema/src/index.ts
  • packages/json-schema/src/ref-utils.test.ts
  • packages/json-schema/src/ref-utils.ts
  • packages/json-schema/src/smart-coercion-handler-plugin.test.ts
  • packages/json-schema/src/smart-coercion-handler-plugin.ts
  • packages/json-schema/src/smart-coercion-link-plugin.test.ts
  • packages/json-schema/src/smart-coercion-link-plugin.ts
  • packages/json-schema/src/standard-json-schema-converter.test.ts
  • packages/json-schema/src/standard-json-schema-converter.ts
  • packages/json-schema/src/utils.test.ts
  • packages/json-schema/src/utils.ts
  • packages/lock/package.json
  • packages/lock/src/adapters/base-redis.ts
  • packages/lock/src/adapters/memory.test.ts
  • packages/lock/src/adapters/memory.ts
  • packages/lock/src/adapters/redis.test.ts
  • packages/lock/src/adapters/redis.ts
  • packages/lock/src/adapters/upstash.test.ts
  • packages/lock/src/adapters/upstash.ts
  • packages/lock/src/index.test.ts
  • packages/lock/src/index.ts
  • packages/lock/src/middleware.test-d.ts
  • packages/lock/src/middleware.test.ts
  • packages/lock/src/middleware.ts
  • packages/lock/tests/e2e.test.ts
  • packages/mcp/package.json
  • packages/mcp/src/__tests__/utils.ts
  • packages/mcp/src/index.test.ts
  • packages/mcp/src/index.ts
  • packages/mcp/src/meta.test-d.ts
  • packages/mcp/src/meta.test.ts
  • packages/mcp/src/registrar.test-d.ts
  • packages/mcp/src/registrar.test.ts
  • packages/mcp/src/registrar.ts
  • packages/mcp/src/utils.test.ts
  • packages/msw/package.json
  • packages/msw/src/http-procedure-utils.openapi.test.ts
  • packages/msw/src/http-procedure-utils.test-d.ts
  • packages/msw/src/http-procedure-utils.test.ts
  • packages/msw/src/http-router-utils.test-d.ts
  • packages/msw/src/http-router-utils.test.ts
  • packages/msw/src/http-router-utils.ts
  • packages/msw/src/index.test.ts
  • packages/msw/src/index.ts
  • packages/nest/package.json
  • packages/nest/src/implement.test-d.ts
  • packages/nest/src/implement.test.ts
  • packages/nest/src/implement.ts
  • packages/nest/src/index.test.ts
  • packages/nest/src/index.ts
  • packages/nest/src/module.test.ts
  • packages/nest/src/module.ts
  • packages/nest/tsconfig.build.json
  • packages/next/package.json
  • packages/next/src/deferred-interceptors.test.ts
  • packages/next/src/extensions/actionable.test-d.ts
  • packages/next/src/extensions/actionable.test.ts
  • packages/next/src/extensions/actionable.ts
  • packages/next/src/hooks/index.test.ts
  • packages/next/src/hooks/index.ts
  • packages/next/src/hooks/optimistic-server-function.test-d.ts
  • packages/next/src/hooks/optimistic-server-function.test.tsx
  • packages/next/src/hooks/optimistic-server-function.ts
  • packages/next/src/hooks/server-function.test-d.ts
  • packages/next/src/hooks/server-function.test.tsx
  • packages/next/src/hooks/server-function.ts
  • packages/next/src/index.test.ts
  • packages/next/src/index.ts
  • packages/next/src/server-form-function.test.ts
  • packages/next/src/server-form-functionable.test-d.ts
  • packages/next/src/server-form-functionable.test.ts
  • packages/next/src/server-form-functionable.ts
  • packages/next/src/server-function.action-state.test.tsx
  • packages/next/src/server-function.test-d.ts
  • packages/next/src/server-function.test.ts
  • packages/next/src/server-functionable.test-d.ts
  • packages/next/src/server-functionable.test.ts
  • packages/next/src/server-functionable.ts
  • packages/node/package.json
  • packages/node/src/batch-response-compression-handler-plugin.test.ts
  • packages/node/src/index.ts
  • packages/node/src/multipart.test.ts
  • packages/node/src/static-file-handler-plugin.test.ts
  • packages/node/src/tmp-file-upload-handler-plugin.test.ts
  • packages/node/src/tmp-file-upload-handler-plugin.ts
  • packages/node/tests/serves-static-files.test.ts
  • packages/node/tests/uploads-large-files.test.ts
  • packages/node/tests/works-with-response-compression.test.ts
  • packages/openapi/package.json
  • packages/openapi/src/adapters/aws-lambda/index.test.ts
  • packages/openapi/src/adapters/aws-lambda/index.ts
  • packages/openapi/src/adapters/aws-lambda/openapi-handler.test.ts
  • packages/openapi/src/adapters/aws-lambda/openapi-handler.ts
  • packages/openapi/src/adapters/fastify/index.test.ts
  • packages/openapi/src/adapters/fastify/index.ts
  • packages/openapi/src/adapters/fastify/openapi-handler.test.ts
  • packages/openapi/src/adapters/fastify/openapi-handler.ts
  • packages/openapi/src/adapters/fetch/index.test.ts
  • packages/openapi/src/adapters/fetch/index.ts
  • packages/openapi/src/adapters/fetch/openapi-handler.test.ts
  • packages/openapi/src/adapters/fetch/openapi-handler.ts
  • packages/openapi/src/adapters/fetch/openapi-link.test.ts
  • packages/openapi/src/adapters/fetch/openapi-link.ts
  • packages/openapi/src/adapters/node/index.test.ts
  • packages/openapi/src/adapters/node/index.ts
  • packages/openapi/src/adapters/node/openapi-handler.test.ts
  • packages/openapi/src/adapters/node/openapi-handler.ts
  • packages/openapi/src/adapters/standard/index.test.ts
  • packages/openapi/src/adapters/standard/index.ts
  • packages/openapi/src/adapters/standard/openapi-handler-codec.test.ts
  • packages/openapi/src/adapters/standard/openapi-handler-codec.ts
  • packages/openapi/src/adapters/standard/openapi-link-codec.test.ts
  • packages/openapi/src/adapters/standard/openapi-link-codec.ts
  • packages/openapi/src/adapters/standard/openapi-matcher.test.ts
  • packages/openapi/src/adapters/standard/openapi-matcher.ts
  • packages/openapi/src/adapters/standard/utils.test.ts
  • packages/openapi/src/adapters/standard/utils.ts
  • packages/openapi/src/bracket-notation.test.ts
  • packages/openapi/src/client-factory.test-d.ts
  • packages/openapi/src/client-factory.test.ts
  • packages/openapi/src/client-factory.ts
  • packages/openapi/src/constants.test.ts
  • packages/openapi/src/extensions/route.test.ts
  • packages/openapi/src/extensions/route.ts
  • packages/openapi/src/helpers/form-data.test.ts
  • packages/openapi/src/helpers/form-data.ts
  • packages/openapi/src/helpers/index.test.ts
  • packages/openapi/src/helpers/index.ts
  • packages/openapi/src/index.test.ts
  • packages/openapi/src/index.ts
  • packages/openapi/src/meta.test.ts
  • packages/openapi/src/meta.ts
  • packages/openapi/src/openapi-generator-components.test.ts
  • packages/openapi/src/openapi-generator-components.ts
  • packages/openapi/src/openapi-generator-operation.test.ts
  • packages/openapi/src/openapi-generator-operation.ts
  • packages/openapi/src/openapi-generator.test-d.ts
  • packages/openapi/src/openapi-generator.test.ts
  • packages/openapi/src/openapi-generator.ts
  • packages/openapi/src/openapi-json-serializer.test-d.ts
  • packages/openapi/src/openapi-json-serializer.test.ts
  • packages/openapi/src/openapi-serializer.test.ts
  • packages/openapi/src/openapi-serializer.ts
  • packages/openapi/src/plugins/index.test.ts
  • packages/openapi/src/plugins/index.ts
  • packages/openapi/src/plugins/openapi-reference.test.ts
  • packages/openapi/src/plugins/openapi-reference.ts
  • packages/openapi/src/router-utils.test.ts
  • packages/openapi/src/router-utils.ts
  • packages/openapi/src/types.test-d.ts
  • packages/openapi/src/utils.test.ts
  • packages/openapi/tests/openapi-generator/composed-schemas.test.ts
  • packages/openapi/tests/openapi-generator/crud.test.ts
  • packages/openapi/tests/openapi-generator/detailed-http.test.ts
  • packages/openapi/tests/openapi-generator/event-streaming.test.ts
  • packages/openapi/tests/openapi-generator/file-transfer.test.ts
  • packages/openapi/tests/openapi-generator/reusable-components.test.ts
  • packages/openapi/tests/openapi-generator/schema-libraries.test.ts
  • packages/openapi/tests/openapi-generator/typed-errors.test.ts
  • packages/opentelemetry/package.json
  • packages/opentelemetry/src/index.ts
  • packages/opentelemetry/src/instrumentation.test.ts
  • packages/opentelemetry/src/instrumentation.ts
  • packages/opentelemetry/src/tracer.no-context-manager.test.ts
  • packages/opentelemetry/src/tracer.test.ts
  • packages/pinia-colada/package.json
  • packages/pinia-colada/src/contract-utils.test-d.ts
  • packages/pinia-colada/src/contract-utils.test.ts
  • packages/pinia-colada/src/contract-utils.ts
  • packages/pinia-colada/src/index.test.ts
  • packages/pinia-colada/src/index.ts
  • packages/pinia-colada/src/key.test.ts
  • packages/pinia-colada/src/key.ts
  • packages/pinia-colada/src/live-query.test.tsx
  • packages/pinia-colada/src/live-query.ts
  • packages/pinia-colada/src/meta.test-d.ts
  • packages/pinia-colada/src/meta.test.ts
  • packages/pinia-colada/src/meta.ts
  • packages/pinia-colada/src/plugin.test.ts
  • packages/pinia-colada/src/plugin.ts
  • packages/pinia-colada/src/procedure-utils.test-d.ts
  • packages/pinia-colada/src/procedure-utils.test.ts
  • packages/pinia-colada/src/procedure-utils.ts
  • packages/pinia-colada/src/router-utils.test-d.ts
  • packages/pinia-colada/src/router-utils.test.ts
  • packages/pinia-colada/src/router-utils.ts
  • packages/pinia-colada/src/shared-utils.test-d.ts
  • packages/pinia-colada/src/shared-utils.test.ts
  • packages/pinia-colada/src/shared-utils.ts
  • packages/pinia-colada/src/ssr.test.ts
  • packages/pinia-colada/src/ssr.ts
  • packages/pinia-colada/src/stream-query.test.tsx
  • packages/pinia-colada/src/stream-query.ts
  • packages/pinia-colada/src/types.ts
  • packages/pinia-colada/tests/__shared__/orpc.ts
  • packages/pinia-colada/tests/e2e.test-d.ts
  • packages/pinia-colada/tests/e2e.test.tsx
  • packages/pinia-colada/tests/ssr.test.tsx
  • packages/pino/package.json
  • packages/pino/src/context.test.ts
  • packages/pino/src/handler-plugin.test.ts
  • packages/pino/src/handler-plugin.ts
  • packages/pino/src/index.test.ts
  • packages/pino/src/index.ts
  • packages/publisher/package.json
  • packages/publisher/src/adapters/base-redis.ts
  • packages/publisher/src/adapters/memory.test.ts
  • packages/publisher/src/adapters/memory.ts
  • packages/publisher/src/adapters/redis.test.ts
  • packages/publisher/src/adapters/redis.ts
  • packages/publisher/src/adapters/upstash.test.ts
  • packages/publisher/src/adapters/upstash.ts
  • packages/publisher/src/index.test.ts
  • packages/publisher/src/index.ts
  • packages/publisher/src/publisher.test-d.ts
  • packages/publisher/src/publisher.test.ts
  • packages/publisher/tests/redis-adapters-compatibility.test.ts
  • packages/ratelimit/package.json
  • packages/ratelimit/src/adapters/base-redis.ts
  • packages/ratelimit/src/adapters/memory.test.ts
  • packages/ratelimit/src/adapters/memory.ts
  • packages/ratelimit/src/adapters/redis.test.ts
  • packages/ratelimit/src/adapters/redis.ts
  • packages/ratelimit/src/adapters/upstash.test.ts
  • packages/ratelimit/src/adapters/upstash.ts
  • packages/ratelimit/src/handler-plugin.test.ts
  • packages/ratelimit/src/handler-plugin.ts
  • packages/ratelimit/src/index.test.ts
  • packages/ratelimit/src/index.ts
  • packages/ratelimit/src/middleware.test-d.ts
  • packages/ratelimit/src/middleware.test.ts
  • packages/ratelimit/src/middleware.ts
  • packages/ratelimit/src/utils.ts
  • packages/ratelimit/tests/e2e.test.ts
  • packages/server/package.json
  • packages/server/src/adapters/aws-lambda/handler.ts
  • packages/server/src/adapters/aws-lambda/index.test.ts
  • packages/server/src/adapters/aws-lambda/index.ts
  • packages/server/src/adapters/aws-lambda/rpc-handler.test.ts
  • packages/server/src/adapters/aws-lambda/rpc-handler.ts
  • packages/server/src/adapters/crossws/handler.ts
  • packages/server/src/adapters/crossws/index.test.ts
  • packages/server/src/adapters/crossws/index.ts
  • packages/server/src/adapters/crossws/rpc-handler.test.ts
  • packages/server/src/adapters/crossws/rpc-handler.ts
  • packages/server/src/adapters/fastify/handler.ts
  • packages/server/src/adapters/fastify/index.test.ts
  • packages/server/src/adapters/fastify/index.ts
  • packages/server/src/adapters/fastify/rpc-handler.test.ts
  • packages/server/src/adapters/fastify/rpc-handler.ts
  • packages/server/src/adapters/fetch/handler.ts
  • packages/server/src/adapters/fetch/index.test.ts
  • packages/server/src/adapters/fetch/index.ts
  • packages/server/src/adapters/fetch/rpc-handler.test.ts
  • packages/server/src/adapters/fetch/rpc-handler.ts
  • packages/server/src/adapters/message-port/handler.ts
  • packages/server/src/adapters/message-port/index.test.ts
  • packages/server/src/adapters/message-port/index.ts
  • packages/server/src/adapters/message-port/rpc-handler.test.ts
  • packages/server/src/adapters/message-port/rpc-handler.ts
  • packages/server/src/adapters/node/handler.ts
  • packages/server/src/adapters/node/index.test.ts
  • packages/server/src/adapters/node/index.ts
  • packages/server/src/adapters/node/rpc-handler.test.ts
  • packages/server/src/adapters/node/rpc-handler.ts
  • packages/server/src/adapters/standard-peer/index.test.ts
  • packages/server/src/adapters/standard-peer/index.ts
  • packages/server/src/adapters/standard-peer/utils.test.ts
  • packages/server/src/adapters/standard-peer/utils.ts
  • packages/server/src/adapters/standard/codec.ts
  • packages/server/src/adapters/standard/handler.test.ts
  • packages/server/src/adapters/standard/handler.ts
  • packages/server/src/adapters/standard/index.test.ts
  • packages/server/src/adapters/standard/index.ts
  • packages/server/src/adapters/standard/plugin.test.ts
  • packages/server/src/adapters/standard/plugin.ts
  • packages/server/src/adapters/standard/rpc-handler-codec.test.ts
  • packages/server/src/adapters/standard/rpc-handler-codec.ts
  • packages/server/src/adapters/standard/rpc-matcher.test.ts
  • packages/server/src/adapters/standard/rpc-matcher.ts
  • packages/server/src/adapters/standard/utils.test.ts
  • packages/server/src/adapters/standard/utils.ts
  • packages/server/src/adapters/websocket/handler.test-d.ts
  • packages/server/src/adapters/websocket/handler.ts
  • packages/server/src/adapters/websocket/index.test.ts
  • packages/server/src/adapters/websocket/index.ts
  • packages/server/src/adapters/websocket/rpc-handler.test.ts
  • packages/server/src/adapters/websocket/rpc-handler.ts
  • packages/server/src/builder-variants.test-d.ts
  • packages/server/src/builder-variants.ts
  • packages/server/src/builder.test-d.ts
  • packages/server/src/builder.test.ts
  • packages/server/src/builder.ts
  • packages/server/src/constants.test.ts
  • packages/server/src/context.test-d.ts
  • packages/server/src/extensions/callable.test-d.ts
  • packages/server/src/extensions/callable.test.ts
  • packages/server/src/extensions/callable.ts
  • packages/server/src/helpers/base64url.test.ts
  • packages/server/src/helpers/cookie.test.ts
  • packages/server/src/helpers/encryption.test.ts
  • packages/server/src/helpers/encryption.ts
  • packages/server/src/helpers/index.test.ts
  • packages/server/src/helpers/index.ts
  • packages/server/src/helpers/signing.test.ts
  • packages/server/src/helpers/signing.ts
  • packages/server/src/implementer-procedure.test-d.ts
  • packages/server/src/implementer-procedure.test.ts
  • packages/server/src/implementer-procedure.ts
  • packages/server/src/implementer-router.test-d.ts
  • packages/server/src/implementer-router.test.ts
  • packages/server/src/implementer-router.ts
  • packages/server/src/implementer.test-d.ts
  • packages/server/src/implementer.test.ts
  • packages/server/src/implementer.ts
  • packages/server/src/index.test.ts
  • packages/server/src/index.ts
  • packages/server/src/lazy.test.ts
  • packages/server/src/middleware-decorated.test-d.ts
  • packages/server/src/middleware-decorated.test.ts
  • packages/server/src/middleware-decorated.ts
  • packages/server/src/middleware.test-d.ts
  • packages/server/src/middleware.ts
  • packages/server/src/plugins/batch.test.ts
  • packages/server/src/plugins/batch.ts
  • packages/server/src/plugins/cors.test.ts
  • packages/server/src/plugins/cors.ts
  • packages/server/src/plugins/get-method-csrf-protection.test.ts
  • packages/server/src/plugins/get-method-csrf-protection.ts
  • packages/server/src/plugins/head-method.test.ts
  • packages/server/src/plugins/head-method.ts
  • packages/server/src/plugins/index.test.ts
  • packages/server/src/plugins/index.ts
  • packages/server/src/plugins/method-override.test.ts
  • packages/server/src/plugins/method-override.ts
  • packages/server/src/plugins/request-compression.test.ts
  • packages/server/src/plugins/request-compression.ts
  • packages/server/src/plugins/request-headers.test.ts
  • packages/server/src/plugins/request-headers.ts
  • packages/server/src/plugins/request-limit.test.ts
  • packages/server/src/plugins/request-limit.ts
  • packages/server/src/plugins/response-compression.test.ts
  • packages/server/src/plugins/response-compression.ts
  • packages/server/src/plugins/response-headers.test.ts
  • packages/server/src/plugins/response-headers.ts
  • packages/server/src/plugins/rethrow.test.ts
  • packages/server/src/plugins/rethrow.ts
  • packages/server/src/plugins/signal-sync.test.ts
  • packages/server/src/plugins/signal-sync.ts
  • packages/server/src/plugins/timeout.test.ts
  • packages/server/src/plugins/timeout.ts
  • packages/server/src/procedure-client.test-d.ts
  • packages/server/src/procedure-client.test.ts
  • packages/server/src/procedure-client.ts
  • packages/server/src/procedure-decorated.test-d.ts
  • packages/server/src/procedure-decorated.test.ts
  • packages/server/src/procedure-decorated.ts
  • packages/server/src/procedure-utils.test-d.ts
  • packages/server/src/procedure-utils.test.ts
  • packages/server/src/procedure-utils.ts
  • packages/server/src/procedure.test.ts
  • packages/server/src/procedure.ts
  • packages/server/src/router-client.test-d.ts
  • packages/server/src/router-client.test.ts
  • packages/server/src/router-client.ts
  • packages/server/src/router-hidden.test.ts
  • packages/server/src/router-hidden.ts
  • packages/server/src/router-utils.test-d.ts
  • packages/server/src/router-utils.test.ts
  • packages/server/src/router-utils.ts
  • packages/server/src/router.test-d.ts
  • packages/server/src/router.ts
  • packages/shared/package.json
  • packages/shared/src/args.test-d.ts
  • packages/shared/src/args.test.ts
  • packages/shared/src/array.test.ts
  • packages/shared/src/bigint.test.ts
  • packages/shared/src/bigint.ts
  • packages/shared/src/buffer.test.ts
  • packages/shared/src/compare.test.ts
  • packages/shared/src/compare.ts
  • packages/shared/src/error.test.ts
  • packages/shared/src/function.test.ts
  • packages/shared/src/http.test.ts
  • packages/shared/src/id.test.ts
  • packages/shared/src/index.test.ts
  • packages/shared/src/index.ts
  • packages/shared/src/interceptor.test-d.ts
  • packages/shared/src/interceptor.test.ts
  • packages/shared/src/interceptor.ts
  • packages/shared/src/iterator.test-d.ts
  • packages/shared/src/iterator.test.ts
  • packages/shared/src/iterator.ts
  • packages/shared/src/object.test.ts
  • packages/shared/src/object.ts
  • packages/shared/src/plugin.test.ts
  • packages/shared/src/promise.test.ts
  • packages/shared/src/proxy.test.ts
  • packages/shared/src/proxy.ts
  • packages/shared/src/queue.test.ts
  • packages/shared/src/regex.test.ts
  • packages/shared/src/regex.ts
  • packages/shared/src/signal.test.ts
  • packages/shared/src/signal.ts
  • packages/shared/src/stream.test.ts
  • packages/shared/src/stream.ts
  • packages/shared/src/tracing.test.ts
  • packages/shared/src/tracing.ts
  • packages/shared/src/types.test-d.ts
  • packages/shared/src/value.test-d.ts
  • packages/shared/src/value.test.ts
  • packages/swr/package.json
  • packages/swr/src/index.test.ts
  • packages/swr/src/index.ts
  • packages/swr/src/key.test.ts
  • packages/swr/src/procedure-utils.test-d.ts
  • packages/swr/src/procedure-utils.test.ts
  • packages/swr/src/procedure-utils.ts
  • packages/swr/src/router-utils.test-d.ts
  • packages/swr/src/router-utils.test.ts
  • packages/swr/src/router-utils.ts
  • packages/swr/src/shared-utils.test-d.ts
  • packages/swr/src/shared-utils.test.ts
  • packages/swr/src/shared-utils.ts
  • packages/swr/src/types.ts
  • packages/swr/src/utils.test.ts
  • packages/swr/tests/__shared__/orpc.ts
  • packages/swr/tests/e2e.test-d.ts
  • packages/swr/tests/e2e.test.tsx
  • packages/tanstack-query/package.json
  • packages/tanstack-query/src/contract-utils.test-d.ts
  • packages/tanstack-query/src/contract-utils.test.ts
  • packages/tanstack-query/src/contract-utils.ts
  • packages/tanstack-query/src/index.test.ts
  • packages/tanstack-query/src/index.ts
  • packages/tanstack-query/src/key.test.ts
  • packages/tanstack-query/src/key.ts
  • packages/tanstack-query/src/live-query.test.ts
  • packages/tanstack-query/src/live-query.ts
  • packages/tanstack-query/src/meta.test-d.ts
  • packages/tanstack-query/src/meta.test.ts
  • packages/tanstack-query/src/meta.ts
  • packages/tanstack-query/src/plugin.test.ts
  • packages/tanstack-query/src/plugin.ts
  • packages/tanstack-query/src/procedure-utils.angular.test-d.ts
  • packages/tanstack-query/src/procedure-utils.react.test-d.ts
  • packages/tanstack-query/src/procedure-utils.solid.test-d.ts
  • packages/tanstack-query/src/procedure-utils.svelte.test-d.ts
  • packages/tanstack-query/src/procedure-utils.test-d.ts
  • packages/tanstack-query/src/procedure-utils.test.ts
  • packages/tanstack-query/src/procedure-utils.ts
  • packages/tanstack-query/src/procedure-utils.vue.test-d.ts
  • packages/tanstack-query/src/router-utils.test-d.ts
  • packages/tanstack-query/src/router-utils.test.ts
  • packages/tanstack-query/src/router-utils.ts
  • packages/tanstack-query/src/shared-utils.test-d.ts
  • packages/tanstack-query/src/shared-utils.test.ts
  • packages/tanstack-query/src/shared-utils.ts
  • packages/tanstack-query/src/ssr.test-d.ts
  • packages/tanstack-query/src/ssr.test.ts
  • packages/tanstack-query/src/ssr.ts
  • packages/tanstack-query/src/stream-query.test.ts
  • packages/tanstack-query/src/structural-sharing.test.ts
  • packages/tanstack-query/src/types.ts
  • packages/tanstack-query/tests/__shared__/orpc.tsx
  • packages/tanstack-query/tests/e2e.test-d.ts
  • packages/tanstack-query/tests/e2e.test.tsx
  • packages/trpc/package.json
  • packages/trpc/src/index.ts
  • packages/trpc/src/to-orpc-router.test-d.ts
  • packages/trpc/src/to-orpc-router.test.ts
  • packages/trpc/src/to-trpc-meta.test.ts
  • packages/valibot/package.json
  • packages/valibot/src/converter.test.ts
  • packages/valibot/src/index.test.ts
  • packages/valibot/src/index.ts
  • packages/zod/package.json
  • packages/zod/src/converter.test.ts
  • packages/zod/src/converter.ts
  • packages/zod/src/index.test.ts
  • packages/zod/src/index.ts
  • packages/zod/src/registries.test-d.ts
  • tests/batch/__shared__/client-server.compression-hono-fetch.ts
  • tests/batch/__shared__/client-server.compression-node-http.ts
  • tests/batch/__shared__/client-server.hono-fetch.ts
  • tests/batch/__shared__/client-server.node-http.ts
  • tests/batch/__shared__/client-server.ts
  • tests/batch/batch-plugin.test.ts
  • tests/openapi/__shared__/client-server.hono-fetch.ts
  • tests/openapi/__shared__/client-server.node-http.ts
  • tests/openapi/cancel-and-abort.test.ts
  • tests/openapi/data-transfer.test.ts
  • tests/rpc/__shared__/client-server.compression-crossws.ts
  • tests/rpc/__shared__/client-server.compression-hono-fetch.ts
  • tests/rpc/__shared__/client-server.compression-message-port-transfer.ts
  • tests/rpc/__shared__/client-server.compression-message-port.ts
  • tests/rpc/__shared__/client-server.compression-node-http.ts
  • tests/rpc/__shared__/client-server.compression-node-ws.ts
  • tests/rpc/__shared__/client-server.crossws.ts
  • tests/rpc/__shared__/client-server.hono-fetch.ts
  • tests/rpc/__shared__/client-server.message-port-transfer.ts
  • tests/rpc/__shared__/client-server.message-port.ts
  • tests/rpc/__shared__/client-server.node-http.ts
  • tests/rpc/__shared__/client-server.node-ws.ts
  • tests/rpc/cancel-and-abort.test.ts
  • tests/rpc/data-transfer.test.ts
  • tsconfig.json
  • tsconfig.lib.json
  • tsdown.config.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

@pkg-pr-new

pkg-pr-new Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
More templates

@orpc/ai-sdk

npm i https://pkg.pr.new/@orpc/ai-sdk@2448

@orpc/arktype

npm i https://pkg.pr.new/@orpc/arktype@2448

@orpc/bun

npm i https://pkg.pr.new/@orpc/bun@2448

@orpc/client

npm i https://pkg.pr.new/@orpc/client@2448

@orpc/cloudflare

npm i https://pkg.pr.new/@orpc/cloudflare@2448

@orpc/contract

npm i https://pkg.pr.new/@orpc/contract@2448

@orpc/effect

npm i https://pkg.pr.new/@orpc/effect@2448

@orpc/evlog

npm i https://pkg.pr.new/@orpc/evlog@2448

@orpc/hibernation

npm i https://pkg.pr.new/@orpc/hibernation@2448

@orpc/json-schema

npm i https://pkg.pr.new/@orpc/json-schema@2448

@orpc/experimental-lock

npm i https://pkg.pr.new/@orpc/experimental-lock@2448

@orpc/mcp

npm i https://pkg.pr.new/@orpc/mcp@2448

@orpc/msw

npm i https://pkg.pr.new/@orpc/msw@2448

@orpc/nest

npm i https://pkg.pr.new/@orpc/nest@2448

@orpc/next

npm i https://pkg.pr.new/@orpc/next@2448

@orpc/node

npm i https://pkg.pr.new/@orpc/node@2448

@orpc/openapi

npm i https://pkg.pr.new/@orpc/openapi@2448

@orpc/opentelemetry

npm i https://pkg.pr.new/@orpc/opentelemetry@2448

@orpc/pinia-colada

npm i https://pkg.pr.new/@orpc/pinia-colada@2448

@orpc/pino

npm i https://pkg.pr.new/@orpc/pino@2448

@orpc/publisher

npm i https://pkg.pr.new/@orpc/publisher@2448

@orpc/ratelimit

npm i https://pkg.pr.new/@orpc/ratelimit@2448

@orpc/server

npm i https://pkg.pr.new/@orpc/server@2448

@orpc/shared

npm i https://pkg.pr.new/@orpc/shared@2448

@orpc/swr

npm i https://pkg.pr.new/@orpc/swr@2448

@orpc/tanstack-query

npm i https://pkg.pr.new/@orpc/tanstack-query@2448

@orpc/trpc

npm i https://pkg.pr.new/@orpc/trpc@2448

@orpc/valibot

npm i https://pkg.pr.new/@orpc/valibot@2448

@orpc/zod

npm i https://pkg.pr.new/@orpc/zod@2448

commit: 8b607e9

@codecov

codecov Bot commented Nov 9, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@dinwwwh dinwwwh changed the title chore: build packages with tsdown from one shared root config build: migrate from tsc to tsdown Nov 9, 2026

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ No new issues found.

Reviewed changes

Reviewed the complete 722-file diff at c2845c1, plus the build output it produces.

  • One shared tsdown.config.ts — entries derived from each package's exports, unbundle + deps.neverBundle to mirror tsc's per-module output, oxc-generated declarations, and the restoreReexports renderChunk hook that keeps export { a } from './x' for Expo tree shaking. All 29 prepack scripts now call tsdown.
  • Bundler module resolution — root tsconfig moves to module: preserve / moduleResolution: bundler, drops rewriteRelativeImportExtensions, and ~700 files drop the .ts/.tsx suffix from relative imports. Emit-only options leave tsconfig.lib.json; the three tsconfig.build.json files are gone.
  • Three non-mechanical source edits — explicit : RegExp on the shared regex constants (oxc isolated-declaration requirement), a documented TmpFile.path field, and the export / @Module({}) reorder that keeps ORPCModule's JSDoc in the emitted declaration.

Verified locally against the pinned tsdown@0.23.7: pnpm install --frozen-lockfile succeeds, all 29 packages build, every publishConfig.exports entry imports under Node (cloudflare aside, which needs workerd), every relative specifier in the emitted .js and .d.ts resolves, and the public export-name surface per entry matches tsc-generated declarations for every package. pnpm check, tsc -p tsconfig.json --noEmit, and the full vitest run (301 files, 4585 tests) all pass.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏

@dinwwwh
dinwwwh force-pushed the claude/charming-lamport-1i70iz branch from 3f3ab94 to 37d3fa9 Compare November 9, 2026 06:22

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ No new issues found.

Reviewed changes

Re-reviewed the delta from 1ec051f to 3f3ab94 (one commit, tsdown.config.ts only), which adds a build-time guard against undeclared imports.

  • Undeclared-import guard — deps.onlyImport now lists each package's dependencies and peerDependencies plus bun and /^(bun|node|cloudflare):/, so a runtime or declaration import of any other package fails the build instead of shipping silently.
  • cloudflare:* marked external up front — inputOptions.external: [/^cloudflare:/] removes the UNRESOLVED_IMPORT warnings for cloudflare:workers in @orpc/cloudflare.

Verified against tsdown@0.23.7: all 29 packages build, and the emitted dist is byte-identical to the config without these options (621 files, per-file SHA-256). The guard fires for both an undeclared runtime import and a type-only import surfaced in a .d.ts (tested by temporarily adding import 'arktype' and import type { Type } from 'arktype' to @orpc/shared, then reverting). cloudflare:workers warnings drop from 3 to 0, pnpm check passes, and the working tree is clean.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏

@dinwwwh
dinwwwh force-pushed the claude/charming-lamport-1i70iz branch from 37d3fa9 to af6ee51 Compare November 9, 2026 06:24

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ No new issues found.

Reviewed changes

Re-reviewed the delta from 3f3ab94 to af6ee51 (a squash onto current main; the net change is one line in tsdown.config.ts).

  • bun:* externalized alongside cloudflare:* — inputOptions.external is now /^(bun|cloudflare):/, aligning the external list with deps.onlyImport's ^(bun|node|cloudflare): so a Bun-native import such as bun:sqlite stays an import instead of falling through to resolution and emitting an UNRESOLVED_IMPORT warning.

No built entry imports a bun: specifier today — bun:test appears only in test files, which are not export entries, and the bare bun type import in @orpc/bun was already external via neverBundle — so the emitted dist is unchanged from the previously verified state.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ No new issues found.

Reviewed changes

Re-reviewed the delta from 3f3ab94 to af6ee51 on the rebased branch: one line changed in tsdown.config.ts.

  • bun:* marked external up front — inputOptions.external now matches /^(bun|cloudflare):/ instead of only cloudflare:, so Bun's built-in scheme imports are externalized before resolution rather than falling through and warning as unresolvable.

Verified against tsdown@0.23.7: all 29 packages build with no warnings, and a temporary import 'bun:sqlite' in @orpc/bun is preserved verbatim in dist/index.js (reverted afterwards). The deps.onlyImport allow-list already permits bun:*, so the undeclared-import guard is unaffected.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏

@dinwwwh
dinwwwh force-pushed the claude/charming-lamport-1i70iz branch 2 times, most recently from 36edd90 to adf1177 Compare November 9, 2026 06:47
@pullfrog

pullfrog Bot commented Nov 9, 2026

Copy link
Copy Markdown
Contributor

Your OpenRouter API key was rejected. Issue a new key with the provider, then update the copy Pullfrog uses, in Pullfrog or in this repo's GitHub Actions secrets.

The provider's response
provider error: User not found. (401)

Pullfrog provider settings → · GitHub Actions secrets →

Pullfrog  | Rerun failed job ➔ | View workflow run | via Pullfrog | Using deepseek-v4.1-flash-1017 (free via Pullfrog for OSS)

dinwwwh commented Nov 9, 2026 •

Copy link
Copy Markdown
Member Author

Run benchmarks (CodSpeed) failed, and the cause wasn't this PR. CodSpeedHQ/action@v4 installs CodSpeed runner v4.19.1, which exits with Unsupported system before any benchmark runs. It failed the same way after one re-run.

The runner image changed under ubuntu-latest:

Run Runner image CodSpeed runner Result
main, 2026-11-08 (run) ubuntu-24.04 v4.19.1 ran the benchmarks
this PR, re-run (job) ubuntu-26.04 (kernel 7.0.0) v4.19.1 Unsupported system
middleapi/openapi-spec#395 (job) ubuntu-26.04 v5.6.3 (CodSpeedHQ/action@v5) ran the benchmarks

openapi-spec already uses @v5 with the same inputs, so I ported that fix into this PR: .github/workflows/codspeed.yaml now uses CodSpeedHQ/action@v5. It is part of the single commit (8b607e9), and Run benchmarks passes on it. Until main has a v5 run, CodSpeed can't compare the numbers with main's.


Generated by Claude Code

Build every package with tsdown from one shared root tsdown.config.ts.
Each package's prepack runs `tsdown`, which finds the root config; entries
come from the package's exports. unbundle keeps one output file per source
module, as tsc did, relative imports such as ../package.json are bundled
in, and packages stay external.

- Generate declarations with oxc. tsdown's default tsgo generator drops
  the DecoratedProcedure import from @orpc/effect's extensions/effect.d.ts,
  used only inside a module augmentation, so .effect() procedures lost
  their types for consumers. The regex constants in @orpc/shared get
  explicit types, and the ORPCModule and TmpFile.path JSDoc move to where
  oxc keeps them.
- Turn rolldown's `import { a } from 'x'; export { a }` back into
  `export { a } from 'x'` with a small renderChunk hook, so Expo's tree
  shaking can drop unused re-exports again.
- Fail the build when dist imports a package that isn't in the package's
  dependencies or peerDependencies (deps.onlyImport).
- Switch the root tsconfig to module preserve with bundler resolution and
  drop the .ts extension from relative imports.
- Remove the tsc-only tsconfig options and the bun, cloudflare and nest
  tsconfig.build.json files.
- Bump oxlint, oxlint-tsgolint, oxfmt and @oxc-project/runtime.
- Bump CodSpeedHQ/action to v5. v4 installs a CodSpeed runner that exits
  with "Unsupported system" on the ubuntu-26.04 image ubuntu-latest now
  uses; openapi-spec already runs v5 there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VVaw7RpPRpasxuSAB8fbND
@dinwwwh
dinwwwh force-pushed the claude/charming-lamport-1i70iz branch from adf1177 to 8b607e9 Compare November 9, 2026 06:55
@codspeed

codspeed Bot commented Nov 9, 2026

Copy link
Copy Markdown
Contributor

Hooray! CodSpeed harness just leveled up!

The base and head of this comparison were measured with different runner settings, so their benchmark values are not directly comparable.

What changed between base and head:

Re-run the base with the same settings to get a valid performance comparison.


Comparing claude/charming-lamport-1i70iz (8b607e9) with main (e60dd33)

Open in CodSpeed

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ No new issues found.

Reviewed changes

Re-reviewed the delta from 36edd90 to 8b607e9 (four files: the two package.json files, the CodSpeed workflow, and the lockfile), which lands the tooling bumps the PR body already described.

  • Dev tooling bumped — oxfmt 0.76 → 0.77, oxlint 1.91 → 1.92, and oxlint-tsgolint 7.0.2005 → 7.0.2006, with the lockfile regenerated to match.
  • @oxc-project/runtime bumped in @orpc/nest — ^0.155.0 → ^0.157.0, so the bundled decorator helpers now live at dist/_virtual/_@oxc-project_runtime@0.157.0/…, consistent with the behavior change documented in the PR body.
  • CodSpeed workflow moved to CodSpeedHQ/action@v5 — v5 still accepts the configured mode: simulation and run inputs.

Verified locally: pnpm install --frozen-lockfile succeeds with the regenerated lockfile, pnpm check reports 0 warnings and 0 errors on 936 files under oxlint 1.92, and @orpc/nest's prepack builds cleanly with the new runtime, emitting the _virtual/_@oxc-project_runtime@0.157.0 helpers with design:paramtypes metadata intact. The lockfile fully drops the 0.155.0 runtime entries; the remaining @oxc-project/types@0.155.0 reference belongs to the unrelated Scalar/Unhead docs toolchain.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏

dinwwwh added a commit to middleapi/openapi-spec that referenced this pull request Nov 9, 2026
## Why

Builds move from per-package `tsc` to tsdown with one shared root
config, the same migration as middleapi/orpc#2448 in a simpler form.
This repo needs neither oRPC's re-export hook for Expo tree shaking nor
its runtime-module list. Output keeps tsc's shape (one `.js` and `.d.ts`
per source module), so `publishConfig.exports` stays as it is.

## Changes

- **One root `tsdown.config.ts`.** tsdown finds it from each package
directory, so every `prepack` is just `tsdown`. Entries come from each
package's `exports`; `unbundle` keeps one file per module, and packages
stay external (`neverBundle: true`).
- **Declarations come from oxc** (`dts: { generator: 'oxc' }`), which
needs explicit types on exports. All sources already had them, and a
missing one now fails the build.
- **Undeclared imports fail the build.** `deps.onlyImport` lists each
package's `dependencies` and `peerDependencies`. `src` has no `node:`
imports, so the platform stays `neutral`.
- **Bundler module resolution.** The root tsconfig uses `module:
preserve` with `moduleResolution: bundler`, and the `.ts` extension is
dropped from relative imports in packages. `dist` still imports with
`.js` extensions. `verbatimModuleSyntax` stays: without it `pnpm check`
misses type-only re-exports, which then only fail at build time.
- **Cleanup and bumps.** The emit-only options in `tsconfig.lib.json`
are gone; oxlint, oxlint-tsgolint and oxfmt are bumped.

## Verification

- `pnpm check`, `pnpm test` (377 tests) and all 3 package builds pass
without warnings.
- Against the published 0.7.1 tarballs:
  - All 7 entry points export the same names and value types at runtime.
- The public API is semantically unchanged, checked with the TypeScript
compiler API.
  - JSDoc is preserved (704 blocks before and after).
- The emitted declarations type-check for a `nodenext` consumer with
`skipLibCheck: false` and `exactOptionalPropertyTypes`.

## Behavior changes

- `@openapi-spec/downgrader` no longer ships `dist/shared.d.ts`, which
no public type refers to.

---
_Generated by [Claude
Code](https://claude.ai/code/session_01VVaw7RpPRpasxuSAB8fbND)_

Co-authored-by: Claude <noreply@anthropic.com>
@dinwwwh
dinwwwh merged commit 9cefde6 into main Nov 9, 2026
13 checks passed
dinwwwh added a commit to middleapi/standard-server that referenced this pull request Nov 9, 2026
## Why

Builds move from per-package `tsc` to tsdown with one shared root
config, the same migration as middleapi/orpc#2448 in a simpler form.
This repo needs neither oRPC's re-export hook for Expo tree shaking nor
its runtime-module list. Output keeps tsc's shape (one `.js` and `.d.ts`
per source module), so `publishConfig.exports` stays as it is.

## Changes

- **One root `tsdown.config.ts`.** tsdown finds it from each package
directory, so every `prepack` is just `tsdown`. Entries come from each
package's `exports`; `unbundle` keeps one file per module, and packages
stay external (`neverBundle: true`). `platform: 'neutral'`, as in the
other two repos.
- **Declarations come from oxc** (`dts: { generator: 'oxc' }`), which
needs explicit types on exports. A missing one now fails the build.
- **`AsyncIteratorClass[asyncDisposeSymbol]`.** Isolated declarations
can't infer a class member keyed by `asyncDisposeSymbol`, whose type is
conditional. So the member is declared on a merged interface, and the
method is defined after the class with `Object.defineProperty`. It calls
`this.return()`, as the spec's
`AsyncIterator.prototype[Symbol.asyncDispose]` does; the old body was a
copy of `return()` minus the return value. It is still a non-enumerable,
writable, configurable prototype method.
- **Undeclared imports fail the build.** `deps.onlyImport` lists each
package's `dependencies` and `peerDependencies`, plus `node:` built-ins
(the `node` and `aws-lambda` packages import them).
- **Bundler module resolution.** The root tsconfig uses `module:
preserve` with `moduleResolution: bundler`, and the `.ts` extension is
dropped from relative imports in packages, tests and benches. `dist`
still imports with `.js` extensions. `verbatimModuleSyntax` stays:
without it `pnpm check` misses type-only re-exports, which then only
fail at build time.
- **Cleanup and bumps.** The emit-only options in `tsconfig.lib.json`
are gone; oxlint, oxlint-tsgolint and oxfmt are bumped.
`CodSpeedHQ/action` moves to v5, because v4's runner exits with
`Unsupported system` on the `ubuntu-26.04` image that `ubuntu-latest`
now uses.

## Verification

- `pnpm check`, `pnpm test` (1,487 vitest + 52 bun) and all 7 package
builds pass without warnings.
- Against the published 0.15.0 tarballs:
  - Every entry point exports the same names and value types at runtime.
- The public API is semantically unchanged, checked with the TypeScript
compiler API.
- JSDoc is preserved; the only declaration missing is the unexported
`anyAbortSignal`.
- The emitted declarations type-check for a `nodenext` consumer with
`skipLibCheck: false`.
- `await using` and `const d: AsyncDisposable = iterator` type-check for
consumers, and the `Symbol.for('Symbol.asyncDispose')` fallback test
passes.
- `platform: 'neutral'` produces output byte-identical to `'node'` for
all 7 packages. An undeclared import (`srvx` in
`@standard-server/fetch`) fails the build, while `node:` and declared
imports pass.
- Every emitted `.js` compiles under `@react-native/babel-preset`.

## Behavior changes

- `dist` no longer contains empty `.js` files for type-only modules, nor
`.d.ts` files that no public type refers to. Nothing imports them.
- `@standard-server/core` no longer ships `dist/event-stream/index.*`;
the root entry re-exports from the modules directly. It isn't an export
path.

---
_Generated by [Claude
Code](https://claude.ai/code/session_01VVaw7RpPRpasxuSAB8fbND)_

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants