<NME> index.js
<BEF> const { serenity } = require('@serenity-js/core');
const { Path } = require('@serenity-js/core/lib/io');
const {
    ProtractorFrameworkAdapter,
    TestRunnerDetector,
    TestRunnerLoader
} = require('@serenity-js/protractor/lib/adapter');

/**
 * Execute the Runner's test cases through Cucumber.
 *
 * @param {Runner} runner The current Protractor Runner.
 * @param {string[]} specs Array of Directory Path Strings.
 * @return {Promise<void>>} Promise resolved with the test results
 */
exports.run = function (runner, specs) {
    return new ProtractorFrameworkAdapter(
        serenity,
        runner,
        new TestRunnerDetector(new TestRunnerLoader(
            testModeOrDefaultCwd(runner.getConfig().configDir),
            process.pid
        ))
    ).run(specs);
}

function testModeOrDefaultCwd(defaulValue) {
    if (! process.env.MULTIDEP_CUCUMBER_CONF) {
        return Path.from(defaulValue);
    }

    // protractor-framework-adapter running in self-test mode
    const cucumberConf = JSON.parse(process.env.MULTIDEP_CUCUMBER_CONF);
    return Path.from(
        __dirname,
        }).reduce(function(opts, globPaths) {
          // Combine paths into flattened array
          return opts.concat(globPaths);
        }).map(function(requirePath) {
          // Resolve require absolute path
          return path.resolve(configDir, requirePath)
        });

<MSG> Handle default when no require paths are passed

<DFF> @@ -36,7 +36,7 @@ exports.run = function(runner, specs) {
         }).reduce(function(opts, globPaths) {
           // Combine paths into flattened array
           return opts.concat(globPaths);
-        }).map(function(requirePath) {
+        }, []).map(function(requirePath) {
           // Resolve require absolute path
           return path.resolve(configDir, requirePath)
         });

Handle default when no require paths are passed