diff --git a/lib/renderer/extensions/storage.js b/lib/renderer/extensions/storage.js index 57672b8a2832..a6e605c4dd9b 100644 --- a/lib/renderer/extensions/storage.js +++ b/lib/renderer/extensions/storage.js @@ -8,6 +8,17 @@ const getChromeStoragePath = (storageType, extensionId) => { app.getPath('userData'), `/Chrome Storage/${extensionId}-${storageType}.json`) } +// recursively create directory and parent directories if needed +const mkdirParent = (dirPath, mode, callback) => { + fs.mkdir(dirPath, mode, error => { + if (error && error.errno === 34) { + fs.mkdirParent(path.dirname(dirPath), mode, callback) + fs.mkdirParent(dirPath, mode, callback) + } + callback && callback(error) + }) +} + const readChromeStorageFile = (storageType, extensionId, cb) => { const filePath = getChromeStoragePath(storageType, extensionId) fs.readFile(filePath, 'utf8', (err, data) => { @@ -21,8 +32,8 @@ const readChromeStorageFile = (storageType, extensionId, cb) => { const writeChromeStorageFile = (storageType, extensionId, data, cb) => { const filePath = getChromeStoragePath(storageType, extensionId) - fs.mkdir(path.dirname(filePath), err => { - if (err) { /* we just ignore the errors of mkdir */ } + mkdirParent(path.dirname(filePath), err => { + if (err) { /* we just ignore the errors of mkdir or mkdirParent */ } fs.writeFile(filePath, data, cb) }) }