code: function App(opts) {
      opts = opts || {};
  
      var path = opts.path || PATH.dirname(require.main.filename);
  
      // provides ym define&require interface
      var ym = YM.create();
  
      /**
       * @api
       * @param {string} moduleName
       * @param {string[]} [dependencies]
       * @param {function(function(*, ?Error=), ...*)} declarationFunction
       */
      this.define = ym.define;
  
      /**
       * @api
       * @param {string[]} dependencies
       * @param {function(Array<*>)} successCallbackFunction
       * @param {function(Error)} [errorCallbackFunction]
       */
      this.require = ym.require;
  
      /**
       * Loads node package with module provisions
       * @api
       * @param {(string|string[]|Object|Function)} pkg - package name, or list of,
       *   or package object, or package function
       * @returns {PYM} this
       */
      this.usePackage = function usePackage(pkg, options) {
          options = options || {};
  
          var resolvedPackage = _resolvePackageSync(path, pkg);
          resolvedPackage.exports(this, options);
  
          return this;
      };
  
      // load required modules if passed
      if (opts.uses) {
          if (Array.isArray(opts.uses)) {
              opts.uses.forEach(function (plugin) {
                  this.usePackage(plugin);
              }, this);
          } else if (typeof opts.uses === 'object') {
              Object.keys(opts.uses).forEach(function (key) {
                  this.usePackage(key, opts.uses[key]);
              }, this);
          } else {
              throw new Error('Unsupported value in uses property');
          }
      }
  }
docs: App constructor
  @class
  @param {Object} opts
  @param {string} opts.path