File: processing.md

package info (click to toggle)
node-ts-jest 29.1.1%2B~cs0.2.6-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 8,408 kB
  • sloc: javascript: 2,573; makefile: 19
file content (147 lines) | stat: -rw-r--r-- 2,066 bytes parent folder | download | duplicates (12)
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
```