export async function runDebugger()

in src/daffodilDebugger/utils.ts [54:115]


export async function runDebugger(
  rootPath: string,
  daffodilDebugClasspath: Array<string>,
  filePath: string,
  serverPort: number,
  dfdlDebugger: DFDLDebugger,
  createTerminal: boolean = false
): Promise<vscode.Terminal> {
  const dfdlVersion = daffodilVersion(filePath)
  const artifact = daffodilArtifact(dfdlVersion)
  const scriptPath = path.join(
    rootPath,
    `daffodil-debugger-${dfdlVersion}-${LIB_VERSION}`
  )
  // Locates the $JAVA_HOME, or if not defined, the highest version available.
  const javaHome: IJavaHomeInfo | undefined = await new Promise(
    (resolve, reject) => {
      _locateJavaHome({ version: '>=1.8' }, (error, javaHomes) => {
        console.log(`detected java homes: ${JSON.stringify(javaHomes)}`)
        javaHomes
          ? resolve(
              process.env.JAVA_HOME
                ? javaHomes.find(
                    (home, idx, obj) => home.path == process.env.JAVA_HOME
                  )
                : latestJdk(javaHomes)
            )
          : undefined
      })
    }
  )
  const isAtLeastJdk17: boolean = parseFloat(javaHome?.version ?? '0') >= 17
  console.log(
    `choosing java home at ${javaHome?.path}, version ${javaHome?.version}, is at least JDK 17: ${isAtLeastJdk17}`
  )
  // The backend's launch script honors $JAVA_HOME, but if not set it assumes java is available on the path.
  const env = javaHome
    ? {
        DAFFODIL_DEBUG_CLASSPATH: daffodilDebugClasspath.join(
          osCheck(';', ':')
        ),
        DAFFODIL_DEBUG_LOG_LEVEL: dfdlDebugger.logging.level,
        DAFFODIL_DEBUG_LOG_FILE: dfdlDebugger.logging.file,
        JAVA_HOME: javaHome?.path,
      }
    : {
        DAFFODIL_DEBUG_CLASSPATH: daffodilDebugClasspath.join(
          osCheck(';', ':')
        ),
        DAFFODIL_DEBUG_LOG_LEVEL: dfdlDebugger.logging.level,
        DAFFODIL_DEBUG_LOG_FILE: dfdlDebugger.logging.file,
      }

  return await runScript(
    scriptPath,
    artifact.scriptName,
    createTerminal,
    shellArgs(serverPort, isAtLeastJdk17),
    env,
    'daffodil'
  )
}