-
-
Notifications
You must be signed in to change notification settings - Fork 433
/
Copy pathcompilerSetup.ts
75 lines (67 loc) · 2.51 KB
/
compilerSetup.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import * as semver from 'semver';
import * as typescript from 'typescript';
import * as constants from './constants';
import { LoaderOptions } from './interfaces';
import * as logger from './logger';
export function getCompiler(loaderOptions: LoaderOptions, log: logger.Logger) {
let compiler: typeof typescript | undefined;
let errorMessage: string | undefined;
let compilerDetailsLogMessage: string | undefined;
let compilerCompatible = false;
try {
compiler = require(loaderOptions.compiler);
} catch (e) {
errorMessage =
loaderOptions.compiler === 'typescript'
? 'Could not load TypeScript. Try installing with `yarn add typescript` or `npm install typescript`. If TypeScript is installed globally, try using `yarn link typescript` or `npm link typescript`.'
: `Could not load TypeScript compiler with NPM package name \`${
loaderOptions.compiler
}\`. Are you sure it is correctly installed?`;
}
if (errorMessage === undefined) {
compilerDetailsLogMessage = `ts-loader: Using ${loaderOptions.compiler}@${
compiler!.version
}`;
compilerCompatible = false;
if (loaderOptions.compiler === 'typescript') {
if (
compiler!.version !== undefined &&
semver.gte(compiler!.version, '2.4.1')
) {
// don't log yet in this case, if a tsconfig.json exists we want to combine the message
compilerCompatible = true;
} else {
log.logError(
`${compilerDetailsLogMessage}. This version is incompatible with ts-loader. Please upgrade to the latest version of TypeScript.`
);
}
} else {
log.logWarning(
`${compilerDetailsLogMessage}. This version may or may not be compatible with ts-loader.`
);
}
}
return {
compiler,
compilerCompatible,
compilerDetailsLogMessage,
errorMessage
};
}
export function getCompilerOptions(
configParseResult: typescript.ParsedCommandLine
) {
const compilerOptions = Object.assign({}, configParseResult.options, {
skipLibCheck: true,
suppressOutputPathCheck: true // This is why: https://github.com/Microsoft/TypeScript/issues/7363
} as typescript.CompilerOptions);
// if `module` is not specified and not using ES6+ target, default to CJS module output
if (
compilerOptions.module === undefined &&
(compilerOptions.target !== undefined &&
compilerOptions.target < constants.ScriptTargetES2015)
) {
compilerOptions.module = constants.ModuleKindCommonJs;
}
return compilerOptions;
}