From bdaea87aa65ea0a5efe588d6bd643e1e17c9ed4b Mon Sep 17 00:00:00 2001 From: Spencer Date: Thu, 10 Jun 2021 18:16:15 -0700 Subject: [PATCH] [kbnArchiver] fix save to non-existent file (#101974) Co-authored-by: spalger --- .../src/kbn_client/kbn_client_import_export.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/kbn-test/src/kbn_client/kbn_client_import_export.ts b/packages/kbn-test/src/kbn_client/kbn_client_import_export.ts index 5fd30929fecf68..88953cdbaed7c9 100644 --- a/packages/kbn-test/src/kbn_client/kbn_client_import_export.ts +++ b/packages/kbn-test/src/kbn_client/kbn_client_import_export.ts @@ -48,7 +48,12 @@ export class KbnClientImportExport { path = `${path}.json`; } - const absolutePath = Path.resolve(this.baseDir, path); + return Path.resolve(this.baseDir, path); + } + + private resolveAndValidatePath(path: string) { + const absolutePath = this.resolvePath(path); + if (!existsSync(absolutePath)) { throw new Error( `unable to resolve path [${path}] to import/export, resolved relative to [${this.baseDir}]` @@ -59,7 +64,7 @@ export class KbnClientImportExport { } async load(path: string, options?: { space?: string }) { - const src = this.resolvePath(path); + const src = this.resolveAndValidatePath(path); this.log.debug('resolved import for', path, 'to', src); const objects = await parseArchive(src); @@ -94,7 +99,7 @@ export class KbnClientImportExport { } async unload(path: string, options?: { space?: string }) { - const src = this.resolvePath(path); + const src = this.resolveAndValidatePath(path); this.log.debug('unloading docs from archive at', src); const objects = await parseArchive(src); @@ -143,6 +148,7 @@ export class KbnClientImportExport { }) .join('\n\n'); + await Fs.mkdir(Path.dirname(dest), { recursive: true }); await Fs.writeFile(dest, fileContents, 'utf-8'); this.log.success('Exported', objects.length, 'saved objects to', dest);