src/basis.js
function processConfig(config){
    // make a copy of config
    config = slice(config);

    // extend by default settings
    complete(config, {
      implicitExt: NODE_ENV ? true : false  // true, false, 'warn'
    });

    // warn about extProto in basis-config, this option was removed in 1.3.0
    /** @cut */ if ('extProto' in config)
    /** @cut */   consoleMethods.warn('basis-config: `extProto` option in basis-config is not support anymore');

    // warn about path in basis-config, this option was deprecated in 1.3.0
    /** @cut */ if ('path' in config)
    /** @cut */   consoleMethods.warn('basis-config: `path` option in basis-config is deprecated, use `modules` instead');

    // build modules list
    var autoload = [];
    var modules = merge(config.path, config.modules, {
      basis: basisFilename
    });

    // reset modules
    config.modules = {};

    // process autoload
    if (config.autoload)
    {
      // [path/to/][name][.rest.ext] -> {
      //   name: name,
      //   filename: path + name + rest
      // }

      var m = String(config.autoload).match(/^((?:[^\/]*\/)*)([a-z$_][a-z0-9$_]*)((?:\.[a-z$_][a-z0-9$_]*)*)$/i);
      if (m)
      {
        modules[m[2]] = {
          autoload: true,
          filename: m[1] + m[2] + (m[3] || '.js')
        };
      }
      else
      {
        /** @cut */ consoleMethods.warn('basis-config: wrong `autoload` value (setting ignored): ' + config.autoload);
      }

      delete config.autoload;
    }

    // process modules
    for (var name in modules)
    {
      // name: {
      //   autoload: boolean,
      //   path: 'path/to',
      //   filename: 'module.js'
      // }
      //
      // or
      //
      // name: 'filename'

      var module = modules[name];

      // if value is string, convert to config
      if (typeof module == 'string')
        // value is filename
        module = {
          // if path ends with `/` add `[name].js` to the end
          filename: module.replace(/\/$/, '/' + name + '.js')
        };

      // get and resolve path and filename
      var filename = module.filename;
      var path = module.path;

      // if no path but filename
      // let filename equals to 'path/to/file[.ext]', then
      //   path = 'path/to/file'
      //   filename = '../file[.ext]'
      if (filename && !path)
      {
        filename = pathUtils.resolve(filename);
        path = filename.substr(0, filename.length - pathUtils.extname(filename).length);
        filename = '../' + pathUtils.basename(filename);
      }

      // path should be absolute
      // at this point path is defined in any case
      path = pathUtils.resolve(path);

      // if no filename but path
      // let path equals to 'path/to/file[.ext]', then
      //   path = 'path/to'
      //   filename = 'file[.ext]'
      if (!filename && path)
      {
        filename = pathUtils.basename(path);
        path = pathUtils.dirname(path);
      }

      // if filename has no extension, adds `.js`
      if (!pathUtils.extname(filename))
        filename += '.js';

      // resolve filename
      filename = pathUtils.resolve(path, filename);

      // store results
      config.modules[name] = {
        path: path,
        filename: filename
      };

      // store autoload modules
      if (module.autoload)
      {
        config.autoload = autoload;
        autoload.push(name);
      }
    }

    return config;
  }
function processConfig(config){
    // make a copy of config
    config = slice(config);

    // extend by default settings
    complete(config, {
      implicitExt: NODE_ENV ? true : false  // true, false, 'warn'
    });

    // warn about extProto in basis-config, this option was removed in 1.3.0
    /** @cut */ if ('extProto' in config)
    /** @cut */   consoleMethods.warn('basis-config: `extProto` option in basis-config is not support anymore');

    // warn about path in basis-config, this option was deprecated in 1.3.0
    /** @cut */ if ('path' in config)
    /** @cut */   consoleMethods.warn('basis-config: `path` option in basis-config is deprecated, use `modules` instead');

    // build modules list
    var autoload = [];
    var modules = merge(config.path, config.modules, {
      basis: basisFilename
    });

    // reset modules
    config.modules = {};

    // process autoload
    if (config.autoload)
    {
      // [path/to/][name][.rest.ext] -> {
      //   name: name,
      //   filename: path + name + rest
      // }

      var m = String(config.autoload).match(/^((?:[^\/]*\/)*)([a-z$_][a-z0-9$_]*)((?:\.[a-z$_][a-z0-9$_]*)*)$/i);
      if (m)
      {
        modules[m[2]] = {
          autoload: true,
          filename: m[1] + m[2] + (m[3] || '.js')
        };
      }
      else
      {
        /** @cut */ consoleMethods.warn('basis-config: wrong `autoload` value (setting ignored): ' + config.autoload);
      }

      delete config.autoload;
    }

    // process modules
    for (var name in modules)
    {
      // name: {
      //   autoload: boolean,
      //   path: 'path/to',
      //   filename: 'module.js'
      // }
      //
      // or
      //
      // name: 'filename'

      var module = modules[name];

      // if value is string, convert to config
      if (typeof module == 'string')
        // value is filename
        module = {
          // if path ends with `/` add `[name].js` to the end
          filename: module.replace(/\/$/, '/' + name + '.js')
        };

      // get and resolve path and filename
      var filename = module.filename;
      var path = module.path;

      // if no path but filename
      // let filename equals to 'path/to/file[.ext]', then
      //   path = 'path/to/file'
      //   filename = '../file[.ext]'
      if (filename && !path)
      {
        filename = pathUtils.resolve(filename);
        path = filename.substr(0, filename.length - pathUtils.extname(filename).length);
        filename = '../' + pathUtils.basename(filename);
      }

      // path should be absolute
      // at this point path is defined in any case
      path = pathUtils.resolve(path);

      // if no filename but path
      // let path equals to 'path/to/file[.ext]', then
      //   path = 'path/to'
      //   filename = 'file[.ext]'
      if (!filename && path)
      {
        filename = pathUtils.basename(path);
        path = pathUtils.dirname(path);
      }

      // if filename has no extension, adds `.js`
      if (!pathUtils.extname(filename))
        filename += '.js';

      // resolve filename
      filename = pathUtils.resolve(path, filename);

      // store results
      config.modules[name] = {
        path: path,
        filename: filename
      };

      // store autoload modules
      if (module.autoload)
      {
        config.autoload = autoload;
        autoload.push(name);
      }
    }

    return config;
  }
