Skip to content

Commit

Permalink
Merge branch 'master' into make-content-hash-consistent-across-machines
Browse files Browse the repository at this point in the history
  • Loading branch information
elyalvarado committed Apr 27, 2020
2 parents d95227f + cc31287 commit cf7601f
Show file tree
Hide file tree
Showing 313 changed files with 6,771 additions and 924 deletions.
1 change: 0 additions & 1 deletion .travis.yml
Expand Up @@ -4,7 +4,6 @@ addons:
chrome: stable
language: node_js
node_js:
- "8"
- "10"
- "12"
sudo: required
Expand Down
7 changes: 7 additions & 0 deletions CHANGELOG.md
@@ -1,5 +1,12 @@
# Changelog

## v7.0.1
* [fix: watch-run](https://github.com/TypeStrong/ts-loader/pull/1083) - thanks @zn4rk

## v7.0.0
* [Project reference support enhancements](https://github.com/TypeStrong/ts-loader/pull/1076) - thanks @sheetalkamat!
* Following the end of life of Node 8, `ts-loader` no longer supports Node 8 **BREAKING CHANGE**

## v6.2.2
* [Enable typescript 3.8.3 support when using `webpack.config.ts` files](https://github.com/TypeStrong/ts-loader/issues/1072) - thanks @vladimiry!

Expand Down
6 changes: 3 additions & 3 deletions package.json
@@ -1,13 +1,13 @@
{
"name": "ts-loader",
"version": "6.2.2",
"version": "7.0.1",
"description": "TypeScript loader for webpack",
"main": "index.js",
"types": "dist",
"scripts": {
"build": "tsc --version && tsc --project \"./src\"",
"lint": "tslint --project \"./src\"",
"comparison-tests": "git clean -xfd test/comparison-tests && tsc --project \"./test/comparison-tests\" && npm link ./test/comparison-tests/testLib && node test/comparison-tests/run-tests.js",
"comparison-tests": "git clean -xfd test/comparison-tests && npm link ./test/comparison-tests/testLib && node test/comparison-tests/run-tests.js",
"comparison-tests-generate": "git clean -xfd test/comparison-tests && node test/comparison-tests/stub-new-version.js",
"execution-tests": "git clean -xfd test/execution-tests && node test/execution-tests/run-tests.js",
"test": "git clean -xfd test/comparison-tests && git clean -xfd test/execution-tests && node test/run-tests.js",
Expand Down Expand Up @@ -40,7 +40,7 @@
"ts"
],
"engines": {
"node": ">=8.6"
"node": ">=10.0.0"
},
"author": "John Reilly <johnny_reilly@hotmail.com> (https://blog.johnnyreilly.com)",
"contributors": [
Expand Down
132 changes: 65 additions & 67 deletions src/after-compile.ts
Expand Up @@ -4,9 +4,9 @@ import * as webpack from 'webpack';

import * as constants from './constants';
import {
forEachResolvedProjectReference,
getEmitFromWatchHost,
getEmitOutput
getEmitOutput,
isReferencedFile
} from './instances';
import {
TSFile,
Expand Down Expand Up @@ -39,6 +39,12 @@ export function makeAfterCompile(
return;
}

if (instance.loaderOptions.transpileOnly) {
provideAssetsFromSolutionBuilderHost(instance, compilation);
callback();
return;
}

removeTSLoaderErrors(compilation.errors);

provideCompilerOptionDiagnosticErrorsToWebpack(
Expand All @@ -65,15 +71,15 @@ export function makeAfterCompile(
modules,
instance
);

provideDeclarationFilesToWebpack(
filesToCheckForErrors,
instance,
compilation
);
provideTsBuildInfoFilesToWebpack(instance, compilation);

provideSolutionErrorsToWebpack(compilation, modules, instance);
provideTsBuildInfoFilesToWebpack(instance, compilation);
provideAssetsFromSolutionBuilderHost(instance, compilation);

instance.filesWithErrors = filesWithErrors;
instance.modifiedFiles = undefined;
Expand Down Expand Up @@ -343,31 +349,51 @@ function provideDeclarationFilesToWebpack(
continue;
}

const outputFiles = getEmitOutput(instance, filePath);
const declarationFiles = outputFiles.filter(outputFile =>
outputFile.name.match(constants.dtsDtsxOrDtsDtsxMapRegex)
);

declarationFiles.forEach(declarationFile => {
const assetPath = path.relative(
compilation.compiler.outputPath,
declarationFile.name
if (!isReferencedFile(instance, filePath)) {
addDeclarationFilesAsAsset(
getEmitOutput(instance, filePath),
compilation
);
compilation.assets[assetPath] = {
source: () => declarationFile.text,
size: () => declarationFile.text.length
};
});
}
}
}

function getOutputPathForBuildInfo(
compiler: typeof ts,
options: ts.CompilerOptions
function addDeclarationFilesAsAsset<T extends ts.OutputFile>(
outputFiles: T[] | IterableIterator<T>,
compilation: webpack.compilation.Compilation,
skipOutputFile?: (outputFile: T) => boolean
) {
outputFilesToAsset(outputFiles, compilation, outputFile =>
skipOutputFile && skipOutputFile(outputFile)
? true
: !outputFile.name.match(constants.dtsDtsxOrDtsDtsxMapRegex)
);
}

function outputFileToAsset(
outputFile: ts.OutputFile,
compilation: webpack.compilation.Compilation
) {
return (compiler as any).getTsBuildInfoEmitOutputFilePath
? (compiler as any).getTsBuildInfoEmitOutputFilePath(options)
: (compiler as any).getOutputPathForBuildInfo(options);
const assetPath = path.relative(
compilation.compiler.outputPath,
outputFile.name
);
compilation.assets[assetPath] = {
source: () => outputFile.text,
size: () => outputFile.text.length
};
}

function outputFilesToAsset<T extends ts.OutputFile>(
outputFiles: T[] | IterableIterator<T>,
compilation: webpack.compilation.Compilation,
skipOutputFile?: (outputFile: T) => boolean
) {
for (const outputFile of outputFiles) {
if (!skipOutputFile || !skipOutputFile(outputFile)) {
outputFileToAsset(outputFile, compilation);
}
}
}

/**
Expand All @@ -377,60 +403,32 @@ function provideTsBuildInfoFilesToWebpack(
instance: TSInstance,
compilation: webpack.compilation.Compilation
) {
if (instance.solutionBuilderHost && instance.modifiedFiles) {
const program = ensureProgram(instance);
if (program) {
forEachResolvedProjectReference(
program.getResolvedProjectReferences(),
resolvedRef => {
if (
resolvedRef.commandLine.fileNames.some(f =>
instance.modifiedFiles!.has(path.resolve(f))
)
) {
const buildInfoPath = getOutputPathForBuildInfo(
instance.compiler,
resolvedRef.commandLine.options
);
if (buildInfoPath) {
const text = instance.compiler.sys.readFile(buildInfoPath);
if (text) {
const assetPath = path.relative(
compilation.compiler.outputPath,
path.resolve(buildInfoPath)
);
compilation.assets[assetPath] = {
source: () => text,
size: () => text.length
};
}
}
}
}
);
}
}

if (instance.watchHost) {
// Ensure emit is complete
getEmitFromWatchHost(instance);
if (instance.watchHost.tsbuildinfo) {
const { tsbuildinfo } = instance.watchHost;
const assetPath = path.relative(
compilation.compiler.outputPath,
path.resolve(tsbuildinfo.name)
);
compilation.assets[assetPath] = {
source: () => tsbuildinfo.text,
size: () => tsbuildinfo.text.length
};
outputFileToAsset(instance.watchHost.tsbuildinfo, compilation);
}

instance.watchHost.outputFiles.clear();
instance.watchHost.tsbuildinfo = undefined;
}
}

/**
* gather all solution builder assets
*/
function provideAssetsFromSolutionBuilderHost(
instance: TSInstance,
compilation: webpack.compilation.Compilation
) {
if (instance.solutionBuilderHost) {
// written files
outputFilesToAsset(instance.solutionBuilderHost.writtenFiles, compilation);
instance.solutionBuilderHost.writtenFiles.length = 0;
}
}

/**
* handle all other errors. The basic approach here to get accurate error
* reporting is to start with a "blank slate" each compilation and gather
Expand Down

0 comments on commit cf7601f

Please sign in to comment.