Skip to content

Commit 494cf85

Browse files
authored
feat: replace JSON.parse with typescript builtin config parser (#63)
* feat: replace JSON.parse with typescript parseJsonConfigFileContent * feat: load typescript dynamically
1 parent d309190 commit 494cf85

File tree

1 file changed

+25
-8
lines changed

1 file changed

+25
-8
lines changed

lib/run.js

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { glob } from 'glob'
33
import { findUp } from 'find-up'
44
import { createRequire } from 'node:module'
55
import { join, dirname } from 'node:path'
6-
import { access, readFile } from 'node:fs/promises'
6+
import { access } from 'node:fs/promises'
77
import { execa } from 'execa'
88

99
function deferred () {
@@ -17,7 +17,7 @@ function deferred () {
1717
}
1818

1919
function enableSourceMapSupport (tsconfig) {
20-
if (!tsconfig?.compilerOptions?.sourceMap) {
20+
if (!tsconfig?.options?.sourceMap) {
2121
return
2222
}
2323

@@ -56,13 +56,21 @@ export default async function runWithTypeScript (config) {
5656
}
5757

5858
if (tsconfigPath && config.typescript !== false) {
59-
const tsconfig = JSON.parse(await readFile(tsconfigPath))
6059
const _require = createRequire(tsconfigPath)
60+
const { parseJsonConfigFileContent, readConfigFile, sys } = _require('typescript')
61+
62+
const configFile = readConfigFile(tsconfigPath, sys.readFile)
63+
const tsconfig = parseJsonConfigFileContent(
64+
configFile.config,
65+
sys,
66+
dirname(tsconfigPath)
67+
)
68+
6169
const typescriptPathCWD = _require.resolve('typescript')
6270
tscPath = join(typescriptPathCWD, '..', '..', 'bin', 'tsc')
63-
const outDir = tsconfig.compilerOptions.outDir
71+
const outDir = tsconfig.options.outDir
6472
if (outDir) {
65-
prefix = join(dirname(tsconfigPath), outDir)
73+
prefix = outDir
6674
}
6775

6876
enableSourceMapSupport(tsconfig)
@@ -73,7 +81,7 @@ export default async function runWithTypeScript (config) {
7381

7482
// Watch is handled aftterwards
7583
if (!config.watch) {
76-
if (Array.isArray(tsconfig.references) && tsconfig.references.length > 0) {
84+
if (Array.isArray(tsconfig.projectReferences) && tsconfig.projectReferences.length > 0) {
7785
typescriptCliArgs.push('--build')
7886
}
7987
const start = Date.now()
@@ -123,8 +131,17 @@ export default async function runWithTypeScript (config) {
123131
p = deferred()
124132
let outDir = ''
125133
if (config['post-compile'] && tsconfigPath) {
126-
const tsconfig = JSON.parse(await readFile(tsconfigPath))
127-
outDir = tsconfig.compilerOptions.outDir
134+
const _require = createRequire(tsconfigPath)
135+
const { parseJsonConfigFileContent, readConfigFile, sys } = _require('typescript')
136+
137+
const configFile = readConfigFile(tsconfigPath, sys.readFile)
138+
const tsconfig = parseJsonConfigFileContent(
139+
configFile.config,
140+
sys,
141+
dirname(tsconfigPath)
142+
)
143+
144+
outDir = tsconfig.options.outDir
128145

129146
enableSourceMapSupport(tsconfig)
130147
}

0 commit comments

Comments
 (0)