From 471b8b87fb381571c409af54fc2c9229d897c131 Mon Sep 17 00:00:00 2001 From: Emanuel Kluge Date: Fri, 13 Jan 2017 10:36:09 +0100 Subject: [PATCH 1/2] Add support for IgnoringWatchFileSystem-instance in watcher --- src/interfaces.ts | 11 ++++++++--- src/watch-run.ts | 5 +++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/interfaces.ts b/src/interfaces.ts index 8bab3e92f..2c4ed880b 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -138,10 +138,15 @@ export interface WebpackModule { }; } +export interface Watcher { + mtimes: number; // a guess +} + export interface WebpackNodeWatchFileSystem { - watcher: { - mtimes: number; // a guess - }; + watcher?: Watcher; + wfs?: { + watcher: Watcher; + } } export interface WebpackWatching { diff --git a/src/watch-run.ts b/src/watch-run.ts index be47165e3..ad9169ad6 100644 --- a/src/watch-run.ts +++ b/src/watch-run.ts @@ -10,12 +10,13 @@ function makeWatchRun( instance: interfaces.TSInstance ) { return (watching: interfaces.WebpackWatching, cb: () => void) => { - const mtimes = watching.compiler.watchFileSystem.watcher.mtimes; + const watcher = watching.compiler.watchFileSystem.watcher || + watching.compiler.watchFileSystem.wfs.watcher; if (null === instance.modifiedFiles) { instance.modifiedFiles = {}; } - Object.keys(mtimes) + Object.keys(watcher.mtimes) .filter(filePath => !!filePath.match(constants.tsTsxJsJsxRegex)) .forEach(filePath => { filePath = path.normalize(filePath); From 284e6714ea4d2169fb7b3d6873c6d818b801647d Mon Sep 17 00:00:00 2001 From: Emanuel Kluge Date: Fri, 20 Jan 2017 09:21:43 +0100 Subject: [PATCH 2/2] Add comparison test concerning #441 --- test/comparison-tests/issue441/app.ts | 4 + .../issue441/expectedOutput-2.0/bundle.js | 53 ++++++++++++ .../issue441/expectedOutput-2.0/output.txt | 4 + .../expectedOutput-2.0/patch0/bundle.js | 53 ++++++++++++ .../expectedOutput-2.0/patch0/output.txt | 4 + .../expectedOutput-2.0/patch1/bundle.js | 53 ++++++++++++ .../expectedOutput-2.0/patch1/output.txt | 4 + .../issue441/expectedOutput-2.1/bundle.js | 80 +++++++++++++++++++ .../issue441/expectedOutput-2.1/output.txt | 4 + .../expectedOutput-2.1/patch0/bundle.js | 80 +++++++++++++++++++ .../expectedOutput-2.1/patch0/output.txt | 4 + .../expectedOutput-2.1/patch1/bundle.js | 80 +++++++++++++++++++ .../expectedOutput-2.1/patch1/output.txt | 4 + test/comparison-tests/issue441/foo.ts | 3 + .../issue441/patch0/styles.d.ts | 8 ++ .../issue441/patch1/styles.d.ts | 9 +++ test/comparison-tests/issue441/styles.d.ts | 8 ++ test/comparison-tests/issue441/tsconfig.json | 4 + .../issue441/webpack.config.js | 18 +++++ 19 files changed, 477 insertions(+) create mode 100644 test/comparison-tests/issue441/app.ts create mode 100644 test/comparison-tests/issue441/expectedOutput-2.0/bundle.js create mode 100644 test/comparison-tests/issue441/expectedOutput-2.0/output.txt create mode 100644 test/comparison-tests/issue441/expectedOutput-2.0/patch0/bundle.js create mode 100644 test/comparison-tests/issue441/expectedOutput-2.0/patch0/output.txt create mode 100644 test/comparison-tests/issue441/expectedOutput-2.0/patch1/bundle.js create mode 100644 test/comparison-tests/issue441/expectedOutput-2.0/patch1/output.txt create mode 100644 test/comparison-tests/issue441/expectedOutput-2.1/bundle.js create mode 100644 test/comparison-tests/issue441/expectedOutput-2.1/output.txt create mode 100644 test/comparison-tests/issue441/expectedOutput-2.1/patch0/bundle.js create mode 100644 test/comparison-tests/issue441/expectedOutput-2.1/patch0/output.txt create mode 100644 test/comparison-tests/issue441/expectedOutput-2.1/patch1/bundle.js create mode 100644 test/comparison-tests/issue441/expectedOutput-2.1/patch1/output.txt create mode 100644 test/comparison-tests/issue441/foo.ts create mode 100644 test/comparison-tests/issue441/patch0/styles.d.ts create mode 100644 test/comparison-tests/issue441/patch1/styles.d.ts create mode 100644 test/comparison-tests/issue441/styles.d.ts create mode 100644 test/comparison-tests/issue441/tsconfig.json create mode 100644 test/comparison-tests/issue441/webpack.config.js diff --git a/test/comparison-tests/issue441/app.ts b/test/comparison-tests/issue441/app.ts new file mode 100644 index 000000000..36b0a325f --- /dev/null +++ b/test/comparison-tests/issue441/app.ts @@ -0,0 +1,4 @@ +import {IFoo} from './foo' + +var foo: IFoo; +foo.bar = 'foobar' \ No newline at end of file diff --git a/test/comparison-tests/issue441/expectedOutput-2.0/bundle.js b/test/comparison-tests/issue441/expectedOutput-2.0/bundle.js new file mode 100644 index 000000000..ca7218149 --- /dev/null +++ b/test/comparison-tests/issue441/expectedOutput-2.0/bundle.js @@ -0,0 +1,53 @@ +/******/ (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] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = 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; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports) { + + "use strict"; + var foo; + foo.bar = 'foobar'; + + +/***/ } +/******/ ]); diff --git a/test/comparison-tests/issue441/expectedOutput-2.0/output.txt b/test/comparison-tests/issue441/expectedOutput-2.0/output.txt new file mode 100644 index 000000000..4cddf77f5 --- /dev/null +++ b/test/comparison-tests/issue441/expectedOutput-2.0/output.txt @@ -0,0 +1,4 @@ + Asset Size Chunks Chunk Names +bundle.js 1.43 kB 0 [emitted] main +chunk {0} bundle.js (main) 43 bytes [rendered] + [0] ./.test/issue441/app.ts 43 bytes {0} [built] diff --git a/test/comparison-tests/issue441/expectedOutput-2.0/patch0/bundle.js b/test/comparison-tests/issue441/expectedOutput-2.0/patch0/bundle.js new file mode 100644 index 000000000..ca7218149 --- /dev/null +++ b/test/comparison-tests/issue441/expectedOutput-2.0/patch0/bundle.js @@ -0,0 +1,53 @@ +/******/ (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] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = 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; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports) { + + "use strict"; + var foo; + foo.bar = 'foobar'; + + +/***/ } +/******/ ]); diff --git a/test/comparison-tests/issue441/expectedOutput-2.0/patch0/output.txt b/test/comparison-tests/issue441/expectedOutput-2.0/patch0/output.txt new file mode 100644 index 000000000..4cddf77f5 --- /dev/null +++ b/test/comparison-tests/issue441/expectedOutput-2.0/patch0/output.txt @@ -0,0 +1,4 @@ + Asset Size Chunks Chunk Names +bundle.js 1.43 kB 0 [emitted] main +chunk {0} bundle.js (main) 43 bytes [rendered] + [0] ./.test/issue441/app.ts 43 bytes {0} [built] diff --git a/test/comparison-tests/issue441/expectedOutput-2.0/patch1/bundle.js b/test/comparison-tests/issue441/expectedOutput-2.0/patch1/bundle.js new file mode 100644 index 000000000..ca7218149 --- /dev/null +++ b/test/comparison-tests/issue441/expectedOutput-2.0/patch1/bundle.js @@ -0,0 +1,53 @@ +/******/ (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] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = 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; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports) { + + "use strict"; + var foo; + foo.bar = 'foobar'; + + +/***/ } +/******/ ]); diff --git a/test/comparison-tests/issue441/expectedOutput-2.0/patch1/output.txt b/test/comparison-tests/issue441/expectedOutput-2.0/patch1/output.txt new file mode 100644 index 000000000..4cddf77f5 --- /dev/null +++ b/test/comparison-tests/issue441/expectedOutput-2.0/patch1/output.txt @@ -0,0 +1,4 @@ + Asset Size Chunks Chunk Names +bundle.js 1.43 kB 0 [emitted] main +chunk {0} bundle.js (main) 43 bytes [rendered] + [0] ./.test/issue441/app.ts 43 bytes {0} [built] diff --git a/test/comparison-tests/issue441/expectedOutput-2.1/bundle.js b/test/comparison-tests/issue441/expectedOutput-2.1/bundle.js new file mode 100644 index 000000000..33cba6992 --- /dev/null +++ b/test/comparison-tests/issue441/expectedOutput-2.1/bundle.js @@ -0,0 +1,80 @@ +/******/ (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; + +/******/ // identity function for calling harmony imports with the correct context +/******/ __webpack_require__.i = function(value) { return value; }; + +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; + +/******/ // 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 = 0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var foo; +foo.bar = 'foobar'; + + +/***/ }) +/******/ ]); \ No newline at end of file diff --git a/test/comparison-tests/issue441/expectedOutput-2.1/output.txt b/test/comparison-tests/issue441/expectedOutput-2.1/output.txt new file mode 100644 index 000000000..54e27c875 --- /dev/null +++ b/test/comparison-tests/issue441/expectedOutput-2.1/output.txt @@ -0,0 +1,4 @@ + Asset Size Chunks Chunk Names +bundle.js 2.57 kB 0 [emitted] main +chunk {0} bundle.js (main) 43 bytes [entry] [rendered] + [0] ./.test/issue441/app.ts 43 bytes {0} [built] \ No newline at end of file diff --git a/test/comparison-tests/issue441/expectedOutput-2.1/patch0/bundle.js b/test/comparison-tests/issue441/expectedOutput-2.1/patch0/bundle.js new file mode 100644 index 000000000..33cba6992 --- /dev/null +++ b/test/comparison-tests/issue441/expectedOutput-2.1/patch0/bundle.js @@ -0,0 +1,80 @@ +/******/ (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; + +/******/ // identity function for calling harmony imports with the correct context +/******/ __webpack_require__.i = function(value) { return value; }; + +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; + +/******/ // 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 = 0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var foo; +foo.bar = 'foobar'; + + +/***/ }) +/******/ ]); \ No newline at end of file diff --git a/test/comparison-tests/issue441/expectedOutput-2.1/patch0/output.txt b/test/comparison-tests/issue441/expectedOutput-2.1/patch0/output.txt new file mode 100644 index 000000000..54e27c875 --- /dev/null +++ b/test/comparison-tests/issue441/expectedOutput-2.1/patch0/output.txt @@ -0,0 +1,4 @@ + Asset Size Chunks Chunk Names +bundle.js 2.57 kB 0 [emitted] main +chunk {0} bundle.js (main) 43 bytes [entry] [rendered] + [0] ./.test/issue441/app.ts 43 bytes {0} [built] \ No newline at end of file diff --git a/test/comparison-tests/issue441/expectedOutput-2.1/patch1/bundle.js b/test/comparison-tests/issue441/expectedOutput-2.1/patch1/bundle.js new file mode 100644 index 000000000..33cba6992 --- /dev/null +++ b/test/comparison-tests/issue441/expectedOutput-2.1/patch1/bundle.js @@ -0,0 +1,80 @@ +/******/ (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; + +/******/ // identity function for calling harmony imports with the correct context +/******/ __webpack_require__.i = function(value) { return value; }; + +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; + +/******/ // 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 = 0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var foo; +foo.bar = 'foobar'; + + +/***/ }) +/******/ ]); \ No newline at end of file diff --git a/test/comparison-tests/issue441/expectedOutput-2.1/patch1/output.txt b/test/comparison-tests/issue441/expectedOutput-2.1/patch1/output.txt new file mode 100644 index 000000000..54e27c875 --- /dev/null +++ b/test/comparison-tests/issue441/expectedOutput-2.1/patch1/output.txt @@ -0,0 +1,4 @@ + Asset Size Chunks Chunk Names +bundle.js 2.57 kB 0 [emitted] main +chunk {0} bundle.js (main) 43 bytes [entry] [rendered] + [0] ./.test/issue441/app.ts 43 bytes {0} [built] \ No newline at end of file diff --git a/test/comparison-tests/issue441/foo.ts b/test/comparison-tests/issue441/foo.ts new file mode 100644 index 000000000..ed5eb8dc9 --- /dev/null +++ b/test/comparison-tests/issue441/foo.ts @@ -0,0 +1,3 @@ +export interface IFoo { + bar: string; +} \ No newline at end of file diff --git a/test/comparison-tests/issue441/patch0/styles.d.ts b/test/comparison-tests/issue441/patch0/styles.d.ts new file mode 100644 index 000000000..21454ac49 --- /dev/null +++ b/test/comparison-tests/issue441/patch0/styles.d.ts @@ -0,0 +1,8 @@ + +export interface IStyles { + bar: string; +} + +declare const styles: IStyles; + +export default styles; diff --git a/test/comparison-tests/issue441/patch1/styles.d.ts b/test/comparison-tests/issue441/patch1/styles.d.ts new file mode 100644 index 000000000..687b2c450 --- /dev/null +++ b/test/comparison-tests/issue441/patch1/styles.d.ts @@ -0,0 +1,9 @@ + +export interface IStyles { + foo: string; + ipsum: string; +} + +declare const styles: IStyles; + +export default styles; diff --git a/test/comparison-tests/issue441/styles.d.ts b/test/comparison-tests/issue441/styles.d.ts new file mode 100644 index 000000000..be63e26ef --- /dev/null +++ b/test/comparison-tests/issue441/styles.d.ts @@ -0,0 +1,8 @@ + +export interface IStyles { + foo: string; +} + +declare const styles: IStyles; + +export default styles; diff --git a/test/comparison-tests/issue441/tsconfig.json b/test/comparison-tests/issue441/tsconfig.json new file mode 100644 index 000000000..0efa0a638 --- /dev/null +++ b/test/comparison-tests/issue441/tsconfig.json @@ -0,0 +1,4 @@ +{ + "compilerOptions": { + } +} \ No newline at end of file diff --git a/test/comparison-tests/issue441/webpack.config.js b/test/comparison-tests/issue441/webpack.config.js new file mode 100644 index 000000000..9136fa55a --- /dev/null +++ b/test/comparison-tests/issue441/webpack.config.js @@ -0,0 +1,18 @@ +var webpack = require('webpack'); + +module.exports = { + entry: './app.ts', + output: { + filename: 'bundle.js' + }, + resolve: { + extensions: ['.ts', '.js'] + }, + module: { + rules: [{ + test: /\.ts$/, + loader: '../../index.js' + }] + }, + plugins: [new webpack.IgnorePlugin(/\.d\.ts$/)] +};