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 CHANGED
@@ -1,8 +1,11 @@
1
1
  dist: trusty
2
2
  sudo: required
3
3
  language: node_js
4
+ cache: yarn
5
+ git:
6
+ depth: 5
4
7
  node_js:
5
- - "9"
8
+ - "10"
6
9
  - "8"
7
10
  - "6"
8
11
  before_install:
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: 9
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
@@ -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 = (src: string, filename: string, config: JestConfig, transformOptions: TransformOptions) => string;
20
- export declare type JestConfig = Partial<FullJestConfig>;
21
- export interface FullJestConfig {
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
- fs.writeFileSync(filePath, logString);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVCQUF5QjtBQUN6QiwyQkFBNkI7QUFRN0IsSUFBTSxJQUFJLEdBQVUsRUFBRSxDQUFDO0FBQ3ZCLElBQUksV0FBVyxHQUFZLEtBQUssQ0FBQztBQUVqQztJQUVFLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUNuRCxDQUFDO0FBR0Q7SUFBd0IscUJBQXFCO1NBQXJCLFVBQXFCLEVBQXJCLHFCQUFxQixFQUFyQixJQUFxQjtRQUFyQixnQ0FBcUI7O0lBQzNDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sQ0FBQztJQUNULENBQUM7SUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFMRCwwQkFLQztBQUdEO0lBQ0UsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDO0lBQ1QsQ0FBQztJQUNELFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDbkIsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsSUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3hELElBQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckQsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQVZELDhCQVVDO0FBRUQsa0JBQXFCLEtBQVUsRUFBRSxPQUFVO0lBQ3pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxpQ0FBaUMsTUFBVztJQUMxQyxJQUFJLENBQUM7UUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFBQyxLQUFLLENBQUMsQ0FBQyxJQUFELENBQUM7UUFDUCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7QUFDSCxDQUFDIn0=
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVCQUF5QjtBQUN6QiwyQkFBNkI7QUFRN0IsSUFBTSxJQUFJLEdBQVUsRUFBRSxDQUFDO0FBQ3ZCLElBQUksV0FBVyxHQUFZLEtBQUssQ0FBQztBQUVqQyxJQUFNLGVBQWUsR0FBWSxLQUFLLENBQUM7QUFFdkM7SUFFRSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDeEUsQ0FBQztBQUdEO0lBQXdCLHFCQUFxQjtTQUFyQixVQUFxQixFQUFyQixxQkFBcUIsRUFBckIsSUFBcUI7UUFBckIsZ0NBQXFCOztJQUMzQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDaEIsT0FBTztLQUNSO0lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBTEQsMEJBS0M7QUFHRDtJQUNFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUNoQixPQUFPO0tBQ1I7SUFDRCxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ25CLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELElBQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN4RCxJQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JELElBQUksZUFBZSxFQUFFO1FBRW5CLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDeEI7U0FBTTtRQUNMLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ3ZDO0FBQ0gsQ0FBQztBQWZELDhCQWVDO0FBRUQsaUNBQWlDLE1BQVc7SUFDMUMsSUFBSTtRQUNGLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3hDO0lBQUMsV0FBTTtRQUNOLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0tBQzFCO0FBQ0gsQ0FBQyJ9
@@ -1,3 +1,5 @@
1
+ import * as ts from 'typescript';
1
2
  import { CompilerOptions } from 'typescript/lib/typescript';
2
- import { FullJestConfig, PostProcessHook, TsJestConfig } from './jest-types';
3
- export declare const getPostProcessHook: (tsCompilerOptions: CompilerOptions, jestConfig: Partial<FullJestConfig>, tsJestConfig: TsJestConfig) => PostProcessHook;
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;
@@ -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 = require("babel-core");
12
- var babel_plugin_istanbul_1 = require("babel-plugin-istanbul");
13
- var jestPreset = require("babel-preset-jest");
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
- options = __assign({}, options, { plugins: options.plugins || [], presets: (options.presets || []).concat([jestPreset]), retainLines: true, sourceMaps: 'inline' });
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 (src, filename, config, transformOptions) {
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
- babel_plugin_istanbul_1.default,
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(src, theseOptions).code;
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 (src) { return src; };
53
+ return function (input) { return input; };
40
54
  }
41
55
  var plugins = Array.from((tsJestConfig.babelConfig && tsJestConfig.babelConfig.plugins) || []);
42
- if (tsCompilerOptions.allowSyntheticDefaultImports) {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdHByb2Nlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcG9zdHByb2Nlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUlBLGtDQUFvQztBQUNwQywrREFBbUQ7QUFDbkQsOENBQWdEO0FBVWhELG1DQUFtQztBQUVuQyxnQ0FBZ0MsT0FBOEI7SUFDNUQsT0FBTyxnQkFDRixPQUFPLElBQ1YsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxFQUM5QixPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBR3JELFdBQVcsRUFBRSxJQUFJLEVBR2pCLFVBQVUsRUFBRSxRQUFRLEdBQ3JCLENBQUM7SUFDRixPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUM7SUFDOUIsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBRXhCLE1BQU0sQ0FBQyxVQUNMLEdBQVcsRUFDWCxRQUFnQixFQUNoQixNQUFrQixFQUNsQixnQkFBa0M7UUFFbEMsSUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsVUFBQSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUQsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNwRCxZQUFZLENBQUMsc0JBQXNCLEdBQUcsd0JBQXdCLENBQUM7WUFFL0QsWUFBWSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDakQ7b0JBQ0UsK0JBQWM7b0JBQ2Q7d0JBRUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxPQUFPO3dCQUNuQixPQUFPLEVBQUUsRUFBRTtxQkFDWjtpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2pELENBQUMsQ0FBQztBQUNKLENBQUM7QUFFWSxRQUFBLGtCQUFrQixHQUFHLFVBQ2hDLGlCQUFrQyxFQUNsQyxVQUFzQixFQUN0QixZQUEwQjtJQUUxQixFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMzQixnQkFBTyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsR0FBRyxFQUFILENBQUcsQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDeEIsQ0FBQyxZQUFZLENBQUMsV0FBVyxJQUFJLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUNyRSxDQUFDO0lBRUYsRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBTSxZQUFZLGdCQUNiLFlBQVksQ0FBQyxXQUFXLElBQzNCLE9BQU8sRUFBRSxZQUFZLENBQUMsVUFBVSxJQUFJLEtBQUssRUFDekMsT0FBTyxTQUFBLEVBQ1AsT0FBTyxFQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQzFFLENBQUM7SUFFRixnQkFBTyxDQUFDLDJCQUEyQixFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRW5ELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM5QyxDQUFDLENBQUMifQ==
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdHByb2Nlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcG9zdHByb2Nlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQVFBLElBQUksS0FBNEIsQ0FBQztBQUNqQyxJQUFJLGNBQThDLENBQUM7QUFDbkQsSUFBSSxVQUFzQyxDQUFDO0FBQzNDO0lBQ0UsSUFBSSxLQUFLLEVBQUU7UUFDVCxPQUFPO0tBQ1I7SUFDRCxLQUFLLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzlCLGNBQWMsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDMUQsVUFBVSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFXRCxtQ0FBbUM7QUFJbkMseUJBQ0UsZUFBZ0MsRUFDaEMsVUFBc0IsRUFDdEIsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLGVBQWtDLEVBQ2xDLFFBQWdCO0lBRWhCLElBQU0sUUFBUSxHQUFHLDBCQUFrQixDQUNqQyxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksQ0FDYixDQUFDO0lBRUYsT0FBTyxRQUFRLENBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBZkQsMENBZUM7QUFFRCxnQ0FDRSxPQUE4QjtJQUU5QixlQUFlLEVBQUUsQ0FBQztJQUNsQixPQUFPLGdCQUNGLE9BQU8sSUFDVixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQzlCLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsR0FDdEQsQ0FBQztJQUNGLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQztJQUM5QixPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFFeEIsT0FBTyxVQUNMLGlCQUFvQyxFQUNwQyxRQUFnQixFQUNoQixNQUFrQixFQUNsQixnQkFBa0M7UUFFbEMsSUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDaEMsRUFBRSxRQUFRLFVBQUEsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEVBQ25ELE9BQU8sQ0FDUixDQUFDO1FBQ0YsSUFBSSxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU7WUFDbkQsWUFBWSxDQUFDLHNCQUFzQixHQUFHLHdCQUF3QixDQUFDO1lBRS9ELFlBQVksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQ2pEO29CQUNFLGNBQWM7b0JBQ2Q7d0JBRUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxPQUFPO3dCQUNuQixPQUFPLEVBQUUsRUFBRTtxQkFDWjtpQkFDRjthQUNGLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBUSxLQUFLLENBQUMsU0FBUyxDQUNyQixpQkFBaUIsQ0FBQyxJQUFJLEVBQ3RCLFlBQVksQ0FDZ0IsQ0FBQztJQUNqQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRVksUUFBQSxrQkFBa0IsR0FBRyxVQUNoQyxpQkFBa0MsRUFDbEMsVUFBc0IsRUFDdEIsWUFBMEI7SUFFMUIsSUFBSSxZQUFZLENBQUMsU0FBUyxFQUFFO1FBQzFCLGdCQUFPLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUUzQyxPQUFPLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSyxFQUFMLENBQUssQ0FBQztLQUN2QjtJQUVELElBQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQ3hCLENBQUMsWUFBWSxDQUFDLFdBQVcsSUFBSSxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FDckUsQ0FBQztJQUVGLElBQU0sWUFBWSxnQkFDYixZQUFZLENBQUMsV0FBVyxJQUMzQixPQUFPLEVBQUUsWUFBWSxDQUFDLFVBQVUsSUFBSSxLQUFLLEVBQ3pDLE9BQU8sU0FBQSxFQUNQLE9BQU8sRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUN6RSxVQUFVLEVBQUUsWUFBWSxDQUFDLHVCQUF1QixLQUFLLElBQUksR0FDMUQsQ0FBQztJQUVGLGdCQUFPLENBQUMsMkJBQTJCLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFbkQsT0FBTyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM5QyxDQUFDLENBQUMifQ==
@@ -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;
@@ -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, transformOptions.instrument);
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 tsTranspiled = tsc.transpileModule(src, {
28
- compilerOptions: compilerOptions,
29
- fileName: filePath,
30
- });
31
- var postHook = postprocess_1.getPostProcessHook(compilerOptions, jestConfig, tsJestConfig);
32
- var outputText = postHook(tsTranspiled.outputText, filePath, jestConfig, transformOptions);
33
- var modified = tsJestConfig.disableSourceMapSupport === true
34
- ? outputText
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 modified;
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, transformOptions.instrument);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ByZXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtCQUFpQztBQUNqQyxnQ0FBa0M7QUFFbEMsbUNBQThDO0FBQzlDLDZDQUFtRDtBQUNuRCxpQ0FNaUI7QUFFakIsaUJBQ0UsR0FBVyxFQUNYLFFBQWMsRUFDZCxVQUFzQixFQUN0QixnQkFBMEQ7SUFBMUQsaUNBQUEsRUFBQSxxQkFBdUMsVUFBVSxFQUFFLEtBQUssRUFBRTtJQUkxRCxJQUFNLGVBQWUsR0FBRyxtQkFBVyxDQUNqQyxVQUFVLENBQUMsT0FBTyxFQUNsQixVQUFVLENBQUMsT0FBTyxFQUNsQixnQkFBZ0IsQ0FBQyxVQUFVLENBQzVCLENBQUM7SUFFRixnQkFBTyxDQUFDLHdCQUF3QixFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRW5ELElBQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsSUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxJQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRzVDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUN4RCxHQUFHLEdBQUcsa0JBQWtCLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBTSxXQUFXLEdBQ2YsZUFBZSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUVyRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxJQUFNLFlBQVksR0FBRyx1QkFBZSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6RCxnQkFBTyxDQUFDLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRXhDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFDckMsd0JBQWdCLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRTtRQUM1QyxlQUFlLGlCQUFBO1FBQ2YsUUFBUSxFQUFFLFFBQVE7S0FDbkIsQ0FBQyxDQUFDO0lBRUgsSUFBTSxRQUFRLEdBQUcsZ0NBQWtCLENBQ2pDLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxDQUNiLENBQUM7SUFFRixJQUFNLFVBQVUsR0FBRyxRQUFRLENBQ3pCLFlBQVksQ0FBQyxVQUFVLEVBQ3ZCLFFBQVEsRUFDUixVQUFVLEVBQ1YsZ0JBQWdCLENBQ2pCLENBQUM7SUFFRixJQUFNLFFBQVEsR0FDWixZQUFZLENBQUMsdUJBQXVCLEtBQUssSUFBSTtRQUMzQyxDQUFDLENBQUMsVUFBVTtRQUNaLENBQUMsQ0FBQywyQkFBbUIsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUV6RSxrQkFBUyxFQUFFLENBQUM7SUFFWixNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFqRUQsMEJBaUVDO0FBRUQscUJBQ0UsUUFBZ0IsRUFDaEIsUUFBYyxFQUNkLGFBQXFCLEVBQ3JCLGdCQUEwRDtJQUExRCxpQ0FBQSxFQUFBLHFCQUF1QyxVQUFVLEVBQUUsS0FBSyxFQUFFO0lBRTFELElBQU0sVUFBVSxHQUFlLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFekQsSUFBTSxRQUFRLEdBQUcsbUJBQVcsQ0FDMUIsVUFBVSxDQUFDLE9BQU8sRUFDbEIsVUFBVSxDQUFDLE9BQU8sRUFDbEIsZ0JBQWdCLENBQUMsVUFBVSxDQUM1QixDQUFDO0lBRUYsTUFBTSxDQUFDLE1BQU07U0FDVixVQUFVLENBQUMsS0FBSyxDQUFDO1NBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztTQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztTQUNoRCxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsR0FBRyxhQUFhLEVBQUUsTUFBTSxDQUFDO1NBQ25ELE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQixDQUFDO0FBcEJELGtDQW9CQyJ9
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ByZXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtCQUFpQztBQVFqQyxtQ0FBOEM7QUFDOUMsNkNBQWdEO0FBQ2hELGlDQUF5RTtBQUN6RSwyQ0FBbUQ7QUFFbkQsaUJBQ0UsR0FBVyxFQUNYLFFBQWMsRUFDZCxVQUFzQixFQUN0QixnQkFBMEQ7SUFBMUQsaUNBQUEsRUFBQSxxQkFBdUMsVUFBVSxFQUFFLEtBQUssRUFBRTtJQUkxRCxJQUFNLGVBQWUsR0FBRyxtQkFBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTVFLGdCQUFPLENBQUMsd0JBQXdCLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFbkQsSUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxJQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLElBQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFHNUMsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtRQUN2RCxHQUFHLEdBQUcsa0JBQWtCLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztLQUN2QztJQUVELElBQU0sV0FBVyxHQUNmLGVBQWUsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFFckUsSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUNoQixPQUFPLEdBQUcsQ0FBQztLQUNaO0lBRUQsSUFBTSxZQUFZLEdBQUcsdUJBQWUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekQsZ0JBQU8sQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUl4QyxJQUFJLFlBQVksQ0FBQyxtQkFBbUIsRUFBRTtRQUNwQyx3QkFBZ0IsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7S0FDN0M7SUFFRCxJQUFNLGVBQWUsR0FBRyxnQ0FBbUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRTVFLElBQUksWUFBWSxDQUFDLDhCQUE4QixLQUFLLElBQUksRUFBRTtRQUN4RCxlQUFlLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUNqRCxhQUFhLEVBQ2Isc0NBQXNDLENBQ3ZDLENBQUM7S0FDSDtJQUNELElBQUksWUFBWSxDQUFDLDJCQUEyQixLQUFLLElBQUksRUFBRTtRQUNyRCxlQUFlLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUNqRCw0RUFBNEUsRUFDNUUsK0JBQStCLENBQ2hDLENBQUM7S0FDSDtJQUVELElBQU0sVUFBVSxHQUFHLDZCQUFlLENBQ2hDLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsUUFBUSxDQUNULENBQUM7SUFFRixrQkFBUyxFQUFFLENBQUM7SUFFWixPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RCxDQUFDO0FBaEVELDBCQWdFQztBQUtELHFCQUNFLFFBQWdCLEVBQ2hCLFFBQWMsRUFDZCxhQUFxQixFQUNyQixnQkFBMEQ7SUFBMUQsaUNBQUEsRUFBQSxxQkFBdUMsVUFBVSxFQUFFLEtBQUssRUFBRTtJQUUxRCxJQUFNLFVBQVUsR0FBZSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRXpELElBQU0sUUFBUSxHQUFHLG1CQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFckUsT0FBTyxNQUFNO1NBQ1YsVUFBVSxDQUFDLEtBQUssQ0FBQztTQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUM7U0FDeEMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLENBQUM7U0FDaEQsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLEdBQUcsYUFBYSxFQUFFLE1BQU0sQ0FBQztTQUNuRCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkIsQ0FBQztBQWhCRCxrQ0FnQkMifQ==
@@ -1 +1,2 @@
1
- export declare function transpileIfTypescript(path: any, contents: any, config?: any, rootDir?: string): any;
1
+ import { ConfigGlobals } from './jest-types';
2
+ export declare function transpileIfTypescript(path: string, contents: string, config?: ConfigGlobals, rootDir?: string): string;
@@ -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, true),
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwaWxlLWlmLXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RyYW5zcGlsZS1pZi10cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGdDQUFrQztBQUNsQyxpQ0FBZ0U7QUFFaEUsK0JBQ0UsSUFBSSxFQUNKLFFBQVEsRUFDUixNQUFPLEVBQ1AsT0FBb0I7SUFBcEIsd0JBQUEsRUFBQSxZQUFvQjtJQUVwQixFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUU7WUFDL0MsZUFBZSxFQUFFLG1CQUFXLENBQzFCLE1BQU0sSUFBSSxnQ0FBd0IsQ0FBQyxNQUFNLENBQUMsRUFDMUMsT0FBTyxFQUNQLElBQUksQ0FDTDtZQUNELFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUNELE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQW5CRCxzREFtQkMifQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwaWxlLWlmLXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RyYW5zcGlsZS1pZi10cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGdDQUFrQztBQUNsQyxpQ0FBZ0U7QUFHaEUsK0JBQ0UsSUFBWSxFQUNaLFFBQWdCLEVBQ2hCLE1BQXNCLEVBQ3RCLE9BQW9CO0lBQXBCLHdCQUFBLEVBQUEsWUFBb0I7SUFFcEIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUMzRCxJQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRTtZQUMvQyxlQUFlLEVBQUUsbUJBQVcsQ0FDMUIsTUFBTSxJQUFJLGdDQUF3QixDQUFDLE1BQU0sQ0FBQyxFQUMxQyxPQUFPLENBQ1I7WUFDRCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQztLQUM5QjtJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFsQkQsc0RBa0JDIn0=
@@ -0,0 +1,3 @@
1
+ import * as ts from 'typescript';
2
+ import { CodeSourceMapPair } from './jest-types';
3
+ export declare function transpileTypescript(filePath: string, fileSrc: string, compilerOptions: ts.CompilerOptions): CodeSourceMapPair;
@@ -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
- export declare function getTSJestConfig(globals: any): TsJestConfig;
4
- export declare function mockGlobalTSConfigSchema(globals: any): {
5
- 'ts-jest': {
6
- tsConfigFile: string;
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 formatTscParserErrors(errors) {
22
- return errors.map(function (s) { return JSON.stringify(s, null, 4); }).join('\n');
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 loaded = tsc.readConfigFile(configPath, function (file) {
27
- var read = tsc.sys.readFile(file);
28
- if (!read) {
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 basePath = path.dirname(configPath);
37
- var parsedConfig = tsc.parseJsonConfigFileContent(loaded.config, tsc.sys, basePath);
38
- if (parsedConfig.errors.length > 0) {
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 parsedConfig.options;
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
- var tsConfigCache = {};
80
- function getTSConfig(globals, rootDir, collectCoverage) {
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
- if (collectCoverage === void 0) { collectCoverage = false; }
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
- var formattedDiagnostics = allDiagnostics.map(function (diagnostic) {
136
- if (diagnostic.file) {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLCtCQUFpQztBQUNqQyx1QkFBeUI7QUFDekIsa0NBQW9DO0FBQ3BDLDJCQUE2QjtBQUM3QixnQ0FBa0M7QUFFbEMsbUNBQW1DO0FBRW5DLHlCQUFnQyxPQUFZO0lBQzFDLE1BQU0sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqRSxDQUFDO0FBRkQsMENBRUM7QUFFRCwrQkFBK0IsTUFBd0I7SUFDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQTFCLENBQTBCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVELDZCQUE2QixVQUFrQixFQUFFLE9BQWU7SUFDOUQsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRy9DLElBQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQUEsSUFBSTtRQUNoRCxJQUFNLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUlwQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDVixNQUFNLElBQUksS0FBSyxDQUNiLDhDQUE0QyxVQUFVLE1BQUcsQ0FDMUQsQ0FBQztRQUNKLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBR0QsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQyxJQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsMEJBQTBCLENBQ2pELE1BQU0sQ0FBQyxNQUFNLEVBQ2IsR0FBRyxDQUFDLEdBQUcsRUFDUCxRQUFRLENBQ1QsQ0FBQztJQUlGLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBTSxlQUFlLEdBQUcscUJBQXFCLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLE1BQU0sSUFBSSxLQUFLLENBQ2Isd0RBQXNELFVBQVUsVUFBSyxlQUFpQixDQUN2RixDQUFDO0lBQ0osQ0FBQztJQUNELE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO0FBQzlCLENBQUM7QUFFRDtJQVFFLElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFJLElBQUksQ0FBQyxHQUFHLGlCQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxrQ0FDRSxRQUFpQixFQUNqQixXQUFvQjtJQU1wQixFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDZCxNQUFNLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFMUQsSUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QyxJQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUV6RCxFQUFFLENBQUMsQ0FBQyxZQUFZLEtBQUssZUFBZSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBR0QsbUNBQW1DLE9BQVk7SUFDN0MsSUFBTSxtQkFBbUIsR0FBRyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3ZELEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNiLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTlDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRCxNQUFNLENBQUMsbUJBQW1CLENBQUM7QUFDN0IsQ0FBQztBQUVELGtDQUF5QyxPQUFZO0lBQ25ELElBQU0sVUFBVSxHQUFHLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDO0FBQ3JELENBQUM7QUFIRCw0REFHQztBQUVELElBQU0sYUFBYSxHQUEyQixFQUFFLENBQUM7QUFHakQscUJBQ0UsT0FBTyxFQUNQLE9BQW9CLEVBQ3BCLGVBQWdDO0lBRGhDLHdCQUFBLEVBQUEsWUFBb0I7SUFDcEIsZ0NBQUEsRUFBQSx1QkFBZ0M7SUFFaEMsSUFBTSxVQUFVLEdBQUcseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEQsZ0JBQU8sQ0FBQyxxQ0FBbUMsVUFBWSxDQUFDLENBQUM7SUFDekQsSUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUtyRCxJQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDdEMsU0FBUztRQUNULGVBQWU7UUFDZixVQUFVO0tBQ1gsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELElBQU0sTUFBTSxHQUFHLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RCxnQkFBTyxDQUFDLG1EQUFtRCxlQUFPLE1BQU0sRUFBRyxDQUFDO0lBSzVFLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUN4QixNQUFNLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztJQUM5QixNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQU01QixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFFckIsRUFBRSxDQUFDLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBSzdELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7SUFDMUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUN6RCxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFFN0MsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLDRCQUE0QixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUV0RCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQ3hDLENBQUM7SUFHRCxhQUFhLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDekMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBeERELGtDQXdEQztBQUVELG1CQUNFLFVBQXNCLEVBQ3RCLFFBQWdCLEVBQ2hCLEdBQVc7SUFHWCxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FDOUIsVUFBVSxDQUFDLGNBQWMsRUFDekIsV0FBVyxFQUNYLE1BQU07YUFDSCxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLE1BQU0sQ0FBQyxRQUFRLENBQUM7YUFDaEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUNqQixDQUFDO1FBRUYsT0FBTyxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUMsQ0FBQztBQUNILENBQUM7QUFsQkQsOEJBa0JDO0FBRUQsNkJBQ0UsUUFBZ0IsRUFDaEIsY0FBc0IsRUFDdEIsR0FBVztJQUVYLElBQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRXZELElBQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqRCxJQUFNLGFBQWEsR0FBRyxnQ0FBOEIsYUFBYSxVQUFLLFNBQVMsTUFBRyxDQUFDO0lBRW5GLE1BQU0sQ0FBQyxLQUFLLEtBQUssWUFBWTtRQUMzQixDQUFDLENBQUMsa0JBQWdCLGFBQWEsU0FBSSxHQUFLO1FBQ3hDLENBQUMsQ0FBSSxhQUFhLFNBQUksR0FBSyxDQUFDO0FBQ2hDLENBQUM7QUFkRCxrREFjQztBQUVELDBCQUNFLFFBQWdCLEVBQ2hCLGVBQW9DO0lBRXBDLElBQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUMvRCxJQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUQsSUFBTSxvQkFBb0IsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQUEsVUFBVTtRQUN4RCxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNkLElBQUEsb0VBRUwsRUFGTyxjQUFJLEVBQUUsd0JBQVMsQ0FFckI7WUFDRixJQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsNEJBQTRCLENBQzlDLFVBQVUsQ0FBQyxXQUFXLEVBQ3RCLElBQUksQ0FDTCxDQUFDO1lBQ0YsTUFBTSxDQUFJLElBQUksQ0FBQyxRQUFRLENBQ3JCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFDYixVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FDekIsV0FBSyxJQUFJLEdBQUcsQ0FBQyxXQUFJLFNBQVMsR0FBRyxDQUFDLFlBQU0sT0FBTyxPQUFJLENBQUM7UUFDbkQsQ0FBQztRQUVELE1BQU0sQ0FBQyxLQUFHLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBRyxDQUFDO0lBQzdFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7QUFDSCxDQUFDO0FBM0JELDRDQTJCQyJ9
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLCtCQUFpQztBQUNqQyx1QkFBeUI7QUFDekIsa0NBQW9DO0FBQ3BDLDJCQUE2QjtBQUM3QixnQ0FBa0M7QUFFbEMsbUNBQW1DO0FBQ25DLDBCQUE0QjtBQUU1Qix5QkFBZ0MsT0FBc0I7SUFDcEQsT0FBTyxPQUFPLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqRSxDQUFDO0FBRkQsMENBRUM7QUFFRCw2QkFBNkIsTUFBd0I7SUFDbkQsSUFBTSxpQkFBaUIsR0FBOEI7UUFDbkQsbUJBQW1CLEVBQUUsY0FBTSxPQUFBLEdBQUcsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsRUFBN0IsQ0FBNkI7UUFDeEQsb0JBQW9CLEVBQUUsVUFBQSxRQUFRLElBQUksT0FBQSxRQUFRLEVBQVIsQ0FBUTtRQUMxQyxVQUFVLEVBQUUsY0FBTSxPQUFBLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFmLENBQWU7S0FDbEMsQ0FBQztJQUVGLE9BQU8sR0FBRyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCw2QkFDRSxVQUFrQixFQUNsQixPQUFlO0lBRWYsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLElBQUEscURBQW9FLEVBQWxFLGtCQUFNLEVBQUUsZ0JBQUssQ0FBc0Q7SUFDM0UsSUFBSSxLQUFLLEVBQUU7UUFDVCxNQUFNLEtBQUssQ0FBQztLQUNiO0lBRUssSUFBQSwyRUFJTCxFQUpPLGtCQUFNLEVBQUUsb0JBQU8sQ0FJckI7SUFFRixJQUFJLE1BQU0sQ0FBQyxNQUFN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