Why not dprint[1]? Does it not "produce a concrete syntax tree (CST) that represents the original code completely, whitespace, comments and all"?
I'm not terribly familiar with the architecture of dprint, but it's used in Deno with JS/TS plugin and works great so far.