Prechádzať zdrojové kódy

fix(cli): prmpt user before install deps in init (#1381)

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
Amr Bashir 4 rokov pred
rodič
commit
5b9e08f2f4

+ 2 - 3
cli/tauri.js/src/api/dependency-manager/cargo-commands.ts

@@ -24,15 +24,14 @@ async function manageDependencies(
     } else if (managementType === ManagementType.Update) {
       const latestVersion = await getCrateLatestVersion(dependency)
       if (semverLt(currentVersion, latestVersion)) {
-        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
-        const inquired = await inquirer.prompt([
+        const inquired = (await inquirer.prompt([
           {
             type: 'confirm',
             name: 'answer',
             message: `[CARGO COMMANDS] "${dependency}" latest version is ${latestVersion}. Do you want to update?`,
             default: false
           }
-        ])
+        ])) as { answer: boolean }
         // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
         if (inquired.answer) {
           spawnSync('cargo', ['install', dependency, '--force'])

+ 2 - 4
cli/tauri.js/src/api/dependency-manager/cargo-crates.ts

@@ -69,16 +69,14 @@ async function manageDependencies(
     } else if (managementType === ManagementType.Update) {
       const latestVersion = await getCrateLatestVersion(dependency)
       if (semverLt(currentVersion, latestVersion)) {
-        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-member-access
-        const inquired = await inquirer.prompt([
+        const inquired = (await inquirer.prompt([
           {
             type: 'confirm',
             name: 'answer',
             message: `[CRATES] "${dependency}" latest version is ${latestVersion}. Do you want to update?`,
             default: false
           }
-        ])
-        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-member-access
+        ])) as { answer: boolean }
         if (inquired.answer) {
           log(`Updating ${dependency}...`)
           // eslint-disable-next-line security/detect-object-injection

+ 30 - 11
cli/tauri.js/src/api/dependency-manager/npm-packages.ts

@@ -5,7 +5,8 @@ import {
   installNpmPackage,
   installNpmDevPackage,
   updateNpmPackage,
-  semverLt
+  semverLt,
+  useYarn
 } from './util'
 import logger from '../../helpers/logger'
 import { resolve } from '../../helpers/app-paths'
@@ -38,25 +39,43 @@ async function manageDependencies(
       const currentVersion = await getNpmPackageVersion(dependency)
       if (currentVersion === null) {
         log(`Installing ${dependency}...`)
-        if (managementType === ManagementType.Install) {
-          await installNpmPackage(dependency)
-        } else if (managementType === ManagementType.InstallDev) {
-          await installNpmDevPackage(dependency)
+        if (
+          managementType === ManagementType.Install ||
+          managementType === ManagementType.InstallDev
+        ) {
+          const packageManager = (await useYarn()) ? 'YARN' : 'NPM'
+          const inquired = (await inquirer.prompt([
+            {
+              type: 'confirm',
+              name: 'answer',
+              message: `[${packageManager}]: "Do you want to install ${dependency} ${
+                managementType === ManagementType.InstallDev
+                  ? 'as dev-dependency'
+                  : ''
+              }?"`,
+              default: false
+            }
+          ])) as { answer: boolean }
+          if (inquired.answer) {
+            if (managementType === ManagementType.Install) {
+              await installNpmPackage(dependency)
+            } else if (managementType === ManagementType.InstallDev) {
+              await installNpmDevPackage(dependency)
+            }
+            installedDeps.push(dependency)
+          }
         }
-        installedDeps.push(dependency)
       } else if (managementType === ManagementType.Update) {
         const latestVersion = await getNpmLatestVersion(dependency)
         if (semverLt(currentVersion, latestVersion)) {
-          // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-member-access
-          const inquired = await inquirer.prompt([
+          const inquired = (await inquirer.prompt([
             {
               type: 'confirm',
               name: 'answer',
               message: `[NPM]: "${dependency}" latest version is ${latestVersion}. Do you want to update?`,
               default: false
             }
-          ])
-          // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-member-access
+          ])) as { answer: boolean }
           if (inquired.answer) {
             log(`Updating ${dependency}...`)
             updateNpmPackage(dependency)
@@ -78,7 +97,7 @@ async function manageDependencies(
   return result
 }
 
-const dependencies = ['tauri']
+const dependencies = ['@tauri-apps/api', '@tauri-apps/cli']
 
 async function install(): Promise<Result> {
   return await manageDependencies(ManagementType.Install, dependencies)

+ 1 - 0
cli/tauri.js/src/api/dependency-manager/util.ts

@@ -117,6 +117,7 @@ function semverLt(first: string, second: string): boolean {
 }
 
 export {
+  useYarn,
   getCrateLatestVersion,
   getNpmLatestVersion,
   getNpmPackageVersion,