diff --git a/example/tsconfig.base.json b/example/tsconfig.base.json new file mode 100644 index 0000000..28eb978 --- /dev/null +++ b/example/tsconfig.base.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "useDefineForClassFields": false + } +} diff --git a/example/tsconfig.json b/example/tsconfig.json index 28eb978..70aa5e9 100644 --- a/example/tsconfig.json +++ b/example/tsconfig.json @@ -1,5 +1,3 @@ { - "compilerOptions": { - "useDefineForClassFields": false - } + "extends": ["./tsconfig.base.json"] } diff --git a/package.json b/package.json index 8004a8b..ee1d154 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "@rollup/pluginutils": "^5.0.4", "debug": "^4.3.4", "es-module-lexer": "^1.3.1", - "joycon": "^3.1.1" + "get-tsconfig": "^4.7.2" }, "peerDependencies": { "esbuild": ">=0.18.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 086bb79..28d6cd0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,9 +17,9 @@ importers: es-module-lexer: specifier: ^1.3.1 version: 1.3.1 - joycon: - specifier: ^3.1.1 - version: 3.1.1 + get-tsconfig: + specifier: ^4.7.2 + version: 4.7.2 devDependencies: '@types/debug': specifier: ^4.1.8 @@ -1069,6 +1069,12 @@ packages: engines: {node: '>=10'} dev: true + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: false + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -1197,6 +1203,7 @@ packages: /joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} + dev: true /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1478,6 +1485,10 @@ packages: engines: {node: '>=8'} dev: true + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: false + /resolve@1.22.6: resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==} hasBin: true diff --git a/src/index.ts b/src/index.ts index 0744fa0..42255fb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -152,7 +152,7 @@ export default ({ const tsconfigRaw = tsconfig === false ? undefined - : await getTsconfig(dirname(id), tsconfig) + : getTsconfig(id, tsconfig || 'tsconfig.json') const result = await transform(code, { loader, diff --git a/src/tsconfig.ts b/src/tsconfig.ts index 6c36045..888430b 100644 --- a/src/tsconfig.ts +++ b/src/tsconfig.ts @@ -1,18 +1,10 @@ -import { readFile } from 'fs/promises' -import JoyCon from 'joycon' +import { getTsconfig as findTsconfig, TsConfigJsonResolved } from 'get-tsconfig' -const joycon = new JoyCon() +const cache = new Map() -joycon.addLoader({ - test: /\.json$/, - load: (file) => readFile(file, 'utf8'), -}) - -export const getTsconfig = async ( - cwd: string, - tsconfig?: string, -): Promise => { - // This call is cached - const { data } = await joycon.load([tsconfig || 'tsconfig.json'], cwd) - return data +export function getTsconfig( + searchPath: string, + configName: string, +): TsConfigJsonResolved | undefined { + return findTsconfig(searchPath, configName, cache)?.config }