diff --git a/CHANGELOG.md b/CHANGELOG.md index 96225a57c..2ebeff967 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## v7.0.5 +* [Apply other loaders when updating files in watch mode](https://github.com/TypeStrong/ts-loader/pull/1115) - thanks @iorate + ## v7.0.4 * [Ensure a separate webpack instance is created for different loader options](https://github.com/TypeStrong/ts-loader/pull/1104) - thanks @appzuka diff --git a/package.json b/package.json index fe82cf2c6..38cab0f88 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ts-loader", - "version": "7.0.4", + "version": "7.0.5", "description": "TypeScript loader for webpack", "main": "index.js", "types": "dist", diff --git a/src/instances.ts b/src/instances.ts index 195f733d0..2f83d81b6 100644 --- a/src/instances.ts +++ b/src/instances.ts @@ -283,7 +283,7 @@ export function initializeInstance( ); loader._compiler.hooks.watchRun.tapAsync( 'ts-loader', - makeWatchRun(instance) + makeWatchRun(instance, loader) ); } } else { @@ -345,7 +345,7 @@ export function initializeInstance( ); loader._compiler.hooks.watchRun.tapAsync( 'ts-loader', - makeWatchRun(instance) + makeWatchRun(instance, loader) ); } } diff --git a/src/stringify-loader.ts b/src/stringify-loader.ts new file mode 100644 index 000000000..5fc3e8892 --- /dev/null +++ b/src/stringify-loader.ts @@ -0,0 +1 @@ +module.exports = (source: string) => JSON.stringify(source); diff --git a/src/watch-run.ts b/src/watch-run.ts index f744d4976..a82899d1a 100644 --- a/src/watch-run.ts +++ b/src/watch-run.ts @@ -1,3 +1,4 @@ +import * as path from 'path'; import * as webpack from 'webpack'; import * as constants from './constants'; @@ -8,12 +9,19 @@ import { readFile } from './utils'; /** * Make function which will manually update changed files */ -export function makeWatchRun(instance: TSInstance) { +export function makeWatchRun( + instance: TSInstance, + loader: webpack.loader.LoaderContext +) { // Called Before starting compilation after watch const lastTimes = new Map(); const startTime = 0; - return (compiler: webpack.Compiler, callback: () => void) => { + // Save the loader index. + const loaderIndex = loader.loaderIndex; + + return (compiler: webpack.Compiler, callback: (err?: Error) => void) => { + const promises = []; if (instance.loaderOptions.transpileOnly) { instance.reportTranspileErrors = true; } else { @@ -27,7 +35,7 @@ export function makeWatchRun(instance: TSInstance) { } lastTimes.set(filePath, date); - updateFile(instance, filePath); + promises.push(updateFile(instance, filePath, loader, loaderIndex)); } // On watch update add all known dts files expect the ones in node_modules @@ -37,7 +45,7 @@ export function makeWatchRun(instance: TSInstance) { filePath.match(constants.dtsDtsxOrDtsDtsxMapRegex) !== null && filePath.match(constants.nodeModules) === null ) { - updateFile(instance, filePath); + promises.push(updateFile(instance, filePath, loader, loaderIndex)); } } } @@ -45,18 +53,52 @@ export function makeWatchRun(instance: TSInstance) { // Update all the watched files from solution builder if (instance.solutionBuilderHost) { for (const filePath of instance.solutionBuilderHost.watchedFiles.keys()) { - updateFile(instance, filePath); + promises.push(updateFile(instance, filePath, loader, loaderIndex)); } } - callback(); + Promise.all(promises) + .then(() => callback()) + .catch(err => callback(err)); }; } -function updateFile(instance: TSInstance, filePath: string) { - updateFileWithText( - instance, - filePath, - nFilePath => readFile(nFilePath) || '' - ); +function updateFile( + instance: TSInstance, + filePath: string, + loader: webpack.loader.LoaderContext, + loaderIndex: number +) { + return new Promise((resolve, reject) => { + // When other loaders are specified after ts-loader + // (e.g. `{ test: /\.ts$/, use: ['ts-loader', 'other-loader'] }`), + // manually apply them to TypeScript files. + // Otherwise, files not 'preprocessed' by them may cause complication errors (#1111). + if ( + loaderIndex + 1 < loader.loaders.length && + instance.rootFileNames.has(path.normalize(filePath)) + ) { + let request = `!!${path.resolve(__dirname, 'stringify-loader.js')}!`; + for (let i = loaderIndex + 1; i < loader.loaders.length; ++i) { + request += loader.loaders[i].request + '!'; + } + request += filePath; + loader.loadModule(request, (err, source) => { + if (err) { + reject(err); + } else { + const text = JSON.parse(source); + updateFileWithText(instance, filePath, () => text); + resolve(); + } + }); + } else { + updateFileWithText( + instance, + filePath, + nFilePath => readFile(nFilePath) || '' + ); + resolve(); + } + }); } diff --git a/test/comparison-tests/otherLoadersWatch/app.ts b/test/comparison-tests/otherLoadersWatch/app.ts new file mode 100644 index 000000000..9d035d3de --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/app.ts @@ -0,0 +1,2 @@ +import { message } from './message'; +console.log(message); diff --git a/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/bundle.js b/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/bundle.js new file mode 100644 index 000000000..0d390f419 --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/bundle.js @@ -0,0 +1,113 @@ +/******/ (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 = "./app.ts"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./app.ts": +/*!****************!*\ + !*** ./app.ts ***! + \****************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nexports.__esModule = true;\nvar message_1 = __webpack_require__(/*! ./message */ \"./message.ts\");\nconsole.log(message_1.message);\n\n\n//# sourceURL=webpack:///./app.ts?"); + +/***/ }), + +/***/ "./message.ts": +/*!********************!*\ + !*** ./message.ts ***! + \********************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nexports.__esModule = true;\nexports.message = 'Hello, world!';\n\n\n//# sourceURL=webpack:///./message.ts?"); + +/***/ }) + +/******/ }); \ No newline at end of file diff --git a/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/output.txt b/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/output.txt new file mode 100644 index 000000000..77bb1379a --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/output.txt @@ -0,0 +1,5 @@ + Asset Size Chunks Chunk Names +bundle.js 4.22 KiB main [emitted] main +Entrypoint main = bundle.js +[./app.ts] 111 bytes {main} [built] +[./message.ts] 76 bytes {main} [built] \ No newline at end of file diff --git a/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/patch0/bundle.js b/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/patch0/bundle.js new file mode 100644 index 000000000..0d390f419 --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/patch0/bundle.js @@ -0,0 +1,113 @@ +/******/ (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 = "./app.ts"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./app.ts": +/*!****************!*\ + !*** ./app.ts ***! + \****************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nexports.__esModule = true;\nvar message_1 = __webpack_require__(/*! ./message */ \"./message.ts\");\nconsole.log(message_1.message);\n\n\n//# sourceURL=webpack:///./app.ts?"); + +/***/ }), + +/***/ "./message.ts": +/*!********************!*\ + !*** ./message.ts ***! + \********************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nexports.__esModule = true;\nexports.message = 'Hello, world!';\n\n\n//# sourceURL=webpack:///./message.ts?"); + +/***/ }) + +/******/ }); \ No newline at end of file diff --git a/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/patch0/output.txt b/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/patch0/output.txt new file mode 100644 index 000000000..fde3f76a7 --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/patch0/output.txt @@ -0,0 +1,5 @@ + Asset Size Chunks Chunk Names +bundle.js 4.22 KiB main [emitted] main +Entrypoint main = bundle.js +[./app.ts] 111 bytes {main} [built] +[./message.ts] 76 bytes {main} \ No newline at end of file diff --git a/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/patch1/bundle.js b/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/patch1/bundle.js new file mode 100644 index 000000000..0d390f419 --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/patch1/bundle.js @@ -0,0 +1,113 @@ +/******/ (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 = "./app.ts"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./app.ts": +/*!****************!*\ + !*** ./app.ts ***! + \****************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nexports.__esModule = true;\nvar message_1 = __webpack_require__(/*! ./message */ \"./message.ts\");\nconsole.log(message_1.message);\n\n\n//# sourceURL=webpack:///./app.ts?"); + +/***/ }), + +/***/ "./message.ts": +/*!********************!*\ + !*** ./message.ts ***! + \********************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nexports.__esModule = true;\nexports.message = 'Hello, world!';\n\n\n//# sourceURL=webpack:///./message.ts?"); + +/***/ }) + +/******/ }); \ No newline at end of file diff --git a/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/patch1/output.txt b/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/patch1/output.txt new file mode 100644 index 000000000..77bb1379a --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/expectedOutput-3.8/patch1/output.txt @@ -0,0 +1,5 @@ + Asset Size Chunks Chunk Names +bundle.js 4.22 KiB main [emitted] main +Entrypoint main = bundle.js +[./app.ts] 111 bytes {main} [built] +[./message.ts] 76 bytes {main} [built] \ No newline at end of file diff --git a/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/bundle.js b/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/bundle.js new file mode 100644 index 000000000..b341214dd --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/bundle.js @@ -0,0 +1,113 @@ +/******/ (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 = "./app.ts"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./app.ts": +/*!****************!*\ + !*** ./app.ts ***! + \****************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar message_1 = __webpack_require__(/*! ./message */ \"./message.ts\");\nconsole.log(message_1.message);\n\n\n//# sourceURL=webpack:///./app.ts?"); + +/***/ }), + +/***/ "./message.ts": +/*!********************!*\ + !*** ./message.ts ***! + \********************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.message = 'Hello, world!';\n\n\n//# sourceURL=webpack:///./message.ts?"); + +/***/ }) + +/******/ }); \ No newline at end of file diff --git a/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/output.txt b/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/output.txt new file mode 100644 index 000000000..b2a367539 --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/output.txt @@ -0,0 +1,5 @@ + Asset Size Chunks Chunk Names +bundle.js 4.3 KiB main [emitted] main +Entrypoint main = bundle.js +[./app.ts] 147 bytes {main} [built] +[./message.ts] 112 bytes {main} [built] \ No newline at end of file diff --git a/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/patch0/bundle.js b/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/patch0/bundle.js new file mode 100644 index 000000000..b341214dd --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/patch0/bundle.js @@ -0,0 +1,113 @@ +/******/ (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 = "./app.ts"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./app.ts": +/*!****************!*\ + !*** ./app.ts ***! + \****************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar message_1 = __webpack_require__(/*! ./message */ \"./message.ts\");\nconsole.log(message_1.message);\n\n\n//# sourceURL=webpack:///./app.ts?"); + +/***/ }), + +/***/ "./message.ts": +/*!********************!*\ + !*** ./message.ts ***! + \********************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.message = 'Hello, world!';\n\n\n//# sourceURL=webpack:///./message.ts?"); + +/***/ }) + +/******/ }); \ No newline at end of file diff --git a/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/patch0/output.txt b/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/patch0/output.txt new file mode 100644 index 000000000..8e6e73e57 --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/patch0/output.txt @@ -0,0 +1,5 @@ + Asset Size Chunks Chunk Names +bundle.js 4.3 KiB main [emitted] main +Entrypoint main = bundle.js +[./app.ts] 147 bytes {main} [built] +[./message.ts] 112 bytes {main} \ No newline at end of file diff --git a/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/patch1/bundle.js b/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/patch1/bundle.js new file mode 100644 index 000000000..b341214dd --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/patch1/bundle.js @@ -0,0 +1,113 @@ +/******/ (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 = "./app.ts"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./app.ts": +/*!****************!*\ + !*** ./app.ts ***! + \****************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar message_1 = __webpack_require__(/*! ./message */ \"./message.ts\");\nconsole.log(message_1.message);\n\n\n//# sourceURL=webpack:///./app.ts?"); + +/***/ }), + +/***/ "./message.ts": +/*!********************!*\ + !*** ./message.ts ***! + \********************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.message = 'Hello, world!';\n\n\n//# sourceURL=webpack:///./message.ts?"); + +/***/ }) + +/******/ }); \ No newline at end of file diff --git a/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/patch1/output.txt b/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/patch1/output.txt new file mode 100644 index 000000000..927644781 --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/expectedOutput-transpile-3.8/patch1/output.txt @@ -0,0 +1,5 @@ + Asset Size Chunks Chunk Names +bundle.js 4.3 KiB main [emitted] main +Entrypoint main = bundle.js +[./app.ts] 147 bytes {main} +[./message.ts] 112 bytes {main} [built] \ No newline at end of file diff --git a/test/comparison-tests/otherLoadersWatch/message.ts b/test/comparison-tests/otherLoadersWatch/message.ts new file mode 100644 index 000000000..7795213e6 --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/message.ts @@ -0,0 +1,2 @@ +BUG +export const message = 'Hello, world!'; diff --git a/test/comparison-tests/otherLoadersWatch/patch0/app.ts b/test/comparison-tests/otherLoadersWatch/patch0/app.ts new file mode 100644 index 000000000..c87d99bad --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/patch0/app.ts @@ -0,0 +1,3 @@ +import { message } from './message'; +BUG +console.log(message); diff --git a/test/comparison-tests/otherLoadersWatch/patch1/message.ts b/test/comparison-tests/otherLoadersWatch/patch1/message.ts new file mode 100644 index 000000000..fc9a56dc5 --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/patch1/message.ts @@ -0,0 +1,3 @@ +BUG +export const message = 'Hello, world!'; +BUG diff --git a/test/comparison-tests/otherLoadersWatch/remove-bug-loader.js b/test/comparison-tests/otherLoadersWatch/remove-bug-loader.js new file mode 100644 index 000000000..c9b13abb6 --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/remove-bug-loader.js @@ -0,0 +1 @@ +module.exports = contents => contents.replace(/bug/gi, ''); diff --git a/test/comparison-tests/otherLoadersWatch/tsconfig.json b/test/comparison-tests/otherLoadersWatch/tsconfig.json new file mode 100644 index 000000000..b2d4c82d5 --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/tsconfig.json @@ -0,0 +1,5 @@ +{ + "exclude": [ + "patch*" + ] +} diff --git a/test/comparison-tests/otherLoadersWatch/webpack.config.js b/test/comparison-tests/otherLoadersWatch/webpack.config.js new file mode 100644 index 000000000..9ce80e4a4 --- /dev/null +++ b/test/comparison-tests/otherLoadersWatch/webpack.config.js @@ -0,0 +1,21 @@ +module.exports = { + mode: 'development', + entry: './app.ts', + output: { + filename: 'bundle.js' + }, + resolve: { + extensions: ['.ts', '.js'] + }, + module: { + rules: [ + { + test: /\.ts$/, + use: [ + { loader: 'ts-loader' }, + { loader: './remove-bug-loader.js' } + ] + } + ] + } +}