dividab / tsconfig-paths

Load node modules according to tsconfig paths, in run-time or via API.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Add support for relative paths from extended tsconfig

alSergey opened this issue · comments

Hello, thanks for the cool library. I'm using nuxt and have encountered an issue where when using the library I'm getting incorrect relative paths returned from tsconfig.

Example

FIle System

tsconfig.json

{
  "extends": "./.nuxt/tsconfig.json"
}

.nuxt/tsconfig.json

{
  "compilerOptions": {
    "paths": {
      "~": [
        ".."
      ],
      "assets": [
        "../assets"
      ],
      "#app": [
        "../node_modules/nuxt/dist/app"
      ],
      "#imports": [
        "./imports"
      ],
    }
  },
}

Expected

{
  "paths": {
    "~": [
      "."
    ],
    "assets": [
      "assets"
    ],
    "#app": [
      "node_modules/nuxt/dist/app"
    ],
    "#imports": [
      ".nuxt/imports"
    ],
  }
}

Result

{
  "paths": {
    "~": [
      ".."
    ],
    "assets": [
      "../assets"
    ],
    "#app": [
      "../node_modules/nuxt/dist/app"
    ],
    "#imports": [
      "./imports"
    ],
  }
}

Suggestion

When searching for paths in tsconfig.json, consider the path to the tsconfig file in which the paths were found and the baseUrl field.

Example code

const filesBasePath = path.join(configRelativeDir, baseUrl || '.') // configRelativeDir = '.nuxt'

const relativePaths = Object.entries(paths).reduce((obj, [key, values]) => ({
      ...obj,
      [key]: values?.map((item) => path.join(filesBasePath, item)),
}), {})