function make(useopts) {
  // Default options, overidden by caller supplied options.
  useopts = Object.assign(
    {
      prefix: 'plugin-',
      builtin: '../plugin/',
      module: module.parent,
      errmsgprefix: true,
      system_modules: intern.make_system_modules(),
      merge_defaults: true,
    },
    useopts
  )

  // Setup error messages, see msgmap function below for text.
  var eraro = Eraro({
    package: 'use-plugin',
    msgmap: msgmap(),
    module: module,
    prefix: useopts.errmsgprefix,
  })

  // This is the function that loads plugins.
  // It is returned for use by the framework calling code.
  // Parameters:
  //
  //   * _plugin_ : (Object or Function or String); plugin definition
  //      * if Object: provide a partial or complete definition with same properties as return value
  //      * if Function: assumed to be plugin _init_ function; plugin name taken from function name, if defined
  //      * if String: base for _require_ search; assumes module defines an _init_ function
  //   * _options_ : (Object, ...); plugin options, if not an object, constructs an object of form {value$:options}
  //   * _callback_ : (Function); callback function, possibly to be called by framework after init function completes
  //
  // Returns: A plugin description object is returned, with properties:
  //
  //   * _name_ : String; the plugin name, either supplied by calling code, or derived from definition
  //   * _init_  : Function; the plugin init function, the resolution of which is the point of this module!
  //   * _options_ : Object; plugin options, if supplied
  //   * _search_ : Array[{type,name}]; list of require search paths; applied to each module up the parent chain until something is found
  //   * _found_ : Object{type,name}; search entry that found something
  //   * _requirepath_ : String; the argument to require that found something
  //   * _modulepath_ : String; the Node.js API module.id whose require found something
  //   * _tag_ : String; the tag value of the plugin name (format: name$tag), if any, allows loading of same plugin multiple times
  //   * _err_ : Error; plugin load error, if any
  function use() {
    var args = Norma('{plugin:o|f|s, options:o|s|n|b?, callback:f?}', arguments)
    return use_plugin_desc(
      build_plugin_desc(args, useopts, eraro),
      useopts,
      eraro
    )
  }

  use.Optioner = Optioner
  use.Joi = Optioner.Joi

  use.use_plugin_desc = function (plugin_desc) {
    return use_plugin_desc(plugin_desc, useopts, eraro)
  }

  use.build_plugin_desc = function () {
    var args = Norma('{plugin:o|f|s, options:o|s|n|b?, callback:f?}', arguments)
    return build_plugin_desc(args, useopts, eraro)
  }

  return use
}
//      * _errmsgprefix_ : (optional, default: true) String or Boolean; error message prefix for [eraro](http://github.com/rjrodger/eraro) module, used by this module to generate error messages
_errmsgprefix_ : (optional, default: true) String or Boolean; error message prefix for [eraro] module, used by this module to generate error messages
_errmsgprefix_ : ( optional default : true ) String or Boolean ; error message prefix for [ eraro ] module used by this module to generate error messages
function make(useopts) {
  useopts = Object.assign(
    {
      prefix: 'plugin-',
      builtin: '../plugin/',
      module: module.parent,
      errmsgprefix: true,
      system_modules: intern.make_system_modules(),
      merge_defaults: true,
    },
    useopts
  )
  var eraro = Eraro({
    package: 'use-plugin',
    msgmap: msgmap(),
    module: module,
    prefix: useopts.errmsgprefix,
  })
     * _plugin_ : (Object or Function or String); plugin definition
        * if Object: provide a partial or complete definition with same properties as return value
        * if Function: assumed to be plugin _init_ function; plugin name taken from function name, if defined
        * if String: base for _require_ search; assumes module defines an _init_ function
     * _options_ : (Object, ...); plugin options, if not an object, constructs an object of form {value$:options}
     * _callback_ : (Function); callback function, possibly to be called by framework after init function completes
   Returns: A plugin description object is returned, with properties:
     * _name_ : String; the plugin name, either supplied by calling code, or derived from definition
     * _init_  : Function; the plugin init function, the resolution of which is the point of this module!
     * _options_ : Object; plugin options, if supplied
     * _search_ : Array[{type,name}]; list of require search paths; applied to each module up the parent chain until something is found
     * _found_ : Object{type,name}; search entry that found something
     * _requirepath_ : String; the argument to require that found something
     * _modulepath_ : String; the Node.js API module.id whose require found something
     * _tag_ : String; the tag value of the plugin name (format: name$tag), if any, allows loading of same plugin multiple times
     * _err_ : Error; plugin load error, if any
  function use() {
    var args = Norma('{plugin:o|f|s, options:o|s|n|b?, callback:f?}', arguments)
    return use_plugin_desc(
      build_plugin_desc(args, useopts, eraro),
      useopts,
      eraro
    )
  }
  use.Optioner = Optioner
  use.Joi = Optioner.Joi
  use.use_plugin_desc = function (plugin_desc) {
    return use_plugin_desc(plugin_desc, useopts, eraro)
  }
  use.build_plugin_desc = function () {
    var args = Norma('{plugin:o|f|s, options:o|s|n|b?, callback:f?}', arguments)
    return build_plugin_desc(args, useopts, eraro)
  }
  return use
}
function make ( useopts ) { useopts = Object . assign ( { prefix : 'plugin-' , builtin : '../plugin/' , module : module . parent , errmsgprefix : true , system_modules : intern . make_system_modules ( ) , merge_defaults : true , } , useopts ) var eraro = Eraro ( { package : 'use-plugin' , msgmap : msgmap ( ) , module : module , prefix : useopts . errmsgprefix , } ) function use ( ) { var args = Norma ( '{plugin:o|f|s, options:o|s|n|b?, callback:f?}' , arguments ) return use_plugin_desc ( build_plugin_desc ( args , useopts , eraro ) , useopts , eraro ) } use . Optioner = Optioner use . Joi = Optioner . Joi use . use_plugin_desc = function ( plugin_desc ) { return use_plugin_desc ( plugin_desc , useopts , eraro ) } use . build_plugin_desc = function ( ) { var args = Norma ( '{plugin:o|f|s, options:o|s|n|b?, callback:f?}' , arguments ) return build_plugin_desc ( args , useopts , eraro ) } return use }
_errmsgprefix_ : (optional, default: true) String or Boolean; error message prefix for [eraro](http://github.com/rjrodger/eraro) module, used by this module to generate error messages
_errmsgprefix_ : ( optional default : true ) String or Boolean ; error message prefix for [ eraro ] ( http : // github . com / rjrodger / eraro ) module used by this module to generate error messages
// Default options, overidden by caller supplied options. // Setup error messages, see msgmap function below for text. // This is the function that loads plugins. // It is returned for use by the framework calling code. // Parameters: // //   * _plugin_ : (Object or Function or String); plugin definition //      * if Object: provide a partial or complete definition with same properties as return value //      * if Function: assumed to be plugin _init_ function; plugin name taken from function name, if defined //      * if String: base for _require_ search; assumes module defines an _init_ function //   * _options_ : (Object, ...); plugin options, if not an object, constructs an object of form {value$:options} //   * _callback_ : (Function); callback function, possibly to be called by framework after init function completes // // Returns: A plugin description object is returned, with properties: // //   * _name_ : String; the plugin name, either supplied by calling code, or derived from definition //   * _init_  : Function; the plugin init function, the resolution of which is the point of this module! //   * _options_ : Object; plugin options, if supplied //   * _search_ : Array[{type,name}]; list of require search paths; applied to each module up the parent chain until something is found //   * _found_ : Object{type,name}; search entry that found something //   * _requirepath_ : String; the argument to require that found something //   * _modulepath_ : String; the Node.js API module.id whose require found something //   * _tag_ : String; the tag value of the plugin name (format: name$tag), if any, allows loading of same plugin multiple times //   * _err_ : Error; plugin load error, if any