From 56866531b7ec926b192faf859669c315fb65a4a4 Mon Sep 17 00:00:00 2001 From: lamine2000 Date: Fri, 5 Jun 2026 08:20:08 +0000 Subject: [PATCH] fix(cli): create output directory if it doesn't exist The compile and collections commands threw ENOENT when --output-path pointed to a directory that hadn't been created yet. Add mkdir({ recursive: true }) before writeFile in both handlers, matching the pattern already used in the execute command's serialize-output.ts. Fixes #859 --- packages/cli/src/collections/handler.ts | 3 ++- packages/cli/src/compile/handler.ts | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/collections/handler.ts b/packages/cli/src/collections/handler.ts index 33494b757..8ea8cc72d 100644 --- a/packages/cli/src/collections/handler.ts +++ b/packages/cli/src/collections/handler.ts @@ -1,5 +1,5 @@ import path from 'node:path'; -import { readFile, writeFile } from 'node:fs/promises'; +import { mkdir, readFile, writeFile } from 'node:fs/promises'; import { Logger } from '../util/logger'; import request from './request'; @@ -94,6 +94,7 @@ export const get = async (options: GetOptions, logger: Logger) => { null, options.pretty ? 2 : undefined ); + await mkdir(path.dirname(options.outputPath!), { recursive: true }); await writeFile(options.outputPath!, content); logger.always(`Wrote items to ${options.outputPath}`); } else { diff --git a/packages/cli/src/compile/handler.ts b/packages/cli/src/compile/handler.ts index c92c62f80..4c75415cc 100644 --- a/packages/cli/src/compile/handler.ts +++ b/packages/cli/src/compile/handler.ts @@ -1,4 +1,5 @@ -import { writeFile } from 'node:fs/promises'; +import { mkdir, writeFile } from 'node:fs/promises'; +import { dirname } from 'node:path'; import type { CompileOptions } from './command'; import type { Logger } from '../util/logger'; @@ -22,6 +23,7 @@ const compileHandler = async (options: CompileOptions, logger: Logger) => { if (options.outputStdout) { logger.success('Result:\n\n' + result); } else { + await mkdir(dirname(options.outputPath!), { recursive: true }); await writeFile(options.outputPath!, result as string); logger.success(`Compiled to ${options.outputPath}`); }