HEX
Server: Apache
System: Linux webd004.cluster130.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
User: frenchy (106757)
PHP: 7.4.33
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/frenchy/www/french-american.org/current/node_modules/snyk-docker-plugin/lib/docker-file.ts
import { DockerfileParser } from "dockerfile-ast";
import * as fs from "fs";
import {
  DockerFileLayers,
  DockerFilePackages,
  getDockerfileBaseImageName,
  getDockerfileLayers,
  getPackagesFromRunInstructions,
} from "./instruction-parser";

export { analyseDockerfile, readDockerfileAndAnalyse, DockerFileAnalysis };

interface DockerFileAnalysis {
  baseImage?: string;
  dockerfilePackages: DockerFilePackages;
  dockerfileLayers: DockerFileLayers;
}

async function readDockerfileAndAnalyse(
  targetFilePath?: string,
): Promise<DockerFileAnalysis | undefined> {
  if (!targetFilePath) {
    return undefined;
  }

  const contents = await readFile(targetFilePath);
  return analyseDockerfile(contents);
}

async function analyseDockerfile(
  contents: string,
): Promise<DockerFileAnalysis | undefined> {
  const dockerfile = DockerfileParser.parse(contents);
  const baseImage = getDockerfileBaseImageName(dockerfile);
  const dockerfilePackages = getPackagesFromRunInstructions(dockerfile);
  const dockerfileLayers = getDockerfileLayers(dockerfilePackages);
  return {
    baseImage,
    dockerfilePackages,
    dockerfileLayers,
  };
}

async function readFile(path: string) {
  return new Promise((resolve, reject) => {
    fs.readFile(path, "utf8", (err, data) => {
      return err ? reject(err) : resolve(data);
    });
  }) as Promise<string>;
}