From 645b29e5d168bf72a70a6ca81994ffe61761b4cd Mon Sep 17 00:00:00 2001 From: Ben Burwood Date: Mon, 8 Sep 2025 23:51:50 +0100 Subject: [PATCH 1/9] Add Dasel to Readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 57125ac..96b50e5 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ A self-hosted online file converter. Supports over a thousand different formats. | [FFmpeg](https://ffmpeg.org/) | Video | ~472 | ~199 | | [Potrace](https://potrace.sourceforge.net/) | Raster to vector | 4 | 11 | | [VTracer](https://github.com/visioncortex/vtracer) | Raster to vector | 8 | 1 | +| [Dasel](https://github.com/TomWright/dasel) | Data Files | 5 | 5 | From 5d74ec59c16fc1ffd950db37b04223f84503d0c8 Mon Sep 17 00:00:00 2001 From: Ben Burwood Date: Mon, 8 Sep 2025 23:52:13 +0100 Subject: [PATCH 2/9] Install Dasel in Dockerfile --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index 2f741da..7cdee5f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -47,6 +47,7 @@ FROM base AS release RUN apt-get update && apt-get install -y \ assimp-utils \ calibre \ + dasel \ dcraw \ dvisvgm \ ffmpeg \ From eaeac2cb78aff0272725a7a9ad1af90ec6e9c26d Mon Sep 17 00:00:00 2001 From: Ben Burwood Date: Tue, 9 Sep 2025 00:12:29 +0100 Subject: [PATCH 3/9] Add Fake Dasel Test --- tests/converters/dasel.test.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tests/converters/dasel.test.ts diff --git a/tests/converters/dasel.test.ts b/tests/converters/dasel.test.ts new file mode 100644 index 0000000..a75ea3b --- /dev/null +++ b/tests/converters/dasel.test.ts @@ -0,0 +1,7 @@ +import { test } from "bun:test"; +import { convert } from "../../src/converters/inkscape"; +import { runCommonTests } from "./helpers/commonTests"; + +runCommonTests(convert); + +test.skip("dummy - required to trigger test detection", () => {}); From e668b828ea3abf6fa34ab036dcfc598b69b3c680 Mon Sep 17 00:00:00 2001 From: Ben Burwood Date: Tue, 9 Sep 2025 00:18:26 +0100 Subject: [PATCH 4/9] Add Dasel VersionCheck --- src/helpers/printVersions.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/helpers/printVersions.ts b/src/helpers/printVersions.ts index eb1a591..bd94729 100644 --- a/src/helpers/printVersions.ts +++ b/src/helpers/printVersions.ts @@ -84,6 +84,16 @@ if (process.env.NODE_ENV === "production") { } }); + exec("dasel --version", (error, stdout) => { + if (error) { + console.error("dasel is not installed."); + } + + if (stdout) { + console.log(stdout.split("\n")[0]); + } + }); + exec("xelatex -version", (error, stdout) => { if (error) { console.error("Tex Live with XeTeX is not installed."); From c3e4f676fc1ab09eb42054b6e6aff0d657cf35d8 Mon Sep 17 00:00:00 2001 From: Ben Burwood Date: Tue, 9 Sep 2025 00:26:40 +0100 Subject: [PATCH 5/9] Add Dasel Converter --- src/converters/dasel.ts | 59 +++++++++++++++++++++++++++++++++++++++++ src/converters/main.ts | 5 ++++ 2 files changed, 64 insertions(+) create mode 100644 src/converters/dasel.ts 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, From d8ddfa31e3774f2138e57f1af745f1c6ddc3ddac Mon Sep 17 00:00:00 2001 From: Ben Burwood Date: Tue, 9 Sep 2025 00:32:09 +0100 Subject: [PATCH 6/9] Update dasel.test.ts --- tests/converters/dasel.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/converters/dasel.test.ts b/tests/converters/dasel.test.ts index a75ea3b..a884e6e 100644 --- a/tests/converters/dasel.test.ts +++ b/tests/converters/dasel.test.ts @@ -1,5 +1,5 @@ import { test } from "bun:test"; -import { convert } from "../../src/converters/inkscape"; +import { convert } from "../../src/converters/dasel"; import { runCommonTests } from "./helpers/commonTests"; runCommonTests(convert); From 38cbf093e5fe9c4c2becafa6e870b669bd3ea917 Mon Sep 17 00:00:00 2001 From: Ben Burwood Date: Tue, 9 Sep 2025 00:32:47 +0100 Subject: [PATCH 7/9] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 96b50e5..cb31feb 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ A self-hosted online file converter. Supports over a thousand different formats. | [FFmpeg](https://ffmpeg.org/) | Video | ~472 | ~199 | | [Potrace](https://potrace.sourceforge.net/) | Raster to vector | 4 | 11 | | [VTracer](https://github.com/visioncortex/vtracer) | Raster to vector | 8 | 1 | -| [Dasel](https://github.com/TomWright/dasel) | Data Files | 5 | 5 | +| [Dasel](https://github.com/TomWright/dasel) | Data Files | 5 | 4 | From c6b64ced9185e7470f361a88b9065b70ac72a44a Mon Sep 17 00:00:00 2001 From: Ben Burwood Date: Tue, 9 Sep 2025 09:17:39 +0100 Subject: [PATCH 8/9] Formatting --- src/converters/dasel.ts | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/src/converters/dasel.ts b/src/converters/dasel.ts index cf0c6f4..2147518 100644 --- a/src/converters/dasel.ts +++ b/src/converters/dasel.ts @@ -3,21 +3,10 @@ import { ExecFileFn } from "./types"; export const properties = { from: { - document: [ - "yaml", - "toml", - "json", - "xml", - "csv", - ], + document: ["yaml", "toml", "json", "xml", "csv"], }, to: { - document: [ - "yaml", - "toml", - "json", - "csv" - ], + document: ["yaml", "toml", "json", "csv"], }, }; From 1cc4862d51f4036f612eac8e879987da74b79a32 Mon Sep 17 00:00:00 2001 From: Ben Burwood Date: Tue, 9 Sep 2025 18:54:29 +0100 Subject: [PATCH 9/9] Change require to import for FS and Remove Test --- src/converters/dasel.ts | 2 +- tests/converters/dasel.test.ts | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) delete mode 100644 tests/converters/dasel.test.ts diff --git a/src/converters/dasel.ts b/src/converters/dasel.ts index 2147518..741d325 100644 --- a/src/converters/dasel.ts +++ b/src/converters/dasel.ts @@ -1,3 +1,4 @@ +import fs from "fs"; import { execFile as execFileOriginal } from "node:child_process"; import { ExecFileFn } from "./types"; @@ -24,7 +25,6 @@ export async function convert( 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) { diff --git a/tests/converters/dasel.test.ts b/tests/converters/dasel.test.ts deleted file mode 100644 index a884e6e..0000000 --- a/tests/converters/dasel.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { test } from "bun:test"; -import { convert } from "../../src/converters/dasel"; -import { runCommonTests } from "./helpers/commonTests"; - -runCommonTests(convert); - -test.skip("dummy - required to trigger test detection", () => {});