@@ -340,10 +340,13 @@ extension PackageToJS.TestOptions {
340340 let prelude = extractor. extractOption ( named: " prelude " ) . last
341341 let environment = extractor. extractOption ( named: " environment " ) . last
342342 let inspect = extractor. extractFlag ( named: " inspect " )
343+ let extraNodeArguments = extractor. extractSingleDashOption ( named: " Xnode " )
343344 let packageOptions = PackageToJS . PackageOptions. parse ( from: & extractor)
344345 var options = PackageToJS . TestOptions (
345346 buildOnly: buildOnly != 0 , listTests: listTests != 0 ,
346- filter: filter, prelude: prelude, environment: environment, inspect: inspect != 0 , packageOptions: packageOptions
347+ filter: filter, prelude: prelude, environment: environment, inspect: inspect != 0 ,
348+ extraNodeArguments: extraNodeArguments,
349+ packageOptions: packageOptions
347350 )
348351
349352 if !options. buildOnly, !options. packageOptions. useCDN {
@@ -379,6 +382,39 @@ extension PackageToJS.TestOptions {
379382
380383// MARK: - PackagePlugin helpers
381384
385+ extension ArgumentExtractor {
386+ fileprivate mutating func extractSingleDashOption( named name: String ) -> [ String ] {
387+ let parts = remainingArguments. split ( separator: " -- " , maxSplits: 1 , omittingEmptySubsequences: false )
388+ var args = Array ( parts [ 0 ] )
389+ let literals = Array ( parts. count == 2 ? parts [ 1 ] : [ ] )
390+
391+ var values : [ String ] = [ ]
392+ var idx = 0
393+ while idx < args. count {
394+ var arg = args [ idx]
395+ if arg == " - \( name) " {
396+ args. remove ( at: idx)
397+ if idx < args. count {
398+ let val = args [ idx]
399+ values. append ( val)
400+ args. remove ( at: idx)
401+ }
402+ }
403+ else if arg. starts ( with: " - \( name) = " ) {
404+ args. remove ( at: idx)
405+ arg. removeFirst ( 2 + name. count)
406+ values. append ( arg)
407+ }
408+ else {
409+ idx += 1
410+ }
411+ }
412+
413+ self = ArgumentExtractor ( args + literals)
414+ return values
415+ }
416+ }
417+
382418/// Derive default product from the package
383419/// - Returns: The name of the product to build
384420/// - Throws: `PackageToJSError` if there's no executable product or if there's more than one
0 commit comments