@@ -340,10 +340,13 @@ extension PackageToJS.TestOptions {
340
340
let prelude = extractor. extractOption ( named: " prelude " ) . last
341
341
let environment = extractor. extractOption ( named: " environment " ) . last
342
342
let inspect = extractor. extractFlag ( named: " inspect " )
343
+ let extraNodeArguments = extractor. extractSingleDashOption ( named: " Xnode " )
343
344
let packageOptions = PackageToJS . PackageOptions. parse ( from: & extractor)
344
345
var options = PackageToJS . TestOptions (
345
346
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
347
350
)
348
351
349
352
if !options. buildOnly, !options. packageOptions. useCDN {
@@ -379,6 +382,39 @@ extension PackageToJS.TestOptions {
379
382
380
383
// MARK: - PackagePlugin helpers
381
384
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
+
382
418
/// Derive default product from the package
383
419
/// - Returns: The name of the product to build
384
420
/// - Throws: `PackageToJSError` if there's no executable product or if there's more than one
0 commit comments