1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, '__esModule', {
|
4 | value: true
|
5 | });
|
6 | exports.DependencyResolver = void 0;
|
7 | function path() {
|
8 | const data = _interopRequireWildcard(require('path'));
|
9 | path = function () {
|
10 | return data;
|
11 | };
|
12 | return data;
|
13 | }
|
14 | function _jestSnapshot() {
|
15 | const data = require('jest-snapshot');
|
16 | _jestSnapshot = function () {
|
17 | return data;
|
18 | };
|
19 | return data;
|
20 | }
|
21 | function _getRequireWildcardCache(nodeInterop) {
|
22 | if (typeof WeakMap !== 'function') return null;
|
23 | var cacheBabelInterop = new WeakMap();
|
24 | var cacheNodeInterop = new WeakMap();
|
25 | return (_getRequireWildcardCache = function (nodeInterop) {
|
26 | return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
27 | })(nodeInterop);
|
28 | }
|
29 | function _interopRequireWildcard(obj, nodeInterop) {
|
30 | if (!nodeInterop && obj && obj.__esModule) {
|
31 | return obj;
|
32 | }
|
33 | if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
|
34 | return {default: obj};
|
35 | }
|
36 | var cache = _getRequireWildcardCache(nodeInterop);
|
37 | if (cache && cache.has(obj)) {
|
38 | return cache.get(obj);
|
39 | }
|
40 | var newObj = {};
|
41 | var hasPropertyDescriptor =
|
42 | Object.defineProperty && Object.getOwnPropertyDescriptor;
|
43 | for (var key in obj) {
|
44 | if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
|
45 | var desc = hasPropertyDescriptor
|
46 | ? Object.getOwnPropertyDescriptor(obj, key)
|
47 | : null;
|
48 | if (desc && (desc.get || desc.set)) {
|
49 | Object.defineProperty(newObj, key, desc);
|
50 | } else {
|
51 | newObj[key] = obj[key];
|
52 | }
|
53 | }
|
54 | }
|
55 | newObj.default = obj;
|
56 | if (cache) {
|
57 | cache.set(obj, newObj);
|
58 | }
|
59 | return newObj;
|
60 | }
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 |
|
72 | class DependencyResolver {
|
73 | _hasteFS;
|
74 | _resolver;
|
75 | _snapshotResolver;
|
76 | constructor(resolver, hasteFS, snapshotResolver) {
|
77 | this._resolver = resolver;
|
78 | this._hasteFS = hasteFS;
|
79 | this._snapshotResolver = snapshotResolver;
|
80 | }
|
81 | resolve(file, options) {
|
82 | const dependencies = this._hasteFS.getDependencies(file);
|
83 | if (!dependencies) {
|
84 | return [];
|
85 | }
|
86 | return dependencies.reduce((acc, dependency) => {
|
87 | if (this._resolver.isCoreModule(dependency)) {
|
88 | return acc;
|
89 | }
|
90 | let resolvedDependency;
|
91 | let resolvedMockDependency;
|
92 | try {
|
93 | resolvedDependency = this._resolver.resolveModule(
|
94 | file,
|
95 | dependency,
|
96 | options
|
97 | );
|
98 | } catch {
|
99 | try {
|
100 | resolvedDependency = this._resolver.getMockModule(file, dependency);
|
101 | } catch {
|
102 |
|
103 | }
|
104 | }
|
105 | if (resolvedDependency == null) {
|
106 | return acc;
|
107 | }
|
108 | acc.push(resolvedDependency);
|
109 |
|
110 |
|
111 |
|
112 | try {
|
113 | resolvedMockDependency = this._resolver.getMockModule(
|
114 | resolvedDependency,
|
115 | path().basename(dependency)
|
116 | );
|
117 | } catch {
|
118 |
|
119 | }
|
120 | if (resolvedMockDependency != null) {
|
121 | const dependencyMockDir = path().resolve(
|
122 | path().dirname(resolvedDependency),
|
123 | '__mocks__'
|
124 | );
|
125 | resolvedMockDependency = path().resolve(resolvedMockDependency);
|
126 |
|
127 |
|
128 | if (dependencyMockDir === path().dirname(resolvedMockDependency)) {
|
129 | acc.push(resolvedMockDependency);
|
130 | }
|
131 | }
|
132 | return acc;
|
133 | }, []);
|
134 | }
|
135 | resolveInverseModuleMap(paths, filter, options) {
|
136 | if (!paths.size) {
|
137 | return [];
|
138 | }
|
139 | const collectModules = (related, moduleMap, changed) => {
|
140 | const visitedModules = new Set();
|
141 | const result = [];
|
142 | while (changed.size) {
|
143 | changed = new Set(
|
144 | moduleMap.reduce((acc, module) => {
|
145 | if (
|
146 | visitedModules.has(module.file) ||
|
147 | !module.dependencies.some(dep => changed.has(dep))
|
148 | ) {
|
149 | return acc;
|
150 | }
|
151 | const file = module.file;
|
152 | if (filter(file)) {
|
153 | result.push(module);
|
154 | related.delete(file);
|
155 | }
|
156 | visitedModules.add(file);
|
157 | acc.push(file);
|
158 | return acc;
|
159 | }, [])
|
160 | );
|
161 | }
|
162 | return result.concat(
|
163 | Array.from(related).map(file => ({
|
164 | dependencies: [],
|
165 | file
|
166 | }))
|
167 | );
|
168 | };
|
169 | const relatedPaths = new Set();
|
170 | const changed = new Set();
|
171 | for (const path of paths) {
|
172 | if (this._hasteFS.exists(path)) {
|
173 | const modulePath = (0, _jestSnapshot().isSnapshotPath)(path)
|
174 | ? this._snapshotResolver.resolveTestPath(path)
|
175 | : path;
|
176 | changed.add(modulePath);
|
177 | if (filter(modulePath)) {
|
178 | relatedPaths.add(modulePath);
|
179 | }
|
180 | }
|
181 | }
|
182 | const modules = [];
|
183 | for (const file of this._hasteFS.getAbsoluteFileIterator()) {
|
184 | modules.push({
|
185 | dependencies: this.resolve(file, options),
|
186 | file
|
187 | });
|
188 | }
|
189 | return collectModules(relatedPaths, modules, changed);
|
190 | }
|
191 | resolveInverse(paths, filter, options) {
|
192 | return this.resolveInverseModuleMap(paths, filter, options).map(
|
193 | module => module.file
|
194 | );
|
195 | }
|
196 | }
|
197 | exports.DependencyResolver = DependencyResolver;
|