⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 package-info.js

📁 原名JSPackager
💻 JS
字号:
function PackageInfo(name,pkg){
  PackageInfo.packageMap[name] = this;
  this.name = name;
  this.pkg = pkg;//
  if(this.pkg.name != name){
    this.implementation = this.pkg.name;
    return ;
  }
  this.fileInfos = [];
  for(var file in this.pkg.scriptObjectMap){
    var info = new FileInfo(this,file);
    this.fileInfos.push(info);
    this.fileInfos[file] = info;
  }
  this.fileInfos.sort();
}
/**
 * @private
 */
PackageInfo.packageMap = {};
/**
 * @public
 */
PackageInfo.require = function(name){
  if(name){
    if(this.packageMap[name]){//return old
      return this.packageMap[name];
    }else{
      var pkg = $JSI.Package.require(name);
      if(pkg){
        return new PackageInfo(name,pkg);
      }else{
        return null;
      }
    }
  }else{
    if(this.rootInfo){
      return this.rootInfo;
    }else{
      return this.rootInfo = new RootInfo();
    }
  }
};
/**
 * @private
 */
PackageInfo.prototype.getInitializers = function(){
  function gen(fi){
    return function(){
      fi.getObjectInfoMap();
    }
  }
  var rtvs = [];
  for(var i = 0;i<this.fileInfos.length;i++){
    rtvs.push(gen(this.fileInfos[i]));
  }
  return rtvs;
}

/**
 * @public
 */
PackageInfo.prototype.getDescription = function(){
  return this.getSourceEntry().getDescription();
}
/**
 * @public
 */
PackageInfo.prototype.getSourceEntry = function(){
  if(!this._sourceParser){
    this._sourceParser = SourceEntry.require(this.pkg.scriptBase+"__$package.js");
  }
  return this._sourceParser;
}

/**
 * @public
 */
PackageInfo.prototype.getObjectInfoMap = function(){
  if(this._objectInfoMap){
    return this._objectInfoMap;
  }else{
    this._objectInfoMap = {};
    for(var i = 0;i<this.fileInfos.length;i++){
      var m = this.fileInfos[i].getObjectInfoMap();
      for(var o in m){
        this._objectInfoMap[o] = m[o];
      }
    }
    return this._objectInfoMap;
  }
};
/**
 * @public
 */
PackageInfo.prototype.getObjectInfos = function(map){
  if(this._objectInfos){
    return this._objectInfos;
  }else{
    this._objectInfos = [];
    var m = this.getObjectInfoMap();
    for(var n in m){
      this._objectInfos.push(n);
    }
    this._objectInfos.sort();
    for(var i=0;i<this._objectInfos.length;i++){
      //$log.info(list[i]);
      this._objectInfos[i] = m[this._objectInfos[i]];
      //$log.info(list[i]);
    }
    return this._objectInfos;
  }
}

/**
 * @public
 */
function FileInfo(pkginf,fileName){
  this.pkgInfo = pkginf;
  this.pkg = pkginf.pkg;
  this.name = fileName;
  //$log.debug(fileName)
  this.dependences = this.pkg.scriptDependenceMap[fileName] || [];
  this.objects = [];
  var osm = this.pkg.objectScriptMap;
  for(var o in osm){
    if(osm[o] == fileName){
      this.objects.push(o);
    }
  }
}

/**
 * @public
 */
FileInfo.prototype.getLoadtimeInfos = function(){
  if(!this.loadtimeInfos){
    this.loadtimeInfos = [];
    for(var i=0;i<this.dependences.length;i++){
      var di = this.dependences[i];
      if(di.beforeLoad){
        var pkginf = PackageInfo.require(di.packageName);
        var objects = pkginf.fileInfos[di.fileName].objects;
        var path = di.packageName.replace(/\./g,'/')+'/'+di.fileName;
        var info = {objects:objects,path:path,packageName:pkginf.name,fileName:di.fileName};
        this.loadtimeInfos.push(info);
        this.loadtimeInfos[path] = info;
      }
    }
    this.loadtimeInfos.sort();
  }
  return this.loadtimeInfos;
};

/**
 * @public
 */
FileInfo.prototype.buildIndirectDependenceInfos = function(directDeps){
  var ids = [];
  var deps = directDeps.slice(0);
  while(deps.length){
    var d = deps.pop();
    var pkginf = PackageInfo.require(d.packageName);
    var f = pkginf.fileInfos[d.fileName];
    var li = f.getLoadtimeInfos();
    var ri = f.getRuntimeInfos();
    do{
      for(var i = 0;i<li.length;i++){
        var d = li[i];
        if(d.path in deps || d.path in ids){
          continue;
        }
        deps.push(d);
        deps[d.path] = d;
        if(!(d.path in directDeps)){
          ids.push(d);
          ids[d.path] = d;
        }
      }
      if(li == ri){
        break;
      }else{
        li = ri;
      }
    }while(true);
  }
  return ids;
};

