diff --git a/src/converters/dasel.ts b/src/converters/dasel.ts new file mode 100644 index 0000000..cf0c6f4 --- /dev/null +++ b/src/converters/dasel.ts @@ -0,0 +1,59 @@ +import { execFile as execFileOriginal } from "node:child_process"; +import { ExecFileFn } from "./types"; + +export const properties = { + from: { + document: [ + "yaml", + "toml", + "json", + "xml", + "csv", + ], + }, + to: { + document: [ + "yaml", + "toml", + "json", + "csv" + ], + }, +}; + +export async function convert( + filePath: string, + fileType: string, + convertTo: string, + targetPath: string, + options?: unknown, + execFile: ExecFileFn = execFileOriginal, // to make it mockable +): Promise { + const args: string[] = []; + + args.push("--file", filePath); + args.push("--read", fileType); + args.push("--write", convertTo); + + const fs = require("fs"); + return new Promise((resolve, reject) => { + execFile("dasel", args, (error, stdout, stderr) => { + if (error) { + reject(`error: ${error}`); + return; + } + + if (stderr) { + console.error(`stderr: ${stderr}`); + } + + fs.writeFile(targetPath, stdout, (err: NodeJS.ErrnoException | null) => { + if (err) { + reject(`Failed to write output: ${err}`); + } else { + resolve("Done"); + } + }); + }); + }); +} diff --git a/src/converters/main.ts b/src/converters/main.ts index f90a3fc..738574d 100644 --- a/src/converters/main.ts +++ b/src/converters/main.ts @@ -4,6 +4,7 @@ import { MAX_CONVERT_PROCESS } from "../helpers/env"; import { normalizeFiletype, normalizeOutputFiletype } from "../helpers/normalizeFiletype"; import { convert as convertassimp, properties as propertiesassimp } from "./assimp"; import { convert as convertCalibre, properties as propertiesCalibre } from "./calibre"; +import { convert as convertDasel, properties as propertiesDasel } from "./dasel"; import { convert as convertDvisvgm, properties as propertiesDvisvgm } from "./dvisvgm"; import { convert as convertFFmpeg, properties as propertiesFFmpeg } from "./ffmpeg"; import { @@ -82,6 +83,10 @@ const properties: Record< properties: propertiesCalibre, converter: convertCalibre, }, + dasel: { + properties: propertiesDasel, + converter: convertDasel, + }, libreoffice: { properties: propertiesLibreOffice, converter: convertLibreOffice,