acacode/swagger-typescript-api

[bug] npm run dev won't work with --modular option and tsconfig verbatimModuleSyntax=true

Opened this issue · 1 comments

Issue

When verbatimModuleSyntax=true it forces import resolution to be like this:

// src/api/gen/generatedModule.ts
import { ContentType, HttpClient } from "./http-client";
import type { Register, RequestParam, UserDto } from "./data-contracts";

But generated code looks like this:

// src/api/gen/generatedModule.ts
import { RegisterRequest, UserDto } from "./data-contracts";
import { ContentType, HttpClient, RequestParams } from "./http-client";

So when running npm run dev it leads to this error in browser:

module '/src/api/gen/http-client.ts' does not provide an export named 'RequestParams`

npm run build works as expected.

Versions

node --version
v24.0.2

package.json:

{
  ...
  "scripts": {
    "dev": "react-router dev",
    "build": "react-router build",
    ...
    "api": "swagger-typescript-api generate --modular --output=./src/api/gen --path=api-docs.yml"
  },
  "dependencies": {
    "@react-router/node": "^7.6.0",
    "react": "^19.1.0",
    "react-dom": "^19.1.0",
    "react-router": "^7.6.0",
    ...
  },
  "devDependencies": {
    "@react-router/dev": "^7.6.0",
    "@types/react": "^19.1.5",
    "@types/react-dom": "^19.1.5",
    "@vitejs/plugin-react-swc": "^3.10.0",
    "typescript": "~5.8.3",
    "typescript-eslint": "^8.32.1",
    "vite": "^6.3.5"
     ...
  }
}

tsconfig.json:

{
  "compilerOptions": {
    "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
    "lib": ["ESNext", "DOM", "DOM.Iterable"],
    "target": "ESNext",
    "module": "ESNext",

    /* Bundler mode */
    "moduleResolution": "bundler",
    "verbatimModuleSyntax": true, // Won't work with api, generated by swagger-typescript-api
    "moduleDetection": "force",
    "noEmit": true,
    "jsx": "react-jsx",
    ...
  },
  "include": ["src"]
}

temporary workaround:
#580 (comment)