metro 0.76.6 → 0.77.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/package.json +21 -23
- package/src/DeltaBundler/Graph.js +1 -0
- package/src/DeltaBundler/Graph.js.flow +1 -0
- package/src/DeltaBundler/Serializers/sourceMapGenerator.js.flow +0 -2
- package/src/DeltaBundler/WorkerFarm.js +4 -3
- package/src/DeltaBundler/WorkerFarm.js.flow +4 -3
- package/src/index.d.ts +1 -0
- package/src/index.flow.js +2 -0
- package/src/index.flow.js.flow +2 -0
- package/src/lib/TerminalReporter.js +1 -1
- package/src/lib/TerminalReporter.js.flow +1 -1
- package/src/lib/contextModule.js +1 -1
- package/src/lib/contextModule.js.flow +1 -1
- package/src/lib/transformHelpers.js +7 -6
- package/src/lib/transformHelpers.js.flow +7 -6
- package/src/node-haste/DependencyGraph/{createHasteMap.js → createFileMap.js} +21 -6
- package/src/node-haste/DependencyGraph/{createHasteMap.js.flow → createFileMap.js.flow} +17 -5
- package/src/node-haste/DependencyGraph.js +29 -25
- package/src/node-haste/DependencyGraph.js.flow +18 -12
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "metro",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.77.0",
|
|
4
4
|
"description": "🚇 The JavaScript bundler for React Native.",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"bin": "src/cli.js",
|
|
@@ -29,28 +29,26 @@
|
|
|
29
29
|
"denodeify": "^1.2.1",
|
|
30
30
|
"error-stack-parser": "^2.0.6",
|
|
31
31
|
"graceful-fs": "^4.2.4",
|
|
32
|
-
"hermes-parser": "0.
|
|
32
|
+
"hermes-parser": "0.14.0",
|
|
33
33
|
"image-size": "^1.0.2",
|
|
34
34
|
"invariant": "^2.2.4",
|
|
35
35
|
"jest-worker": "^27.2.0",
|
|
36
36
|
"jsc-safe-url": "^0.2.2",
|
|
37
37
|
"lodash.throttle": "^4.1.1",
|
|
38
|
-
"metro-babel-transformer": "0.
|
|
39
|
-
"metro-cache": "0.
|
|
40
|
-
"metro-cache-key": "0.
|
|
41
|
-
"metro-config": "0.
|
|
42
|
-
"metro-core": "0.
|
|
43
|
-
"metro-file-map": "0.
|
|
44
|
-
"metro-inspector-proxy": "0.
|
|
45
|
-
"metro-minify-terser": "0.
|
|
46
|
-
"metro-
|
|
47
|
-
"metro-
|
|
48
|
-
"metro-
|
|
49
|
-
"metro-
|
|
50
|
-
"metro-
|
|
51
|
-
"metro-
|
|
52
|
-
"metro-transform-plugins": "0.76.6",
|
|
53
|
-
"metro-transform-worker": "0.76.6",
|
|
38
|
+
"metro-babel-transformer": "0.77.0",
|
|
39
|
+
"metro-cache": "0.77.0",
|
|
40
|
+
"metro-cache-key": "0.77.0",
|
|
41
|
+
"metro-config": "0.77.0",
|
|
42
|
+
"metro-core": "0.77.0",
|
|
43
|
+
"metro-file-map": "0.77.0",
|
|
44
|
+
"metro-inspector-proxy": "0.77.0",
|
|
45
|
+
"metro-minify-terser": "0.77.0",
|
|
46
|
+
"metro-resolver": "0.77.0",
|
|
47
|
+
"metro-runtime": "0.77.0",
|
|
48
|
+
"metro-source-map": "0.77.0",
|
|
49
|
+
"metro-symbolicate": "0.77.0",
|
|
50
|
+
"metro-transform-plugins": "0.77.0",
|
|
51
|
+
"metro-transform-worker": "0.77.0",
|
|
54
52
|
"mime-types": "^2.1.27",
|
|
55
53
|
"node-fetch": "^2.2.0",
|
|
56
54
|
"nullthrows": "^1.1.1",
|
|
@@ -68,16 +66,16 @@
|
|
|
68
66
|
"dedent": "^0.7.0",
|
|
69
67
|
"jest-snapshot": "^26.5.2",
|
|
70
68
|
"jest-snapshot-serializer-raw": "^1.2.0",
|
|
71
|
-
"metro-babel-register": "0.
|
|
72
|
-
"metro-memory-fs": "0.
|
|
73
|
-
"metro-react-native-babel-preset": "0.
|
|
74
|
-
"metro-react-native-babel-transformer": "0.
|
|
69
|
+
"metro-babel-register": "0.77.0",
|
|
70
|
+
"metro-memory-fs": "0.77.0",
|
|
71
|
+
"metro-react-native-babel-preset": "0.77.0",
|
|
72
|
+
"metro-react-native-babel-transformer": "0.77.0",
|
|
75
73
|
"mock-req": "^0.2.0",
|
|
76
74
|
"mock-res": "^0.6.0",
|
|
77
75
|
"stack-trace": "^0.0.10"
|
|
78
76
|
},
|
|
79
77
|
"license": "MIT",
|
|
80
78
|
"engines": {
|
|
81
|
-
"node": ">=
|
|
79
|
+
"node": ">=18"
|
|
82
80
|
}
|
|
83
81
|
}
|
|
@@ -197,6 +197,7 @@ class Graph {
|
|
|
197
197
|
// TODO: Refactor for more explicit immutability
|
|
198
198
|
newModule !== originalModule ||
|
|
199
199
|
transfromOutputMayDiffer(newModule, originalModule) ||
|
|
200
|
+
// $FlowFixMe[incompatible-call]
|
|
200
201
|
!allDependenciesEqual(newModule, originalModule)
|
|
201
202
|
) {
|
|
202
203
|
modified.set(path, newModule);
|
|
@@ -240,6 +240,7 @@ export class Graph<T = MixedOutput> {
|
|
|
240
240
|
// TODO: Refactor for more explicit immutability
|
|
241
241
|
newModule !== originalModule ||
|
|
242
242
|
transfromOutputMayDiffer(newModule, originalModule) ||
|
|
243
|
+
// $FlowFixMe[incompatible-call]
|
|
243
244
|
!allDependenciesEqual(newModule, originalModule)
|
|
244
245
|
) {
|
|
245
246
|
modified.set(path, newModule);
|
|
@@ -26,8 +26,6 @@ const {
|
|
|
26
26
|
fromRawMappingsNonBlocking,
|
|
27
27
|
} = require('metro-source-map');
|
|
28
28
|
|
|
29
|
-
type ReturnType<F> = $Call<<A, R>((...A) => R) => R, F>;
|
|
30
|
-
|
|
31
29
|
function getSourceMapInfosImpl(
|
|
32
30
|
isBlocking: boolean,
|
|
33
31
|
onDone: ($ReadOnlyArray<ReturnType<typeof getSourceMapInfo>>) => void,
|
|
@@ -17,9 +17,10 @@ class WorkerFarm {
|
|
|
17
17
|
constructor(config, transformerConfig) {
|
|
18
18
|
this._config = config;
|
|
19
19
|
this._transformerConfig = transformerConfig;
|
|
20
|
+
const absoluteWorkerPath = require.resolve(config.transformer.workerPath);
|
|
20
21
|
if (this._config.maxWorkers > 1) {
|
|
21
22
|
const worker = this._makeFarm(
|
|
22
|
-
|
|
23
|
+
absoluteWorkerPath,
|
|
23
24
|
["transform"],
|
|
24
25
|
this._config.maxWorkers
|
|
25
26
|
);
|
|
@@ -69,13 +70,13 @@ class WorkerFarm {
|
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
72
|
}
|
|
72
|
-
_makeFarm(
|
|
73
|
+
_makeFarm(absoluteWorkerPath, exposedMethods, numWorkers) {
|
|
73
74
|
const env = {
|
|
74
75
|
...process.env,
|
|
75
76
|
// Force color to print syntax highlighted code frames.
|
|
76
77
|
FORCE_COLOR: 1,
|
|
77
78
|
};
|
|
78
|
-
return new JestWorker(
|
|
79
|
+
return new JestWorker(absoluteWorkerPath, {
|
|
79
80
|
computeWorkerKey: this._config.stickyWorkers
|
|
80
81
|
? // $FlowFixMe[method-unbinding] added when improving typing for this parameters
|
|
81
82
|
// $FlowFixMe[incompatible-call]
|
|
@@ -39,10 +39,11 @@ class WorkerFarm {
|
|
|
39
39
|
constructor(config: ConfigT, transformerConfig: TransformerConfig) {
|
|
40
40
|
this._config = config;
|
|
41
41
|
this._transformerConfig = transformerConfig;
|
|
42
|
+
const absoluteWorkerPath = require.resolve(config.transformer.workerPath);
|
|
42
43
|
|
|
43
44
|
if (this._config.maxWorkers > 1) {
|
|
44
45
|
const worker = this._makeFarm(
|
|
45
|
-
|
|
46
|
+
absoluteWorkerPath,
|
|
46
47
|
['transform'],
|
|
47
48
|
this._config.maxWorkers,
|
|
48
49
|
);
|
|
@@ -107,7 +108,7 @@ class WorkerFarm {
|
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
_makeFarm(
|
|
110
|
-
|
|
111
|
+
absoluteWorkerPath: string,
|
|
111
112
|
exposedMethods: $ReadOnlyArray<string>,
|
|
112
113
|
numWorkers: number,
|
|
113
114
|
): any {
|
|
@@ -117,7 +118,7 @@ class WorkerFarm {
|
|
|
117
118
|
FORCE_COLOR: 1,
|
|
118
119
|
};
|
|
119
120
|
|
|
120
|
-
return new JestWorker(
|
|
121
|
+
return new JestWorker(absoluteWorkerPath, {
|
|
121
122
|
computeWorkerKey: this._config.stickyWorkers
|
|
122
123
|
? // $FlowFixMe[method-unbinding] added when improving typing for this parameters
|
|
123
124
|
// $FlowFixMe[incompatible-call]
|
package/src/index.d.ts
CHANGED
|
@@ -33,6 +33,7 @@ import type {OutputOptions, RequestOptions} from './shared/types';
|
|
|
33
33
|
|
|
34
34
|
export {loadConfig, mergeConfig, resolveConfig} from 'metro-config';
|
|
35
35
|
export {Terminal} from 'metro-core';
|
|
36
|
+
export {TerminalReporter} from './lib/TerminalReporter';
|
|
36
37
|
|
|
37
38
|
export {HttpServer, HttpsServer};
|
|
38
39
|
|
package/src/index.flow.js
CHANGED
|
@@ -17,6 +17,7 @@ const makeServeCommand = require("./commands/serve");
|
|
|
17
17
|
const MetroHmrServer = require("./HmrServer");
|
|
18
18
|
const IncrementalBundler = require("./IncrementalBundler");
|
|
19
19
|
const createWebsocketServer = require("./lib/createWebsocketServer");
|
|
20
|
+
const TerminalReporter = require("./lib/TerminalReporter");
|
|
20
21
|
const MetroServer = require("./Server");
|
|
21
22
|
const outputBundle = require("./shared/output/bundle");
|
|
22
23
|
const chalk = require("chalk");
|
|
@@ -34,6 +35,7 @@ const { InspectorProxy } = require("metro-inspector-proxy");
|
|
|
34
35
|
const net = require("net");
|
|
35
36
|
const { parse } = require("url");
|
|
36
37
|
exports.Terminal = Terminal;
|
|
38
|
+
exports.TerminalReporter = TerminalReporter;
|
|
37
39
|
async function getConfig(config) {
|
|
38
40
|
const defaultConfig = await getDefaultConfig(config.projectRoot);
|
|
39
41
|
// $FlowFixMe[incompatible-variance]
|
package/src/index.flow.js.flow
CHANGED
|
@@ -35,6 +35,7 @@ const makeServeCommand = require('./commands/serve');
|
|
|
35
35
|
const MetroHmrServer = require('./HmrServer');
|
|
36
36
|
const IncrementalBundler = require('./IncrementalBundler');
|
|
37
37
|
const createWebsocketServer = require('./lib/createWebsocketServer');
|
|
38
|
+
const TerminalReporter = require('./lib/TerminalReporter');
|
|
38
39
|
const MetroServer = require('./Server');
|
|
39
40
|
const outputBundle = require('./shared/output/bundle');
|
|
40
41
|
const chalk = require('chalk');
|
|
@@ -140,6 +141,7 @@ type BuildCommandOptions = {} | null;
|
|
|
140
141
|
type ServeCommandOptions = {} | null;
|
|
141
142
|
|
|
142
143
|
exports.Terminal = Terminal;
|
|
144
|
+
exports.TerminalReporter = TerminalReporter;
|
|
143
145
|
|
|
144
146
|
export type {MetroConfig};
|
|
145
147
|
|
|
@@ -439,7 +439,7 @@ class TerminalReporter {
|
|
|
439
439
|
|
|
440
440
|
/**
|
|
441
441
|
* Single entry point for reporting events. That allows us to implement the
|
|
442
|
-
* corresponding JSON reporter easily and have a consistent
|
|
442
|
+
* corresponding JSON reporter easily and have a consistent reporting.
|
|
443
443
|
*/
|
|
444
444
|
update(event) {
|
|
445
445
|
if (event.type === "bundle_transform_progressed") {
|
|
@@ -515,7 +515,7 @@ class TerminalReporter {
|
|
|
515
515
|
|
|
516
516
|
/**
|
|
517
517
|
* Single entry point for reporting events. That allows us to implement the
|
|
518
|
-
* corresponding JSON reporter easily and have a consistent
|
|
518
|
+
* corresponding JSON reporter easily and have a consistent reporting.
|
|
519
519
|
*/
|
|
520
520
|
update(event: TerminalReportableEvent): void {
|
|
521
521
|
if (event.type === 'bundle_transform_progressed') {
|
package/src/lib/contextModule.js
CHANGED
|
@@ -51,7 +51,7 @@ function deriveAbsolutePathFromContext(from, context) {
|
|
|
51
51
|
/** Match a file against a require context. */
|
|
52
52
|
function fileMatchesContext(testPath, context) {
|
|
53
53
|
// NOTE(EvanBacon): Ensure this logic is synchronized with the similar
|
|
54
|
-
// functionality in `metro-file-map/src/
|
|
54
|
+
// functionality in `metro-file-map/src/lib/TreeFS.js` (`matchFiles()`)
|
|
55
55
|
|
|
56
56
|
const filePath = _path.default.relative(
|
|
57
57
|
(0, _nullthrows.default)(context.from),
|
|
@@ -63,7 +63,7 @@ export function fileMatchesContext(
|
|
|
63
63
|
context: RequireContext,
|
|
64
64
|
): boolean {
|
|
65
65
|
// NOTE(EvanBacon): Ensure this logic is synchronized with the similar
|
|
66
|
-
// functionality in `metro-file-map/src/
|
|
66
|
+
// functionality in `metro-file-map/src/lib/TreeFS.js` (`matchFiles()`)
|
|
67
67
|
|
|
68
68
|
const filePath = path.relative(nullthrows(context.from), testPath);
|
|
69
69
|
const filter = context.filter;
|
|
@@ -127,12 +127,13 @@ async function getTransformFn(
|
|
|
127
127
|
// TODO: Check delta changes to avoid having to look over all files each time
|
|
128
128
|
// this is a massive performance boost.
|
|
129
129
|
|
|
130
|
-
// Search against all files
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
130
|
+
// Search against all files in a subtree.
|
|
131
|
+
const files = Array.from(
|
|
132
|
+
graph.matchFilesWithContext(requireContext.from, {
|
|
133
|
+
filter: requireContext.filter,
|
|
134
|
+
recursive: requireContext.recursive,
|
|
135
|
+
})
|
|
136
|
+
);
|
|
136
137
|
const template = (0, _contextModuleTemplates.getContextModuleTemplate)(
|
|
137
138
|
requireContext.mode,
|
|
138
139
|
requireContext.from,
|
|
@@ -152,12 +152,13 @@ async function getTransformFn(
|
|
|
152
152
|
// TODO: Check delta changes to avoid having to look over all files each time
|
|
153
153
|
// this is a massive performance boost.
|
|
154
154
|
|
|
155
|
-
// Search against all files
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
155
|
+
// Search against all files in a subtree.
|
|
156
|
+
const files = Array.from(
|
|
157
|
+
graph.matchFilesWithContext(requireContext.from, {
|
|
158
|
+
filter: requireContext.filter,
|
|
159
|
+
recursive: requireContext.recursive,
|
|
160
|
+
}),
|
|
161
|
+
);
|
|
161
162
|
|
|
162
163
|
const template = getContextModuleTemplate(
|
|
163
164
|
requireContext.mode,
|
|
@@ -53,7 +53,6 @@ function _interopRequireWildcard(obj, nodeInterop) {
|
|
|
53
53
|
*/
|
|
54
54
|
|
|
55
55
|
const ci = require("ci-info");
|
|
56
|
-
const path = require("path");
|
|
57
56
|
function getIgnorePattern(config) {
|
|
58
57
|
// For now we support both options
|
|
59
58
|
const { blockList, blacklistRE } = config.resolver;
|
|
@@ -66,8 +65,21 @@ function getIgnorePattern(config) {
|
|
|
66
65
|
const combine = (regexes) =>
|
|
67
66
|
new RegExp(
|
|
68
67
|
regexes
|
|
69
|
-
.map((regex
|
|
70
|
-
|
|
68
|
+
.map((regex, index) => {
|
|
69
|
+
if (regex.flags !== regexes[0].flags) {
|
|
70
|
+
throw new Error(
|
|
71
|
+
"Cannot combine blockList patterns, because they have different flags:\n" +
|
|
72
|
+
" - Pattern 0: " +
|
|
73
|
+
regexes[0].toString() +
|
|
74
|
+
"\n" +
|
|
75
|
+
` - Pattern ${index}: ` +
|
|
76
|
+
regexes[index].toString()
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
return "(" + regex.source + ")";
|
|
80
|
+
})
|
|
81
|
+
.join("|"),
|
|
82
|
+
regexes[0]?.flags ?? ""
|
|
71
83
|
);
|
|
72
84
|
|
|
73
85
|
// If ignorePattern is an array, merge it into one
|
|
@@ -76,7 +88,7 @@ function getIgnorePattern(config) {
|
|
|
76
88
|
}
|
|
77
89
|
return ignorePattern;
|
|
78
90
|
}
|
|
79
|
-
function
|
|
91
|
+
function createFileMap(config, options) {
|
|
80
92
|
const dependencyExtractor =
|
|
81
93
|
options?.extractDependencies === false
|
|
82
94
|
? null
|
|
@@ -110,7 +122,10 @@ function createHasteMap(config, options) {
|
|
|
110
122
|
ignorePattern: getIgnorePattern(config),
|
|
111
123
|
maxWorkers: config.maxWorkers,
|
|
112
124
|
mocksPattern: "",
|
|
113
|
-
platforms:
|
|
125
|
+
platforms: [
|
|
126
|
+
...config.resolver.platforms,
|
|
127
|
+
_metroFileMap.default.H.NATIVE_PLATFORM,
|
|
128
|
+
],
|
|
114
129
|
retainAllFiles: true,
|
|
115
130
|
resetCache: config.resetCache,
|
|
116
131
|
rootDir: config.projectRoot,
|
|
@@ -121,4 +136,4 @@ function createHasteMap(config, options) {
|
|
|
121
136
|
watchmanDeferStates: config.watcher.watchman.deferStates,
|
|
122
137
|
});
|
|
123
138
|
}
|
|
124
|
-
module.exports =
|
|
139
|
+
module.exports = createFileMap;
|
|
@@ -14,7 +14,6 @@ import type {ConfigT} from 'metro-config/src/configTypes.flow';
|
|
|
14
14
|
import MetroFileMap, {DiskCacheManager} from 'metro-file-map';
|
|
15
15
|
|
|
16
16
|
const ci = require('ci-info');
|
|
17
|
-
const path = require('path');
|
|
18
17
|
|
|
19
18
|
function getIgnorePattern(config: ConfigT): RegExp {
|
|
20
19
|
// For now we support both options
|
|
@@ -29,8 +28,21 @@ function getIgnorePattern(config: ConfigT): RegExp {
|
|
|
29
28
|
const combine = (regexes: Array<RegExp>) =>
|
|
30
29
|
new RegExp(
|
|
31
30
|
regexes
|
|
32
|
-
.map(
|
|
31
|
+
.map((regex, index) => {
|
|
32
|
+
if (regex.flags !== regexes[0].flags) {
|
|
33
|
+
throw new Error(
|
|
34
|
+
'Cannot combine blockList patterns, because they have different flags:\n' +
|
|
35
|
+
' - Pattern 0: ' +
|
|
36
|
+
regexes[0].toString() +
|
|
37
|
+
'\n' +
|
|
38
|
+
` - Pattern ${index}: ` +
|
|
39
|
+
regexes[index].toString(),
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
return '(' + regex.source + ')';
|
|
43
|
+
})
|
|
33
44
|
.join('|'),
|
|
45
|
+
regexes[0]?.flags ?? '',
|
|
34
46
|
);
|
|
35
47
|
|
|
36
48
|
// If ignorePattern is an array, merge it into one
|
|
@@ -41,7 +53,7 @@ function getIgnorePattern(config: ConfigT): RegExp {
|
|
|
41
53
|
return ignorePattern;
|
|
42
54
|
}
|
|
43
55
|
|
|
44
|
-
function
|
|
56
|
+
function createFileMap(
|
|
45
57
|
config: ConfigT,
|
|
46
58
|
options?: $ReadOnly<{
|
|
47
59
|
extractDependencies?: boolean,
|
|
@@ -84,7 +96,7 @@ function createHasteMap(
|
|
|
84
96
|
ignorePattern: getIgnorePattern(config),
|
|
85
97
|
maxWorkers: config.maxWorkers,
|
|
86
98
|
mocksPattern: '',
|
|
87
|
-
platforms: config.resolver.platforms,
|
|
99
|
+
platforms: [...config.resolver.platforms, MetroFileMap.H.NATIVE_PLATFORM],
|
|
88
100
|
retainAllFiles: true,
|
|
89
101
|
resetCache: config.resetCache,
|
|
90
102
|
rootDir: config.projectRoot,
|
|
@@ -96,4 +108,4 @@ function createHasteMap(
|
|
|
96
108
|
});
|
|
97
109
|
}
|
|
98
110
|
|
|
99
|
-
module.exports =
|
|
111
|
+
module.exports = createFileMap;
|
|
@@ -13,7 +13,7 @@ var _metroFileMap = require("metro-file-map");
|
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
const canonicalize = require("metro-core/src/canonicalize");
|
|
16
|
-
const
|
|
16
|
+
const createFileMap = require("./DependencyGraph/createFileMap");
|
|
17
17
|
const { ModuleResolver } = require("./DependencyGraph/ModuleResolution");
|
|
18
18
|
const ModuleCache = require("./ModuleCache");
|
|
19
19
|
const { EventEmitter } = require("events");
|
|
@@ -47,34 +47,32 @@ class DependencyGraph extends EventEmitter {
|
|
|
47
47
|
type: "dep_graph_loading",
|
|
48
48
|
hasReducedPerformance: !!hasReducedPerformance,
|
|
49
49
|
});
|
|
50
|
-
const
|
|
50
|
+
const fileMap = createFileMap(config, {
|
|
51
51
|
watch,
|
|
52
52
|
});
|
|
53
53
|
|
|
54
54
|
// We can have a lot of graphs listening to Haste for changes.
|
|
55
55
|
// Bump this up to silence the max listeners EventEmitter warning.
|
|
56
|
-
|
|
57
|
-
this._haste =
|
|
56
|
+
fileMap.setMaxListeners(1000);
|
|
57
|
+
this._haste = fileMap;
|
|
58
58
|
this._haste.on("status", (status) => this._onWatcherStatus(status));
|
|
59
|
-
this._readyPromise =
|
|
60
|
-
|
|
61
|
-
.
|
|
62
|
-
|
|
63
|
-
config.reporter.update({
|
|
64
|
-
type: "dep_graph_loaded",
|
|
65
|
-
});
|
|
66
|
-
this._fileSystem = fileSystem;
|
|
67
|
-
this._hasteModuleMap = hasteModuleMap;
|
|
68
|
-
this._haste.on("change", (changeEvent) =>
|
|
69
|
-
this._onHasteChange(changeEvent)
|
|
70
|
-
);
|
|
71
|
-
this._haste.on("healthCheck", (result) =>
|
|
72
|
-
this._onWatcherHealthCheck(result)
|
|
73
|
-
);
|
|
74
|
-
this._resolutionCache = new Map();
|
|
75
|
-
this._moduleCache = this._createModuleCache();
|
|
76
|
-
this._createModuleResolver();
|
|
59
|
+
this._readyPromise = fileMap.build().then(({ fileSystem, hasteMap }) => {
|
|
60
|
+
log(createActionEndEntry(initializingMetroLogEntry));
|
|
61
|
+
config.reporter.update({
|
|
62
|
+
type: "dep_graph_loaded",
|
|
77
63
|
});
|
|
64
|
+
this._fileSystem = fileSystem;
|
|
65
|
+
this._hasteMap = hasteMap;
|
|
66
|
+
this._haste.on("change", (changeEvent) =>
|
|
67
|
+
this._onHasteChange(changeEvent)
|
|
68
|
+
);
|
|
69
|
+
this._haste.on("healthCheck", (result) =>
|
|
70
|
+
this._onWatcherHealthCheck(result)
|
|
71
|
+
);
|
|
72
|
+
this._resolutionCache = new Map();
|
|
73
|
+
this._moduleCache = this._createModuleCache();
|
|
74
|
+
this._createModuleResolver();
|
|
75
|
+
});
|
|
78
76
|
}
|
|
79
77
|
_onWatcherHealthCheck(result) {
|
|
80
78
|
this._config.reporter.update({
|
|
@@ -143,9 +141,9 @@ class DependencyGraph extends EventEmitter {
|
|
|
143
141
|
emptyModulePath: this._config.resolver.emptyModulePath,
|
|
144
142
|
extraNodeModules: this._config.resolver.extraNodeModules,
|
|
145
143
|
getHasteModulePath: (name, platform) =>
|
|
146
|
-
this.
|
|
144
|
+
this._hasteMap.getModule(name, platform, true),
|
|
147
145
|
getHastePackagePath: (name, platform) =>
|
|
148
|
-
this.
|
|
146
|
+
this._hasteMap.getPackage(name, platform, true),
|
|
149
147
|
mainFields: this._config.resolver.resolverMainFields,
|
|
150
148
|
moduleCache: this._moduleCache,
|
|
151
149
|
nodeModulesPaths: this._config.resolver.nodeModulesPaths,
|
|
@@ -231,7 +229,13 @@ class DependencyGraph extends EventEmitter {
|
|
|
231
229
|
|
|
232
230
|
/** Given a search context, return a list of file paths matching the query. */
|
|
233
231
|
matchFilesWithContext(from, context) {
|
|
234
|
-
return this._fileSystem.
|
|
232
|
+
return this._fileSystem.matchFiles({
|
|
233
|
+
rootDir: from,
|
|
234
|
+
recursive: context.recursive,
|
|
235
|
+
filter: context.filter,
|
|
236
|
+
filterComparePosix: true,
|
|
237
|
+
follow: true,
|
|
238
|
+
});
|
|
235
239
|
}
|
|
236
240
|
resolveDependency(
|
|
237
241
|
from,
|
|
@@ -14,7 +14,7 @@ import type {ConfigT} from 'metro-config/src/configTypes.flow';
|
|
|
14
14
|
import type MetroFileMap, {
|
|
15
15
|
ChangeEvent,
|
|
16
16
|
FileSystem,
|
|
17
|
-
|
|
17
|
+
HasteMap,
|
|
18
18
|
HealthCheckResult,
|
|
19
19
|
WatcherStatus,
|
|
20
20
|
} from 'metro-file-map';
|
|
@@ -22,7 +22,7 @@ import type MetroFileMap, {
|
|
|
22
22
|
import {DuplicateHasteCandidatesError} from 'metro-file-map';
|
|
23
23
|
|
|
24
24
|
const canonicalize = require('metro-core/src/canonicalize');
|
|
25
|
-
const
|
|
25
|
+
const createFileMap = require('./DependencyGraph/createFileMap');
|
|
26
26
|
const {ModuleResolver} = require('./DependencyGraph/ModuleResolution');
|
|
27
27
|
const ModuleCache = require('./ModuleCache');
|
|
28
28
|
const {EventEmitter} = require('events');
|
|
@@ -57,7 +57,7 @@ class DependencyGraph extends EventEmitter {
|
|
|
57
57
|
_haste: MetroFileMap;
|
|
58
58
|
_fileSystem: FileSystem;
|
|
59
59
|
_moduleCache: ModuleCache;
|
|
60
|
-
|
|
60
|
+
_hasteMap: HasteMap;
|
|
61
61
|
_moduleResolver: ModuleResolver<Package>;
|
|
62
62
|
_resolutionCache: Map<
|
|
63
63
|
// Custom resolver options
|
|
@@ -98,21 +98,21 @@ class DependencyGraph extends EventEmitter {
|
|
|
98
98
|
type: 'dep_graph_loading',
|
|
99
99
|
hasReducedPerformance: !!hasReducedPerformance,
|
|
100
100
|
});
|
|
101
|
-
const
|
|
101
|
+
const fileMap = createFileMap(config, {watch});
|
|
102
102
|
|
|
103
103
|
// We can have a lot of graphs listening to Haste for changes.
|
|
104
104
|
// Bump this up to silence the max listeners EventEmitter warning.
|
|
105
|
-
|
|
105
|
+
fileMap.setMaxListeners(1000);
|
|
106
106
|
|
|
107
|
-
this._haste =
|
|
107
|
+
this._haste = fileMap;
|
|
108
108
|
this._haste.on('status', status => this._onWatcherStatus(status));
|
|
109
109
|
|
|
110
|
-
this._readyPromise =
|
|
110
|
+
this._readyPromise = fileMap.build().then(({fileSystem, hasteMap}) => {
|
|
111
111
|
log(createActionEndEntry(initializingMetroLogEntry));
|
|
112
112
|
config.reporter.update({type: 'dep_graph_loaded'});
|
|
113
113
|
|
|
114
114
|
this._fileSystem = fileSystem;
|
|
115
|
-
this.
|
|
115
|
+
this._hasteMap = hasteMap;
|
|
116
116
|
|
|
117
117
|
this._haste.on('change', changeEvent => this._onHasteChange(changeEvent));
|
|
118
118
|
this._haste.on('healthCheck', result =>
|
|
@@ -191,9 +191,9 @@ class DependencyGraph extends EventEmitter {
|
|
|
191
191
|
emptyModulePath: this._config.resolver.emptyModulePath,
|
|
192
192
|
extraNodeModules: this._config.resolver.extraNodeModules,
|
|
193
193
|
getHasteModulePath: (name, platform) =>
|
|
194
|
-
this.
|
|
194
|
+
this._hasteMap.getModule(name, platform, true),
|
|
195
195
|
getHastePackagePath: (name, platform) =>
|
|
196
|
-
this.
|
|
196
|
+
this._hasteMap.getPackage(name, platform, true),
|
|
197
197
|
mainFields: this._config.resolver.resolverMainFields,
|
|
198
198
|
moduleCache: this._moduleCache,
|
|
199
199
|
nodeModulesPaths: this._config.resolver.nodeModulesPaths,
|
|
@@ -298,8 +298,14 @@ class DependencyGraph extends EventEmitter {
|
|
|
298
298
|
/* Filter relative paths against a pattern. */
|
|
299
299
|
filter: RegExp,
|
|
300
300
|
}>,
|
|
301
|
-
): string
|
|
302
|
-
return this._fileSystem.
|
|
301
|
+
): Iterable<string> {
|
|
302
|
+
return this._fileSystem.matchFiles({
|
|
303
|
+
rootDir: from,
|
|
304
|
+
recursive: context.recursive,
|
|
305
|
+
filter: context.filter,
|
|
306
|
+
filterComparePosix: true,
|
|
307
|
+
follow: true,
|
|
308
|
+
});
|
|
303
309
|
}
|
|
304
310
|
|
|
305
311
|
resolveDependency(
|