Browse Source

fix(tauri.js) do not swallow init errors, fix conf inject (#802)

* fix(tauri.js) do not swallow init errors, fix conf inject

* fix(tauri.js) tests
Lucas Fernandes Nogueira 5 years ago
parent
commit
f208a68e40

+ 5 - 0
.changes/tauri-init-fix.md

@@ -0,0 +1,5 @@
+---
+"tauri.js": patch
+---
+
+Fixes `tauri init` not generating `tauri.conf.json` on the Vue CLI Plugin.

+ 28 - 35
cli/tauri.js/src/template/index.ts

@@ -18,6 +18,10 @@ interface InjectOptions {
 }
 type InjectionType = 'conf' | 'template' | 'all'
 
+interface UnknownObject {
+  [index: string]: any
+}
+
 const injectConfFile = (
   injectPath: string,
   { force, logging }: InjectOptions,
@@ -29,27 +33,22 @@ const injectConfFile = (
   Run \`tauri init --force conf\` to overwrite.`)
     if (!force) return false
   } else {
-    try {
-      removeSync(path)
-      const finalConf = merge(defaultConfig as any, customConfig as any) as {
-        [index: string]: any
+    removeSync(path)
+    Object.keys(defaultConfig).forEach(key => {
+      // Options marked `null` should be removed
+      /* eslint-disable security/detect-object-injection */
+      if ((customConfig as UnknownObject)[key] === null) {
+        // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
+        delete (defaultConfig as UnknownObject)[key]
+        // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
+        delete (customConfig as UnknownObject)[key]
       }
-      Object.keys(finalConf).forEach(key => {
-        // Options marked `null` should be removed
-        /* eslint-disable security/detect-object-injection */
-        if (finalConf[key] === null) {
-          // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
-          delete finalConf[key]
-        }
-        /* eslint-enable security/detect-object-injection */
-      })
-      writeFileSync(path, JSON.stringify(finalConf, undefined, 2))
-    } catch (e) {
-      if (logging) console.log(e)
-      return false
-    } finally {
-      if (logging) log('Successfully wrote tauri.conf.json')
-    }
+      /* eslint-enable security/detect-object-injection */
+    })
+    const finalConf = merge(defaultConfig as any, customConfig as any) as UnknownObject
+
+    writeFileSync(path, JSON.stringify(finalConf, undefined, 2))
+    if (logging) log('Successfully wrote tauri.conf.json')
   }
 }
 
@@ -82,21 +81,15 @@ Run \`tauri init --force template\` to overwrite.`)
     ? `{ path = "${resolveTauriPath(tauriPath)}" }`
     : `{ version = "${resolveCurrentTauriVersion()}" }`
 
-  try {
-    removeSync(dir)
-    copyTemplates({
-      source: resolve(__dirname, '../../templates/src-tauri'),
-      scope: {
-        tauriDep
-      },
-      target: dir
-    })
-  } catch (e) {
-    if (logging) console.log(e)
-    return false
-  } finally {
-    if (logging) log('Successfully wrote src-tauri')
-  }
+  removeSync(dir)
+  copyTemplates({
+    source: resolve(__dirname, '../../templates/src-tauri'),
+    scope: {
+      tauriDep
+    },
+    target: dir
+  })
+  if (logging) log('Successfully wrote src-tauri')
 }
 
 const inject = (

+ 2 - 0
cli/tauri.js/test/jest/__tests__/tauri.spec.js

@@ -27,7 +27,9 @@ describe('[CLI] tauri.js', () => {
   it('will pass on an available command', async () => {
     jest.spyOn(console, 'log')
     jest.mock('fs')
+    try {
     tauri('init')
+    } catch {}
     expect(console.log.mock.calls[0][0].split('.')[0]).toBe('[tauri]: running init')
     jest.clearAllMocks()
   })