How to pass this to require() in NodeJS?

What's the best way to pass thisArg to a require()d module?

I want to do something like this:

index.js

function Main(arg) {
    return {
        auth: auth,
        module: require('/some/module')
    }
}

module.js

module.exports = {
    someMethod: function() {...}
}

Then, in my code somewhere I call Main(), which returns the object. So Main().auth exists, cool. But how do I access it from Main().module? The thisArg in Main().module.someMethod() points to the module itself.. but I need the parent.

Is there any way to do this without using new keyword, functions and prototypes?

EDIT:

Thanks for all the answers guys! Some additional info:

Main() is the module what I wanna require() and use in my app. The "module" Main tries to import is actually just sub functionality of Main, it's just a part of code which I moved to a separate "module" to better organize the code.

So a better example would be:

function RestApi(param) {
    return {
        common_param: param,
        commonFunc: function() {...}
        endpoint1: require('/some/module'),
        endpoint2: require('/some/module2'),
        endpoint3: require('/some/module3')
    }
}

And my app would use it like this:

RestApi = require('./RestApi')
RestApi().endpoint1.someHTTPCall(...)

But inside someHTTPCall(), both "common_param" and "commonFunc" should be accessible via thisArg, like this.commonFunc().

So this is kinda a general question, how do you merge multiple modules using require() properly, so "this" would point to the right object (i.e.: the parent)

I know this could be achieved using Function.prototype and inheritance, just would like to know if there is a simpler way.

The best I found so far is something like this:

var _ = require('lodash');

function Module(auth) {
    this.auth = auth || {};
}

Module.prototype = {
    endpoint1: function() { return _.extend(require('./endpoint1'),{auth: this.auth, commonFunc: commonFunc})}
}

function commonFunc() {...}

However, this is not ideal, since RestApi.endpoint1() would create a new the object on every call.

Is there a better way to handle this?

Thanks in advance!

You could change the module to return a function, like this:

// some/module.js
module.exports = function(mainModule) {
  var main = mainModule;

  return {
    someMethod: function() {
      main.doSomethingElse();
    }
  }
}

Then require it passing the main object:

function Main(arg) {
  var main = {
    auth: auth,
    other: stuff,
  };

  main.module = require('/some/module')(main);

  return main;
}

Create own "require" module with auth param and allways use it.

project/module/require2.js

module.exports = function(path, auth){
    if (!check(auth))
        return null
    return require(path)
}