Skip to content

Commit 48626a9

Browse files
authored
add common appendTsTsxSuffixesIfRequired function to instance (#924)
* add common appendTsTsxSuffixesIfRequired function to instance * update changelog / drop node 11
1 parent 0fd623f commit 48626a9

File tree

6 files changed

+35
-30
lines changed

6 files changed

+35
-30
lines changed

.travis.yml

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ language: node_js
66
node_js:
77
- "8"
88
- "10"
9-
- "11"
109
- "12"
1110
sudo: required
1211
install:

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## v5.4.4
4+
5+
* [refactor: add common appendTsTsxSuffixesIfRequired function to instance](https://github.com/TypeStrong/ts-loader/pull/924) - thanks @johnnyreilly!
6+
37
## v5.4.3
48

59
* [feat: resolveTypeReferenceDirective support for yarn PnP](https://github.com/TypeStrong/ts-loader/pull/921) - thanks @johnnyreilly!

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ts-loader",
3-
"version": "5.4.3",
3+
"version": "5.4.4",
44
"description": "TypeScript loader for webpack",
55
"main": "index.js",
66
"types": "dist/types/index.d.ts",

src/instances.ts

+19-3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
import * as logger from './logger';
2020
import { makeServicesHost, makeWatchHost } from './servicesHost';
2121
import {
22+
appendSuffixesIfMatch,
2223
ensureProgram,
2324
formatErrors,
2425
isUsingProjectReferences,
@@ -125,6 +126,19 @@ function successfulTypeScriptInstance(
125126
const files: TSFiles = new Map<string, TSFile>();
126127
const otherFiles: TSFiles = new Map<string, TSFile>();
127128

129+
const appendTsTsxSuffixesIfRequired =
130+
loaderOptions.appendTsSuffixTo.length > 0 ||
131+
loaderOptions.appendTsxSuffixTo.length > 0
132+
? (filePath: string) =>
133+
appendSuffixesIfMatch(
134+
{
135+
'.ts': loaderOptions.appendTsSuffixTo,
136+
'.tsx': loaderOptions.appendTsxSuffixTo
137+
},
138+
filePath
139+
)
140+
: (filePath: string) => filePath;
141+
128142
// same strategy as https://github.com/s-panferov/awesome-typescript-loader/pull/531/files
129143
let { getCustomTransformers: customerTransformers } = loaderOptions;
130144
let getCustomTransformers = Function.prototype;
@@ -182,6 +196,7 @@ function successfulTypeScriptInstance(
182196
instances[loaderOptions.instance] = {
183197
compiler,
184198
compilerOptions,
199+
appendTsTsxSuffixesIfRequired,
185200
loaderOptions,
186201
files,
187202
otherFiles,
@@ -230,6 +245,7 @@ function successfulTypeScriptInstance(
230245
const instance: TSInstance = (instances[loaderOptions.instance] = {
231246
compiler,
232247
compilerOptions,
248+
appendTsTsxSuffixesIfRequired,
233249
loaderOptions,
234250
files,
235251
otherFiles,
@@ -257,8 +273,6 @@ function successfulTypeScriptInstance(
257273
log,
258274
loader,
259275
instance,
260-
loaderOptions.appendTsSuffixTo,
261-
loaderOptions.appendTsxSuffixTo,
262276
configParseResult.projectReferences
263277
);
264278
instance.watchOfFilesAndCompilerOptions = compiler.createWatchProgram(
@@ -288,7 +302,9 @@ function successfulTypeScriptInstance(
288302
loader._compiler.hooks.watchRun.tap('ts-loader', servicesHost.clearCache);
289303
}
290304

291-
instance.transformers = getCustomTransformers(instance.languageService!.getProgram());
305+
instance.transformers = getCustomTransformers(
306+
instance.languageService!.getProgram()
307+
);
292308
}
293309

294310
loader._compiler.hooks.afterCompile.tapAsync(

src/interfaces.ts

+2
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,8 @@ export interface WatchHost
240240
export interface TSInstance {
241241
compiler: typeof typescript;
242242
compilerOptions: typescript.CompilerOptions;
243+
/** Used for Vue for the most part */
244+
appendTsTsxSuffixesIfRequired: (filePath: string) => string;
243245
loaderOptions: LoaderOptions;
244246
/**
245247
* a cache of all the files

src/servicesHost.ts

+9-25
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
} from './interfaces';
1515
import * as logger from './logger';
1616
import { makeResolver } from './resolver';
17-
import { appendSuffixesIfMatch, readFile, unorderedRemoveItem } from './utils';
17+
import { readFile, unorderedRemoveItem } from './utils';
1818

1919
export type Action = () => void;
2020

@@ -37,10 +37,9 @@ export function makeServicesHost(
3737
const {
3838
compiler,
3939
compilerOptions,
40+
appendTsTsxSuffixesIfRequired,
4041
files,
4142
loaderOptions: {
42-
appendTsSuffixTo,
43-
appendTsxSuffixTo,
4443
resolveModuleName: customResolveModuleName,
4544
resolveTypeReferenceDirective: customResolveTypeReferenceDirective
4645
}
@@ -85,8 +84,7 @@ export function makeServicesHost(
8584
customResolveTypeReferenceDirective,
8685
customResolveModuleName,
8786
resolveSync,
88-
appendTsSuffixTo,
89-
appendTsxSuffixTo,
87+
appendTsTsxSuffixesIfRequired,
9088
scriptRegex,
9189
instance
9290
);
@@ -171,8 +169,7 @@ function makeResolvers(
171169
customResolveTypeReferenceDirective: CustomResolveTypeReferenceDirective,
172170
customResolveModuleName: CustomResolveModuleName,
173171
resolveSync: ResolveSync,
174-
appendTsSuffixTo: RegExp[],
175-
appendTsxSuffixTo: RegExp[],
172+
appendTsTsxSuffixesIfRequired: (filePath: string) => string,
176173
scriptRegex: RegExp,
177174
instance: TSInstance
178175
) {
@@ -211,8 +208,7 @@ function makeResolvers(
211208
resolveModule(
212209
resolveSync,
213210
resolveModuleName,
214-
appendTsSuffixTo,
215-
appendTsxSuffixTo,
211+
appendTsTsxSuffixesIfRequired,
216212
scriptRegex,
217213
moduleName,
218214
containingFile
@@ -238,13 +234,12 @@ export function makeWatchHost(
238234
log: logger.Logger,
239235
loader: Webpack,
240236
instance: TSInstance,
241-
appendTsSuffixTo: RegExp[],
242-
appendTsxSuffixTo: RegExp[],
243237
projectReferences?: ReadonlyArray<typescript.ProjectReference>
244238
) {
245239
const {
246240
compiler,
247241
compilerOptions,
242+
appendTsTsxSuffixesIfRequired,
248243
files,
249244
otherFiles,
250245
loaderOptions: {
@@ -294,8 +289,7 @@ export function makeWatchHost(
294289
customResolveTypeReferenceDirective,
295290
customResolveModuleName,
296291
resolveSync,
297-
appendTsSuffixTo,
298-
appendTsxSuffixTo,
292+
appendTsTsxSuffixesIfRequired,
299293
scriptRegex,
300294
instance
301295
);
@@ -550,8 +544,7 @@ function isJsImplementationOfTypings(
550544
function resolveModule(
551545
resolveSync: ResolveSync,
552546
resolveModuleName: ResolveModuleName,
553-
appendTsSuffixTo: RegExp[],
554-
appendTsxSuffixTo: RegExp[],
547+
appendTsTsxSuffixesIfRequired: (filePath: string) => string,
555548
scriptRegex: RegExp,
556549
moduleName: string,
557550
containingFile: string
@@ -565,16 +558,7 @@ function resolveModule(
565558
moduleName
566559
);
567560

568-
const resolvedFileName =
569-
appendTsSuffixTo.length > 0 || appendTsxSuffixTo.length > 0
570-
? appendSuffixesIfMatch(
571-
{
572-
'.ts': appendTsSuffixTo,
573-
'.tsx': appendTsxSuffixTo
574-
},
575-
originalFileName
576-
)
577-
: originalFileName;
561+
const resolvedFileName = appendTsTsxSuffixesIfRequired(originalFileName);
578562

579563
if (resolvedFileName.match(scriptRegex) !== null) {
580564
resolutionResult = { resolvedFileName, originalFileName };

0 commit comments

Comments
 (0)