diff --git a/.changes/config.json b/.changes/config.json
index 5792535f..f74e1a5f 100644
--- a/.changes/config.json
+++ b/.changes/config.json
@@ -88,15 +88,6 @@
"manager": "javascript-disabled"
},
- "fs-watch": {
- "path": "./plugins/fs-watch",
- "manager": "rust-disabled"
- },
- "fs-watch-js": {
- "path": "./plugins/fs-watch",
- "manager": "javascript-disabled"
- },
-
"global-shortcut": {
"path": "./plugins/global-shortcut",
"manager": "rust-disabled"
diff --git a/Cargo.lock b/Cargo.lock
index 266a3c38..7162dcc7 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3100,9 +3100,9 @@ dependencies = [
[[package]]
name = "notify"
-version = "5.1.0"
+version = "5.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58ea850aa68a06e48fdb069c0ec44d0d64c8dbffa49bf3b6f7f0a901fdea1ba9"
+checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486"
dependencies = [
"bitflags 1.3.2",
"crossbeam-channel",
@@ -3114,7 +3114,7 @@ dependencies = [
"mio",
"serde",
"walkdir",
- "windows-sys 0.42.0",
+ "windows-sys 0.45.0",
]
[[package]]
@@ -5150,23 +5150,12 @@ version = "0.0.0"
dependencies = [
"anyhow",
"glob",
- "serde",
- "tauri",
- "thiserror",
- "uuid",
-]
-
-[[package]]
-name = "tauri-plugin-fs-watch"
-version = "0.0.0"
-dependencies = [
- "log",
"notify",
"notify-debouncer-mini",
"serde",
- "serde_json",
"tauri",
"thiserror",
+ "uuid",
]
[[package]]
diff --git a/README.md b/README.md
index edeb0ac5..1fdcf447 100644
--- a/README.md
+++ b/README.md
@@ -1,21 +1,19 @@
## Plugins Found Here
-| | | Win | Mac | Lin | iOS | And |
-| ------------------------------------------ | --------------------------------------------------------- | --- | --- | --- | --- | --- |
-| [authenticator](plugins/authenticator) | Interface with hardware security keys. | ✅ | ✅ | ✅ | ? | ? |
-| [autostart](plugins/autostart) | Automatically launch your app at system startup. | ✅ | ✅ | ✅ | ? | ? |
-| [fs-extra](plugins/fs-extra) | File system methods that aren't included in the core API. | ✅ | ✅ | ✅ | ? | ? |
-| [fs-watch](plugins/fs-watch) | Watch the filesystem for changes. | ✅ | ✅ | ✅ | ? | ? |
-| [localhost](plugins/localhost) | Use a localhost server in production apps. | ✅ | ✅ | ✅ | ? | ? |
-| [log](plugins/log) | Configurable logging. | ✅ | ✅ | ✅ | ✅ | ✅ |
-| [persisted-scope](plugins/persisted-scope) | Persist runtime scope changes on the filesystem. | ✅ | ✅ | ✅ | ? | ? |
-| [positioner](plugins/positioner) | Move windows to common locations. | ✅ | ✅ | ✅ | ? | ? |
-| [single-instance](plugins/single-instance) | Ensure a single instance of your tauri app is running. | ✅ | ? | ✅ | ? | ? |
-| [sql](plugins/sql) | Interface with SQL databases. | ✅ | ✅ | ✅ | ? | ? |
-| [store](plugins/store) | Persistent key value storage. | ✅ | ✅ | ✅ | ? | ? |
-| [stronghold](plugins/stronghold) | Encrypted, secure database. | ✅ | ✅ | ✅ | ? | ? |
-| [upload](plugins/upload) | Tauri plugin for file uploads through HTTP. | ✅ | ✅ | ✅ | ? | ? |
-| [websocket](plugins/websocket) | Open a WebSocket connection using a Rust client in JS. | ✅ | ✅ | ✅ | ? | ? |
-| [window-state](plugins/window-state) | Persist window sizes and positions. | ✅ | ✅ | ✅ | ? | ? |
+| | | Win | Mac | Lin | iOS | And |
+| ------------------------------------------ | ------------------------------------------------------ | --- | --- | --- | --- | --- |
+| [authenticator](plugins/authenticator) | Interface with hardware security keys. | ✅ | ✅ | ✅ | ? | ? |
+| [autostart](plugins/autostart) | Automatically launch your app at system startup. | ✅ | ✅ | ✅ | ? | ? |
+| [localhost](plugins/localhost) | Use a localhost server in production apps. | ✅ | ✅ | ✅ | ? | ? |
+| [log](plugins/log) | Configurable logging. | ✅ | ✅ | ✅ | ✅ | ✅ |
+| [persisted-scope](plugins/persisted-scope) | Persist runtime scope changes on the filesystem. | ✅ | ✅ | ✅ | ? | ? |
+| [positioner](plugins/positioner) | Move windows to common locations. | ✅ | ✅ | ✅ | ? | ? |
+| [single-instance](plugins/single-instance) | Ensure a single instance of your tauri app is running. | ✅ | ? | ✅ | ? | ? |
+| [sql](plugins/sql) | Interface with SQL databases. | ✅ | ✅ | ✅ | ? | ? |
+| [store](plugins/store) | Persistent key value storage. | ✅ | ✅ | ✅ | ? | ? |
+| [stronghold](plugins/stronghold) | Encrypted, secure database. | ✅ | ✅ | ✅ | ? | ? |
+| [upload](plugins/upload) | Tauri plugin for file uploads through HTTP. | ✅ | ✅ | ✅ | ? | ? |
+| [websocket](plugins/websocket) | Open a WebSocket connection using a Rust client in JS. | ✅ | ✅ | ✅ | ? | ? |
+| [window-state](plugins/window-state) | Persist window sizes and positions. | ✅ | ✅ | ✅ | ? | ? |
_This repo and all plugins require a Rust version of at least **1.65**_
diff --git a/plugins/fs-watch/.gitignore b/plugins/fs-watch/.gitignore
deleted file mode 100644
index b512c09d..00000000
--- a/plugins/fs-watch/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-node_modules
\ No newline at end of file
diff --git a/plugins/fs-watch/Cargo.toml b/plugins/fs-watch/Cargo.toml
deleted file mode 100644
index 8431bae0..00000000
--- a/plugins/fs-watch/Cargo.toml
+++ /dev/null
@@ -1,19 +0,0 @@
-[package]
-name = "tauri-plugin-fs-watch"
-version = "0.0.0"
-description = "Watch files and directories for changes."
-authors.workspace = true
-license.workspace = true
-edition.workspace = true
-rust-version.workspace = true
-
-# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
-
-[dependencies]
-serde.workspace = true
-serde_json.workspace = true
-tauri.workspace = true
-log.workspace = true
-thiserror.workspace = true
-notify = { version = "5" , features = ["serde"] }
-notify-debouncer-mini = { version = "0.2.1" , features = ["serde"] }
diff --git a/plugins/fs-watch/LICENSE.spdx b/plugins/fs-watch/LICENSE.spdx
deleted file mode 100644
index cdd0df5a..00000000
--- a/plugins/fs-watch/LICENSE.spdx
+++ /dev/null
@@ -1,20 +0,0 @@
-SPDXVersion: SPDX-2.1
-DataLicense: CC0-1.0
-PackageName: tauri
-DataFormat: SPDXRef-1
-PackageSupplier: Organization: The Tauri Programme in the Commons Conservancy
-PackageHomePage: https://tauri.app
-PackageLicenseDeclared: Apache-2.0
-PackageLicenseDeclared: MIT
-PackageCopyrightText: 2019-2022, The Tauri Programme in the Commons Conservancy
-PackageSummary: Tauri is a rust project that enables developers to make secure
-and small desktop applications using a web frontend.
-
-PackageComment: The package includes the following libraries; see
-Relationship information.
-
-Created: 2019-05-20T09:00:00Z
-PackageDownloadLocation: git://github.com/tauri-apps/tauri
-PackageDownloadLocation: git+https://github.com/tauri-apps/tauri.git
-PackageDownloadLocation: git+ssh://github.com/tauri-apps/tauri.git
-Creator: Person: Daniel Thompson-Yvetot
\ No newline at end of file
diff --git a/plugins/fs-watch/LICENSE_APACHE-2.0 b/plugins/fs-watch/LICENSE_APACHE-2.0
deleted file mode 100644
index 4947287f..00000000
--- a/plugins/fs-watch/LICENSE_APACHE-2.0
+++ /dev/null
@@ -1,177 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/plugins/fs-watch/LICENSE_MIT b/plugins/fs-watch/LICENSE_MIT
deleted file mode 100644
index 4d754725..00000000
--- a/plugins/fs-watch/LICENSE_MIT
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2017 - Present Tauri Apps Contributors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
\ No newline at end of file
diff --git a/plugins/fs-watch/README.md b/plugins/fs-watch/README.md
deleted file mode 100644
index 63a154c8..00000000
--- a/plugins/fs-watch/README.md
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-Watch files and directories for changes using [notify](https://github.com/notify-rs/notify).
-
-## Install
-
-_This plugin requires a Rust version of at least **1.65**_
-
-There are three general methods of installation that we can recommend.
-
-1. Use crates.io and npm (easiest, and requires you to trust that our publishing pipeline worked)
-2. Pull sources directly from Github using git tags / revision hashes (most secure)
-3. Git submodule install this repo in your tauri project and then use file protocol to ingest the source (most secure, but inconvenient to use)
-
-Install the Core plugin by adding the following to your `Cargo.toml` file:
-
-`src-tauri/Cargo.toml`
-
-```toml
-[dependencies]
-tauri-plugin-fs-watch = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }
-```
-
-You can install the JavaScript Guest bindings using your preferred JavaScript package manager:
-
-> Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use.
-
-```sh
-pnpm add https://github.com/tauri-apps/tauri-plugin-fs-watch#v2
-# or
-npm add https://github.com/tauri-apps/tauri-plugin-fs-watch#v2
-# or
-yarn add https://github.com/tauri-apps/tauri-plugin-fs-watch#v2
-```
-
-## Usage
-
-First you need to register the core plugin with Tauri:
-
-`src-tauri/src/main.rs`
-
-```rust
-fn main() {
- tauri::Builder::default()
- .plugin(tauri_plugin_fs_watch::init())
- .run(tauri::generate_context!())
- .expect("error while running tauri application");
-}
-```
-
-Afterwards all the plugin's APIs are available through the JavaScript guest bindings:
-
-```javascript
-import { watch, watchImmediate } from "@tauri-apps/plugin-fs-watch";
-
-// can also watch an array of paths
-const stopWatching = await watch(
- "/path/to/something",
- (event) => {
- const { type, payload } = event;
- },
- { recursive: true }
-);
-
-const stopRawWatcher = await watchImmediate(
- ["/path/a", "/path/b"],
- (event) => {
- const { path, operation, cookie } = event;
- },
- {}
-);
-```
-
-## Contributing
-
-PRs accepted. Please make sure to read the Contributing Guide before making a pull request.
-
-## License
-
-Code: (c) 2015 - Present - The Tauri Programme within The Commons Conservancy.
-
-MIT or MIT/Apache 2.0 where applicable.
diff --git a/plugins/fs-watch/banner.png b/plugins/fs-watch/banner.png
deleted file mode 100644
index 6e77fe16..00000000
Binary files a/plugins/fs-watch/banner.png and /dev/null differ
diff --git a/plugins/fs-watch/guest-js/index.ts b/plugins/fs-watch/guest-js/index.ts
deleted file mode 100644
index 2aa58b0c..00000000
--- a/plugins/fs-watch/guest-js/index.ts
+++ /dev/null
@@ -1,135 +0,0 @@
-import { invoke, transformCallback } from "@tauri-apps/api/tauri";
-
-export interface WatchOptions {
- recursive?: boolean;
-}
-
-export interface DebouncedWatchOptions extends WatchOptions {
- delayMs?: number;
-}
-
-export type RawEvent = {
- type: RawEventKind;
- paths: string[];
- attrs: unknown;
-};
-
-type RawEventKind =
- | "any "
- | {
- access?: unknown;
- }
- | {
- create?: unknown;
- }
- | {
- modify?: unknown;
- }
- | {
- remove?: unknown;
- }
- | "other";
-
-export type DebouncedEvent =
- | { kind: "any"; path: string }
- | { kind: "AnyContinous"; path: string };
-
-async function unwatch(id: number): Promise {
- await invoke("plugin:fs-watch|unwatch", { id });
-}
-
-// TODO: use channel from @tauri-apps/api on v2
-class Channel {
- id: number;
- // @ts-expect-error field used by the IPC serializer
- private readonly __TAURI_CHANNEL_MARKER__ = true;
- #onmessage: (response: T) => void = () => {
- // no-op
- };
-
- constructor() {
- this.id = transformCallback((response: T) => {
- this.#onmessage(response);
- });
- }
-
- set onmessage(handler: (response: T) => void) {
- this.#onmessage = handler;
- }
-
- get onmessage(): (response: T) => void {
- return this.#onmessage;
- }
-
- toJSON(): string {
- return `__CHANNEL__:${this.id}`;
- }
-}
-
-export async function watch(
- paths: string | string[],
- cb: (event: DebouncedEvent) => void,
- options: DebouncedWatchOptions = {}
-): Promise<() => void> {
- const opts = {
- recursive: false,
- delayMs: 2000,
- ...options,
- };
- let watchPaths;
- if (typeof paths === "string") {
- watchPaths = [paths];
- } else {
- watchPaths = paths;
- }
-
- const id = window.crypto.getRandomValues(new Uint32Array(1))[0];
-
- const onEvent = new Channel();
- onEvent.onmessage = cb;
-
- await invoke("plugin:fs-watch|watch", {
- id,
- paths: watchPaths,
- options: opts,
- onEvent,
- });
-
- return () => {
- void unwatch(id);
- };
-}
-
-export async function watchImmediate(
- paths: string | string[],
- cb: (event: RawEvent) => void,
- options: WatchOptions = {}
-): Promise<() => void> {
- const opts = {
- recursive: false,
- ...options,
- delayMs: null,
- };
- let watchPaths;
- if (typeof paths === "string") {
- watchPaths = [paths];
- } else {
- watchPaths = paths;
- }
-
- const id = window.crypto.getRandomValues(new Uint32Array(1))[0];
-
- const onEvent = new Channel();
- onEvent.onmessage = cb;
-
- await invoke("plugin:fs-watch|watch", {
- id,
- paths: watchPaths,
- options: opts,
- onEvent,
- });
-
- return () => {
- void unwatch(id);
- };
-}
diff --git a/plugins/fs-watch/package.json b/plugins/fs-watch/package.json
deleted file mode 100644
index e5c0bb7a..00000000
--- a/plugins/fs-watch/package.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "@tauri-apps/plugin-fs-watch",
- "version": "0.0.0",
- "description": "Watch files and directories for changes.",
- "license": "MIT or APACHE-2.0",
- "authors": [
- "Tauri Programme within The Commons Conservancy"
- ],
- "type": "module",
- "browser": "dist-js/index.min.js",
- "module": "dist-js/index.mjs",
- "types": "dist-js/index.d.ts",
- "exports": {
- "import": "./dist-js/index.mjs",
- "types": "./dist-js/index.d.ts",
- "browser": "./dist-js/index.min.js"
- },
- "scripts": {
- "build": "rollup -c"
- },
- "files": [
- "dist-js",
- "!dist-js/**/*.map",
- "README.md",
- "LICENSE"
- ],
- "devDependencies": {
- "tslib": "^2.5.0"
- },
- "dependencies": {
- "@tauri-apps/api": "^1.2.0"
- }
-}
diff --git a/plugins/fs-watch/rollup.config.mjs b/plugins/fs-watch/rollup.config.mjs
deleted file mode 100644
index 6555e98b..00000000
--- a/plugins/fs-watch/rollup.config.mjs
+++ /dev/null
@@ -1,11 +0,0 @@
-import { readFileSync } from "fs";
-
-import { createConfig } from "../../shared/rollup.config.mjs";
-
-export default createConfig({
- input: "guest-js/index.ts",
- pkg: JSON.parse(
- readFileSync(new URL("./package.json", import.meta.url), "utf8")
- ),
- external: [/^@tauri-apps\/api/],
-});
diff --git a/plugins/fs-watch/tsconfig.json b/plugins/fs-watch/tsconfig.json
deleted file mode 120000
index 7cd38da8..00000000
--- a/plugins/fs-watch/tsconfig.json
+++ /dev/null
@@ -1 +0,0 @@
-../../shared/tsconfig.json
\ No newline at end of file
diff --git a/plugins/fs/Cargo.toml b/plugins/fs/Cargo.toml
index bb3980b6..9ec49e97 100644
--- a/plugins/fs/Cargo.toml
+++ b/plugins/fs/Cargo.toml
@@ -16,3 +16,8 @@ thiserror.workspace = true
anyhow = "1"
uuid = { version = "1", features = ["v4"] }
glob = "0.3"
+notify = { version = "5", optional = true, features = ["serde"] }
+notify-debouncer-mini = { version = "0.2.1", optional = true, features = ["serde"] }
+
+[features]
+watch = ["notify", "notify-debouncer-mini"]
diff --git a/plugins/fs/src/error.rs b/plugins/fs/src/error.rs
index 9af56db3..e627b458 100644
--- a/plugins/fs/src/error.rs
+++ b/plugins/fs/src/error.rs
@@ -13,6 +13,10 @@ pub enum Error {
/// Invalid glob pattern.
#[error("invalid glob pattern: {0}")]
GlobPattern(#[from] glob::PatternError),
+ /// Watcher error.
+ #[cfg(feature = "watch")]
+ #[error(transparent)]
+ Watch(#[from] notify::Error),
}
impl Serialize for Error {
diff --git a/plugins/fs/src/lib.rs b/plugins/fs/src/lib.rs
index 737189d5..023d04e6 100644
--- a/plugins/fs/src/lib.rs
+++ b/plugins/fs/src/lib.rs
@@ -12,6 +12,8 @@ mod commands;
mod config;
mod error;
mod scope;
+#[cfg(feature = "watch")]
+mod watcher;
pub use config::Config;
pub use error::Error;
@@ -47,7 +49,11 @@ pub fn init() -> TauriPlugin> {
commands::remove_file,
commands::rename_file,
commands::exists,
- commands::metadata
+ commands::metadata,
+ #[cfg(feature = "watch")]
+ watcher::watch,
+ #[cfg(feature = "watch")]
+ watcher::unwatch
])
.setup(|app: &tauri::AppHandle, api| {
let default_scope = FsScope::default();
@@ -58,6 +64,10 @@ pub fn init() -> TauriPlugin> {
.map(|c| &c.scope)
.unwrap_or(&default_scope),
)?);
+
+ #[cfg(feature = "watch")]
+ app.manage(watcher::WatcherCollection::default());
+
Ok(())
})
.on_event(|app, event| {
diff --git a/plugins/fs-watch/src/lib.rs b/plugins/fs/src/watcher.rs
similarity index 72%
rename from plugins/fs-watch/src/lib.rs
rename to plugins/fs/src/watcher.rs
index d0a9f783..79cb34a2 100644
--- a/plugins/fs-watch/src/lib.rs
+++ b/plugins/fs/src/watcher.rs
@@ -1,12 +1,9 @@
use notify::{Config, Event, RecommendedWatcher, RecursiveMode, Watcher};
use notify_debouncer_mini::{new_debouncer, DebounceEventResult, Debouncer};
-use serde::{ser::Serializer, Deserialize, Serialize};
-use tauri::{
- api::ipc::Channel,
- command,
- plugin::{Builder as PluginBuilder, TauriPlugin},
- Manager, Runtime, State,
-};
+use serde::Deserialize;
+use tauri::{api::ipc::Channel, command, Runtime, State};
+
+use crate::Result;
use std::{
collections::HashMap,
@@ -19,26 +16,10 @@ use std::{
time::Duration,
};
-type Result = std::result::Result;
type Id = u32;
-#[derive(Debug, thiserror::Error)]
-pub enum Error {
- #[error(transparent)]
- Watch(#[from] notify::Error),
-}
-
-impl Serialize for Error {
- fn serialize(&self, serializer: S) -> std::result::Result
- where
- S: Serializer,
- {
- serializer.serialize_str(self.to_string().as_ref())
- }
-}
-
#[derive(Default)]
-struct WatcherCollection(Mutex)>>);
+pub struct WatcherCollection(Mutex)>>);
enum WatcherKind {
Debouncer(Debouncer),
@@ -69,13 +50,13 @@ fn watch_debounced(on_event: Channel, rx: Receiver,
recursive: bool,
}
#[command]
-async fn watch(
+pub async fn watch(
watchers: State<'_, WatcherCollection>,
id: Id,
paths: Vec,
@@ -113,7 +94,7 @@ async fn watch(
}
#[command]
-async fn unwatch(watchers: State<'_, WatcherCollection>, id: Id) -> Result<()> {
+pub async fn unwatch(watchers: State<'_, WatcherCollection>, id: Id) -> Result<()> {
if let Some((watcher, paths)) = watchers.0.lock().unwrap().remove(&id) {
match watcher {
WatcherKind::Debouncer(mut debouncer) => {
@@ -130,13 +111,3 @@ async fn unwatch(watchers: State<'_, WatcherCollection>, id: Id) -> Result<()> {
}
Ok(())
}
-
-pub fn init() -> TauriPlugin {
- PluginBuilder::new("fs-watch")
- .invoke_handler(tauri::generate_handler![watch, unwatch])
- .setup(|app, _api| {
- app.manage(WatcherCollection::default());
- Ok(())
- })
- .build()
-}
diff --git a/plugins/http/README.md b/plugins/http/README.md
index de55e8dd..729cedfa 100644
--- a/plugins/http/README.md
+++ b/plugins/http/README.md
@@ -18,7 +18,7 @@ Install the Core plugin by adding the following to your `Cargo.toml` file:
```toml
[dependencies]
-tauri-plugin-fs-extra = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }
+tauri-plugin-http = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }
```
You can install the JavaScript Guest bindings using your preferred JavaScript package manager:
diff --git a/plugins/mirrors.txt b/plugins/mirrors.txt
index c785da72..c441d95e 100644
--- a/plugins/mirrors.txt
+++ b/plugins/mirrors.txt
@@ -4,7 +4,6 @@ cli
clipboard
dialog
fs
-fs-watch
global-shortcut
http
localhost
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 15858968..dceddd2f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -58,9 +58,6 @@ importers:
'@tauri-apps/cli':
specifier: 2.0.0-alpha.8
version: 2.0.0-alpha.8
- '@zerodevx/svelte-json-view':
- specifier: 0.2.1
- version: 0.2.1
'@tauri-apps/plugin-app':
specifier: 0.0.0
version: link:../../plugins/app
@@ -100,6 +97,9 @@ importers:
'@tauri-apps/plugin-window':
specifier: 0.0.0
version: link:../../plugins/window
+ '@zerodevx/svelte-json-view':
+ specifier: 0.2.1
+ version: 0.2.1
devDependencies:
'@iconify-json/codicon':
specifier: ^1.1.10
@@ -193,16 +193,6 @@ importers:
specifier: ^2.4.1
version: 2.4.1
- plugins/fs-watch:
- dependencies:
- '@tauri-apps/api':
- specifier: ^1.2.0
- version: 1.2.0
- devDependencies:
- tslib:
- specifier: ^2.5.0
- version: 2.5.0
-
plugins/global-shortcut:
dependencies:
'@tauri-apps/api':