From f6f7730fe3a91b8049e8e1ca401409f56edb28e0 Mon Sep 17 00:00:00 2001 From: Jason Terando Date: Fri, 20 Sep 2024 09:04:04 -0500 Subject: [PATCH 1/9] Add supoprt for clipboard-rs 0.2.1 fix for Linux clipboard read timeout removal --- Cargo.toml | 4 +- examples/demo/package.json | 2 +- .../demo/src-tauri/capabilities/default.json | 12 +- package.json | 2 +- permissions/autogenerated/reference.md | 2 +- permissions/schemas/schema.json | 342 ++++++------------ src/desktop.rs | 14 + 7 files changed, 136 insertions(+), 242 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index cc39ccf..66556f7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ serde = "1.0" thiserror = "1.0" base64 = "0.22.1" image = "0.25.1" -clipboard-rs = "0.2.0" +clipboard-rs = "0.2.1" [build-dependencies] -tauri-plugin = { version = "2.0.0-beta.15", features = ["build"] } +tauri-plugin = { version = "2.0.0-beta", features = ["build"] } diff --git a/examples/demo/package.json b/examples/demo/package.json index e55813f..2bdf4f8 100644 --- a/examples/demo/package.json +++ b/examples/demo/package.json @@ -37,7 +37,7 @@ "type": "module", "dependencies": { "@floating-ui/dom": "1.5.3", - "@tauri-apps/api": "2.0.0-beta.11", + "@tauri-apps/api": "^2.0.0-beta", "tauri-plugin-clipboard-api": "link:../../" } } \ No newline at end of file diff --git a/examples/demo/src-tauri/capabilities/default.json b/examples/demo/src-tauri/capabilities/default.json index 5448344..daee6e1 100644 --- a/examples/demo/src-tauri/capabilities/default.json +++ b/examples/demo/src-tauri/capabilities/default.json @@ -6,15 +6,9 @@ "main" ], "permissions": [ - "path:default", - "event:default", - "window:default", - "webview:default", - "app:default", - "resources:default", - "image:default", - "menu:default", - "tray:default", + "core:event:default", + "core:path:default", + "core:window:default", "clipboard:read-all", "clipboard:write-all", "clipboard:monitor-all" diff --git a/package.json b/package.json index e32b206..8991dd3 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "peerDependencies": {}, "dependencies": { "valibot": "^0.40.0", - "@tauri-apps/api": "2.0.0-beta.11" + "@tauri-apps/api": "^2.0.0-beta" }, "devDependencies": { "@rollup/plugin-terser": "^0.4.4", diff --git a/permissions/autogenerated/reference.md b/permissions/autogenerated/reference.md index c89da59..3204e0a 100644 --- a/permissions/autogenerated/reference.md +++ b/permissions/autogenerated/reference.md @@ -1,5 +1,5 @@ -### Permission Table +## Permission Table diff --git a/permissions/schemas/schema.json b/permissions/schemas/schema.json index 1d207a8..f572389 100644 --- a/permissions/schemas/schema.json +++ b/permissions/schemas/schema.json @@ -295,403 +295,289 @@ "type": "string", "oneOf": [ { - "description": "allow-available-types -> Enables the available_types command without any pre-configured scope.", + "description": "Enables the available_types command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-available-types" - ] + "const": "allow-available-types" }, { - "description": "deny-available-types -> Denies the available_types command without any pre-configured scope.", + "description": "Denies the available_types command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-available-types" - ] + "const": "deny-available-types" }, { - "description": "allow-clear -> Enables the clear command without any pre-configured scope.", + "description": "Enables the clear command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-clear" - ] + "const": "allow-clear" }, { - "description": "deny-clear -> Denies the clear command without any pre-configured scope.", + "description": "Denies the clear command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-clear" - ] + "const": "deny-clear" }, { - "description": "allow-execute -> Enables the execute command without any pre-configured scope.", + "description": "Enables the execute command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-execute" - ] + "const": "allow-execute" }, { - "description": "deny-execute -> Denies the execute command without any pre-configured scope.", + "description": "Denies the execute command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-execute" - ] + "const": "deny-execute" }, { - "description": "allow-has-files -> Enables the has_files command without any pre-configured scope.", + "description": "Enables the has_files command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-has-files" - ] + "const": "allow-has-files" }, { - "description": "deny-has-files -> Denies the has_files command without any pre-configured scope.", + "description": "Denies the has_files command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-has-files" - ] + "const": "deny-has-files" }, { - "description": "allow-has-html -> Enables the has_html command without any pre-configured scope.", + "description": "Enables the has_html command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-has-html" - ] + "const": "allow-has-html" }, { - "description": "deny-has-html -> Denies the has_html command without any pre-configured scope.", + "description": "Denies the has_html command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-has-html" - ] + "const": "deny-has-html" }, { - "description": "allow-has-image -> Enables the has_image command without any pre-configured scope.", + "description": "Enables the has_image command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-has-image" - ] + "const": "allow-has-image" }, { - "description": "deny-has-image -> Denies the has_image command without any pre-configured scope.", + "description": "Denies the has_image command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-has-image" - ] + "const": "deny-has-image" }, { - "description": "allow-has-rtf -> Enables the has_rtf command without any pre-configured scope.", + "description": "Enables the has_rtf command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-has-rtf" - ] + "const": "allow-has-rtf" }, { - "description": "deny-has-rtf -> Denies the has_rtf command without any pre-configured scope.", + "description": "Denies the has_rtf command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-has-rtf" - ] + "const": "deny-has-rtf" }, { - "description": "allow-has-text -> Enables the has_text command without any pre-configured scope.", + "description": "Enables the has_text command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-has-text" - ] + "const": "allow-has-text" }, { - "description": "deny-has-text -> Denies the has_text command without any pre-configured scope.", + "description": "Denies the has_text command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-has-text" - ] + "const": "deny-has-text" }, { - "description": "allow-is-monitor-running -> Enables the is_monitor_running command without any pre-configured scope.", + "description": "Enables the is_monitor_running command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-is-monitor-running" - ] + "const": "allow-is-monitor-running" }, { - "description": "deny-is-monitor-running -> Denies the is_monitor_running command without any pre-configured scope.", + "description": "Denies the is_monitor_running command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-is-monitor-running" - ] + "const": "deny-is-monitor-running" }, { - "description": "allow-ping -> Enables the ping command without any pre-configured scope.", + "description": "Enables the ping command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-ping" - ] + "const": "allow-ping" }, { - "description": "deny-ping -> Denies the ping command without any pre-configured scope.", + "description": "Denies the ping command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-ping" - ] + "const": "deny-ping" }, { - "description": "allow-read-files -> Enables the read_files command without any pre-configured scope.", + "description": "Enables the read_files command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-read-files" - ] + "const": "allow-read-files" }, { - "description": "deny-read-files -> Denies the read_files command without any pre-configured scope.", + "description": "Denies the read_files command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-read-files" - ] + "const": "deny-read-files" }, { - "description": "allow-read-files-uris -> Enables the read_files_uris command without any pre-configured scope.", + "description": "Enables the read_files_uris command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-read-files-uris" - ] + "const": "allow-read-files-uris" }, { - "description": "deny-read-files-uris -> Denies the read_files_uris command without any pre-configured scope.", + "description": "Denies the read_files_uris command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-read-files-uris" - ] + "const": "deny-read-files-uris" }, { - "description": "allow-read-html -> Enables the read_html command without any pre-configured scope.", + "description": "Enables the read_html command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-read-html" - ] + "const": "allow-read-html" }, { - "description": "deny-read-html -> Denies the read_html command without any pre-configured scope.", + "description": "Denies the read_html command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-read-html" - ] + "const": "deny-read-html" }, { - "description": "allow-read-image-base64 -> Enables the read_image_base64 command without any pre-configured scope.", + "description": "Enables the read_image_base64 command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-read-image-base64" - ] + "const": "allow-read-image-base64" }, { - "description": "deny-read-image-base64 -> Denies the read_image_base64 command without any pre-configured scope.", + "description": "Denies the read_image_base64 command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-read-image-base64" - ] + "const": "deny-read-image-base64" }, { - "description": "allow-read-image-binary -> Enables the read_image_binary command without any pre-configured scope.", + "description": "Enables the read_image_binary command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-read-image-binary" - ] + "const": "allow-read-image-binary" }, { - "description": "deny-read-image-binary -> Denies the read_image_binary command without any pre-configured scope.", + "description": "Denies the read_image_binary command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-read-image-binary" - ] + "const": "deny-read-image-binary" }, { - "description": "allow-read-rtf -> Enables the read_rtf command without any pre-configured scope.", + "description": "Enables the read_rtf command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-read-rtf" - ] + "const": "allow-read-rtf" }, { - "description": "deny-read-rtf -> Denies the read_rtf command without any pre-configured scope.", + "description": "Denies the read_rtf command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-read-rtf" - ] + "const": "deny-read-rtf" }, { - "description": "allow-read-text -> Enables the read_text command without any pre-configured scope.", + "description": "Enables the read_text command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-read-text" - ] + "const": "allow-read-text" }, { - "description": "deny-read-text -> Denies the read_text command without any pre-configured scope.", + "description": "Denies the read_text command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-read-text" - ] + "const": "deny-read-text" }, { - "description": "allow-start-monitor -> Enables the start_monitor command without any pre-configured scope.", + "description": "Enables the start_monitor command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-start-monitor" - ] + "const": "allow-start-monitor" }, { - "description": "deny-start-monitor -> Denies the start_monitor command without any pre-configured scope.", + "description": "Denies the start_monitor command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-start-monitor" - ] + "const": "deny-start-monitor" }, { - "description": "allow-stop-monitor -> Enables the stop_monitor command without any pre-configured scope.", + "description": "Enables the stop_monitor command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-stop-monitor" - ] + "const": "allow-stop-monitor" }, { - "description": "deny-stop-monitor -> Denies the stop_monitor command without any pre-configured scope.", + "description": "Denies the stop_monitor command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-stop-monitor" - ] + "const": "deny-stop-monitor" }, { - "description": "allow-write-files -> Enables the write_files command without any pre-configured scope.", + "description": "Enables the write_files command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-write-files" - ] + "const": "allow-write-files" }, { - "description": "deny-write-files -> Denies the write_files command without any pre-configured scope.", + "description": "Denies the write_files command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-write-files" - ] + "const": "deny-write-files" }, { - "description": "allow-write-files-uris -> Enables the write_files_uris command without any pre-configured scope.", + "description": "Enables the write_files_uris command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-write-files-uris" - ] + "const": "allow-write-files-uris" }, { - "description": "deny-write-files-uris -> Denies the write_files_uris command without any pre-configured scope.", + "description": "Denies the write_files_uris command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-write-files-uris" - ] + "const": "deny-write-files-uris" }, { - "description": "allow-write-html -> Enables the write_html command without any pre-configured scope.", + "description": "Enables the write_html command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-write-html" - ] + "const": "allow-write-html" }, { - "description": "deny-write-html -> Denies the write_html command without any pre-configured scope.", + "description": "Denies the write_html command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-write-html" - ] + "const": "deny-write-html" }, { - "description": "allow-write-html-and-text -> Enables the write_html_and_text command without any pre-configured scope.", + "description": "Enables the write_html_and_text command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-write-html-and-text" - ] + "const": "allow-write-html-and-text" }, { - "description": "deny-write-html-and-text -> Denies the write_html_and_text command without any pre-configured scope.", + "description": "Denies the write_html_and_text command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-write-html-and-text" - ] + "const": "deny-write-html-and-text" }, { - "description": "allow-write-image-base64 -> Enables the write_image_base64 command without any pre-configured scope.", + "description": "Enables the write_image_base64 command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-write-image-base64" - ] + "const": "allow-write-image-base64" }, { - "description": "deny-write-image-base64 -> Denies the write_image_base64 command without any pre-configured scope.", + "description": "Denies the write_image_base64 command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-write-image-base64" - ] + "const": "deny-write-image-base64" }, { - "description": "allow-write-image-binary -> Enables the write_image_binary command without any pre-configured scope.", + "description": "Enables the write_image_binary command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-write-image-binary" - ] + "const": "allow-write-image-binary" }, { - "description": "deny-write-image-binary -> Denies the write_image_binary command without any pre-configured scope.", + "description": "Denies the write_image_binary command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-write-image-binary" - ] + "const": "deny-write-image-binary" }, { - "description": "allow-write-rtf -> Enables the write_rtf command without any pre-configured scope.", + "description": "Enables the write_rtf command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-write-rtf" - ] + "const": "allow-write-rtf" }, { - "description": "deny-write-rtf -> Denies the write_rtf command without any pre-configured scope.", + "description": "Denies the write_rtf command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-write-rtf" - ] + "const": "deny-write-rtf" }, { - "description": "allow-write-text -> Enables the write_text command without any pre-configured scope.", + "description": "Enables the write_text command without any pre-configured scope.", "type": "string", - "enum": [ - "allow-write-text" - ] + "const": "allow-write-text" }, { - "description": "deny-write-text -> Denies the write_text command without any pre-configured scope.", + "description": "Denies the write_text command without any pre-configured scope.", "type": "string", - "enum": [ - "deny-write-text" - ] + "const": "deny-write-text" }, { - "description": "monitor-all -> This enables all monitor related commands", + "description": "This enables all monitor related commands", "type": "string", - "enum": [ - "monitor-all" - ] + "const": "monitor-all" }, { - "description": "read-all -> This enables all read related commands to clipboard", + "description": "This enables all read related commands to clipboard", "type": "string", - "enum": [ - "read-all" - ] + "const": "read-all" }, { - "description": "write-all -> This enables all write related commands to clipboard", + "description": "This enables all write related commands to clipboard", "type": "string", - "enum": [ - "write-all" - ] + "const": "write-all" } ] } diff --git a/src/desktop.rs b/src/desktop.rs index fe9ed89..2024ee1 100644 --- a/src/desktop.rs +++ b/src/desktop.rs @@ -9,6 +9,20 @@ use serde::{de::DeserializeOwned, Deserialize, Serialize}; use std::sync::{Arc, Mutex}; use tauri::{plugin::PluginApi, AppHandle, Emitter, Runtime}; +#[cfg(target_os = "linux")] +pub fn init(_api: PluginApi) -> crate::Result { + use clipboard_rs::ClipboardContextX11Options; + + Ok(Clipboard { + clipboard: Arc::new(Mutex::new( + ClipboardRsContext::new_with_options(ClipboardContextX11Options { read_timeout: None }) + .unwrap(), + )), + watcher_shutdown: Arc::default(), + }) +} + +#[cfg(not(target_os = "linux"))] pub fn init(_api: PluginApi) -> crate::Result { Ok(Clipboard { clipboard: Arc::new(Mutex::new(ClipboardRsContext::new().unwrap())), From 2c073504d817a1b84b5e6b88cf2d6ce02f33e7d8 Mon Sep 17 00:00:00 2001 From: Jason Terando Date: Fri, 20 Sep 2024 13:33:54 -0500 Subject: [PATCH 2/9] Available types performance tweaks --- .../demo/src/lib/components/listener.svelte | 16 +++--- src/desktop.rs | 49 ++++++++++++++----- 2 files changed, 45 insertions(+), 20 deletions(-) diff --git a/examples/demo/src/lib/components/listener.svelte b/examples/demo/src/lib/components/listener.svelte index 3ebdf9f..4ec84a6 100644 --- a/examples/demo/src/lib/components/listener.svelte +++ b/examples/demo/src/lib/components/listener.svelte @@ -29,6 +29,7 @@ let unlistenImageUpdate: UnlistenFn; let unlistenHtmlUpdate: UnlistenFn; let unlistenRTF: UnlistenFn; + let unlistenAvail: UnlistenFn; let unlistenClipboard: () => Promise; let unlistenFiles: UnlistenFn; const has = { @@ -65,14 +66,14 @@ }); unlistenClipboard = await startListening(); - onClipboardUpdate(async () => { + unlistenAvail = await onClipboardUpdate(async (values) => { clear(); - has.hasHTML = await hasHTML(); - has.hasImage = await hasImage(); - has.hasText = await hasText(); - has.hasRTF = await hasRTF(); - has.hasFiles = await hasFiles(); - console.log('plugin:clipboard://clipboard-monitor/update event received'); + has.hasHTML = values.payload.html; + has.hasImage = values.payload.image; + has.hasText = values.payload.text; + has.hasRTF = values.payload.rtf + has.hasFiles = values.payload.files; + console.log('plugin:clipboard://clipboard-monitor/update event received', values.payload); }); }); @@ -86,6 +87,7 @@ if (unlistenHtmlUpdate) unlistenHtmlUpdate(); if (unlistenFiles) unlistenFiles(); if (unlistenClipboard) unlistenClipboard(); + if (unlistenAvail) unlistenAvail(); }); diff --git a/src/desktop.rs b/src/desktop.rs index 2024ee1..f441cca 100644 --- a/src/desktop.rs +++ b/src/desktop.rs @@ -30,7 +30,7 @@ pub fn init(_api: PluginApi) -> crate::Re }) } -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug, Serialize, Deserialize, Clone)] pub struct AvailableTypes { pub text: bool, pub html: bool, @@ -44,6 +44,7 @@ pub struct Clipboard { pub clipboard: Arc>, pub watcher_shutdown: Arc>>, } + impl Clipboard { pub fn has(&self, format: ContentFormat) -> Result { Ok(self @@ -54,12 +55,14 @@ impl Clipboard { } pub fn available_types(&self) -> Result { + let locked = self.clipboard.lock().map_err(|err| err.to_string())?; + Ok(AvailableTypes { - text: self.has(ContentFormat::Text)?, - html: self.has(ContentFormat::Html)?, - rtf: self.has(ContentFormat::Rtf)?, - image: self.has(ContentFormat::Image)?, - files: self.has(ContentFormat::Files)?, + text: locked.has(ContentFormat::Text), + html: locked.has(ContentFormat::Html), + rtf: locked.has(ContentFormat::Rtf), + image: locked.has(ContentFormat::Image), + files: locked.has(ContentFormat::Files), }) } @@ -264,7 +267,7 @@ impl Clipboard { pub fn start_monitor(&self, app_handle: AppHandle) -> Result<(), String> { let _ = app_handle.emit("plugin:clipboard://clipboard-monitor/status", true); - let clipboard = ClipboardMonitor::new(app_handle); + let clipboard = ClipboardMonitor::new(app_handle, self.clipboard.clone()); let mut watcher: ClipboardWatcherContext> = ClipboardWatcherContext::new().unwrap(); let watcher_shutdown = watcher.add_handler(clipboard).get_shutdown_channel(); @@ -299,14 +302,21 @@ where R: Runtime, { app_handle: tauri::AppHandle, + clipboard_ctx: Arc>, } impl ClipboardMonitor where R: Runtime, { - pub fn new(app_handle: tauri::AppHandle) -> Self { - Self { app_handle } + pub fn new( + app_handle: tauri::AppHandle, + clipboard_ctx: Arc>, + ) -> Self { + Self { + app_handle, + clipboard_ctx, + } } } @@ -315,9 +325,22 @@ where R: Runtime, { fn on_clipboard_change(&mut self) { - let _ = self.app_handle.emit( - "plugin:clipboard://clipboard-monitor/update", - "clipboard update", - ); + match self.clipboard_ctx.lock() { + Ok(locked) => { + let _ = self.app_handle.emit( + "plugin:clipboard://clipboard-monitor/update", + AvailableTypes { + text: locked.has(ContentFormat::Text), + html: locked.has(ContentFormat::Html), + rtf: locked.has(ContentFormat::Rtf), + image: locked.has(ContentFormat::Image), + files: locked.has(ContentFormat::Files), + }, + ); + } + Err(err) => { + println!("Error accessing clipboard: {}", err); + } + } } } From c5bf16abb5edabc2fc60f0be5241bddb4e299cd8 Mon Sep 17 00:00:00 2001 From: Jason Terando Date: Sat, 21 Sep 2024 08:28:07 -0500 Subject: [PATCH 3/9] Add TypeScript binding for updated onClipboardUpdate event --- guest-js/api.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/guest-js/api.ts b/guest-js/api.ts index 15e4ee7..b98ebb8 100644 --- a/guest-js/api.ts +++ b/guest-js/api.ts @@ -48,6 +48,14 @@ export const ClipboardChangedFilesPayloadSchema = v.object({ }) export type ClipboardChangedPayload = v.InferOutput +export interface ClipboardState { + text: boolean, + html: boolean, + rtf: boolean, + image: boolean, + files: boolean, +} + export function hasText() { return invoke(HAS_TEXT_COMMAND) } @@ -333,13 +341,13 @@ export function listenToClipboard( /** * This listen to clipboard monitor update event, and trigger the callback function. - * However from this event we don't know whether it's text or image, no real data is returned. - * Use with listenToClipboard function. * @param cb callback * @returns unlisten function */ -export function onClipboardUpdate(cb: () => void) { - return listen(MONITOR_UPDATE_EVENT, cb) +export async function onClipboardUpdate(cb: (state: ClipboardState) => void) { + return await listen(MONITOR_UPDATE_EVENT, (event) => { + cb(event.payload) + }) } export async function onTextUpdate(cb: (text: string) => void): Promise { From ce3d3d7b0eaa89aadc8e40ff96b5209f46b974d6 Mon Sep 17 00:00:00 2001 From: Jason Terando Date: Sat, 21 Sep 2024 08:55:16 -0500 Subject: [PATCH 4/9] Temp workaround to allow upstream yarn build --- zzz_pnpm-lock.yaml | 445 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 445 insertions(+) create mode 100644 zzz_pnpm-lock.yaml diff --git a/zzz_pnpm-lock.yaml b/zzz_pnpm-lock.yaml new file mode 100644 index 0000000..532c81b --- /dev/null +++ b/zzz_pnpm-lock.yaml @@ -0,0 +1,445 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@tauri-apps/api': + specifier: 2.0.0-beta.11 + version: 2.0.0-beta.11 + valibot: + specifier: ^0.36.0 + version: 0.36.0 + devDependencies: + '@rollup/plugin-terser': + specifier: ^0.4.4 + version: 0.4.4(rollup@4.17.2) + '@rollup/plugin-typescript': + specifier: ^11.1.6 + version: 11.1.6(rollup@4.17.2)(tslib@2.6.2)(typescript@5.4.5) + rollup: + specifier: ^4.9.6 + version: 4.17.2 + tslib: + specifier: ^2.6.2 + version: 2.6.2 + typescript: + specifier: ^5.3.3 + version: 5.4.5 + +packages: + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@rollup/plugin-terser@0.4.4': + resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-typescript@11.1.6': + resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.14.0||^3.0.0||^4.0.0 + tslib: '*' + typescript: '>=3.7.0' + peerDependenciesMeta: + rollup: + optional: true + tslib: + optional: true + + '@rollup/pluginutils@5.1.0': + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.17.2': + resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.17.2': + resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.17.2': + resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.17.2': + resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.17.2': + resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.17.2': + resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.17.2': + resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.17.2': + resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': + resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.17.2': + resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.17.2': + resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.17.2': + resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.17.2': + resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.17.2': + resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.17.2': + resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.17.2': + resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==} + cpu: [x64] + os: [win32] + + '@tauri-apps/api@2.0.0-beta.11': + resolution: {integrity: sha512-wJRY+fBUm3KpqZDHMIz5HRv+1vlnvRJ/dFxiyY3NlINTx2qXqDou5qWYcP1CuZXsd39InWVPV3FAZvno/kGCkA==} + engines: {node: '>= 18', npm: '>= 6.6.0', yarn: '>= 1.19.1'} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + rollup@4.17.2: + resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + smob@1.5.0: + resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + terser@5.31.3: + resolution: {integrity: sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==} + engines: {node: '>=10'} + hasBin: true + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + + valibot@0.36.0: + resolution: {integrity: sha512-CjF1XN4sUce8sBK9TixrDqFM7RwNkuXdJu174/AwmQUB62QbCQADg5lLe8ldBalFgtj1uKj+pKwDJiNo4Mn+eQ==} + +snapshots: + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@rollup/plugin-terser@0.4.4(rollup@4.17.2)': + dependencies: + serialize-javascript: 6.0.2 + smob: 1.5.0 + terser: 5.31.3 + optionalDependencies: + rollup: 4.17.2 + + '@rollup/plugin-typescript@11.1.6(rollup@4.17.2)(tslib@2.6.2)(typescript@5.4.5)': + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.17.2) + resolve: 1.22.8 + typescript: 5.4.5 + optionalDependencies: + rollup: 4.17.2 + tslib: 2.6.2 + + '@rollup/pluginutils@5.1.0(rollup@4.17.2)': + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 4.17.2 + + '@rollup/rollup-android-arm-eabi@4.17.2': + optional: true + + '@rollup/rollup-android-arm64@4.17.2': + optional: true + + '@rollup/rollup-darwin-arm64@4.17.2': + optional: true + + '@rollup/rollup-darwin-x64@4.17.2': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.17.2': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.17.2': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.17.2': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.17.2': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.17.2': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.17.2': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.17.2': + optional: true + + '@rollup/rollup-linux-x64-musl@4.17.2': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.17.2': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.17.2': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.17.2': + optional: true + + '@tauri-apps/api@2.0.0-beta.11': {} + + '@types/estree@1.0.5': {} + + acorn@8.12.1: {} + + buffer-from@1.1.2: {} + + commander@2.20.3: {} + + estree-walker@2.0.2: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + is-core-module@2.13.1: + dependencies: + hasown: 2.0.2 + + path-parse@1.0.7: {} + + picomatch@2.3.1: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + resolve@1.22.8: + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + rollup@4.17.2: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.17.2 + '@rollup/rollup-android-arm64': 4.17.2 + '@rollup/rollup-darwin-arm64': 4.17.2 + '@rollup/rollup-darwin-x64': 4.17.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.17.2 + '@rollup/rollup-linux-arm-musleabihf': 4.17.2 + '@rollup/rollup-linux-arm64-gnu': 4.17.2 + '@rollup/rollup-linux-arm64-musl': 4.17.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2 + '@rollup/rollup-linux-riscv64-gnu': 4.17.2 + '@rollup/rollup-linux-s390x-gnu': 4.17.2 + '@rollup/rollup-linux-x64-gnu': 4.17.2 + '@rollup/rollup-linux-x64-musl': 4.17.2 + '@rollup/rollup-win32-arm64-msvc': 4.17.2 + '@rollup/rollup-win32-ia32-msvc': 4.17.2 + '@rollup/rollup-win32-x64-msvc': 4.17.2 + fsevents: 2.3.3 + + safe-buffer@5.2.1: {} + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + smob@1.5.0: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + supports-preserve-symlinks-flag@1.0.0: {} + + terser@5.31.3: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.12.1 + commander: 2.20.3 + source-map-support: 0.5.21 + + tslib@2.6.2: {} + + typescript@5.4.5: {} + + valibot@0.36.0: {} From 3368d0b81487db5ae3b7d2c264a3935473256090 Mon Sep 17 00:00:00 2001 From: Jason Terando Date: Sat, 21 Sep 2024 08:56:39 -0500 Subject: [PATCH 5/9] Temp workaround to allow upstream yarn build --- pnpm-lock.yaml | 445 ------------------------------------------------- 1 file changed, 445 deletions(-) delete mode 100644 pnpm-lock.yaml diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 532c81b..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,445 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@tauri-apps/api': - specifier: 2.0.0-beta.11 - version: 2.0.0-beta.11 - valibot: - specifier: ^0.36.0 - version: 0.36.0 - devDependencies: - '@rollup/plugin-terser': - specifier: ^0.4.4 - version: 0.4.4(rollup@4.17.2) - '@rollup/plugin-typescript': - specifier: ^11.1.6 - version: 11.1.6(rollup@4.17.2)(tslib@2.6.2)(typescript@5.4.5) - rollup: - specifier: ^4.9.6 - version: 4.17.2 - tslib: - specifier: ^2.6.2 - version: 2.6.2 - typescript: - specifier: ^5.3.3 - version: 5.4.5 - -packages: - - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@rollup/plugin-terser@0.4.4': - resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-typescript@11.1.6': - resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.14.0||^3.0.0||^4.0.0 - tslib: '*' - typescript: '>=3.7.0' - peerDependenciesMeta: - rollup: - optional: true - tslib: - optional: true - - '@rollup/pluginutils@5.1.0': - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/rollup-android-arm-eabi@4.17.2': - resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.17.2': - resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.17.2': - resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.17.2': - resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-linux-arm-gnueabihf@4.17.2': - resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.17.2': - resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.17.2': - resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.17.2': - resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': - resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.17.2': - resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.17.2': - resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.17.2': - resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.17.2': - resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.17.2': - resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.17.2': - resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.17.2': - resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==} - cpu: [x64] - os: [win32] - - '@tauri-apps/api@2.0.0-beta.11': - resolution: {integrity: sha512-wJRY+fBUm3KpqZDHMIz5HRv+1vlnvRJ/dFxiyY3NlINTx2qXqDou5qWYcP1CuZXsd39InWVPV3FAZvno/kGCkA==} - engines: {node: '>= 18', npm: '>= 6.6.0', yarn: '>= 1.19.1'} - - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} - engines: {node: '>=0.4.0'} - hasBin: true - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - - rollup@4.17.2: - resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - - smob@1.5.0: - resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - terser@5.31.3: - resolution: {integrity: sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==} - engines: {node: '>=10'} - hasBin: true - - tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - - typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} - engines: {node: '>=14.17'} - hasBin: true - - valibot@0.36.0: - resolution: {integrity: sha512-CjF1XN4sUce8sBK9TixrDqFM7RwNkuXdJu174/AwmQUB62QbCQADg5lLe8ldBalFgtj1uKj+pKwDJiNo4Mn+eQ==} - -snapshots: - - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/source-map@0.3.6': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@rollup/plugin-terser@0.4.4(rollup@4.17.2)': - dependencies: - serialize-javascript: 6.0.2 - smob: 1.5.0 - terser: 5.31.3 - optionalDependencies: - rollup: 4.17.2 - - '@rollup/plugin-typescript@11.1.6(rollup@4.17.2)(tslib@2.6.2)(typescript@5.4.5)': - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.17.2) - resolve: 1.22.8 - typescript: 5.4.5 - optionalDependencies: - rollup: 4.17.2 - tslib: 2.6.2 - - '@rollup/pluginutils@5.1.0(rollup@4.17.2)': - dependencies: - '@types/estree': 1.0.5 - estree-walker: 2.0.2 - picomatch: 2.3.1 - optionalDependencies: - rollup: 4.17.2 - - '@rollup/rollup-android-arm-eabi@4.17.2': - optional: true - - '@rollup/rollup-android-arm64@4.17.2': - optional: true - - '@rollup/rollup-darwin-arm64@4.17.2': - optional: true - - '@rollup/rollup-darwin-x64@4.17.2': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.17.2': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.17.2': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.17.2': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.17.2': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.17.2': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.17.2': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.17.2': - optional: true - - '@rollup/rollup-linux-x64-musl@4.17.2': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.17.2': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.17.2': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.17.2': - optional: true - - '@tauri-apps/api@2.0.0-beta.11': {} - - '@types/estree@1.0.5': {} - - acorn@8.12.1: {} - - buffer-from@1.1.2: {} - - commander@2.20.3: {} - - estree-walker@2.0.2: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - is-core-module@2.13.1: - dependencies: - hasown: 2.0.2 - - path-parse@1.0.7: {} - - picomatch@2.3.1: {} - - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 - - resolve@1.22.8: - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - rollup@4.17.2: - dependencies: - '@types/estree': 1.0.5 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.17.2 - '@rollup/rollup-android-arm64': 4.17.2 - '@rollup/rollup-darwin-arm64': 4.17.2 - '@rollup/rollup-darwin-x64': 4.17.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.17.2 - '@rollup/rollup-linux-arm-musleabihf': 4.17.2 - '@rollup/rollup-linux-arm64-gnu': 4.17.2 - '@rollup/rollup-linux-arm64-musl': 4.17.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2 - '@rollup/rollup-linux-riscv64-gnu': 4.17.2 - '@rollup/rollup-linux-s390x-gnu': 4.17.2 - '@rollup/rollup-linux-x64-gnu': 4.17.2 - '@rollup/rollup-linux-x64-musl': 4.17.2 - '@rollup/rollup-win32-arm64-msvc': 4.17.2 - '@rollup/rollup-win32-ia32-msvc': 4.17.2 - '@rollup/rollup-win32-x64-msvc': 4.17.2 - fsevents: 2.3.3 - - safe-buffer@5.2.1: {} - - serialize-javascript@6.0.2: - dependencies: - randombytes: 2.1.0 - - smob@1.5.0: {} - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - supports-preserve-symlinks-flag@1.0.0: {} - - terser@5.31.3: - dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.12.1 - commander: 2.20.3 - source-map-support: 0.5.21 - - tslib@2.6.2: {} - - typescript@5.4.5: {} - - valibot@0.36.0: {} From cf4a0e4506902179047e5ea090116760e5bd2b44 Mon Sep 17 00:00:00 2001 From: Jason Terando Date: Sat, 21 Sep 2024 09:02:17 -0500 Subject: [PATCH 6/9] More temp workarounds to allow upstream yarn build incompatibility with pnpm --- dist-js/api.d.ts | 195 ++++++++++++++ dist-js/api.d.ts.map | 1 + dist-js/index.cjs | 583 +++++++++++++++++++++++++++++++++++++++++ dist-js/index.d.ts | 3 + dist-js/index.d.ts.map | 1 + dist-js/index.js | 482 ++++++++++++++++++++++++++++++++++ 6 files changed, 1265 insertions(+) create mode 100644 dist-js/api.d.ts create mode 100644 dist-js/api.d.ts.map create mode 100644 dist-js/index.cjs create mode 100644 dist-js/index.d.ts create mode 100644 dist-js/index.d.ts.map create mode 100644 dist-js/index.js diff --git a/dist-js/api.d.ts b/dist-js/api.d.ts new file mode 100644 index 0000000..fb436e0 --- /dev/null +++ b/dist-js/api.d.ts @@ -0,0 +1,195 @@ +import * as v from "valibot"; +import { UnlistenFn } from "@tauri-apps/api/event"; +export declare const START_MONITOR_COMMAND: string; +export declare const STOP_MONITOR_COMMAND: string; +export declare const SOMETHING_CHANGED: string; +export declare const TEXT_CHANGED: string; +export declare const HTML_CHANGED: string; +export declare const RTF_CHANGED: string; +export declare const FILES_CHANGED: string; +export declare const IMAGE_CHANGED: string; +export declare const IMAGE_BINARY_CHANGED: string; +export declare const IS_MONITOR_RUNNING_COMMAND: string; +export declare const HAS_TEXT_COMMAND: string; +export declare const HAS_IMAGE_COMMAND: string; +export declare const HAS_HTML_COMMAND: string; +export declare const HAS_RTF_COMMAND: string; +export declare const HAS_FILES_COMMAND: string; +export declare const AVAILABLE_TYPES_COMMAND: string; +export declare const WRITE_TEXT_COMMAND: string; +export declare const WRITE_HTML_COMMAND: string; +export declare const WRITE_HTML_AND_TEXT_COMMAND: string; +export declare const WRITE_RTF_COMMAND: string; +export declare const WRITE_FILES_URIS_COMMAND: string; +export declare const WRITE_FILES_COMMAND: string; +export declare const CLEAR_COMMAND: string; +export declare const READ_TEXT_COMMAND: string; +export declare const READ_HTML_COMMAND: string; +export declare const READ_RTF_COMMAND: string; +export declare const READ_FILES_COMMAND: string; +export declare const READ_FILES_URIS_COMMAND: string; +export declare const READ_IMAGE_BINARY_COMMAND: string; +export declare const READ_IMAGE_BASE64_COMMAND: string; +export declare const WRITE_IMAGE_BINARY_COMMAND: string; +export declare const WRITE_IMAGE_BASE64_COMMAND: string; +export declare const CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT: string; +export declare const MONITOR_UPDATE_EVENT: string; +export declare const ClipboardChangedPayloadSchema: v.ObjectSchema<{ + readonly value: v.StringSchema; +}, undefined>; +export declare const ClipboardBinaryChangedPayloadSchema: v.ObjectSchema<{ + readonly value: v.ArraySchema, undefined>; +}, undefined>; +export declare const ClipboardChangedFilesPayloadSchema: v.ObjectSchema<{ + readonly value: v.ArraySchema, undefined>; +}, undefined>; +export type ClipboardChangedPayload = v.InferOutput; +export interface ClipboardState { + text: boolean; + html: boolean; + rtf: boolean; + image: boolean; + files: boolean; +} +export declare function hasText(): Promise; +export declare function hasHTML(): Promise; +export declare function hasRTF(): Promise; +export declare function hasImage(): Promise; +export declare function hasFiles(): Promise; +export declare function writeText(text: string): Promise; +export declare function writeHtml(html: string): Promise; +/** + * Write html and text to clipboard. + * writeHtml API only writes html, readText will return nothing. + * This API writes both html and text, so readText will return the text. + */ +export declare function writeHtmlAndText(html: string, text: string): Promise; +export declare function writeRtf(rtf: string): Promise; +export declare function writeFilesURIs(filesUris: string[]): Promise; +export declare function writeFiles(filesPaths: string[]): Promise; +export declare function clear(): Promise; +export declare function readText(): Promise; +export declare function readHtml(): Promise; +export declare function readRtf(): Promise; +export declare function readFiles(): Promise; +export declare function readFilesURIs(): Promise; +/** + * read clipboard image + * @returns image in base64 string + */ +export declare function readImageBase64(): Promise; +/** + * Read clipboard image, get the data in binary format + * int_array (Array) is received from Tauri core, Uint8Array and Blob are transformed from int_array + * @param format data type of returned value, "int_array" is the fastest + * @returns + */ +export declare function readImageBinary(format: "int_array" | "Uint8Array" | "Blob"): Promise; +export declare function convertIntArrToUint8Array(intArr: number[]): Uint8Array; +export declare function convertUint8ArrayToBlob(uintArr: Uint8Array): Blob; +/** + * Here is the transformation flow, + * read clipboard image as Array (int_array) -> int_array -> Uint8Array -> Blob -> ObjectURL + * There are many layers which could make this function slow for large images. + * @returns ObjectURL for clipboard image + */ +export declare function readImageObjectURL(): Promise; +/** + * write image to clipboard + * @param data image data in base64 encoded string + * @returns Promise + */ +export declare function writeImageBase64(base64: string): Promise; +export declare function writeImageBinary(bytes: number[]): Promise; +/** + * @deprecated since version v0.5.x + * Brute force listen to clipboard text update. + * Detect update by comparing current value with previous value every delay ms. + * When there is a update, "plugin:clipboard://text-changed" is emitted. + * You still need to listen to the event. + * + * @param delay check interval delay + * @returns a stop running function that can be called when component unmounts + */ +export declare function startBruteForceTextMonitor(delay?: number): () => void; +/** + * @deprecated since version v0.5.x + * Brute force monitor clipboard image update by comparing current value with previous value. + * When there is a update, "plugin:clipboard://image-changed" is emitted. + * You still need to listen to the event. + * + * @param delay check interval delay + * @returns stop running function that can be called to stop the monitor + */ +export declare function startBruteForceImageMonitor(delay?: number): () => void; +export type UpdatedTypes = { + text?: boolean; + html?: boolean; + rtf?: boolean; + image?: boolean; + imageBinary?: boolean; + files?: boolean; +}; +export type AvailableTypes = { + text: boolean; + html: boolean; + rtf: boolean; + image: boolean; + files: boolean; +}; +export declare function getAvailableTypes(): Promise; +/** + * Listen to "plugin:clipboard://clipboard-monitor/update" from Tauri core. + * The corresponding clipboard type event will be emitted when there is clipboard update. + * @param listenTypes types of clipboard data to listen to + * @returns unlisten function + */ +export declare function listenToClipboard(listenTypes?: UpdatedTypes): Promise; +/** + * This listen to clipboard monitor update event, and trigger the callback function. + * @param cb callback + * @returns unlisten function + */ +export declare function onClipboardUpdate(cb: (state: ClipboardState) => void): Promise; +export declare function onTextUpdate(cb: (text: string) => void): Promise; +/** + * Listen to clipboard update event and get the updated types in a callback. + * This listener tells you what types of data are updated. + * This relies on `listenToClipboard()` who emits events this function listens to. + * You can run `listenToClipboard()` or `startListening()` before calling this function. + * When HTML is copied, this will be passed to callback: {files: false, image: false, html: true, rtf: false, text: true} + * @param cb + * @returns + */ +export declare function onSomethingUpdate(cb: (updatedTypes: UpdatedTypes) => void): Promise; +export declare function onHTMLUpdate(cb: (text: string) => void): Promise; +export declare function onRTFUpdate(cb: (text: string) => void): Promise; +export declare function onFilesUpdate(cb: (files: string[]) => void): Promise; +export declare function onImageUpdate(cb: (base64ImageStr: string) => void): Promise; +export declare function onImageBinaryUpdate(cb: (image: number[]) => void): Promise; +/** + * Used to check the status of clipboard monitor + * @returns Whether the monitor is running + */ +export declare function isMonitorRunning(): Promise; +/** + * Start running mointor thread in Tauri core. This feature is added in v0.5.x. + * Before v0.5.x, the monitor is started during setup when app starts. + * After v0.5.x, this function must be called first to start monitor. + * After monitor is started, events "plugin:clipboard://clipboard-monitor/update" will be emitted when there is clipboard update. + * "plugin:clipboard://clipboard-monitor/status" event is also emitted when monitor status updates + * Still have to listen to these events. + */ +export declare function startMonitor(): Promise; +/** + * Stop clipboard monitor thread. + */ +export declare function stopMonitor(): Promise; +/** + * Listen to monitor status update. Instead of calling isMonitorRunning to get status of monitor, + * "plugin:clipboard://clipboard-monitor/status" event is emitted from Tauri core when monitor status updates. + * @param cb callback to be called when there is monitor status update + */ +export declare function listenToMonitorStatusUpdate(cb: (running: boolean) => void): Promise; +export declare function startListening(listenTypes?: UpdatedTypes): Promise<() => Promise>; +//# sourceMappingURL=api.d.ts.map \ No newline at end of file diff --git a/dist-js/api.d.ts.map b/dist-js/api.d.ts.map new file mode 100644 index 0000000..e7b8c64 --- /dev/null +++ b/dist-js/api.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../guest-js/api.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist-js/index.cjs b/dist-js/index.cjs new file mode 100644 index 0000000..2e6ccb4 --- /dev/null +++ b/dist-js/index.cjs @@ -0,0 +1,583 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var v = require('valibot'); +var core = require('@tauri-apps/api/core'); +var event = require('@tauri-apps/api/event'); + +function _interopNamespaceDefault(e) { + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { return e[k]; } + }); + } + }); + } + n.default = e; + return Object.freeze(n); +} + +var v__namespace = /*#__PURE__*/_interopNamespaceDefault(v); + +const buildCmd = (cmd) => `plugin:clipboard|${cmd}`; +const buildEventUrl = (event) => `plugin:clipboard://${event}`; +const START_MONITOR_COMMAND = buildCmd("start_monitor"); +const STOP_MONITOR_COMMAND = buildCmd("stop_monitor"); +const SOMETHING_CHANGED = buildEventUrl("something-changed"); +const TEXT_CHANGED = buildEventUrl("text-changed"); +const HTML_CHANGED = buildEventUrl("html-changed"); +const RTF_CHANGED = buildEventUrl("rtf-changed"); +const FILES_CHANGED = buildEventUrl("files-changed"); +const IMAGE_CHANGED = buildEventUrl("image-changed"); +const IMAGE_BINARY_CHANGED = buildEventUrl("image-changed-binary"); +const IS_MONITOR_RUNNING_COMMAND = buildCmd("is_monitor_running"); +const HAS_TEXT_COMMAND = buildCmd("has_text"); +const HAS_IMAGE_COMMAND = buildCmd("has_image"); +const HAS_HTML_COMMAND = buildCmd("has_html"); +const HAS_RTF_COMMAND = buildCmd("has_rtf"); +const HAS_FILES_COMMAND = buildCmd("has_files"); +const AVAILABLE_TYPES_COMMAND = buildCmd("available_types"); +const WRITE_TEXT_COMMAND = buildCmd("write_text"); +const WRITE_HTML_COMMAND = buildCmd("write_html"); +const WRITE_HTML_AND_TEXT_COMMAND = buildCmd("write_html_and_text"); +const WRITE_RTF_COMMAND = buildCmd("write_rtf"); +const WRITE_FILES_URIS_COMMAND = buildCmd("write_files_uris"); +const WRITE_FILES_COMMAND = buildCmd("write_files"); +const CLEAR_COMMAND = buildCmd("clear"); +const READ_TEXT_COMMAND = buildCmd("read_text"); +const READ_HTML_COMMAND = buildCmd("read_html"); +const READ_RTF_COMMAND = buildCmd("read_rtf"); +const READ_FILES_COMMAND = buildCmd("read_files"); +const READ_FILES_URIS_COMMAND = buildCmd("read_files_uris"); +const READ_IMAGE_BINARY_COMMAND = buildCmd("read_image_binary"); +const READ_IMAGE_BASE64_COMMAND = buildCmd("read_image_base64"); +const WRITE_IMAGE_BINARY_COMMAND = buildCmd("write_image_binary"); +const WRITE_IMAGE_BASE64_COMMAND = buildCmd("write_image_base64"); +const CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT = buildEventUrl("clipboard-monitor/status"); +const MONITOR_UPDATE_EVENT = buildEventUrl("clipboard-monitor/update"); +const ClipboardChangedPayloadSchema = v__namespace.object({ value: v__namespace.string() }); +const ClipboardBinaryChangedPayloadSchema = v__namespace.object({ + value: v__namespace.array(v__namespace.number()) +}); +const ClipboardChangedFilesPayloadSchema = v__namespace.object({ + value: v__namespace.array(v__namespace.string()) +}); +function hasText() { + return core.invoke(HAS_TEXT_COMMAND); +} +function hasHTML() { + return core.invoke(HAS_HTML_COMMAND); +} +function hasRTF() { + return core.invoke(HAS_RTF_COMMAND); +} +function hasImage() { + return core.invoke(HAS_IMAGE_COMMAND); +} +function hasFiles() { + return core.invoke(HAS_FILES_COMMAND); +} +function writeText(text) { + return core.invoke(WRITE_TEXT_COMMAND, { text }); +} +function writeHtml(html) { + return core.invoke(WRITE_HTML_COMMAND, { html }); +} +/** + * Write html and text to clipboard. + * writeHtml API only writes html, readText will return nothing. + * This API writes both html and text, so readText will return the text. + */ +function writeHtmlAndText(html, text) { + return core.invoke(WRITE_HTML_AND_TEXT_COMMAND, { html, text }); +} +function writeRtf(rtf) { + return core.invoke(WRITE_RTF_COMMAND, { rtf }); +} +function writeFilesURIs(filesUris) { + return core.invoke(WRITE_FILES_URIS_COMMAND, { filesUris }); +} +function writeFiles(filesPaths) { + return core.invoke(WRITE_FILES_COMMAND, { filesPaths }); +} +function clear() { + return core.invoke(CLEAR_COMMAND); +} +function readText() { + return core.invoke(READ_TEXT_COMMAND); +} +function readHtml() { + return core.invoke(READ_HTML_COMMAND); +} +function readRtf() { + return core.invoke(READ_RTF_COMMAND); +} +function readFiles() { + return core.invoke(READ_FILES_COMMAND); +} +function readFilesURIs() { + return core.invoke(READ_FILES_URIS_COMMAND); +} +/** + * read clipboard image + * @returns image in base64 string + */ +function readImageBase64() { + return core.invoke(READ_IMAGE_BASE64_COMMAND); +} +// export const readImageBase64 = readImage; +/** + * Read clipboard image, get the data in binary format + * int_array (Array) is received from Tauri core, Uint8Array and Blob are transformed from int_array + * @param format data type of returned value, "int_array" is the fastest + * @returns + */ +function readImageBinary(format) { + return core.invoke(READ_IMAGE_BINARY_COMMAND).then((img_arr) => { + switch (format) { + case "int_array": + return img_arr; + case "Uint8Array": + return new Uint8Array(img_arr); + case "Blob": + return new Blob([new Uint8Array(img_arr)]); + default: + return img_arr; + } + }); +} +function convertIntArrToUint8Array(intArr) { + return new Uint8Array(intArr); +} +function convertUint8ArrayToBlob(uintArr) { + return new Blob([uintArr]); +} +/** + * Here is the transformation flow, + * read clipboard image as Array (int_array) -> int_array -> Uint8Array -> Blob -> ObjectURL + * There are many layers which could make this function slow for large images. + * @returns ObjectURL for clipboard image + */ +function readImageObjectURL() { + return readImageBinary("Blob").then((blob) => { + return URL.createObjectURL(blob); + }); +} +/** + * write image to clipboard + * @param data image data in base64 encoded string + * @returns Promise + */ +function writeImageBase64(base64) { + return core.invoke(WRITE_IMAGE_BASE64_COMMAND, { base64Image: base64 }); +} +function writeImageBinary(bytes) { + return core.invoke(WRITE_IMAGE_BINARY_COMMAND, { bytes: bytes }); +} +/** + * @deprecated since version v0.5.x + * Brute force listen to clipboard text update. + * Detect update by comparing current value with previous value every delay ms. + * When there is a update, "plugin:clipboard://text-changed" is emitted. + * You still need to listen to the event. + * + * @param delay check interval delay + * @returns a stop running function that can be called when component unmounts + */ +function startBruteForceTextMonitor(delay = 500) { + let prevText = ""; + let active = true; // whether the listener should be running + setTimeout(async function x() { + try { + const text = await readText(); + if (prevText !== text) { + await event.emit(TEXT_CHANGED, { value: text }); + } + prevText = text; + } + catch (error) { } + if (active) + setTimeout(x, delay); + }, delay); + return function () { + active = false; + }; +} +/** + * @deprecated since version v0.5.x + * Brute force monitor clipboard image update by comparing current value with previous value. + * When there is a update, "plugin:clipboard://image-changed" is emitted. + * You still need to listen to the event. + * + * @param delay check interval delay + * @returns stop running function that can be called to stop the monitor + */ +function startBruteForceImageMonitor(delay = 1000) { + let prevImg = ""; + let active = true; // whether the listener should be running + setTimeout(async function x() { + try { + const img = await readImageBase64(); + if (prevImg !== img) { + await event.emit(IMAGE_CHANGED, { value: img }); + } + prevImg = img; + } + catch (error) { + // ! when there is no image in clipboard, there may be error thrown, we ignore the error + } + if (active) + setTimeout(x, delay); + }, delay); + return function () { + active = false; + }; +} +function getAvailableTypes() { + return core.invoke(AVAILABLE_TYPES_COMMAND); +} +/** + * Listen to "plugin:clipboard://clipboard-monitor/update" from Tauri core. + * The corresponding clipboard type event will be emitted when there is clipboard update. + * @param listenTypes types of clipboard data to listen to + * @returns unlisten function + */ +function listenToClipboard(listenTypes = { + text: true, + html: true, + rtf: true, + image: true, + imageBinary: false, + files: true +}) { + return event.listen(MONITOR_UPDATE_EVENT, async (e) => { + if (e.payload === "clipboard update") { + const hasData = await Promise.all([hasFiles(), hasImage(), hasHTML(), hasRTF(), hasText()]); + const flags = { + files: hasData[0], + image: hasData[1], + imageBinary: hasData[1], + html: hasData[2], + rtf: hasData[3], + text: hasData[4] + }; + await event.emit(SOMETHING_CHANGED, flags); + if (listenTypes.files && flags.files) { + const files = await readFiles(); + if (files && files.length > 0) { + await event.emit(FILES_CHANGED, { value: files }); + } + // flags.files = true; + return; // ! this return is necessary, copying files also update clipboard text, but we don't want text update to be triggered + } + if (listenTypes.image && flags.image) { + const img = await readImageBase64(); + if (img) + await event.emit(IMAGE_CHANGED, { value: img }); + // flags.image = true; + } + if (listenTypes.imageBinary && flags.imageBinary) { + const img = await readImageBinary("int_array"); + if (img) + await event.emit(IMAGE_BINARY_CHANGED, { value: img }); + // flags.imageBinary = true; + } + if (listenTypes.html && flags.html) { + await event.emit(HTML_CHANGED, { value: await readHtml() }); + // flags.html = true; + } + if (listenTypes.rtf && flags.rtf) { + await event.emit(RTF_CHANGED, { value: await readRtf() }); + // flags.rtf = true; + } + if (listenTypes.text && flags.text) { + await event.emit(TEXT_CHANGED, { value: await readText() }); + // flags.text = true; + } + // when clear() is called, this error is thrown, let ignore it + // if (!success) { + // throw new Error("Unexpected Error: No proper clipboard type"); + // } + } + }); +} +/** + * This listen to clipboard monitor update event, and trigger the callback function. + * @param cb callback + * @returns unlisten function + */ +async function onClipboardUpdate(cb) { + return await event.listen(MONITOR_UPDATE_EVENT, (event) => { + cb(event.payload); + }); +} +async function onTextUpdate(cb) { + return await event.listen(TEXT_CHANGED, (event) => { + const text = v__namespace.parse(ClipboardChangedPayloadSchema, event.payload).value; + cb(text); + }); +} +/** + * Listen to clipboard update event and get the updated types in a callback. + * This listener tells you what types of data are updated. + * This relies on `listenToClipboard()` who emits events this function listens to. + * You can run `listenToClipboard()` or `startListening()` before calling this function. + * When HTML is copied, this will be passed to callback: {files: false, image: false, html: true, rtf: false, text: true} + * @param cb + * @returns + */ +function onSomethingUpdate(cb) { + return event.listen(SOMETHING_CHANGED, (event) => { + cb(event.payload); + }); +} +function onHTMLUpdate(cb) { + return event.listen(HTML_CHANGED, (event) => { + const text = v__namespace.parse(ClipboardChangedPayloadSchema, event.payload).value; + cb(text); + }); +} +function onRTFUpdate(cb) { + return event.listen(RTF_CHANGED, (event) => { + const text = v__namespace.parse(ClipboardChangedPayloadSchema, event.payload).value; + cb(text); + }); +} +function onFilesUpdate(cb) { + return event.listen(FILES_CHANGED, (event) => { + const files = v__namespace.parse(ClipboardChangedFilesPayloadSchema, event.payload).value; + cb(files); + }); +} +function onImageUpdate(cb) { + return event.listen(IMAGE_CHANGED, (event) => { + const base64ImageStr = v__namespace.parse(ClipboardChangedPayloadSchema, event.payload).value; + cb(base64ImageStr); + }); +} +function onImageBinaryUpdate(cb) { + return event.listen(IMAGE_BINARY_CHANGED, (event) => { + cb(v__namespace.parse(ClipboardBinaryChangedPayloadSchema, event.payload).value); + }); +} +/** + * Used to check the status of clipboard monitor + * @returns Whether the monitor is running + */ +function isMonitorRunning() { + return core.invoke(IS_MONITOR_RUNNING_COMMAND).then((res) => v__namespace.parse(v__namespace.boolean(), res)); +} +/** + * Start running mointor thread in Tauri core. This feature is added in v0.5.x. + * Before v0.5.x, the monitor is started during setup when app starts. + * After v0.5.x, this function must be called first to start monitor. + * After monitor is started, events "plugin:clipboard://clipboard-monitor/update" will be emitted when there is clipboard update. + * "plugin:clipboard://clipboard-monitor/status" event is also emitted when monitor status updates + * Still have to listen to these events. + */ +function startMonitor() { + return core.invoke(START_MONITOR_COMMAND); +} +/** + * Stop clipboard monitor thread. + */ +function stopMonitor() { + return core.invoke(STOP_MONITOR_COMMAND); +} +/** + * Listen to monitor status update. Instead of calling isMonitorRunning to get status of monitor, + * "plugin:clipboard://clipboard-monitor/status" event is emitted from Tauri core when monitor status updates. + * @param cb callback to be called when there is monitor status update + */ +async function listenToMonitorStatusUpdate(cb) { + return await event.listen(CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT, (event) => { + const newStatus = v__namespace.parse(v__namespace.boolean(), event.payload); + cb(newStatus); + }); +} +function startListening(listenTypes = { + text: true, + html: true, + rtf: true, + image: true, + imageBinary: false, + files: true +}) { + return startMonitor() + .then(() => listenToClipboard(listenTypes)) + .then((unlistenClipboard) => { + // return an unlisten function that stop listening to clipboard update and stop the monitor + return async () => { + unlistenClipboard(); + await stopMonitor(); + }; + }); +} + +var api = /*#__PURE__*/Object.freeze({ + __proto__: null, + AVAILABLE_TYPES_COMMAND: AVAILABLE_TYPES_COMMAND, + CLEAR_COMMAND: CLEAR_COMMAND, + CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT: CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT, + ClipboardBinaryChangedPayloadSchema: ClipboardBinaryChangedPayloadSchema, + ClipboardChangedFilesPayloadSchema: ClipboardChangedFilesPayloadSchema, + ClipboardChangedPayloadSchema: ClipboardChangedPayloadSchema, + FILES_CHANGED: FILES_CHANGED, + HAS_FILES_COMMAND: HAS_FILES_COMMAND, + HAS_HTML_COMMAND: HAS_HTML_COMMAND, + HAS_IMAGE_COMMAND: HAS_IMAGE_COMMAND, + HAS_RTF_COMMAND: HAS_RTF_COMMAND, + HAS_TEXT_COMMAND: HAS_TEXT_COMMAND, + HTML_CHANGED: HTML_CHANGED, + IMAGE_BINARY_CHANGED: IMAGE_BINARY_CHANGED, + IMAGE_CHANGED: IMAGE_CHANGED, + IS_MONITOR_RUNNING_COMMAND: IS_MONITOR_RUNNING_COMMAND, + MONITOR_UPDATE_EVENT: MONITOR_UPDATE_EVENT, + READ_FILES_COMMAND: READ_FILES_COMMAND, + READ_FILES_URIS_COMMAND: READ_FILES_URIS_COMMAND, + READ_HTML_COMMAND: READ_HTML_COMMAND, + READ_IMAGE_BASE64_COMMAND: READ_IMAGE_BASE64_COMMAND, + READ_IMAGE_BINARY_COMMAND: READ_IMAGE_BINARY_COMMAND, + READ_RTF_COMMAND: READ_RTF_COMMAND, + READ_TEXT_COMMAND: READ_TEXT_COMMAND, + RTF_CHANGED: RTF_CHANGED, + SOMETHING_CHANGED: SOMETHING_CHANGED, + START_MONITOR_COMMAND: START_MONITOR_COMMAND, + STOP_MONITOR_COMMAND: STOP_MONITOR_COMMAND, + TEXT_CHANGED: TEXT_CHANGED, + WRITE_FILES_COMMAND: WRITE_FILES_COMMAND, + WRITE_FILES_URIS_COMMAND: WRITE_FILES_URIS_COMMAND, + WRITE_HTML_AND_TEXT_COMMAND: WRITE_HTML_AND_TEXT_COMMAND, + WRITE_HTML_COMMAND: WRITE_HTML_COMMAND, + WRITE_IMAGE_BASE64_COMMAND: WRITE_IMAGE_BASE64_COMMAND, + WRITE_IMAGE_BINARY_COMMAND: WRITE_IMAGE_BINARY_COMMAND, + WRITE_RTF_COMMAND: WRITE_RTF_COMMAND, + WRITE_TEXT_COMMAND: WRITE_TEXT_COMMAND, + clear: clear, + convertIntArrToUint8Array: convertIntArrToUint8Array, + convertUint8ArrayToBlob: convertUint8ArrayToBlob, + getAvailableTypes: getAvailableTypes, + hasFiles: hasFiles, + hasHTML: hasHTML, + hasImage: hasImage, + hasRTF: hasRTF, + hasText: hasText, + isMonitorRunning: isMonitorRunning, + listenToClipboard: listenToClipboard, + listenToMonitorStatusUpdate: listenToMonitorStatusUpdate, + onClipboardUpdate: onClipboardUpdate, + onFilesUpdate: onFilesUpdate, + onHTMLUpdate: onHTMLUpdate, + onImageBinaryUpdate: onImageBinaryUpdate, + onImageUpdate: onImageUpdate, + onRTFUpdate: onRTFUpdate, + onSomethingUpdate: onSomethingUpdate, + onTextUpdate: onTextUpdate, + readFiles: readFiles, + readFilesURIs: readFilesURIs, + readHtml: readHtml, + readImageBase64: readImageBase64, + readImageBinary: readImageBinary, + readImageObjectURL: readImageObjectURL, + readRtf: readRtf, + readText: readText, + startBruteForceImageMonitor: startBruteForceImageMonitor, + startBruteForceTextMonitor: startBruteForceTextMonitor, + startListening: startListening, + startMonitor: startMonitor, + stopMonitor: stopMonitor, + writeFiles: writeFiles, + writeFilesURIs: writeFilesURIs, + writeHtml: writeHtml, + writeHtmlAndText: writeHtmlAndText, + writeImageBase64: writeImageBase64, + writeImageBinary: writeImageBinary, + writeRtf: writeRtf, + writeText: writeText +}); + +exports.AVAILABLE_TYPES_COMMAND = AVAILABLE_TYPES_COMMAND; +exports.CLEAR_COMMAND = CLEAR_COMMAND; +exports.CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT = CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT; +exports.ClipboardBinaryChangedPayloadSchema = ClipboardBinaryChangedPayloadSchema; +exports.ClipboardChangedFilesPayloadSchema = ClipboardChangedFilesPayloadSchema; +exports.ClipboardChangedPayloadSchema = ClipboardChangedPayloadSchema; +exports.FILES_CHANGED = FILES_CHANGED; +exports.HAS_FILES_COMMAND = HAS_FILES_COMMAND; +exports.HAS_HTML_COMMAND = HAS_HTML_COMMAND; +exports.HAS_IMAGE_COMMAND = HAS_IMAGE_COMMAND; +exports.HAS_RTF_COMMAND = HAS_RTF_COMMAND; +exports.HAS_TEXT_COMMAND = HAS_TEXT_COMMAND; +exports.HTML_CHANGED = HTML_CHANGED; +exports.IMAGE_BINARY_CHANGED = IMAGE_BINARY_CHANGED; +exports.IMAGE_CHANGED = IMAGE_CHANGED; +exports.IS_MONITOR_RUNNING_COMMAND = IS_MONITOR_RUNNING_COMMAND; +exports.MONITOR_UPDATE_EVENT = MONITOR_UPDATE_EVENT; +exports.READ_FILES_COMMAND = READ_FILES_COMMAND; +exports.READ_FILES_URIS_COMMAND = READ_FILES_URIS_COMMAND; +exports.READ_HTML_COMMAND = READ_HTML_COMMAND; +exports.READ_IMAGE_BASE64_COMMAND = READ_IMAGE_BASE64_COMMAND; +exports.READ_IMAGE_BINARY_COMMAND = READ_IMAGE_BINARY_COMMAND; +exports.READ_RTF_COMMAND = READ_RTF_COMMAND; +exports.READ_TEXT_COMMAND = READ_TEXT_COMMAND; +exports.RTF_CHANGED = RTF_CHANGED; +exports.SOMETHING_CHANGED = SOMETHING_CHANGED; +exports.START_MONITOR_COMMAND = START_MONITOR_COMMAND; +exports.STOP_MONITOR_COMMAND = STOP_MONITOR_COMMAND; +exports.TEXT_CHANGED = TEXT_CHANGED; +exports.WRITE_FILES_COMMAND = WRITE_FILES_COMMAND; +exports.WRITE_FILES_URIS_COMMAND = WRITE_FILES_URIS_COMMAND; +exports.WRITE_HTML_AND_TEXT_COMMAND = WRITE_HTML_AND_TEXT_COMMAND; +exports.WRITE_HTML_COMMAND = WRITE_HTML_COMMAND; +exports.WRITE_IMAGE_BASE64_COMMAND = WRITE_IMAGE_BASE64_COMMAND; +exports.WRITE_IMAGE_BINARY_COMMAND = WRITE_IMAGE_BINARY_COMMAND; +exports.WRITE_RTF_COMMAND = WRITE_RTF_COMMAND; +exports.WRITE_TEXT_COMMAND = WRITE_TEXT_COMMAND; +exports.clear = clear; +exports.convertIntArrToUint8Array = convertIntArrToUint8Array; +exports.convertUint8ArrayToBlob = convertUint8ArrayToBlob; +exports.default = api; +exports.getAvailableTypes = getAvailableTypes; +exports.hasFiles = hasFiles; +exports.hasHTML = hasHTML; +exports.hasImage = hasImage; +exports.hasRTF = hasRTF; +exports.hasText = hasText; +exports.isMonitorRunning = isMonitorRunning; +exports.listenToClipboard = listenToClipboard; +exports.listenToMonitorStatusUpdate = listenToMonitorStatusUpdate; +exports.onClipboardUpdate = onClipboardUpdate; +exports.onFilesUpdate = onFilesUpdate; +exports.onHTMLUpdate = onHTMLUpdate; +exports.onImageBinaryUpdate = onImageBinaryUpdate; +exports.onImageUpdate = onImageUpdate; +exports.onRTFUpdate = onRTFUpdate; +exports.onSomethingUpdate = onSomethingUpdate; +exports.onTextUpdate = onTextUpdate; +exports.readFiles = readFiles; +exports.readFilesURIs = readFilesURIs; +exports.readHtml = readHtml; +exports.readImageBase64 = readImageBase64; +exports.readImageBinary = readImageBinary; +exports.readImageObjectURL = readImageObjectURL; +exports.readRtf = readRtf; +exports.readText = readText; +exports.startBruteForceImageMonitor = startBruteForceImageMonitor; +exports.startBruteForceTextMonitor = startBruteForceTextMonitor; +exports.startListening = startListening; +exports.startMonitor = startMonitor; +exports.stopMonitor = stopMonitor; +exports.writeFiles = writeFiles; +exports.writeFilesURIs = writeFilesURIs; +exports.writeHtml = writeHtml; +exports.writeHtmlAndText = writeHtmlAndText; +exports.writeImageBase64 = writeImageBase64; +exports.writeImageBinary = writeImageBinary; +exports.writeRtf = writeRtf; +exports.writeText = writeText; diff --git a/dist-js/index.d.ts b/dist-js/index.d.ts new file mode 100644 index 0000000..ce1223f --- /dev/null +++ b/dist-js/index.d.ts @@ -0,0 +1,3 @@ +export * from "./api"; +export * as default from "./api"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/dist-js/index.d.ts.map b/dist-js/index.d.ts.map new file mode 100644 index 0000000..a6fbaf3 --- /dev/null +++ b/dist-js/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../guest-js/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,OAAO,KAAK,OAAO,MAAM,OAAO,CAAC"} \ No newline at end of file diff --git a/dist-js/index.js b/dist-js/index.js new file mode 100644 index 0000000..e57e360 --- /dev/null +++ b/dist-js/index.js @@ -0,0 +1,482 @@ +import * as v from 'valibot'; +import { invoke } from '@tauri-apps/api/core'; +import { emit, listen } from '@tauri-apps/api/event'; + +const buildCmd = (cmd) => `plugin:clipboard|${cmd}`; +const buildEventUrl = (event) => `plugin:clipboard://${event}`; +const START_MONITOR_COMMAND = buildCmd("start_monitor"); +const STOP_MONITOR_COMMAND = buildCmd("stop_monitor"); +const SOMETHING_CHANGED = buildEventUrl("something-changed"); +const TEXT_CHANGED = buildEventUrl("text-changed"); +const HTML_CHANGED = buildEventUrl("html-changed"); +const RTF_CHANGED = buildEventUrl("rtf-changed"); +const FILES_CHANGED = buildEventUrl("files-changed"); +const IMAGE_CHANGED = buildEventUrl("image-changed"); +const IMAGE_BINARY_CHANGED = buildEventUrl("image-changed-binary"); +const IS_MONITOR_RUNNING_COMMAND = buildCmd("is_monitor_running"); +const HAS_TEXT_COMMAND = buildCmd("has_text"); +const HAS_IMAGE_COMMAND = buildCmd("has_image"); +const HAS_HTML_COMMAND = buildCmd("has_html"); +const HAS_RTF_COMMAND = buildCmd("has_rtf"); +const HAS_FILES_COMMAND = buildCmd("has_files"); +const AVAILABLE_TYPES_COMMAND = buildCmd("available_types"); +const WRITE_TEXT_COMMAND = buildCmd("write_text"); +const WRITE_HTML_COMMAND = buildCmd("write_html"); +const WRITE_HTML_AND_TEXT_COMMAND = buildCmd("write_html_and_text"); +const WRITE_RTF_COMMAND = buildCmd("write_rtf"); +const WRITE_FILES_URIS_COMMAND = buildCmd("write_files_uris"); +const WRITE_FILES_COMMAND = buildCmd("write_files"); +const CLEAR_COMMAND = buildCmd("clear"); +const READ_TEXT_COMMAND = buildCmd("read_text"); +const READ_HTML_COMMAND = buildCmd("read_html"); +const READ_RTF_COMMAND = buildCmd("read_rtf"); +const READ_FILES_COMMAND = buildCmd("read_files"); +const READ_FILES_URIS_COMMAND = buildCmd("read_files_uris"); +const READ_IMAGE_BINARY_COMMAND = buildCmd("read_image_binary"); +const READ_IMAGE_BASE64_COMMAND = buildCmd("read_image_base64"); +const WRITE_IMAGE_BINARY_COMMAND = buildCmd("write_image_binary"); +const WRITE_IMAGE_BASE64_COMMAND = buildCmd("write_image_base64"); +const CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT = buildEventUrl("clipboard-monitor/status"); +const MONITOR_UPDATE_EVENT = buildEventUrl("clipboard-monitor/update"); +const ClipboardChangedPayloadSchema = v.object({ value: v.string() }); +const ClipboardBinaryChangedPayloadSchema = v.object({ + value: v.array(v.number()) +}); +const ClipboardChangedFilesPayloadSchema = v.object({ + value: v.array(v.string()) +}); +function hasText() { + return invoke(HAS_TEXT_COMMAND); +} +function hasHTML() { + return invoke(HAS_HTML_COMMAND); +} +function hasRTF() { + return invoke(HAS_RTF_COMMAND); +} +function hasImage() { + return invoke(HAS_IMAGE_COMMAND); +} +function hasFiles() { + return invoke(HAS_FILES_COMMAND); +} +function writeText(text) { + return invoke(WRITE_TEXT_COMMAND, { text }); +} +function writeHtml(html) { + return invoke(WRITE_HTML_COMMAND, { html }); +} +/** + * Write html and text to clipboard. + * writeHtml API only writes html, readText will return nothing. + * This API writes both html and text, so readText will return the text. + */ +function writeHtmlAndText(html, text) { + return invoke(WRITE_HTML_AND_TEXT_COMMAND, { html, text }); +} +function writeRtf(rtf) { + return invoke(WRITE_RTF_COMMAND, { rtf }); +} +function writeFilesURIs(filesUris) { + return invoke(WRITE_FILES_URIS_COMMAND, { filesUris }); +} +function writeFiles(filesPaths) { + return invoke(WRITE_FILES_COMMAND, { filesPaths }); +} +function clear() { + return invoke(CLEAR_COMMAND); +} +function readText() { + return invoke(READ_TEXT_COMMAND); +} +function readHtml() { + return invoke(READ_HTML_COMMAND); +} +function readRtf() { + return invoke(READ_RTF_COMMAND); +} +function readFiles() { + return invoke(READ_FILES_COMMAND); +} +function readFilesURIs() { + return invoke(READ_FILES_URIS_COMMAND); +} +/** + * read clipboard image + * @returns image in base64 string + */ +function readImageBase64() { + return invoke(READ_IMAGE_BASE64_COMMAND); +} +// export const readImageBase64 = readImage; +/** + * Read clipboard image, get the data in binary format + * int_array (Array) is received from Tauri core, Uint8Array and Blob are transformed from int_array + * @param format data type of returned value, "int_array" is the fastest + * @returns + */ +function readImageBinary(format) { + return invoke(READ_IMAGE_BINARY_COMMAND).then((img_arr) => { + switch (format) { + case "int_array": + return img_arr; + case "Uint8Array": + return new Uint8Array(img_arr); + case "Blob": + return new Blob([new Uint8Array(img_arr)]); + default: + return img_arr; + } + }); +} +function convertIntArrToUint8Array(intArr) { + return new Uint8Array(intArr); +} +function convertUint8ArrayToBlob(uintArr) { + return new Blob([uintArr]); +} +/** + * Here is the transformation flow, + * read clipboard image as Array (int_array) -> int_array -> Uint8Array -> Blob -> ObjectURL + * There are many layers which could make this function slow for large images. + * @returns ObjectURL for clipboard image + */ +function readImageObjectURL() { + return readImageBinary("Blob").then((blob) => { + return URL.createObjectURL(blob); + }); +} +/** + * write image to clipboard + * @param data image data in base64 encoded string + * @returns Promise + */ +function writeImageBase64(base64) { + return invoke(WRITE_IMAGE_BASE64_COMMAND, { base64Image: base64 }); +} +function writeImageBinary(bytes) { + return invoke(WRITE_IMAGE_BINARY_COMMAND, { bytes: bytes }); +} +/** + * @deprecated since version v0.5.x + * Brute force listen to clipboard text update. + * Detect update by comparing current value with previous value every delay ms. + * When there is a update, "plugin:clipboard://text-changed" is emitted. + * You still need to listen to the event. + * + * @param delay check interval delay + * @returns a stop running function that can be called when component unmounts + */ +function startBruteForceTextMonitor(delay = 500) { + let prevText = ""; + let active = true; // whether the listener should be running + setTimeout(async function x() { + try { + const text = await readText(); + if (prevText !== text) { + await emit(TEXT_CHANGED, { value: text }); + } + prevText = text; + } + catch (error) { } + if (active) + setTimeout(x, delay); + }, delay); + return function () { + active = false; + }; +} +/** + * @deprecated since version v0.5.x + * Brute force monitor clipboard image update by comparing current value with previous value. + * When there is a update, "plugin:clipboard://image-changed" is emitted. + * You still need to listen to the event. + * + * @param delay check interval delay + * @returns stop running function that can be called to stop the monitor + */ +function startBruteForceImageMonitor(delay = 1000) { + let prevImg = ""; + let active = true; // whether the listener should be running + setTimeout(async function x() { + try { + const img = await readImageBase64(); + if (prevImg !== img) { + await emit(IMAGE_CHANGED, { value: img }); + } + prevImg = img; + } + catch (error) { + // ! when there is no image in clipboard, there may be error thrown, we ignore the error + } + if (active) + setTimeout(x, delay); + }, delay); + return function () { + active = false; + }; +} +function getAvailableTypes() { + return invoke(AVAILABLE_TYPES_COMMAND); +} +/** + * Listen to "plugin:clipboard://clipboard-monitor/update" from Tauri core. + * The corresponding clipboard type event will be emitted when there is clipboard update. + * @param listenTypes types of clipboard data to listen to + * @returns unlisten function + */ +function listenToClipboard(listenTypes = { + text: true, + html: true, + rtf: true, + image: true, + imageBinary: false, + files: true +}) { + return listen(MONITOR_UPDATE_EVENT, async (e) => { + if (e.payload === "clipboard update") { + const hasData = await Promise.all([hasFiles(), hasImage(), hasHTML(), hasRTF(), hasText()]); + const flags = { + files: hasData[0], + image: hasData[1], + imageBinary: hasData[1], + html: hasData[2], + rtf: hasData[3], + text: hasData[4] + }; + await emit(SOMETHING_CHANGED, flags); + if (listenTypes.files && flags.files) { + const files = await readFiles(); + if (files && files.length > 0) { + await emit(FILES_CHANGED, { value: files }); + } + // flags.files = true; + return; // ! this return is necessary, copying files also update clipboard text, but we don't want text update to be triggered + } + if (listenTypes.image && flags.image) { + const img = await readImageBase64(); + if (img) + await emit(IMAGE_CHANGED, { value: img }); + // flags.image = true; + } + if (listenTypes.imageBinary && flags.imageBinary) { + const img = await readImageBinary("int_array"); + if (img) + await emit(IMAGE_BINARY_CHANGED, { value: img }); + // flags.imageBinary = true; + } + if (listenTypes.html && flags.html) { + await emit(HTML_CHANGED, { value: await readHtml() }); + // flags.html = true; + } + if (listenTypes.rtf && flags.rtf) { + await emit(RTF_CHANGED, { value: await readRtf() }); + // flags.rtf = true; + } + if (listenTypes.text && flags.text) { + await emit(TEXT_CHANGED, { value: await readText() }); + // flags.text = true; + } + // when clear() is called, this error is thrown, let ignore it + // if (!success) { + // throw new Error("Unexpected Error: No proper clipboard type"); + // } + } + }); +} +/** + * This listen to clipboard monitor update event, and trigger the callback function. + * @param cb callback + * @returns unlisten function + */ +async function onClipboardUpdate(cb) { + return await listen(MONITOR_UPDATE_EVENT, (event) => { + cb(event.payload); + }); +} +async function onTextUpdate(cb) { + return await listen(TEXT_CHANGED, (event) => { + const text = v.parse(ClipboardChangedPayloadSchema, event.payload).value; + cb(text); + }); +} +/** + * Listen to clipboard update event and get the updated types in a callback. + * This listener tells you what types of data are updated. + * This relies on `listenToClipboard()` who emits events this function listens to. + * You can run `listenToClipboard()` or `startListening()` before calling this function. + * When HTML is copied, this will be passed to callback: {files: false, image: false, html: true, rtf: false, text: true} + * @param cb + * @returns + */ +function onSomethingUpdate(cb) { + return listen(SOMETHING_CHANGED, (event) => { + cb(event.payload); + }); +} +function onHTMLUpdate(cb) { + return listen(HTML_CHANGED, (event) => { + const text = v.parse(ClipboardChangedPayloadSchema, event.payload).value; + cb(text); + }); +} +function onRTFUpdate(cb) { + return listen(RTF_CHANGED, (event) => { + const text = v.parse(ClipboardChangedPayloadSchema, event.payload).value; + cb(text); + }); +} +function onFilesUpdate(cb) { + return listen(FILES_CHANGED, (event) => { + const files = v.parse(ClipboardChangedFilesPayloadSchema, event.payload).value; + cb(files); + }); +} +function onImageUpdate(cb) { + return listen(IMAGE_CHANGED, (event) => { + const base64ImageStr = v.parse(ClipboardChangedPayloadSchema, event.payload).value; + cb(base64ImageStr); + }); +} +function onImageBinaryUpdate(cb) { + return listen(IMAGE_BINARY_CHANGED, (event) => { + cb(v.parse(ClipboardBinaryChangedPayloadSchema, event.payload).value); + }); +} +/** + * Used to check the status of clipboard monitor + * @returns Whether the monitor is running + */ +function isMonitorRunning() { + return invoke(IS_MONITOR_RUNNING_COMMAND).then((res) => v.parse(v.boolean(), res)); +} +/** + * Start running mointor thread in Tauri core. This feature is added in v0.5.x. + * Before v0.5.x, the monitor is started during setup when app starts. + * After v0.5.x, this function must be called first to start monitor. + * After monitor is started, events "plugin:clipboard://clipboard-monitor/update" will be emitted when there is clipboard update. + * "plugin:clipboard://clipboard-monitor/status" event is also emitted when monitor status updates + * Still have to listen to these events. + */ +function startMonitor() { + return invoke(START_MONITOR_COMMAND); +} +/** + * Stop clipboard monitor thread. + */ +function stopMonitor() { + return invoke(STOP_MONITOR_COMMAND); +} +/** + * Listen to monitor status update. Instead of calling isMonitorRunning to get status of monitor, + * "plugin:clipboard://clipboard-monitor/status" event is emitted from Tauri core when monitor status updates. + * @param cb callback to be called when there is monitor status update + */ +async function listenToMonitorStatusUpdate(cb) { + return await listen(CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT, (event) => { + const newStatus = v.parse(v.boolean(), event.payload); + cb(newStatus); + }); +} +function startListening(listenTypes = { + text: true, + html: true, + rtf: true, + image: true, + imageBinary: false, + files: true +}) { + return startMonitor() + .then(() => listenToClipboard(listenTypes)) + .then((unlistenClipboard) => { + // return an unlisten function that stop listening to clipboard update and stop the monitor + return async () => { + unlistenClipboard(); + await stopMonitor(); + }; + }); +} + +var api = /*#__PURE__*/Object.freeze({ + __proto__: null, + AVAILABLE_TYPES_COMMAND: AVAILABLE_TYPES_COMMAND, + CLEAR_COMMAND: CLEAR_COMMAND, + CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT: CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT, + ClipboardBinaryChangedPayloadSchema: ClipboardBinaryChangedPayloadSchema, + ClipboardChangedFilesPayloadSchema: ClipboardChangedFilesPayloadSchema, + ClipboardChangedPayloadSchema: ClipboardChangedPayloadSchema, + FILES_CHANGED: FILES_CHANGED, + HAS_FILES_COMMAND: HAS_FILES_COMMAND, + HAS_HTML_COMMAND: HAS_HTML_COMMAND, + HAS_IMAGE_COMMAND: HAS_IMAGE_COMMAND, + HAS_RTF_COMMAND: HAS_RTF_COMMAND, + HAS_TEXT_COMMAND: HAS_TEXT_COMMAND, + HTML_CHANGED: HTML_CHANGED, + IMAGE_BINARY_CHANGED: IMAGE_BINARY_CHANGED, + IMAGE_CHANGED: IMAGE_CHANGED, + IS_MONITOR_RUNNING_COMMAND: IS_MONITOR_RUNNING_COMMAND, + MONITOR_UPDATE_EVENT: MONITOR_UPDATE_EVENT, + READ_FILES_COMMAND: READ_FILES_COMMAND, + READ_FILES_URIS_COMMAND: READ_FILES_URIS_COMMAND, + READ_HTML_COMMAND: READ_HTML_COMMAND, + READ_IMAGE_BASE64_COMMAND: READ_IMAGE_BASE64_COMMAND, + READ_IMAGE_BINARY_COMMAND: READ_IMAGE_BINARY_COMMAND, + READ_RTF_COMMAND: READ_RTF_COMMAND, + READ_TEXT_COMMAND: READ_TEXT_COMMAND, + RTF_CHANGED: RTF_CHANGED, + SOMETHING_CHANGED: SOMETHING_CHANGED, + START_MONITOR_COMMAND: START_MONITOR_COMMAND, + STOP_MONITOR_COMMAND: STOP_MONITOR_COMMAND, + TEXT_CHANGED: TEXT_CHANGED, + WRITE_FILES_COMMAND: WRITE_FILES_COMMAND, + WRITE_FILES_URIS_COMMAND: WRITE_FILES_URIS_COMMAND, + WRITE_HTML_AND_TEXT_COMMAND: WRITE_HTML_AND_TEXT_COMMAND, + WRITE_HTML_COMMAND: WRITE_HTML_COMMAND, + WRITE_IMAGE_BASE64_COMMAND: WRITE_IMAGE_BASE64_COMMAND, + WRITE_IMAGE_BINARY_COMMAND: WRITE_IMAGE_BINARY_COMMAND, + WRITE_RTF_COMMAND: WRITE_RTF_COMMAND, + WRITE_TEXT_COMMAND: WRITE_TEXT_COMMAND, + clear: clear, + convertIntArrToUint8Array: convertIntArrToUint8Array, + convertUint8ArrayToBlob: convertUint8ArrayToBlob, + getAvailableTypes: getAvailableTypes, + hasFiles: hasFiles, + hasHTML: hasHTML, + hasImage: hasImage, + hasRTF: hasRTF, + hasText: hasText, + isMonitorRunning: isMonitorRunning, + listenToClipboard: listenToClipboard, + listenToMonitorStatusUpdate: listenToMonitorStatusUpdate, + onClipboardUpdate: onClipboardUpdate, + onFilesUpdate: onFilesUpdate, + onHTMLUpdate: onHTMLUpdate, + onImageBinaryUpdate: onImageBinaryUpdate, + onImageUpdate: onImageUpdate, + onRTFUpdate: onRTFUpdate, + onSomethingUpdate: onSomethingUpdate, + onTextUpdate: onTextUpdate, + readFiles: readFiles, + readFilesURIs: readFilesURIs, + readHtml: readHtml, + readImageBase64: readImageBase64, + readImageBinary: readImageBinary, + readImageObjectURL: readImageObjectURL, + readRtf: readRtf, + readText: readText, + startBruteForceImageMonitor: startBruteForceImageMonitor, + startBruteForceTextMonitor: startBruteForceTextMonitor, + startListening: startListening, + startMonitor: startMonitor, + stopMonitor: stopMonitor, + writeFiles: writeFiles, + writeFilesURIs: writeFilesURIs, + writeHtml: writeHtml, + writeHtmlAndText: writeHtmlAndText, + writeImageBase64: writeImageBase64, + writeImageBinary: writeImageBinary, + writeRtf: writeRtf, + writeText: writeText +}); + +export { AVAILABLE_TYPES_COMMAND, CLEAR_COMMAND, CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT, ClipboardBinaryChangedPayloadSchema, ClipboardChangedFilesPayloadSchema, ClipboardChangedPayloadSchema, FILES_CHANGED, HAS_FILES_COMMAND, HAS_HTML_COMMAND, HAS_IMAGE_COMMAND, HAS_RTF_COMMAND, HAS_TEXT_COMMAND, HTML_CHANGED, IMAGE_BINARY_CHANGED, IMAGE_CHANGED, IS_MONITOR_RUNNING_COMMAND, MONITOR_UPDATE_EVENT, READ_FILES_COMMAND, READ_FILES_URIS_COMMAND, READ_HTML_COMMAND, READ_IMAGE_BASE64_COMMAND, READ_IMAGE_BINARY_COMMAND, READ_RTF_COMMAND, READ_TEXT_COMMAND, RTF_CHANGED, SOMETHING_CHANGED, START_MONITOR_COMMAND, STOP_MONITOR_COMMAND, TEXT_CHANGED, WRITE_FILES_COMMAND, WRITE_FILES_URIS_COMMAND, WRITE_HTML_AND_TEXT_COMMAND, WRITE_HTML_COMMAND, WRITE_IMAGE_BASE64_COMMAND, WRITE_IMAGE_BINARY_COMMAND, WRITE_RTF_COMMAND, WRITE_TEXT_COMMAND, clear, convertIntArrToUint8Array, convertUint8ArrayToBlob, api as default, getAvailableTypes, hasFiles, hasHTML, hasImage, hasRTF, hasText, isMonitorRunning, listenToClipboard, listenToMonitorStatusUpdate, onClipboardUpdate, onFilesUpdate, onHTMLUpdate, onImageBinaryUpdate, onImageUpdate, onRTFUpdate, onSomethingUpdate, onTextUpdate, readFiles, readFilesURIs, readHtml, readImageBase64, readImageBinary, readImageObjectURL, readRtf, readText, startBruteForceImageMonitor, startBruteForceTextMonitor, startListening, startMonitor, stopMonitor, writeFiles, writeFilesURIs, writeHtml, writeHtmlAndText, writeImageBase64, writeImageBinary, writeRtf, writeText }; From 5e0a15e4602e0f510108ba88d96d5b4867e08110 Mon Sep 17 00:00:00 2001 From: Jason Terando Date: Sat, 21 Sep 2024 09:17:10 -0500 Subject: [PATCH 7/9] Restore pnpm files --- dist-js/api.d.ts | 195 --------- dist-js/api.d.ts.map | 1 - dist-js/index.cjs | 583 --------------------------- dist-js/index.d.ts | 3 - dist-js/index.d.ts.map | 1 - dist-js/index.js | 482 ---------------------- zzz_pnpm-lock.yaml => pnpm-lock.yaml | 0 7 files changed, 1265 deletions(-) delete mode 100644 dist-js/api.d.ts delete mode 100644 dist-js/api.d.ts.map delete mode 100644 dist-js/index.cjs delete mode 100644 dist-js/index.d.ts delete mode 100644 dist-js/index.d.ts.map delete mode 100644 dist-js/index.js rename zzz_pnpm-lock.yaml => pnpm-lock.yaml (100%) diff --git a/dist-js/api.d.ts b/dist-js/api.d.ts deleted file mode 100644 index fb436e0..0000000 --- a/dist-js/api.d.ts +++ /dev/null @@ -1,195 +0,0 @@ -import * as v from "valibot"; -import { UnlistenFn } from "@tauri-apps/api/event"; -export declare const START_MONITOR_COMMAND: string; -export declare const STOP_MONITOR_COMMAND: string; -export declare const SOMETHING_CHANGED: string; -export declare const TEXT_CHANGED: string; -export declare const HTML_CHANGED: string; -export declare const RTF_CHANGED: string; -export declare const FILES_CHANGED: string; -export declare const IMAGE_CHANGED: string; -export declare const IMAGE_BINARY_CHANGED: string; -export declare const IS_MONITOR_RUNNING_COMMAND: string; -export declare const HAS_TEXT_COMMAND: string; -export declare const HAS_IMAGE_COMMAND: string; -export declare const HAS_HTML_COMMAND: string; -export declare const HAS_RTF_COMMAND: string; -export declare const HAS_FILES_COMMAND: string; -export declare const AVAILABLE_TYPES_COMMAND: string; -export declare const WRITE_TEXT_COMMAND: string; -export declare const WRITE_HTML_COMMAND: string; -export declare const WRITE_HTML_AND_TEXT_COMMAND: string; -export declare const WRITE_RTF_COMMAND: string; -export declare const WRITE_FILES_URIS_COMMAND: string; -export declare const WRITE_FILES_COMMAND: string; -export declare const CLEAR_COMMAND: string; -export declare const READ_TEXT_COMMAND: string; -export declare const READ_HTML_COMMAND: string; -export declare const READ_RTF_COMMAND: string; -export declare const READ_FILES_COMMAND: string; -export declare const READ_FILES_URIS_COMMAND: string; -export declare const READ_IMAGE_BINARY_COMMAND: string; -export declare const READ_IMAGE_BASE64_COMMAND: string; -export declare const WRITE_IMAGE_BINARY_COMMAND: string; -export declare const WRITE_IMAGE_BASE64_COMMAND: string; -export declare const CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT: string; -export declare const MONITOR_UPDATE_EVENT: string; -export declare const ClipboardChangedPayloadSchema: v.ObjectSchema<{ - readonly value: v.StringSchema; -}, undefined>; -export declare const ClipboardBinaryChangedPayloadSchema: v.ObjectSchema<{ - readonly value: v.ArraySchema, undefined>; -}, undefined>; -export declare const ClipboardChangedFilesPayloadSchema: v.ObjectSchema<{ - readonly value: v.ArraySchema, undefined>; -}, undefined>; -export type ClipboardChangedPayload = v.InferOutput; -export interface ClipboardState { - text: boolean; - html: boolean; - rtf: boolean; - image: boolean; - files: boolean; -} -export declare function hasText(): Promise; -export declare function hasHTML(): Promise; -export declare function hasRTF(): Promise; -export declare function hasImage(): Promise; -export declare function hasFiles(): Promise; -export declare function writeText(text: string): Promise; -export declare function writeHtml(html: string): Promise; -/** - * Write html and text to clipboard. - * writeHtml API only writes html, readText will return nothing. - * This API writes both html and text, so readText will return the text. - */ -export declare function writeHtmlAndText(html: string, text: string): Promise; -export declare function writeRtf(rtf: string): Promise; -export declare function writeFilesURIs(filesUris: string[]): Promise; -export declare function writeFiles(filesPaths: string[]): Promise; -export declare function clear(): Promise; -export declare function readText(): Promise; -export declare function readHtml(): Promise; -export declare function readRtf(): Promise; -export declare function readFiles(): Promise; -export declare function readFilesURIs(): Promise; -/** - * read clipboard image - * @returns image in base64 string - */ -export declare function readImageBase64(): Promise; -/** - * Read clipboard image, get the data in binary format - * int_array (Array) is received from Tauri core, Uint8Array and Blob are transformed from int_array - * @param format data type of returned value, "int_array" is the fastest - * @returns - */ -export declare function readImageBinary(format: "int_array" | "Uint8Array" | "Blob"): Promise; -export declare function convertIntArrToUint8Array(intArr: number[]): Uint8Array; -export declare function convertUint8ArrayToBlob(uintArr: Uint8Array): Blob; -/** - * Here is the transformation flow, - * read clipboard image as Array (int_array) -> int_array -> Uint8Array -> Blob -> ObjectURL - * There are many layers which could make this function slow for large images. - * @returns ObjectURL for clipboard image - */ -export declare function readImageObjectURL(): Promise; -/** - * write image to clipboard - * @param data image data in base64 encoded string - * @returns Promise - */ -export declare function writeImageBase64(base64: string): Promise; -export declare function writeImageBinary(bytes: number[]): Promise; -/** - * @deprecated since version v0.5.x - * Brute force listen to clipboard text update. - * Detect update by comparing current value with previous value every delay ms. - * When there is a update, "plugin:clipboard://text-changed" is emitted. - * You still need to listen to the event. - * - * @param delay check interval delay - * @returns a stop running function that can be called when component unmounts - */ -export declare function startBruteForceTextMonitor(delay?: number): () => void; -/** - * @deprecated since version v0.5.x - * Brute force monitor clipboard image update by comparing current value with previous value. - * When there is a update, "plugin:clipboard://image-changed" is emitted. - * You still need to listen to the event. - * - * @param delay check interval delay - * @returns stop running function that can be called to stop the monitor - */ -export declare function startBruteForceImageMonitor(delay?: number): () => void; -export type UpdatedTypes = { - text?: boolean; - html?: boolean; - rtf?: boolean; - image?: boolean; - imageBinary?: boolean; - files?: boolean; -}; -export type AvailableTypes = { - text: boolean; - html: boolean; - rtf: boolean; - image: boolean; - files: boolean; -}; -export declare function getAvailableTypes(): Promise; -/** - * Listen to "plugin:clipboard://clipboard-monitor/update" from Tauri core. - * The corresponding clipboard type event will be emitted when there is clipboard update. - * @param listenTypes types of clipboard data to listen to - * @returns unlisten function - */ -export declare function listenToClipboard(listenTypes?: UpdatedTypes): Promise; -/** - * This listen to clipboard monitor update event, and trigger the callback function. - * @param cb callback - * @returns unlisten function - */ -export declare function onClipboardUpdate(cb: (state: ClipboardState) => void): Promise; -export declare function onTextUpdate(cb: (text: string) => void): Promise; -/** - * Listen to clipboard update event and get the updated types in a callback. - * This listener tells you what types of data are updated. - * This relies on `listenToClipboard()` who emits events this function listens to. - * You can run `listenToClipboard()` or `startListening()` before calling this function. - * When HTML is copied, this will be passed to callback: {files: false, image: false, html: true, rtf: false, text: true} - * @param cb - * @returns - */ -export declare function onSomethingUpdate(cb: (updatedTypes: UpdatedTypes) => void): Promise; -export declare function onHTMLUpdate(cb: (text: string) => void): Promise; -export declare function onRTFUpdate(cb: (text: string) => void): Promise; -export declare function onFilesUpdate(cb: (files: string[]) => void): Promise; -export declare function onImageUpdate(cb: (base64ImageStr: string) => void): Promise; -export declare function onImageBinaryUpdate(cb: (image: number[]) => void): Promise; -/** - * Used to check the status of clipboard monitor - * @returns Whether the monitor is running - */ -export declare function isMonitorRunning(): Promise; -/** - * Start running mointor thread in Tauri core. This feature is added in v0.5.x. - * Before v0.5.x, the monitor is started during setup when app starts. - * After v0.5.x, this function must be called first to start monitor. - * After monitor is started, events "plugin:clipboard://clipboard-monitor/update" will be emitted when there is clipboard update. - * "plugin:clipboard://clipboard-monitor/status" event is also emitted when monitor status updates - * Still have to listen to these events. - */ -export declare function startMonitor(): Promise; -/** - * Stop clipboard monitor thread. - */ -export declare function stopMonitor(): Promise; -/** - * Listen to monitor status update. Instead of calling isMonitorRunning to get status of monitor, - * "plugin:clipboard://clipboard-monitor/status" event is emitted from Tauri core when monitor status updates. - * @param cb callback to be called when there is monitor status update - */ -export declare function listenToMonitorStatusUpdate(cb: (running: boolean) => void): Promise; -export declare function startListening(listenTypes?: UpdatedTypes): Promise<() => Promise>; -//# sourceMappingURL=api.d.ts.map \ No newline at end of file diff --git a/dist-js/api.d.ts.map b/dist-js/api.d.ts.map deleted file mode 100644 index e7b8c64..0000000 --- a/dist-js/api.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../guest-js/api.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist-js/index.cjs b/dist-js/index.cjs deleted file mode 100644 index 2e6ccb4..0000000 --- a/dist-js/index.cjs +++ /dev/null @@ -1,583 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -var v = require('valibot'); -var core = require('@tauri-apps/api/core'); -var event = require('@tauri-apps/api/event'); - -function _interopNamespaceDefault(e) { - var n = Object.create(null); - if (e) { - Object.keys(e).forEach(function (k) { - if (k !== 'default') { - var d = Object.getOwnPropertyDescriptor(e, k); - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: function () { return e[k]; } - }); - } - }); - } - n.default = e; - return Object.freeze(n); -} - -var v__namespace = /*#__PURE__*/_interopNamespaceDefault(v); - -const buildCmd = (cmd) => `plugin:clipboard|${cmd}`; -const buildEventUrl = (event) => `plugin:clipboard://${event}`; -const START_MONITOR_COMMAND = buildCmd("start_monitor"); -const STOP_MONITOR_COMMAND = buildCmd("stop_monitor"); -const SOMETHING_CHANGED = buildEventUrl("something-changed"); -const TEXT_CHANGED = buildEventUrl("text-changed"); -const HTML_CHANGED = buildEventUrl("html-changed"); -const RTF_CHANGED = buildEventUrl("rtf-changed"); -const FILES_CHANGED = buildEventUrl("files-changed"); -const IMAGE_CHANGED = buildEventUrl("image-changed"); -const IMAGE_BINARY_CHANGED = buildEventUrl("image-changed-binary"); -const IS_MONITOR_RUNNING_COMMAND = buildCmd("is_monitor_running"); -const HAS_TEXT_COMMAND = buildCmd("has_text"); -const HAS_IMAGE_COMMAND = buildCmd("has_image"); -const HAS_HTML_COMMAND = buildCmd("has_html"); -const HAS_RTF_COMMAND = buildCmd("has_rtf"); -const HAS_FILES_COMMAND = buildCmd("has_files"); -const AVAILABLE_TYPES_COMMAND = buildCmd("available_types"); -const WRITE_TEXT_COMMAND = buildCmd("write_text"); -const WRITE_HTML_COMMAND = buildCmd("write_html"); -const WRITE_HTML_AND_TEXT_COMMAND = buildCmd("write_html_and_text"); -const WRITE_RTF_COMMAND = buildCmd("write_rtf"); -const WRITE_FILES_URIS_COMMAND = buildCmd("write_files_uris"); -const WRITE_FILES_COMMAND = buildCmd("write_files"); -const CLEAR_COMMAND = buildCmd("clear"); -const READ_TEXT_COMMAND = buildCmd("read_text"); -const READ_HTML_COMMAND = buildCmd("read_html"); -const READ_RTF_COMMAND = buildCmd("read_rtf"); -const READ_FILES_COMMAND = buildCmd("read_files"); -const READ_FILES_URIS_COMMAND = buildCmd("read_files_uris"); -const READ_IMAGE_BINARY_COMMAND = buildCmd("read_image_binary"); -const READ_IMAGE_BASE64_COMMAND = buildCmd("read_image_base64"); -const WRITE_IMAGE_BINARY_COMMAND = buildCmd("write_image_binary"); -const WRITE_IMAGE_BASE64_COMMAND = buildCmd("write_image_base64"); -const CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT = buildEventUrl("clipboard-monitor/status"); -const MONITOR_UPDATE_EVENT = buildEventUrl("clipboard-monitor/update"); -const ClipboardChangedPayloadSchema = v__namespace.object({ value: v__namespace.string() }); -const ClipboardBinaryChangedPayloadSchema = v__namespace.object({ - value: v__namespace.array(v__namespace.number()) -}); -const ClipboardChangedFilesPayloadSchema = v__namespace.object({ - value: v__namespace.array(v__namespace.string()) -}); -function hasText() { - return core.invoke(HAS_TEXT_COMMAND); -} -function hasHTML() { - return core.invoke(HAS_HTML_COMMAND); -} -function hasRTF() { - return core.invoke(HAS_RTF_COMMAND); -} -function hasImage() { - return core.invoke(HAS_IMAGE_COMMAND); -} -function hasFiles() { - return core.invoke(HAS_FILES_COMMAND); -} -function writeText(text) { - return core.invoke(WRITE_TEXT_COMMAND, { text }); -} -function writeHtml(html) { - return core.invoke(WRITE_HTML_COMMAND, { html }); -} -/** - * Write html and text to clipboard. - * writeHtml API only writes html, readText will return nothing. - * This API writes both html and text, so readText will return the text. - */ -function writeHtmlAndText(html, text) { - return core.invoke(WRITE_HTML_AND_TEXT_COMMAND, { html, text }); -} -function writeRtf(rtf) { - return core.invoke(WRITE_RTF_COMMAND, { rtf }); -} -function writeFilesURIs(filesUris) { - return core.invoke(WRITE_FILES_URIS_COMMAND, { filesUris }); -} -function writeFiles(filesPaths) { - return core.invoke(WRITE_FILES_COMMAND, { filesPaths }); -} -function clear() { - return core.invoke(CLEAR_COMMAND); -} -function readText() { - return core.invoke(READ_TEXT_COMMAND); -} -function readHtml() { - return core.invoke(READ_HTML_COMMAND); -} -function readRtf() { - return core.invoke(READ_RTF_COMMAND); -} -function readFiles() { - return core.invoke(READ_FILES_COMMAND); -} -function readFilesURIs() { - return core.invoke(READ_FILES_URIS_COMMAND); -} -/** - * read clipboard image - * @returns image in base64 string - */ -function readImageBase64() { - return core.invoke(READ_IMAGE_BASE64_COMMAND); -} -// export const readImageBase64 = readImage; -/** - * Read clipboard image, get the data in binary format - * int_array (Array) is received from Tauri core, Uint8Array and Blob are transformed from int_array - * @param format data type of returned value, "int_array" is the fastest - * @returns - */ -function readImageBinary(format) { - return core.invoke(READ_IMAGE_BINARY_COMMAND).then((img_arr) => { - switch (format) { - case "int_array": - return img_arr; - case "Uint8Array": - return new Uint8Array(img_arr); - case "Blob": - return new Blob([new Uint8Array(img_arr)]); - default: - return img_arr; - } - }); -} -function convertIntArrToUint8Array(intArr) { - return new Uint8Array(intArr); -} -function convertUint8ArrayToBlob(uintArr) { - return new Blob([uintArr]); -} -/** - * Here is the transformation flow, - * read clipboard image as Array (int_array) -> int_array -> Uint8Array -> Blob -> ObjectURL - * There are many layers which could make this function slow for large images. - * @returns ObjectURL for clipboard image - */ -function readImageObjectURL() { - return readImageBinary("Blob").then((blob) => { - return URL.createObjectURL(blob); - }); -} -/** - * write image to clipboard - * @param data image data in base64 encoded string - * @returns Promise - */ -function writeImageBase64(base64) { - return core.invoke(WRITE_IMAGE_BASE64_COMMAND, { base64Image: base64 }); -} -function writeImageBinary(bytes) { - return core.invoke(WRITE_IMAGE_BINARY_COMMAND, { bytes: bytes }); -} -/** - * @deprecated since version v0.5.x - * Brute force listen to clipboard text update. - * Detect update by comparing current value with previous value every delay ms. - * When there is a update, "plugin:clipboard://text-changed" is emitted. - * You still need to listen to the event. - * - * @param delay check interval delay - * @returns a stop running function that can be called when component unmounts - */ -function startBruteForceTextMonitor(delay = 500) { - let prevText = ""; - let active = true; // whether the listener should be running - setTimeout(async function x() { - try { - const text = await readText(); - if (prevText !== text) { - await event.emit(TEXT_CHANGED, { value: text }); - } - prevText = text; - } - catch (error) { } - if (active) - setTimeout(x, delay); - }, delay); - return function () { - active = false; - }; -} -/** - * @deprecated since version v0.5.x - * Brute force monitor clipboard image update by comparing current value with previous value. - * When there is a update, "plugin:clipboard://image-changed" is emitted. - * You still need to listen to the event. - * - * @param delay check interval delay - * @returns stop running function that can be called to stop the monitor - */ -function startBruteForceImageMonitor(delay = 1000) { - let prevImg = ""; - let active = true; // whether the listener should be running - setTimeout(async function x() { - try { - const img = await readImageBase64(); - if (prevImg !== img) { - await event.emit(IMAGE_CHANGED, { value: img }); - } - prevImg = img; - } - catch (error) { - // ! when there is no image in clipboard, there may be error thrown, we ignore the error - } - if (active) - setTimeout(x, delay); - }, delay); - return function () { - active = false; - }; -} -function getAvailableTypes() { - return core.invoke(AVAILABLE_TYPES_COMMAND); -} -/** - * Listen to "plugin:clipboard://clipboard-monitor/update" from Tauri core. - * The corresponding clipboard type event will be emitted when there is clipboard update. - * @param listenTypes types of clipboard data to listen to - * @returns unlisten function - */ -function listenToClipboard(listenTypes = { - text: true, - html: true, - rtf: true, - image: true, - imageBinary: false, - files: true -}) { - return event.listen(MONITOR_UPDATE_EVENT, async (e) => { - if (e.payload === "clipboard update") { - const hasData = await Promise.all([hasFiles(), hasImage(), hasHTML(), hasRTF(), hasText()]); - const flags = { - files: hasData[0], - image: hasData[1], - imageBinary: hasData[1], - html: hasData[2], - rtf: hasData[3], - text: hasData[4] - }; - await event.emit(SOMETHING_CHANGED, flags); - if (listenTypes.files && flags.files) { - const files = await readFiles(); - if (files && files.length > 0) { - await event.emit(FILES_CHANGED, { value: files }); - } - // flags.files = true; - return; // ! this return is necessary, copying files also update clipboard text, but we don't want text update to be triggered - } - if (listenTypes.image && flags.image) { - const img = await readImageBase64(); - if (img) - await event.emit(IMAGE_CHANGED, { value: img }); - // flags.image = true; - } - if (listenTypes.imageBinary && flags.imageBinary) { - const img = await readImageBinary("int_array"); - if (img) - await event.emit(IMAGE_BINARY_CHANGED, { value: img }); - // flags.imageBinary = true; - } - if (listenTypes.html && flags.html) { - await event.emit(HTML_CHANGED, { value: await readHtml() }); - // flags.html = true; - } - if (listenTypes.rtf && flags.rtf) { - await event.emit(RTF_CHANGED, { value: await readRtf() }); - // flags.rtf = true; - } - if (listenTypes.text && flags.text) { - await event.emit(TEXT_CHANGED, { value: await readText() }); - // flags.text = true; - } - // when clear() is called, this error is thrown, let ignore it - // if (!success) { - // throw new Error("Unexpected Error: No proper clipboard type"); - // } - } - }); -} -/** - * This listen to clipboard monitor update event, and trigger the callback function. - * @param cb callback - * @returns unlisten function - */ -async function onClipboardUpdate(cb) { - return await event.listen(MONITOR_UPDATE_EVENT, (event) => { - cb(event.payload); - }); -} -async function onTextUpdate(cb) { - return await event.listen(TEXT_CHANGED, (event) => { - const text = v__namespace.parse(ClipboardChangedPayloadSchema, event.payload).value; - cb(text); - }); -} -/** - * Listen to clipboard update event and get the updated types in a callback. - * This listener tells you what types of data are updated. - * This relies on `listenToClipboard()` who emits events this function listens to. - * You can run `listenToClipboard()` or `startListening()` before calling this function. - * When HTML is copied, this will be passed to callback: {files: false, image: false, html: true, rtf: false, text: true} - * @param cb - * @returns - */ -function onSomethingUpdate(cb) { - return event.listen(SOMETHING_CHANGED, (event) => { - cb(event.payload); - }); -} -function onHTMLUpdate(cb) { - return event.listen(HTML_CHANGED, (event) => { - const text = v__namespace.parse(ClipboardChangedPayloadSchema, event.payload).value; - cb(text); - }); -} -function onRTFUpdate(cb) { - return event.listen(RTF_CHANGED, (event) => { - const text = v__namespace.parse(ClipboardChangedPayloadSchema, event.payload).value; - cb(text); - }); -} -function onFilesUpdate(cb) { - return event.listen(FILES_CHANGED, (event) => { - const files = v__namespace.parse(ClipboardChangedFilesPayloadSchema, event.payload).value; - cb(files); - }); -} -function onImageUpdate(cb) { - return event.listen(IMAGE_CHANGED, (event) => { - const base64ImageStr = v__namespace.parse(ClipboardChangedPayloadSchema, event.payload).value; - cb(base64ImageStr); - }); -} -function onImageBinaryUpdate(cb) { - return event.listen(IMAGE_BINARY_CHANGED, (event) => { - cb(v__namespace.parse(ClipboardBinaryChangedPayloadSchema, event.payload).value); - }); -} -/** - * Used to check the status of clipboard monitor - * @returns Whether the monitor is running - */ -function isMonitorRunning() { - return core.invoke(IS_MONITOR_RUNNING_COMMAND).then((res) => v__namespace.parse(v__namespace.boolean(), res)); -} -/** - * Start running mointor thread in Tauri core. This feature is added in v0.5.x. - * Before v0.5.x, the monitor is started during setup when app starts. - * After v0.5.x, this function must be called first to start monitor. - * After monitor is started, events "plugin:clipboard://clipboard-monitor/update" will be emitted when there is clipboard update. - * "plugin:clipboard://clipboard-monitor/status" event is also emitted when monitor status updates - * Still have to listen to these events. - */ -function startMonitor() { - return core.invoke(START_MONITOR_COMMAND); -} -/** - * Stop clipboard monitor thread. - */ -function stopMonitor() { - return core.invoke(STOP_MONITOR_COMMAND); -} -/** - * Listen to monitor status update. Instead of calling isMonitorRunning to get status of monitor, - * "plugin:clipboard://clipboard-monitor/status" event is emitted from Tauri core when monitor status updates. - * @param cb callback to be called when there is monitor status update - */ -async function listenToMonitorStatusUpdate(cb) { - return await event.listen(CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT, (event) => { - const newStatus = v__namespace.parse(v__namespace.boolean(), event.payload); - cb(newStatus); - }); -} -function startListening(listenTypes = { - text: true, - html: true, - rtf: true, - image: true, - imageBinary: false, - files: true -}) { - return startMonitor() - .then(() => listenToClipboard(listenTypes)) - .then((unlistenClipboard) => { - // return an unlisten function that stop listening to clipboard update and stop the monitor - return async () => { - unlistenClipboard(); - await stopMonitor(); - }; - }); -} - -var api = /*#__PURE__*/Object.freeze({ - __proto__: null, - AVAILABLE_TYPES_COMMAND: AVAILABLE_TYPES_COMMAND, - CLEAR_COMMAND: CLEAR_COMMAND, - CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT: CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT, - ClipboardBinaryChangedPayloadSchema: ClipboardBinaryChangedPayloadSchema, - ClipboardChangedFilesPayloadSchema: ClipboardChangedFilesPayloadSchema, - ClipboardChangedPayloadSchema: ClipboardChangedPayloadSchema, - FILES_CHANGED: FILES_CHANGED, - HAS_FILES_COMMAND: HAS_FILES_COMMAND, - HAS_HTML_COMMAND: HAS_HTML_COMMAND, - HAS_IMAGE_COMMAND: HAS_IMAGE_COMMAND, - HAS_RTF_COMMAND: HAS_RTF_COMMAND, - HAS_TEXT_COMMAND: HAS_TEXT_COMMAND, - HTML_CHANGED: HTML_CHANGED, - IMAGE_BINARY_CHANGED: IMAGE_BINARY_CHANGED, - IMAGE_CHANGED: IMAGE_CHANGED, - IS_MONITOR_RUNNING_COMMAND: IS_MONITOR_RUNNING_COMMAND, - MONITOR_UPDATE_EVENT: MONITOR_UPDATE_EVENT, - READ_FILES_COMMAND: READ_FILES_COMMAND, - READ_FILES_URIS_COMMAND: READ_FILES_URIS_COMMAND, - READ_HTML_COMMAND: READ_HTML_COMMAND, - READ_IMAGE_BASE64_COMMAND: READ_IMAGE_BASE64_COMMAND, - READ_IMAGE_BINARY_COMMAND: READ_IMAGE_BINARY_COMMAND, - READ_RTF_COMMAND: READ_RTF_COMMAND, - READ_TEXT_COMMAND: READ_TEXT_COMMAND, - RTF_CHANGED: RTF_CHANGED, - SOMETHING_CHANGED: SOMETHING_CHANGED, - START_MONITOR_COMMAND: START_MONITOR_COMMAND, - STOP_MONITOR_COMMAND: STOP_MONITOR_COMMAND, - TEXT_CHANGED: TEXT_CHANGED, - WRITE_FILES_COMMAND: WRITE_FILES_COMMAND, - WRITE_FILES_URIS_COMMAND: WRITE_FILES_URIS_COMMAND, - WRITE_HTML_AND_TEXT_COMMAND: WRITE_HTML_AND_TEXT_COMMAND, - WRITE_HTML_COMMAND: WRITE_HTML_COMMAND, - WRITE_IMAGE_BASE64_COMMAND: WRITE_IMAGE_BASE64_COMMAND, - WRITE_IMAGE_BINARY_COMMAND: WRITE_IMAGE_BINARY_COMMAND, - WRITE_RTF_COMMAND: WRITE_RTF_COMMAND, - WRITE_TEXT_COMMAND: WRITE_TEXT_COMMAND, - clear: clear, - convertIntArrToUint8Array: convertIntArrToUint8Array, - convertUint8ArrayToBlob: convertUint8ArrayToBlob, - getAvailableTypes: getAvailableTypes, - hasFiles: hasFiles, - hasHTML: hasHTML, - hasImage: hasImage, - hasRTF: hasRTF, - hasText: hasText, - isMonitorRunning: isMonitorRunning, - listenToClipboard: listenToClipboard, - listenToMonitorStatusUpdate: listenToMonitorStatusUpdate, - onClipboardUpdate: onClipboardUpdate, - onFilesUpdate: onFilesUpdate, - onHTMLUpdate: onHTMLUpdate, - onImageBinaryUpdate: onImageBinaryUpdate, - onImageUpdate: onImageUpdate, - onRTFUpdate: onRTFUpdate, - onSomethingUpdate: onSomethingUpdate, - onTextUpdate: onTextUpdate, - readFiles: readFiles, - readFilesURIs: readFilesURIs, - readHtml: readHtml, - readImageBase64: readImageBase64, - readImageBinary: readImageBinary, - readImageObjectURL: readImageObjectURL, - readRtf: readRtf, - readText: readText, - startBruteForceImageMonitor: startBruteForceImageMonitor, - startBruteForceTextMonitor: startBruteForceTextMonitor, - startListening: startListening, - startMonitor: startMonitor, - stopMonitor: stopMonitor, - writeFiles: writeFiles, - writeFilesURIs: writeFilesURIs, - writeHtml: writeHtml, - writeHtmlAndText: writeHtmlAndText, - writeImageBase64: writeImageBase64, - writeImageBinary: writeImageBinary, - writeRtf: writeRtf, - writeText: writeText -}); - -exports.AVAILABLE_TYPES_COMMAND = AVAILABLE_TYPES_COMMAND; -exports.CLEAR_COMMAND = CLEAR_COMMAND; -exports.CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT = CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT; -exports.ClipboardBinaryChangedPayloadSchema = ClipboardBinaryChangedPayloadSchema; -exports.ClipboardChangedFilesPayloadSchema = ClipboardChangedFilesPayloadSchema; -exports.ClipboardChangedPayloadSchema = ClipboardChangedPayloadSchema; -exports.FILES_CHANGED = FILES_CHANGED; -exports.HAS_FILES_COMMAND = HAS_FILES_COMMAND; -exports.HAS_HTML_COMMAND = HAS_HTML_COMMAND; -exports.HAS_IMAGE_COMMAND = HAS_IMAGE_COMMAND; -exports.HAS_RTF_COMMAND = HAS_RTF_COMMAND; -exports.HAS_TEXT_COMMAND = HAS_TEXT_COMMAND; -exports.HTML_CHANGED = HTML_CHANGED; -exports.IMAGE_BINARY_CHANGED = IMAGE_BINARY_CHANGED; -exports.IMAGE_CHANGED = IMAGE_CHANGED; -exports.IS_MONITOR_RUNNING_COMMAND = IS_MONITOR_RUNNING_COMMAND; -exports.MONITOR_UPDATE_EVENT = MONITOR_UPDATE_EVENT; -exports.READ_FILES_COMMAND = READ_FILES_COMMAND; -exports.READ_FILES_URIS_COMMAND = READ_FILES_URIS_COMMAND; -exports.READ_HTML_COMMAND = READ_HTML_COMMAND; -exports.READ_IMAGE_BASE64_COMMAND = READ_IMAGE_BASE64_COMMAND; -exports.READ_IMAGE_BINARY_COMMAND = READ_IMAGE_BINARY_COMMAND; -exports.READ_RTF_COMMAND = READ_RTF_COMMAND; -exports.READ_TEXT_COMMAND = READ_TEXT_COMMAND; -exports.RTF_CHANGED = RTF_CHANGED; -exports.SOMETHING_CHANGED = SOMETHING_CHANGED; -exports.START_MONITOR_COMMAND = START_MONITOR_COMMAND; -exports.STOP_MONITOR_COMMAND = STOP_MONITOR_COMMAND; -exports.TEXT_CHANGED = TEXT_CHANGED; -exports.WRITE_FILES_COMMAND = WRITE_FILES_COMMAND; -exports.WRITE_FILES_URIS_COMMAND = WRITE_FILES_URIS_COMMAND; -exports.WRITE_HTML_AND_TEXT_COMMAND = WRITE_HTML_AND_TEXT_COMMAND; -exports.WRITE_HTML_COMMAND = WRITE_HTML_COMMAND; -exports.WRITE_IMAGE_BASE64_COMMAND = WRITE_IMAGE_BASE64_COMMAND; -exports.WRITE_IMAGE_BINARY_COMMAND = WRITE_IMAGE_BINARY_COMMAND; -exports.WRITE_RTF_COMMAND = WRITE_RTF_COMMAND; -exports.WRITE_TEXT_COMMAND = WRITE_TEXT_COMMAND; -exports.clear = clear; -exports.convertIntArrToUint8Array = convertIntArrToUint8Array; -exports.convertUint8ArrayToBlob = convertUint8ArrayToBlob; -exports.default = api; -exports.getAvailableTypes = getAvailableTypes; -exports.hasFiles = hasFiles; -exports.hasHTML = hasHTML; -exports.hasImage = hasImage; -exports.hasRTF = hasRTF; -exports.hasText = hasText; -exports.isMonitorRunning = isMonitorRunning; -exports.listenToClipboard = listenToClipboard; -exports.listenToMonitorStatusUpdate = listenToMonitorStatusUpdate; -exports.onClipboardUpdate = onClipboardUpdate; -exports.onFilesUpdate = onFilesUpdate; -exports.onHTMLUpdate = onHTMLUpdate; -exports.onImageBinaryUpdate = onImageBinaryUpdate; -exports.onImageUpdate = onImageUpdate; -exports.onRTFUpdate = onRTFUpdate; -exports.onSomethingUpdate = onSomethingUpdate; -exports.onTextUpdate = onTextUpdate; -exports.readFiles = readFiles; -exports.readFilesURIs = readFilesURIs; -exports.readHtml = readHtml; -exports.readImageBase64 = readImageBase64; -exports.readImageBinary = readImageBinary; -exports.readImageObjectURL = readImageObjectURL; -exports.readRtf = readRtf; -exports.readText = readText; -exports.startBruteForceImageMonitor = startBruteForceImageMonitor; -exports.startBruteForceTextMonitor = startBruteForceTextMonitor; -exports.startListening = startListening; -exports.startMonitor = startMonitor; -exports.stopMonitor = stopMonitor; -exports.writeFiles = writeFiles; -exports.writeFilesURIs = writeFilesURIs; -exports.writeHtml = writeHtml; -exports.writeHtmlAndText = writeHtmlAndText; -exports.writeImageBase64 = writeImageBase64; -exports.writeImageBinary = writeImageBinary; -exports.writeRtf = writeRtf; -exports.writeText = writeText; diff --git a/dist-js/index.d.ts b/dist-js/index.d.ts deleted file mode 100644 index ce1223f..0000000 --- a/dist-js/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./api"; -export * as default from "./api"; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/dist-js/index.d.ts.map b/dist-js/index.d.ts.map deleted file mode 100644 index a6fbaf3..0000000 --- a/dist-js/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../guest-js/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,OAAO,KAAK,OAAO,MAAM,OAAO,CAAC"} \ No newline at end of file diff --git a/dist-js/index.js b/dist-js/index.js deleted file mode 100644 index e57e360..0000000 --- a/dist-js/index.js +++ /dev/null @@ -1,482 +0,0 @@ -import * as v from 'valibot'; -import { invoke } from '@tauri-apps/api/core'; -import { emit, listen } from '@tauri-apps/api/event'; - -const buildCmd = (cmd) => `plugin:clipboard|${cmd}`; -const buildEventUrl = (event) => `plugin:clipboard://${event}`; -const START_MONITOR_COMMAND = buildCmd("start_monitor"); -const STOP_MONITOR_COMMAND = buildCmd("stop_monitor"); -const SOMETHING_CHANGED = buildEventUrl("something-changed"); -const TEXT_CHANGED = buildEventUrl("text-changed"); -const HTML_CHANGED = buildEventUrl("html-changed"); -const RTF_CHANGED = buildEventUrl("rtf-changed"); -const FILES_CHANGED = buildEventUrl("files-changed"); -const IMAGE_CHANGED = buildEventUrl("image-changed"); -const IMAGE_BINARY_CHANGED = buildEventUrl("image-changed-binary"); -const IS_MONITOR_RUNNING_COMMAND = buildCmd("is_monitor_running"); -const HAS_TEXT_COMMAND = buildCmd("has_text"); -const HAS_IMAGE_COMMAND = buildCmd("has_image"); -const HAS_HTML_COMMAND = buildCmd("has_html"); -const HAS_RTF_COMMAND = buildCmd("has_rtf"); -const HAS_FILES_COMMAND = buildCmd("has_files"); -const AVAILABLE_TYPES_COMMAND = buildCmd("available_types"); -const WRITE_TEXT_COMMAND = buildCmd("write_text"); -const WRITE_HTML_COMMAND = buildCmd("write_html"); -const WRITE_HTML_AND_TEXT_COMMAND = buildCmd("write_html_and_text"); -const WRITE_RTF_COMMAND = buildCmd("write_rtf"); -const WRITE_FILES_URIS_COMMAND = buildCmd("write_files_uris"); -const WRITE_FILES_COMMAND = buildCmd("write_files"); -const CLEAR_COMMAND = buildCmd("clear"); -const READ_TEXT_COMMAND = buildCmd("read_text"); -const READ_HTML_COMMAND = buildCmd("read_html"); -const READ_RTF_COMMAND = buildCmd("read_rtf"); -const READ_FILES_COMMAND = buildCmd("read_files"); -const READ_FILES_URIS_COMMAND = buildCmd("read_files_uris"); -const READ_IMAGE_BINARY_COMMAND = buildCmd("read_image_binary"); -const READ_IMAGE_BASE64_COMMAND = buildCmd("read_image_base64"); -const WRITE_IMAGE_BINARY_COMMAND = buildCmd("write_image_binary"); -const WRITE_IMAGE_BASE64_COMMAND = buildCmd("write_image_base64"); -const CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT = buildEventUrl("clipboard-monitor/status"); -const MONITOR_UPDATE_EVENT = buildEventUrl("clipboard-monitor/update"); -const ClipboardChangedPayloadSchema = v.object({ value: v.string() }); -const ClipboardBinaryChangedPayloadSchema = v.object({ - value: v.array(v.number()) -}); -const ClipboardChangedFilesPayloadSchema = v.object({ - value: v.array(v.string()) -}); -function hasText() { - return invoke(HAS_TEXT_COMMAND); -} -function hasHTML() { - return invoke(HAS_HTML_COMMAND); -} -function hasRTF() { - return invoke(HAS_RTF_COMMAND); -} -function hasImage() { - return invoke(HAS_IMAGE_COMMAND); -} -function hasFiles() { - return invoke(HAS_FILES_COMMAND); -} -function writeText(text) { - return invoke(WRITE_TEXT_COMMAND, { text }); -} -function writeHtml(html) { - return invoke(WRITE_HTML_COMMAND, { html }); -} -/** - * Write html and text to clipboard. - * writeHtml API only writes html, readText will return nothing. - * This API writes both html and text, so readText will return the text. - */ -function writeHtmlAndText(html, text) { - return invoke(WRITE_HTML_AND_TEXT_COMMAND, { html, text }); -} -function writeRtf(rtf) { - return invoke(WRITE_RTF_COMMAND, { rtf }); -} -function writeFilesURIs(filesUris) { - return invoke(WRITE_FILES_URIS_COMMAND, { filesUris }); -} -function writeFiles(filesPaths) { - return invoke(WRITE_FILES_COMMAND, { filesPaths }); -} -function clear() { - return invoke(CLEAR_COMMAND); -} -function readText() { - return invoke(READ_TEXT_COMMAND); -} -function readHtml() { - return invoke(READ_HTML_COMMAND); -} -function readRtf() { - return invoke(READ_RTF_COMMAND); -} -function readFiles() { - return invoke(READ_FILES_COMMAND); -} -function readFilesURIs() { - return invoke(READ_FILES_URIS_COMMAND); -} -/** - * read clipboard image - * @returns image in base64 string - */ -function readImageBase64() { - return invoke(READ_IMAGE_BASE64_COMMAND); -} -// export const readImageBase64 = readImage; -/** - * Read clipboard image, get the data in binary format - * int_array (Array) is received from Tauri core, Uint8Array and Blob are transformed from int_array - * @param format data type of returned value, "int_array" is the fastest - * @returns - */ -function readImageBinary(format) { - return invoke(READ_IMAGE_BINARY_COMMAND).then((img_arr) => { - switch (format) { - case "int_array": - return img_arr; - case "Uint8Array": - return new Uint8Array(img_arr); - case "Blob": - return new Blob([new Uint8Array(img_arr)]); - default: - return img_arr; - } - }); -} -function convertIntArrToUint8Array(intArr) { - return new Uint8Array(intArr); -} -function convertUint8ArrayToBlob(uintArr) { - return new Blob([uintArr]); -} -/** - * Here is the transformation flow, - * read clipboard image as Array (int_array) -> int_array -> Uint8Array -> Blob -> ObjectURL - * There are many layers which could make this function slow for large images. - * @returns ObjectURL for clipboard image - */ -function readImageObjectURL() { - return readImageBinary("Blob").then((blob) => { - return URL.createObjectURL(blob); - }); -} -/** - * write image to clipboard - * @param data image data in base64 encoded string - * @returns Promise - */ -function writeImageBase64(base64) { - return invoke(WRITE_IMAGE_BASE64_COMMAND, { base64Image: base64 }); -} -function writeImageBinary(bytes) { - return invoke(WRITE_IMAGE_BINARY_COMMAND, { bytes: bytes }); -} -/** - * @deprecated since version v0.5.x - * Brute force listen to clipboard text update. - * Detect update by comparing current value with previous value every delay ms. - * When there is a update, "plugin:clipboard://text-changed" is emitted. - * You still need to listen to the event. - * - * @param delay check interval delay - * @returns a stop running function that can be called when component unmounts - */ -function startBruteForceTextMonitor(delay = 500) { - let prevText = ""; - let active = true; // whether the listener should be running - setTimeout(async function x() { - try { - const text = await readText(); - if (prevText !== text) { - await emit(TEXT_CHANGED, { value: text }); - } - prevText = text; - } - catch (error) { } - if (active) - setTimeout(x, delay); - }, delay); - return function () { - active = false; - }; -} -/** - * @deprecated since version v0.5.x - * Brute force monitor clipboard image update by comparing current value with previous value. - * When there is a update, "plugin:clipboard://image-changed" is emitted. - * You still need to listen to the event. - * - * @param delay check interval delay - * @returns stop running function that can be called to stop the monitor - */ -function startBruteForceImageMonitor(delay = 1000) { - let prevImg = ""; - let active = true; // whether the listener should be running - setTimeout(async function x() { - try { - const img = await readImageBase64(); - if (prevImg !== img) { - await emit(IMAGE_CHANGED, { value: img }); - } - prevImg = img; - } - catch (error) { - // ! when there is no image in clipboard, there may be error thrown, we ignore the error - } - if (active) - setTimeout(x, delay); - }, delay); - return function () { - active = false; - }; -} -function getAvailableTypes() { - return invoke(AVAILABLE_TYPES_COMMAND); -} -/** - * Listen to "plugin:clipboard://clipboard-monitor/update" from Tauri core. - * The corresponding clipboard type event will be emitted when there is clipboard update. - * @param listenTypes types of clipboard data to listen to - * @returns unlisten function - */ -function listenToClipboard(listenTypes = { - text: true, - html: true, - rtf: true, - image: true, - imageBinary: false, - files: true -}) { - return listen(MONITOR_UPDATE_EVENT, async (e) => { - if (e.payload === "clipboard update") { - const hasData = await Promise.all([hasFiles(), hasImage(), hasHTML(), hasRTF(), hasText()]); - const flags = { - files: hasData[0], - image: hasData[1], - imageBinary: hasData[1], - html: hasData[2], - rtf: hasData[3], - text: hasData[4] - }; - await emit(SOMETHING_CHANGED, flags); - if (listenTypes.files && flags.files) { - const files = await readFiles(); - if (files && files.length > 0) { - await emit(FILES_CHANGED, { value: files }); - } - // flags.files = true; - return; // ! this return is necessary, copying files also update clipboard text, but we don't want text update to be triggered - } - if (listenTypes.image && flags.image) { - const img = await readImageBase64(); - if (img) - await emit(IMAGE_CHANGED, { value: img }); - // flags.image = true; - } - if (listenTypes.imageBinary && flags.imageBinary) { - const img = await readImageBinary("int_array"); - if (img) - await emit(IMAGE_BINARY_CHANGED, { value: img }); - // flags.imageBinary = true; - } - if (listenTypes.html && flags.html) { - await emit(HTML_CHANGED, { value: await readHtml() }); - // flags.html = true; - } - if (listenTypes.rtf && flags.rtf) { - await emit(RTF_CHANGED, { value: await readRtf() }); - // flags.rtf = true; - } - if (listenTypes.text && flags.text) { - await emit(TEXT_CHANGED, { value: await readText() }); - // flags.text = true; - } - // when clear() is called, this error is thrown, let ignore it - // if (!success) { - // throw new Error("Unexpected Error: No proper clipboard type"); - // } - } - }); -} -/** - * This listen to clipboard monitor update event, and trigger the callback function. - * @param cb callback - * @returns unlisten function - */ -async function onClipboardUpdate(cb) { - return await listen(MONITOR_UPDATE_EVENT, (event) => { - cb(event.payload); - }); -} -async function onTextUpdate(cb) { - return await listen(TEXT_CHANGED, (event) => { - const text = v.parse(ClipboardChangedPayloadSchema, event.payload).value; - cb(text); - }); -} -/** - * Listen to clipboard update event and get the updated types in a callback. - * This listener tells you what types of data are updated. - * This relies on `listenToClipboard()` who emits events this function listens to. - * You can run `listenToClipboard()` or `startListening()` before calling this function. - * When HTML is copied, this will be passed to callback: {files: false, image: false, html: true, rtf: false, text: true} - * @param cb - * @returns - */ -function onSomethingUpdate(cb) { - return listen(SOMETHING_CHANGED, (event) => { - cb(event.payload); - }); -} -function onHTMLUpdate(cb) { - return listen(HTML_CHANGED, (event) => { - const text = v.parse(ClipboardChangedPayloadSchema, event.payload).value; - cb(text); - }); -} -function onRTFUpdate(cb) { - return listen(RTF_CHANGED, (event) => { - const text = v.parse(ClipboardChangedPayloadSchema, event.payload).value; - cb(text); - }); -} -function onFilesUpdate(cb) { - return listen(FILES_CHANGED, (event) => { - const files = v.parse(ClipboardChangedFilesPayloadSchema, event.payload).value; - cb(files); - }); -} -function onImageUpdate(cb) { - return listen(IMAGE_CHANGED, (event) => { - const base64ImageStr = v.parse(ClipboardChangedPayloadSchema, event.payload).value; - cb(base64ImageStr); - }); -} -function onImageBinaryUpdate(cb) { - return listen(IMAGE_BINARY_CHANGED, (event) => { - cb(v.parse(ClipboardBinaryChangedPayloadSchema, event.payload).value); - }); -} -/** - * Used to check the status of clipboard monitor - * @returns Whether the monitor is running - */ -function isMonitorRunning() { - return invoke(IS_MONITOR_RUNNING_COMMAND).then((res) => v.parse(v.boolean(), res)); -} -/** - * Start running mointor thread in Tauri core. This feature is added in v0.5.x. - * Before v0.5.x, the monitor is started during setup when app starts. - * After v0.5.x, this function must be called first to start monitor. - * After monitor is started, events "plugin:clipboard://clipboard-monitor/update" will be emitted when there is clipboard update. - * "plugin:clipboard://clipboard-monitor/status" event is also emitted when monitor status updates - * Still have to listen to these events. - */ -function startMonitor() { - return invoke(START_MONITOR_COMMAND); -} -/** - * Stop clipboard monitor thread. - */ -function stopMonitor() { - return invoke(STOP_MONITOR_COMMAND); -} -/** - * Listen to monitor status update. Instead of calling isMonitorRunning to get status of monitor, - * "plugin:clipboard://clipboard-monitor/status" event is emitted from Tauri core when monitor status updates. - * @param cb callback to be called when there is monitor status update - */ -async function listenToMonitorStatusUpdate(cb) { - return await listen(CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT, (event) => { - const newStatus = v.parse(v.boolean(), event.payload); - cb(newStatus); - }); -} -function startListening(listenTypes = { - text: true, - html: true, - rtf: true, - image: true, - imageBinary: false, - files: true -}) { - return startMonitor() - .then(() => listenToClipboard(listenTypes)) - .then((unlistenClipboard) => { - // return an unlisten function that stop listening to clipboard update and stop the monitor - return async () => { - unlistenClipboard(); - await stopMonitor(); - }; - }); -} - -var api = /*#__PURE__*/Object.freeze({ - __proto__: null, - AVAILABLE_TYPES_COMMAND: AVAILABLE_TYPES_COMMAND, - CLEAR_COMMAND: CLEAR_COMMAND, - CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT: CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT, - ClipboardBinaryChangedPayloadSchema: ClipboardBinaryChangedPayloadSchema, - ClipboardChangedFilesPayloadSchema: ClipboardChangedFilesPayloadSchema, - ClipboardChangedPayloadSchema: ClipboardChangedPayloadSchema, - FILES_CHANGED: FILES_CHANGED, - HAS_FILES_COMMAND: HAS_FILES_COMMAND, - HAS_HTML_COMMAND: HAS_HTML_COMMAND, - HAS_IMAGE_COMMAND: HAS_IMAGE_COMMAND, - HAS_RTF_COMMAND: HAS_RTF_COMMAND, - HAS_TEXT_COMMAND: HAS_TEXT_COMMAND, - HTML_CHANGED: HTML_CHANGED, - IMAGE_BINARY_CHANGED: IMAGE_BINARY_CHANGED, - IMAGE_CHANGED: IMAGE_CHANGED, - IS_MONITOR_RUNNING_COMMAND: IS_MONITOR_RUNNING_COMMAND, - MONITOR_UPDATE_EVENT: MONITOR_UPDATE_EVENT, - READ_FILES_COMMAND: READ_FILES_COMMAND, - READ_FILES_URIS_COMMAND: READ_FILES_URIS_COMMAND, - READ_HTML_COMMAND: READ_HTML_COMMAND, - READ_IMAGE_BASE64_COMMAND: READ_IMAGE_BASE64_COMMAND, - READ_IMAGE_BINARY_COMMAND: READ_IMAGE_BINARY_COMMAND, - READ_RTF_COMMAND: READ_RTF_COMMAND, - READ_TEXT_COMMAND: READ_TEXT_COMMAND, - RTF_CHANGED: RTF_CHANGED, - SOMETHING_CHANGED: SOMETHING_CHANGED, - START_MONITOR_COMMAND: START_MONITOR_COMMAND, - STOP_MONITOR_COMMAND: STOP_MONITOR_COMMAND, - TEXT_CHANGED: TEXT_CHANGED, - WRITE_FILES_COMMAND: WRITE_FILES_COMMAND, - WRITE_FILES_URIS_COMMAND: WRITE_FILES_URIS_COMMAND, - WRITE_HTML_AND_TEXT_COMMAND: WRITE_HTML_AND_TEXT_COMMAND, - WRITE_HTML_COMMAND: WRITE_HTML_COMMAND, - WRITE_IMAGE_BASE64_COMMAND: WRITE_IMAGE_BASE64_COMMAND, - WRITE_IMAGE_BINARY_COMMAND: WRITE_IMAGE_BINARY_COMMAND, - WRITE_RTF_COMMAND: WRITE_RTF_COMMAND, - WRITE_TEXT_COMMAND: WRITE_TEXT_COMMAND, - clear: clear, - convertIntArrToUint8Array: convertIntArrToUint8Array, - convertUint8ArrayToBlob: convertUint8ArrayToBlob, - getAvailableTypes: getAvailableTypes, - hasFiles: hasFiles, - hasHTML: hasHTML, - hasImage: hasImage, - hasRTF: hasRTF, - hasText: hasText, - isMonitorRunning: isMonitorRunning, - listenToClipboard: listenToClipboard, - listenToMonitorStatusUpdate: listenToMonitorStatusUpdate, - onClipboardUpdate: onClipboardUpdate, - onFilesUpdate: onFilesUpdate, - onHTMLUpdate: onHTMLUpdate, - onImageBinaryUpdate: onImageBinaryUpdate, - onImageUpdate: onImageUpdate, - onRTFUpdate: onRTFUpdate, - onSomethingUpdate: onSomethingUpdate, - onTextUpdate: onTextUpdate, - readFiles: readFiles, - readFilesURIs: readFilesURIs, - readHtml: readHtml, - readImageBase64: readImageBase64, - readImageBinary: readImageBinary, - readImageObjectURL: readImageObjectURL, - readRtf: readRtf, - readText: readText, - startBruteForceImageMonitor: startBruteForceImageMonitor, - startBruteForceTextMonitor: startBruteForceTextMonitor, - startListening: startListening, - startMonitor: startMonitor, - stopMonitor: stopMonitor, - writeFiles: writeFiles, - writeFilesURIs: writeFilesURIs, - writeHtml: writeHtml, - writeHtmlAndText: writeHtmlAndText, - writeImageBase64: writeImageBase64, - writeImageBinary: writeImageBinary, - writeRtf: writeRtf, - writeText: writeText -}); - -export { AVAILABLE_TYPES_COMMAND, CLEAR_COMMAND, CLIPBOARD_MONITOR_STATUS_UPDATE_EVENT, ClipboardBinaryChangedPayloadSchema, ClipboardChangedFilesPayloadSchema, ClipboardChangedPayloadSchema, FILES_CHANGED, HAS_FILES_COMMAND, HAS_HTML_COMMAND, HAS_IMAGE_COMMAND, HAS_RTF_COMMAND, HAS_TEXT_COMMAND, HTML_CHANGED, IMAGE_BINARY_CHANGED, IMAGE_CHANGED, IS_MONITOR_RUNNING_COMMAND, MONITOR_UPDATE_EVENT, READ_FILES_COMMAND, READ_FILES_URIS_COMMAND, READ_HTML_COMMAND, READ_IMAGE_BASE64_COMMAND, READ_IMAGE_BINARY_COMMAND, READ_RTF_COMMAND, READ_TEXT_COMMAND, RTF_CHANGED, SOMETHING_CHANGED, START_MONITOR_COMMAND, STOP_MONITOR_COMMAND, TEXT_CHANGED, WRITE_FILES_COMMAND, WRITE_FILES_URIS_COMMAND, WRITE_HTML_AND_TEXT_COMMAND, WRITE_HTML_COMMAND, WRITE_IMAGE_BASE64_COMMAND, WRITE_IMAGE_BINARY_COMMAND, WRITE_RTF_COMMAND, WRITE_TEXT_COMMAND, clear, convertIntArrToUint8Array, convertUint8ArrayToBlob, api as default, getAvailableTypes, hasFiles, hasHTML, hasImage, hasRTF, hasText, isMonitorRunning, listenToClipboard, listenToMonitorStatusUpdate, onClipboardUpdate, onFilesUpdate, onHTMLUpdate, onImageBinaryUpdate, onImageUpdate, onRTFUpdate, onSomethingUpdate, onTextUpdate, readFiles, readFilesURIs, readHtml, readImageBase64, readImageBinary, readImageObjectURL, readRtf, readText, startBruteForceImageMonitor, startBruteForceTextMonitor, startListening, startMonitor, stopMonitor, writeFiles, writeFilesURIs, writeHtml, writeHtmlAndText, writeImageBase64, writeImageBinary, writeRtf, writeText }; diff --git a/zzz_pnpm-lock.yaml b/pnpm-lock.yaml similarity index 100% rename from zzz_pnpm-lock.yaml rename to pnpm-lock.yaml From 53de4d33adb0847b2aed7e23855d87b5fa057130 Mon Sep 17 00:00:00 2001 From: Jason Terando Date: Sat, 21 Sep 2024 23:02:40 -0500 Subject: [PATCH 8/9] Switch to available_formats for on_clipboard_change notification --- .../demo/src/lib/components/listener.svelte | 12 +++--- src/desktop.rs | 41 ++++++++++++++----- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/examples/demo/src/lib/components/listener.svelte b/examples/demo/src/lib/components/listener.svelte index 4ec84a6..83d6e00 100644 --- a/examples/demo/src/lib/components/listener.svelte +++ b/examples/demo/src/lib/components/listener.svelte @@ -68,12 +68,12 @@ unlistenAvail = await onClipboardUpdate(async (values) => { clear(); - has.hasHTML = values.payload.html; - has.hasImage = values.payload.image; - has.hasText = values.payload.text; - has.hasRTF = values.payload.rtf - has.hasFiles = values.payload.files; - console.log('plugin:clipboard://clipboard-monitor/update event received', values.payload); + console.log('plugin:clipboard://clipboard-monitor/update event received', values); + has.hasHTML = values.html; + has.hasImage = values.image; + has.hasText = values.text; + has.hasRTF = values.rtf + has.hasFiles = values.files; }); }); diff --git a/src/desktop.rs b/src/desktop.rs index f441cca..dc03679 100644 --- a/src/desktop.rs +++ b/src/desktop.rs @@ -327,16 +327,37 @@ where fn on_clipboard_change(&mut self) { match self.clipboard_ctx.lock() { Ok(locked) => { - let _ = self.app_handle.emit( - "plugin:clipboard://clipboard-monitor/update", - AvailableTypes { - text: locked.has(ContentFormat::Text), - html: locked.has(ContentFormat::Html), - rtf: locked.has(ContentFormat::Rtf), - image: locked.has(ContentFormat::Image), - files: locked.has(ContentFormat::Files), - }, - ); + if let Ok(formats) = locked.available_formats() { + let mut text = false; + let mut html = false; + let mut rtf = false; + let mut image = false; + let mut files = false; + + for format in formats { + if format == "UTF8_STRING" { + text = true; + } else if format == "text/html" { + html = true; + } else if format == "text/rtf" { + rtf = true; + } else if format == "image/png" { + image = true; + } else if format == "text/uri-list" { + files = true; + } + } + let _ = self.app_handle.emit( + "plugin:clipboard://clipboard-monitor/update", + AvailableTypes { + text, + html, + rtf, + image, + files, + }, + ); + } } Err(err) => { println!("Error accessing clipboard: {}", err); From e90c1bb64a4747f5196144b78d276f687fdf6c2b Mon Sep 17 00:00:00 2001 From: Jason Terando Date: Tue, 24 Sep 2024 23:27:56 -0500 Subject: [PATCH 9/9] For now, have on_clipboard_change call individual .has functions for each type --- src/desktop.rs | 39 +++++++++------------------------------ 1 file changed, 9 insertions(+), 30 deletions(-) diff --git a/src/desktop.rs b/src/desktop.rs index dc03679..d1e2507 100644 --- a/src/desktop.rs +++ b/src/desktop.rs @@ -327,37 +327,16 @@ where fn on_clipboard_change(&mut self) { match self.clipboard_ctx.lock() { Ok(locked) => { - if let Ok(formats) = locked.available_formats() { - let mut text = false; - let mut html = false; - let mut rtf = false; - let mut image = false; - let mut files = false; - - for format in formats { - if format == "UTF8_STRING" { - text = true; - } else if format == "text/html" { - html = true; - } else if format == "text/rtf" { - rtf = true; - } else if format == "image/png" { - image = true; - } else if format == "text/uri-list" { - files = true; - } + let _ = self.app_handle.emit( + "plugin:clipboard://clipboard-monitor/update", + AvailableTypes { + text: locked.has(ContentFormat::Text), + html: locked.has(ContentFormat::Html), + rtf: locked.has(ContentFormat::Rtf), + image: locked.has(ContentFormat::Image), + files: locked.has(ContentFormat::Files), } - let _ = self.app_handle.emit( - "plugin:clipboard://clipboard-monitor/update", - AvailableTypes { - text, - html, - rtf, - image, - files, - }, - ); - } + ); } Err(err) => { println!("Error accessing clipboard: {}", err);