diff --git a/packages/metro/src/DeltaBundler/traverseDependencies.js b/packages/metro/src/DeltaBundler/traverseDependencies.js index fe13aca9..bb8f820c 100644 --- a/packages/metro/src/DeltaBundler/traverseDependencies.js +++ b/packages/metro/src/DeltaBundler/traverseDependencies.js @@ -13,7 +13,7 @@ import type {TransformResultDependency} from '../ModuleGraph/types.flow'; import type {MetroSourceMapSegmentTuple} from 'metro-source-map'; -export type DependencyType = 'module' | 'script' | 'asset'; +export type DependencyType = string; export type Dependency = {| absolutePath: string, diff --git a/packages/metro/src/JSTransformer/worker.js b/packages/metro/src/JSTransformer/worker.js index c1520d53..7d176b44 100644 --- a/packages/metro/src/JSTransformer/worker.js +++ b/packages/metro/src/JSTransformer/worker.js @@ -42,6 +42,7 @@ export type TransformedCode = { code: string, dependencies: $ReadOnlyArray, map: Array, + type: string, }; export type TransformArgs = {| @@ -140,6 +141,7 @@ async function transformCode( }; let data; + let type = 'module'; if (sourceCode == null) { data = fs.readFileSync(filename); @@ -171,7 +173,7 @@ async function transformCode( } return { - result: {dependencies: [], code, map}, + result: {dependencies: [], code, map, type}, sha1, transformFileStartLogEntry, transformFileEndLogEntry, @@ -193,13 +195,18 @@ async function transformCode( src: sourceCode, }; - const transformResult = isAsset(filename, assetExts) - ? await assetTransformer.transform( - transformerArgs, - assetRegistryPath, - options.assetDataPlugins, - ) - : await transformer.transform(transformerArgs); + if (isAsset(filename, assetExts)) { + type = 'asset'; + } + + const transformResult = + type === 'asset' + ? await assetTransformer.transform( + transformerArgs, + assetRegistryPath, + options.assetDataPlugins, + ) + : await transformer.transform(transformerArgs); // Transformers can ouptut null ASTs (if they ignore the file). In that case // we need to parse the module source code to get their AST. @@ -220,6 +227,8 @@ async function transformCode( if (isScript) { dependencies = []; wrappedAst = JsFileWrapping.wrapPolyfill(ast); + + type = 'script'; } else { let dependencyMapName; try { @@ -280,7 +289,7 @@ async function transformCode( } return { - result: {dependencies, code, map}, + result: {dependencies, code, map, type}, sha1, transformFileStartLogEntry, transformFileEndLogEntry, diff --git a/packages/metro/src/lib/transformHelpers.js b/packages/metro/src/lib/transformHelpers.js index e0719315..a633642e 100644 --- a/packages/metro/src/lib/transformHelpers.js +++ b/packages/metro/src/lib/transformHelpers.js @@ -109,20 +109,12 @@ async function getTransformFn( ), }); - let type = 'module'; - if (module.isAsset()) { - type = 'asset'; - } - if (module.isPolyfill()) { - type = 'script'; - } - // eslint-disable-next-line lint/flow-no-fixme // $FlowFixMe: "defineProperty" with a getter is buggy in flow. const output = { code: result.code, map: result.map, - type, + type: result.type, }; // Lazily access source code; if not needed, don't read the file. diff --git a/packages/metro/src/node-haste/Module.js b/packages/metro/src/node-haste/Module.js index 5d9b7e51..4bf2ceb0 100644 --- a/packages/metro/src/node-haste/Module.js +++ b/packages/metro/src/node-haste/Module.js @@ -27,6 +27,7 @@ type ReadResult = { +dependencies: $ReadOnlyArray, +map: Array, +source: string, + +type: string, }; export type TransformCode = ( @@ -91,6 +92,7 @@ class Module { code: result.code, dependencies: result.dependencies, map: result.map, + type: result.type, get source() { return module._readSourceCode(); },