Skip to content

Commit

Permalink
(fix): parse tsconfig extends, trailing commas, and comments
Browse files Browse the repository at this point in the history
- use ts.readConfigFile to properly parse a tsconfig instead of just
  trying to readJSON
- add tests for all of the above use cases

NOTE: this is only necessary for internal, TSDX-specific parsing of
tsconfig.json. rollup-plugin-typescript2 already handles these options,
but internal options like esModuleInterop etc are also used & parsed
independently of rpts2
  • Loading branch information
agilgur5 committed Feb 4, 2020
1 parent 1632ef8 commit e65e317
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 33 deletions.
12 changes: 6 additions & 6 deletions src/createRollupConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@ import replace from '@rollup/plugin-replace';
import resolve from '@rollup/plugin-node-resolve';
import sourceMaps from 'rollup-plugin-sourcemaps';
import typescript from 'rollup-plugin-typescript2';
import ts from 'typescript';

import { extractErrors } from './errors/extractErrors';
import { babelPluginTsdx } from './babelPluginTsdx';
import { TsdxOptions } from './types';
import * as fs from 'fs-extra';

const errorCodeOpts = {
errorMapFilePath: paths.appErrorsJson,
Expand Down Expand Up @@ -43,10 +44,9 @@ export async function createRollupConfig(
.filter(Boolean)
.join('.');

let tsconfigJSON;
try {
tsconfigJSON = await fs.readJSON(opts.tsconfig || paths.tsconfigJson);
} catch (e) {}
const tsconfigPath = opts.tsconfig || paths.tsconfigJson;
// borrowed from https://github.com/facebook/create-react-app/pull/7248
const tsconfigJSON = ts.readConfigFile(tsconfigPath, ts.sys.readFile).config;

return {
// Tell Rollup the entry point to the package
Expand Down Expand Up @@ -136,7 +136,7 @@ export async function createRollupConfig(
},
},
typescript({
typescript: require('typescript'),
typescript: ts,
cacheRoot: `./node_modules/.cache/tsdx/${opts.format}/`,
tsconfig: opts.tsconfig,
tsconfigDefaults: {
Expand Down
28 changes: 28 additions & 0 deletions test/fixtures/build-default/tsconfig.base.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"compilerOptions": {
"module": "ESNext",
"lib": ["dom", "esnext"],
"declaration": true,
"sourceMap": true,
"rootDir": "./",
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictPropertyInitialization": true,
"noImplicitThis": true,
"alwaysStrict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"moduleResolution": "node",
"baseUrl": "./",
"paths": {
"*": ["src/*", "node_modules/*"]
},
"jsx": "react",
"esModuleInterop": true
},
"include": ["src", "types"], // test parsing of trailing comma & comment
}
29 changes: 2 additions & 27 deletions test/fixtures/build-default/tsconfig.json
Original file line number Diff line number Diff line change
@@ -1,29 +1,4 @@
{
"compilerOptions": {
"target": "es5",
"module": "ESNext",
"lib": ["dom", "esnext"],
"declaration": true,
"sourceMap": true,
"rootDir": "./",
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictPropertyInitialization": true,
"noImplicitThis": true,
"alwaysStrict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"moduleResolution": "node",
"baseUrl": "./",
"paths": {
"*": ["src/*", "node_modules/*"]
},
"jsx": "react",
"esModuleInterop": true
},
"include": ["src", "types"]
// ensure that extends works
"extends": "./tsconfig.base.json",
}

0 comments on commit e65e317

Please sign in to comment.