1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
---
id: processing
title: Processing flow
---
_These are internal technical documents. If you're not a contributor to `ts-jest`, but simply trying to use the library you'll find nothing of value here_
## Jest process
```plantuml
start
:require('file');
if (has a transform?) then (yes)
if (transformer has getCacheKey?) then (yes)
:transformer.getCacheKey(...);
else (no)
:use jest built-in;
endif
if (in cache?) then (yes)
:use cache content;
else (no)
:transformer.process(...);
:update cache;
endif
else (no)
endif
:require();
end
```
## `ts-jest` process
```plantuml
|processor|
start
:tsJest.process(source);
if (should stringify?) then (yes)
:json stringify;
-> update
source;
else (no)
endif
if (filename ends with .d.ts) then (yes)
:wipe source;
note right
no need to compile
definition files
end note
else (no)
|#Thistle|compiler (cached)|
if (isolated modules?) then (yes)
else (no)
:create and cache
ts lang service;
endif
-> source;
if (in persistent cache?) then (yes)
:update mem cache
from persistent cache;
else (no)
if (isolated modules?) then (yes)
:compile with
transpileModule;
note left
files will be compiled
as isolated modules
end note
else (no)
:compile with
service;
note left
make use of the service
created above and cached
mem cache is used when
reading files
end note
endif
:custom AST
transformers;
note left
here is where hoisting of
jest.mock is done, as well as
user-defined transformations
based on config
end note
-> compiled source;
:fix source maps;
:update mem cache;
:update persistent cache;
endif
|processor|
-> update
source;
endif
if (should use babel?) then (yes)
:babelJest.process(source);
note left
calls babel-jest
processor
end note
-> update
source;
else (no)
endif
if (has afterProcess hook?) then (yes)
:call afterProcess hook;
-> update
source;
note left
if the hook returns
something it'll be
used as new source
end note
endif
:transformed source;
end
```
|