From 1d4568a693bde85cd919ecdd7643b1bdbde181c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Goetz?= Date: Mon, 11 Jun 2018 01:04:19 +0200 Subject: [PATCH] Use webpack to write declaration files, gives better reporting (#588) --- src/index.ts | 5 +---- src/instance.ts | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index 4bc26eb..65243e5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,5 @@ import * as _ from 'lodash' import * as path from 'path' -import * as fs from 'fs' import { findCompiledModule, cache } from './cache' import * as helpers from './helpers' @@ -9,7 +8,6 @@ import { PathPlugin } from './paths-plugin' import { CheckerPlugin as _CheckerPlugin } from './watch-mode' const loaderUtils = require('loader-utils') -const mkdirp = require('mkdirp') function loader(text) { try { @@ -170,8 +168,7 @@ function transform( } if (emitResult.declaration) { - mkdirp.sync(path.dirname(emitResult.declaration.name)) - fs.writeFileSync(emitResult.declaration.name, emitResult.declaration.text) + instance.compiledDeclarations.push(emitResult.declaration) } return { diff --git a/src/instance.ts b/src/instance.ts index ff04b72..66ee231 100644 --- a/src/instance.ts +++ b/src/instance.ts @@ -23,6 +23,7 @@ export interface Instance { id: number babelImpl?: any compiledFiles: { [key: string]: boolean } + compiledDeclarations: { name: string; text: string }[] configFilePath: string compilerConfig: TsConfig loaderConfig: LoaderConfig @@ -160,6 +161,7 @@ export function ensureInstance( id: ++id, babelImpl, compiledFiles: {}, + compiledDeclarations: [], loaderConfig, configFilePath, compilerConfig, @@ -385,6 +387,7 @@ function setupWatchRun(compiler, instanceName: string) { const lastCompiled = instance.compiledFiles instance.compiledFiles = {} + instance.compiledDeclarations = []; instance.startTime = startTime const set = new Set(Object.keys(times).map(toUnix)) @@ -479,6 +482,17 @@ function setupAfterCompile(compiler, instanceName, forkChecker = false) { Array.prototype.push.apply(compilation.fileDependencies, files.map(path.normalize)) }) + instance.compiledDeclarations.forEach(declaration => { + const assetPath = path.relative( + compilation.compiler.context, + declaration.name + ) + compilation.assets[assetPath] = { + source: () => declaration.text, + size: () => declaration.text.length + } + }) + const timeStart = +new Date() const diag = () => instance.loaderConfig.transpileOnly