function processConfig ( config ) { // make a copy of config config = slice ( config ) ; // extend by default settings complete ( config , { implicitExt : NODE_ENV ? true : false // true, false, 'warn' } ) ; // warn about extProto in basis-config, this option was removed in 1.3.0 /** @cut */ if ( 'extProto' in config ) /** @cut */ consoleMethods . warn ( 'basis-config: `extProto` option in basis-config is not support anymore' ) ; // warn about path in basis-config, this option was deprecated in 1.3.0 /** @cut */ if ( 'path' in config ) /** @cut */ consoleMethods . warn ( 'basis-config: `path` option in basis-config is deprecated, use `modules` instead' ) ; // build modules list var autoload = [ ] ; var modules = merge ( config . path , config . modules , { basis : basisFilename } ) ; // reset modules config . modules = { } ; // process autoload if ( config . autoload ) { // [path/to/][name][.rest.ext] -> { //   name: name, //   filename: path + name + rest // } var m = String ( config . autoload ) . match ( / ^((?:[^\/]*\/)*)([a-z$_][a-z0-9$_]*)((?:\.[a-z$_][a-z0-9$_]*)*)$ / i ) ; if ( m ) { modules [ m [ 2 ] ] = { autoload : true , filename : m [ 1 ] + m [ 2 ] + ( m [ 3 ] || '.js' ) } ; } else { /** @cut */ consoleMethods . warn ( 'basis-config: wrong `autoload` value (setting ignored): ' + config . autoload ) ; } delete config . autoload ; } // process modules for ( var name in modules ) { // name: { //   autoload: boolean, //   path: 'path/to', //   filename: 'module.js' // } // // or // // name: 'filename' var module = modules [ name ] ; // if value is string, convert to config if ( typeof module == 'string' ) // value is filename module = { // if path ends with `/` add `[name].js` to the end filename : module . replace ( / \/$ / , '/' + name + '.js' ) } ; // get and resolve path and filename var filename = module . filename ; var path = module . path ; // if no path but filename // let filename equals to 'path/to/file[.ext]', then //   path = 'path/to/file' //   filename = '../file[.ext]' if ( filename && ! path ) { filename = pathUtils . resolve ( filename ) ; path = filename . substr ( 0 , filename . length - pathUtils . extname ( filename ) . length ) ; filename = '../' + pathUtils . basename ( filename ) ; } // path should be absolute // at this point path is defined in any case path = pathUtils . resolve ( path ) ; // if no filename but path // let path equals to 'path/to/file[.ext]', then //   path = 'path/to' //   filename = 'file[.ext]' if ( ! filename && path ) { filename = pathUtils . basename ( path ) ; path = pathUtils . dirname ( path ) ; } // if filename has no extension, adds `.js` if ( ! pathUtils . extname ( filename ) ) filename += '.js' ; // resolve filename filename = pathUtils . resolve ( path , filename ) ; // store results config . modules [ name ] = { path : path , filename : filename } ; // store autoload modules if ( module . autoload ) { config . autoload = autoload ; autoload . push ( name ) ; } } return config ; }
Process config object and returns adopted config.

Special options:
- autoload: namespace that must be loaded right after core loaded
- path: dictionary of paths for root namespaces
- modules: dictionary of modules with options

Other options copy into basis.config as is.
Process config object and returns adopted config .