ts-jest 22.4.3 → 23.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.travis.yml +4 -1
- package/AUTHORS +1 -0
- package/{collaborator-guidelines.md → COLLABORATORS.md} +19 -0
- package/README.md +26 -1
- package/appveyor.yml +6 -1
- package/dist/jest-types.d.ts +18 -3
- package/dist/logger.js +9 -6
- package/dist/postprocess.d.ts +4 -2
- package/dist/postprocess.js +25 -14
- package/dist/preprocessor.d.ts +2 -2
- package/dist/preprocessor.js +13 -14
- package/dist/transpile-if-ts.d.ts +2 -1
- package/dist/transpile-if-ts.js +2 -2
- package/dist/transpiler.d.ts +3 -0
- package/dist/transpiler.js +37 -0
- package/dist/utils.d.ts +5 -9
- package/dist/utils.js +25 -56
- package/index.js +0 -1
- package/package.json +31 -26
- package/tslint.json +11 -1
- package/yarn.lock +699 -266
- package/dist/install.d.ts +0 -1
- package/dist/install.js +0 -11
- package/dist/test-utils.d.ts +0 -1
- package/dist/test-utils.js +0 -56
package/.travis.yml
CHANGED
package/AUTHORS
CHANGED
|
@@ -25,6 +25,7 @@ Eric Anderson <e@ericlanderson.com>
|
|
|
25
25
|
Felipe Matos <felipems@yahoo.com.br>
|
|
26
26
|
Forbes Lindesay <forbes@lindesay.co.uk>
|
|
27
27
|
Gino Zhang <whitetrefoil@gmail.com>
|
|
28
|
+
Gregor Stamac <1668205+gstamac@users.noreply.github.com>
|
|
28
29
|
Gustav Wengel <gustavwengel@gmail.com>
|
|
29
30
|
Henry Zektser <japhar81@gmail.com>
|
|
30
31
|
Ihor Chulinda <ichulinda@gmail.com>
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
|
|
12
12
|
# Collaborator Guidelines
|
|
13
13
|
|
|
14
|
+
ts-jest is grateful for all issues, PRs and contributions. In this file are tips for getting started contributing,
|
|
15
|
+
and best practices, so that we can ensure that we can maintain this project in the future.
|
|
16
|
+
|
|
14
17
|
## Installing and building the project
|
|
15
18
|
|
|
16
19
|
To be able to install and build the project probably, `rimraf` is required. Install `rimraf` by running
|
|
@@ -36,3 +39,19 @@ After installing `rimraf`, `yarn` command can be run normally when installing de
|
|
|
36
39
|
ts-jest must match the major version of jest. Matching the minor version is preferred. Matching the version patch is not required.
|
|
37
40
|
|
|
38
41
|
When merging PRs which fix bugs, it is preferable to increment the version patch version so that the changes can be published to NPM.
|
|
42
|
+
|
|
43
|
+
## Tests
|
|
44
|
+
|
|
45
|
+
All new features or bugfixes should be accompanied with a new test, to ensure that the change works as intended, and to make sure we don't inadvertently break it in the future through refactring
|
|
46
|
+
|
|
47
|
+
If you are simply refactoring code, it is not needed to add a test.
|
|
48
|
+
|
|
49
|
+
### How to add tests
|
|
50
|
+
- Tests are added by creating a new file in tests/__tests__
|
|
51
|
+
- A test usually consists of two parts
|
|
52
|
+
- A directory under tests/ that have some files that should result in a specific output when jest is passed through it
|
|
53
|
+
- A file under tests/__tests__ that uses the runJest command to run Jest on the specified directory, and makes asserts on the output of stdout and stderr
|
|
54
|
+
When asserting things on the output, it is common to both assert something about the exit code, and something about the output. Always assert on the output first, before asserting on the status code - as it leads to much nicer error messages when refactoring. (You get the full output text, rather than just '0 didn't equal 1')
|
|
55
|
+
|
|
56
|
+
### How to run tests
|
|
57
|
+
Tests are run through `yarn test`
|
package/README.md
CHANGED
|
@@ -33,6 +33,7 @@ ts-jest is a TypeScript preprocessor with source map support for Jest that lets
|
|
|
33
33
|
- [Using `.babelrc`](#using-babelrc)
|
|
34
34
|
- [Using a custom Babel config](#using-a-custom-babel-config)
|
|
35
35
|
- [TS compiler & error reporting](#ts-compiler--error-reporting)
|
|
36
|
+
- [Ignore coverage on decorators](#ignore-coverage-on-decorators)
|
|
36
37
|
- [Use cases](#use-cases)
|
|
37
38
|
- [React Native](#react-native)
|
|
38
39
|
- [Angular 2](#angular-2)
|
|
@@ -116,6 +117,9 @@ ts-jest tries to support that. If `allowSyntheticDefaultImports` is set to true
|
|
|
116
117
|
to automatically create the synthetic default exports for you - nothing else needed.
|
|
117
118
|
You can opt-out of this behaviour with the [skipBabel flag](#skipping-babel)
|
|
118
119
|
|
|
120
|
+
**Typescript 2.7 has built-in support for this feature via the `esModuleInterop` flag. We're looking to deprecate this feature.
|
|
121
|
+
Please use `esModuleInterop` instead. More details [here](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html)**
|
|
122
|
+
|
|
119
123
|
### Supports automatic of jest.mock() calls
|
|
120
124
|
[Just like Jest](https://facebook.github.io/jest/docs/manual-mocks.html#using-with-es-module-imports) ts-jest
|
|
121
125
|
automatically uses babel to hoist your `jest.mock()` calls to the top of your file.
|
|
@@ -233,6 +237,27 @@ If you want to enable Syntactic & Semantic TypeScript error reporting you can en
|
|
|
233
237
|
}
|
|
234
238
|
```
|
|
235
239
|
|
|
240
|
+
**Note:** This is an experimental feature, comes with no guarantees and could be removed if it causes more problems than it solves. Testing is not the place to look for type errors. That should be done separately. Moreover, ts-jest only processes the files that are passed in by jest. It doesn't read files off the disk by default which is why `enableTsDiagnostics` will hurt performance compared to the normal use case.
|
|
241
|
+
|
|
242
|
+
### Ignore coverage on decorators
|
|
243
|
+
|
|
244
|
+
**Note:** This is an experimental feature, comes with no guarantees and could be removed if it causes more problems than it solves
|
|
245
|
+
|
|
246
|
+
If you want to ignore coverage on decorators you can enable this through `ignoreCoverageForDecorators` and `ignoreCoverageForAllDecorators` flags. If you enable the first option you have to add the `/* istanbul ignore decorator */` comment after the decorator. If you choose the second option all decorators will be ignored.
|
|
247
|
+
|
|
248
|
+
```json
|
|
249
|
+
{
|
|
250
|
+
"jest": {
|
|
251
|
+
"globals": {
|
|
252
|
+
"ts-jest": {
|
|
253
|
+
"ignoreCoverageForDecorators": true,
|
|
254
|
+
"ignoreCoverageForAllDecorators": true
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
236
261
|
## Use cases
|
|
237
262
|
|
|
238
263
|
### React Native
|
|
@@ -373,7 +398,7 @@ We suggest placing the `jest.mock()` calls after the imports, but before any act
|
|
|
373
398
|
|
|
374
399
|
### `const enum` is not supported
|
|
375
400
|
|
|
376
|
-
This is due to a limitation in the ts-jest preprocessor which compiles each test file individually, therefore ignoring implementations of ambient declarations. The TypeScript team currently have [no plan to support const enum inlining](https://github.com/Microsoft/TypeScript/issues/5243) for this particular compiler method. See #112 and #281 for more information.
|
|
401
|
+
This is due to a limitation in the ts-jest preprocessor which compiles each test file individually, therefore ignoring implementations of ambient declarations. The TypeScript team currently have [no plan to support const enum inlining](https://github.com/Microsoft/TypeScript/issues/5243) for this particular compiler method. See [#112](https://github.com/kulshekhar/ts-jest/issues/112) and [#281](https://github.com/kulshekhar/ts-jest/issues/281) for more information.
|
|
377
402
|
|
|
378
403
|
One possible workaround is to manually inline usage of const enum values - i.e. in your code, use `let x: Enum = 1 as Enum` as opposed to `let x: Enum = Enum.FirstValue`. This allows you to keep the type checking on enums without running into this issue.
|
|
379
404
|
|
package/appveyor.yml
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
# build version format
|
|
5
5
|
version: "{build}"
|
|
6
6
|
|
|
7
|
+
clone_depth: 5
|
|
8
|
+
|
|
7
9
|
# fix lineendings in Windows
|
|
8
10
|
init:
|
|
9
11
|
- git config --global core.autocrlf input
|
|
@@ -14,7 +16,7 @@ environment:
|
|
|
14
16
|
matrix:
|
|
15
17
|
- nodejs_version: 6
|
|
16
18
|
- nodejs_version: 8
|
|
17
|
-
- nodejs_version:
|
|
19
|
+
- nodejs_version: 10
|
|
18
20
|
|
|
19
21
|
# get the latest stable version of Node 0.STABLE.latest
|
|
20
22
|
install:
|
|
@@ -26,6 +28,9 @@ install:
|
|
|
26
28
|
|
|
27
29
|
build: off
|
|
28
30
|
|
|
31
|
+
cache:
|
|
32
|
+
- "%LOCALAPPDATA%\\Yarn"
|
|
33
|
+
|
|
29
34
|
test_script:
|
|
30
35
|
- node --version
|
|
31
36
|
- npm --version
|
package/dist/jest-types.d.ts
CHANGED
|
@@ -16,9 +16,9 @@ export interface HasteConfig {
|
|
|
16
16
|
export interface BabelTransformOptions extends BabelTransformOpts {
|
|
17
17
|
cacheDirectory?: string;
|
|
18
18
|
}
|
|
19
|
-
export declare type PostProcessHook = (
|
|
20
|
-
export declare type JestConfig = Partial<
|
|
21
|
-
export interface
|
|
19
|
+
export declare type PostProcessHook = (codeSourcemapPair: CodeSourceMapPair, filePath: string, config: JestConfig, transformOptions: TransformOptions) => CodeSourceMapPair;
|
|
20
|
+
export declare type JestConfig = Partial<FullJestProjectConfig>;
|
|
21
|
+
export interface FullJestProjectConfig {
|
|
22
22
|
automock: boolean;
|
|
23
23
|
browser: boolean;
|
|
24
24
|
cache: boolean;
|
|
@@ -27,7 +27,10 @@ export interface FullJestConfig {
|
|
|
27
27
|
coveragePathIgnorePatterns: string[];
|
|
28
28
|
cwd: Path;
|
|
29
29
|
detectLeaks: boolean;
|
|
30
|
+
detectOpenHandles: boolean;
|
|
30
31
|
displayName: string | null;
|
|
32
|
+
errorOnDeprecated: boolean;
|
|
33
|
+
filter: Path | null;
|
|
31
34
|
forceCoverageMatch: Glob[];
|
|
32
35
|
globals: ConfigGlobals;
|
|
33
36
|
haste: HasteConfig;
|
|
@@ -47,6 +50,7 @@ export interface FullJestConfig {
|
|
|
47
50
|
runner: string;
|
|
48
51
|
setupFiles: Path[];
|
|
49
52
|
setupTestFrameworkScriptFile: Path | null;
|
|
53
|
+
skipFilter: boolean;
|
|
50
54
|
skipNodeResolution: boolean;
|
|
51
55
|
snapshotSerializers: Path[];
|
|
52
56
|
testEnvironment: string;
|
|
@@ -71,4 +75,15 @@ export interface TsJestConfig {
|
|
|
71
75
|
enableInternalCache?: boolean;
|
|
72
76
|
enableTsDiagnostics?: boolean;
|
|
73
77
|
disableSourceMapSupport?: boolean;
|
|
78
|
+
ignoreCoverageForDecorators?: boolean;
|
|
79
|
+
ignoreCoverageForAllDecorators?: boolean;
|
|
80
|
+
useExperimentalLanguageServer?: boolean;
|
|
81
|
+
}
|
|
82
|
+
export interface JestConfigNormalize {
|
|
83
|
+
hasDeprecationWarnings: boolean;
|
|
84
|
+
options: FullJestProjectConfig;
|
|
85
|
+
}
|
|
86
|
+
export interface CodeSourceMapPair {
|
|
87
|
+
code: string;
|
|
88
|
+
map: string;
|
|
74
89
|
}
|
package/dist/logger.js
CHANGED
|
@@ -4,8 +4,9 @@ var fs = require("fs");
|
|
|
4
4
|
var path = require("path");
|
|
5
5
|
var logs = [];
|
|
6
6
|
var logsFlushed = false;
|
|
7
|
+
var outputToConsole = false;
|
|
7
8
|
function shouldLog() {
|
|
8
|
-
return process.env.TS_JEST_DEBUG && !logsFlushed;
|
|
9
|
+
return (process.env.TS_JEST_DEBUG || outputToConsole) && !logsFlushed;
|
|
9
10
|
}
|
|
10
11
|
function logOnce() {
|
|
11
12
|
var thingsToLog = [];
|
|
@@ -27,12 +28,14 @@ function flushLogs() {
|
|
|
27
28
|
var JSONifiedLogs = logs.map(convertToJSONIfPossible);
|
|
28
29
|
var logString = JSONifiedLogs.join('\n');
|
|
29
30
|
var filePath = path.resolve(rootPath, 'debug.txt');
|
|
30
|
-
|
|
31
|
+
if (outputToConsole) {
|
|
32
|
+
console.log(logString);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
fs.writeFileSync(filePath, logString);
|
|
36
|
+
}
|
|
31
37
|
}
|
|
32
38
|
exports.flushLogs = flushLogs;
|
|
33
|
-
function includes(array, subject) {
|
|
34
|
-
return array.indexOf(subject) !== -1;
|
|
35
|
-
}
|
|
36
39
|
function convertToJSONIfPossible(object) {
|
|
37
40
|
try {
|
|
38
41
|
return JSON.stringify(object, null, 2);
|
|
@@ -41,4 +44,4 @@ function convertToJSONIfPossible(object) {
|
|
|
41
44
|
return object.toString();
|
|
42
45
|
}
|
|
43
46
|
}
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVCQUF5QjtBQUN6QiwyQkFBNkI7QUFRN0IsSUFBTSxJQUFJLEdBQVUsRUFBRSxDQUFDO0FBQ3ZCLElBQUksV0FBVyxHQUFZLEtBQUssQ0FBQztBQUVqQyxJQUFNLGVBQWUsR0FBWSxLQUFLLENBQUM7QUFFdkM7SUFFRSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDeEUsQ0FBQztBQUdEO0lBQXdCLHFCQUFxQjtTQUFyQixVQUFxQixFQUFyQixxQkFBcUIsRUFBckIsSUFBcUI7UUFBckIsZ0NBQXFCOztJQUMzQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDaEIsT0FBTztLQUNSO0lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBTEQsMEJBS0M7QUFHRDtJQUNFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUNoQixPQUFPO0tBQ1I7SUFDRCxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ25CLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELElBQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN4RCxJQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JELElBQUksZUFBZSxFQUFFO1FBRW5CLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDeEI7U0FBTTtRQUNMLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ3ZDO0FBQ0gsQ0FBQztBQWZELDhCQWVDO0FBRUQsaUNBQWlDLE1BQVc7SUFDMUMsSUFBSTtRQUNGLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3hDO0lBQUMsV0FBTTtRQUNOLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0tBQzFCO0FBQ0gsQ0FBQyJ9
|
package/dist/postprocess.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import * as ts from 'typescript';
|
|
1
2
|
import { CompilerOptions } from 'typescript/lib/typescript';
|
|
2
|
-
import {
|
|
3
|
-
export declare
|
|
3
|
+
import { CodeSourceMapPair, FullJestProjectConfig, JestConfig, PostProcessHook, TransformOptions, TsJestConfig } from './jest-types';
|
|
4
|
+
export declare function postProcessCode(compilerOptions: CompilerOptions, jestConfig: JestConfig, tsJestConfig: TsJestConfig, transformOptions: TransformOptions, transpileOutput: CodeSourceMapPair, filePath: string): CodeSourceMapPair;
|
|
5
|
+
export declare const getPostProcessHook: (tsCompilerOptions: ts.CompilerOptions, jestConfig: Partial<FullJestProjectConfig>, tsJestConfig: TsJestConfig) => PostProcessHook;
|
package/dist/postprocess.js
CHANGED
|
@@ -8,21 +8,35 @@ var __assign = (this && this.__assign) || Object.assign || function(t) {
|
|
|
8
8
|
return t;
|
|
9
9
|
};
|
|
10
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
var babel
|
|
12
|
-
var
|
|
13
|
-
var jestPreset
|
|
11
|
+
var babel;
|
|
12
|
+
var istanbulPlugin;
|
|
13
|
+
var jestPreset;
|
|
14
|
+
function importBabelDeps() {
|
|
15
|
+
if (babel) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
babel = require('babel-core');
|
|
19
|
+
istanbulPlugin = require('babel-plugin-istanbul').default;
|
|
20
|
+
jestPreset = require('babel-preset-jest');
|
|
21
|
+
}
|
|
14
22
|
var logger_1 = require("./logger");
|
|
23
|
+
function postProcessCode(compilerOptions, jestConfig, tsJestConfig, transformOptions, transpileOutput, filePath) {
|
|
24
|
+
var postHook = exports.getPostProcessHook(compilerOptions, jestConfig, tsJestConfig);
|
|
25
|
+
return postHook(transpileOutput, filePath, jestConfig, transformOptions);
|
|
26
|
+
}
|
|
27
|
+
exports.postProcessCode = postProcessCode;
|
|
15
28
|
function createBabelTransformer(options) {
|
|
16
|
-
|
|
29
|
+
importBabelDeps();
|
|
30
|
+
options = __assign({}, options, { plugins: options.plugins || [], presets: (options.presets || []).concat([jestPreset]) });
|
|
17
31
|
delete options.cacheDirectory;
|
|
18
32
|
delete options.filename;
|
|
19
|
-
return function (
|
|
20
|
-
var theseOptions = Object.assign({ filename: filename }, options);
|
|
33
|
+
return function (codeSourcemapPair, filename, config, transformOptions) {
|
|
34
|
+
var theseOptions = Object.assign({ filename: filename, inputSourceMap: codeSourcemapPair.map }, options);
|
|
21
35
|
if (transformOptions && transformOptions.instrument) {
|
|
22
36
|
theseOptions.auxiliaryCommentBefore = ' istanbul ignore next ';
|
|
23
37
|
theseOptions.plugins = theseOptions.plugins.concat([
|
|
24
38
|
[
|
|
25
|
-
|
|
39
|
+
istanbulPlugin,
|
|
26
40
|
{
|
|
27
41
|
cwd: config.rootDir,
|
|
28
42
|
exclude: [],
|
|
@@ -30,20 +44,17 @@ function createBabelTransformer(options) {
|
|
|
30
44
|
],
|
|
31
45
|
]);
|
|
32
46
|
}
|
|
33
|
-
return babel.transform(
|
|
47
|
+
return babel.transform(codeSourcemapPair.code, theseOptions);
|
|
34
48
|
};
|
|
35
49
|
}
|
|
36
50
|
exports.getPostProcessHook = function (tsCompilerOptions, jestConfig, tsJestConfig) {
|
|
37
51
|
if (tsJestConfig.skipBabel) {
|
|
38
52
|
logger_1.logOnce('Not using any postprocess hook.');
|
|
39
|
-
return function (
|
|
53
|
+
return function (input) { return input; };
|
|
40
54
|
}
|
|
41
55
|
var plugins = Array.from((tsJestConfig.babelConfig && tsJestConfig.babelConfig.plugins) || []);
|
|
42
|
-
|
|
43
|
-
plugins.push('transform-es2015-modules-commonjs');
|
|
44
|
-
}
|
|
45
|
-
var babelOptions = __assign({}, tsJestConfig.babelConfig, { babelrc: tsJestConfig.useBabelrc || false, plugins: plugins, presets: tsJestConfig.babelConfig ? tsJestConfig.babelConfig.presets : [] });
|
|
56
|
+
var babelOptions = __assign({}, tsJestConfig.babelConfig, { babelrc: tsJestConfig.useBabelrc || false, plugins: plugins, presets: tsJestConfig.babelConfig ? tsJestConfig.babelConfig.presets : [], sourceMaps: tsJestConfig.disableSourceMapSupport !== true });
|
|
46
57
|
logger_1.logOnce('Using babel with options:', babelOptions);
|
|
47
58
|
return createBabelTransformer(babelOptions);
|
|
48
59
|
};
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdHByb2Nlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcG9zdHByb2Nlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQVFBLElBQUksS0FBNEIsQ0FBQztBQUNqQyxJQUFJLGNBQThDLENBQUM7QUFDbkQsSUFBSSxVQUFzQyxDQUFDO0FBQzNDO0lBQ0UsSUFBSSxLQUFLLEVBQUU7UUFDVCxPQUFPO0tBQ1I7SUFDRCxLQUFLLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzlCLGNBQWMsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDMUQsVUFBVSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFXRCxtQ0FBbUM7QUFJbkMseUJBQ0UsZUFBZ0MsRUFDaEMsVUFBc0IsRUFDdEIsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLGVBQWtDLEVBQ2xDLFFBQWdCO0lBRWhCLElBQU0sUUFBUSxHQUFHLDBCQUFrQixDQUNqQyxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksQ0FDYixDQUFDO0lBRUYsT0FBTyxRQUFRLENBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBZkQsMENBZUM7QUFFRCxnQ0FDRSxPQUE4QjtJQUU5QixlQUFlLEVBQUUsQ0FBQztJQUNsQixPQUFPLGdCQUNGLE9BQU8sSUFDVixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQzlCLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsR0FDdEQsQ0FBQztJQUNGLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQztJQUM5QixPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFFeEIsT0FBTyxVQUNMLGlCQUFvQyxFQUNwQyxRQUFnQixFQUNoQixNQUFrQixFQUNsQixnQkFBa0M7UUFFbEMsSUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDaEMsRUFBRSxRQUFRLFVBQUEsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEVBQ25ELE9BQU8sQ0FDUixDQUFDO1FBQ0YsSUFBSSxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU7WUFDbkQsWUFBWSxDQUFDLHNCQUFzQixHQUFHLHdCQUF3QixDQUFDO1lBRS9ELFlBQVksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQ2pEO29CQUNFLGNBQWM7b0JBQ2Q7d0JBRUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxPQUFPO3dCQUNuQixPQUFPLEVBQUUsRUFBRTtxQkFDWjtpQkFDRjthQUNGLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBUSxLQUFLLENBQUMsU0FBUyxDQUNyQixpQkFBaUIsQ0FBQyxJQUFJLEVBQ3RCLFlBQVksQ0FDZ0IsQ0FBQztJQUNqQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRVksUUFBQSxrQkFBa0IsR0FBRyxVQUNoQyxpQkFBa0MsRUFDbEMsVUFBc0IsRUFDdEIsWUFBMEI7SUFFMUIsSUFBSSxZQUFZLENBQUMsU0FBUyxFQUFFO1FBQzFCLGdCQUFPLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUUzQyxPQUFPLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSyxFQUFMLENBQUssQ0FBQztLQUN2QjtJQUVELElBQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQ3hCLENBQUMsWUFBWSxDQUFDLFdBQVcsSUFBSSxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FDckUsQ0FBQztJQUVGLElBQU0sWUFBWSxnQkFDYixZQUFZLENBQUMsV0FBVyxJQUMzQixPQUFPLEVBQUUsWUFBWSxDQUFDLFVBQVUsSUFBSSxLQUFLLEVBQ3pDLE9BQU8sU0FBQSxFQUNQLE9BQU8sRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUN6RSxVQUFVLEVBQUUsWUFBWSxDQUFDLHVCQUF1QixLQUFLLElBQUksR0FDMUQsQ0FBQztJQUVGLGdCQUFPLENBQUMsMkJBQTJCLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFbkQsT0FBTyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM5QyxDQUFDLENBQUMifQ==
|
package/dist/preprocessor.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { JestConfig, Path, TransformOptions } from './jest-types';
|
|
2
|
-
export declare function process(src: string, filePath: Path, jestConfig: JestConfig, transformOptions?: TransformOptions): string;
|
|
1
|
+
import { CodeSourceMapPair, JestConfig, Path, TransformOptions } from './jest-types';
|
|
2
|
+
export declare function process(src: string, filePath: Path, jestConfig: JestConfig, transformOptions?: TransformOptions): CodeSourceMapPair | string;
|
|
3
3
|
export declare function getCacheKey(fileData: string, filePath: Path, jestConfigStr: string, transformOptions?: TransformOptions): string;
|
package/dist/preprocessor.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
var crypto = require("crypto");
|
|
4
|
-
var tsc = require("typescript");
|
|
5
4
|
var logger_1 = require("./logger");
|
|
6
5
|
var postprocess_1 = require("./postprocess");
|
|
7
6
|
var utils_1 = require("./utils");
|
|
7
|
+
var transpiler_1 = require("./transpiler");
|
|
8
8
|
function process(src, filePath, jestConfig, transformOptions) {
|
|
9
9
|
if (transformOptions === void 0) { transformOptions = { instrument: false }; }
|
|
10
|
-
var compilerOptions = utils_1.getTSConfig(jestConfig.globals, jestConfig.rootDir
|
|
10
|
+
var compilerOptions = utils_1.getTSConfig(jestConfig.globals, jestConfig.rootDir);
|
|
11
11
|
logger_1.logOnce('final compilerOptions:', compilerOptions);
|
|
12
12
|
var isTsFile = /\.tsx?$/.test(filePath);
|
|
13
13
|
var isJsFile = /\.jsx?$/.test(filePath);
|
|
@@ -24,23 +24,22 @@ function process(src, filePath, jestConfig, transformOptions) {
|
|
|
24
24
|
if (tsJestConfig.enableTsDiagnostics) {
|
|
25
25
|
utils_1.runTsDiagnostics(filePath, compilerOptions);
|
|
26
26
|
}
|
|
27
|
-
var
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
: utils_1.injectSourcemapHook(filePath, tsTranspiled.outputText, outputText);
|
|
27
|
+
var transpileOutput = transpiler_1.transpileTypescript(filePath, src, compilerOptions);
|
|
28
|
+
if (tsJestConfig.ignoreCoverageForAllDecorators === true) {
|
|
29
|
+
transpileOutput.code = transpileOutput.code.replace(/__decorate/g, '/* istanbul ignore next */__decorate');
|
|
30
|
+
}
|
|
31
|
+
if (tsJestConfig.ignoreCoverageForDecorators === true) {
|
|
32
|
+
transpileOutput.code = transpileOutput.code.replace(/(__decorate\(\[\r?\n[^\n\r]*)\/\*\s*istanbul\s*ignore\s*decorator(.*)\*\//g, '/* istanbul ignore next$2*/$1');
|
|
33
|
+
}
|
|
34
|
+
var outputText = postprocess_1.postProcessCode(compilerOptions, jestConfig, tsJestConfig, transformOptions, transpileOutput, filePath);
|
|
36
35
|
logger_1.flushLogs();
|
|
37
|
-
return
|
|
36
|
+
return { code: outputText.code, map: outputText.map };
|
|
38
37
|
}
|
|
39
38
|
exports.process = process;
|
|
40
39
|
function getCacheKey(fileData, filePath, jestConfigStr, transformOptions) {
|
|
41
40
|
if (transformOptions === void 0) { transformOptions = { instrument: false }; }
|
|
42
41
|
var jestConfig = JSON.parse(jestConfigStr);
|
|
43
|
-
var tsConfig = utils_1.getTSConfig(jestConfig.globals, jestConfig.rootDir
|
|
42
|
+
var tsConfig = utils_1.getTSConfig(jestConfig.globals, jestConfig.rootDir);
|
|
44
43
|
return crypto
|
|
45
44
|
.createHash('md5')
|
|
46
45
|
.update(JSON.stringify(tsConfig), 'utf8')
|
|
@@ -49,4 +48,4 @@ function getCacheKey(fileData, filePath, jestConfigStr, transformOptions) {
|
|
|
49
48
|
.digest('hex');
|
|
50
49
|
}
|
|
51
50
|
exports.getCacheKey = getCacheKey;
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ByZXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtCQUFpQztBQVFqQyxtQ0FBOEM7QUFDOUMsNkNBQWdEO0FBQ2hELGlDQUF5RTtBQUN6RSwyQ0FBbUQ7QUFFbkQsaUJBQ0UsR0FBVyxFQUNYLFFBQWMsRUFDZCxVQUFzQixFQUN0QixnQkFBMEQ7SUFBMUQsaUNBQUEsRUFBQSxxQkFBdUMsVUFBVSxFQUFFLEtBQUssRUFBRTtJQUkxRCxJQUFNLGVBQWUsR0FBRyxtQkFBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTVFLGdCQUFPLENBQUMsd0JBQXdCLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFbkQsSUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxJQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLElBQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFHNUMsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtRQUN2RCxHQUFHLEdBQUcsa0JBQWtCLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztLQUN2QztJQUVELElBQU0sV0FBVyxHQUNmLGVBQWUsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFFckUsSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUNoQixPQUFPLEdBQUcsQ0FBQztLQUNaO0lBRUQsSUFBTSxZQUFZLEdBQUcsdUJBQWUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekQsZ0JBQU8sQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUl4QyxJQUFJLFlBQVksQ0FBQyxtQkFBbUIsRUFBRTtRQUNwQyx3QkFBZ0IsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7S0FDN0M7SUFFRCxJQUFNLGVBQWUsR0FBRyxnQ0FBbUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRTVFLElBQUksWUFBWSxDQUFDLDhCQUE4QixLQUFLLElBQUksRUFBRTtRQUN4RCxlQUFlLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUNqRCxhQUFhLEVBQ2Isc0NBQXNDLENBQ3ZDLENBQUM7S0FDSDtJQUNELElBQUksWUFBWSxDQUFDLDJCQUEyQixLQUFLLElBQUksRUFBRTtRQUNyRCxlQUFlLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUNqRCw0RUFBNEUsRUFDNUUsK0JBQStCLENBQ2hDLENBQUM7S0FDSDtJQUVELElBQU0sVUFBVSxHQUFHLDZCQUFlLENBQ2hDLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsUUFBUSxDQUNULENBQUM7SUFFRixrQkFBUyxFQUFFLENBQUM7SUFFWixPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RCxDQUFDO0FBaEVELDBCQWdFQztBQUtELHFCQUNFLFFBQWdCLEVBQ2hCLFFBQWMsRUFDZCxhQUFxQixFQUNyQixnQkFBMEQ7SUFBMUQsaUNBQUEsRUFBQSxxQkFBdUMsVUFBVSxFQUFFLEtBQUssRUFBRTtJQUUxRCxJQUFNLFVBQVUsR0FBZSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRXpELElBQU0sUUFBUSxHQUFHLG1CQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFckUsT0FBTyxNQUFNO1NBQ1YsVUFBVSxDQUFDLEtBQUssQ0FBQztTQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUM7U0FDeEMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLENBQUM7U0FDaEQsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLEdBQUcsYUFBYSxFQUFFLE1BQU0sQ0FBQztTQUNuRCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkIsQ0FBQztBQWhCRCxrQ0FnQkMifQ==
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { ConfigGlobals } from './jest-types';
|
|
2
|
+
export declare function transpileIfTypescript(path: string, contents: string, config?: ConfigGlobals, rootDir?: string): string;
|
package/dist/transpile-if-ts.js
CHANGED
|
@@ -6,7 +6,7 @@ function transpileIfTypescript(path, contents, config, rootDir) {
|
|
|
6
6
|
if (rootDir === void 0) { rootDir = ''; }
|
|
7
7
|
if (path && (path.endsWith('.tsx') || path.endsWith('.ts'))) {
|
|
8
8
|
var transpiled = tsc.transpileModule(contents, {
|
|
9
|
-
compilerOptions: utils_1.getTSConfig(config || utils_1.mockGlobalTSConfigSchema(global), rootDir
|
|
9
|
+
compilerOptions: utils_1.getTSConfig(config || utils_1.mockGlobalTSConfigSchema(global), rootDir),
|
|
10
10
|
fileName: path,
|
|
11
11
|
});
|
|
12
12
|
return transpiled.outputText;
|
|
@@ -14,4 +14,4 @@ function transpileIfTypescript(path, contents, config, rootDir) {
|
|
|
14
14
|
return contents;
|
|
15
15
|
}
|
|
16
16
|
exports.transpileIfTypescript = transpileIfTypescript;
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwaWxlLWlmLXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RyYW5zcGlsZS1pZi10cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGdDQUFrQztBQUNsQyxpQ0FBZ0U7QUFHaEUsK0JBQ0UsSUFBWSxFQUNaLFFBQWdCLEVBQ2hCLE1BQXNCLEVBQ3RCLE9BQW9CO0lBQXBCLHdCQUFBLEVBQUEsWUFBb0I7SUFFcEIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUMzRCxJQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRTtZQUMvQyxlQUFlLEVBQUUsbUJBQVcsQ0FDMUIsTUFBTSxJQUFJLGdDQUF3QixDQUFDLE1BQU0sQ0FBQyxFQUMxQyxPQUFPLENBQ1I7WUFDRCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQztLQUM5QjtJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFsQkQsc0RBa0JDIn0=
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var ts = require("typescript");
|
|
4
|
+
var logger_1 = require("./logger");
|
|
5
|
+
function transpileTypescript(filePath, fileSrc, compilerOptions) {
|
|
6
|
+
logger_1.logOnce('Compiling via normal transpileModule call');
|
|
7
|
+
var transpileOutput = transpileViaTranspileModule(filePath, fileSrc, compilerOptions);
|
|
8
|
+
return {
|
|
9
|
+
code: transpileOutput.outputText,
|
|
10
|
+
map: transpileOutput.sourceMapText,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
exports.transpileTypescript = transpileTypescript;
|
|
14
|
+
function transpileViaTranspileModule(filePath, fileSource, compilerOptions) {
|
|
15
|
+
var transpileOutput = ts.transpileModule(fileSource, {
|
|
16
|
+
compilerOptions: compilerOptions,
|
|
17
|
+
fileName: filePath,
|
|
18
|
+
reportDiagnostics: true,
|
|
19
|
+
});
|
|
20
|
+
var diagnostics = transpileOutput.diagnostics;
|
|
21
|
+
if (diagnostics.length > 0) {
|
|
22
|
+
var errors = formatDiagnostics(diagnostics);
|
|
23
|
+
logger_1.logOnce(logMessageForTranspilationErrors(errors));
|
|
24
|
+
throw createTranspilationError(errors);
|
|
25
|
+
}
|
|
26
|
+
return transpileOutput;
|
|
27
|
+
}
|
|
28
|
+
function formatDiagnostics(diagnostics) {
|
|
29
|
+
return diagnostics.map(function (d) { return d.messageText; }) + "\n";
|
|
30
|
+
}
|
|
31
|
+
function createTranspilationError(errors) {
|
|
32
|
+
return Error("TypeScript compiler encountered syntax errors while transpiling. Errors: " + errors);
|
|
33
|
+
}
|
|
34
|
+
function logMessageForTranspilationErrors(errors) {
|
|
35
|
+
return "Diagnostic errors from TSC: " + errors;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwaWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90cmFuc3BpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsK0JBQWlDO0FBQ2pDLG1DQUFtQztBQUluQyw2QkFDRSxRQUFnQixFQUNoQixPQUFlLEVBQ2YsZUFBbUM7SUFFbkMsZ0JBQU8sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0lBQ3JELElBQU0sZUFBZSxHQUFHLDJCQUEyQixDQUNqRCxRQUFRLEVBQ1IsT0FBTyxFQUNQLGVBQWUsQ0FDaEIsQ0FBQztJQUNGLE9BQU87UUFDTCxJQUFJLEVBQUUsZUFBZSxDQUFDLFVBQVU7UUFDaEMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxhQUFhO0tBQ25DLENBQUM7QUFDSixDQUFDO0FBZkQsa0RBZUM7QUFLRCxxQ0FDRSxRQUFnQixFQUNoQixVQUFrQixFQUNsQixlQUFtQztJQUVuQyxJQUFNLGVBQWUsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRTtRQUNyRCxlQUFlLGlCQUFBO1FBQ2YsUUFBUSxFQUFFLFFBQVE7UUFDbEIsaUJBQWlCLEVBQUUsSUFBSTtLQUN4QixDQUFDLENBQUM7SUFDSSxJQUFBLHlDQUFXLENBQW9CO0lBRXRDLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDMUIsSUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsZ0JBQU8sQ0FBQyxnQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRWxELE1BQU0sd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDeEM7SUFFRCxPQUFPLGVBQWUsQ0FBQztBQUN6QixDQUFDO0FBRUQsMkJBQTJCLFdBQTRCO0lBRXJELE9BQVUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxXQUFXLEVBQWIsQ0FBYSxDQUFDLE9BQUksQ0FBQztBQUNwRCxDQUFDO0FBRUQsa0NBQWtDLE1BQWM7SUFDNUMsT0FBTyxLQUFLLENBQ1YsOEVBQTRFLE1BQVEsQ0FDckYsQ0FBQztBQUNOLENBQUM7QUFFRCwwQ0FBMEMsTUFBYztJQUN0RCxPQUFPLGlDQUErQixNQUFRLENBQUM7QUFDakQsQ0FBQyJ9
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import * as tsc from 'typescript';
|
|
2
|
-
import { JestConfig, TsJestConfig } from './jest-types';
|
|
3
|
-
|
|
4
|
-
export declare function
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
};
|
|
8
|
-
};
|
|
9
|
-
export declare function getTSConfig(globals: any, rootDir?: string, collectCoverage?: boolean): any;
|
|
2
|
+
import { ConfigGlobals, JestConfig, TsJestConfig } from './jest-types';
|
|
3
|
+
import * as _ from 'lodash';
|
|
4
|
+
export declare function getTSJestConfig(globals: ConfigGlobals): TsJestConfig;
|
|
5
|
+
export declare function mockGlobalTSConfigSchema(globals: ConfigGlobals): ConfigGlobals;
|
|
6
|
+
export declare const getTSConfig: ((globals: any, rootDir?: string) => tsc.CompilerOptions) & _.MemoizedFunction;
|
|
10
7
|
export declare function cacheFile(jestConfig: JestConfig, filePath: string, src: string): void;
|
|
11
|
-
export declare function injectSourcemapHook(filePath: string, typeScriptCode: string, src: string): string;
|
|
12
8
|
export declare function runTsDiagnostics(filePath: string, compilerOptions: tsc.CompilerOptions): void;
|
package/dist/utils.js
CHANGED
|
@@ -14,32 +14,31 @@ var fsExtra = require("fs-extra");
|
|
|
14
14
|
var path = require("path");
|
|
15
15
|
var tsc = require("typescript");
|
|
16
16
|
var logger_1 = require("./logger");
|
|
17
|
+
var _ = require("lodash");
|
|
17
18
|
function getTSJestConfig(globals) {
|
|
18
19
|
return globals && globals['ts-jest'] ? globals['ts-jest'] : {};
|
|
19
20
|
}
|
|
20
21
|
exports.getTSJestConfig = getTSJestConfig;
|
|
21
|
-
function
|
|
22
|
-
|
|
22
|
+
function formatTsDiagnostics(errors) {
|
|
23
|
+
var defaultFormatHost = {
|
|
24
|
+
getCurrentDirectory: function () { return tsc.sys.getCurrentDirectory(); },
|
|
25
|
+
getCanonicalFileName: function (fileName) { return fileName; },
|
|
26
|
+
getNewLine: function () { return tsc.sys.newLine; },
|
|
27
|
+
};
|
|
28
|
+
return tsc.formatDiagnostics(errors, defaultFormatHost);
|
|
23
29
|
}
|
|
24
30
|
function readCompilerOptions(configPath, rootDir) {
|
|
25
31
|
configPath = path.resolve(rootDir, configPath);
|
|
26
|
-
var
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
throw new Error("ENOENT: no such file or directory, open '" + configPath + "'");
|
|
30
|
-
}
|
|
31
|
-
return read;
|
|
32
|
-
});
|
|
33
|
-
if (loaded.error) {
|
|
34
|
-
throw new Error(JSON.stringify(loaded.error, null, 4));
|
|
32
|
+
var _a = tsc.readConfigFile(configPath, tsc.sys.readFile), config = _a.config, error = _a.error;
|
|
33
|
+
if (error) {
|
|
34
|
+
throw error;
|
|
35
35
|
}
|
|
36
|
-
var
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
var formattedErrors = formatTscParserErrors(parsedConfig.errors);
|
|
36
|
+
var _b = tsc.parseJsonConfigFileContent(config, tsc.sys, path.resolve(rootDir)), errors = _b.errors, options = _b.options;
|
|
37
|
+
if (errors.length > 0) {
|
|
38
|
+
var formattedErrors = formatTsDiagnostics(errors);
|
|
40
39
|
throw new Error("Some errors occurred while attempting to read from " + configPath + ": " + formattedErrors);
|
|
41
40
|
}
|
|
42
|
-
return
|
|
41
|
+
return options;
|
|
43
42
|
}
|
|
44
43
|
function getStartDir() {
|
|
45
44
|
var grandparent = path.resolve(__dirname, '..', '..');
|
|
@@ -60,8 +59,8 @@ function getPathToClosestTSConfig(startDir, previousDir) {
|
|
|
60
59
|
}
|
|
61
60
|
return getPathToClosestTSConfig(path.join(startDir, '..'), startDir);
|
|
62
61
|
}
|
|
63
|
-
function getTSConfigPathFromConfig(globals) {
|
|
64
|
-
var defaultTSConfigFile = getPathToClosestTSConfig();
|
|
62
|
+
function getTSConfigPathFromConfig(globals, rootDir) {
|
|
63
|
+
var defaultTSConfigFile = getPathToClosestTSConfig(rootDir);
|
|
65
64
|
if (!globals) {
|
|
66
65
|
return defaultTSConfigFile;
|
|
67
66
|
}
|
|
@@ -76,21 +75,14 @@ function mockGlobalTSConfigSchema(globals) {
|
|
|
76
75
|
return { 'ts-jest': { tsConfigFile: configPath } };
|
|
77
76
|
}
|
|
78
77
|
exports.mockGlobalTSConfigSchema = mockGlobalTSConfigSchema;
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
exports.getTSConfig = _.memoize(getTSConfig_local, function (globals, rootDir) {
|
|
79
|
+
return JSON.stringify(globals, rootDir);
|
|
80
|
+
});
|
|
81
|
+
function getTSConfig_local(globals, rootDir) {
|
|
81
82
|
if (rootDir === void 0) { rootDir = ''; }
|
|
82
|
-
|
|
83
|
-
var configPath = getTSConfigPathFromConfig(globals);
|
|
83
|
+
var configPath = getTSConfigPathFromConfig(globals, rootDir);
|
|
84
84
|
logger_1.logOnce("Reading tsconfig file from path " + configPath);
|
|
85
85
|
var skipBabel = getTSJestConfig(globals).skipBabel;
|
|
86
|
-
var tsConfigCacheKey = JSON.stringify([
|
|
87
|
-
skipBabel,
|
|
88
|
-
collectCoverage,
|
|
89
|
-
configPath,
|
|
90
|
-
]);
|
|
91
|
-
if (tsConfigCacheKey in tsConfigCache) {
|
|
92
|
-
return tsConfigCache[tsConfigCacheKey];
|
|
93
|
-
}
|
|
94
86
|
var config = readCompilerOptions(configPath, rootDir);
|
|
95
87
|
logger_1.logOnce('Original typescript config before modifications: ', __assign({}, config));
|
|
96
88
|
delete config.sourceMap;
|
|
@@ -102,13 +94,8 @@ function getTSConfig(globals, rootDir, collectCoverage) {
|
|
|
102
94
|
}
|
|
103
95
|
config.module = config.module || tsc.ModuleKind.CommonJS;
|
|
104
96
|
config.jsx = config.jsx || tsc.JsxEmit.React;
|
|
105
|
-
if (config.allowSyntheticDefaultImports && !skipBabel) {
|
|
106
|
-
config.module = tsc.ModuleKind.ES2015;
|
|
107
|
-
}
|
|
108
|
-
tsConfigCache[tsConfigCacheKey] = config;
|
|
109
97
|
return config;
|
|
110
98
|
}
|
|
111
|
-
exports.getTSConfig = getTSConfig;
|
|
112
99
|
function cacheFile(jestConfig, filePath, src) {
|
|
113
100
|
if (!jestConfig.testRegex || !filePath.match(jestConfig.testRegex)) {
|
|
114
101
|
var outputFilePath = path.join(jestConfig.cacheDirectory, '/ts-jest/', crypto
|
|
@@ -119,30 +106,12 @@ function cacheFile(jestConfig, filePath, src) {
|
|
|
119
106
|
}
|
|
120
107
|
}
|
|
121
108
|
exports.cacheFile = cacheFile;
|
|
122
|
-
function injectSourcemapHook(filePath, typeScriptCode, src) {
|
|
123
|
-
var start = src.length > 12 ? src.substr(1, 10) : '';
|
|
124
|
-
var filePathParam = JSON.stringify(filePath);
|
|
125
|
-
var codeParam = JSON.stringify(typeScriptCode);
|
|
126
|
-
var sourceMapHook = "require('ts-jest').install(" + filePathParam + ", " + codeParam + ")";
|
|
127
|
-
return start === 'use strict'
|
|
128
|
-
? "'use strict';" + sourceMapHook + ";" + src
|
|
129
|
-
: sourceMapHook + ";" + src;
|
|
130
|
-
}
|
|
131
|
-
exports.injectSourcemapHook = injectSourcemapHook;
|
|
132
109
|
function runTsDiagnostics(filePath, compilerOptions) {
|
|
133
110
|
var program = tsc.createProgram([filePath], compilerOptions);
|
|
134
111
|
var allDiagnostics = tsc.getPreEmitDiagnostics(program);
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
var _a = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start), line = _a.line, character = _a.character;
|
|
138
|
-
var message = tsc.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
|
|
139
|
-
return path.relative(process.cwd(), diagnostic.file.fileName) + " (" + (line + 1) + "," + (character + 1) + "): " + message + "\n";
|
|
140
|
-
}
|
|
141
|
-
return "" + tsc.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
|
|
142
|
-
});
|
|
143
|
-
if (formattedDiagnostics.length) {
|
|
144
|
-
throw new Error(formattedDiagnostics.join(''));
|
|
112
|
+
if (allDiagnostics.length) {
|
|
113
|
+
throw new Error(formatTsDiagnostics(allDiagnostics));
|
|
145
114
|
}
|
|
146
115
|
}
|
|
147
116
|
exports.runTsDiagnostics = runTsDiagnostics;
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLCtCQUFpQztBQUNqQyx1QkFBeUI7QUFDekIsa0NBQW9DO0FBQ3BDLDJCQUE2QjtBQUM3QixnQ0FBa0M7QUFFbEMsbUNBQW1DO0FBQ25DLDBCQUE0QjtBQUU1Qix5QkFBZ0MsT0FBc0I7SUFDcEQsT0FBTyxPQUFPLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqRSxDQUFDO0FBRkQsMENBRUM7QUFFRCw2QkFBNkIsTUFBd0I7SUFDbkQsSUFBTSxpQkFBaUIsR0FBOEI7UUFDbkQsbUJBQW1CLEVBQUUsY0FBTSxPQUFBLEdBQUcsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsRUFBN0IsQ0FBNkI7UUFDeEQsb0JBQW9CLEVBQUUsVUFBQSxRQUFRLElBQUksT0FBQSxRQUFRLEVBQVIsQ0FBUTtRQUMxQyxVQUFVLEVBQUUsY0FBTSxPQUFBLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFmLENBQWU7S0FDbEMsQ0FBQztJQUVGLE9BQU8sR0FBRyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCw2QkFDRSxVQUFrQixFQUNsQixPQUFlO0lBRWYsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLElBQUEscURBQW9FLEVBQWxFLGtCQUFNLEVBQUUsZ0JBQUssQ0FBc0Q7SUFDM0UsSUFBSSxLQUFLLEVBQUU7UUFDVCxNQUFNLEtBQUssQ0FBQztLQUNiO0lBRUssSUFBQSwyRUFJTCxFQUpPLGtCQUFNLEVBQUUsb0JBQU8sQ0FJckI7SUFFRixJQUFJLE1BQU0sQ0FBQyxNQUFN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
|