diff --git a/.travis.yml b/.travis.yml index 1ada50d11..b9b5b1631 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,7 @@ install: - yarn lint - yarn add $TYPESCRIPT env: + - TYPESCRIPT=typescript@3.5.1 - TYPESCRIPT=typescript@3.4.4 - TYPESCRIPT=typescript@next - TYPESCRIPT=typescript@3.3.3 diff --git a/CHANGELOG.md b/CHANGELOG.md index 31948bcb8..908a1b0d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## v6.0.2 +* [Set configFilePath when reading config file](https://github.com/TypeStrong/ts-loader/pull/942) (#939) - thanks @konpikwastaken! + ## v6.0.1 * [Fix issue with `resolveTypeReferenceDirective` causing errors like `Cannot find name 'it'` with Jest](https://github.com/TypeStrong/ts-loader/pull/936) (#934) (#919) - thanks @andrewbranch! diff --git a/appveyor.yml b/appveyor.yml index 8e0445037..67faad0d8 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,6 +3,7 @@ environment: FORCE_COLOR: 1 nodejs_version: "10" matrix: + - TYPESCRIPT: typescript@3.5.1 - TYPESCRIPT: typescript@3.4.4 - TYPESCRIPT: typescript@next - TYPESCRIPT: typescript@3.3.3 diff --git a/package.json b/package.json index 95fd69457..184e92a4d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ts-loader", - "version": "6.0.1", + "version": "6.0.2", "description": "TypeScript loader for webpack", "main": "index.js", "types": "dist/types/index.d.ts", diff --git a/src/config.ts b/src/config.ts index 0fb4a556a..d0cef0206 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,5 +1,6 @@ import { Chalk } from 'chalk'; import * as path from 'path'; +import * as semver from 'semver'; import * as typescript from 'typescript'; import * as webpack from 'webpack'; @@ -125,7 +126,8 @@ function findConfigFile( export function getConfigParseResult( compiler: typeof typescript, configFile: ConfigFile, - basePath: string + basePath: string, + configFilePath: string | undefined ) { const configParseResult = compiler.parseJsonConfigFileContent( configFile.config, @@ -133,5 +135,12 @@ export function getConfigParseResult( basePath ); + if (semver.gte(compiler.version, '3.5.0')) { + // set internal options.configFilePath flag on options to denote that we read this from a file + configParseResult.options = Object.assign({}, configParseResult.options, { + configFilePath + }); + } + return configParseResult; } diff --git a/src/instances.ts b/src/instances.ts index 4cbe64642..c745687b3 100644 --- a/src/instances.ts +++ b/src/instances.ts @@ -99,7 +99,8 @@ function successfulTypeScriptInstance( const configParseResult = getConfigParseResult( compiler, configFile, - basePath + basePath, + configFilePath ); if (configParseResult.errors.length > 0 && !loaderOptions.happyPackMode) { diff --git a/test/execution-tests/3.5.1_incremental/karma.conf.js b/test/execution-tests/3.5.1_incremental/karma.conf.js new file mode 100644 index 000000000..a38a197f0 --- /dev/null +++ b/test/execution-tests/3.5.1_incremental/karma.conf.js @@ -0,0 +1,17 @@ +/* eslint-disable no-var, strict */ +'use strict'; +var webpackConfig = require('./webpack.config.js'); +var makeKarmaConfig = require('../../karmaConfig'); + +module.exports = function(config) { + config.set( + makeKarmaConfig({ + config, + webpackConfig, + files: [ + // This ensures we have the es6 shims in place from babel and then loads all the tests + 'main.js' + ] + }) + ); +}; diff --git a/test/execution-tests/3.5.1_incremental/main.js b/test/execution-tests/3.5.1_incremental/main.js new file mode 100644 index 000000000..118f90112 --- /dev/null +++ b/test/execution-tests/3.5.1_incremental/main.js @@ -0,0 +1,2 @@ +const testsContext = require.context('./', true, /\.tests\.ts(x?)$/); +testsContext.keys().forEach(testsContext); diff --git a/test/execution-tests/3.5.1_incremental/package.json b/test/execution-tests/3.5.1_incremental/package.json new file mode 100644 index 000000000..bf5cc6f84 --- /dev/null +++ b/test/execution-tests/3.5.1_incremental/package.json @@ -0,0 +1,10 @@ +{ + "name": "3.5.0_incremental", + "license": "MIT", + "version": "1.0.0", + "main": "index.js", + "devDependencies": { + "@types/jasmine": "^2.5.35", + "jasmine-core": "^2.3.4" + } +} \ No newline at end of file diff --git a/test/execution-tests/3.5.1_incremental/src/main.ts b/test/execution-tests/3.5.1_incremental/src/main.ts new file mode 100644 index 000000000..59535e048 --- /dev/null +++ b/test/execution-tests/3.5.1_incremental/src/main.ts @@ -0,0 +1,11 @@ +class Foo { + private message: string; + constructor() { + this.message = 'hello world'; + } + public write() { + // tslint:disable-next-line:no-console + console.log(this.message); + } +} +export default Foo; \ No newline at end of file diff --git a/test/execution-tests/3.5.1_incremental/test/main.tests.ts b/test/execution-tests/3.5.1_incremental/test/main.tests.ts new file mode 100644 index 000000000..6242008ef --- /dev/null +++ b/test/execution-tests/3.5.1_incremental/test/main.tests.ts @@ -0,0 +1,8 @@ +import main from '../src/main'; + +describe("main", () => { + it("should compile successfully", () => { + // blank expectation, actual failure is in build + expect(main).not.toBeNull(); + }); +}); diff --git a/test/execution-tests/3.5.1_incremental/tsconfig.json b/test/execution-tests/3.5.1_incremental/tsconfig.json new file mode 100644 index 000000000..37cadf6c7 --- /dev/null +++ b/test/execution-tests/3.5.1_incremental/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "noEmitOnError": true, + "noErrorTruncation": true, + "incremental": true, + "outDir": "./dist", + "target": "es5", + "module": "es6" + } +} diff --git a/test/execution-tests/3.5.1_incremental/webpack.config.js b/test/execution-tests/3.5.1_incremental/webpack.config.js new file mode 100644 index 000000000..aef2c421f --- /dev/null +++ b/test/execution-tests/3.5.1_incremental/webpack.config.js @@ -0,0 +1,34 @@ +/* eslint-disable no-var, strict, prefer-arrow-callback */ +'use strict'; + +var path = require('path'); +var webpack = require('webpack'); +var path = require('path'); + +module.exports = { + mode: 'development', + entry: './src/main.ts', + output: { + filename: 'bundle.js' + }, + module: { + rules: [{ + test: /\.ts(x?)$/, + exclude: /node_modules/, + use: [{ + loader: 'ts-loader', + }] + }] + }, + resolve: { + // Add `.ts` and `.tsx` as a resolvable extension. + extensions: ['.ts', '.tsx', '.js'] + }, +}; + +// for test harness purposes only, you would not need this in a normal project +module.exports.resolveLoader = { + alias: { + 'ts-loader': path.join(__dirname, "../../../index.js") + } +} \ No newline at end of file diff --git a/test/execution-tests/3.5.1_incremental/yarn.lock b/test/execution-tests/3.5.1_incremental/yarn.lock new file mode 100644 index 000000000..4102f8f14 --- /dev/null +++ b/test/execution-tests/3.5.1_incremental/yarn.lock @@ -0,0 +1,11 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/jasmine@^2.5.35": + version "2.8.16" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.8.16.tgz#a6cb24b1149d65293bd616923500014838e14e7d" + +jasmine-core@^2.3.4: + version "2.99.1" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.99.1.tgz#e6400df1e6b56e130b61c4bcd093daa7f6e8ca15"