/**
 * @public
 */
FileInfo.prototype.getIndirectLoadtimeInfos = function(){
  if(!this.indirectLoadtimeInfos){
    this.indirectLoadtimeInfos = this.buildIndirectDependenceInfos(this.getLoadtimeInfos());
    this.indirectLoadtimeInfos.sort();
  }
  return this.indirectLoadtimeInfos;
};


/**
 * @public
 */
FileInfo.prototype.getRuntimeInfos = function(){
  if(!this.runtimeInfos){
    this.runtimeInfos = [];
    for(var i=0;i<this.dependences.length;i++){
      var di = this.dependences[i];
      if(!di.loadtime){
        var pkginf = PackageInfo.require(di.packageName);
        var objects = pkginf.fileInfos[di.fileName].objects;
        var path = di.packageName.replace(/\./g,'/')+'/'+di.fileName;
        var info = {objects:objects,path:path,packageName:pkginf.name,fileName:di.fileName};
        this.runtimeInfos.push(info);
        this.runtimeInfos[path] = info;
      }
    }
    this.runtimeInfos.sort();
  }
  return this.runtimeInfos;
};

/**
 * @public
 */
FileInfo.prototype.getIndirectRuntimeInfos = function(){
  if(!this.indirectRuntimeInfos){
    this.indirectRuntimeInfos = this.buildIndirectDependenceInfos(this.getRuntimeInfos());
    this.indirectRuntimeInfos.sort();
  }
  return this.indirectRuntimeInfos;
};
/**
 * @public
 */
FileInfo.prototype.getDescription = function(){
  return this.getSourceEntry().getDescription();
}
/**
 * @public
 */
FileInfo.prototype.getSourceEntry = function(){
  if(!this._sourceEntry){
    this._sourceEntry = SourceEntry.require(this.name,this.pkg.name);
  }
  return this._sourceEntry;
};

/**
 * @public
 */
FileInfo.prototype.getDocEntry = function(name){
  return this.getSourceEntry().getDocEntry(name);
};

/**
 * @public
 */
FileInfo.prototype.getObject = function(name){
  return this.getObjectMap()[name];
};

/**
 * @public
 */
FileInfo.prototype.getObjectInfo = function(name){
  return this.getObjectInfoMap()[name]
}

/**
 * @public
 */
FileInfo.prototype.getObjectInfoMap = function(){
  if(this._objectInfoMap){
    return this._objectInfoMap;
  }
  try{
    this._objectInfoMap = {}
    for(var i = 0;i<this.objects.length;i++){
      this._objectInfoMap[this.objects[i]] = new ObjectInfo(this,this.objects[i]);
    }
    return this._objectInfoMap;
  }catch(e){
    $log.error(e);
  }
}

/**
 * @public
 */
FileInfo.prototype.getObjectInfos = function(){
  if(this._objectInfos){
    return this._objectInfos;
  }else{
    this._objectInfos = [];
    var m = this.getObjectInfoMap();
    for(var n in m){
      this._objectInfos.push(n);
    }
    this._objectInfos.sort();
    for(var i=0;i<this._objectInfos.length;i++){
      this._objectInfos[i] = m[this._objectInfos[i]];
    }
    return this._objectInfos;
  }
}

/**
 * @public
 */
FileInfo.prototype.getObjectMap = function(){
  if(this._objectMap){
    return this._objectMap;
  }
  try{
    this._objectMap = {};
    this.pkg.prepareScript(this.name,false);
    for(var i=0;i<this.objects.length;i++){
      this._objectMap[this.objects[i]] = getObject(this.objects[i],this.pkg.objectMap)
    }
  }catch(e){
    $log.error(e);
  }
  return this._objectMap;
};

/**
 * @public
 */
FileInfo.prototype.getAvailableObjectInfo = function(name){
  var file = this.getAvailableObjectFileMap()[name];
  if(file){
    return file.getObjectInfo(name);
  }
}

/**
 * @public
 */
FileInfo.prototype.getAvailableObjectMap = function(name){
  if(!this._availableMap){
    var map = this.getAvailableObjectFileMap();
    var omap = {};
    for(var n in map){
      omap[n] = map[n].getObject(n);
    }
    this._availableMap = omap;
  }
  return this._availableMap;
}

/**
 * @public
 */
