12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- // Copyright 2019-2023 Tauri Programme within The Commons Conservancy
- // SPDX-License-Identifier: Apache-2.0
- // SPDX-License-Identifier: MIT
- use crate::{
- helpers::{app_paths::walk_builder, npm::PackageManager},
- Result,
- };
- use std::{
- fs::{read_to_string, write},
- path::Path,
- process::Command,
- };
- const CORE_API_MODULES: &[&str] = &["dpi", "event", "path", "primitives", "window", "mocks"];
- const JS_EXTENSIONS: &[&str] = &["js", "jsx", "ts", "tsx", "mjs"];
- pub fn migrate(app_dir: &Path, tauri_dir: &Path) -> Result<()> {
- let mut new_npm_packages = Vec::new();
- let mut new_cargo_packages = Vec::new();
- let pm = PackageManager::from_project(app_dir)
- .into_iter()
- .next()
- .unwrap_or(PackageManager::Npm);
- let tauri_api_import_regex = regex::Regex::new(r"@tauri-apps/api/(\w+)").unwrap();
- for entry in walk_builder(app_dir).build().flatten() {
- if entry.file_type().map(|t| t.is_file()).unwrap_or_default() {
- let path = entry.path();
- let ext = path.extension().unwrap_or_default();
- if JS_EXTENSIONS.iter().any(|e| e == &ext) {
- let js_contents = read_to_string(path)?;
- let new_contents =
- tauri_api_import_regex.replace_all(&js_contents, |cap: ®ex::Captures<'_>| {
- let module = cap.get(1).unwrap().as_str();
- let original = cap.get(0).unwrap().as_str();
- if module == "tauri" {
- let new = "@tauri-apps/api/primitives".to_string();
- log::info!("Replacing `{original}` with `{new}` on {}", path.display());
- new
- } else if CORE_API_MODULES.contains(&module) {
- original.to_string()
- } else {
- let plugin = format!("@tauri-apps/plugin-{module}");
- log::info!(
- "Replacing `{original}` with `{plugin}` on {}",
- path.display()
- );
- new_npm_packages.push(plugin.clone());
- new_cargo_packages.push(format!(
- "tauri-plugin-{}",
- if module == "clipboard" {
- "clipboard-manager"
- } else {
- module
- }
- ));
- plugin
- }
- });
- if new_contents != js_contents {
- write(path, new_contents.as_bytes())?;
- }
- }
- }
- }
- if !new_npm_packages.is_empty() {
- log::info!(
- "Installing NPM packages for plugins: {}",
- new_npm_packages.join(", ")
- );
- pm.install(&new_npm_packages)?;
- }
- if !new_cargo_packages.is_empty() {
- log::info!(
- "Installing Cargo dependencies for plugins: {}",
- new_cargo_packages.join(", ")
- );
- Command::new("cargo")
- .arg("add")
- .args(new_cargo_packages)
- .current_dir(tauri_dir)
- .status()?;
- }
- Ok(())
- }
|