From 814029f92dd3b2186e4708a380937b80bc775c8c Mon Sep 17 00:00:00 2001 From: Adam Foxman Date: Tue, 15 Jun 2021 11:14:46 -0700 Subject: [PATCH 1/4] Add transformOptions to each graph. Update tests. --- packages/metro/src/DeltaBundler.js | 17 +++++++- .../metro/src/DeltaBundler/DeltaCalculator.js | 12 +++++- .../__tests__/DeltaBundler-test.js | 12 +++--- packages/metro/src/DeltaBundler/types.flow.js | 12 ++++++ packages/metro/src/IncrementalBundler.js | 41 +++++++++++-------- .../metro/src/Server/__tests__/Server-test.js | 33 ++++++++++++++- packages/metro/src/lib/getGraphId.js | 2 +- packages/metro/src/lib/getPrependedScripts.js | 3 +- packages/metro/src/lib/transformHelpers.js | 12 +----- packages/metro/src/shared/types.flow.js | 6 ++- 10 files changed, 109 insertions(+), 41 deletions(-) diff --git a/packages/metro/src/DeltaBundler.js b/packages/metro/src/DeltaBundler.js index 5b520e2c61..bebfaf0fc6 100644 --- a/packages/metro/src/DeltaBundler.js +++ b/packages/metro/src/DeltaBundler.js @@ -21,6 +21,7 @@ import type { MixedOutput, Options, } from './DeltaBundler/types.flow'; +import type {TransformInputOptions} from './DeltaBundler/types.flow'; export type { DeltaResult, @@ -57,11 +58,17 @@ class DeltaBundler { async getDependencies( entryPoints: $ReadOnlyArray, + transformOptions: TransformInputOptions, options: Options, ): Promise> { const depGraph = await this._bundler.getDependencyGraph(); - const deltaCalculator = new DeltaCalculator(entryPoints, depGraph, options); + const deltaCalculator = new DeltaCalculator( + entryPoints, + depGraph, + transformOptions, + options, + ); await deltaCalculator.getDelta({reset: true, shallow: options.shallow}); const graph = deltaCalculator.getGraph(); @@ -75,11 +82,17 @@ class DeltaBundler { // To get just the dependencies, use getDependencies which will not leak graphs. async buildGraph( entryPoints: $ReadOnlyArray, + transformOptions: TransformInputOptions, options: Options, ): Promise> { const depGraph = await this._bundler.getDependencyGraph(); - const deltaCalculator = new DeltaCalculator(entryPoints, depGraph, options); + const deltaCalculator = new DeltaCalculator( + entryPoints, + depGraph, + transformOptions, + options, + ); await deltaCalculator.getDelta({reset: true, shallow: options.shallow}); const graph = deltaCalculator.getGraph(); diff --git a/packages/metro/src/DeltaBundler/DeltaCalculator.js b/packages/metro/src/DeltaBundler/DeltaCalculator.js index 9668719907..6652f7caf3 100644 --- a/packages/metro/src/DeltaBundler/DeltaCalculator.js +++ b/packages/metro/src/DeltaBundler/DeltaCalculator.js @@ -18,7 +18,12 @@ const { const {EventEmitter} = require('events'); import type DependencyGraph from '../node-haste/DependencyGraph'; -import type {DeltaResult, Graph, Options} from './types.flow'; +import type { + DeltaResult, + Graph, + Options, + TransformInputOptions, +} from './types.flow'; /** * This class is in charge of calculating the delta of changed modules that @@ -28,6 +33,7 @@ import type {DeltaResult, Graph, Options} from './types.flow'; */ class DeltaCalculator extends EventEmitter { _dependencyGraph: DependencyGraph; + _transformOptions: TransformInputOptions; _options: Options; _currentBuildPromise: ?Promise>; @@ -39,10 +45,12 @@ class DeltaCalculator extends EventEmitter { constructor( entryPoints: $ReadOnlyArray, dependencyGraph: DependencyGraph, + transformOptions: TransformInputOptions, options: Options, ) { super(); + this._transformOptions = transformOptions; this._options = options; this._dependencyGraph = dependencyGraph; @@ -50,6 +58,7 @@ class DeltaCalculator extends EventEmitter { dependencies: new Map(), entryPoints, importBundleNames: new Set(), + transformOptions: this._transformOptions, }; this._dependencyGraph @@ -72,6 +81,7 @@ class DeltaCalculator extends EventEmitter { dependencies: new Map(), entryPoints: this._graph.entryPoints, importBundleNames: new Set(), + transformOptions: this._transformOptions, }; this._modifiedFiles = new Set(); this._deletedFiles = new Set(); diff --git a/packages/metro/src/DeltaBundler/__tests__/DeltaBundler-test.js b/packages/metro/src/DeltaBundler/__tests__/DeltaBundler-test.js index a3c446e30f..983235c642 100644 --- a/packages/metro/src/DeltaBundler/__tests__/DeltaBundler-test.js +++ b/packages/metro/src/DeltaBundler/__tests__/DeltaBundler-test.js @@ -46,7 +46,9 @@ describe('DeltaBundler', () => { }); it('should create a new graph when buildGraph gets called', async () => { - expect(await deltaBundler.buildGraph({}, {shallow: false})).toEqual(graph); + expect(await deltaBundler.buildGraph({}, {}, {shallow: false})).toEqual( + graph, + ); expect(DeltaCalculator.prototype.getDelta.mock.calls[0][0]).toEqual({ reset: true, @@ -55,7 +57,7 @@ describe('DeltaBundler', () => { }); it('should get a delta when getDelta gets called', async () => { - const graph = await deltaBundler.buildGraph({}, {shallow: false}); + const graph = await deltaBundler.buildGraph({}, {}, {shallow: false}); expect(await deltaBundler.getDelta(graph, {reset: false})).toEqual({ modified: new Map(), @@ -65,7 +67,7 @@ describe('DeltaBundler', () => { }); it('should get a reset delta when calling getDelta({reset: true})', async () => { - const graph = await deltaBundler.buildGraph({}, {shallow: false}); + const graph = await deltaBundler.buildGraph({}, {}, {shallow: false}); expect(await deltaBundler.getDelta(graph, {reset: true})).toEqual({ modified: graph.dependencies, @@ -75,7 +77,7 @@ describe('DeltaBundler', () => { }); it('should throw an error when trying to get the delta of a graph that does not exist', async () => { - const graph = await deltaBundler.buildGraph({}, {shallow: false}); + const graph = await deltaBundler.buildGraph({}, {}, {shallow: false}); deltaBundler.endGraph(graph); @@ -85,7 +87,7 @@ describe('DeltaBundler', () => { }); it('should throw an error when trying to end a graph twice', async () => { - const graph = await deltaBundler.buildGraph({}, {shallow: false}); + const graph = await deltaBundler.buildGraph({}, {}, {shallow: false}); deltaBundler.endGraph(graph); diff --git a/packages/metro/src/DeltaBundler/types.flow.js b/packages/metro/src/DeltaBundler/types.flow.js index da1f7ac34f..835173c04e 100644 --- a/packages/metro/src/DeltaBundler/types.flow.js +++ b/packages/metro/src/DeltaBundler/types.flow.js @@ -10,6 +10,8 @@ 'use strict'; +import type {JsTransformOptions} from 'metro-transform-worker'; + export type MixedOutput = {| +data: mixed, +type: string, @@ -63,10 +65,20 @@ export type Module = {| export type Dependencies = Map>; +export type TransformInputOptions = $Diff< + JsTransformOptions, + { + inlinePlatform: boolean, + inlineRequires: boolean, + ... + }, +>; + export type Graph = {| dependencies: Dependencies, importBundleNames: Set, +entryPoints: $ReadOnlyArray, + transformOptions: TransformInputOptions, |}; export type TransformResult = $ReadOnly<{| diff --git a/packages/metro/src/IncrementalBundler.js b/packages/metro/src/IncrementalBundler.js index 38f043954f..eff9bd8bf4 100644 --- a/packages/metro/src/IncrementalBundler.js +++ b/packages/metro/src/IncrementalBundler.js @@ -23,11 +23,11 @@ const transformHelpers = require('./lib/transformHelpers'); import type { Options as DeltaBundlerOptions, + TransformInputOptions, Dependencies, } from './DeltaBundler/types.flow'; import type {DeltaResult, Module, Graph} from './DeltaBundler'; import type {GraphId} from './lib/getGraphId'; -import type {TransformInputOptions} from './lib/transformHelpers'; import type {ConfigT} from 'metro-config/src/configTypes.flow'; export opaque type RevisionId: string = string; @@ -109,23 +109,27 @@ class IncrementalBundler { ): Promise { const absoluteEntryFiles = await this._getAbsoluteEntryFiles(entryFiles); - const graph = await this._deltaBundler.buildGraph(absoluteEntryFiles, { - resolve: await transformHelpers.getResolveDependencyFn( - this._bundler, - transformOptions.platform, - ), - transform: await transformHelpers.getTransformFn( - absoluteEntryFiles, - this._bundler, - this._deltaBundler, - this._config, - transformOptions, - ), - onProgress: otherOptions.onProgress, - experimentalImportBundleSupport: this._config.transformer - .experimentalImportBundleSupport, - shallow: otherOptions.shallow, - }); + const graph = await this._deltaBundler.buildGraph( + absoluteEntryFiles, + transformOptions, + { + resolve: await transformHelpers.getResolveDependencyFn( + this._bundler, + transformOptions.platform, + ), + transform: await transformHelpers.getTransformFn( + absoluteEntryFiles, + this._bundler, + this._deltaBundler, + this._config, + transformOptions, + ), + onProgress: otherOptions.onProgress, + experimentalImportBundleSupport: this._config.transformer + .experimentalImportBundleSupport, + shallow: otherOptions.shallow, + }, + ); this._config.serializer.experimentalSerializerHook(graph, { added: graph.dependencies, @@ -149,6 +153,7 @@ class IncrementalBundler { const dependencies = await this._deltaBundler.getDependencies( absoluteEntryFiles, + transformOptions, { resolve: await transformHelpers.getResolveDependencyFn( this._bundler, diff --git a/packages/metro/src/Server/__tests__/Server-test.js b/packages/metro/src/Server/__tests__/Server-test.js index 1935d5dfd2..8f14594003 100644 --- a/packages/metro/src/Server/__tests__/Server-test.js +++ b/packages/metro/src/Server/__tests__/Server-test.js @@ -119,7 +119,7 @@ describe('processRequest', () => { beforeEach(() => { const currentGraphs = new Set(); DeltaBundler.prototype.buildGraph.mockImplementation( - async (entryPoints, options) => { + async (entryPoints, transformOptions, options) => { dependencies = new Map([ [ '/root/mybundle.js', @@ -187,6 +187,7 @@ describe('processRequest', () => { entryPoints: ['/root/mybundle.js'], dependencies, importBundleNames: new Set(), + transformOptions, }; currentGraphs.add(graph); @@ -609,6 +610,16 @@ describe('processRequest', () => { expect(DeltaBundler.prototype.buildGraph).toBeCalledWith( ['/root/index.js'], + { + customTransformOptions: {}, + dev: true, + hot: true, + minify: false, + platform: 'ios', + runtimeBytecodeVersion: null, + type: 'module', + unstable_transformProfile: 'default', + }, { experimentalImportBundleSupport: false, onProgress: expect.any(Function), @@ -635,6 +646,16 @@ describe('processRequest', () => { expect(DeltaBundler.prototype.buildGraph).toBeCalledWith( ['/root/index.js'], + { + customTransformOptions: {}, + dev: true, + hot: true, + minify: false, + platform: null, + runtimeBytecodeVersion: null, + type: 'module', + unstable_transformProfile: 'hermes-stable', + }, { experimentalImportBundleSupport: false, onProgress: expect.any(Function), @@ -789,6 +810,16 @@ describe('processRequest', () => { expect(DeltaBundler.prototype.buildGraph).toBeCalledWith( ['/root/foo file'], + { + customTransformOptions: {}, + dev: true, + hot: false, + minify: false, + platform: undefined, + runtimeBytecodeVersion: null, + type: 'module', + unstable_transformProfile: 'default', + }, { experimentalImportBundleSupport: false, onProgress: null, diff --git a/packages/metro/src/lib/getGraphId.js b/packages/metro/src/lib/getGraphId.js index a178e38649..21d43bb4f7 100644 --- a/packages/metro/src/lib/getGraphId.js +++ b/packages/metro/src/lib/getGraphId.js @@ -12,7 +12,7 @@ const canonicalize = require('metro-core/src/canonicalize'); -import type {TransformInputOptions} from './transformHelpers'; +import type {TransformInputOptions} from '../DeltaBundler/types.flow'; export opaque type GraphId: string = string; diff --git a/packages/metro/src/lib/getPrependedScripts.js b/packages/metro/src/lib/getPrependedScripts.js index 07a27afbc5..b227ef0ba8 100644 --- a/packages/metro/src/lib/getPrependedScripts.js +++ b/packages/metro/src/lib/getPrependedScripts.js @@ -19,7 +19,7 @@ const {compile} = require('metro-hermes-compiler'); import type Bundler from '../Bundler'; import type DeltaBundler, {Module} from '../DeltaBundler'; -import type {TransformInputOptions} from '../lib/transformHelpers'; +import type {TransformInputOptions} from '../DeltaBundler/types.flow'; import type {ConfigT} from 'metro-config/src/configTypes.flow'; async function getPrependedScripts( @@ -46,6 +46,7 @@ async function getPrependedScripts( const dependencies = await deltaBundler.getDependencies( [defaults.moduleSystem, ...polyfillModuleNames], + transformOptions, { resolve: await transformHelpers.getResolveDependencyFn( bundler, diff --git a/packages/metro/src/lib/transformHelpers.js b/packages/metro/src/lib/transformHelpers.js index e44e3e2d5b..fe5889b3b3 100644 --- a/packages/metro/src/lib/transformHelpers.js +++ b/packages/metro/src/lib/transformHelpers.js @@ -17,18 +17,10 @@ import type {TransformOptions} from '../DeltaBundler/Worker'; import type DeltaBundler, {TransformFn} from '../DeltaBundler'; import type {ConfigT} from 'metro-config/src/configTypes.flow'; import type {Type} from 'metro-transform-worker'; +import type {TransformInputOptions} from '../DeltaBundler/types.flow'; type InlineRequiresRaw = {+blockList: {[string]: true, ...}, ...} | boolean; -export type TransformInputOptions = $Diff< - TransformOptions, - { - inlinePlatform: boolean, - inlineRequires: boolean, - ... - }, ->; - type TransformOptionsWithRawInlines = {| ...TransformOptions, +inlineRequires: InlineRequiresRaw, @@ -66,7 +58,7 @@ async function calcTransformerOptions( } const getDependencies = async (path: string) => { - const dependencies = await deltaBundler.getDependencies([path], { + const dependencies = await deltaBundler.getDependencies([path], options, { resolve: await getResolveDependencyFn(bundler, options.platform), transform: await getTransformFn([path], bundler, deltaBundler, config, { ...options, diff --git a/packages/metro/src/shared/types.flow.js b/packages/metro/src/shared/types.flow.js index 8ab457817e..c08c473b03 100644 --- a/packages/metro/src/shared/types.flow.js +++ b/packages/metro/src/shared/types.flow.js @@ -10,8 +10,10 @@ 'use strict'; -import type {Options as DeltaBundlerOptions} from '../DeltaBundler/types.flow'; -import type {TransformInputOptions} from '../lib/transformHelpers'; +import type { + Options as DeltaBundlerOptions, + TransformInputOptions, +} from '../DeltaBundler/types.flow'; import type {TransformProfile} from 'metro-babel-transformer'; import type { MixedSourceMap, From 59a7023ce0be17c1c216674ca12490436a66518a Mon Sep 17 00:00:00 2001 From: Adam Foxman Date: Thu, 17 Jun 2021 09:52:41 -0700 Subject: [PATCH 2/4] Combine import statements --- packages/metro/src/DeltaBundler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/metro/src/DeltaBundler.js b/packages/metro/src/DeltaBundler.js index bebfaf0fc6..6acccc6ebb 100644 --- a/packages/metro/src/DeltaBundler.js +++ b/packages/metro/src/DeltaBundler.js @@ -20,8 +20,8 @@ import type { // eslint-disable-next-line no-unused-vars MixedOutput, Options, + TransformInputOptions, } from './DeltaBundler/types.flow'; -import type {TransformInputOptions} from './DeltaBundler/types.flow'; export type { DeltaResult, From 2b763d71ab4b307da287a81187f2bd28af967bf6 Mon Sep 17 00:00:00 2001 From: Adam Foxman Date: Fri, 18 Jun 2021 11:08:16 -0700 Subject: [PATCH 3/4] Move transformOptions into options --- packages/metro/src/DeltaBundler.js | 17 +---- .../metro/src/DeltaBundler/DeltaCalculator.js | 14 +--- .../__tests__/DeltaBundler-test.js | 12 ++-- packages/metro/src/DeltaBundler/types.flow.js | 3 +- packages/metro/src/IncrementalBundler.js | 39 ++++++----- .../metro/src/Server/__tests__/Server-test.js | 64 +++++++++---------- packages/metro/src/lib/getPrependedScripts.js | 2 +- packages/metro/src/lib/transformHelpers.js | 3 +- 8 files changed, 65 insertions(+), 89 deletions(-) diff --git a/packages/metro/src/DeltaBundler.js b/packages/metro/src/DeltaBundler.js index 6acccc6ebb..5b520e2c61 100644 --- a/packages/metro/src/DeltaBundler.js +++ b/packages/metro/src/DeltaBundler.js @@ -20,7 +20,6 @@ import type { // eslint-disable-next-line no-unused-vars MixedOutput, Options, - TransformInputOptions, } from './DeltaBundler/types.flow'; export type { @@ -58,17 +57,11 @@ class DeltaBundler { async getDependencies( entryPoints: $ReadOnlyArray, - transformOptions: TransformInputOptions, options: Options, ): Promise> { const depGraph = await this._bundler.getDependencyGraph(); - const deltaCalculator = new DeltaCalculator( - entryPoints, - depGraph, - transformOptions, - options, - ); + const deltaCalculator = new DeltaCalculator(entryPoints, depGraph, options); await deltaCalculator.getDelta({reset: true, shallow: options.shallow}); const graph = deltaCalculator.getGraph(); @@ -82,17 +75,11 @@ class DeltaBundler { // To get just the dependencies, use getDependencies which will not leak graphs. async buildGraph( entryPoints: $ReadOnlyArray, - transformOptions: TransformInputOptions, options: Options, ): Promise> { const depGraph = await this._bundler.getDependencyGraph(); - const deltaCalculator = new DeltaCalculator( - entryPoints, - depGraph, - transformOptions, - options, - ); + const deltaCalculator = new DeltaCalculator(entryPoints, depGraph, options); await deltaCalculator.getDelta({reset: true, shallow: options.shallow}); const graph = deltaCalculator.getGraph(); diff --git a/packages/metro/src/DeltaBundler/DeltaCalculator.js b/packages/metro/src/DeltaBundler/DeltaCalculator.js index 6652f7caf3..6aa0530e1a 100644 --- a/packages/metro/src/DeltaBundler/DeltaCalculator.js +++ b/packages/metro/src/DeltaBundler/DeltaCalculator.js @@ -18,12 +18,7 @@ const { const {EventEmitter} = require('events'); import type DependencyGraph from '../node-haste/DependencyGraph'; -import type { - DeltaResult, - Graph, - Options, - TransformInputOptions, -} from './types.flow'; +import type {DeltaResult, Graph, Options} from './types.flow'; /** * This class is in charge of calculating the delta of changed modules that @@ -33,7 +28,6 @@ import type { */ class DeltaCalculator extends EventEmitter { _dependencyGraph: DependencyGraph; - _transformOptions: TransformInputOptions; _options: Options; _currentBuildPromise: ?Promise>; @@ -45,12 +39,10 @@ class DeltaCalculator extends EventEmitter { constructor( entryPoints: $ReadOnlyArray, dependencyGraph: DependencyGraph, - transformOptions: TransformInputOptions, options: Options, ) { super(); - this._transformOptions = transformOptions; this._options = options; this._dependencyGraph = dependencyGraph; @@ -58,7 +50,7 @@ class DeltaCalculator extends EventEmitter { dependencies: new Map(), entryPoints, importBundleNames: new Set(), - transformOptions: this._transformOptions, + transformOptions: this._options.transformOptions, }; this._dependencyGraph @@ -81,7 +73,7 @@ class DeltaCalculator extends EventEmitter { dependencies: new Map(), entryPoints: this._graph.entryPoints, importBundleNames: new Set(), - transformOptions: this._transformOptions, + transformOptions: this._options.transformOptions, }; this._modifiedFiles = new Set(); this._deletedFiles = new Set(); diff --git a/packages/metro/src/DeltaBundler/__tests__/DeltaBundler-test.js b/packages/metro/src/DeltaBundler/__tests__/DeltaBundler-test.js index 983235c642..a3c446e30f 100644 --- a/packages/metro/src/DeltaBundler/__tests__/DeltaBundler-test.js +++ b/packages/metro/src/DeltaBundler/__tests__/DeltaBundler-test.js @@ -46,9 +46,7 @@ describe('DeltaBundler', () => { }); it('should create a new graph when buildGraph gets called', async () => { - expect(await deltaBundler.buildGraph({}, {}, {shallow: false})).toEqual( - graph, - ); + expect(await deltaBundler.buildGraph({}, {shallow: false})).toEqual(graph); expect(DeltaCalculator.prototype.getDelta.mock.calls[0][0]).toEqual({ reset: true, @@ -57,7 +55,7 @@ describe('DeltaBundler', () => { }); it('should get a delta when getDelta gets called', async () => { - const graph = await deltaBundler.buildGraph({}, {}, {shallow: false}); + const graph = await deltaBundler.buildGraph({}, {shallow: false}); expect(await deltaBundler.getDelta(graph, {reset: false})).toEqual({ modified: new Map(), @@ -67,7 +65,7 @@ describe('DeltaBundler', () => { }); it('should get a reset delta when calling getDelta({reset: true})', async () => { - const graph = await deltaBundler.buildGraph({}, {}, {shallow: false}); + const graph = await deltaBundler.buildGraph({}, {shallow: false}); expect(await deltaBundler.getDelta(graph, {reset: true})).toEqual({ modified: graph.dependencies, @@ -77,7 +75,7 @@ describe('DeltaBundler', () => { }); it('should throw an error when trying to get the delta of a graph that does not exist', async () => { - const graph = await deltaBundler.buildGraph({}, {}, {shallow: false}); + const graph = await deltaBundler.buildGraph({}, {shallow: false}); deltaBundler.endGraph(graph); @@ -87,7 +85,7 @@ describe('DeltaBundler', () => { }); it('should throw an error when trying to end a graph twice', async () => { - const graph = await deltaBundler.buildGraph({}, {}, {shallow: false}); + const graph = await deltaBundler.buildGraph({}, {shallow: false}); deltaBundler.endGraph(graph); diff --git a/packages/metro/src/DeltaBundler/types.flow.js b/packages/metro/src/DeltaBundler/types.flow.js index 835173c04e..081587dab0 100644 --- a/packages/metro/src/DeltaBundler/types.flow.js +++ b/packages/metro/src/DeltaBundler/types.flow.js @@ -78,7 +78,7 @@ export type Graph = {| dependencies: Dependencies, importBundleNames: Set, +entryPoints: $ReadOnlyArray, - transformOptions: TransformInputOptions, + +transformOptions: TransformInputOptions, |}; export type TransformResult = $ReadOnly<{| @@ -104,6 +104,7 @@ export type AllowOptionalDependencies = export type Options = {| +resolve: (from: string, to: string) => string, +transform: TransformFn, + +transformOptions: TransformInputOptions, +onProgress: ?(numProcessed: number, total: number) => mixed, +experimentalImportBundleSupport: boolean, +shallow: boolean, diff --git a/packages/metro/src/IncrementalBundler.js b/packages/metro/src/IncrementalBundler.js index eff9bd8bf4..cae361814a 100644 --- a/packages/metro/src/IncrementalBundler.js +++ b/packages/metro/src/IncrementalBundler.js @@ -109,27 +109,24 @@ class IncrementalBundler { ): Promise { const absoluteEntryFiles = await this._getAbsoluteEntryFiles(entryFiles); - const graph = await this._deltaBundler.buildGraph( - absoluteEntryFiles, + const graph = await this._deltaBundler.buildGraph(absoluteEntryFiles, { + resolve: await transformHelpers.getResolveDependencyFn( + this._bundler, + transformOptions.platform, + ), + transform: await transformHelpers.getTransformFn( + absoluteEntryFiles, + this._bundler, + this._deltaBundler, + this._config, + transformOptions, + ), transformOptions, - { - resolve: await transformHelpers.getResolveDependencyFn( - this._bundler, - transformOptions.platform, - ), - transform: await transformHelpers.getTransformFn( - absoluteEntryFiles, - this._bundler, - this._deltaBundler, - this._config, - transformOptions, - ), - onProgress: otherOptions.onProgress, - experimentalImportBundleSupport: this._config.transformer - .experimentalImportBundleSupport, - shallow: otherOptions.shallow, - }, - ); + onProgress: otherOptions.onProgress, + experimentalImportBundleSupport: this._config.transformer + .experimentalImportBundleSupport, + shallow: otherOptions.shallow, + }); this._config.serializer.experimentalSerializerHook(graph, { added: graph.dependencies, @@ -153,7 +150,6 @@ class IncrementalBundler { const dependencies = await this._deltaBundler.getDependencies( absoluteEntryFiles, - transformOptions, { resolve: await transformHelpers.getResolveDependencyFn( this._bundler, @@ -166,6 +162,7 @@ class IncrementalBundler { this._config, transformOptions, ), + transformOptions, onProgress: otherOptions.onProgress, experimentalImportBundleSupport: this._config.transformer .experimentalImportBundleSupport, diff --git a/packages/metro/src/Server/__tests__/Server-test.js b/packages/metro/src/Server/__tests__/Server-test.js index 8f14594003..55a09c23dd 100644 --- a/packages/metro/src/Server/__tests__/Server-test.js +++ b/packages/metro/src/Server/__tests__/Server-test.js @@ -119,7 +119,7 @@ describe('processRequest', () => { beforeEach(() => { const currentGraphs = new Set(); DeltaBundler.prototype.buildGraph.mockImplementation( - async (entryPoints, transformOptions, options) => { + async (entryPoints, options) => { dependencies = new Map([ [ '/root/mybundle.js', @@ -187,7 +187,7 @@ describe('processRequest', () => { entryPoints: ['/root/mybundle.js'], dependencies, importBundleNames: new Set(), - transformOptions, + transformOptions: options.transformOptions, }; currentGraphs.add(graph); @@ -610,22 +610,22 @@ describe('processRequest', () => { expect(DeltaBundler.prototype.buildGraph).toBeCalledWith( ['/root/index.js'], - { - customTransformOptions: {}, - dev: true, - hot: true, - minify: false, - platform: 'ios', - runtimeBytecodeVersion: null, - type: 'module', - unstable_transformProfile: 'default', - }, { experimentalImportBundleSupport: false, onProgress: expect.any(Function), resolve: expect.any(Function), shallow: false, transform: expect.any(Function), + transformOptions: { + customTransformOptions: {}, + dev: true, + hot: true, + minify: false, + platform: 'ios', + runtimeBytecodeVersion: null, + type: 'module', + unstable_transformProfile: 'default', + }, }, ); }); @@ -646,22 +646,22 @@ describe('processRequest', () => { expect(DeltaBundler.prototype.buildGraph).toBeCalledWith( ['/root/index.js'], - { - customTransformOptions: {}, - dev: true, - hot: true, - minify: false, - platform: null, - runtimeBytecodeVersion: null, - type: 'module', - unstable_transformProfile: 'hermes-stable', - }, { experimentalImportBundleSupport: false, onProgress: expect.any(Function), resolve: expect.any(Function), shallow: false, transform: expect.any(Function), + transformOptions: { + customTransformOptions: {}, + dev: true, + hot: true, + minify: false, + platform: null, + runtimeBytecodeVersion: null, + type: 'module', + unstable_transformProfile: 'hermes-stable', + }, }, ); }); @@ -810,22 +810,22 @@ describe('processRequest', () => { expect(DeltaBundler.prototype.buildGraph).toBeCalledWith( ['/root/foo file'], - { - customTransformOptions: {}, - dev: true, - hot: false, - minify: false, - platform: undefined, - runtimeBytecodeVersion: null, - type: 'module', - unstable_transformProfile: 'default', - }, { experimentalImportBundleSupport: false, onProgress: null, resolve: expect.any(Function), shallow: false, transform: expect.any(Function), + transformOptions: { + customTransformOptions: {}, + dev: true, + hot: false, + minify: false, + platform: undefined, + runtimeBytecodeVersion: null, + type: 'module', + unstable_transformProfile: 'default', + }, }, ); }); diff --git a/packages/metro/src/lib/getPrependedScripts.js b/packages/metro/src/lib/getPrependedScripts.js index b227ef0ba8..1af3034a5c 100644 --- a/packages/metro/src/lib/getPrependedScripts.js +++ b/packages/metro/src/lib/getPrependedScripts.js @@ -46,7 +46,6 @@ async function getPrependedScripts( const dependencies = await deltaBundler.getDependencies( [defaults.moduleSystem, ...polyfillModuleNames], - transformOptions, { resolve: await transformHelpers.getResolveDependencyFn( bundler, @@ -59,6 +58,7 @@ async function getPrependedScripts( config, transformOptions, ), + transformOptions, onProgress: null, experimentalImportBundleSupport: config.transformer.experimentalImportBundleSupport, diff --git a/packages/metro/src/lib/transformHelpers.js b/packages/metro/src/lib/transformHelpers.js index fe5889b3b3..f9dab5cdee 100644 --- a/packages/metro/src/lib/transformHelpers.js +++ b/packages/metro/src/lib/transformHelpers.js @@ -58,12 +58,13 @@ async function calcTransformerOptions( } const getDependencies = async (path: string) => { - const dependencies = await deltaBundler.getDependencies([path], options, { + const dependencies = await deltaBundler.getDependencies([path], { resolve: await getResolveDependencyFn(bundler, options.platform), transform: await getTransformFn([path], bundler, deltaBundler, config, { ...options, minify: false, }), + transformOptions: options, onProgress: null, experimentalImportBundleSupport: config.transformer.experimentalImportBundleSupport, From 83d58f9ed88a6ec2867d4cc351b900d059685a80 Mon Sep 17 00:00:00 2001 From: Adam Foxman Date: Wed, 23 Jun 2021 10:23:23 -0700 Subject: [PATCH 4/4] Update packages/metro/src/DeltaBundler/types.flow.js Co-authored-by: Moti Zilberman --- packages/metro/src/DeltaBundler/types.flow.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/metro/src/DeltaBundler/types.flow.js b/packages/metro/src/DeltaBundler/types.flow.js index 081587dab0..bd19341cc9 100644 --- a/packages/metro/src/DeltaBundler/types.flow.js +++ b/packages/metro/src/DeltaBundler/types.flow.js @@ -78,6 +78,7 @@ export type Graph = {| dependencies: Dependencies, importBundleNames: Set, +entryPoints: $ReadOnlyArray, + // Unused in core but useful for custom serializers / experimentalSerializerHook +transformOptions: TransformInputOptions, |};