Browse Source

Recursively mkdir the parent directories

Alexandre Lachèze 7 years ago
parent
commit
ec8407c65d
1 changed files with 13 additions and 2 deletions
  1. 13 2
      lib/renderer/extensions/storage.js

+ 13 - 2
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)
   })
 }