Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 62 additions & 44 deletions lib/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,7 @@ function getTypeScript(typescript: typeof ts) {
}
}

function getCompilerOptions(settings: compile.Settings, projectPath: string, configFileName: string): ts.CompilerOptions {
let typescript = getTypeScript(settings.typescript);

function checkAndNormalizeSettings(settings: compile.Settings): void {
if (settings.sourceRoot !== undefined) {
console.warn('gulp-typescript: sourceRoot isn\'t supported any more. Use sourceRoot option of gulp-sourcemaps instead.')
}
Expand All @@ -64,33 +62,30 @@ function getCompilerOptions(settings: compile.Settings, projectPath: string, con
"The non-standard option sortOutput has been removed as of gulp-typescript 3.0.\nYour project will probably compile without this option.\nOtherwise, if you're using gulp-concat, you should remove gulp-concat and use the outFile option instead.");
}

// Copy settings and remove several options
const newSettings: compile.Settings = {};
for (const option of Object.keys(settings)) {
if (option === 'declarationFiles') {
newSettings.declaration = settings.declarationFiles;
continue;
}
if (option === 'noExternalResolve' ||
option === 'sortOutput' ||
option === 'typescript' ||
option === 'sourceMap' ||
option === 'inlineSourceMap' ||
option === 'sourceRoot' ||
option === 'inlineSources') continue;

newSettings[option] = settings[option];
if (settings.declarationFiles) {
settings.declaration = settings.declarationFiles;
delete settings.declarationFiles;
}

const result = typescript.convertCompilerOptionsFromJson(newSettings, projectPath, configFileName);
delete settings.noExternalResolve;
delete settings.sortOutput;
delete settings.typescript;
delete (settings as any).sourceMap;
delete (settings as any).inlineSourceMap;
delete settings.sourceRoot;
delete (settings as any).inlineSources;
}

function normalizeCompilerOptions(options: ts.CompilerOptions): void {
options.sourceMap = true;
(options as any).suppressOutputPathCheck = true;
}

function reportErrors(errors: ts.Diagnostic[], typescript: typeof ts): void {
const reporter = _reporter.defaultReporter();
for (const error of result.errors) {
for (const error of errors) {
reporter.error(utils.getError(error, typescript), typescript);
}
result.options.sourceMap = true;
(result.options as any).suppressOutputPathCheck = true;

return result.options;
}

module compile {
Expand Down Expand Up @@ -149,36 +144,59 @@ module compile {
let tsConfigFileName: string = undefined;
let tsConfigContent: TsConfig = undefined;
let projectDirectory = process.cwd();
let typescript;
let compilerOptions: ts.CompilerOptions;
let fileName: string;
settings = { ...settings }; // Shallow copy the settings.
if (fileNameOrSettings !== undefined) {
if (typeof fileNameOrSettings === 'string') {
fileName = fileNameOrSettings;
} else {
settings = fileNameOrSettings || {};
}

typescript = getTypeScript(settings.typescript);
checkAndNormalizeSettings(settings);

const settingsResult = typescript.convertCompilerOptionsFromJson(settings, projectDirectory);

if (settingsResult.errors) {
reportErrors(settingsResult.errors, typescript);
}

compilerOptions = settingsResult.options;

if (fileName) {
tsConfigFileName = path.resolve(process.cwd(), fileNameOrSettings);
projectDirectory = path.dirname(tsConfigFileName);
// Load file and strip BOM, since JSON.parse fails to parse if there's a BOM present
let tsConfigText = fs.readFileSync(tsConfigFileName).toString();
const typescript = getTypeScript(settings && settings.typescript);
const tsConfig = typescript.parseConfigFileTextToJson(tsConfigFileName, tsConfigText);
tsConfigContent = tsConfig.config || {};
let tsConfig = typescript.readConfigFile(tsConfigFileName, typescript.sys.readFile);
if (tsConfig.error) {
console.log(tsConfig.error.messageText);
}
let newSettings: any = {};
if (tsConfigContent.compilerOptions) {
for (const key of Object.keys(tsConfigContent.compilerOptions)) {
newSettings[key] = tsConfigContent.compilerOptions[key];
}
}
if (settings) {
for (const key of Object.keys(settings)) {
newSettings[key] = settings[key];
}

let parsed: ts.ParsedCommandLine = tsConfig.config &&
typescript.parseJsonConfigFileContent(
tsConfig.config,
typescript.sys,
path.resolve(projectDirectory),
settings,
path.basename(tsConfigFileName));

tsConfigContent = {
compilerOptions: parsed.options,
files: parsed.fileNames,
};

if (parsed.errors) {
reportErrors(parsed.errors, typescript);
}
settings = newSettings;
} else {
settings = fileNameOrSettings;

compilerOptions = parsed.options;
}
}

const project = _project.setupProject(projectDirectory, tsConfigContent, getCompilerOptions(settings, projectDirectory, tsConfigFileName), getTypeScript(settings.typescript));
normalizeCompilerOptions(compilerOptions);
const project = _project.setupProject(projectDirectory, tsConfigContent, compilerOptions, typescript);

return project;
}
Expand Down
104 changes: 56 additions & 48 deletions release/main.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
"use strict";
var fs = require("fs");
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
var path = require("path");
var _project = require("./project");
var utils = require("./utils");
Expand Down Expand Up @@ -34,8 +41,7 @@ function getTypeScript(typescript) {
throw new Error("TypeScript not installed");
}
}
function getCompilerOptions(settings, projectPath, configFileName) {
var typescript = getTypeScript(settings.typescript);
function checkAndNormalizeSettings(settings) {
if (settings.sourceRoot !== undefined) {
console.warn('gulp-typescript: sourceRoot isn\'t supported any more. Use sourceRoot option of gulp-sourcemaps instead.');
}
Expand All @@ -45,72 +51,74 @@ function getCompilerOptions(settings, projectPath, configFileName) {
if (settings.sortOutput !== undefined) {
utils.deprecate("sortOutput is deprecated", "your project might work without it", "The non-standard option sortOutput has been removed as of gulp-typescript 3.0.\nYour project will probably compile without this option.\nOtherwise, if you're using gulp-concat, you should remove gulp-concat and use the outFile option instead.");
}
// Copy settings and remove several options
var newSettings = {};
for (var _i = 0, _a = Object.keys(settings); _i < _a.length; _i++) {
var option = _a[_i];
if (option === 'declarationFiles') {
newSettings.declaration = settings.declarationFiles;
continue;
}
if (option === 'noExternalResolve' ||
option === 'sortOutput' ||
option === 'typescript' ||
option === 'sourceMap' ||
option === 'inlineSourceMap' ||
option === 'sourceRoot' ||
option === 'inlineSources')
continue;
newSettings[option] = settings[option];
if (settings.declarationFiles) {
settings.declaration = settings.declarationFiles;
delete settings.declarationFiles;
}
var result = typescript.convertCompilerOptionsFromJson(newSettings, projectPath, configFileName);
delete settings.noExternalResolve;
delete settings.sortOutput;
delete settings.typescript;
delete settings.sourceMap;
delete settings.inlineSourceMap;
delete settings.sourceRoot;
delete settings.inlineSources;
}
function normalizeCompilerOptions(options) {
options.sourceMap = true;
options.suppressOutputPathCheck = true;
}
function reportErrors(errors, typescript) {
var reporter = _reporter.defaultReporter();
for (var _b = 0, _c = result.errors; _b < _c.length; _b++) {
var error = _c[_b];
for (var _i = 0, errors_1 = errors; _i < errors_1.length; _i++) {
var error = errors_1[_i];
reporter.error(utils.getError(error, typescript), typescript);
}
result.options.sourceMap = true;
result.options.suppressOutputPathCheck = true;
return result.options;
}
(function (compile) {
compile.reporter = _reporter;
function createProject(fileNameOrSettings, settings) {
var tsConfigFileName = undefined;
var tsConfigContent = undefined;
var projectDirectory = process.cwd();
var typescript;
var compilerOptions;
var fileName;
settings = __assign({}, settings); // Shallow copy the settings.
if (fileNameOrSettings !== undefined) {
if (typeof fileNameOrSettings === 'string') {
fileName = fileNameOrSettings;
}
else {
settings = fileNameOrSettings || {};
}
typescript = getTypeScript(settings.typescript);
checkAndNormalizeSettings(settings);
var settingsResult = typescript.convertCompilerOptionsFromJson(settings, projectDirectory);
if (settingsResult.errors) {
reportErrors(settingsResult.errors, typescript);
}
compilerOptions = settingsResult.options;
if (fileName) {
tsConfigFileName = path.resolve(process.cwd(), fileNameOrSettings);
projectDirectory = path.dirname(tsConfigFileName);
// Load file and strip BOM, since JSON.parse fails to parse if there's a BOM present
var tsConfigText = fs.readFileSync(tsConfigFileName).toString();
var typescript = getTypeScript(settings && settings.typescript);
var tsConfig = typescript.parseConfigFileTextToJson(tsConfigFileName, tsConfigText);
tsConfigContent = tsConfig.config || {};
var tsConfig = typescript.readConfigFile(tsConfigFileName, typescript.sys.readFile);
if (tsConfig.error) {
console.log(tsConfig.error.messageText);
}
var newSettings = {};
if (tsConfigContent.compilerOptions) {
for (var _i = 0, _a = Object.keys(tsConfigContent.compilerOptions); _i < _a.length; _i++) {
var key = _a[_i];
newSettings[key] = tsConfigContent.compilerOptions[key];
}
}
if (settings) {
for (var _b = 0, _c = Object.keys(settings); _b < _c.length; _b++) {
var key = _c[_b];
newSettings[key] = settings[key];
}
var parsed = tsConfig.config &&
typescript.parseJsonConfigFileContent(tsConfig.config, typescript.sys, path.resolve(projectDirectory), settings, path.basename(tsConfigFileName));
tsConfigContent = {
compilerOptions: parsed.options,
files: parsed.fileNames,
};
if (parsed.errors) {
reportErrors(parsed.errors, typescript);
}
settings = newSettings;
}
else {
settings = fileNameOrSettings;
compilerOptions = parsed.options;
}
}
var project = _project.setupProject(projectDirectory, tsConfigContent, getCompilerOptions(settings, projectDirectory, tsConfigFileName), getTypeScript(settings.typescript));
normalizeCompilerOptions(compilerOptions);
var project = _project.setupProject(projectDirectory, tsConfigContent, compilerOptions, typescript);
return project;
}
compile.createProject = createProject;
Expand Down
3 changes: 3 additions & 0 deletions test/baselines/tsconfigExtends/2.0/dts/other-3.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export declare class Hello {
value: string;
}
Empty file.
11 changes: 11 additions & 0 deletions test/baselines/tsconfigExtends/2.0/errors.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@

{
"transpileErrors": 0,
"optionsErrors": 0,
"syntaxErrors": 0,
"globalErrors": 0,
"semanticErrors": 0,
"declarationErrors": 0,
"emitErrors": 0,
"emitSkipped": false
}
12 changes: 12 additions & 0 deletions test/baselines/tsconfigExtends/2.0/js/other-3.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions test/baselines/tsconfigExtends/2.0/js/other-3.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions test/baselines/tsconfigExtends/2.0/js/test-3.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions test/baselines/tsconfigExtends/2.0/js/test-3.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions test/baselines/tsconfigExtends/dev/dts/other-3.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export declare class Hello {
value: string;
}
Empty file.
11 changes: 11 additions & 0 deletions test/baselines/tsconfigExtends/dev/errors.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@

{
"transpileErrors": 0,
"optionsErrors": 0,
"syntaxErrors": 0,
"globalErrors": 0,
"semanticErrors": 0,
"declarationErrors": 0,
"emitErrors": 0,
"emitSkipped": false
}
12 changes: 12 additions & 0 deletions test/baselines/tsconfigExtends/dev/js/other-3.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions test/baselines/tsconfigExtends/dev/js/other-3.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions test/baselines/tsconfigExtends/dev/js/test-3.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions test/baselines/tsconfigExtends/dev/js/test-3.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions test/tsconfigExtends/bad.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
blargh.
Loading