code: function loadService(info, key, service) {
  
      const item = parseService(info, key, service);
  
      const target = loader.app.serviceClasses;
  
      // item { properties: [ 'a', 'b', 'c'], exports }
      // => target.a.b.c = exports
      item.properties.reduce((target, property, index) => {
        let obj;
        const properties = item.properties.slice(0, index + 1).join('.');
        if (index === item.properties.length - 1) {
          if (property in target) {
            if (!loader.options.override) throw new Error(`can't overwrite property '${properties}' from ${target[property][loader.FileLoader.FULLPATH]} by ${item.pathName}`);
          }
          obj = item.exports;
          if (obj && !is.primitive(obj)) {
            obj[loader.FileLoader.FULLPATH] = item.pathName;
            obj[loader.FileLoader.EXPORTS] = true;
          }
        } else {
          obj = target[property] || {};
        }
        target[property] = obj;
        return obj;
      }, target);
  
      return item;
    }
docs: eslint-disable-next-line