From 804ee91e1e00a1ba8615bbc6bb33b4e0c6caf79c Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Sun, 16 Dec 2018 21:17:33 +0200 Subject: [PATCH] fixup typescript declaration emission (#160) --- src/index.js | 9 ++- src/loaders/ts-loader.js | 1 + test/unit/ts-decl/input.js | 1 + test/unit/ts-decl/output.js | 114 ++++++++++++++++++++++++++++++++ test/unit/ts-decl/test.ts | 3 + test/unit/ts-decl/tsconfig.json | 5 ++ 6 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 test/unit/ts-decl/input.js create mode 100644 test/unit/ts-decl/output.js create mode 100644 test/unit/ts-decl/test.ts create mode 100644 test/unit/ts-decl/tsconfig.json diff --git a/src/index.js b/src/index.js index 07adef66..855a888f 100644 --- a/src/index.js +++ b/src/index.js @@ -105,7 +105,14 @@ module.exports = async ( }, { test: /\.tsx?$/, - use: [{ loader: __dirname + "/loaders/ts-loader.js", options: {} }] + use: [{ + loader: __dirname + "/loaders/ts-loader.js", + options: { + compilerOptions: { + outDir: '//' + } + } + }] } ] }, diff --git a/src/loaders/ts-loader.js b/src/loaders/ts-loader.js index cfbb02fc..b9938d17 100644 --- a/src/loaders/ts-loader.js +++ b/src/loaders/ts-loader.js @@ -23,5 +23,6 @@ module.exports = function () { const options = getOptions(this); if (!options.compiler) options.compiler = tsId; + return loader.apply(this, arguments); }; diff --git a/test/unit/ts-decl/input.js b/test/unit/ts-decl/input.js new file mode 100644 index 00000000..40caa795 --- /dev/null +++ b/test/unit/ts-decl/input.js @@ -0,0 +1 @@ +export * from './test.ts'; diff --git a/test/unit/ts-decl/output.js b/test/unit/ts-decl/output.js new file mode 100644 index 00000000..a33ae642 --- /dev/null +++ b/test/unit/ts-decl/output.js @@ -0,0 +1,114 @@ +module.exports = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 1); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +exports.__esModule = true; +function test(arg) { + return arg; +} +exports.test = test; + + +/***/ }), +/* 1 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _test_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); +/* harmony import */ var _test_ts__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_test_ts__WEBPACK_IMPORTED_MODULE_0__); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _test_ts__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _test_ts__WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); + + + +/***/ }) +/******/ ]); \ No newline at end of file diff --git a/test/unit/ts-decl/test.ts b/test/unit/ts-decl/test.ts new file mode 100644 index 00000000..5436fc69 --- /dev/null +++ b/test/unit/ts-decl/test.ts @@ -0,0 +1,3 @@ +export function test (arg: string): string { + return arg; +} \ No newline at end of file diff --git a/test/unit/ts-decl/tsconfig.json b/test/unit/ts-decl/tsconfig.json new file mode 100644 index 00000000..8f1cc9ce --- /dev/null +++ b/test/unit/ts-decl/tsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "declaration": true + } +} \ No newline at end of file