code: async function(request, modules_root, options){
          /*
              extract request details for this request
          */
          var request_details = await this.utils.promise_to_decompose_request(
              request, // a relative path, absolute path, or module name
              modules_root, // defines where to look for modules
              options.relative_path_root, // defines where the relative path should start from
              options.search_for_dependencies // modules can define to not search for dependencies on their own, overriding the user
          );
  
          /*
              load dependencies into cache before loading the main file
                  - recursive operation
          */
          if(request_details.search_for_dependencies){
              // this is the main (and most obvious) downside to synchronous_require; waiting until all dependencies load.
              var dependency_relative_path_root = request_details.path.substring(0, request_details.path.lastIndexOf("/")) + "/";
              await this.promise_dependencies_are_loaded(request_details.dependencies, dependency_relative_path_root, request_details.search_for_dependencies); // wait untill dependencies are loaded
          }
  
          /*
              retreive content with loader functions
                  - handles scoping and env setup of js files (retreives content based on CommonJS exports)
                  - supports js, css, html, json, txt, etc
          */
          var content = await this.utils.loader_functions[request_details.type](request_details.path);
  
          /*
              resolve with content
          */
          return content;
      }
docs: /*
  the bread and butter
  - parse the request, load the file, resolve the content