diff --git a/packages/metro/src/Server.js b/packages/metro/src/Server.js index 37d457628a..43ed021536 100644 --- a/packages/metro/src/Server.js +++ b/packages/metro/src/Server.js @@ -449,7 +449,7 @@ export default class Server { processModuleFilter: this._config.serializer.processModuleFilter, assetPlugins: this._config.transformer.assetPlugins, platform, - projectRoot: this._getServerRootDir(), + projectRoot: this._config.projectRoot, publicPath: this._config.transformer.publicPath, }); } @@ -1369,13 +1369,10 @@ export default class Server { {onProgress, shallow: false, lazy: false}, ); - return await getAssets(dependencies, { - processModuleFilter: this._config.serializer.processModuleFilter, - assetPlugins: this._config.transformer.assetPlugins, - platform: transformOptions.platform, - publicPath: this._config.transformer.publicPath, - projectRoot: this._config.projectRoot, - }); + return await this._getAssetsFromDependencies( + dependencies, + transformOptions.platform, + ); }, finish({mres, result}) { mres.setHeader('Content-Type', 'application/json'); diff --git a/packages/metro/src/Server/__tests__/Server-test.js b/packages/metro/src/Server/__tests__/Server-test.js index 8d81454fa1..61c8a844fb 100644 --- a/packages/metro/src/Server/__tests__/Server-test.js +++ b/packages/metro/src/Server/__tests__/Server-test.js @@ -63,6 +63,7 @@ describe('processRequest', () => { let getTransformFn; let getResolveDependencyFn; let getAsset; + let getAssetsSerializer; beforeEach(() => { jest.resetModules(); @@ -76,6 +77,7 @@ describe('processRequest', () => { getTransformFn = jest.fn(); getResolveDependencyFn = jest.fn(); getAsset = jest.fn(); + getAssetsSerializer = jest.fn().mockResolvedValue([]); let i = 0; jest.doMock('node:crypto', () => ({ @@ -114,6 +116,11 @@ describe('processRequest', () => { .mockImplementation(buildGraph); jest.spyOn(DeltaBundler.prototype, 'getDelta').mockImplementation(getDelta); + jest.doMock('../../DeltaBundler/Serializers/getAssets', () => ({ + __esModule: true, + default: getAssetsSerializer, + })); + Server = require('../../Server').default; }); @@ -1521,6 +1528,24 @@ describe('processRequest', () => { ); }); + describe('asset URL roots', () => { + test('anchors asset URLs on projectRoot, not unstable_serverRoot', async () => { + // $FlowFixMe[unclear-type] - reaching for a private method under test. + const serverRootServer: any = new Server( + mergeConfig(config, { + server: {unstable_serverRoot: '/'}, + } as InputConfigT), + ); + + await serverRootServer._getAssetsFromDependencies(new Map(), 'ios'); + + expect(getAssetsSerializer).toBeCalledWith( + expect.anything(), + expect.objectContaining({projectRoot: '/root'}), + ); + }); + }); + describe('watchFolder prefix resolution', () => { let watchFolderServer: $FlowFixMe;