All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.joern.jssrc2cpg.passes.ConfigPass.scala Maven / Gradle / Ivy

The newest version!
package io.joern.jssrc2cpg.passes

import better.files.File
import io.joern.jssrc2cpg.Config
import io.joern.x2cpg.SourceFiles
import io.joern.x2cpg.frontendspecific.jssrc2cpg.Defines
import io.joern.x2cpg.utils.{Report, TimeUtils}
import io.shiftleft.codepropertygraph.generated.Cpg
import io.shiftleft.codepropertygraph.generated.nodes.NewConfigFile
import io.shiftleft.passes.ForkJoinParallelCpgPass
import io.shiftleft.utils.IOUtils
import org.slf4j.{Logger, LoggerFactory}

class ConfigPass(cpg: Cpg, config: Config, report: Report = new Report()) extends ForkJoinParallelCpgPass[File](cpg) {

  private val logger: Logger = LoggerFactory.getLogger(getClass)

  protected val allExtensions: Set[String]      = Set(".json", ".js", ".vue", ".html", ".pug")
  protected val selectedExtensions: Set[String] = Set(".json", ".config.js", ".conf.js", ".vue", ".html", ".pug")

  override def generateParts(): Array[File] =
    configFiles(config, allExtensions).toArray

  protected def fileContent(file: File): Seq[String] =
    IOUtils.readLinesInFile(file.path)

  protected def configFiles(config: Config, extensions: Set[String]): Seq[File] =
    SourceFiles
      .determine(config.inputPath, extensions)
      .filterNot(_.contains(Defines.NodeModulesFolder))
      .filter(f => selectedExtensions.exists(f.endsWith))
      .map(File(_))

  override def runOnPart(diffGraph: DiffGraphBuilder, file: File): Unit = {
    val path = File(config.inputPath).path.toAbsolutePath.relativize(file.path).toString
    logger.debug(s"Adding file '$path' as config.")
    val (gotCpg, duration) = TimeUtils.time {
      val localDiff  = Cpg.newDiffGraphBuilder
      val content    = fileContent(file)
      val loc        = content.size
      val configNode = NewConfigFile().name(path).content(content.mkString("\n"))
      report.addReportInfo(path, loc, parsed = true)
      localDiff.addNode(configNode)
      localDiff
    }
    diffGraph.absorb(gotCpg)
    report.updateReport(path, cpg = true, duration)
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy