-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(cli): automate API -> plugin migration (#7561)
- Loading branch information
1 parent
d010bc0
commit 8af2497
Showing
5 changed files
with
152 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
--- | ||
"tauri-cli": patch:feat | ||
"@tauri-apps/cli": patch:feat | ||
--- | ||
|
||
The `migrate` command now automatically reads all JavaScript files and updates `@tauri-apps/api` import paths and install the missing plugins. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
// 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] = &["event", "path", "tauri", "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 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(()) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters