diff --git a/.changes/tauri-init-fix.md b/.changes/tauri-init-fix.md new file mode 100644 index 000000000..e7c668b65 --- /dev/null +++ b/.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. diff --git a/cli/tauri.js/src/template/index.ts b/cli/tauri.js/src/template/index.ts index 0acc2d7b8..30a947bc9 100644 --- a/cli/tauri.js/src/template/index.ts +++ b/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 = ( diff --git a/cli/tauri.js/test/jest/__tests__/tauri.spec.js b/cli/tauri.js/test/jest/__tests__/tauri.spec.js index e161f3613..412bbe3b1 100644 --- a/cli/tauri.js/test/jest/__tests__/tauri.spec.js +++ b/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() })