fix: clean vault/vaults output in n8n
Build and Push Docker Container / build-and-push (push) Successful in 4m46s

- Parse vaults stdout into structured {name,path} pairs

- For vault/vaults, return parsed JSON directly (no stdout wrapper)

- Keep minimal output for all operations: stdout or parsed_stdout

- Bump n8n node package to 0.2.3
This commit is contained in:
2026-06-24 12:25:27 +02:00
parent a953214c20
commit f3762eec82
4 changed files with 27 additions and 16 deletions
@@ -264,9 +264,9 @@ export class ObsidianApi implements INodeType {
// Always keep n8n output minimal/clean.
// - Prefer parsed stdout (e.g. vault/vaults)
// - Otherwise keep stdout as-is
const stdoutValue = (result as any).parsed_stdout ?? result.stdout;
const out: any = { stdout: stdoutValue };
if (result.stderr) out.stderr = result.stderr;
const parsed = (result as any).parsed_stdout;
const out: any = parsed ? parsed : { stdout: result.stdout };
if (!parsed && result.stderr) out.stderr = result.stderr;
if (result.timed_out) out.timed_out = result.timed_out;
returnData.push({ json: out, pairedItem: { item: itemIndex } });
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "n8n-nodes-obsidian-cli-api",
"version": "0.2.2",
"version": "0.2.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "n8n-nodes-obsidian-cli-api",
"version": "0.2.2",
"version": "0.2.3",
"license": "MIT",
"devDependencies": {
"@types/node": "^24.0.0",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "n8n-nodes-obsidian-cli-api",
"version": "0.2.2",
"version": "0.2.3",
"description": "n8n community nodes for the Obsidian API Docker service backed by the official Obsidian CLI.",
"license": "MIT",
"homepage": "https://git.yiprawr.dev/Docker/obsidian-api",
@@ -144,14 +144,12 @@ function extractErrorMessage(body: unknown): string {
}
function maybeParseStdout(result: ObsidianCommandResult): IDataObject | undefined {
const lastArg = result.command[result.command.length - 1];
if (lastArg !== 'vault' && lastArg !== 'vaults') return undefined;
const cmd = result.command;
const hasVault = cmd.includes('vault');
const hasVaults = cmd.includes('vaults');
if (!hasVault && !hasVaults) return undefined;
// Obsidian CLI prints either:
// vault:
// key<TAB>value\nkey<TAB>value\n...
// vaults:
// often one vault per line (names) or a similar tabular output.
const lines = (result.stdout || '')
.split(/\r?\n/)
.map((l) => l.trim())
@@ -159,11 +157,24 @@ function maybeParseStdout(result: ObsidianCommandResult): IDataObject | undefine
if (!lines.length) return undefined;
const isKv = lines.some((l) => l.includes('\t'));
if (!isKv && lastArg === 'vaults') {
return { vaults: lines };
// vaults output is typically a 2-col tabular format: <name>\t<containerPath>
if (hasVaults) {
const vaults: Array<{ name: string; path: string }> = [];
for (const line of lines) {
const parts = line.split('\t');
if (parts.length < 2) continue;
const name = parts[0].trim();
const path = parts.slice(1).join('\t').trim();
if (!name || !path) continue;
vaults.push({ name, path });
}
// Fallback: if parsing failed, return raw lines
if (!vaults.length) return { vaults: lines };
return { vaults };
}
// vault output is often key\tvalue pairs
const kv: Record<string, string | number> = {};
for (const line of lines) {
const parts = line.split('\t');