Skip to content

Commit ea2fcf9

Browse files
authored
resolveTypeReferenceDirective support for yarn PnP (#921)
* prepare the ground for type directives * implement resolveTypeReferenceDirective option * refactor of resolver construction * ready 5.4.0 release
1 parent 4692a22 commit ea2fcf9

File tree

12 files changed

+227
-148
lines changed

12 files changed

+227
-148
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ install:
1414
- yarn lint
1515
- yarn add $TYPESCRIPT
1616
env:
17-
17+
1818
- TYPESCRIPT=typescript@next
1919
2020

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## v5.4.0
4+
5+
* [feat: resolveTypeReferenceDirective support for yarn PnP](https://github.com/TypeStrong/ts-loader/pull/921) - thanks @johnnyreilly!
6+
37
## v5.3.3
48

59
* [fix: Pass ts.Program to getCustomTransformers](https://github.com/TypeStrong/ts-loader/pull/889) (#860) - thanks @andersekdahl!

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ You probably don't want to give up type checking; that's rather the point of Typ
2929

3030
If you'd like to see a simple setup take a look at [our simple example](examples/fork-ts-checker-webpack-plugin/). For a more complex setup take a look at our [more involved example](examples/react-babel-karma-gulp).
3131

32+
### Yarn Plug’n’Play
33+
34+
`ts-loader` supports [Yarn Plug’n’Play](https://yarnpkg.com/en/docs/pnp). The recommended way to integrate is using the [pnp-webpack-plugin](https://github.com/arcanis/pnp-webpack-plugin#ts-loader-integration).
35+
3236
### Babel
3337

3438
ts-loader works very well in combination with [babel](https://babeljs.io/) and [babel-loader](https://github.com/babel/babel-loader). There is an [example](https://github.com/Microsoft/TypeScriptSamples/tree/master/react-flux-babel-karma) of this in the official [TypeScript Samples](https://github.com/Microsoft/TypeScriptSamples). Alternatively take a look at our own [example](examples/react-babel-karma-gulp).
@@ -257,6 +261,10 @@ This will ensure that the plugin checks for both syntactic errors (eg `const arr
257261

258262
Also, if you are using `thread-loader` in watch mode, remember to set `poolTimeout: Infinity` so workers don't die.
259263

264+
#### resolveModuleName and resolveTypeReferenceDirective:
265+
266+
These options should be functions which will be used to resolve the import statements and the `<reference types="...">` directives instead of the default TypeScript implementation. It's not intended that these will typically be used by a user of `ts-loader` - they exist to facilitate functionality such as [Yarn Plug’n’Play](https://yarnpkg.com/en/docs/pnp).
267+
260268
#### getCustomTransformers _( (program: Program) => { before?: TransformerFactory<SourceFile>[]; after?: TransformerFactory<SourceFile>[]; } )_
261269

262270
Provide custom transformers - only compatible with TypeScript 2.3+ (and 2.4 if using `transpileOnly` mode). For example usage take a look at [typescript-plugin-styled-components](https://github.com/Igorbek/typescript-plugin-styled-components) or our [test](test/comparison-tests/customTransformer).

appveyor.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ environment:
33
FORCE_COLOR: 1
44
nodejs_version: "10"
55
matrix:
6-
- TYPESCRIPT: [email protected].1
6+
- TYPESCRIPT: [email protected].4
77
- TYPESCRIPT: typescript@next
88
- TYPESCRIPT: [email protected]
99
- TYPESCRIPT: [email protected]

package.json

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

src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,8 @@ const validLoaderOptions: ValidLoaderOptions[] = [
255255
'allowTsInNodeModules',
256256
'experimentalFileCaching',
257257
'projectReferences',
258-
'resolveModuleName'
258+
'resolveModuleName',
259+
'resolveTypeReferenceDirective'
259260
];
260261

261262
/**

src/interfaces.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,8 @@ export type ResolveSync = (
227227

228228
export interface WatchHost
229229
extends typescript.WatchCompilerHostOfFilesAndCompilerOptions<
230-
typescript.BuilderProgram
231-
> {
230+
typescript.BuilderProgram
231+
> {
232232
invokeFileWatcher(
233233
fileName: string,
234234
eventKind: typescript.FileWatcherEventKind
@@ -299,7 +299,7 @@ export type ResolveModuleName = (
299299
moduleName: string,
300300
containingFile: string,
301301
compilerOptions: typescript.CompilerOptions,
302-
moduleResolutionHost: typescript.ModuleResolutionHost,
302+
moduleResolutionHost: typescript.ModuleResolutionHost
303303
) => typescript.ResolvedModuleWithFailedLookupLocations;
304304

305305
export type CustomResolveModuleName = (
@@ -310,6 +310,14 @@ export type CustomResolveModuleName = (
310310
parentResolver: ResolveModuleName
311311
) => typescript.ResolvedModuleWithFailedLookupLocations;
312312

313+
export type CustomResolveTypeReferenceDirective = (
314+
typeDirectiveName: string,
315+
containingFile: string,
316+
compilerOptions: typescript.CompilerOptions,
317+
moduleResolutionHost: typescript.ModuleResolutionHost,
318+
parentResolver: typeof typescript.resolveTypeReferenceDirective
319+
) => typescript.ResolvedTypeReferenceDirectiveWithFailedLookupLocations;
320+
313321
export interface LoaderOptions {
314322
silent: boolean;
315323
logLevel: LogLevel;
@@ -328,14 +336,17 @@ export interface LoaderOptions {
328336
appendTsSuffixTo: RegExp[];
329337
appendTsxSuffixTo: RegExp[];
330338
happyPackMode: boolean;
331-
getCustomTransformers?:
339+
getCustomTransformers:
332340
| string
333-
| ((program: typescript.Program) => typescript.CustomTransformers | undefined);
341+
| ((
342+
program: typescript.Program
343+
) => typescript.CustomTransformers | undefined);
334344
experimentalWatchApi: boolean;
335345
allowTsInNodeModules: boolean;
336346
experimentalFileCaching: boolean;
337347
projectReferences: boolean;
338-
resolveModuleName?: CustomResolveModuleName;
348+
resolveModuleName: CustomResolveModuleName;
349+
resolveTypeReferenceDirective: CustomResolveTypeReferenceDirective;
339350
}
340351

341352
export interface TSFile {

0 commit comments

Comments
 (0)