From 634d766aa22013ec725c0d30317eb38963410db3 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 2 Nov 2021 11:00:48 +0900 Subject: [PATCH] feat(register): support tsconfig in subdirectory --- .../__test__/read-default-config.spec.ts | 17 ++++++++++++++--- .../__test__/subdirectory/tsconfig.extend.json | 7 +++++++ packages/register/read-default-tsconfig.ts | 4 ++-- 3 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 packages/register/__test__/subdirectory/tsconfig.extend.json diff --git a/packages/register/__test__/read-default-config.spec.ts b/packages/register/__test__/read-default-config.spec.ts index fa289e045..a74a69531 100644 --- a/packages/register/__test__/read-default-config.spec.ts +++ b/packages/register/__test__/read-default-config.spec.ts @@ -1,4 +1,4 @@ -import { join } from 'path' +import { join, dirname } from 'path' import test from 'ava' import { omit } from 'lodash' @@ -21,7 +21,7 @@ test('should RESPECT SWC_NODE_PROJECT env', (t) => { process.env.SWC_NODE_PROJECT = configPath const defaultOptions = readDefaultTsConfig() const { config } = ts.readConfigFile(configPath, ts.sys.readFile) - const { options } = ts.parseJsonConfigFileContent(config, ts.sys, process.cwd()) + const { options } = ts.parseJsonConfigFileContent(config, ts.sys, dirname(configPath)) t.deepEqual(omit(defaultOptions, 'files'), options) }) @@ -32,6 +32,17 @@ test('should RESPECT TS_NODE_PROJECT env', (t) => { process.env.TS_NODE_PROJECT = configPath const defaultOptions = readDefaultTsConfig() const { config } = ts.readConfigFile(configPath, ts.sys.readFile) - const { options } = ts.parseJsonConfigFileContent(config, ts.sys, process.cwd()) + const { options } = ts.parseJsonConfigFileContent(config, ts.sys, dirname(configPath)) + t.deepEqual(omit(defaultOptions, 'files'), options) +}) + +test('should RESPECT tsconfig path in subdirectory', (t) => { + const configPath = join(__dirname, 'subdirectory/tsconfig.extend.json') + delete process.env.SWC_NODE_PROJECT + delete process.env.TS_NODE_PROJECT + process.env.TS_NODE_PROJECT = configPath + const defaultOptions = readDefaultTsConfig() + const { config } = ts.readConfigFile(configPath, ts.sys.readFile) + const { options } = ts.parseJsonConfigFileContent(config, ts.sys, dirname(configPath)) t.deepEqual(omit(defaultOptions, 'files'), options) }) diff --git a/packages/register/__test__/subdirectory/tsconfig.extend.json b/packages/register/__test__/subdirectory/tsconfig.extend.json new file mode 100644 index 000000000..5f021f1a9 --- /dev/null +++ b/packages/register/__test__/subdirectory/tsconfig.extend.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig.spec.json", + "compilerOptions": { + "sourceMap": false + }, + "include": ["../*.ts"] +} diff --git a/packages/register/read-default-tsconfig.ts b/packages/register/read-default-tsconfig.ts index b613c03f2..385ed0d29 100644 --- a/packages/register/read-default-tsconfig.ts +++ b/packages/register/read-default-tsconfig.ts @@ -1,5 +1,5 @@ import { existsSync } from 'fs' -import { join } from 'path' +import { join, dirname } from 'path' import type { Options } from '@swc-node/core' import chalk from 'chalk' @@ -24,7 +24,7 @@ export function readDefaultTsConfig( debug(`Read config file from ${tsConfigPath}`) const { config } = ts.readConfigFile(tsConfigPath, ts.sys.readFile) - const { options, errors, fileNames } = ts.parseJsonConfigFileContent(config, ts.sys, process.cwd()) + const { options, errors, fileNames } = ts.parseJsonConfigFileContent(config, ts.sys, dirname(tsConfigPath)) if (!errors.length) { compilerOptions = options compilerOptions.files = fileNames