11import assert from "assert" ;
22import fs from "fs/promises" ;
3- import http from "http" ;
4- import { AddressInfo } from "net" ;
53import path from "path" ;
64import { fileURLToPath } from "url" ;
75import test from "ava" ;
@@ -48,18 +46,8 @@ test("source maps workers", async (t) => {
4846 const serviceWorkerContent = await fs . readFile ( serviceWorkerPath , "utf8" ) ;
4947 const modulesContent = await fs . readFile ( modulesPath , "utf8" ) ;
5048
51- // The OS should assign random ports in sequential order, meaning
52- // `inspectorPort` is unlikely to be immediately chosen as a random port again
53- const server = http . createServer ( ) ;
54- const inspectorPort = await new Promise < number > ( ( resolve , reject ) => {
55- server . listen ( 0 , ( ) => {
56- const port = ( server . address ( ) as AddressInfo ) . port ;
57- server . close ( ( err ) => ( err ? reject ( err ) : resolve ( port ) ) ) ;
58- } ) ;
59- } ) ;
60-
6149 const mf = new Miniflare ( {
62- inspectorPort,
50+ inspectorPort : 0 ,
6351 workers : [
6452 {
6553 bindings : { MESSAGE : "unnamed" } ,
@@ -190,23 +178,24 @@ addEventListener("fetch", (event) => {
190178 t . regex ( String ( error ?. stack ) , nestedRegexp ) ;
191179
192180 // Check source mapping URLs rewritten
193- let sources = await getSources ( inspectorPort , "core:user:" ) ;
181+ const inspectorBaseURL = await mf . getInspectorURL ( ) ;
182+ let sources = await getSources ( inspectorBaseURL , "core:user:" ) ;
194183 t . deepEqual ( sources , [ REDUCE_PATH , SERVICE_WORKER_ENTRY_PATH ] ) ;
195- sources = await getSources ( inspectorPort , "core:user:a" ) ;
184+ sources = await getSources ( inspectorBaseURL , "core:user:a" ) ;
196185 t . deepEqual ( sources , [ REDUCE_PATH , SERVICE_WORKER_ENTRY_PATH ] ) ;
197- sources = await getSources ( inspectorPort , "core:user:b" ) ;
186+ sources = await getSources ( inspectorBaseURL , "core:user:b" ) ;
198187 t . deepEqual ( sources , [ MODULES_ENTRY_PATH , REDUCE_PATH ] ) ;
199- sources = await getSources ( inspectorPort , "core:user:c" ) ;
188+ sources = await getSources ( inspectorBaseURL , "core:user:c" ) ;
200189 t . deepEqual ( sources , [ MODULES_ENTRY_PATH , REDUCE_PATH ] ) ;
201- sources = await getSources ( inspectorPort , "core:user:d" ) ;
190+ sources = await getSources ( inspectorBaseURL , "core:user:d" ) ;
202191 t . deepEqual ( sources , [ MODULES_ENTRY_PATH , REDUCE_PATH ] ) ;
203- sources = await getSources ( inspectorPort , "core:user:e" ) ;
192+ sources = await getSources ( inspectorBaseURL , "core:user:e" ) ;
204193 t . deepEqual ( sources , [ MODULES_ENTRY_PATH , REDUCE_PATH ] ) ;
205- sources = await getSources ( inspectorPort , "core:user:f" ) ;
194+ sources = await getSources ( inspectorBaseURL , "core:user:f" ) ;
206195 t . deepEqual ( sources , [ MODULES_ENTRY_PATH , REDUCE_PATH ] ) ;
207- sources = await getSources ( inspectorPort , "core:user:g" ) ;
196+ sources = await getSources ( inspectorBaseURL , "core:user:g" ) ;
208197 t . deepEqual ( sources , [ MODULES_ENTRY_PATH , REDUCE_PATH ] ) ;
209- sources = await getSources ( inspectorPort , "core:user:h" ) ;
198+ sources = await getSources ( inspectorBaseURL , "core:user:h" ) ;
210199 t . deepEqual ( sources , [ DEP_ENTRY_PATH , REDUCE_PATH ] ) ; // (entry point script overridden)
211200
212201 // Check respects map's existing `sourceRoot`
@@ -217,7 +206,7 @@ addEventListener("fetch", (event) => {
217206 ) ;
218207 serviceWorkerMap . sourceRoot = sourceRoot ;
219208 await fs . writeFile ( serviceWorkerMapPath , JSON . stringify ( serviceWorkerMap ) ) ;
220- t . deepEqual ( await getSources ( inspectorPort , "core:user:" ) , [
209+ t . deepEqual ( await getSources ( inspectorBaseURL , "core:user:" ) , [
221210 path . resolve ( tmp , sourceRoot , path . relative ( tmp , REDUCE_PATH ) ) ,
222211 path . resolve (
223212 tmp ,
@@ -227,18 +216,18 @@ addEventListener("fetch", (event) => {
227216 ] ) ;
228217
229218 // Check does nothing with URL source mapping URLs
230- const sourceMapURL = await getSourceMapURL ( inspectorPort , "core:user:i" ) ;
219+ const sourceMapURL = await getSourceMapURL ( inspectorBaseURL , "core:user:i" ) ;
231220 t . regex ( sourceMapURL , / ^ d a t a : a p p l i c a t i o n \/ j s o n ; b a s e 6 4 / ) ;
232221} ) ;
233222
234223function getSourceMapURL (
235- inspectorPort : number ,
224+ inspectorBaseURL : URL ,
236225 serviceName : string
237226) : Promise < string > {
238227 let sourceMapURL : string | undefined ;
239228 const promise = new DeferredPromise < string > ( ) ;
240- const inspectorUrl = `ws://127.0.0.1: ${ inspectorPort } / ${ serviceName } `;
241- const ws = new NodeWebSocket ( inspectorUrl ) ;
229+ const inspectorURL = new URL ( `/ ${ serviceName } `, inspectorBaseURL ) ;
230+ const ws = new NodeWebSocket ( inspectorURL ) ;
242231 ws . on ( "message" , async ( raw ) => {
243232 try {
244233 const message = JSON . parse ( raw . toString ( "utf8" ) ) ;
@@ -264,8 +253,8 @@ function getSourceMapURL(
264253 return promise ;
265254}
266255
267- async function getSources ( inspectorPort : number , serviceName : string ) {
268- const sourceMapURL = await getSourceMapURL ( inspectorPort , serviceName ) ;
256+ async function getSources ( inspectorBaseURL : URL , serviceName : string ) {
257+ const sourceMapURL = await getSourceMapURL ( inspectorBaseURL , serviceName ) ;
269258 assert ( sourceMapURL . startsWith ( "file:" ) ) ;
270259 const sourceMapPath = fileURLToPath ( sourceMapURL ) ;
271260 const sourceMapData = await fs . readFile ( sourceMapPath , "utf8" ) ;
0 commit comments