diff --git a/src/servicesHost.ts b/src/servicesHost.ts index f094ba5da..4f65fb2ed 100644 --- a/src/servicesHost.ts +++ b/src/servicesHost.ts @@ -152,7 +152,8 @@ function resolveModuleName( isExternalLibraryImport: tsResolution.resolvedModule.isExternalLibraryImport }; if (resolutionResult!) { - if (resolutionResult!.resolvedFileName === tsResolutionResult.resolvedFileName) { + if (resolutionResult!.resolvedFileName === tsResolutionResult.resolvedFileName || + /node_modules(\\|\/).*\.d\.ts$/.test(tsResolutionResult.resolvedFileName)) { resolutionResult!.isExternalLibraryImport = tsResolutionResult.isExternalLibraryImport; } } else { diff --git a/test/execution-tests/2.1.4_babel-allowJsImportTypes/README.md b/test/execution-tests/2.1.4_babel-allowJsImportTypes/README.md new file mode 100644 index 000000000..06a794d2f --- /dev/null +++ b/test/execution-tests/2.1.4_babel-allowJsImportTypes/README.md @@ -0,0 +1,3 @@ +This test confirms that you can import typings from an npm module when `allowJs` is true. See details [#586](https://github.com/TypeStrong/ts-loader/issues/586). + +This test is roughly based on https://github.com/bsouthga/ts-loader-types-error-example \ No newline at end of file diff --git a/test/execution-tests/2.1.4_babel-allowJsImportTypes/karma.conf.js b/test/execution-tests/2.1.4_babel-allowJsImportTypes/karma.conf.js new file mode 100644 index 000000000..90545c70d --- /dev/null +++ b/test/execution-tests/2.1.4_babel-allowJsImportTypes/karma.conf.js @@ -0,0 +1,51 @@ +/* eslint-disable no-var, strict */ +'use strict'; +var webpackConfig = require('./webpack.config.js'); + +module.exports = function(config) { + // Documentation: https://karma-runner.github.io/0.13/config/configuration-file.html + config.set({ + browsers: [ 'PhantomJS' ], + + files: [ + // This ensures we have the es6 shims in place and then loads all the tests + 'main.js' + ], + + port: 9876, + + frameworks: [ 'jasmine' ], + + logLevel: config.LOG_INFO, //config.LOG_DEBUG + + preprocessors: { + 'main.js': [ 'webpack', 'sourcemap' ] + }, + + webpack: { + devtool: 'inline-source-map', + module: webpackConfig.module, + resolve: webpackConfig.resolve, + + // for test harness purposes only, you would not need this in a normal project + resolveLoader: webpackConfig.resolveLoader + }, + + webpackMiddleware: { + quiet: true, + stats: { + colors: true + } + }, + + // reporter options + mochaReporter: { + colors: { + success: 'bgGreen', + info: 'cyan', + warning: 'bgBlue', + error: 'bgRed' + } + } + }); +}; diff --git a/test/execution-tests/2.1.4_babel-allowJsImportTypes/main.js b/test/execution-tests/2.1.4_babel-allowJsImportTypes/main.js new file mode 100644 index 000000000..735130b0e --- /dev/null +++ b/test/execution-tests/2.1.4_babel-allowJsImportTypes/main.js @@ -0,0 +1,4 @@ +import 'babel-polyfill'; + +const testsContext = require.context('./', true, /\.tests\.js$/); +testsContext.keys().forEach(testsContext); diff --git a/test/execution-tests/2.1.4_babel-allowJsImportTypes/package.json b/test/execution-tests/2.1.4_babel-allowJsImportTypes/package.json new file mode 100644 index 000000000..3a82c6a5e --- /dev/null +++ b/test/execution-tests/2.1.4_babel-allowJsImportTypes/package.json @@ -0,0 +1,16 @@ +{ + "name": "allow-js-import-types", + "version": "1.0.0", + "main": "index.js", + "devDependencies": { + "babel": "^6.0.0", + "babel-core": "^6.0.0", + "babel-loader": "^7.0.0", + "babel-preset-es2015": "^6.0.0", + "jasmine-core": "^2.3.4" + }, + "dependencies": { + "babel-polyfill": "^6.0.0", + "event-rank": "^0.0.10" + } +} diff --git a/test/execution-tests/2.1.4_babel-allowJsImportTypes/src/entry.js b/test/execution-tests/2.1.4_babel-allowJsImportTypes/src/entry.js new file mode 100644 index 000000000..e224b9ff5 --- /dev/null +++ b/test/execution-tests/2.1.4_babel-allowJsImportTypes/src/entry.js @@ -0,0 +1,5 @@ +import EventRank from './imported'; + +export function getEventRank() { + return EventRank; +} diff --git a/test/execution-tests/2.1.4_babel-allowJsImportTypes/src/imported.ts b/test/execution-tests/2.1.4_babel-allowJsImportTypes/src/imported.ts new file mode 100644 index 000000000..4e047d329 --- /dev/null +++ b/test/execution-tests/2.1.4_babel-allowJsImportTypes/src/imported.ts @@ -0,0 +1,3 @@ +import { EventRank } from 'event-rank'; + +export default EventRank; \ No newline at end of file diff --git a/test/execution-tests/2.1.4_babel-allowJsImportTypes/test/entry.tests.js b/test/execution-tests/2.1.4_babel-allowJsImportTypes/test/entry.tests.js new file mode 100644 index 000000000..5ffccb5f4 --- /dev/null +++ b/test/execution-tests/2.1.4_babel-allowJsImportTypes/test/entry.tests.js @@ -0,0 +1,8 @@ +var entry = require('../src/entry'); + +describe("entry", function() { + it("getEventRank produces something", function() { + var EventRank = entry.getEventRank(); + expect(EventRank).not.toBeUndefined(); + }); +}); diff --git a/test/execution-tests/2.1.4_babel-allowJsImportTypes/tsconfig.json b/test/execution-tests/2.1.4_babel-allowJsImportTypes/tsconfig.json new file mode 100644 index 000000000..930957a60 --- /dev/null +++ b/test/execution-tests/2.1.4_babel-allowJsImportTypes/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "allowJs": true, + "module": "es2015", + "moduleResolution": "node", + "noEmitOnError": true, + "noImplicitAny": false, + "sourceMap": true, + "target": "es2015" + } +} \ No newline at end of file diff --git a/test/execution-tests/2.1.4_babel-allowJsImportTypes/webpack.config.js b/test/execution-tests/2.1.4_babel-allowJsImportTypes/webpack.config.js new file mode 100644 index 000000000..76a3718a5 --- /dev/null +++ b/test/execution-tests/2.1.4_babel-allowJsImportTypes/webpack.config.js @@ -0,0 +1,55 @@ +/* eslint-disable no-var, strict, prefer-arrow-callback */ +'use strict'; + +var path = require('path'); +var webpack = require('webpack'); + +var babelOptions = { + "presets": [ + [ + "es2015", + { + "modules": false + } + ] + ] +}; + +module.exports = { + entry: './src/entry.js', + output: { + filename: 'bundle.js' + }, + module: { + rules: [{ + test: /\.ts(x?)$/, + exclude: /node_modules/, + use: [ + { + loader: 'babel-loader', + options: babelOptions + }, + { + loader: 'ts-loader', + options: { entryFileIsJs: true } + } + ] + }, { + test: /\.js$/, + exclude: /node_modules/, + use: [ + { + loader: 'babel-loader', + options: babelOptions + } + ] + }] + }, + 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