blob: 610ff221d1c9293f4f3204def1c87e5a29fce2f9 [file] [log] [blame]
import * as cp from "child_process";
import { Uri } from "vscode";
import { Snapshot } from "./Snapshot";
export function getPendingSnapshots(root: Uri): Promise<Snapshot[]> {
return new Promise((resolve, reject) => {
let buffer = "";
const child = cp.spawn(
"cargo",
["insta", "pending-snapshots", "--as-json"],
{
cwd: root.fsPath,
}
);
if (!child) {
reject(new Error("could not spawn cargo-insta"));
return;
}
child.stdout?.setEncoding("utf8");
child.stdout.on("data", (data) => (buffer += data));
child.on("close", (_exitCode) => {
const snapshots = buffer
.split(/\n/g)
.map((line) => {
try {
return new Snapshot(root, JSON.parse(line));
} catch (e) {
return null;
}
})
.filter((x) => x !== null);
resolve(snapshots as any);
});
});
}
export function processInlineSnapshot(
snapshot: Snapshot,
op: "accept" | "reject"
): Promise<boolean> {
if (!snapshot.inlineInfo) {
return Promise.resolve(false);
}
return new Promise((resolve, reject) => {
const child = cp.spawn("cargo", ["insta", op, "--snapshot", snapshot.key], {
cwd: snapshot.rootUri.fsPath,
});
if (!child) {
reject(new Error("could not spawn cargo-insta"));
return;
}
child.on("close", (exitCode) => {
resolve(exitCode === 0);
});
});
}
export function processAllSnapshots(
rootUri: Uri,
op: "accept" | "reject"
): Promise<boolean> {
return new Promise((resolve, reject) => {
const child = cp.spawn("cargo", ["insta", op], {
cwd: rootUri.fsPath,
});
if (!child) {
reject(new Error("could not spawn cargo-insta"));
return;
}
child.on("close", (exitCode) => {
resolve(exitCode === 0);
});
});
}