Skip to content

Commit 4e06457

Browse files
committed
Merge pull request #7595 from Microsoft/revertParseCompilerOptionsFromJson
revert changes in the signature of 'convertCompilerOptionsFromJson'
2 parents e052eb1 + 134a253 commit 4e06457

File tree

5 files changed

+131
-14
lines changed

5 files changed

+131
-14
lines changed

src/compiler/commandLineParser.ts

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -590,9 +590,9 @@ namespace ts {
590590
*/
591591
export function parseJsonConfigFileContent(json: any, host: ParseConfigHost, basePath: string, existingOptions: CompilerOptions = {}, configFileName?: string): ParsedCommandLine {
592592
const errors: Diagnostic[] = [];
593-
const compilerOptions: CompilerOptions = convertCompilerOptionsFromJson(optionDeclarations, json["compilerOptions"], basePath, errors, configFileName);
593+
const compilerOptions: CompilerOptions = convertCompilerOptionsFromJsonWorker(json["compilerOptions"], basePath, errors, configFileName);
594594
const options = extend(existingOptions, compilerOptions);
595-
const typingOptions: TypingOptions = convertTypingOptionsFromJson(typingOptionDeclarations, json["typingOptions"], basePath, errors, configFileName);
595+
const typingOptions: TypingOptions = convertTypingOptionsFromJsonWorker(json["typingOptions"], basePath, errors, configFileName);
596596

597597
const fileNames = getFileNames(errors);
598598

@@ -666,28 +666,38 @@ namespace ts {
666666
}
667667
}
668668

669-
/* @internal */
670-
export function convertCompilerOptionsFromJson(optionsDeclarations: CommandLineOption[], jsonOptions: any,
669+
export function convertCompilerOptionsFromJson(jsonOptions: any, basePath: string, configFileName?: string): { options: CompilerOptions, errors: Diagnostic[] } {
670+
const errors: Diagnostic[] = [];
671+
const options = convertCompilerOptionsFromJsonWorker(jsonOptions, basePath, errors, configFileName);
672+
return { options, errors };
673+
}
674+
675+
export function convertTypingOptionsFromJson(jsonOptions: any, basePath: string, configFileName?: string): { options: CompilerOptions, errors: Diagnostic[] } {
676+
const errors: Diagnostic[] = [];
677+
const options = convertTypingOptionsFromJsonWorker(jsonOptions, basePath, errors, configFileName);
678+
return { options, errors };
679+
}
680+
681+
function convertCompilerOptionsFromJsonWorker(jsonOptions: any,
671682
basePath: string, errors: Diagnostic[], configFileName?: string): CompilerOptions {
672683

673684
const options: CompilerOptions = getBaseFileName(configFileName) === "jsconfig.json" ? { allowJs: true } : {};
674-
convertOptionsFromJson<CompilerOptions>(optionDeclarations, jsonOptions, basePath, options, Diagnostics.Unknown_compiler_option_0, errors);
685+
convertOptionsFromJson(optionDeclarations, jsonOptions, basePath, options, Diagnostics.Unknown_compiler_option_0, errors);
675686
return options;
676687
}
677688

678-
/* @internal */
679-
export function convertTypingOptionsFromJson(optionsDeclarations: CommandLineOption[], jsonOptions: any,
689+
function convertTypingOptionsFromJsonWorker(jsonOptions: any,
680690
basePath: string, errors: Diagnostic[], configFileName?: string): TypingOptions {
681691

682692
const options: TypingOptions = getBaseFileName(configFileName) === "jsconfig.json"
683693
? { enableAutoDiscovery: true, include: [], exclude: [] }
684694
: { enableAutoDiscovery: false, include: [], exclude: [] };
685-
convertOptionsFromJson<TypingOptions>(typingOptionDeclarations, jsonOptions, basePath, options, Diagnostics.Unknown_typing_option_0, errors);
695+
convertOptionsFromJson(typingOptionDeclarations, jsonOptions, basePath, options, Diagnostics.Unknown_typing_option_0, errors);
686696
return options;
687697
}
688698

689-
function convertOptionsFromJson<T extends CompilerOptions | TypingOptions>(optionDeclarations: CommandLineOption[], jsonOptions: any, basePath: string,
690-
defaultOptions: T, diagnosticMessage: DiagnosticMessage, errors: Diagnostic[]) {
699+
function convertOptionsFromJson(optionDeclarations: CommandLineOption[], jsonOptions: any, basePath: string,
700+
defaultOptions: CompilerOptions | TypingOptions, diagnosticMessage: DiagnosticMessage, errors: Diagnostic[]) {
691701

692702
if (!jsonOptions) {
693703
return ;
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
//// [APISample_parseConfig.ts]
2+
3+
/*
4+
* Note: This test is a public API sample. The sample sources can be found
5+
at: https://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API#a-minimal-compiler
6+
* Please log a "breaking change" issue for any API breaking change affecting this issue
7+
*/
8+
9+
declare var process: any;
10+
declare var console: any;
11+
declare var os: any;
12+
13+
import ts = require("typescript");
14+
15+
function printError(error: ts.Diagnostic): void {
16+
if (!error) {
17+
return;
18+
}
19+
console.log(`${error.file && error.file.fileName}: ${error.messageText}`);
20+
}
21+
22+
export function createProgram(rootFiles: string[], compilerOptionsJson: string): ts.Program {
23+
const { config, error } = ts.parseConfigFileTextToJson("tsconfig.json", compilerOptionsJson)
24+
if (error) {
25+
printError(error);
26+
return undefined;
27+
}
28+
const basePath: string = process.cwd();
29+
const settings = ts.convertCompilerOptionsFromJson(config.config["compilerOptions"], basePath);
30+
if (!settings.options) {
31+
for (const err of settings.errors) {
32+
printError(err);
33+
}
34+
return undefined;
35+
}
36+
return ts.createProgram(rootFiles, settings.options);
37+
}
38+
39+
//// [APISample_parseConfig.js]
40+
/*
41+
* Note: This test is a public API sample. The sample sources can be found
42+
at: https://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API#a-minimal-compiler
43+
* Please log a "breaking change" issue for any API breaking change affecting this issue
44+
*/
45+
"use strict";
46+
var ts = require("typescript");
47+
function printError(error) {
48+
if (!error) {
49+
return;
50+
}
51+
console.log((error.file && error.file.fileName) + ": " + error.messageText);
52+
}
53+
function createProgram(rootFiles, compilerOptionsJson) {
54+
var _a = ts.parseConfigFileTextToJson("tsconfig.json", compilerOptionsJson), config = _a.config, error = _a.error;
55+
if (error) {
56+
printError(error);
57+
return undefined;
58+
}
59+
var basePath = process.cwd();
60+
var settings = ts.convertCompilerOptionsFromJson(config.config["compilerOptions"], basePath);
61+
if (!settings.options) {
62+
for (var _i = 0, _b = settings.errors; _i < _b.length; _i++) {
63+
var err = _b[_i];
64+
printError(err);
65+
}
66+
return undefined;
67+
}
68+
return ts.createProgram(rootFiles, settings.options);
69+
}
70+
exports.createProgram = createProgram;
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// @module: commonjs
2+
// @includebuiltfile: typescript_standalone.d.ts
3+
// @stripInternal:true
4+
5+
/*
6+
* Note: This test is a public API sample. The sample sources can be found
7+
at: https://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API#a-minimal-compiler
8+
* Please log a "breaking change" issue for any API breaking change affecting this issue
9+
*/
10+
11+
declare var process: any;
12+
declare var console: any;
13+
declare var os: any;
14+
15+
import ts = require("typescript");
16+
17+
function printError(error: ts.Diagnostic): void {
18+
if (!error) {
19+
return;
20+
}
21+
console.log(`${error.file && error.file.fileName}: ${error.messageText}`);
22+
}
23+
24+
export function createProgram(rootFiles: string[], compilerOptionsJson: string): ts.Program {
25+
const { config, error } = ts.parseConfigFileTextToJson("tsconfig.json", compilerOptionsJson)
26+
if (error) {
27+
printError(error);
28+
return undefined;
29+
}
30+
const basePath: string = process.cwd();
31+
const settings = ts.convertCompilerOptionsFromJson(config.config["compilerOptions"], basePath);
32+
if (!settings.options) {
33+
for (const err of settings.errors) {
34+
printError(err);
35+
}
36+
return undefined;
37+
}
38+
return ts.createProgram(rootFiles, settings.options);
39+
}

tests/cases/unittests/convertCompilerOptionsFromJson.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
namespace ts {
55
describe('convertCompilerOptionsFromJson', () => {
66
function assertCompilerOptions(json: any, configFileName: string, expectedResult: { compilerOptions: CompilerOptions, errors: Diagnostic[] }) {
7-
const actualErrors: Diagnostic[] = [];
8-
const actualCompilerOptions: CompilerOptions = convertCompilerOptionsFromJson(optionDeclarations, json["compilerOptions"], "/apath/", actualErrors, configFileName);
7+
const { options: actualCompilerOptions, errors: actualErrors} = convertCompilerOptionsFromJson(json["compilerOptions"], "/apath/", configFileName);
98

109
const parsedCompilerOptions = JSON.stringify(actualCompilerOptions);
1110
const expectedCompilerOptions = JSON.stringify(expectedResult.compilerOptions);

tests/cases/unittests/convertTypingOptionsFromJson.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
namespace ts {
55
describe('convertTypingOptionsFromJson', () => {
66
function assertTypingOptions(json: any, configFileName: string, expectedResult: { typingOptions: TypingOptions, errors: Diagnostic[] }) {
7-
const actualErrors: Diagnostic[] = [];
8-
const actualTypingOptions = convertTypingOptionsFromJson(typingOptionDeclarations, json["typingOptions"], "/apath/", actualErrors, configFileName);
7+
const { options: actualTypingOptions, errors: actualErrors } = convertTypingOptionsFromJson(json["typingOptions"], "/apath/", configFileName);
98
const parsedTypingOptions = JSON.stringify(actualTypingOptions);
109
const expectedTypingOptions = JSON.stringify(expectedResult.typingOptions);
1110
assert.equal(parsedTypingOptions, expectedTypingOptions);

0 commit comments

Comments
 (0)