From 22c4d1739de5e3d0877dbb6c626289afcd3f0805 Mon Sep 17 00:00:00 2001 From: mertmit Date: Sat, 4 Feb 2023 13:34:24 +0300 Subject: [PATCH] fix: asynchronous local file write Signed-off-by: mertmit --- .../v1-legacy/plugins/adapters/storage/Local.ts | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/nocodb/src/lib/v1-legacy/plugins/adapters/storage/Local.ts b/packages/nocodb/src/lib/v1-legacy/plugins/adapters/storage/Local.ts index 9796b00ae3..7e21e88c99 100644 --- a/packages/nocodb/src/lib/v1-legacy/plugins/adapters/storage/Local.ts +++ b/packages/nocodb/src/lib/v1-legacy/plugins/adapters/storage/Local.ts @@ -1,5 +1,6 @@ import fs from 'fs'; import path from 'path'; +import { promisify } from 'util'; import mkdirp from 'mkdirp'; @@ -8,16 +9,20 @@ import NcConfigFactory from '../../../../utils/NcConfigFactory'; import axios from 'axios'; +const writeFileAsync = promisify(fs.writeFile) +const readFileAsync = promisify(fs.readFile) +const unlinkAsync = promisify(fs.unlink) + export default class Local implements IStorageAdapterV2 { constructor() {} public async fileCreate(key: string, file: XcFile): Promise { const destPath = path.join(NcConfigFactory.getToolDir(), ...key.split('/')); try { - mkdirp.sync(path.dirname(destPath)); - const data = await fs.readFileSync(file.path); - await fs.writeFileSync(destPath, data); - fs.unlinkSync(file.path); + await mkdirp(path.dirname(destPath)); + const data = await readFileAsync(file.path) + await writeFileAsync(destPath, data); + await unlinkAsync(file.path); // await fs.promises.rename(file.path, destPath); } catch (e) { throw e; @@ -41,8 +46,8 @@ export default class Local implements IStorageAdapterV2 { origin: 'https://www.airtable.com/', }, }) - .then((response) => { - mkdirp.sync(path.dirname(destPath)); + .then(async (response) => { + await mkdirp(path.dirname(destPath)); const file = fs.createWriteStream(destPath); // close() is async, call cb after close completes file.on('finish', () => {