FileInfo.prototype.getAvailableObjectFileMap = function(name){
  if(!this._availableOFMap){
    this._availableOFMap = {};
    //TODO:同名的选择问题忽略.
    var infos = this.getLoadtimeInfos();
    infos = infos.concat(this.getRuntimeInfos());
    var fis = [];
    for(var i=0;i<infos.length;i++){
      var fi = PackageInfo.require(infos[i].packageName).fileInfos[infos[i].fileName];
      fis.push(fi);
    }
    fis.push(this);
    for(var i=0;i<fis.length;i++){
      var os = fis[i].objects;
      for(var j=0;j<os.length;j++){
        this._availableOFMap[os[j]] = fis[i];
      }
    }
  }
  return this._availableOFMap;
}

/**
 * @public
 */
function RootInfo(){
  var scripts = document.getElementsByTagName('script');
  var freeScript = [];
  var scriptMap = {}
  for(var i=0;i<scripts.length;i++){
    var s = scripts[i];
    if(s.src){
      freeScript.push(s.src);
      scriptMap[s.src] = true;
    }
  }
  //for mozilla document.write bug
  for(var i=0;i<scripts.length;i++){
    var s = scripts[i];
    while(s=s.nextSibling){
      if(s.nodeType == 1){
        if(s.tagName == "SCRIPT"){
          if(s.src){
            if(scriptMap[s.src]){
              break;
            }else{
              freeScript.push(s.src);
              scriptMap[s.src] = true;
            }
          }
        }else{
          break;
        }
      }
    }
  }
  for(var i=0;i<freeScript.length;i++){
    freeScript[i] = $JSI.computeURL(freeScript[i]);
  }
  this.fileInfos = [];
  for(var i=0;i<freeScript.length;i++){
    try{
      var info = new FreeFileInfo(this,freeScript[i]);
      this.fileInfos.push(info);
      this.fileInfos[freeScript[i]] = info;
    }catch(e){}
  }
  this.fileInfos.sort();
  this.name = "";
  this.dependences = [];
}

/**
 * @public
 */
RootInfo.prototype.getAvailableObjectFileMap = function(){
  if(!this._availableOFMap){
    this._availableOFMap = {};
    var fis =this.fileInfos;
    for(var i=0;i<fis.length;i++){
      var os = fis[i].objects;
      for(var j=0;j<os.length;j++){
        this._availableOFMap[os[j]] = fis[i];
      }
    }
  }
  return this._availableOFMap;
};
/**
 * @public
 */
RootInfo.prototype.getDocEntry = function(name){
  for(var i=this.fileInfos.length-1;i>=0;i--){
    var d = this.fileInfos[i]._sourceEntry.getDocEntry(name);
    if(d){
      return d;
    }
  }
};
$JSI.extend(RootInfo,PackageInfo);

/**
 * @public
 */
function FreeFileInfo(rootInfo,fileName){
  this.name = fileName;
  this.pkgInfo = rootInfo;
  this.objects = [];
  this.dependences = [];
  this._sourceEntry = SourceEntry.require(fileName);
  this.topDocEntries = this._sourceEntry.getTopDocEntries();
  for(var i = 0;i<this.topDocEntries.length;i++){
    var name = this.topDocEntries[i].getId();
    this.objects.push(name);
  }
  
}

/**
 * @public
 */
FreeFileInfo.prototype.getObjectInfoMap = function(){
  if(this._objectInfoMap){
    return this._objectInfoMap;
  }
  try{
    this._objectInfoMap = {}
    for(var i = 0;i<this.objects.length;i++){
      this._objectInfoMap[this.objects[i]] = new ObjectInfo(this,this.objects[i]);
    }
    return this._objectInfoMap;
  }catch(e){
    $log.error(e);
  }
}

/**
 * @public
 */
FreeFileInfo.prototype.getAvailableObjectFileMap = function(){
  return this.pkgInfo.getAvailableObjectFileMap();
}

/**
 * @public
 */
FreeFileInfo.prototype.getObjectMap = function(){
  if(this._objectMap){
    return this._objectMap;
  }
  try{
    this._objectMap = {};
    for(var i=0;i<this.objects.length;i++){
      this._objectMap[this.objects[i]] = getObject(this.objects[i],window)
    }
  }catch(e){
    $log.error(e);
  }
  return this._objectMap;
}

/**
 * @public
 */
FreeFileInfo.prototype.getDocEntry = function(name){
  return this.pkgInfo.getDocEntry(name);
};

/**
 * @public
 */
FreeFileInfo.prototype.getObject = function(name){
  return this.getObjectMap()[name];
}

/**
 * @public
 */
$JSI.extend(FreeFileInfo,FileInfo);

/**
 * @public
 */
function getObject(name,map){
  var name = name.split('.');
  for(var i=0;map!=null && i<name.length;i++){
    map = map[name[i]];
  }
  return map;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -