Compare commits

...

239 Commits

Author SHA1 Message Date
github-actions[bot] 6fcb2f5f40 Publish New Versions (v2) (#2174)
Co-authored-by: FabianLars <FabianLars@users.noreply.github.com>
Co-authored-by: FabianLars <fabianlars@fabianlars.de>
Co-authored-by: Fabian-Lars <github@fabianlars.de>
2024-12-09 16:45:31 +01:00
Fabian-Lars 3a79266b8c chore: Bump all versions to 2.2.0 (#2173) 2024-12-09 16:03:15 +01:00
github-actions[bot] 0469f025b2 publish new versions (#2172)
Co-authored-by: FabianLars <FabianLars@users.noreply.github.com>
2024-12-09 13:58:44 +01:00
Fabian-Lars 77b855074a fix(fs): Temp workaround for docs.rs build error (#2171)
* test

* test

* fix(fs): Temp workaround for docs.rs build error

* change
2024-12-09 13:52:32 +01:00
Fabian-Lars 6b1a6d62f0 ci(covector): Hide npm publish output in details (#2169) 2024-12-09 12:33:38 +02:00
github-actions[bot] ae002af2d6 publish new versions (#2163)
Co-authored-by: amrbashir <amrbashir@users.noreply.github.com>
2024-12-09 11:23:30 +01:00
Tony f7ad349ed2 docs(opener): add basic usage guide to readme (#2167)
* docs(opener): add basic usage guide to readme

* Add missing `Ok(())` and `?`

* Register plugin first
2024-12-09 12:18:12 +02:00
renovate[bot] 5b8efde906 chore(deps): update dependency rollup to v4.28.1 (#2158)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-07 19:35:19 +08:00
Tony 69d508ee69 fix(log): prevent thowing on failed to get caller location (#2157)
* Fix failed to get caller location throws

* Add change file

* typo

* build

* Bump log rs

* typo

* early return instead of using ?
2024-12-07 19:32:47 +08:00
Fabian-Lars fe610d6759 ci: Force the same version bumps for rs and js packages (#2130) 2024-12-05 11:34:26 +01:00
renovate[bot] a7e58f5654 chore(deps): update dependency prettier to v3.4.2 (#2133)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-04 17:07:07 +08:00
github-actions[bot] 715a0477be Publish New Versions (v2) (#2128)
Co-authored-by: FabianLars <FabianLars@users.noreply.github.com>
2024-12-03 14:45:07 +01:00
enri90 05c62d731f feat(upload): Added body to download function (#1523)
Co-authored-by: FabianLars <fabianlars@fabianlars.de>
2024-12-03 14:35:11 +01:00
Adam C ce83d53775 docs(clipboard-manager): Added missing codeblock quotes in inline code docs (#2127) 2024-12-03 13:48:29 +01:00
renovate[bot] 6dbc304c28 chore(deps): update dependency typescript-eslint to v8.17.0 (#2124)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-02 21:39:37 +01:00
github-actions[bot] ab8cf45bb9 publish new versions (#2121)
Co-authored-by: FabianLars <FabianLars@users.noreply.github.com>
2024-12-02 21:37:16 +01:00
Muhammed Rahif 3ef756f4ce docs(all): incorrect path for registering plugin in rust (#2123) 2024-12-02 21:13:12 +01:00
Fabian-Lars 664c452697 ci(renovate): Rename log-plugin to log (#2122) 2024-12-02 15:01:19 +01:00
Fabian-Lars 82fa1e1f45 docs(updater): Link to website in Usage section
closes #1133
2024-12-02 14:54:20 +01:00
Fabian-Lars 3195646996 fix(sql): Fix QueryResult typings (#1928)
* fix(sql): Fix QueryResult typings

closes #1893

* Create fix-sql-queryresult-type.md

---------

Co-authored-by: Tillmann <28728469+tweidinger@users.noreply.github.com>
2024-12-02 14:49:06 +01:00
FabianLars 6f6a178ae4 ci(renovate): Disable lockfile maintenance 2024-12-02 14:35:10 +01:00
FabianLars 28935b65be ci: Re-add Cargo.lock to ci triggers 2024-12-02 14:31:13 +01:00
github-actions[bot] 1f5ed2fbb0 publish new versions (#2011)
Co-authored-by: FabianLars <FabianLars@users.noreply.github.com>
2024-12-02 13:45:24 +01:00
renovate[bot] de4808f96d chore(deps): update unocss monorepo to ^0.65.0 (#2120)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-02 13:41:47 +01:00
FabianLars 59076b0a35 chore(example): Add root .taurignore to prevent build loop 2024-12-02 13:37:25 +01:00
renovate[bot] 484eadaf33 chore(deps): update dependency rollup to v4.28.0 (#2113)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-02 10:27:17 +08:00
renovate[bot] 2572018e3f chore(deps): lock file maintenance (#2117)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-02 09:38:49 +08:00
renovate[bot] ab9a24b89b chore(deps): update eslint monorepo to v9.16.0 (#2110)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-30 10:56:06 +08:00
renovate[bot] 33e924574a chore(deps): update dependency @sveltejs/vite-plugin-svelte to v5 (#2102)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-27 19:02:03 +08:00
Fabian-Lars 76f99ce999 fix(dialog): pub export Dialog (#2108)
fixes #2107
2024-11-27 11:59:55 +01:00
renovate[bot] 241319ae1d chore(deps): update dependency vite to v6 (#2100)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-27 18:58:50 +08:00
renovate[bot] 40ea6e0b4e chore(deps): update dependency prettier to v3.4.1 (#2104)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-27 13:26:42 +08:00
Roman Steiner 3fa0fc09bb fix(clipboard): alt_text in write_html command not being passed with correct argument name (#2099) 2024-11-26 14:32:24 +02:00
ayang fef76bd504 feat(fs): add the size method to get the size of a file or directory (#2095) 2024-11-26 14:09:42 +02:00
jLynx f8f2eefe03 feat(updater): Add .deb Package Support to Linux Updater (#1991) 2024-11-26 13:48:37 +02:00
renovate[bot] c665818395 chore(deps): update dependency prettier to v3.4.0 (#2097)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-26 09:20:21 +01:00
renovate[bot] 2ba68760b9 chore(deps): update dependency typescript-eslint to v8.16.0 (v2) (#2096)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-25 21:49:38 +01:00
SoSweetHam 5070476816 docs(store): Fix file reference (#2094) 2024-11-25 15:21:36 +01:00
Fabian-Lars 51cd283a5f docs(deep-link): Fix js inline docs (#2093) 2024-11-25 13:46:08 +01:00
renovate[bot] d44f0ee7a7 chore(deps): update dependency typescript to v5.7.2 (v2) (#2084)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-25 10:37:42 +01:00
renovate[bot] b1b0565d12 chore(deps): update dependency rollup to v4.27.4 (v2) (#2086)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-25 10:27:15 +01:00
renovate[bot] db526a1c97 chore(deps): lock file maintenance (#2090)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-25 10:05:40 +08:00
Amr Bashir a3b553ddb4 feat(http): add request and response tracing behind feature flag (#2079) 2024-11-21 17:08:34 +02:00
Fabian-Lars fecfd5533a fix(fs)!: use tauri::scope::fs::Scope (#2070) 2024-11-21 16:57:25 +02:00
Amr Bashir ed981027dd feat(fs): improve readTextFile and readTextFileLines performance (#1962) 2024-11-21 15:43:51 +02:00
Amr Bashir 5092ea5e89 feat(fs): support ReadableStream<Unit8Array> for writeFile API (#1964) 2024-11-21 14:49:40 +02:00
Fabian-Lars ac2edc2159 docs(notification): Add note about installation requirement on windows 2024-11-20 21:42:27 +01:00
amrbashir 59dd5f105a chore: fmt toml 2024-11-20 03:35:19 +02:00
Jakob Westhoff 4db626354c feat(positioner): add moveWindowConstrained for tray-icon positions (#2076) 2024-11-20 02:05:37 +02:00
Amr Bashir 383e636a8e feat: add tauri-plugin-opener (#2019) 2024-11-20 00:50:02 +02:00
Vinicius Cestari 1051db406a docs(clipboard-manager): update readImage doc to use async rgba() instead of bytes (#2077) 2024-11-19 21:06:29 +01:00
renovate[bot] ee3fb1dba6 chore(deps): update eslint monorepo to v9.15.0 (#2058)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-18 21:37:34 +01:00
renovate[bot] c34b2ea824 chore(deps): update dependency typescript-eslint to v8.15.0 (#2072)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-18 21:33:20 +01:00
renovate[bot] 8a33595bbe chore(deps): update dependency rollup to v4.27.3 (#2071)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-18 21:30:34 +01:00
renovate[bot] ff05a59e60 chore(deps): update rust crate mockito to 1.6.1 (#2068)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-18 10:39:43 +01:00
renovate[bot] bea474c550 chore(deps): lock file maintenance (#2065)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-18 11:35:21 +08:00
renovate[bot] e5476aac94 chore(deps): update dependency rollup to v4.27.2 (v2) (#2056)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-16 15:10:38 +01:00
renovate[bot] 7f025e5240 chore(deps): update dependency rollup to v4.27.0 (v2) (#2053)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-15 12:08:10 +01:00
Jérôme Bousquié 5700bd2213 docs: document permissions example for geolocation plugin (#2044) 2024-11-14 17:58:11 +02:00
Fabian-Lars d402c3865a fix(sql): more explicit error if no driver is enabled (#2047) 2024-11-13 23:43:58 +01:00
John Carmack 90ef77c872 fix(sql) Allow tauri-plugin-sql to work when Tauri is running async (#2038) 2024-11-13 16:58:50 +01:00
Fabian-Lars 51856e9e0a docs: Remove header image from inline docs (#2045) 2024-11-13 16:07:29 +01:00
Jérôme Bousquié 9741b97e8c docs(geolocation): Fix js import example (#2043) 2024-11-13 14:54:15 +01:00
renovate[bot] e421b9a2c0 chore(deps): update dependency rollup to v4.26.0 (v2) (#2041)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-13 11:58:26 +01:00
Tony 371a2f7361 fix(log): inconsistent webview log target (#2021)
* Fix very inconsistent webview log target

* Add change file

* It's log-plugin not log

* Lower rust version requirement

* Use the third line instead of second
2024-11-12 10:10:38 +08:00
Fabian-Lars 52c093ac9d docs(fs): Fix scope example in js inline docs (#2034) 2024-11-12 00:20:36 +02:00
renovate[bot] 6d6508f18e chore(deps): update dependency typescript-eslint to v8.14.0 (v2) (#2035)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-11 19:01:45 +01:00
Fabian-Lars 3fa814d1f0 docs(websocket): fix short description (server -> client) 2024-11-11 18:52:54 +01:00
renovate[bot] 1fe3dab64c fix(deps): update rust crate thiserror to v2 (v2) (#2012)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: FabianLars <fabianlars@fabianlars.de>
2024-11-11 18:33:58 +01:00
sid 5dadd205f5 feat(upload): add progressTotal to event payload (#2033)
Co-authored-by: Fabian-Lars <github@fabianlars.de>
2024-11-11 17:54:59 +01:00
renovate[bot] 3e15acea9a fix(deps): update tauri monorepo (v2) (#2026)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Fabian-Lars <github@fabianlars.de>
2024-11-11 17:28:35 +01:00
Amr Bashir 3e78173df9 fix(fs): ignore metadata error while reading dir entries (#2018)
* fix(fs):  ignore metadata error while reading dir entries

closes #2014

* remove package manager
2024-11-11 18:02:03 +02:00
renovate[bot] 64fac08bfb chore(deps): update dependency rollup to v4.25.0 (v2) (#2024)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-11 16:56:04 +01:00
Fabian-Lars fdc382dff0 chore(example): Add Haptics page (#2032) 2024-11-11 16:53:56 +01:00
Fabian-Lars b2aea04567 fix(deep-link): Remove getCurrent call in onOpenUrl (#2008) 2024-11-09 10:05:46 -03:00
Ari 3449dd5a8f feat(localhost): add custom host binding to allow external access (#1982)
Co-authored-by: Fabian-Lars <github@fabianlars.de>
2024-11-06 11:52:49 +01:00
github-actions[bot] 57f69c6615 Publish New Versions (v2) (#1966)
Co-authored-by: FabianLars <FabianLars@users.noreply.github.com>
2024-11-05 17:32:55 +01:00
Fabian-Lars cfb3ec0e21 fix(window-state): Ignore is_maximized state in resize events on macos (#2007) 2024-11-05 17:01:35 +01:00
renovate[bot] b8bf4ad360 chore(deps): update unocss monorepo to ^0.64.0 (v2) (#2006)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-05 13:23:46 +01:00
Artaza Sameen 87cc58527d feat(upload): Add transfer_speed for downloading and uploading files (#1797)
Co-authored-by: Victor Aremu <me@victorare.mu>
Co-authored-by: Fabian-Lars <github@fabianlars.de>
2024-11-04 22:41:48 +01:00
renovate[bot] e0d2e2c53f chore(deps): update dependency typescript-eslint to v8.13.0 (#2004)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-04 19:36:33 +01:00
renovate[bot] 9a7092ca44 fix(deps): update rust crate notify to v7 (v2) (#1999)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: FabianLars <fabianlars@fabianlars.de>
2024-11-04 15:56:31 +01:00
renovate[bot] 606fa08dae fix(deps): update rust crate fern to 0.7 (v2) (#1997)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
2024-11-04 15:00:01 +01:00
renovate[bot] 62f1e40682 chore(deps): update eslint monorepo to v9.14.0 (v2) (#1996)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-04 13:23:13 +01:00
renovate[bot] c8e5614063 chore(deps): update dependency svelte to v5 (v2) (#1956)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: FabianLars <fabianlars@fabianlars.de>
2024-11-04 13:16:36 +01:00
Fabian-Lars 03c255ae20 chore(readme): Add new plugins and update support table (#1993) 2024-11-04 13:57:38 +02:00
renovate[bot] a706748dd3 fix(deps): update tauri monorepo (v2) (#1994)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-04 12:29:34 +01:00
renovate[bot] 7c1046d239 chore(deps): update dependency rollup to v4.24.4 (v2) (#1844)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-04 12:28:44 +01:00
renovate[bot] a90f36b07e chore(deps): update dependency typescript-eslint to v8.12.2 (v2) (#1995)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-04 12:25:26 +01:00
renovate[bot] e5249cff0b chore(deps): update dependency tslib to v2.8.1 (v2) (#1943)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-04 12:06:26 +01:00
Rika d57df4debe fix(clipboard-manager): read_image wrongly set the image rgba data with binary PNG data. (#1986)
* fix(clipboard-manager): `read_image` wrongly set the image rgba data with binary PNG data.

* remove depencency of `image` crate; add patch file
2024-10-30 20:29:14 +03:00
Amr Bashir 1f649c7f1f chore: print a warning in development for forbidden headers (#1981)
* chore: print a warning in development for forbidden headers

closes #1979

* Update plugins/http/src/commands.rs
2024-10-30 15:26:46 +03:00
YoggieS 0ca4cc914c docs(sql): docs of frontend Database select method (#1963) 2024-10-30 10:53:04 +01:00
Amr Bashir 9dcad78f44 docs(fs): fix default permission documentation (#1980) 2024-10-30 10:50:00 +01:00
阿良仔 4341d7f500 fix(sql): replace Mutex with RwLock to enable concurrent SQL execution (#1972) 2024-10-26 13:19:59 +02:00
Amr Bashir 77149dc432 fix(fs): fix writeFile converting UTF-8 characters in path into replacement character (#1965) 2024-10-22 08:17:37 +03:00
github-actions[bot] 525abc4be5 Publish New Versions (v2) (#1961)
Co-authored-by: amrbashir <amrbashir@users.noreply.github.com>
2024-10-21 15:13:27 +03:00
bWanShiTong 14cee64c82 fix(fs): fix compilation on targets with pointer width 16 and 32 (#1958) 2024-10-21 15:07:55 +03:00
github-actions[bot] 3fd283121f publish new versions (#1909)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-10-20 08:54:26 -03:00
Amr Bashir ae8024565f perf(fs): improve FileHandle.read performance (#1950)
* perf(fs): improve `FileHandle.read` performance

* handle different target pointer width

* improve `writeTextFile` performance

* revert packageManager field

* change file

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-10-20 08:49:01 -03:00
Tony 2302c2db1c fix(dialog): ask and confirm not using system button texts (#1910)
* Fix `ask`'s button texts being ok and cancel

* Update change file
2024-10-20 08:48:45 -03:00
renovate[bot] 44c50c1275 chore(deps): update rust crate tauri to 2.0.4 (#1952)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-20 17:28:39 +08:00
renovate[bot] 415bf2abc3 chore(deps): update eslint monorepo to v9.13.0 (#1951)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-20 16:54:34 +08:00
renovate[bot] 36207a93f3 chore(deps): update dependency @tauri-apps/cli to v2.0.3 (#1925)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-19 11:14:14 +08:00
renovate[bot] 854754e10b chore(deps): update dependency typescript-eslint to v8.10.0 (#1949)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-19 11:13:06 +08:00
renovate[bot] 1c2f137a8a chore(deps): lock file maintenance (#1929)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-19 11:12:38 +08:00
Tony 8c67d44aef refactor(store)!: more reworks (#1860)
* refactor(store): more reworks

* Enable auto save by default

* Store to resource table by default

* Remove share store

* Clean up

* Add close store

* Add store function

* Add lazy store

* Add init to lazy store

* refresh cache in example

* Add get-or-create-store

* Revert "Add get-or-create-store"

This reverts commit 7ffd769240.

* try get first

* Docs

* Use absolute path for store

* more docs

* Allow js to use pre-stored (de)serialize functions

* Fix js get and close store

* Show case how to use pretty json

* Update readme

* Use store instead of `store_builder` in example

* Build

* Fix example

* More docs for StoreBuilder::build

* Add default (de)serialize fn

* Use pretty json by default

* Use `undefined` for empty value in get

* Change files

* Differentiate json null from no value for events

* Add create or existing

* Build

* Rename inner store's inset method to set

* Update readme

* Apply suggestions from code review

* Use close instead

* Update breaking changes

* Return result in resolve_store_path

* Change to close_resource and take &self

* Clean up

* Apply suggestions from code review

Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>

* Remove unused pub(crate)

* Update change file

* Expose resolve_store_path

* Remove with_store

* Remove StoreInner from pub and expose is_empty

* Fix wrong jsdoc param

* Update readme

* rename createOrExistingStore to createOrLoad

* make api consistent with the JS implementation, add examples

* fmt

* reintroduce "get existing store" behavior for create_or_load

* rename createOrLoad to newOrExisting

* keep store lock throughout whole new_or_existing_inner

* Remove load

* Missed if load

* Don't make StoreState public

* Remove R: Runtime from Builder

* rename newOrExisting to load, load to reload

* update docs

* rename missing reload fn

* rename builder fn to build()

* fix default permission

* Fix description and create_new logic

* Clippy

* Update docs

* Update docs

* remove create_store command

* remove close_store command since we extend from Resource

* Revert "remove close_store command since we extend from Resource"

This reverts commit 4a29fc8990.

* Reapply "remove close_store command since we extend from Resource"

This reverts commit 70a1830e7d.

---------

Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-10-17 19:14:41 +08:00
Niko Korvenlaita cfd48b3b2e feat: allow http calls without origin header (#1941) 2024-10-16 15:56:36 +03:00
renovate[bot] 558e14bb4c chore(deps): update dependency typescript-eslint to v8.9.0 (#1937)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-16 09:52:18 +08:00
凊弦凝绝 aef5dd6157 fix(sql): don't panic on missing migration when preload is enabled (#1932)
Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
2024-10-14 20:32:49 +02:00
Fabian-Lars 74ee7edc43 ci: Run workflows on ubuntu 22.04 (#1936) 2024-10-14 18:40:56 +02:00
Fabian-Lars 7e1c17a635 ci(renovate): Remove tauri pre-release workaround 2024-10-09 14:44:38 +02:00
Lucas Fernandes Nogueira 3c1f3874f4 fix(positioner): handleIconState missing permission and wrong impl (#1911) 2024-10-09 09:37:16 -03:00
Amr Bashir 51ddf6a715 fix(shell): use async command for open JS API (#1881)
closes tauri-apps/tauri#11212
2024-10-09 08:47:25 -03:00
renovate[bot] 62082b7086 chore(deps): lock file maintenance (#1895)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-09 08:46:38 -03:00
nashaofu aee14ed426 fix(dialog): Fix the issue of Android saving files with a .txt extension (#1892)
* fix: Fix the issue of Android saving files with a .txt extension

* fix(dialog): pull intent type from extensions filters

* fix covector

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-10-09 08:45:05 -03:00
Amr Bashir 9b2840db94 fix(http): retain headers order (#1884)
* fix(http): retain headers order

closes #1882

* simplify if

* actually set headers

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-10-09 08:07:46 -03:00
renovate[bot] 60064fce52 chore(deps): update dependency typescript to v5.6.3 (#1905)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-09 09:28:06 +08:00
renovate[bot] 0058583583 fix(deps): update tauri monorepo to v2.0.2 (#1874)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-08 15:29:28 +08:00
renovate[bot] fb676626f1 chore(deps): update dependency typescript-eslint to v8.8.1 (#1899)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-08 10:01:07 +08:00
renovate[bot] f445c704a1 chore(deps): update eslint monorepo to v9.12.0 (#1887)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-05 07:29:30 +08:00
github-actions[bot] fd785ab5de publish new versions (#1878)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-10-03 10:58:13 -03:00
Lucas Fernandes Nogueira a1a82208ed chore: change MSRV to 1.77.2 to support Windows 7 (#1873)
* chore: change MSRV to 1.77.2 to support Windows 7

* fmt
2024-10-03 10:31:13 -03:00
renovate[bot] dc49de5341 chore(deps): update dependency typescript-eslint to v8.8.0 (#1854)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-03 20:52:00 +08:00
Tillmann 4c2454d410 sync readme with metadata (#1872) 2024-10-03 07:23:40 -03:00
renovate[bot] fe6dd0ff9e fix(deps): update dependency @tauri-apps/api to v2.0.1 (#1862)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-03 10:54:25 +08:00
Horu ab8d089b2b chore(barcode-scanner): fix banner link in readme (#1870)
* chore: fix banner link in readme

* chore: raw
2024-10-03 05:04:38 +03:00
github-actions[bot] ee02ea7746 publish new versions (#1869)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-10-02 16:40:18 -03:00
Lucas Fernandes Nogueira 9501cfa5f5 fix(updater): validate endpoint scheme before printing warning (#1868)
regression from #1814
2024-10-02 16:28:16 -03:00
Lucas Fernandes Nogueira e8069af804 feat: update to tauri v2 stable, promote all packages to 2.0.0 (#1863)
* update to tauri v2

* covector setup

* update locks

* bump packages to v2 through covector, remove rc references

* msrv 1.78

* downgrade 1.79 msrv dep

* test clipboard

* fmt

* bitstream-io 2.3.0

* Revert "test clipboard"

This reverts commit c3e19dbe59.
2024-10-02 12:08:37 -03:00
pajlada 0975a687a0 fix: make package.json licenses SPDX compliant (#1861)
* fix: make plugin template package.json license SPDX compliant

* fix: make plugin package.json license SPDX compliant

* fix: make root package.json license SPDX compliant
2024-10-02 08:29:34 -03:00
Amr Bashir 654a7299c3 fix(positioner): pass correct values through IPC (#1858)
* fix(positioner): pass correct values through IPC

followup to https://github.com/tauri-apps/plugins-workspace/pull/1822

* build api & remove packageManager field
2024-10-02 08:28:28 -03:00
Lucas Fernandes Nogueira 58eab11faf chore: document supported platforms on README, clarify unsupported APIs (#1857)
closes #1795
2024-10-02 08:27:27 -03:00
github-actions[bot] fb62d03f73 publish new versions (#1807)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-10-02 07:02:42 -03:00
Tony 7e5e34420b Cancel auto save on save (#1859) 2024-10-01 23:13:20 -03:00
Tony f12d35609a feat(store)!: fully rework and add auto save (#1550)
* Add auto save to store plugin

* Put jsdoc at constructor instead of class level

* Clippy

* Use enum instead of bool

* Some(AutoSaveMessage::Cancel) | None

* from_millis

* u64

* Add change file

* Rename to emit_on_change

* should use Duration in `with_store`

* Add breaking change notice to change file

* Emit change event for inserts by reset

* Update readme example

* Update example

* Remove extra line

* Make description clear it only works with managed

* Fix links in docstring

* Fix doc string closing

* get_mut

* Proof of concept

* fmt

* Load store on create

* cargo fmt

* Fix merge conflits

* Format

* small cleanup

* update docs, use `impl Into<JsonValue>`

* fix doctests, further simplification of api

* add store options

---------

Co-authored-by: Tillmann <28728469+tweidinger@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-10-01 15:10:40 -03:00
Amr Bashir 44273b9889 fix(shell): fix schema requiring sidecar property even though it is optional (#1839)
* fix(shell): fix schema requiring `sidecar` property even though it is optional

* fix clippy

* make `cmd` and `sidecar` exclusive

* make args optional

* cleanup

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-10-01 10:16:14 -03:00
Jacob Bolda 2f7e32b5e0 [positioner] handleIconState in JS (#1822)
* [positioner] handleIconState in JS

* update readme

* fix change file version

* fixes

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-10-01 10:15:22 -03:00
Fabian-Lars 30bcf5dcc2 refactor(sql): Allow multiple drivers at the same time (#1838)
* refactor(sql): Allow multiple drivers at the same time

* fmt

* remove default feature comment [skip ci]

* what was that doing there [skip ci]

* disable public methods for now
2024-10-01 09:47:08 -03:00
Amr Bashir 68579934c9 fix(cli): expose hidden structs (#1856)
closes  #1843
2024-10-01 09:35:13 -03:00
Tony 04459afbb6 refactor(dialog)!: use enum instead of label for buttons (#1842)
* refactor(dialog)!: use enum instead of label

* Add change file

* Fix doc comment typo

* Move ok and cancel to lib.rs
2024-10-01 09:34:20 -03:00
Tillmann 3b2bd3065d fix sql heading 2024-09-30 14:11:44 +02:00
renovate[bot] f930505de4 chore(deps): lock file maintenance (#1852)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-30 10:19:10 +08:00
renovate[bot] 34319bd977 chore(deps): update unocss monorepo to ^0.63.0 (#1848)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-29 16:18:56 +08:00
Tony 34737186fe chore: re-generate reference.md (#1847) 2024-09-28 20:50:57 +03:00
renovate[bot] 4bd1f15bb9 fix(deps): update tauri monorepo (#1846)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-28 14:44:24 +08:00
Tillmann aabc4d3a24 Add Metadata for Plugin Compatibility (#1836)
Co-authored-by: Tillmann <112912081+tillmann-crabnebula@users.noreply.github.com>
Co-authored-by: Tillmann <28728469+tweidinger@users.noreply.github.com>
2024-09-26 14:21:25 +02:00
Fabian-Lars fc9b189e83 fix(fs): ignore OS specific paths in scope deserialization (#1837) 2024-09-26 02:43:33 +03:00
renovate[bot] b7ff3a6bdb fix(deps): update rust crate windows-registry to 0.3 (v2) (#1841)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: FabianLars <fabianlars@fabianlars.de>
2024-09-25 15:44:41 +02:00
Amr Bashir 04a0aea0ab feat(updater)!: add option to use insecure transport protocol (#1814) 2024-09-24 18:38:53 +03:00
renovate[bot] e564e2aa91 chore(deps): update dependency typescript-eslint to v8.7.0 (#1832)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 23:25:24 +02:00
renovate[bot] 118f6b4334 chore(deps): update dependency @rollup/plugin-node-resolve to v15.3.0 (#1831)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 23:11:01 +02:00
renovate[bot] fd0a52aa86 chore(deps): update eslint monorepo to v9.11.1 (#1829)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 22:49:03 +02:00
renovate[bot] 52e3bdab26 fix(deps): update dependency @zerodevx/svelte-json-view to v1.0.11 (v2) (#1830)
* fix(deps): update dependency @zerodevx/svelte-json-view to v1.0.11

* audit fix

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: fabianlars <fabianlars@fabianlars.de>
2024-09-23 22:45:24 +02:00
renovate[bot] dd09e3c3f4 chore(deps): update dependency @rollup/plugin-node-resolve to v15.2.4 (#1824)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 16:13:16 +08:00
renovate[bot] 2797954799 chore(deps): update dependency rollup to v4.22.4 (#1818)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 16:08:15 +08:00
renovate[bot] 025210be28 chore(deps): update eslint monorepo to v9.11.0 (#1820)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 16:07:35 +08:00
Amr Bashir 221f50f53b fix(updater): encode version when making requests (#1816)
* fix(updater): encode version when making requests

ref: https://github.com/tauri-apps/tauri/issues/10908

* Update .changes/updater-endpoint-version-encoded.md

* only skip `+`

* fmt

* use normal const
2024-09-20 07:57:40 -03:00
renovate[bot] 6bf1bd8d44 fix(deps): update rust crate rfd to 0.15 (v2) (#1805)
* fix(deps): update rust crate rfd to 0.15

* Fix compilation

* Add change file

* Remove platform specific note

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Tony <legendmastertony@gmail.com>
2024-09-19 20:04:02 +08:00
Tony 41fe9053a0 fix(deep-link): is_registered check on windows 2024-09-19 19:58:13 +08:00
renovate[bot] 27bb5d9a27 chore(deps): update dependency rollup to v4.22.0 (v2) (#1810)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-19 12:40:55 +02:00
Austin Bennett 3168e17603 Added quotes for cmd (#1806)
* Added quotes for cmd

* Add change file

---------

Co-authored-by: Tony <legendmastertony@gmail.com>
2024-09-19 09:59:54 +08:00
Jaken Herman dd514e7a88 Docs: contaiend -> contained typos (#1802) 2024-09-17 19:31:55 +03:00
renovate[bot] 6e142b4230 fix(deps): update tauri monorepo (v2) (#1801)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-17 17:24:18 +02:00
renovate[bot] fd1c7c8dbb fix(deps): update dependency @tauri-apps/plugin-geolocation to v2.0.0-rc.2 (v2) (#1799)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-17 11:09:53 +02:00
renovate[bot] 59c63f31cc chore(deps): update dependency typescript-eslint to v8.6.0 (v2) (#1798)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-16 21:39:26 +02:00
github-actions[bot] 3cbb55aa7b publish new versions (#1796) 2024-09-16 16:29:07 -03:00
Lucas Fernandes Nogueira 60765694f5 refactor(geolocation): simplify API, defer permission checks (#1773) 2024-09-16 17:01:13 +03:00
renovate[bot] fd75401aee fix(deps): update rust crate image to 0.25 (v2) (#1418)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: FabianLars <fabianlars@fabianlars.de>
2024-09-16 13:20:08 +02:00
renovate[bot] ca34972266 fix(deps): update rust crate tokio-tungstenite to 0.24 (v2) (#1781)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-16 13:13:15 +02:00
renovate[bot] 179184326b chore(deps): update tauri monorepo (v2) (#1789)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-16 12:08:42 +02:00
github-actions[bot] d8efd3cd20 Publish New Versions (v2) (#1794)
Co-authored-by: amrbashir <amrbashir@users.noreply.github.com>
2024-09-16 07:00:22 -03:00
renovate[bot] 5d39ddcf22 chore(deps): lock file maintenance (#1791)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-16 10:21:19 +08:00
Tony 2050a3bea2 fix(upload): change tokio version to 1 instead of * (#1793) 2024-09-16 05:20:52 +03:00
Tony c078f57a09 Revert "Publish New Versions (v2)" (#1792)
This reverts commit dc5721ac13.
2024-09-16 05:20:21 +03:00
github-actions[bot] dc5721ac13 Publish New Versions (v2) (#1788)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-09-15 18:37:58 -03:00
Felix Salazar 1d9741b52b [upload - http-extra] fix: download content to file when unsuccessful response (and test) #1750 (#1783)
* fix and test

* Update Cargo.toml

Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>

* Update Cargo.toml

Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>

* add .change log

* clippy fixes

* print test error

* fix tests

---------

Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-09-15 18:37:02 -03:00
Tony 7a37355e17 fix(window-state): deadlock when trying to restore window states on initial load (#1787)
* Fix deadlock when trying to restore window the size on initial load

* Typo
2024-09-15 18:01:27 -03:00
github-actions[bot] 5cbd593e76 publish new versions (#1772)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-09-15 11:55:38 -03:00
renovate[bot] f7600b5fff chore(deps): update dependency @tauri-apps/cli to v2.0.0-rc.14 (#1786)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-15 11:37:09 -03:00
Lucas Fernandes Nogueira fb85e5dd76 chore(deps): update tauri to 2.0.0-rc.12 (#1785) 2024-09-15 11:36:23 -03:00
Lucas Fernandes Nogueira 6f3f66794a feat(deep-link): add on_open_url Rust API (#1780) 2024-09-14 21:35:31 -03:00
FabianLars 79d6e19c4b chore: Add changefile for #1777 2024-09-14 18:34:45 +02:00
Cole Shirley aebd4f6185 fix(barcode-scanner): Fix mixed up imports (internal) (#1777)
Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
2024-09-14 18:20:21 +02:00
Lucas Fernandes Nogueira 341a5320c3 fix(clipboard): Android warnings and build on SDK under 28 (#1771) 2024-09-13 12:03:10 -03:00
Lucas Fernandes Nogueira cc03ccf5e0 fix(fs): app scopes not properly enabling paths (#1774) 2024-09-13 09:57:46 -03:00
Lucas Nogueira 009299ebec chore(prettier): ignore mobile build artifacts 2024-09-13 09:10:01 -03:00
Tony 204e5aacad fix(window-state)!: saving minimized state (#1743)
* Fix saving minimized state again

* Add change file

* Fix saving minimized size

* Add change file

* Fix missing .md

* Remove window-shadows
2024-09-13 06:29:38 +03:00
github-actions[bot] 8a45c35160 publish new versions (#1764)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-09-12 15:49:29 -03:00
Lucas Nogueira ebf821afd1 chore(examples): update AndroidManifest.xml 2024-09-12 15:32:27 -03:00
Lucas Fernandes Nogueira 984110a978 fix(deep-link): emit new-url event on app load (#1770) 2024-09-12 11:20:16 -03:00
Lucas Fernandes Nogueira 2b898f0786 fix(dialog): update asset protocol scope on directory open, closes #1553 (#1769) 2024-09-12 11:10:16 -03:00
Tony b2269333e3 chore(single-instance): put deep link integration behined a feature (#1766)
* Make deep link optional for single instance

* Add change file

* Add deep-link feature to example

* Update plugins/deep-link/README.md

Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>

* format

* [skip ci] update readme

---------

Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
2024-09-12 18:20:15 +08:00
renovate[bot] 41afcae399 chore(deps): update dependency rollup to v4.21.3 (v2) (#1767)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-12 12:01:38 +02:00
SRutile 9291e4d2ca fix(fs): support any UTF-8 path in writeFile (#1640)
* In the `writeFile` function, when `options.baseDir` is not set, convert `path` to URL to avoid errors caused by Chinese characters.

* fmt

* use TextEncoder

* use percent encoding

* add change file

* fmt

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-09-11 12:02:24 -03:00
renovate[bot] 3715f3c9a6 chore(deps): update tauri monorepo (#1760)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-11 09:12:13 +08:00
github-actions[bot] 253ae66210 publish new versions (#1761) 2024-09-10 16:14:05 -03:00
Lucas Nogueira 949e2d6c45 chore: update docs 2024-09-10 16:02:38 -03:00
Lucas Fernandes Nogueira 64a6240f79 feat(deep-link): implement getCurrent on Windows/Linux (#1759)
* feat(deep-link): implement getCurrent on Windows/Linux

checks std::env::args() on initialization, also includes integration with the single-instance plugin

* fmt

* update docs, fix event

* add register_all function

* expose api

* be nicer on docs, clippy
2024-09-10 16:00:42 -03:00
github-actions[bot] 77680f6ed8 publish new versions (#1740)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-09-10 13:06:48 -03:00
Lucas Fernandes Nogueira 8c3a6a253d feat(barcode-scanner): validate missing Info.plist configuration (#1758) 2024-09-10 12:24:03 -03:00
Lucas Nogueira 57fd28126c chore(examples): add NFCReaderUsageDescription Info.plist, entitlement 2024-09-10 08:45:43 -03:00
Lucas Fernandes Nogueira a34fade500 chore(ios): consolidate optional argument standard (#1738)
* chore(ios): consolidate optional argument standard

mark all optional iOS arguments as `var <name>: Type?`, following the pattern described in the documentation: https://v2.tauri.app/develop/plugins/develop-mobile/#ios

* chore: add missing Info.plist to example
2024-09-10 08:31:39 -03:00
Olivier Lemasle 713c54ef83 chore(barcode): remove unused Android dependencies (#1749)
* chore(barcode): remove unused Android dependencies

Plugin barcode-scanner has two unused Android dependencies:
- com.google.zxing:core
- com.journeyapps:zxing-android-embedded

However, these dependency's AndroidManifest.xml were merged, and contained
required parameters (to get camera's permissions).

See the merged manifests:
- https://github.com/zxing/zxing/blob/zxing-3.3.0/android/AndroidManifest.xml
- https://github.com/journeyapps/zxing-android-embedded/blob/v4.3.0/zxing-android-embedded/AndroidManifest.xml

This commit removes the unused dependencies (and unused Java imports)
and updates the Android manifest.

* chore: remove comments

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-09-10 08:01:29 -03:00
renovate[bot] a9b2a9af84 chore(deps): update dependency typescript to v5.6.2 (v2) (#1754)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-09 21:28:08 +02:00
renovate[bot] c23b3d4bc8 chore(deps): update dependency typescript-eslint to v8.5.0 (v2) (#1755)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-09 21:24:20 +02:00
Kauan Curbani 0dd97d9115 feat(sql): added uuid type in postgres decoder (#1375)
Co-authored-by: Kauan Curbani <kauan.curbani@segalas.local>
Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
2024-09-09 17:40:45 +02:00
renovate[bot] 3912800db3 chore(deps): lock file maintenance (#1753)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-09 13:35:43 +08:00
renovate[bot] c23d7c51f6 chore(deps): lock file maintenance (#1751)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-09 11:22:59 +08:00
renovate[bot] 5906cf4335 chore(deps): update eslint monorepo to v9.10.0 (v2) (#1744)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-08 18:12:08 +02:00
renovate[bot] d4a54157f0 chore(deps): update tauri monorepo (#1739)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-06 09:19:57 +08:00
Lucas Fernandes Nogueira 3d301c654e fix(notification): body should be optional on iOS (#1737) 2024-09-05 17:46:04 -03:00
github-actions[bot] 12e80ffe00 Publish New Versions (v2) (#1736)
Co-authored-by: amrbashir <amrbashir@users.noreply.github.com>
Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
2024-09-05 13:26:57 +02:00
Amr Bashir a2fe55512f refactor: add methods and implement traits for FilePath and SafeFilePath (#1727)
* refactor: add methods and implement traits for `FilePath` and `SafeFilePath`

closes #1726

* clippy

* path -> as_path

* fix prettierignore

* Discard changes to Cargo.lock

* Discard changes to Cargo.toml

* update tauri deps
2024-09-05 14:12:40 +03:00
Fabian-Lars d00519e3e3 chore: Add missing changefile for updater rust changes (#1735) 2024-09-05 13:10:04 +02:00
renovate[bot] 6995127778 chore(deps): update tauri monorepo (#1734)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-05 11:16:52 +08:00
github-actions[bot] c565a08d09 publish new versions (#1711)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-09-04 17:30:08 -03:00
Amr Bashir cf4d7d4e6c chore: adjust prettier config, .gitignore and use taplo to format toml files (#1728)
* chore: adjust prettier config, .gitignore and use taplo to format toml files

This brings the plugins-workspace repository to the same code style of the main tauri repo

* format toml

* ignore examples gen dir

* add .vscode/extensions.json

* remove packageManager field

* fmt

* fix audit

* taplo ignore permissions autogenerated files

* remove create dummy dist

* fix prettier workflow

* install fmt in prettier workflow

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-09-04 08:54:23 -03:00
Lucas Fernandes Nogueira 72c2ce82c1 chore(deep-link): fix example, update documentation (#1725)
* chore(deep-link): fix example, update documentation

* update lock file

* fix lint, add header

* fmt
2024-09-04 08:37:34 -03:00
Lucas Fernandes Nogueira 4654591d82 fix(deep-link): allow empty config values (#1732) 2024-09-04 08:18:42 -03:00
Lucas Fernandes Nogueira feb1e93fcb feat(dialog): implement save API on iOS (#1707) 2024-09-02 21:13:43 -03:00
Fabian-Lars ff134a8ca4 Remove authenticator plugin (#1723) 2024-09-03 02:41:19 +03:00
Amr Bashir f8255e1db5 feat(updater): allow passing headers & timeout in Update.download* methods (#1661)
closes #1634
2024-09-03 01:02:16 +03:00
renovate[bot] b9bcb2b6af chore(deps): update dependency typescript-eslint to v8.4.0 (v2) (#1721)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 21:23:41 +02:00
Lucas Fernandes Nogueira 51819c601f fix(fs): writeFile command implementation on Android (#1708) 2024-09-02 13:13:53 -03:00
Tony f7280c8830 fix(fs): can't use Windows path (#1710)
* Fix fs can't use Windows path

* Add change file

* Implement `Deserialize` instead

* Rename FilePath's visitor to FilePathVisitor

* Add todo and test

* Clippy

* Unused variable
2024-09-02 18:24:37 +03:00
Lucas Fernandes Nogueira 0cb99bdaf1 fix(dialog): iOS file picker default to file selection instead of photo (#1706) 2024-09-02 17:43:13 +03:00
renovate[bot] de04935b2f chore(deps): update rust crate urlpattern to 0.3 (v2) (#1607)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: FabianLars <fabianlars@fabianlars.de>
2024-09-02 15:37:44 +02:00
Carlos Valdez b4c95b25df chore(dialog): fix misspell "ths" to "the" (#1719) 2024-09-02 14:05:11 +02:00
renovate[bot] de452d4373 chore(deps): update rust crate infer to 0.16 (v2) (#1419)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 12:48:48 +02:00
renovate[bot] e271382982 chore(deps): update dependency tslib to v2.7.0 (#1715)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 12:24:53 +02:00
renovate[bot] 3a350add23 chore(deps): update eslint monorepo to v9.9.1 (#1685)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 10:32:56 +02:00
renovate[bot] 3518a23fa0 chore(deps): update dependency rollup to v4.21.2 (#1712)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 10:27:59 +02:00
renovate[bot] c6a1b86404 chore(deps): update dependency @zerodevx/svelte-json-view to v1.0.10 (#1713)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 10:26:15 +02:00
renovate[bot] 091a78f1d2 chore(deps): update dependency typescript-eslint to v8.3.0 (#1678)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 10:23:00 +02:00
renovate[bot] 16f68c2397 chore(deps): update rust crate gethostname to 0.5 (#1522)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 10:21:19 +02:00
renovate[bot] 16d87bf236 chore(deps): update dependency @tauri-apps/cli to v2.0.0-rc.10 (#1677)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 10:10:00 +02:00
renovate[bot] e502a706d1 fix(deps): update rust crate cocoa to 0.26 (#1650)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 10:05:40 +02:00
Tony 17e8014b69 fix(window-state): saving a minimized window's state changes its position to -32000 (#1702)
* Don't store position on minimized

* Add change file

* ?
2024-09-02 15:58:25 +08:00
656 changed files with 16344 additions and 29335 deletions
+2 -2
View File
@@ -7,5 +7,5 @@ ignore = [
# wry needs kuchiki on Android
"RUSTSEC-2023-0019",
# atty is only used when the `colored` feature is enabled on tauri-plugin-log
"RUSTSEC-2021-0145"
]
"RUSTSEC-2021-0145",
]
-5
View File
@@ -1,5 +0,0 @@
---
"dialog": patch:feat
---
Implement `save` API on Android.
+31 -14
View File
@@ -14,10 +14,20 @@
"command": "pnpm build",
"dryRunCommand": "pnpm build"
},
{
"command": "echo '<details>\n<summary><em><h4>PNPM Publish</h4></em></summary>\n\n```'",
"dryRunCommand": true,
"pipe": true
},
{
"command": "npm publish --provenance --access public",
"dryRunCommand": "npm publish --provenance --access public --dry-run",
"pipe": true
},
{
"command": "echo '```\n\n</details>\n'",
"dryRunCommand": true,
"pipe": true
}
]
},
@@ -56,12 +66,13 @@
"dependencies": [
"barcode-scanner",
"biometric",
"log-plugin",
"log",
"cli",
"clipboard-manager",
"dialog",
"fs",
"global-shortcut",
"opener",
"http",
"nfc",
"notification",
@@ -69,7 +80,9 @@
"process",
"shell",
"store",
"updater"
"updater",
"geolocation",
"haptics"
]
},
"api-example-js": {
@@ -85,6 +98,7 @@
"dialog-js",
"fs-js",
"global-shortcut-js",
"opener-js",
"http-js",
"nfc-js",
"notification-js",
@@ -103,14 +117,6 @@
"dependencies": ["deep-link-js"],
"postversion": "pnpm install --no-frozen-lockfile"
},
"authenticator": {
"path": "./plugins/authenticator",
"manager": "rust"
},
"authenticator-js": {
"path": "./plugins/authenticator",
"manager": "javascript"
},
"autostart": {
"path": "./plugins/autostart",
"manager": "rust"
@@ -174,7 +180,8 @@
},
"dialog-js": {
"path": "./plugins/dialog",
"manager": "javascript"
"manager": "javascript",
"dependencies": ["fs-js"]
},
"geolocation": {
"path": "./plugins/geolocation",
@@ -192,6 +199,14 @@
"path": "./plugins/global-shortcut",
"manager": "javascript"
},
"opener": {
"path": "./plugins/opener",
"manager": "rust"
},
"opener-js": {
"path": "./plugins/opener",
"manager": "javascript"
},
"haptics": {
"path": "./plugins/haptics",
"manager": "rust"
@@ -207,13 +222,14 @@
},
"http-js": {
"path": "./plugins/http",
"manager": "javascript"
"manager": "javascript",
"dependencies": ["fs-js"]
},
"localhost": {
"path": "./plugins/localhost",
"manager": "rust"
},
"log-plugin": {
"log": {
"path": "./plugins/log",
"manager": "rust"
},
@@ -276,7 +292,8 @@
},
"single-instance": {
"path": "./plugins/single-instance",
"manager": "rust"
"manager": "rust",
"dependencies": ["deep-link"]
},
"sql": {
"path": "./plugins/sql",
-10
View File
@@ -1,10 +0,0 @@
---
"barcode-scanner": patch
"barcode-scanner-js": patch
"geolocation": patch
"geolocation-js": patch
"notification": patch
"notification-js": patch
---
Use `PermissionState` from the `tauri` crate, which now also includes a "prompt with rationale" variant for Android (returned when your app must explain to the user why it needs the permission).
@@ -1,5 +0,0 @@
---
"dialog": "patch"
---
Mark `FileResponse` as `non_exhaustive`.
-7
View File
@@ -1,7 +0,0 @@
---
"dialog": patch
"dialog-js": patch
---
The `open` function now returns a string representing either the file path or URI instead of an object.
To read the file data, use the `fs` APIs.
-5
View File
@@ -1,5 +0,0 @@
---
"http-js": patch
---
Fixed an issue with abort signal not aborting the fetch request.
@@ -1,5 +0,0 @@
---
"updater": patch
---
Fixes the updater not preserving AppImage file permissions.
@@ -1,5 +0,0 @@
---
"fs": patch:enhance
---
The `scope-*-recursive` permissions now also allow reading the contents of the directory.
-6
View File
@@ -1,6 +0,0 @@
---
"geolocation": major
"geolocation-js": major
---
Initial release.
-5
View File
@@ -1,5 +0,0 @@
---
"global-shortcut": "patch"
---
Updated `global-hotkey` crate dependency to `0.6`
-6
View File
@@ -1,6 +0,0 @@
---
"haptics": major
"haptics-js": major
---
Initial release.
-9
View File
@@ -1,9 +0,0 @@
---
barcode-scanner: patch
clipboard-manager: patch
deep-link: patch
global-shortcut: patch
window-state: patch
---
Fixed an issue that caused multi-word IIFE names to not be formatted correctly. For example the `barcode-scanner` was defined as `window.__TAURI_PLUGIN_CLIPBOARDMANAGER__` instead of `window.__TAURI_PLUGIN_CLIPBOARD_MANAGER__`.
@@ -1,5 +0,0 @@
---
"notification-js": patch
---
**Breaking change**: The permission type when using the API is now `'granted' | 'denied' | 'prompt' | 'prompt-with-rationale'` instead of `'granted' | 'denied' | 'default'` for consistency with Rust types. When using the `window.Notification` API the type is unchanged to match the Web API type.
-28
View File
@@ -1,28 +0,0 @@
{
"tag": "rc",
"changes": [
".changes/android-dialog-save.md",
".changes/consolidate-permission-state.md",
".changes/dialog-file-response-non-exhaustive.md",
".changes/dialog-return-path.md",
".changes/fix-http-plugin-abort.md",
".changes/fix-linux-updater-permission-error.md",
".changes/fs-scope-recursive-allow-read-dir.md",
".changes/geolocation-release.md",
".changes/global-shortcut-0.6.md",
".changes/haptics-release.md",
".changes/iife-varname-spacing.md",
".changes/notification-permission-type-change.md",
".changes/rc.md",
".changes/remove-target-sdk.md",
".changes/resolve-content-uris.md",
".changes/shell-open-regex-match-string.md",
".changes/shell-regex-match-string.md",
".changes/single-instance-windows-sys.0.59.md",
".changes/store-remove-mobile-plugin.md",
".changes/swift-build-older-versions.md",
".changes/tauri-rc-8.md",
".changes/update-fs-api-docs.md",
".changes/update-tauri-rc-3.md"
]
}
-61
View File
@@ -1,61 +0,0 @@
---
"authenticator": patch
"autostart": patch
"barcode-scanner": patch
"biometric": patch
"cli": patch
"clipboard-manager": patch
"deep-link": patch
"dialog": patch
"fs": patch
"global-shortcut": patch
"http": patch
"localhost": patch
"log-plugin": patch
"nfc": patch
"notification": patch
"os": patch
"persisted-scope": patch
"positioner": patch
"process": patch
"shell": patch
"single-instance": patch
"sql": patch
"store": patch
"stronghold": patch
"updater": patch
"upload": patch
"websocket": patch
"window-state": patch
"authenticator-js": patch
"autostart-js": patch
"barcode-scanner-js": patch
"biometric-js": patch
"cli-js": patch
"clipboard-manager-js": patch
"deep-link-js": patch
"dialog-js": patch
"fs-js": patch
"global-shortcut-js": patch
"http-js": patch
"log-js": patch
"nfc-js": patch
"notification-js": patch
"os-js": patch
"positioner-js": patch
"process-js": patch
"shell-js": patch
"sql-js": patch
"store-js": patch
"stronghold-js": patch
"updater-js": patch
"upload-js": patch
"websocket-js": patch
"window-state-js": patch
"haptics": patch
"haptics-js": patch
"geolocation": patch
"geolocation-js": patch
---
Update to tauri RC.
+2
View File
@@ -6,6 +6,8 @@ As you create PRs and make changes that require a version bump, please add a new
When you select the version bump required, you do _not_ need to consider dependencies. Only note the package with the actual change, and any packages that depend on that package will be bumped automatically in the process.
**Note, that in this repository, even if only the Rust code or only the JavaScript code of a plugin changed, both packages need to be bumped with the same increment!**
Use the following format:
```md
-15
View File
@@ -1,15 +0,0 @@
---
"barcode-scanner": patch:changes
"biometric": patch:changes
"clipboard-manager": patch:changes
"deep-link": patch:changes
"dialog": patch:changes
"geolocation": patch:changes
"haptics": patch:changes
"nfc": patch:changes
"notification": patch:changes
"shell": patch:changes
"store": patch:changes
---
Remove targetSdk from build.kts files as it is deprecated and will be removed from DSL v9.0
-5
View File
@@ -1,5 +0,0 @@
---
"fs": patch:feat
---
Resolve `content://` path URIs on Android.
@@ -1,5 +0,0 @@
---
"shell": patch
---
Change the `open` scope validator regex to match on the entire string.
-6
View File
@@ -1,6 +0,0 @@
---
"shell": patch
---
Change the `execute` scope argument validator regex to match on the entire string by default.
If this behavior is not desired check the `raw` boolean configuration option that is available along the `validator` string.
@@ -1,5 +0,0 @@
---
"single-instance": "patch"
---
Updated `windows-sys` crate to `0.59`
-5
View File
@@ -1,5 +0,0 @@
---
"store": patch:breaking
---
Implement mobile support in Rust directly. This changes the store directories, invalidating all previously generated stores.
-15
View File
@@ -1,15 +0,0 @@
---
"barcode-scanner": patch
"biometric": patch
"clipboard-manager": patch
"dialog": patch
"geolocation": patch
"haptics": patch
"log-plugin": patch
"nfc": patch
"notification": patch
"shell": patch
"store": patch
---
Explicitly set a minimum macOS version for the Swift package.
-61
View File
@@ -1,61 +0,0 @@
---
"authenticator": patch
"autostart": patch
"barcode-scanner": patch
"biometric": patch
"cli": patch
"clipboard-manager": patch
"deep-link": patch
"dialog": patch
"fs": patch
"global-shortcut": patch
"http": patch
"localhost": patch
"log-plugin": patch
"nfc": patch
"notification": patch
"os": patch
"persisted-scope": patch
"positioner": patch
"process": patch
"shell": patch
"single-instance": patch
"sql": patch
"store": patch
"stronghold": patch
"updater": patch
"upload": patch
"websocket": patch
"window-state": patch
"authenticator-js": patch
"autostart-js": patch
"barcode-scanner-js": patch
"biometric-js": patch
"cli-js": patch
"clipboard-manager-js": patch
"deep-link-js": patch
"dialog-js": patch
"fs-js": patch
"global-shortcut-js": patch
"http-js": patch
"log-js": patch
"nfc-js": patch
"notification-js": patch
"os-js": patch
"positioner-js": patch
"process-js": patch
"shell-js": patch
"sql-js": patch
"store-js": patch
"stronghold-js": patch
"updater-js": patch
"upload-js": patch
"websocket-js": patch
"window-state-js": patch
"haptics": patch
"haptics-js": patch
"geolocation": patch
"geolocation-js": patch
---
Update to tauri 2.0.0-rc.8
-5
View File
@@ -1,5 +0,0 @@
---
"fs-js": patch
---
Update documentation.
-7
View File
@@ -1,7 +0,0 @@
---
"geolocation": patch
"deep-link": patch
"updater": patch
---
Update to tauri 2.0.0-rc.3.
+8 -8
View File
@@ -7,23 +7,23 @@ name: Audit JavaScript
on:
workflow_dispatch:
schedule:
- cron: "0 0 * * *"
- cron: '0 0 * * *'
push:
branches:
- v1
- v2
paths:
- ".github/workflows/audit-javascript.yml"
- "**/pnpm-lock.yaml"
- "**/package.json"
- '.github/workflows/audit-javascript.yml'
- '**/pnpm-lock.yaml'
- '**/package.json'
pull_request:
branches:
- v1
- v2
paths:
- ".github/workflows/audit-javascript.yml"
- "**/pnpm-lock.yaml"
- "**/package.json"
- '.github/workflows/audit-javascript.yml'
- '**/pnpm-lock.yaml'
- '**/package.json'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
@@ -43,7 +43,7 @@ jobs:
${{ runner.os }}-
- uses: actions/setup-node@v4
with:
node-version: "lts/*"
node-version: 'lts/*'
- uses: pnpm/action-setup@v4
with:
version: 9.x.x
+7 -7
View File
@@ -7,23 +7,23 @@ name: Audit Rust
on:
workflow_dispatch:
schedule:
- cron: "0 0 * * *"
- cron: '0 0 * * *'
push:
branches:
- v1
- v2
paths:
- ".github/workflows/audit-rust.yml"
- "**/Cargo.lock"
- "**/Cargo.toml"
- '.github/workflows/audit-rust.yml'
- '**/Cargo.lock'
- '**/Cargo.toml'
pull_request:
branches:
- v1
- v2
paths:
- ".github/workflows/audit-rust.yml"
- "**/Cargo.lock"
- "**/Cargo.toml"
- '.github/workflows/audit-rust.yml'
- '**/Cargo.lock'
- '**/Cargo.toml'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
+44
View File
@@ -0,0 +1,44 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
name: check change files
on:
pull_request:
paths:
- '.changes/*.md'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: check change files end with .md
run: |
for file in .changes/*
do
if [[ ! "$file" =~ \.(md|json)$ ]]; then
echo ".changes directory should only contain files that end with .md"
echo "found an invalid file in .changes directory:"
echo "$file"
exit 1
fi
done
- uses: dorny/paths-filter@v3
id: filter
with:
list-files: shell
filters: |
changes:
- added|modified: '.changes/*.md'
- name: check
run: node ./.scripts/ci/check-change-files.js ${{ steps.filter.outputs.changes_files }}
if: ${{ steps.filter.outputs.changes == 'true' }}
+7 -7
View File
@@ -7,8 +7,8 @@ name: check generated files
on:
pull_request:
paths:
- ".github/workflows/check-generated-files.yml"
- "**/guest-js/**"
- '.github/workflows/check-generated-files.yml'
- '**/guest-js/**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
@@ -25,10 +25,6 @@ jobs:
id: filter
with:
filters: |
authenticator:
- .github/workflows/check-generated-files.yml
- plugins/authenticator/guest-js/**
- plugins/authenticator/src/api-iife.js
autostart:
- .github/workflows/check-generated-files.yml
- plugins/autostart/guest-js/**
@@ -57,6 +53,10 @@ jobs:
- .github/workflows/check-generated-files.yml
- plugins/global-shortcut/guest-js/**
- plugins/global-shortcut/src/api-iife.js
opener:
- .github/workflows/check-generated-files.yml
- plugins/opener/guest-js/**
- plugins/opener/src/api-iife.js
haptics:
- .github/workflows/check-generated-files.yml
- plugins/haptics/guest-js/**
@@ -140,7 +140,7 @@ jobs:
${{ runner.os }}-
- uses: actions/setup-node@v4
with:
node-version: "lts/*"
node-version: 'lts/*'
- uses: pnpm/action-setup@v4
with:
version: 9.x.x
@@ -27,4 +27,4 @@ jobs:
uses: jbolda/covector/packages/action@covector-v0
with:
token: ${{ secrets.GITHUB_TOKEN }}
command: "status"
command: 'status'
+2 -2
View File
@@ -17,6 +17,6 @@ jobs:
uses: jbolda/covector/packages/action@covector-v0
id: covector
with:
command: "status"
command: 'status'
token: ${{ secrets.GITHUB_TOKEN }}
comment: true
comment: true
@@ -34,8 +34,8 @@ jobs:
- uses: actions/setup-node@v4
with:
node-version: "lts/*"
registry-url: "https://registry.npmjs.org"
node-version: 'lts/*'
registry-url: 'https://registry.npmjs.org'
- uses: pnpm/action-setup@v4
with:
@@ -65,7 +65,7 @@ jobs:
NODE_AUTH_TOKEN: ${{ secrets.ORG_NPM_TOKEN }}
with:
token: ${{ secrets.GITHUB_TOKEN }}
command: "version-or-publish"
command: 'version-or-publish'
createRelease: true
recognizeContributors: true
@@ -78,8 +78,8 @@ jobs:
uses: tauri-apps/create-pull-request@v3
if: steps.covector.outputs.commandRan == 'version'
with:
title: "Publish New Versions (${{ github.ref_name }})"
commit-message: "publish new versions"
labels: "version updates"
branch: "ci/release-${{ github.ref_name }}"
title: 'Publish New Versions (${{ github.ref_name }})'
commit-message: 'publish new versions'
labels: 'version updates'
branch: 'ci/release-${{ github.ref_name }}'
body: ${{ steps.covector.outputs.change }}
+59
View File
@@ -0,0 +1,59 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
name: check formatting
on:
pull_request:
jobs:
rustfmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: install Rust stable and rustfmt
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: run cargo fmt
run: cargo fmt --all -- --check
prettier:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Cache pnpm modules
uses: actions/cache@v4
with:
path: ~/.pnpm-store
key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-
- uses: actions/setup-node@v4
with:
node-version: 'lts/*'
- uses: pnpm/action-setup@v4
with:
version: 9.x.x
run_install: true
- run: pnpm format:check
taplo:
name: taplo (.toml files)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: install Rust stable
uses: dtolnay/rust-toolchain@stable
- name: install taplo-cli
uses: taiki-e/install-action@v2
with:
tool: taplo-cli
- run: taplo fmt --check --diff
+4 -4
View File
@@ -10,15 +10,15 @@ on:
- v1
- v2
paths:
- ".github/workflows/integration-tests.yml"
- "plugins/updater/src/**"
- '.github/workflows/integration-tests.yml'
- 'plugins/updater/src/**'
pull_request:
branches:
- v1
- v2
paths:
- ".github/workflows/integration-tests.yml"
- "plugins/updater/src/**"
- '.github/workflows/integration-tests.yml'
- 'plugins/updater/src/**'
jobs:
run-integration-tests:
+13 -33
View File
@@ -10,23 +10,23 @@ on:
- v1
- v2
paths:
- ".github/workflows/lint-javascript.yml"
- "plugins/*/guest-js/**"
- ".eslintignore"
- ".eslintrc.json"
- ".prettierignore"
- "**/package.json"
- '.github/workflows/lint-javascript.yml'
- 'plugins/*/guest-js/**'
- '.eslintignore'
- '.eslintrc.json'
- '.prettierignore'
- '**/package.json'
pull_request:
branches:
- v1
- v2
paths:
- ".github/workflows/lint-javascript.yml"
- "plugins/*/guest-js/**"
- ".eslintignore"
- ".eslintrc.json"
- ".prettierignore"
- "**/package.json"
- '.github/workflows/lint-javascript.yml'
- 'plugins/*/guest-js/**'
- '.eslintignore'
- '.eslintrc.json'
- '.prettierignore'
- '**/package.json'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
@@ -46,30 +46,10 @@ jobs:
${{ runner.os }}-
- uses: actions/setup-node@v4
with:
node-version: "lts/*"
node-version: 'lts/*'
- uses: pnpm/action-setup@v4
with:
version: 9.x.x
run_install: true
- name: eslint
run: pnpm lint
prettier:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Cache pnpm modules
uses: actions/cache@v4
with:
path: ~/.pnpm-store
key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-
- uses: actions/setup-node@v4
with:
node-version: "lts/*"
- uses: pnpm/action-setup@v4
with:
version: 9.x.x
run_install: true
- name: prettier check
run: pnpm format-check
+16 -40
View File
@@ -10,19 +10,19 @@ on:
- v1
- v2
paths:
- ".github/workflows/lint-rust.yml"
- "plugins/*/src/**"
- "!plugins/*/src/api-iife.js"
- "**/Cargo.toml"
- '.github/workflows/lint-rust.yml'
- 'plugins/*/src/**'
- '!plugins/*/src/api-iife.js'
- '**/Cargo.toml'
pull_request:
branches:
- v1
- v2
paths:
- ".github/workflows/lint-rust.yml"
- "plugins/*/src/**"
- "!plugins/*/src/api-iife.js"
- "**/Cargo.toml"
- '.github/workflows/lint-rust.yml'
- 'plugins/*/src/**'
- '!plugins/*/src/api-iife.js'
- '**/Cargo.toml'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
@@ -41,9 +41,6 @@ jobs:
id: filter
with:
filters: |
tauri-plugin-authenticator:
- .github/workflows/lint-rust.yml
- plugins/authenticator/**
tauri-plugin-autostart:
- .github/workflows/lint-rust.yml
- plugins/autostart/**
@@ -69,6 +66,9 @@ jobs:
tauri-plugin-global-shortcut:
- .github/workflows/lint-rust.yml
- plugins/global-shortcut/**
tauri-plugin-opener:
- .github/workflows/lint-rust.yml
- plugins/opener/**
tauri-plugin-haptics:
- .github/workflows/lint-rust.yml
- plugins/haptics/**
@@ -129,7 +129,7 @@ jobs:
clippy:
needs: changes
if: ${{ needs.changes.outputs.packages != '[]' && needs.changes.outputs.packages != '' }}
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
@@ -138,10 +138,10 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: install webkit2gtk and libudev for [authenticator]
- name: install webkit2gtk
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libudev-dev
sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev
- name: Install clippy with stable toolchain
uses: dtolnay/rust-toolchain@stable
@@ -150,32 +150,8 @@ jobs:
- uses: Swatinem/rust-cache@v2
- name: create dummy dist
working-directory: examples/api
run: mkdir dist
- name: clippy ${{ matrix.package }}
if: matrix.package != 'tauri-plugin-sql'
run: cargo clippy --package ${{ matrix.package }} --all-targets -- -D warnings
- name: clippy ${{ matrix.package }} mysql
if: matrix.package == 'tauri-plugin-sql'
run: cargo clippy --package ${{ matrix.package }} --all-targets --no-default-features --features mysql -- -D warnings
- name: clippy ${{ matrix.package }} postgres
if: matrix.package == 'tauri-plugin-sql'
run: cargo clippy --package ${{ matrix.package }} --all-targets --no-default-features --features postgres -- -D warnings
fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install rustfmt with nightly toolchain
uses: dtolnay/rust-toolchain@nightly
with:
components: rustfmt
- name: Check formatting
run: cargo fmt --all -- --check
- name: clippy ${{ matrix.package }} --all-features
run: cargo clippy --package ${{ matrix.package }} --all-targets --all-features -- -D warnings
+1 -1
View File
@@ -34,7 +34,7 @@ jobs:
- uses: actions/setup-node@v4
with:
node-version: "lts/*"
node-version: 'lts/*'
- uses: pnpm/action-setup@v4
with:
+56 -51
View File
@@ -10,21 +10,21 @@ on:
- v1
- v2
paths:
- ".github/workflows/test-rust.yml"
- "plugins/*/src/**"
- "!plugins/*/src/api-iife.js"
- "**/Cargo.toml"
- "**/Cargo.lock"
- '.github/workflows/test-rust.yml'
- 'plugins/*/src/**'
- '!plugins/*/src/api-iife.js'
- '**/Cargo.toml'
- '**/Cargo.lock'
pull_request:
branches:
- v1
- v2
paths:
- ".github/workflows/test-rust.yml"
- "plugins/*/src/**"
- "!plugins/*/src/api-iife.js"
- "**/Cargo.toml"
- "**/Cargo.lock"
- '.github/workflows/test-rust.yml'
- 'plugins/*/src/**'
- '!plugins/*/src/api-iife.js'
- '**/Cargo.toml'
- '**/Cargo.lock'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
@@ -44,116 +44,143 @@ jobs:
with:
base: v2
filters: |
tauri-plugin-authenticator:
- .github/workflows/test-rust.yml
- Cargo.toml
- plugins/authenticator/**
tauri-plugin-autostart:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/autostart/**
tauri-plugin-cli:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/cli/**
tauri-plugin-clipboard-manager:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/clipboard-manager/**
tauri-plugin-deep-link:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/deep-link/**
tauri-plugin-dialog:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/dialog/**
- plugins/fs/**
tauri-plugin-fs:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/fs/**
tauri-plugin-geolocation:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/geolocation/**
tauri-plugin-global-shortcut:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/global-shortcut/**
tauri-plugin-opener:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/opener/**
tauri-plugin-haptics:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/haptics/**
tauri-plugin-http:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/http/**
- plugins/fs/**
tauri-plugin-localhost:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/localhost/**
tauri-plugin-log:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/log/**
tauri-plugin-notification:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/notification/**
tauri-plugin-os:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/os/**
tauri-plugin-persisted-scope:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/persisted-scope/**
- plugins/fs/**
tauri-plugin-positioner:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/positioner/**
tauri-plugin-process:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/process/**
tauri-plugin-shell:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/shell/**
tauri-plugin-single-instance:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/single-instance/**
tauri-plugin-sql:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/sql/**
tauri-plugin-store:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/store/**
tauri-plugin-stronghold:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/stronghold/**
tauri-plugin-updater:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/updater/**
tauri-plugin-upload:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/upload/**
tauri-plugin-websocket:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/websocket/**
tauri-plugin-window-state:
- .github/workflows/test-rust.yml
- Cargo.toml
- Cargo.lock
- plugins/window-state/**
test:
@@ -167,32 +194,32 @@ jobs:
- {
target: x86_64-pc-windows-msvc,
os: windows-latest,
runner: "cargo",
command: "test",
runner: 'cargo',
command: 'test'
}
- {
target: x86_64-unknown-linux-gnu,
os: ubuntu-latest,
runner: "cargo",
command: "test",
os: ubuntu-22.04,
runner: 'cargo',
command: 'test'
}
- {
target: aarch64-apple-darwin,
os: macos-latest,
runner: "cargo",
command: "test",
runner: 'cargo',
command: 'test'
}
- {
target: aarch64-apple-ios,
os: macos-latest,
runner: "cargo",
command: "build",
runner: 'cargo',
command: 'build'
}
- {
target: aarch64-linux-android,
os: ubuntu-latest,
runner: "cross",
command: "build",
runner: 'cross',
command: 'build'
}
runs-on: ${{ matrix.platform.os }}
@@ -200,19 +227,13 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: install webkit2gtk and libudev for [authenticator]
- name: install webkit2gtk
if: contains(matrix.platform.target, 'unknown-linux')
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libudev-dev
sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev
- name: install openssl
if: ${{ matrix.platform.os == 'windows-latest' && matrix.package == 'tauri-plugin-authenticator' }}
run: |
echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append
vcpkg install openssl:x64-windows-static-md
- uses: dtolnay/rust-toolchain@1.75.0
- uses: dtolnay/rust-toolchain@1.77.2
with:
targets: ${{ matrix.platform.target }}
@@ -220,30 +241,14 @@ jobs:
with:
key: cache-${{ matrix.package }}-${{ matrix.platform.target }}
- name: create dummy dist
working-directory: examples/api
run: mkdir dist
- name: install cross
if: ${{ matrix.platform.runner == 'cross' }}
run: cargo +stable install cross --git https://github.com/cross-rs/cross
- name: test ${{ matrix.package }}
if: matrix.package != 'tauri-plugin-sql' && matrix.package != 'tauri-plugin-http'
if: matrix.package != 'tauri-plugin-http'
run: ${{ matrix.platform.runner }} ${{ matrix.platform.command }} --package ${{ matrix.package }} --target ${{ matrix.platform.target }} --all-targets --all-features
- name: test ${{ matrix.package }}
if: matrix.package == 'tauri-plugin-http'
run: ${{ matrix.platform.runner }} ${{ matrix.platform.command }} --package ${{ matrix.package }} --target ${{ matrix.platform.target }} --all-targets
- name: test ${{ matrix.package }} sqlite
if: matrix.package == 'tauri-plugin-sql'
run: ${{ matrix.platform.runner }} ${{ matrix.platform.command }} --package ${{ matrix.package }} --target ${{ matrix.platform.target }} --all-targets --features sqlite
- name: test ${{ matrix.package }} mysql
if: matrix.package == 'tauri-plugin-sql'
run: ${{ matrix.platform.runner }} ${{ matrix.platform.command }} --package ${{ matrix.package }} --target ${{ matrix.platform.target }} --all-targets --features mysql
- name: test ${{ matrix.package }} postgres
if: matrix.package == 'tauri-plugin-sql'
run: ${{ matrix.platform.runner }} ${{ matrix.platform.command }} --package ${{ matrix.package }} --target ${{ matrix.platform.target }} --all-targets --features postgres
+57 -9
View File
@@ -1,10 +1,58 @@
target
node_modules
dist-js
dist
# dependency directories
node_modules/
target/
# Optional npm and yarn cache directory
.npm/
.yarn/
# Output of 'npm pack'
*.tgz
# dotenv environment variables file
.env
# .vscode workspace settings file
.vscode/settings.json
# npm, yarn and bun lock files
package-lock.json
yarn.lock
bun.lockb
# rust compiled folders
target/
# compiled plugins
dist-js/
# plugins .tauri directory
/plugins/*/.tauri
# examples
examples/*/dist
plugins/*/examples/*/dist
examples/*/src-tauri/gen/schemas
plugins/*/examples/*/src-tauri/gen/schemas
# logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# runtime data
pids
*.pid
*.seed
*.pid.lock
# miscellaneous
/.vs
.DS_Store
.Thumbs.db
*.sublime*
.idea
.vscode
.gradle
**/capabilities/schemas
.build
.tauri
debug.log
TODO.md
+24 -9
View File
@@ -1,12 +1,27 @@
target
node_modules
dist
dist-js
/.changes
/.vscode
# dependcies and artifacts directories
node_modules/
target/
dist-js/
dist/
# lock files
pnpm-lock.yaml
Cargo.lock
.build
build
# examples gen directory
examples/*/src-tauri/gen/
plugins/*/examples/*/src-tauri/gen/
# autogenerated files
**/autogenerated/**/*.md
api-iife.js
init-iife.js
intermediates/
*schema.json
CHANGELOG.md
*schema.json
# mobile build
**/ios/.build
**/.tauri
plugins/*/android/build
+5
View File
@@ -0,0 +1,5 @@
{
"singleQuote": true,
"semi": false,
"trailingComma": "none"
}
+86
View File
@@ -0,0 +1,86 @@
#!/usr/bin/env node
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
import { readFileSync, readdirSync } from 'fs'
import { join } from 'path'
/* const ignorePackages = [
'api-example',
'api-example-js',
'deep-link-example',
'deep-link-example-js'
] */
const rsOnly = ['localhost', 'persisted-scope', 'single-instance']
function checkChangeFiles(changeFiles) {
let code = 0
for (const file of changeFiles) {
const content = readFileSync(file, 'utf8')
const [frontMatter] = /^---[\s\S.]*---\n/i.exec(content)
const packages = frontMatter
.split('\n')
.filter((l) => !(l === '---' || !l))
.map((l) => l.replace(/('|")/g, '').split(':'))
const rsPackages = Object.fromEntries(
packages
.filter((v) => !v[0].endsWith('-js'))
.map((v) => [v[0], v[1].trim()])
)
const jsPackages = Object.fromEntries(
packages
.filter((v) => v[0].endsWith('-js'))
.map((v) => [v[0].slice(0, -3), v[1].trim()])
)
for (const pkg in rsPackages) {
if (rsOnly.includes(pkg)) continue
if (!jsPackages[pkg]) {
console.error(
`Missing "${rsPackages[pkg]}" bump for JS package "${pkg}-js" in ${file}.`
)
code = 1
} else if (rsPackages[pkg] != jsPackages[pkg]) {
console.error(
`"${pkg}" and "${pkg}-js" have different version bumps in ${file}.`
)
code = 1
}
}
for (const pkg in jsPackages) {
if (!rsPackages[pkg]) {
console.error(
`Missing "${jsPackages[pkg]}" bump for Rust package "${pkg}" in ${file}.`
)
code = 1
} else if (rsPackages[pkg] != jsPackages[pkg]) {
console.error(
`"${pkg}" and "${pkg}-js" have different version bumps in ${file}.`
)
code = 1
}
}
}
process.exit(code)
}
const [_bin, _script, ...files] = process.argv
if (files.length > 0) {
checkChangeFiles(
files.filter((f) => f.toLowerCase() !== '.changes/readme.md')
)
} else {
const changeFiles = readdirSync('.changes')
.filter((f) => f.endsWith('.md') && f.toLowerCase() !== 'readme.md')
.map((p) => join('.changes', p))
checkChangeFiles(changeFiles)
}
+59 -59
View File
@@ -2,129 +2,129 @@
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
import fs from "fs";
import path from "path";
import readline from "readline";
import fs from 'fs'
import path from 'path'
import readline from 'readline'
const header = `Copyright 2019-2023 Tauri Programme within The Commons Conservancy
SPDX-License-Identifier: Apache-2.0
SPDX-License-Identifier: MIT`;
SPDX-License-Identifier: MIT`
const ignoredLicenses = [
"// Copyright 2021 Flavio Oliveira",
"// Copyright 2021 Jonas Kruckenberg",
"// Copyright 2018-2023 the Deno authors.",
];
'// Copyright 2021 Flavio Oliveira',
'// Copyright 2021 Jonas Kruckenberg',
'// Copyright 2018-2023 the Deno authors.'
]
const extensions = [".rs", ".js", ".ts", ".yml", ".swift", ".kt"];
const extensions = ['.rs', '.js', '.ts', '.yml', '.swift', '.kt']
const ignore = [
"target",
"templates",
"node_modules",
"gen",
"dist",
"dist-js",
".svelte-kit",
"api-iife.js",
"init-iife.js",
".build",
"notify_rust",
];
'target',
'templates',
'node_modules',
'gen',
'dist',
'dist-js',
'.svelte-kit',
'api-iife.js',
'init-iife.js',
'.build',
'notify_rust'
]
async function checkFile(file) {
if (
extensions.some((e) => file.endsWith(e)) &&
!ignore.some((i) => file.includes(`${path.sep}${i}`))
) {
const fileStream = fs.createReadStream(file);
const fileStream = fs.createReadStream(file)
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity,
});
crlfDelay: Infinity
})
let contents = ``;
let i = 0;
let contents = ``
let i = 0
for await (let line of rl) {
// ignore empty lines, allow shebang, swift-tools-version and bundler license
if (
line.length === 0 ||
line.startsWith("#!") ||
line.startsWith("// swift-tools-version:") ||
line.startsWith('#!') ||
line.startsWith('// swift-tools-version:') ||
ignoredLicenses.includes(line)
) {
continue;
continue
}
// strip comment marker
if (line.startsWith("// ")) {
line = line.substring(3);
} else if (line.startsWith("# ")) {
line = line.substring(2);
if (line.startsWith('// ')) {
line = line.substring(3)
} else if (line.startsWith('# ')) {
line = line.substring(2)
}
contents += line;
contents += line
if (++i === 3) {
break;
break
}
contents += "\n";
contents += '\n'
}
if (contents !== header) {
return true;
return true
}
}
return false;
return false
}
async function check(src) {
const missingHeader = [];
const missingHeader = []
for (const entry of fs.readdirSync(src, {
withFileTypes: true,
withFileTypes: true
})) {
const p = path.join(src, entry.name);
const p = path.join(src, entry.name)
if (entry.isSymbolicLink() || ignore.includes(entry.name)) {
continue;
continue
}
if (entry.isDirectory()) {
const missing = await check(p);
missingHeader.push(...missing);
const missing = await check(p)
missingHeader.push(...missing)
} else {
const isMissing = await checkFile(p);
const isMissing = await checkFile(p)
if (isMissing) {
missingHeader.push(p);
missingHeader.push(p)
}
}
}
return missingHeader;
return missingHeader
}
const [_bin, _script, ...files] = process.argv;
const [_bin, _script, ...files] = process.argv
if (files.length > 0) {
async function run() {
const missing = [];
const missing = []
for (const f of files) {
const isMissing = await checkFile(f);
const isMissing = await checkFile(f)
if (isMissing) {
missing.push(f);
missing.push(f)
}
}
if (missing.length > 0) {
console.log(missing.join("\n"));
process.exit(1);
console.log(missing.join('\n'))
process.exit(1)
}
}
run();
run()
} else {
check(path.resolve(new URL(import.meta.url).pathname, "../../..")).then(
check(path.resolve(new URL(import.meta.url).pathname, '../../..')).then(
(missing) => {
if (missing.length > 0) {
console.log(missing.join("\n"));
process.exit(1);
console.log(missing.join('\n'))
process.exit(1)
}
},
);
}
)
}
+1
View File
@@ -0,0 +1 @@
plugins/*/permissions/autogenerated/
+8
View File
@@ -0,0 +1,8 @@
{
"recommendations": [
"rust-lang.rust-analyzer",
"EditorConfig.EditorConfig",
"esbenp.prettier-vscode",
"tamasfe.even-better-toml"
]
}
Generated
+1476 -1278
View File
File diff suppressed because it is too large Load Diff
+9 -6
View File
@@ -10,24 +10,27 @@ resolver = "2"
[workspace.dependencies]
serde = { version = "1", features = ["derive"] }
tracing = "0.1"
log = "0.4"
tauri = { version = "2.0.0-rc.8", default-features = false }
tauri-build = "2.0.0-rc.7"
tauri-plugin = "2.0.0-rc.7"
tauri-utils = "2.0.0-rc.7"
tauri = { version = "2", default-features = false }
tauri-build = "2"
tauri-plugin = "2"
tauri-utils = "2"
serde_json = "1"
thiserror = "1"
thiserror = "2"
url = "2"
schemars = "0.8"
dunce = "1"
specta = "=2.0.0-rc.20"
glob = "0.3"
zbus = "4"
#tauri-specta = "=2.0.0-rc.11"
[workspace.package]
edition = "2021"
authors = ["Tauri Programme within The Commons Conservancy"]
license = "Apache-2.0 OR MIT"
rust-version = "1.75"
rust-version = "1.77.2"
repository = "https://github.com/tauri-apps/plugins-workspace"
# default to small, optimized release binaries
+39 -31
View File
@@ -1,37 +1,45 @@
# Official Tauri Plugins
This repo and all plugins require a Rust version of at least **1.77.2**
## Plugins Found Here
| | | Win | Mac | Lin | iOS | And |
| ----------------------------------------------- | ------------------------------------------------------ | --- | --- | --- | --- | --- |
| [authenticator](plugins/authenticator) | Interface with hardware security keys. | ✅ | ✅ | ✅ | ? | ? |
| [autostart](plugins/autostart) | Automatically launch your app at system startup. | ✅ | ✅ | | ? | ? |
| [barcode-scanner](plugins/barcode-scanner) | Allows your mobile application to use the camera to scan QR codes, EAN-13 and other kinds of barcodes. | ? | ? | ? | ✅ | ✅ |
| [biometric](plugins/biometric) | Prompt the user for biometric authentication on Android and iOS. | ? | ? | ? | | |
| [cli](plugins/cli) | Parse arguments from your Command Line Interface | ✅ | ✅ | ✅ | ? | ? |
| [clipboard-manager](plugins/clipboard-manager) | Read and write to the system clipboard. | ✅ | ✅ | ✅ | ✅ | ✅ |
| [deep-link](plugins/deep-link) | Set your Tauri application as the default handler for an URL. | ✅ | ✅ | ✅ | ✅ | ✅ |
| [dialog](plugins/dialog) | Native system dialogs for opening and saving files along with message dialogs. | ✅ | ✅ | ✅ | | |
| [fs](plugins/fs) | Access the file system. | | | | ? | ? |
| [global-shortcut](plugins/global-shortcut) | Register global shortcuts. | ✅ | ✅ | ✅ | ? | ? |
| [http](plugins/http) | Access the HTTP client written in Rust. | | | | ✅ | ✅ |
| [localhost](plugins/localhost) | Use a localhost server in production apps. | ✅ | ✅ | ✅ | ? | ? |
| [log](plugins/log) | Configurable logging. | ✅ | ✅ | ✅ | ✅ | |
| [nfc](plugins/nfc) | Read and write NFC tags on Android and iOS. | ? | ? | ? | ✅ | ✅ |
| [notification](plugins/notification) | Send message notifications (brief auto-expiring OS window element) to your user. Can also be used with the Notification Web API. | | | | ✅ | ✅ |
| [os](plugins/os) | Read information about the operating system. | ✅ | ✅ | ✅ | ✅ | ✅ |
| [persisted-scope](plugins/persisted-scope) | Persist runtime scope changes on the filesystem. | ✅ | ✅ | ✅ | ? | ? |
| [positioner](plugins/positioner) | Move windows to common locations. | ✅ | ✅ | ✅ | ? | ? |
| [process](plugins/process) | This plugin provides APIs to access the current process. To spawn child processes, see the [`shell`](https://github.com/tauri-apps/tauri-plugin-shell) plugin. | ✅ | ✅ | ✅ | ? | ? |
| [shell](plugins/shell) | Access the system shell. Allows you to spawn child processes and manage files and URLs using their default application. | ✅ | ✅ | ✅ | ? | ? |
| [single-instance](plugins/single-instance) | Ensure a single instance of your tauri app is running. | ✅ | ? | ✅ | ? | ? |
| [sql](plugins/sql) | Interface with SQL databases. | ✅ | ✅ | ✅ | ? | ? |
| [store](plugins/store) | Persistent key value storage. | ✅ | ✅ | ✅ | | |
| [stronghold](plugins/stronghold) | Encrypted, secure database. | ✅ | ✅ | ✅ | ? | ? |
| [updater](plugins/updater) | In-app updates for Tauri applications. | ✅ | ✅ | ✅ | ? | ? |
| [upload](plugins/upload) | Tauri plugin for file uploads through HTTP. | ✅ | ✅ | ✅ | ? | ? |
| [websocket](plugins/websocket) | Open a WebSocket connection using a Rust client in JS. | ✅ | ✅ | ✅ | ? | ? |
| [window-state](plugins/window-state) | Persist window sizes and positions. | ✅ | ✅ | ✅ | ? | ? |
| | | Win | Mac | Lin | iOS | And |
| ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | --- | --- | --- | --- |
| [autostart](plugins/autostart) | Automatically launch your app at system startup. | ✅ | ✅ | ✅ | | |
| [barcode-scanner](plugins/barcode-scanner) | Allows your mobile application to use the camera to scan QR codes, EAN-13 and other kinds of barcodes. | ? | ? | ? | ✅ | ✅ |
| [biometric](plugins/biometric) | Prompt the user for biometric authentication on Android and iOS. | ? | ? | ? | ✅ | ✅ |
| [cli](plugins/cli) | Parse arguments from your Command Line Interface | | | | | |
| [clipboard-manager](plugins/clipboard-manager) | Read and write to the system clipboard. | ✅ | ✅ | ✅ | | |
| [deep-link](plugins/deep-link) | Set your Tauri application as the default handler for an URL. | ✅ | ✅ | ✅ | ✅ | ✅ |
| [dialog](plugins/dialog) | Native system dialogs for opening and saving files along with message dialogs. | ✅ | ✅ | ✅ | ✅ | ✅ |
| [fs](plugins/fs) | Access the file system. | ✅ | ✅ | ✅ | ? | ? |
| [geolocation](plugins/geolocation) | Get and track current device position. | ? | ? | ? | | |
| [global-shortcut](plugins/global-shortcut) | Register global shortcuts. | ✅ | ✅ | ✅ | ? | ? |
| [haptics](plugins/haptics) | Haptic feedback and vibrations. | ? | ? | ? | ✅ | ✅ |
| [http](plugins/http) | Access the HTTP client written in Rust. | ✅ | ✅ | ✅ | ✅ | |
| [localhost](plugins/localhost) | Use a localhost server in production apps. | ✅ | ✅ | ✅ | ? | ? |
| [log](plugins/log) | Configurable logging. | ✅ | ✅ | ✅ | ✅ | ✅ |
| [nfc](plugins/nfc) | Read and write NFC tags on Android and iOS. | ? | ? | ? | ✅ | ✅ |
| [notification](plugins/notification) | Send message notifications (brief auto-expiring OS window element) to your user. Can also be used with the Notification Web API. | ✅ | ✅ | ✅ | ✅ | ✅ |
| [opener](plugins/opener) | Open files and URLs using their default application. | ✅ | ✅ | ✅ | ? | ? |
| [os](plugins/os) | Read information about the operating system. | ✅ | ✅ | ✅ | ✅ | |
| [persisted-scope](plugins/persisted-scope) | Persist runtime scope changes on the filesystem. | ✅ | ✅ | ✅ | ? | ? |
| [positioner](plugins/positioner) | Move windows to common locations. | ✅ | ✅ | ✅ | | |
| [process](plugins/process) | This plugin provides APIs to access the current process. To spawn child processes, see the [`shell`](https://github.com/tauri-apps/tauri-plugin-shell) plugin. | ✅ | | ✅ | ? | ? |
| [shell](plugins/shell) | Access the system shell. Allows you to spawn child processes and manage files and URLs using their default application. | ✅ | ✅ | ✅ | ? | ? |
| [single-instance](plugins/single-instance) | Ensure a single instance of your tauri app is running. | ✅ | ✅ | ✅ | | |
| [sql](plugins/sql) | Interface with SQL databases. | ✅ | ✅ | ✅ | ? | |
| [store](plugins/store) | Persistent key value storage. | ✅ | ✅ | ✅ | ✅ | |
| [stronghold](plugins/stronghold) | Encrypted, secure database. | ✅ | ✅ | ✅ | ? | ? |
| [updater](plugins/updater) | In-app updates for Tauri applications. | ✅ | ✅ | ✅ | | |
| [upload](plugins/upload) | Tauri plugin for file uploads through HTTP. | ✅ | ✅ | ✅ | ? | ? |
| [websocket](plugins/websocket) | Open a WebSocket connection using a Rust client in JS. | ✅ | ✅ | ✅ | ? | ? |
| [window-state](plugins/window-state) | Persist window sizes and positions. | ✅ | ✅ | ✅ | ❌ | ❌ |
_This repo and all plugins require a Rust version of at least **1.75**_
- ✅: (Partially) Supported
- ❌: Not supported
- `?` : Unknown/Untested or Planned
## Contributing
+1 -1
View File
@@ -20,4 +20,4 @@ We prefer to receive reports in English.
Please disclose a vulnerability or security relevant issue here: [https://github.com/tauri-apps/plugins-workspace/security/advisories/new](https://github.com/tauri-apps/plugins-workspace/security/advisories/new).
Alternatively, you can also contact us by email via [security@tauri.app](mailto:security@tauri.app).
Alternatively, you can also contact us by email via [security@tauri.app](mailto:security@tauri.app).
+23 -22
View File
@@ -2,28 +2,29 @@
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
import eslint from "@eslint/js";
import eslintConfigPrettier from "eslint-config-prettier";
import eslintPluginSecurity from "eslint-plugin-security";
import tseslint from "typescript-eslint";
import eslint from '@eslint/js'
import eslintConfigPrettier from 'eslint-config-prettier'
import eslintPluginSecurity from 'eslint-plugin-security'
import tseslint from 'typescript-eslint'
export default tseslint.config(
{
ignores: [
"**/target",
"**/node_modules",
"**/examples",
"**/dist",
"**/dist-js",
"**/build",
"**/api-iife.js",
"**/init-iife.js",
"**/init.js",
"**/rollup.config.js",
"**/bindings.ts",
".scripts",
"eslint.config.js",
],
'**/target',
'**/node_modules',
'**/examples',
'**/dist',
'**/dist-js',
'**/build',
'**/api-iife.js',
'**/init-iife.js',
'**/init.js',
'**/rollup.config.js',
'**/bindings.ts',
'**/.test-server',
'.scripts',
'eslint.config.js'
]
},
eslint.configs.recommended,
eslintConfigPrettier,
@@ -31,7 +32,7 @@ export default tseslint.config(
...tseslint.configs.recommendedTypeChecked,
{
languageOptions: {
parserOptions: { project: true, tsconfigRootDir: import.meta.dirname },
},
},
);
parserOptions: { project: true, tsconfigRootDir: import.meta.dirname }
}
}
)
-4
View File
@@ -1,4 +0,0 @@
/node_modules/
/.vscode/
.DS_Store
.cargo
+103
View File
@@ -1,5 +1,108 @@
# Changelog
## \[2.0.6]
### Dependencies
- Upgraded to `barcode-scanner-js@2.1.0`
- Upgraded to `biometric-js@2.1.0`
- Upgraded to `cli-js@2.1.0`
- Upgraded to `clipboard-manager-js@2.1.0`
- Upgraded to `dialog-js@2.1.0`
- Upgraded to `fs-js@2.1.0`
- Upgraded to `global-shortcut-js@2.1.0`
- Upgraded to `http-js@2.1.0`
- Upgraded to `log-js@2.1.0`
- Upgraded to `nfc-js@2.1.0`
- Upgraded to `notification-js@2.1.0`
- Upgraded to `opener-js@2.1.0`
- Upgraded to `os-js@2.1.0`
- Upgraded to `process-js@2.1.0`
- Upgraded to `shell-js@2.1.0`
- Upgraded to `store-js@2.2.0`
- Upgraded to `updater-js@2.1.0`
## \[2.0.5]
### Dependencies
- Upgraded to `fs-js@2.0.4`
- Upgraded to `dialog-js@2.0.2`
- Upgraded to `http-js@2.0.2`
## \[2.0.4]
### Dependencies
- Upgraded to `log-js@2.0.2`
## \[2.0.3]
### Dependencies
- Upgraded to `clipboard-manager-js@2.0.1`
- Upgraded to `log-js@2.0.1`
- Upgraded to `fs-js@2.0.3`
- Upgraded to `opener-js@2.0.0`
## \[2.0.2]
### Dependencies
- Upgraded to `fs-js@2.0.2`
## \[2.0.1]
### Dependencies
- Upgraded to `dialog-js@2.0.1`
- Upgraded to `fs-js@2.0.1`
- Upgraded to `http-js@2.0.1`
- Upgraded to `shell-js@2.0.1`
- Upgraded to `store-js@2.1.0`
## \[2.0.0]
- [`e2c4dfb6`](https://github.com/tauri-apps/plugins-workspace/commit/e2c4dfb6af43e5dd8d9ceba232c315f5febd55c1) Update to tauri v2 stable release.
### Dependencies
- Upgraded to `barcode-scanner-js@2.0.0`
- Upgraded to `biometric-js@2.0.0`
- Upgraded to `cli-js@2.0.0`
- Upgraded to `clipboard-manager-js@2.0.0`
- Upgraded to `fs-js@2.0.0`
- Upgraded to `dialog-js@2.0.0`
- Upgraded to `global-shortcut-js@2.0.0`
- Upgraded to `http-js@2.0.0`
- Upgraded to `log-js@2.0.0`
- Upgraded to `nfc-js@2.0.0`
- Upgraded to `notification-js@2.0.0`
- Upgraded to `os-js@2.0.0`
- Upgraded to `process-js@2.0.0`
- Upgraded to `shell-js@2.0.0`
- Upgraded to `store-js@2.0.0`
- Upgraded to `updater-js@2.0.0`
## \[2.0.0-rc.5]
### Dependencies
- Upgraded to `store-js@2.0.0-rc.2`
## \[2.0.0-rc.4]
### Dependencies
- Upgraded to `barcode-scanner-js@2.0.0-rc.2`
- Upgraded to `clipboard-manager-js@2.0.0-rc.2`
## \[2.0.0-rc.3]
### Dependencies
- Upgraded to `updater-js@2.0.0-rc.2`
## \[2.0.0-rc.2]
### Dependencies
+2 -2
View File
@@ -3,5 +3,5 @@
// SPDX-License-Identifier: MIT
window.__TAURI_ISOLATION_HOOK__ = (payload) => {
return payload;
};
return payload
}
+4 -6
View File
@@ -1,14 +1,14 @@
{
"compilerOptions": {
"moduleResolution": "node",
"target": "esnext",
"module": "esnext",
"moduleResolution": "bundler",
"target": "ESNext",
"module": "ESNext",
/**
* svelte-preprocess cannot figure out whether you have
* a value or a type, so tell TypeScript to enforce using
* `import type` instead of `import` for Types.
*/
"importsNotUsedAsValues": "error",
"verbatimModuleSyntax": true,
"isolatedModules": true,
"resolveJsonModule": true,
/**
@@ -18,8 +18,6 @@
"sourceMap": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"baseUrl": ".",
/**
* Typecheck JS in `.svelte` and `.js` files by default.
* Disable this if you'd like to use dynamic types.
+30 -26
View File
@@ -1,40 +1,44 @@
{
"name": "svelte-app",
"name": "api",
"private": true,
"version": "2.0.0-rc.2",
"version": "2.0.6",
"type": "module",
"scripts": {
"dev": "vite --clearScreen false",
"build": "vite build",
"serve": "vite preview"
"serve": "vite preview",
"tauri": "tauri"
},
"dependencies": {
"@tauri-apps/api": "2.0.0-rc.4",
"@tauri-apps/plugin-barcode-scanner": "2.0.0-rc.1",
"@tauri-apps/plugin-biometric": "2.0.0-rc.1",
"@tauri-apps/plugin-cli": "2.0.0-rc.1",
"@tauri-apps/plugin-clipboard-manager": "2.0.0-rc.1",
"@tauri-apps/plugin-dialog": "2.0.0-rc.1",
"@tauri-apps/plugin-fs": "2.0.0-rc.2",
"@tauri-apps/plugin-global-shortcut": "2.0.0-rc.1",
"@tauri-apps/plugin-http": "2.0.0-rc.2",
"@tauri-apps/plugin-nfc": "2.0.0-rc.1",
"@tauri-apps/plugin-notification": "2.0.0-rc.1",
"@tauri-apps/plugin-os": "2.0.0-rc.1",
"@tauri-apps/plugin-process": "2.0.0-rc.1",
"@tauri-apps/plugin-shell": "2.0.0-rc.1",
"@tauri-apps/plugin-store": "2.0.0-rc.1",
"@tauri-apps/plugin-updater": "2.0.0-rc.1",
"@zerodevx/svelte-json-view": "1.0.9"
"@tauri-apps/api": "2.1.1",
"@tauri-apps/plugin-barcode-scanner": "2.1.0",
"@tauri-apps/plugin-biometric": "2.1.0",
"@tauri-apps/plugin-cli": "2.1.0",
"@tauri-apps/plugin-clipboard-manager": "2.1.0",
"@tauri-apps/plugin-dialog": "2.1.0",
"@tauri-apps/plugin-fs": "2.1.0",
"@tauri-apps/plugin-geolocation": "2.0.0",
"@tauri-apps/plugin-global-shortcut": "2.1.0",
"@tauri-apps/plugin-opener": "2.1.0",
"@tauri-apps/plugin-haptics": "2.0.0",
"@tauri-apps/plugin-http": "2.1.0",
"@tauri-apps/plugin-nfc": "2.1.0",
"@tauri-apps/plugin-notification": "2.1.0",
"@tauri-apps/plugin-os": "2.1.0",
"@tauri-apps/plugin-process": "2.1.0",
"@tauri-apps/plugin-shell": "2.1.0",
"@tauri-apps/plugin-store": "2.2.0",
"@tauri-apps/plugin-updater": "2.1.0",
"@zerodevx/svelte-json-view": "1.0.11"
},
"devDependencies": {
"@iconify-json/codicon": "^1.1.37",
"@iconify-json/ph": "^1.1.8",
"@sveltejs/vite-plugin-svelte": "^3.0.1",
"@tauri-apps/cli": "2.0.0-rc.8",
"@unocss/extractor-svelte": "^0.62.0",
"svelte": "^4.2.8",
"unocss": "^0.62.0",
"vite": "^5.0.13"
"@sveltejs/vite-plugin-svelte": "^5.0.0",
"@tauri-apps/cli": "2.1.0",
"@unocss/extractor-svelte": "^0.65.0",
"svelte": "^5.0.0",
"unocss": "^0.65.0",
"vite": "^6.0.0"
}
}
+182
View File
@@ -1,5 +1,187 @@
# Changelog
## \[2.0.9]
### Dependencies
- Upgraded to `barcode-scanner@2.1.0`
- Upgraded to `biometric@2.1.0`
- Upgraded to `cli@2.1.0`
- Upgraded to `clipboard-manager@2.1.0`
- Upgraded to `dialog@2.1.0`
- Upgraded to `fs@2.2.0`
- Upgraded to `geolocation@2.1.0`
- Upgraded to `global-shortcut@2.1.0`
- Upgraded to `haptics@2.1.0`
- Upgraded to `http@2.1.0`
- Upgraded to `log@2.1.0`
- Upgraded to `nfc@2.1.0`
- Upgraded to `notification@2.1.0`
- Upgraded to `opener@2.1.0`
- Upgraded to `os@2.1.0`
- Upgraded to `process@2.1.0`
- Upgraded to `shell@2.1.0`
- Upgraded to `store@2.2.0`
- Upgraded to `updater@2.2.0`
## \[2.0.8]
### Dependencies
- Upgraded to `fs@2.1.1`
- Upgraded to `dialog@2.0.5`
- Upgraded to `http@2.0.5`
## \[2.0.7]
### Dependencies
- Upgraded to `log@2.0.4`
## \[2.0.6]
### Dependencies
- Upgraded to `fs@2.1.0`
- Upgraded to `updater@2.1.0`
- Upgraded to `dialog@2.0.4`
- Upgraded to `log-plugin@2.0.3`
- Upgraded to `http@2.0.4`
- Upgraded to `opener@2.0.0`
## \[2.0.5]
### Dependencies
- Upgraded to `clipboard-manager@2.0.2`
- Upgraded to `log-plugin@2.0.2`
## \[2.0.4]
### Dependencies
- Upgraded to `fs@2.0.3`
- Upgraded to `dialog@2.0.3`
- Upgraded to `http@2.0.3`
## \[2.0.3]
### Dependencies
- Upgraded to `dialog@2.0.2`
- Upgraded to `fs@2.0.2`
- Upgraded to `http@2.0.2`
- Upgraded to `shell@2.0.2`
- Upgraded to `store@2.1.0`
## \[2.0.2]
- [`a1a82208`](https://github.com/tauri-apps/plugins-workspace/commit/a1a82208ed4ab87f83310be0dc95428aec9ab241) ([#1873](https://github.com/tauri-apps/plugins-workspace/pull/1873) by [@lucasfernog](https://github.com/tauri-apps/plugins-workspace/../../lucasfernog)) Downgrade MSRV to 1.77.2 to support Windows 7.
### Dependencies
- Upgraded to `barcode-scanner@2.0.1`
- Upgraded to `biometric@2.0.1`
- Upgraded to `cli@2.0.1`
- Upgraded to `clipboard-manager@2.0.1`
- Upgraded to `fs@2.0.1`
- Upgraded to `dialog@2.0.1`
- Upgraded to `geolocation@2.0.1`
- Upgraded to `global-shortcut@2.0.1`
- Upgraded to `haptics@2.0.1`
- Upgraded to `http@2.0.1`
- Upgraded to `log-plugin@2.0.1`
- Upgraded to `nfc@2.0.1`
- Upgraded to `notification@2.0.1`
- Upgraded to `os@2.0.1`
- Upgraded to `process@2.0.1`
- Upgraded to `shell@2.0.1`
- Upgraded to `store@2.0.1`
- Upgraded to `updater@2.0.2`
## \[2.0.1]
### Dependencies
- Upgraded to `updater@2.0.1`
## \[2.0.0]
- [`e2c4dfb6`](https://github.com/tauri-apps/plugins-workspace/commit/e2c4dfb6af43e5dd8d9ceba232c315f5febd55c1) Update to tauri v2 stable release.
### Dependencies
- Upgraded to `barcode-scanner@2.0.0`
- Upgraded to `biometric@2.0.0`
- Upgraded to `cli@2.0.0`
- Upgraded to `clipboard-manager@2.0.0`
- Upgraded to `fs@2.0.0`
- Upgraded to `dialog@2.0.0`
- Upgraded to `global-shortcut@2.0.0`
- Upgraded to `http@2.0.0`
- Upgraded to `log-plugin@2.0.0`
- Upgraded to `nfc@2.0.0`
- Upgraded to `notification@2.0.0`
- Upgraded to `os@2.0.0`
- Upgraded to `process@2.0.0`
- Upgraded to `shell@2.0.0`
- Upgraded to `store@2.0.0`
- Upgraded to `updater@2.0.0`
## \[2.0.0-rc.8]
### Dependencies
- Upgraded to `cli@2.0.0-rc.2`
- Upgraded to `dialog@2.0.0-rc.8`
- Upgraded to `fs@2.0.0-rc.6`
- Upgraded to `shell@2.0.0-rc.4`
- Upgraded to `store@2.0.0-rc.4`
- Upgraded to `updater@2.0.0-rc.4`
- Upgraded to `http@2.0.0-rc.6`
## \[2.0.0-rc.7]
### Dependencies
- Upgraded to `clipboard-manager@2.0.0-rc.4`
- Upgraded to `fs@2.0.0-rc.5`
- Upgraded to `notification@2.0.0-rc.5`
- Upgraded to `dialog@2.0.0-rc.7`
- Upgraded to `http@2.0.0-rc.5`
## \[2.0.0-rc.6]
### Dependencies
- Upgraded to `dialog@2.0.0-rc.6`
- Upgraded to `fs@2.0.0-rc.4`
- Upgraded to `http@2.0.0-rc.4`
## \[2.0.0-rc.5]
### Dependencies
- Upgraded to `barcode-scanner@2.0.0-rc.4`
- Upgraded to `notification@2.0.0-rc.4`
## \[2.0.0-rc.4]
### Dependencies
- Upgraded to `fs@2.0.0-rc.3`
- Upgraded to `dialog@2.0.0-rc.5`
- Upgraded to `updater@2.0.0-rc.3`
- Upgraded to `http@2.0.0-rc.3`
## \[2.0.0-rc.3]
### Dependencies
- Upgraded to `fs@2.0.0-rc.2`
- Upgraded to `dialog@2.0.0-rc.4`
- Upgraded to `http@2.0.0-rc.2`
## \[2.0.0-rc.2]
### Dependencies
+21 -20
View File
@@ -1,7 +1,7 @@
[package]
name = "api"
publish = false
version = "2.0.0-rc.2"
version = "2.0.9"
description = "An example Tauri Application showcasing the api"
edition = "2021"
rust-version = { workspace = true }
@@ -19,22 +19,23 @@ serde_json = { workspace = true }
serde = { workspace = true }
tiny_http = "0.12"
log = { workspace = true }
tauri-plugin-log = { path = "../../../plugins/log", version = "2.0.0-rc.2" }
tauri-plugin-fs = { path = "../../../plugins/fs", version = "2.0.0-rc.1", features = [
tauri-plugin-log = { path = "../../../plugins/log", version = "2.1.0" }
tauri-plugin-fs = { path = "../../../plugins/fs", version = "2.2.0", features = [
"watch",
] }
tauri-plugin-clipboard-manager = { path = "../../../plugins/clipboard-manager", version = "2.0.0-rc.3" }
tauri-plugin-dialog = { path = "../../../plugins/dialog", version = "2.0.0-rc.3" }
tauri-plugin-clipboard-manager = { path = "../../../plugins/clipboard-manager", version = "2.1.0" }
tauri-plugin-dialog = { path = "../../../plugins/dialog", version = "2.1.0" }
tauri-plugin-http = { path = "../../../plugins/http", features = [
"multipart",
], version = "2.0.0-rc.1" }
tauri-plugin-notification = { path = "../../../plugins/notification", version = "2.0.0-rc.3", features = [
], version = "2.1.0" }
tauri-plugin-notification = { path = "../../../plugins/notification", version = "2.1.0", features = [
"windows7-compat",
] }
tauri-plugin-os = { path = "../../../plugins/os", version = "2.0.0-rc.1" }
tauri-plugin-process = { path = "../../../plugins/process", version = "2.0.0-rc.1" }
tauri-plugin-shell = { path = "../../../plugins/shell", version = "2.0.0-rc.3" }
tauri-plugin-store = { path = "../../../plugins/store", version = "2.0.0-rc.3" }
tauri-plugin-os = { path = "../../../plugins/os", version = "2.1.0" }
tauri-plugin-process = { path = "../../../plugins/process", version = "2.1.0" }
tauri-plugin-opener = { path = "../../../plugins/opener", version = "2.1.0" }
tauri-plugin-shell = { path = "../../../plugins/shell", version = "2.1.0" }
tauri-plugin-store = { path = "../../../plugins/store", version = "2.2.0" }
[dependencies.tauri]
workspace = true
@@ -50,17 +51,17 @@ features = [
]
[target."cfg(any(target_os = \"macos\", windows, target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies]
tauri-plugin-cli = { path = "../../../plugins/cli", version = "2.0.0-rc.1" }
tauri-plugin-global-shortcut = { path = "../../../plugins/global-shortcut", version = "2.0.0-rc.2" }
tauri-plugin-updater = { path = "../../../plugins/updater", version = "2.0.0-rc.2" }
tauri-plugin-cli = { path = "../../../plugins/cli", version = "2.1.0" }
tauri-plugin-global-shortcut = { path = "../../../plugins/global-shortcut", version = "2.1.0" }
tauri-plugin-updater = { path = "../../../plugins/updater", version = "2.2.0" }
tauri-plugin-window-state = { path = "../../../plugins/window-state", version = "2.0.0" }
[target."cfg(any(target_os = \"android\", target_os = \"ios\"))".dependencies]
tauri-plugin-barcode-scanner = { path = "../../../plugins/barcode-scanner/", version = "2.0.0-rc.3" }
tauri-plugin-nfc = { path = "../../../plugins/nfc", version = "2.0.0-rc.3" }
tauri-plugin-biometric = { path = "../../../plugins/biometric/", version = "2.0.0-rc.3" }
[target."cfg(target_os = \"windows\")".dependencies]
window-shadows = "0.2"
tauri-plugin-barcode-scanner = { path = "../../../plugins/barcode-scanner/", version = "2.1.0" }
tauri-plugin-nfc = { path = "../../../plugins/nfc", version = "2.1.0" }
tauri-plugin-biometric = { path = "../../../plugins/biometric/", version = "2.1.0" }
tauri-plugin-geolocation = { path = "../../../plugins/geolocation/", version = "2.1.0" }
tauri-plugin-haptics = { path = "../../../plugins/haptics/", version = "2.1.0" }
[features]
prod = ["tauri/custom-protocol"]
+10 -6
View File
@@ -1,10 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSCameraUsageDescription</key>
<string>Request camera access for WebRTC</string>
<key>NSMicrophoneUsageDescription</key>
<string>Request microphone access for WebRTC</string>
</dict>
<dict>
<key>NSCameraUsageDescription</key>
<string>Request camera access for WebRTC</string>
<key>NSMicrophoneUsageDescription</key>
<string>Request microphone access for WebRTC</string>
<key>NSFaceIDUsageDescription</key>
<string>Authenticate with biometrics</string>
<key>NFCReaderUsageDescription</key>
<string>Read and write to NFC tags for testing</string>
</dict>
</plist>
@@ -53,6 +53,7 @@
}
]
},
"shell:allow-open",
"shell:allow-kill",
"shell:allow-stdin-write",
"process:allow-exit",
@@ -79,10 +80,11 @@
],
"deny": ["$APPDATA/db/*.stronghold"]
},
"store:allow-entries",
"store:allow-get",
"store:allow-set",
"store:allow-save",
"store:allow-load"
"store:default",
"opener:default",
{
"identifier": "opener:allow-open-path",
"allow": [{ "path": "$APPDATA" }, { "path": "$APPDATA/**" }]
}
]
}
@@ -9,6 +9,8 @@
"updater:default",
"global-shortcut:allow-unregister",
"global-shortcut:allow-register",
"global-shortcut:allow-unregister-all"
"global-shortcut:allow-unregister-all",
{ "identifier": "fs:allow-watch", "allow": ["*", "**/*"] },
"fs:allow-unwatch"
]
}
@@ -11,6 +11,14 @@
"barcode-scanner:allow-scan",
"barcode-scanner:allow-cancel",
"barcode-scanner:allow-request-permissions",
"barcode-scanner:allow-check-permissions"
"barcode-scanner:allow-check-permissions",
"geolocation:allow-check-permissions",
"geolocation:allow-request-permissions",
"geolocation:allow-watch-position",
"geolocation:allow-get-current-position",
"haptics:allow-impact-feedback",
"haptics:allow-notification-feedback",
"haptics:allow-selection-feedback",
"haptics:allow-vibrate"
]
}
+4 -1
View File
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
@@ -18,7 +19,7 @@
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
<option name="modules">
<set>
<option value="$USER_HOME$/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tauri-2.0.0-rc.7/mobile/android" />
<option value="$USER_HOME$/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tauri-2.0.2/mobile/android" />
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
<option value="$PROJECT_DIR$/buildSrc" />
@@ -27,6 +28,8 @@
<option value="$PROJECT_DIR$/../../../../../plugins/clipboard-manager/android" />
<option value="$PROJECT_DIR$/../../../../../plugins/dialog/android" />
<option value="$PROJECT_DIR$/../../../../../plugins/fs/android" />
<option value="$PROJECT_DIR$/../../../../../plugins/geolocation/android" />
<option value="$PROJECT_DIR$/../../../../../plugins/haptics/android" />
<option value="$PROJECT_DIR$/../../../../../plugins/nfc/android" />
<option value="$PROJECT_DIR$/../../../../../plugins/notification/android" />
<option value="$PROJECT_DIR$/../../../../../plugins/shell/android" />
-1
View File
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objectVersion = 56;
objects = {
/* Begin PBXBuildFile section */
@@ -22,26 +22,26 @@
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
0E96CE07CD20273DD46BF325 /* main.rs */ = {isa = PBXFileReference; path = main.rs; sourceTree = "<group>"; };
1C1AB1B414CA2795AFBEDDB9 /* tray.rs */ = {isa = PBXFileReference; path = tray.rs; sourceTree = "<group>"; };
0E96CE07CD20273DD46BF325 /* main.rs */ = {isa = PBXFileReference; lastKnownFileType = text; path = main.rs; sourceTree = "<group>"; };
1C1AB1B414CA2795AFBEDDB9 /* tray.rs */ = {isa = PBXFileReference; lastKnownFileType = text; path = tray.rs; sourceTree = "<group>"; };
248286BAA086BB1A5F98B2B2 /* libapp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libapp.a; sourceTree = "<group>"; };
2F63E2AA460089BB58D40C79 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
338E66700FD330B99D434DD7 /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; };
384966E551417F94A02D2706 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
4B2D1B108AE002010BDEC6D2 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
59CFE20DCF760BE67D9CE3D6 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
5AC703CEBA41A121596066F3 /* api_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = api_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
5AC703CEBA41A121596066F3 /* Tauri API.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Tauri API.app"; sourceTree = BUILT_PRODUCTS_DIR; };
62601E25FA39E62BE119B74D /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
6B7E79E23E646BA7968B457C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
71EB788DE4662CFC0D97F567 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
74A8FDFB350B966F5AAD4A24 /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; path = assets; sourceTree = SOURCE_ROOT; };
785D025E9542F7E098BF22B5 /* lib.rs */ = {isa = PBXFileReference; path = lib.rs; sourceTree = "<group>"; };
785D025E9542F7E098BF22B5 /* lib.rs */ = {isa = PBXFileReference; lastKnownFileType = text; path = lib.rs; sourceTree = "<group>"; };
879941AE3DAA14534BBC6391 /* api_iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = api_iOS.entitlements; sourceTree = "<group>"; };
90D3B673AFAB8D8AB561F616 /* main.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = "<group>"; };
B6082E363D51372A7658C351 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
DC377692DC31A070A0188C9D /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
EC8C7948C50C3C9B5D96CB61 /* bindings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bindings.h; sourceTree = "<group>"; };
F835F52713CE8F029D5D252C /* cmd.rs */ = {isa = PBXFileReference; path = cmd.rs; sourceTree = "<group>"; };
F835F52713CE8F029D5D252C /* cmd.rs */ = {isa = PBXFileReference; lastKnownFileType = text; path = cmd.rs; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -104,7 +104,7 @@
4AC51E67B71E27F15B02C5CD /* Products */ = {
isa = PBXGroup;
children = (
5AC703CEBA41A121596066F3 /* api_iOS.app */,
5AC703CEBA41A121596066F3 /* Tauri API.app */,
);
name = Products;
sourceTree = "<group>";
@@ -172,7 +172,7 @@
);
name = api_iOS;
productName = api_iOS;
productReference = 5AC703CEBA41A121596066F3 /* api_iOS.app */;
productReference = 5AC703CEBA41A121596066F3 /* Tauri API.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
@@ -386,6 +386,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = api_iOS/api_iOS.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = Q93MBH6S2F;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphoneos*]" = "arm64-sim x86_64";
@@ -395,19 +396,37 @@
"\".\"",
);
INFOPLIST_FILE = api_iOS/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
"LIBRARY_SEARCH_PATHS[arch=arm64-sim]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64-sim/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
"LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
"LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
"LIBRARY_SEARCH_PATHS[arch=arm64-sim]" = (
"$(inherited)",
"$(PROJECT_DIR)/Externals/arm64-sim/$(CONFIGURATION)",
"$(SDKROOT)/usr/lib/swift",
"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)",
);
"LIBRARY_SEARCH_PATHS[arch=arm64]" = (
"$(inherited)",
"$(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION)",
"$(SDKROOT)/usr/lib/swift",
"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)",
);
"LIBRARY_SEARCH_PATHS[arch=x86_64]" = (
"$(inherited)",
"$(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION)",
"$(SDKROOT)/usr/lib/swift",
"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)",
);
PRODUCT_BUNDLE_IDENTIFIER = com.tauri.api;
PRODUCT_NAME = "Tauri API";
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALID_ARCHS = "arm64 arm64-sim";
CODE_SIGN_STYLE = Automatic;
};
name = debug;
};
@@ -422,6 +441,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = api_iOS/api_iOS.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = Q93MBH6S2F;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphoneos*]" = "arm64-sim x86_64";
@@ -431,19 +451,37 @@
"\".\"",
);
INFOPLIST_FILE = api_iOS/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
"LIBRARY_SEARCH_PATHS[arch=arm64-sim]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64-sim/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
"LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
"LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
"LIBRARY_SEARCH_PATHS[arch=arm64-sim]" = (
"$(inherited)",
"$(PROJECT_DIR)/Externals/arm64-sim/$(CONFIGURATION)",
"$(SDKROOT)/usr/lib/swift",
"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)",
);
"LIBRARY_SEARCH_PATHS[arch=arm64]" = (
"$(inherited)",
"$(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION)",
"$(SDKROOT)/usr/lib/swift",
"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)",
);
"LIBRARY_SEARCH_PATHS[arch=x86_64]" = (
"$(inherited)",
"$(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION)",
"$(SDKROOT)/usr/lib/swift",
"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)",
);
PRODUCT_BUNDLE_IDENTIFIER = com.tauri.api;
PRODUCT_NAME = "Tauri API";
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALID_ARCHS = "arm64 arm64-sim";
CODE_SIGN_STYLE = Automatic;
};
name = release;
};
@@ -40,9 +40,13 @@
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>NSFaceIDUsageDescription</key>
<string>Authenticate with biometrics</string>
<key>NSCameraUsageDescription</key>
<string>Request camera access for WebRTC</string>
<key>NSMicrophoneUsageDescription</key>
<string>Request microphone access for WebRTC</string>
<key>NFCReaderUsageDescription</key>
<string>Read and write to NFC tags for testing</string>
</dict>
</plist>
@@ -1,5 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
<dict>
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>TAG</string>
</array>
</dict>
</plist>
+3 -3
View File
@@ -2,7 +2,7 @@ name: api
options:
bundleIdPrefix: com.tauri.api
deploymentTarget:
iOS: 13.0
iOS: 14.0
fileGroups: [../../src]
configs:
debug: debug
@@ -64,7 +64,7 @@ targets:
base:
ENABLE_BITCODE: false
ARCHS: [arm64, arm64-sim]
VALID_ARCHS: arm64 arm64-sim
VALID_ARCHS: arm64 arm64-sim
LIBRARY_SEARCH_PATHS[arch=x86_64]: $(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)
LIBRARY_SEARCH_PATHS[arch=arm64]: $(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)
LIBRARY_SEARCH_PATHS[arch=arm64-sim]: $(inherited) $(PROJECT_DIR)/Externals/arm64-sim/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)
@@ -89,4 +89,4 @@ targets:
outputFiles:
- $(SRCROOT)/Externals/x86_64/${CONFIGURATION}/libapp.a
- $(SRCROOT)/Externals/arm64/${CONFIGURATION}/libapp.a
- $(SRCROOT)/Externals/arm64-sim/${CONFIGURATION}/libapp.a
- $(SRCROOT)/Externals/arm64-sim/${CONFIGURATION}/libapp.a
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+6 -1
View File
@@ -36,6 +36,7 @@ pub fn run() {
.plugin(tauri_plugin_notification::init())
.plugin(tauri_plugin_os::init())
.plugin(tauri_plugin_process::init())
.plugin(tauri_plugin_opener::init())
.plugin(tauri_plugin_shell::init())
.plugin(tauri_plugin_store::Builder::default().build())
.setup(move |app| {
@@ -45,6 +46,8 @@ pub fn run() {
app.handle().plugin(tauri_plugin_cli::init())?;
app.handle()
.plugin(tauri_plugin_global_shortcut::Builder::new().build())?;
app.handle()
.plugin(tauri_plugin_window_state::Builder::new().build())?;
app.handle()
.plugin(tauri_plugin_updater::Builder::new().build())?;
}
@@ -53,6 +56,8 @@ pub fn run() {
app.handle().plugin(tauri_plugin_barcode_scanner::init())?;
app.handle().plugin(tauri_plugin_nfc::init())?;
app.handle().plugin(tauri_plugin_biometric::init())?;
app.handle().plugin(tauri_plugin_geolocation::init())?;
app.handle().plugin(tauri_plugin_haptics::init())?;
}
let mut webview_window_builder =
@@ -64,7 +69,7 @@ pub fn run() {
.title("Tauri API Validation")
.inner_size(1000., 800.)
.min_inner_size(600., 400.)
.content_protected(true);
.visible(false);
}
#[cfg(target_os = "windows")]
+4 -1
View File
@@ -1,5 +1,5 @@
{
"$schema": "../node_modules/@tauri-apps/cli/schema.json",
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
"productName": "Tauri API",
"version": "2.0.0",
"identifier": "com.tauri.api",
@@ -100,6 +100,9 @@
}
}
}
},
"iOS": {
"minimumSystemVersion": "14.0"
}
}
}
+222 -205
View File
@@ -1,206 +1,222 @@
<script>
import { writable } from "svelte/store";
import { open } from "@tauri-apps/plugin-shell";
import { getCurrentWindow } from "@tauri-apps/api/window";
import { getCurrentWebview } from "@tauri-apps/api/webview";
import * as os from "@tauri-apps/plugin-os";
import { writable } from 'svelte/store'
import { getCurrentWindow } from '@tauri-apps/api/window'
import { getCurrentWebview } from '@tauri-apps/api/webview'
import * as os from '@tauri-apps/plugin-os'
import Welcome from "./views/Welcome.svelte";
import Cli from "./views/Cli.svelte";
import Communication from "./views/Communication.svelte";
import Dialog from "./views/Dialog.svelte";
import FileSystem from "./views/FileSystem.svelte";
import Http from "./views/Http.svelte";
import Notifications from "./views/Notifications.svelte";
import Shortcuts from "./views/Shortcuts.svelte";
import Shell from "./views/Shell.svelte";
import Store from "./views/Store.svelte";
import Updater from "./views/Updater.svelte";
import Clipboard from "./views/Clipboard.svelte";
import WebRTC from "./views/WebRTC.svelte";
import Scanner from "./views/Scanner.svelte";
import Biometric from "./views/Biometric.svelte";
import Welcome from './views/Welcome.svelte'
import Cli from './views/Cli.svelte'
import Communication from './views/Communication.svelte'
import Dialog from './views/Dialog.svelte'
import FileSystem from './views/FileSystem.svelte'
import Http from './views/Http.svelte'
import Notifications from './views/Notifications.svelte'
import Shortcuts from './views/Shortcuts.svelte'
import Shell from './views/Shell.svelte'
import Opener from './views/Opener.svelte'
import Store from './views/Store.svelte'
import Updater from './views/Updater.svelte'
import Clipboard from './views/Clipboard.svelte'
import WebRTC from './views/WebRTC.svelte'
import Scanner from './views/Scanner.svelte'
import Biometric from './views/Biometric.svelte'
import Geolocation from './views/Geolocation.svelte'
import Haptics from './views/Haptics.svelte'
import { onMount, tick } from "svelte";
import { ask } from "@tauri-apps/plugin-dialog";
import Nfc from "./views/Nfc.svelte";
import { onMount, tick } from 'svelte'
import { ask } from '@tauri-apps/plugin-dialog'
import Nfc from './views/Nfc.svelte'
const appWindow = getCurrentWindow();
const appWindow = getCurrentWindow()
if (appWindow.label !== "main") {
if (appWindow.label !== 'main') {
appWindow.onCloseRequested(async (event) => {
const confirmed = await confirm("Are you sure?");
const confirmed = await confirm('Are you sure?')
if (!confirmed) {
// user did not confirm closing the window; let's prevent it
event.preventDefault();
event.preventDefault()
}
});
})
}
getCurrentWebview().onDragDropEvent((event) => {
onMessage(`File drop: ${JSON.stringify(event.payload)}`);
});
onMessage(`File drop: ${JSON.stringify(event.payload)}`)
})
const userAgent = navigator.userAgent.toLowerCase();
const isMobile =
userAgent.includes("android") || userAgent.includes("iphone");
const userAgent = navigator.userAgent.toLowerCase()
const isMobile = userAgent.includes('android') || userAgent.includes('iphone')
const views = [
{
label: "Welcome",
label: 'Welcome',
component: Welcome,
icon: "i-ph-hand-waving",
icon: 'i-ph-hand-waving'
},
{
label: "Communication",
label: 'Communication',
component: Communication,
icon: "i-codicon-radio-tower",
icon: 'i-codicon-radio-tower'
},
!isMobile && {
label: "CLI",
label: 'CLI',
component: Cli,
icon: "i-codicon-terminal",
icon: 'i-codicon-terminal'
},
{
label: "Dialog",
label: 'Dialog',
component: Dialog,
icon: "i-codicon-multiple-windows",
icon: 'i-codicon-multiple-windows'
},
{
label: "File system",
label: 'File system',
component: FileSystem,
icon: "i-codicon-files",
icon: 'i-codicon-files'
},
{
label: "HTTP",
label: 'HTTP',
component: Http,
icon: "i-ph-globe-hemisphere-west",
icon: 'i-ph-globe-hemisphere-west'
},
{
label: "Notifications",
label: 'Notifications',
component: Notifications,
icon: "i-codicon-bell-dot",
icon: 'i-codicon-bell-dot'
},
!isMobile && {
label: "Shortcuts",
label: 'Shortcuts',
component: Shortcuts,
icon: "i-codicon-record-keys",
icon: 'i-codicon-record-keys'
},
{
label: "Shell",
label: 'Shell',
component: Shell,
icon: "i-codicon-terminal-bash",
icon: 'i-codicon-terminal-bash'
},
{
label: "Store",
label: 'Opener',
component: Opener,
icon: 'i-codicon-link-external'
},
{
label: 'Store',
component: Store,
icon: "i-codicon-file-code",
icon: 'i-codicon-file-code'
},
!isMobile && {
label: "Updater",
label: 'Updater',
component: Updater,
icon: "i-codicon-cloud-download",
icon: 'i-codicon-cloud-download'
},
{
label: "Clipboard",
label: 'Clipboard',
component: Clipboard,
icon: "i-codicon-clippy",
icon: 'i-codicon-clippy'
},
{
label: "WebRTC",
label: 'WebRTC',
component: WebRTC,
icon: "i-ph-broadcast",
icon: 'i-ph-broadcast'
},
isMobile && {
label: "Scanner",
label: 'Scanner',
component: Scanner,
icon: "i-ph-scan",
icon: 'i-ph-scan'
},
isMobile && {
label: "NFC",
label: 'NFC',
component: Nfc,
icon: "i-ph-nfc",
icon: 'i-ph-nfc'
},
isMobile && {
label: "Biometric",
label: 'Biometric',
component: Biometric,
icon: "i-ph-scan",
icon: 'i-ph-scan'
},
];
isMobile && {
label: 'Geolocation',
component: Geolocation,
icon: 'i-ph-map-pin'
},
isMobile && {
label: 'Haptics',
component: Haptics,
icon: 'i-ph-vibrate'
}
]
let selected = views[0];
let selected = views[0]
function select(view) {
selected = view;
selected = view
}
// Window controls
let isWindowMaximized;
let isWindowMaximized
onMount(async () => {
isWindowMaximized = await appWindow.isMaximized();
isWindowMaximized = await appWindow.isMaximized()
appWindow.onResized(async () => {
isWindowMaximized = await appWindow.isMaximized();
});
});
isWindowMaximized = await appWindow.isMaximized()
})
})
function minimize() {
appWindow.minimize();
appWindow.minimize()
}
async function toggleMaximize() {
(await appWindow.isMaximized())
;(await appWindow.isMaximized())
? appWindow.unmaximize()
: appWindow.maximize();
: appWindow.maximize()
}
let confirmed_close = false;
let confirmed_close = false
async function close() {
if (!confirmed_close) {
confirmed_close = await ask(
"Are you sure that you want to close this window?",
'Are you sure that you want to close this window?',
{
title: "Tauri API",
title: 'Tauri API'
}
);
)
if (confirmed_close) {
appWindow.close();
appWindow.close()
}
}
}
// dark/light
let isDark;
let isDark
onMount(() => {
isDark = localStorage && localStorage.getItem("theme") == "dark";
applyTheme(isDark);
});
isDark = localStorage && localStorage.getItem('theme') == 'dark'
applyTheme(isDark)
})
function applyTheme(isDark) {
const html = document.querySelector("html");
isDark ? html.classList.add("dark") : html.classList.remove("dark");
localStorage && localStorage.setItem("theme", isDark ? "dark" : "");
const html = document.querySelector('html')
isDark ? html.classList.add('dark') : html.classList.remove('dark')
localStorage && localStorage.setItem('theme', isDark ? 'dark' : '')
}
function toggleDark() {
isDark = !isDark;
applyTheme(isDark);
isDark = !isDark
applyTheme(isDark)
}
// Console
let messages = writable([]);
let consoleTextEl;
let messages = writable([])
let consoleTextEl
async function onMessage(value) {
messages.update((r) => [
...r,
{
html:
`<pre><strong class="text-accent dark:text-darkAccent">[${new Date().toLocaleTimeString()}]:</strong> ` +
(typeof value === "string" ? value : JSON.stringify(value, null, 1)) +
"</pre>",
},
]);
await tick();
if (consoleTextEl) consoleTextEl.scrollTop = consoleTextEl.scrollHeight;
(typeof value === 'string' ? value : JSON.stringify(value, null, 1)) +
'</pre>'
}
])
await tick()
if (consoleTextEl) consoleTextEl.scrollTop = consoleTextEl.scrollHeight
}
// this function is renders HTML without sanitizing it so it's insecure
// this function renders HTML without sanitizing it so it's insecure
// we only use it with our own input data
async function insecureRenderHtml(html) {
messages.update((r) => [
@@ -209,111 +225,109 @@
html:
`<pre><strong class="text-accent dark:text-darkAccent">[${new Date().toLocaleTimeString()}]:</strong> ` +
html +
"</pre>",
},
]);
await tick();
if (consoleTextEl) consoleTextEl.scrollTop = consoleTextEl.scrollHeight;
'</pre>'
}
])
await tick()
if (consoleTextEl) consoleTextEl.scrollTop = consoleTextEl.scrollHeight
}
function clear() {
messages.update(() => []);
messages.update(() => [])
}
let consoleEl, consoleH, cStartY;
let minConsoleHeight = 50;
let consoleEl, consoleH, cStartY
let minConsoleHeight = 50
function startResizingConsole(e) {
cStartY = e.clientY;
cStartY = e.clientY
const styles = window.getComputedStyle(consoleEl);
consoleH = parseInt(styles.height, 10);
const styles = window.getComputedStyle(consoleEl)
consoleH = parseInt(styles.height, 10)
const moveHandler = (e) => {
const dy = e.clientY - cStartY;
const newH = consoleH - dy;
const dy = e.clientY - cStartY
const newH = consoleH - dy
consoleEl.style.height = `${
newH < minConsoleHeight ? minConsoleHeight : newH
}px`;
};
}px`
}
const upHandler = () => {
document.removeEventListener("mouseup", upHandler);
document.removeEventListener("mousemove", moveHandler);
};
document.addEventListener("mouseup", upHandler);
document.addEventListener("mousemove", moveHandler);
document.removeEventListener('mouseup', upHandler)
document.removeEventListener('mousemove', moveHandler)
}
document.addEventListener('mouseup', upHandler)
document.addEventListener('mousemove', moveHandler)
}
let isWindows;
let isWindows
onMount(async () => {
isWindows = (await os.platform()) === "windows";
});
isWindows = (await os.platform()) === 'windows'
})
// mobile
let isSideBarOpen = false;
let sidebar;
let sidebarToggle;
let isDraggingSideBar = false;
let draggingStartPosX = 0;
let draggingEndPosX = 0;
const clamp = (min, num, max) => Math.min(Math.max(num, min), max);
let isSideBarOpen = false
let sidebar
let sidebarToggle
let isDraggingSideBar = false
let draggingStartPosX = 0
let draggingEndPosX = 0
const clamp = (min, num, max) => Math.min(Math.max(num, min), max)
function toggleSidebar(sidebar, isSideBarOpen) {
sidebar.style.setProperty(
"--translate-x",
`${isSideBarOpen ? "0" : "-18.75"}rem`
);
'--translate-x',
`${isSideBarOpen ? '0' : '-18.75'}rem`
)
}
onMount(() => {
sidebar = document.querySelector("#sidebar");
sidebarToggle = document.querySelector("#sidebarToggle");
sidebar = document.querySelector('#sidebar')
sidebarToggle = document.querySelector('#sidebarToggle')
document.addEventListener("click", (e) => {
document.addEventListener('click', (e) => {
if (sidebarToggle.contains(e.target)) {
isSideBarOpen = !isSideBarOpen;
isSideBarOpen = !isSideBarOpen
} else if (isSideBarOpen && !sidebar.contains(e.target)) {
isSideBarOpen = false;
isSideBarOpen = false
}
});
})
document.addEventListener("touchstart", (e) => {
if (sidebarToggle.contains(e.target)) return;
document.addEventListener('touchstart', (e) => {
if (sidebarToggle.contains(e.target)) return
const x = e.touches[0].clientX;
const x = e.touches[0].clientX
if ((0 < x && x < 20 && !isSideBarOpen) || isSideBarOpen) {
isDraggingSideBar = true;
draggingStartPosX = x;
isDraggingSideBar = true
draggingStartPosX = x
}
});
})
document.addEventListener("touchmove", (e) => {
document.addEventListener('touchmove', (e) => {
if (isDraggingSideBar) {
const x = e.touches[0].clientX;
draggingEndPosX = x;
const delta = (x - draggingStartPosX) / 10;
const x = e.touches[0].clientX
draggingEndPosX = x
const delta = (x - draggingStartPosX) / 10
sidebar.style.setProperty(
"--translate-x",
'--translate-x',
`-${clamp(0, isSideBarOpen ? 0 - delta : 18.75 - delta, 18.75)}rem`
);
)
}
});
})
document.addEventListener("touchend", () => {
document.addEventListener('touchend', () => {
if (isDraggingSideBar) {
const delta = (draggingEndPosX - draggingStartPosX) / 10;
isSideBarOpen = isSideBarOpen
? delta > -(18.75 / 2)
: delta > 18.75 / 2;
const delta = (draggingEndPosX - draggingStartPosX) / 10
isSideBarOpen = isSideBarOpen ? delta > -(18.75 / 2) : delta > 18.75 / 2
}
isDraggingSideBar = false;
});
});
isDraggingSideBar = false
})
})
$: {
const sidebar = document.querySelector("#sidebar");
const sidebar = document.querySelector('#sidebar')
if (sidebar) {
toggleSidebar(sidebar, isSideBarOpen);
toggleSidebar(sidebar, isSideBarOpen)
}
}
</script>
@@ -331,42 +345,46 @@
children:h-100% children:w-12 children:inline-flex
children:items-center children:justify-center"
>
<span
title={isDark ? "Switch to Light mode" : "Switch to Dark mode"}
class="hover:bg-hoverOverlay active:bg-hoverOverlayDarker dark:hover:bg-darkHoverOverlay dark:active:bg-darkHoverOverlayDarker"
<button
aria-label="Toggle dark mode"
title={isDark ? 'Switch to Light mode' : 'Switch to Dark mode'}
class="bg-inherit border-none hover:bg-hoverOverlay active:bg-hoverOverlayDarker dark:hover:bg-darkHoverOverlay dark:active:bg-darkHoverOverlayDarker"
on:click={toggleDark}
>
{#if isDark}
<div class="i-ph-sun" />
<div class="i-ph-sun"></div>
{:else}
<div class="i-ph-moon" />
<div class="i-ph-moon"></div>
{/if}
</span>
<span
</button>
<button
aria-label="Minimize window"
title="Minimize"
class="hover:bg-hoverOverlay active:bg-hoverOverlayDarker dark:hover:bg-darkHoverOverlay dark:active:bg-darkHoverOverlayDarker"
class="bg-inherit border-none hover:bg-hoverOverlay active:bg-hoverOverlayDarker dark:hover:bg-darkHoverOverlay dark:active:bg-darkHoverOverlayDarker"
on:click={minimize}
>
<div class="i-codicon-chrome-minimize" />
</span>
<span
title={isWindowMaximized ? "Restore" : "Maximize"}
class="hover:bg-hoverOverlay active:bg-hoverOverlayDarker dark:hover:bg-darkHoverOverlay dark:active:bg-darkHoverOverlayDarker"
<div class="i-codicon-chrome-minimize"></div>
</button>
<button
aria-label="Maximize window"
title={isWindowMaximized ? 'Restore' : 'Maximize'}
class="bg-inherit border-none hover:bg-hoverOverlay active:bg-hoverOverlayDarker dark:hover:bg-darkHoverOverlay dark:active:bg-darkHoverOverlayDarker"
on:click={toggleMaximize}
>
{#if isWindowMaximized}
<div class="i-codicon-chrome-restore" />
<div class="i-codicon-chrome-restore"></div>
{:else}
<div class="i-codicon-chrome-maximize" />
<div class="i-codicon-chrome-maximize"></div>
{/if}
</span>
<span
</button>
<button
aria-label="Close window"
title="Close"
class="hover:bg-red-700 dark:hover:bg-red-700 hover:text-darkPrimaryText active:bg-red-700/90 dark:active:bg-red-700/90 active:text-darkPrimaryText"
class="bg-inherit border-none hover:bg-red-700 dark:hover:bg-red-700 hover:text-darkPrimaryText active:bg-red-700/90 dark:active:bg-red-700/90 active:text-darkPrimaryText"
on:click={close}
>
<div class="i-codicon-chrome-close" />
</span>
<div class="i-codicon-chrome-close"></div>
</button>
</span>
</div>
{/if}
@@ -374,13 +392,13 @@
<!-- Sidebar toggle, only visible on small screens -->
<div
id="sidebarToggle"
class="z-2000 sidebar-toggle display-none lt-sm:flex justify-center absolute items-center w-8 h-8 rd-8
class="z-2000 sidebar-toggle hidden lt-sm:flex justify-center absolute items-center w-8 h-8 rd-8
bg-accent dark:bg-darkAccent active:bg-accentDark dark:active:bg-darkAccentDark"
>
{#if isSideBarOpen}
<span class="i-codicon-close animate-duration-300ms animate-fade-in" />
<span class="i-codicon-close animate-duration-300ms animate-fade-in"></span>
{:else}
<span class="i-codicon-menu animate-duration-300ms animate-fade-in" />
<span class="i-codicon-menu animate-duration-300ms animate-fade-in"></span>
{/if}
</div>
@@ -392,24 +410,21 @@
class="lt-sm:h-screen lt-sm:shadow-lg lt-sm:shadow lt-sm:transition-transform lt-sm:absolute lt-sm:z-1999
bg-darkPrimaryLighter transition-colors-250 overflow-hidden grid select-none px-2"
>
<img
on:click={() => open("https://tauri.app/")}
class="self-center p-7 cursor-pointer"
src="tauri_logo.png"
alt="Tauri logo"
/>
<a href="https://tauri.app" target="_blank">
<img class="p-7" src="tauri_logo.png" alt="Tauri logo" />
</a>
{#if !isWindows}
<a href="##" class="nv justify-between h-8" on:click={toggleDark}>
{#if isDark}
Switch to Light mode
<div class="i-ph-sun" />
<div class="i-ph-sun"></div>
{:else}
Switch to Dark mode
<div class="i-ph-moon" />
<div class="i-ph-moon"></div>
{/if}
</a>
<br />
<div class="bg-white/5 h-2px" />
<div class="bg-white/5 h-2px"></div>
<br />
{/if}
@@ -419,7 +434,7 @@
href="https://tauri.app/v1/guides/"
>
Documentation
<span class="i-codicon-link-external" />
<span class="i-codicon-link-external"></span>
</a>
<a
class="nv justify-between h-8"
@@ -427,7 +442,7 @@
href="https://github.com/tauri-apps/tauri"
>
GitHub
<span class="i-codicon-link-external" />
<span class="i-codicon-link-external"></span>
</a>
<a
class="nv justify-between h-8"
@@ -435,10 +450,10 @@
href="https://github.com/tauri-apps/tauri/tree/dev/examples/api"
>
Source
<span class="i-codicon-link-external" />
<span class="i-codicon-link-external"></span>
</a>
<br />
<div class="bg-white/5 h-2px" />
<div class="bg-white/5 h-2px"></div>
<br />
<div
class="flex flex-col overflow-y-auto children-h-10 children-flex-none gap-1"
@@ -449,11 +464,11 @@
href="##"
class="nv {selected === view ? 'nv_selected' : ''}"
on:click={() => {
select(view);
isSideBarOpen = false;
select(view)
isSideBarOpen = false
}}
>
<div class="{view.icon} mr-2" />
<div class="{view.icon} mr-2"></div>
<p>{view.label}</p></a
>
{/if}
@@ -482,21 +497,23 @@
id="console"
class="select-none h-15rem grid grid-rows-[2px_2rem_1fr] gap-1 overflow-hidden"
>
<!-- svelte-ignore a11y_no_static_element_interactions -->
<div
on:mousedown={startResizingConsole}
class="bg-black/20 h-2px cursor-ns-resize"
/>
></div>
<div class="flex justify-between items-center px-2">
<p class="font-semibold">Console</p>
<div
class="cursor-pointer h-85% rd-1 p-1 flex justify-center items-center
<button
aria-label="Clear Console"
class="cursor-pointer h-85% rd-1 p-1 flex justify-center items-center border-none bg-inherit
hover:bg-hoverOverlay dark:hover:bg-darkHoverOverlay
active:bg-hoverOverlay/25 dark:active:bg-darkHoverOverlay/25
"
on:click={clear}
>
<div class="i-codicon-clear-all" />
</div>
<div class="i-codicon-clear-all"></div>
</button>
</div>
<div
bind:this={consoleTextEl}
+1 -1
View File
@@ -5,7 +5,7 @@
* {
box-sizing: border-box;
font-family: "Rubik", sans-serif;
font-family: 'Rubik', sans-serif;
}
::-webkit-scrollbar {
+7 -7
View File
@@ -4,12 +4,12 @@
export function arrayBufferToBase64(buffer, callback) {
const blob = new Blob([buffer], {
type: "application/octet-binary",
});
const reader = new FileReader();
type: 'application/octet-binary'
})
const reader = new FileReader()
reader.onload = function (evt) {
const dataurl = evt.target.result;
callback(dataurl.substr(dataurl.indexOf(",") + 1));
};
reader.readAsDataURL(blob);
const dataurl = evt.target.result
callback(dataurl.substr(dataurl.indexOf(',') + 1))
}
reader.readAsDataURL(blob)
}
+8 -7
View File
@@ -2,12 +2,13 @@
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
import "uno.css";
import "./app.css";
import App from "./App.svelte";
import 'uno.css'
import './app.css'
import App from './App.svelte'
import { mount } from 'svelte'
const app = new App({
target: document.querySelector("#app"),
});
const app = mount(App, {
target: document.querySelector('#app')
})
export default app;
export default app
+5 -5
View File
@@ -1,14 +1,14 @@
<script>
import { getMatches } from "@tauri-apps/plugin-cli";
import { getMatches } from '@tauri-apps/plugin-cli'
export let onMessage;
export let onMessage
function cliMatches() {
getMatches().then(onMessage).catch(onMessage);
getMatches().then(onMessage).catch(onMessage)
}
</script>
<p>
<div>
This binary can be run from the terminal and takes the following arguments:
<code class="code-block flex flex-wrap my-2">
<pre>
@@ -17,7 +17,7 @@
--verbose</pre>
</code>
Additionally, it has a <code>update --background</code> subcommand.
</p>
</div>
<br />
<div class="note">
Note that the arguments are only parsed, not implemented.
+28 -29
View File
@@ -1,59 +1,59 @@
<script>
import * as clipboard from "@tauri-apps/plugin-clipboard-manager";
import { open } from "@tauri-apps/plugin-dialog";
import { arrayBufferToBase64 } from "../lib/utils";
import { readFile } from "@tauri-apps/plugin-fs";
import * as clipboard from '@tauri-apps/plugin-clipboard-manager'
import { open } from '@tauri-apps/plugin-dialog'
import { arrayBufferToBase64 } from '../lib/utils'
import { readFile } from '@tauri-apps/plugin-fs'
export let onMessage;
export let insecureRenderHtml;
let text = "clipboard message";
export let onMessage
export let insecureRenderHtml
let text = 'clipboard message'
function writeText() {
clipboard
.writeText(text)
.then(() => {
onMessage("Wrote to the clipboard");
onMessage('Wrote to the clipboard')
})
.catch(onMessage);
.catch(onMessage)
}
async function writeImage() {
try {
const res = await open({
title: "Image to write to clipboard",
const path = await open({
title: 'Image to write to clipboard',
filters: [
{
name: "Clipboard IMG",
extensions: ["png", "jpg", "jpeg"],
},
],
});
const bytes = await readFile(res.path);
await clipboard.writeImage(bytes);
onMessage("wrote image");
name: 'Clipboard IMG',
extensions: ['png', 'jpg', 'jpeg']
}
]
})
const bytes = await readFile(path)
await clipboard.writeImage(bytes)
onMessage('wrote image')
} catch (e) {
onMessage(e);
onMessage(e)
}
}
async function read() {
try {
const image = await clipboard.readImage();
const image = await clipboard.readImage()
arrayBufferToBase64(await image.rgba(), function (base64) {
const src = "data:image/png;base64," + base64;
insecureRenderHtml('<img src="' + src + '"></img>');
});
return;
const src = 'data:image/png;base64,' + base64
insecureRenderHtml('<img src="' + src + '"></img>')
})
return
} catch (_) {}
clipboard
.readText()
.then((contents) => {
onMessage(`Clipboard contents: ${contents}`);
onMessage(`Clipboard contents: ${contents}`)
})
.catch((e) => {
onMessage(e);
});
onMessage(e)
})
}
</script>
@@ -65,6 +65,5 @@
/>
<button class="btn" type="button" on:click={writeText}>Write</button>
<button class="btn" type="button" on:click={writeImage}>Pick Image</button>
<button class="btn" type="button" on:click={read}>Read</button>
</div>
+29
View File
@@ -0,0 +1,29 @@
<script>
import {
checkPermissions,
requestPermissions,
getCurrentPosition
} from '@tauri-apps/plugin-geolocation'
export let onMessage
async function getPosition() {
let permissions = await checkPermissions()
if (
permissions.location === 'prompt' ||
permissions.location === 'prompt-with-rationale'
) {
permissions = await requestPermissions(['location'])
}
if (permissions.location === 'granted') {
getCurrentPosition().then(onMessage).catch(onMessage)
} else {
onMessage('permission denied')
}
}
</script>
<button class="btn" id="cli-matches" on:click={getPosition}>
Get Position
</button>
+46
View File
@@ -0,0 +1,46 @@
<script>
import {
vibrate,
impactFeedback,
notificationFeedback,
selectionFeedback
} from '@tauri-apps/plugin-haptics'
export let onMessage
</script>
<div>
<button
class="btn"
on:click={() => vibrate(300).then(onMessage).catch(onMessage)}
>vibrate short</button
>
<button
class="btn"
on:click={() => vibrate(1500).then(onMessage).catch(onMessage)}
>vibrate long</button
>
<button
class="btn"
on:click={() => impactFeedback('medium').then(onMessage).catch(onMessage)}
>impact medium</button
>
<button
class="btn"
on:click={() =>
notificationFeedback('warning').then(onMessage).catch(onMessage)}
>notification warning</button
>
<button
class="btn"
on:click={() => selectionFeedback().then(onMessage).catch(onMessage)}
>selection</button
>
</div>
<br />
<p>
Depending on your device settings for haptic feedback some of the buttons may
not work.
</p>
+35 -35
View File
@@ -1,69 +1,69 @@
<script>
import { fetch as tauriFetch } from "@tauri-apps/plugin-http";
import { JsonView } from "@zerodevx/svelte-json-view";
import { fetch as tauriFetch } from '@tauri-apps/plugin-http'
import { JsonView } from '@zerodevx/svelte-json-view'
let httpMethod = "GET";
let httpBody = "";
let httpMethod = 'GET'
let httpBody = ''
export let onMessage;
export let onMessage
async function makeHttpRequest() {
let method = httpMethod || "GET";
let method = httpMethod || 'GET'
const options = {
method: method || "GET",
headers: {},
};
method: method || 'GET',
headers: {}
}
let bodyType;
let bodyType
if (method !== "GET") {
options.body = httpBody;
if (method !== 'GET') {
options.body = httpBody
if (
(httpBody.startsWith("{") && httpBody.endsWith("}")) ||
(httpBody.startsWith("[") && httpBody.endsWith("]"))
(httpBody.startsWith('{') && httpBody.endsWith('}')) ||
(httpBody.startsWith('[') && httpBody.endsWith(']'))
) {
options.headers["Content-Type"] = "application/json";
bodyType = "json";
} else if (httpBody !== "") {
bodyType = "text";
options.headers['Content-Type'] = 'application/json'
bodyType = 'json'
} else if (httpBody !== '') {
bodyType = 'text'
}
}
const response = await tauriFetch("http://localhost:3003", options);
const response = await tauriFetch('http://localhost:3003', options)
const body =
bodyType === "json" ? await response.json() : await response.text();
bodyType === 'json' ? await response.json() : await response.text()
onMessage({
url: response.url,
status: response.status,
ok: response.ok,
headers: Object.fromEntries(response.headers.entries()),
body,
});
body
})
}
/// http form
let foo = "baz";
let bar = "qux";
let result = null;
let foo = 'baz'
let bar = 'qux'
let result = null
async function doPost() {
const form = new FormData();
form.append("foo", foo);
form.append("bar", bar);
const response = await tauriFetch("http://localhost:3003/tauri", {
method: "POST",
body: form,
});
const form = new FormData()
form.append('foo', foo)
form.append('bar', bar)
const response = await tauriFetch('http://localhost:3003/tauri', {
method: 'POST',
body: form
})
result = {
url: response.url,
status: response.status,
ok: response.ok,
headers: Object.fromEntries(response.headers.entries()),
body: await response.text(),
};
body: await response.text()
}
}
</script>
@@ -82,7 +82,7 @@
placeholder="Request body"
rows="5"
bind:value={httpBody}
/>
></textarea>
<br />
<button class="btn" id="make-request"> Make request </button>
</form>
+66
View File
@@ -0,0 +1,66 @@
<script>
import * as opener from '@tauri-apps/plugin-opener'
export let onMessage
let url = ''
let urlProgram = ''
function openUrl() {
opener.openUrl(url, urlProgram ? urlProgram : undefined).catch(onMessage)
}
let path = ''
let pathProgram = ''
function openPath() {
opener
.openPath(path, pathProgram ? pathProgram : undefined)
.catch(onMessage)
}
let revealPath = ''
function revealItemInDir() {
opener.revealItemInDir(revealPath).catch(onMessage)
}
</script>
<div class="flex flex-col gap-2">
<form
class="flex flex-row gap-2 items-center"
on:submit|preventDefault={openUrl}
>
<button class="btn" type="submit">Open URL</button>
<input
class="input grow"
placeholder="Type the URL to open..."
bind:value={url}
/>
<span> with </span>
<input class="input" bind:value={urlProgram} />
</form>
<form
class="flex flex-row gap-2 items-center"
on:submit|preventDefault={openPath}
>
<button class="btn" type="submit">Open Path</button>
<input
class="input grow"
placeholder="Type the path to open..."
bind:value={path}
/>
<span> with </span>
<input class="input" bind:value={pathProgram} />
</form>
<form
class="flex flex-row gap-2 items-center"
on:submit|preventDefault={revealItemInDir}
>
<button class="btn" type="submit">Reveal</button>
<input
class="input grow"
placeholder="Type the path to reveal..."
bind:value={revealPath}
/>
</form>
</div>
+29 -21
View File
@@ -1,38 +1,44 @@
<script>
import { scan, checkPermissions, requestPermissions, Format, cancel } from "@tauri-apps/plugin-barcode-scanner";
import {
scan,
checkPermissions,
requestPermissions,
Format,
cancel
} from '@tauri-apps/plugin-barcode-scanner'
export let onMessage;
export let onMessage
let scanning = false;
let windowed = true;
let formats = [Format.QRCode];
const supportedFormats = [Format.QRCode, Format.EAN13];
let scanning = false
let windowed = true
let formats = [Format.QRCode]
const supportedFormats = [Format.QRCode, Format.EAN13]
async function startScan() {
let permission = await checkPermissions();
let permission = await checkPermissions()
if (permission === 'prompt') {
permission = await requestPermissions();
permission = await requestPermissions()
}
if (permission === 'granted') {
scanning = true;
scanning = true
scan({ windowed, formats })
.then((res) => {
scanning = false;
onMessage(res);
scanning = false
onMessage(res)
})
.catch((error) => {
scanning = false;
onMessage(error);
});
scanning = false
onMessage(error)
})
} else {
onMessage('Permission denied')
}
}
async function cancelScan() {
await cancel();
scanning = false;
onMessage("cancelled");
await cancel()
scanning = false
onMessage('cancelled')
}
</script>
@@ -59,11 +65,12 @@
<div class="barcode-scanner--area--container">
<div class="relative">
<p>Aim your camera at a QR code</p>
<button class="btn" type="button" on:click={cancelScan}>Cancel</button>
<button class="btn" type="button" on:click={cancelScan}>Cancel</button
>
</div>
<div class="square surround-cover">
<div class="barcode-scanner--area--outer surround-cover">
<div class="barcode-scanner--area--inner" />
<div class="barcode-scanner--area--inner"></div>
</div>
</div>
</div>
@@ -111,7 +118,7 @@
transition: 0.3s;
}
.square:after {
content: "";
content: '';
top: 0;
display: block;
padding-bottom: 100%;
@@ -141,7 +148,8 @@
width: 100%;
margin: 1rem;
border: 2px solid #fff;
box-shadow: 0px 0px 2px 1px rgb(0 0 0 / 0.5),
box-shadow:
0px 0px 2px 1px rgb(0 0 0 / 0.5),
inset 0px 0px 2px 1px rgb(0 0 0 / 0.5);
border-radius: 1rem;
}
+60 -18
View File
@@ -1,5 +1,5 @@
<script>
import { Store } from "@tauri-apps/plugin-store";
import { LazyStore } from "@tauri-apps/plugin-store";
import { onMount } from "svelte";
export let onMessage;
@@ -7,28 +7,65 @@
let key;
let value;
const store = new Store("cache.json");
let store = new LazyStore("cache.json");
let cache = {};
onMount(async () => {
await store.load();
const values = await store.entries();
for (const [key, value] of values) {
cache[key] = value;
async function refreshEntries() {
try {
const values = await store.entries();
cache = {};
for (const [key, value] of values) {
cache[key] = value;
}
} catch (error) {
onMessage(error);
}
cache = cache;
}
onMount(async () => {
await refreshEntries();
});
function write(key, value) {
store
.set(key, value)
.then(() => store.get(key))
.then((v) => {
cache[key] = v;
async function write(key, value) {
try {
if (value) {
await store.set(key, value);
} else {
await store.delete(key);
}
const v = await store.get(key);
if (v === undefined) {
delete cache[key];
cache = cache;
})
.then(() => store.save())
.catch(onMessage);
} else {
cache[key] = v;
}
} catch (error) {
onMessage(error);
}
}
async function reset() {
try {
await store.reset();
} catch (error) {
onMessage(error);
}
await refreshEntries();
}
async function close() {
try {
await store.close();
onMessage("Store is now closed, any new operations will error out");
} catch (error) {
onMessage(error);
}
}
function reopen() {
store = new LazyStore("cache.json");
onMessage("We made a new `LazyStore` instance, operations will now work");
}
</script>
@@ -44,7 +81,12 @@
<input class="grow input" bind:value />
</div>
<button class="btn" on:click={() => write(key, value)}> Write </button>
<div>
<button class="btn" on:click={() => write(key, value)}>Write</button>
<button class="btn" on:click={() => reset()}>Reset</button>
<button class="btn" on:click={() => close()}>Close</button>
<button class="btn" on:click={() => reopen()}>Re-open</button>
</div>
</div>
<div>
+31 -31
View File
@@ -1,56 +1,56 @@
<script>
import { check } from "@tauri-apps/plugin-updater";
import { relaunch } from "@tauri-apps/plugin-process";
import { check } from '@tauri-apps/plugin-updater'
import { relaunch } from '@tauri-apps/plugin-process'
export let onMessage;
export let onMessage
let isChecking, isInstalling, newUpdate;
let isChecking, isInstalling, newUpdate
let totalSize = 0,
downloadedSize = 0;
downloadedSize = 0
async function checkUpdate() {
isChecking = true;
isChecking = true
try {
const update = await check();
onMessage(`Should update: ${update.available}`);
onMessage(update);
const update = await check()
onMessage(`Should update: ${update.available}`)
onMessage(update)
newUpdate = update;
newUpdate = update
} catch (e) {
onMessage(e);
onMessage(e)
} finally {
isChecking = false;
isChecking = false
}
}
async function install() {
isInstalling = true;
downloadedSize = 0;
isInstalling = true
downloadedSize = 0
try {
await newUpdate.downloadAndInstall((downloadProgress) => {
switch (downloadProgress.event) {
case "Started":
totalSize = downloadProgress.data.contentLength;
break;
case "Progress":
downloadedSize += downloadProgress.data.chunkLength;
break;
case "Finished":
break;
case 'Started':
totalSize = downloadProgress.data.contentLength
break
case 'Progress':
downloadedSize += downloadProgress.data.chunkLength
break
case 'Finished':
break
}
});
onMessage("Installation complete, restarting...");
await new Promise((resolve) => setTimeout(resolve, 2000));
await relaunch();
})
onMessage('Installation complete, restarting...')
await new Promise((resolve) => setTimeout(resolve, 2000))
await relaunch()
} catch (e) {
console.error(e);
onMessage(e);
console.error(e)
onMessage(e)
} finally {
isInstalling = false;
isInstalling = false
}
}
$: progress = totalSize ? Math.round((downloadedSize / totalSize) * 100) : 0;
$: progress = totalSize ? Math.round((downloadedSize / totalSize) * 100) : 0
</script>
<div class="flex children:grow children:h10">
@@ -61,7 +61,7 @@
{:else}
<div class="progress">
<span>{progress}%</span>
<div class="progress-bar" style="width: {progress}%" />
<div class="progress-bar" style="width: {progress}%"></div>
</div>
{/if}
</div>
+45 -45
View File
@@ -2,43 +2,43 @@
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
import { defineConfig, presetIcons, presetUno, presetWebFonts } from "unocss";
import extractorSvelte from "@unocss/extractor-svelte";
import { defineConfig, presetIcons, presetUno, presetWebFonts } from 'unocss'
import extractorSvelte from '@unocss/extractor-svelte'
export default defineConfig({
theme: {
colors: {
primary: "#FFFFFF",
primaryLighter: "#e9ecef",
darkPrimary: "#1B1B1D",
darkPrimaryLighter: "#242526",
primaryText: "#1C1E21",
darkPrimaryText: "#E3E3E3",
secondaryText: "#858A91",
darkSecondaryText: "#C2C5CA",
accent: "#3578E5",
accentDark: "#306cce",
accentDarker: "#2d66c3",
accentDarkest: "#2554a0",
accentLight: "#538ce9",
accentLighter: "#72a1ed",
accentLightest: "#9abcf2",
accentText: "#FFFFFF",
darkAccent: "#67d6ed",
darkAccentDark: "#49cee9",
darkAccentDarker: "#39cae8",
darkAccentDarkest: "#19b5d5",
darkAccentLight: "#85def1",
darkAccentLighter: "#95e2f2",
darkAccentLightest: "#c2eff8",
darkAccentText: "#1C1E21",
code: "#d6d8da",
codeDark: "#282a2e",
hoverOverlay: "rgba(0,0,0,.05)",
hoverOverlayDarker: "rgba(0,0,0,.1)",
darkHoverOverlay: "hsla(0,0%,100%,.05)",
darkHoverOverlayDarker: "hsla(0,0%,100%,.1)",
},
primary: '#FFFFFF',
primaryLighter: '#e9ecef',
darkPrimary: '#1B1B1D',
darkPrimaryLighter: '#242526',
primaryText: '#1C1E21',
darkPrimaryText: '#E3E3E3',
secondaryText: '#858A91',
darkSecondaryText: '#C2C5CA',
accent: '#3578E5',
accentDark: '#306cce',
accentDarker: '#2d66c3',
accentDarkest: '#2554a0',
accentLight: '#538ce9',
accentLighter: '#72a1ed',
accentLightest: '#9abcf2',
accentText: '#FFFFFF',
darkAccent: '#67d6ed',
darkAccentDark: '#49cee9',
darkAccentDarker: '#39cae8',
darkAccentDarkest: '#19b5d5',
darkAccentLight: '#85def1',
darkAccentLighter: '#95e2f2',
darkAccentLightest: '#c2eff8',
darkAccentText: '#1C1E21',
code: '#d6d8da',
codeDark: '#282a2e',
hoverOverlay: 'rgba(0,0,0,.05)',
hoverOverlayDarker: 'rgba(0,0,0,.1)',
darkHoverOverlay: 'hsla(0,0%,100%,.05)',
darkHoverOverlayDarker: 'hsla(0,0%,100%,.1)'
}
},
preflights: [
{
@@ -54,7 +54,7 @@ export default defineConfig({
code {
font-size: ${theme.fontSize.xs[0]};
font-family: ${theme.fontFamily.mono};
border-radius: ${theme.borderRadius["DEFAULT"]};
border-radius: ${theme.borderRadius['DEFAULT']};
background-color: ${theme.colors.code};
}
@@ -66,8 +66,8 @@ export default defineConfig({
.dark code {
background-color: ${theme.colors.codeDark};
}
`,
},
`
}
],
shortcuts: {
btn: `select-none outline-none shadow-md p-2 rd-1 text-primaryText border-none font-400 dark:font-600
@@ -81,20 +81,20 @@ export default defineConfig({
note: `decoration-none flex-inline items-center relative p-2 rd-1
border-l-4 border-accent dark:border-darkAccent
bg-accent/10 dark:bg-darkAccent/10`,
"note-red":
"note bg-red-700/10 dark:bg-red-700/10 after:bg-red-700 dark:after:bg-red-700",
'note-red':
'note bg-red-700/10 dark:bg-red-700/10 after:bg-red-700 dark:after:bg-red-700',
input:
"h-10 flex items-center outline-none border-none p-2 rd-1 shadow-md bg-primaryLighter dark:bg-darkPrimaryLighter text-primaryText dark:text-darkPrimaryText",
'h-10 flex items-center outline-none border-none p-2 rd-1 shadow-md bg-primaryLighter dark:bg-darkPrimaryLighter text-primaryText dark:text-darkPrimaryText'
},
presets: [
presetUno(),
presetIcons(),
presetWebFonts({
fonts: {
sans: "Rubik",
mono: ["Fira Code", "Fira Mono:400,700"],
},
}),
sans: 'Rubik',
mono: ['Fira Code', 'Fira Mono:400,700']
}
})
],
extractors: [extractorSvelte],
});
extractors: [extractorSvelte]
})
+13 -20
View File
@@ -2,12 +2,12 @@
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
import { defineConfig } from "vite";
import Unocss from "unocss/vite";
import { svelte } from "@sveltejs/vite-plugin-svelte";
import process from "process";
import { defineConfig } from 'vite'
import Unocss from 'unocss/vite'
import { svelte } from '@sveltejs/vite-plugin-svelte'
import process from 'process'
const host = process.env.TAURI_DEV_HOST;
const host = process.env.TAURI_DEV_HOST
// https://vitejs.dev/config/
export default defineConfig(async () => {
@@ -18,24 +18,17 @@ export default defineConfig(async () => {
output: {
entryFileNames: `assets/[name].js`,
chunkFileNames: `assets/[name].js`,
assetFileNames: `assets/[name].[ext]`,
},
},
assetFileNames: `assets/[name].[ext]`
}
}
},
server: {
host: host || false,
port: 5173,
strictPort: true,
hmr: host
? {
protocol: "ws",
host,
port: 5183,
}
: undefined,
fs: {
allow: [".", "../../tooling/api/dist"],
},
},
};
});
allow: ['.', '../../tooling/api/dist']
}
}
}
})
+13 -17
View File
@@ -1,29 +1,30 @@
{
"name": "plugins-workspace",
"private": true,
"license": "MIT or APACHE-2.0",
"license": "MIT OR Apache-2.0",
"type": "module",
"scripts": {
"build": "pnpm run -r --parallel --filter !plugins-workspace --filter !\"./plugins/*/examples/**\" --filter !\"./examples/*\" build",
"lint": "eslint .",
"format": "prettier --write \"./**/*.{cjs,mjs,js,jsx,mts,ts,tsx,html,css,json}\" --ignore-path .prettierignore",
"format-check": "prettier --check \"./**/*.{cjs,mjs,js,jsx,mts,ts,tsx,html,css,json}\" --ignore-path .prettierignore"
"format": "prettier --write .",
"format:check": "prettier --check .",
"example:api:dev": "pnpm run --filter \"api\" tauri dev"
},
"devDependencies": {
"@eslint/js": "9.9.0",
"@rollup/plugin-node-resolve": "15.2.3",
"@eslint/js": "9.16.0",
"@rollup/plugin-node-resolve": "15.3.0",
"@rollup/plugin-terser": "0.4.4",
"@rollup/plugin-typescript": "11.1.6",
"@types/eslint__js": "8.42.3",
"covector": "^0.12.0",
"eslint": "9.9.0",
"covector": "^0.12.3",
"eslint": "9.16.0",
"eslint-config-prettier": "9.1.0",
"eslint-plugin-security": "3.0.1",
"prettier": "3.3.3",
"rollup": "4.21.0",
"tslib": "2.6.3",
"typescript": "5.5.4",
"typescript-eslint": "8.1.0"
"prettier": "3.4.2",
"rollup": "4.28.1",
"tslib": "2.8.1",
"typescript": "5.7.2",
"typescript-eslint": "8.17.0"
},
"resolutions": {
"semver": ">=7.5.2",
@@ -31,10 +32,5 @@
},
"engines": {
"pnpm": "^9.0.0"
},
"pnpm": {
"overrides": {
"micromatch@<4.0.8": ">=4.0.8"
}
}
}
-1
View File
@@ -1 +0,0 @@
node_modules
-92
View File
@@ -1,92 +0,0 @@
# Changelog
## \[2.0.0-rc.1]
- [`e2e97db5`](https://github.com/tauri-apps/plugins-workspace/commit/e2e97db51983267f5be84d4f6f0278d58834d1f5) ([#1701](https://github.com/tauri-apps/plugins-workspace/pull/1701) by [@lucasfernog](https://github.com/tauri-apps/plugins-workspace/../../lucasfernog)) Update to tauri 2.0.0-rc.8
## \[2.0.0-rc.0]
- [`9887d1`](https://github.com/tauri-apps/plugins-workspace/commit/9887d14bd0e971c4c0f5c1188fc4005d3fc2e29e) Update to tauri RC.
## \[2.0.0-beta.8]
- [`99d6ac0f`](https://github.com/tauri-apps/plugins-workspace/commit/99d6ac0f9506a6a4a1aa59c728157190a7441af6) ([#1606](https://github.com/tauri-apps/plugins-workspace/pull/1606) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) The JS packages now specify the *minimum* `@tauri-apps/api` version instead of a single exact version.
- [`6de87966`](https://github.com/tauri-apps/plugins-workspace/commit/6de87966ecc00ad9d91c25be452f1f46bd2b7e1f) ([#1597](https://github.com/tauri-apps/plugins-workspace/pull/1597) by [@Legend-Master](https://github.com/tauri-apps/plugins-workspace/../../Legend-Master)) Update to tauri beta.25.
## \[2.0.0-beta.7]
- [`22a17980`](https://github.com/tauri-apps/plugins-workspace/commit/22a17980ff4f6f8c40adb1b8f4ffc6dae2fe7e30) ([#1537](https://github.com/tauri-apps/plugins-workspace/pull/1537) by [@lucasfernog](https://github.com/tauri-apps/plugins-workspace/../../lucasfernog)) Update to tauri beta.24.
## \[2.0.0-beta.6]
- [`76daee7a`](https://github.com/tauri-apps/plugins-workspace/commit/76daee7aafece34de3092c86e531cf9eb1138989) ([#1512](https://github.com/tauri-apps/plugins-workspace/pull/1512) by [@renovate](https://github.com/tauri-apps/plugins-workspace/../../renovate)) Update to tauri beta.23.
## \[2.0.0-beta.5]
- [`9013854f`](https://github.com/tauri-apps/plugins-workspace/commit/9013854f42a49a230b9dbb9d02774765528a923f)([#1382](https://github.com/tauri-apps/plugins-workspace/pull/1382)) Update to tauri beta.22.
## \[2.0.0-beta.4]
- [`430bd6f4`](https://github.com/tauri-apps/plugins-workspace/commit/430bd6f4f379bee5d232ae6b098ae131db7f178a)([#1363](https://github.com/tauri-apps/plugins-workspace/pull/1363)) Update to tauri beta.20.
## \[2.0.0-beta.3]
- [`bd1ed590`](https://github.com/tauri-apps/plugins-workspace/commit/bd1ed5903ffcce5500310dac1e59e8c67674ef1e)([#1237](https://github.com/tauri-apps/plugins-workspace/pull/1237)) Update to tauri beta.17.
## \[2.0.0-beta.4]
- [`7e2fcc5`](https://github.com/tauri-apps/plugins-workspace/commit/7e2fcc5e74df7c3c718e40f75bfb0eafc7d69d8d)([#1146](https://github.com/tauri-apps/plugins-workspace/pull/1146)) Update dependencies to align with tauri 2.0.0-beta.14.
## \[2.0.0-beta.3]
- [`a04ea2f`](https://github.com/tauri-apps/plugins-workspace/commit/a04ea2f38294d5a3987578283badc8eec87a7752)([#1071](https://github.com/tauri-apps/plugins-workspace/pull/1071)) The global API script is now only added to the binary when the `withGlobalTauri` config is true.
## \[2.0.0-beta.2]
- [`99bea25`](https://github.com/tauri-apps/plugins-workspace/commit/99bea2559c2c0648c2519c50a18cd124dacef57b)([#1005](https://github.com/tauri-apps/plugins-workspace/pull/1005)) Update to tauri beta.8.
## \[2.0.0-beta.1]
- [`569defb`](https://github.com/tauri-apps/plugins-workspace/commit/569defbe9492e38938554bb7bdc1be9151456d21) Update to tauri beta.4.
## \[2.0.0-beta.0]
- [`d198c01`](https://github.com/tauri-apps/plugins-workspace/commit/d198c014863ee260cb0de88a14b7fc4356ef7474)([#862](https://github.com/tauri-apps/plugins-workspace/pull/862)) Update to tauri beta.
## \[2.0.0-alpha.5]
- [`387c2f9`](https://github.com/tauri-apps/plugins-workspace/commit/387c2f9e0ce4c75c07ffa3fd76391a25b58f5daf)([#802](https://github.com/tauri-apps/plugins-workspace/pull/802)) Update to @tauri-apps/api v2.0.0-alpha.13.
## \[2.0.0-alpha.4]
- [`387c2f9`](https://github.com/tauri-apps/plugins-workspace/commit/387c2f9e0ce4c75c07ffa3fd76391a25b58f5daf)([#802](https://github.com/tauri-apps/plugins-workspace/pull/802)) Update to @tauri-apps/api v2.0.0-alpha.12.
## \[2.0.0-alpha.3]
- [`e438e0a`](https://github.com/tauri-apps/plugins-workspace/commit/e438e0a62d4b430a5159f05f13ecd397dd891a0d)([#676](https://github.com/tauri-apps/plugins-workspace/pull/676)) Update to @tauri-apps/api v2.0.0-alpha.11.
## \[2.0.0-alpha.2]
- [`5c13736`](https://github.com/tauri-apps/plugins-workspace/commit/5c137365c60790e8d4037d449e8237aa3fffdab0)([#673](https://github.com/tauri-apps/plugins-workspace/pull/673)) Update to @tauri-apps/api v2.0.0-alpha.9.
## \[2.0.0-alpha.2]
- [`4e2cef9`](https://github.com/tauri-apps/plugins-workspace/commit/4e2cef9b702bbbb9cf4ee17de50791cb21f1b2a4)([#593](https://github.com/tauri-apps/plugins-workspace/pull/593)) Update to alpha.12.
## \[2.0.0-alpha.1]
- [`d74fc0a`](https://github.com/tauri-apps/plugins-workspace/commit/d74fc0a097996e90a37be8f57d50b7d1f6ca616f)([#555](https://github.com/tauri-apps/plugins-workspace/pull/555)) Update to alpha.11.
## \[2.0.0-alpha.0]
- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release!
te to alpha.11.
## \[2.0.0-alpha.0]
- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release!
ae67\`]\(https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release!
717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release!
\-workspace/pull/371)) First v2 alpha release!
717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release!
com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release!
-41
View File
@@ -1,41 +0,0 @@
[package]
name = "tauri-plugin-authenticator"
version = "2.0.0-rc.1"
description = "Use hardware security-keys in your Tauri App."
authors = { workspace = true }
license = { workspace = true }
edition = { workspace = true }
rust-version = { workspace = true }
repository = { workspace = true }
links = "tauri-plugin-authenticator"
[package.metadata.docs.rs]
rustc-args = [ "--cfg", "docsrs" ]
rustdoc-args = [ "--cfg", "docsrs" ]
[build-dependencies]
tauri-plugin = { workspace = true, features = [ "build" ] }
[dependencies]
serde = { workspace = true }
serde_json = { workspace = true }
tauri = { workspace = true }
log = { workspace = true }
thiserror = { workspace = true }
[target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies]
authenticator = "0.3.1"
once_cell = "1"
sha2 = "0.10"
base64 = "0.22"
chrono = "0.4"
bytes = "1"
byteorder = "1"
openssl = "0.10"
[target."cfg(target_os = \"windows\")".dependencies]
winapi-util = "=0.1.6"
[dev-dependencies]
rand = "0.8"
rusty-fork = "0.3"
-143
View File
@@ -1,143 +0,0 @@
![plugin-authenticator](https://github.com/tauri-apps/plugins-workspace/raw/v2/plugins/authenticator/banner.png)
Use hardware security-keys in your Tauri App.
- Supported platforms: Windows, Linux, FreeBSD, NetBSD, OpenBSD, and macOS.
## Install
_This plugin requires a Rust version of at least **1.75**_
There are three general methods of installation that we can recommend.
1. Use crates.io and npm (easiest and requires you to trust that our publishing pipeline worked)
2. Pull sources directly from Github using git tags / revision hashes (most secure)
3. Git submodule install this repo in your tauri project and then use the file protocol to ingest the source (most secure, but inconvenient to use)
Install the authenticator plugin by adding the following lines to your `Cargo.toml` file:
`src-tauri/Cargo.toml`
```toml
# you can add the dependencies on the `[dependencies]` section if you do not target mobile
[target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies]
tauri-plugin-authenticator = "2.0.0-rc"
# alternatively with Git:
tauri-plugin-authenticator = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }
```
You can install the JavaScript Guest bindings using your preferred JavaScript package manager:
> Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use.
```sh
pnpm add @tauri-apps/plugin-authenticator
# or
npm add @tauri-apps/plugin-authenticator
# or
yarn add @tauri-apps/plugin-authenticator
```
Alternatively with Git:
```sh
pnpm add https://github.com/tauri-apps/tauri-plugin-authenticator#v2
# or
npm add https://github.com/tauri-apps/tauri-plugin-authenticator#v2
# or
yarn add https://github.com/tauri-apps/tauri-plugin-authenticator#v2
```
## Usage
First, you need to register the authenticator plugin with Tauri:
`src-tauri/src/main.rs`
```rust
fn main() {
tauri::Builder::default()
.setup(|app| {
#[cfg(desktop)]
app.handle().plugin(tauri_plugin_authenticator::init())?;
Ok(())
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
```
Afterwards, all the plugin's APIs are available through the JavaScript guest bindings:
```javascript
import { Authenticator } from "@tauri-apps/plugin-authenticator";
const auth = new Authenticator();
auth.init(); // initialize transports
// generate a 32-bytes long random challenge
const arr = new Uint32Array(32);
window.crypto.getRandomValues(arr);
const b64 = btoa(String.fromCharCode.apply(null, arr));
// web-safe base64
const challenge = b64.replace(/\+/g, "-").replace(/\//g, "_");
const domain = "https://tauri.app";
// attempt to register with the security key
const json = await auth.register(challenge, domain);
const registerResult = JSON.parse(json);
// verify the registration was successful
const r2 = await auth.verifyRegistration(
challenge,
app,
registerResult.registerData,
registerResult.clientData,
);
const j2 = JSON.parse(r2);
// sign some data
const json = await auth.sign(challenge, app, keyHandle);
const signData = JSON.parse(json);
// verify the signature again
const counter = await auth.verifySignature(
challenge,
app,
signData.signData,
clientData,
keyHandle,
pubkey,
);
if (counter && counter > 0) {
console.log("SUCCESS!");
}
```
## Contributing
PRs accepted. Please make sure to read the Contributing Guide before making a pull request.
## Partners
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://crabnebula.dev" target="_blank">
<img src="https://github.com/tauri-apps/plugins-workspace/raw/v2/.github/sponsors/crabnebula.svg" alt="CrabNebula" width="283">
</a>
</td>
</tr>
</tbody>
</table>
For the complete list of sponsors please visit our [website](https://tauri.app#sponsors) and [Open Collective](https://opencollective.com/tauri).
## License
Code: (c) 2015 - Present - The Tauri Programme within The Commons Conservancy.
MIT or MIT/Apache 2.0 where applicable.
-1
View File
@@ -1 +0,0 @@
if("__TAURI__"in window){var __TAURI_PLUGIN_AUTHENTICATOR__=function(t){"use strict";async function i(t,i={},a){return window.__TAURI_INTERNALS__.invoke(t,i,a)}"function"==typeof SuppressedError&&SuppressedError;return t.Authenticator=class{async init(){await i("plugin:authenticator|init_auth")}async register(t,a){return await i("plugin:authenticator|register",{timeout:1e4,challenge:t,application:a})}async verifyRegistration(t,a,e,n){return await i("plugin:authenticator|verify_registration",{challenge:t,application:a,registerData:e,clientData:n})}async sign(t,a,e){return await i("plugin:authenticator|sign",{timeout:1e4,challenge:t,application:a,keyHandle:e})}async verifySignature(t,a,e,n,r,u){return await i("plugin:authenticator|verify_signature",{challenge:t,application:a,signData:e,clientData:n,keyHandle:r,pubkey:u})}},t}({});Object.defineProperty(window.__TAURI__,"authenticator",{value:__TAURI_PLUGIN_AUTHENTICATOR__})}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

-17
View File
@@ -1,17 +0,0 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
const COMMANDS: &[&str] = &[
"init_auth",
"register",
"verify_registration",
"sign",
"verify_signature",
];
fn main() {
tauri_plugin::Builder::new(COMMANDS)
.global_api_script_path("./api-iife.js")
.build();
}
-64
View File
@@ -1,64 +0,0 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
import { invoke } from "@tauri-apps/api/core";
export class Authenticator {
async init(): Promise<void> {
await invoke("plugin:authenticator|init_auth");
}
async register(challenge: string, application: string): Promise<string> {
return await invoke("plugin:authenticator|register", {
timeout: 10000,
challenge,
application,
});
}
async verifyRegistration(
challenge: string,
application: string,
registerData: string,
clientData: string,
): Promise<string> {
return await invoke("plugin:authenticator|verify_registration", {
challenge,
application,
registerData,
clientData,
});
}
async sign(
challenge: string,
application: string,
keyHandle: string,
): Promise<string> {
return await invoke("plugin:authenticator|sign", {
timeout: 10000,
challenge,
application,
keyHandle,
});
}
async verifySignature(
challenge: string,
application: string,
signData: string,
clientData: string,
keyHandle: string,
pubkey: string,
): Promise<number> {
return await invoke("plugin:authenticator|verify_signature", {
challenge,
application,
signData,
clientData,
keyHandle,
pubkey,
});
}
}
@@ -1,13 +0,0 @@
# Automatically generated - DO NOT EDIT!
"$schema" = "../../schemas/schema.json"
[[permission]]
identifier = "allow-init-auth"
description = "Enables the init_auth command without any pre-configured scope."
commands.allow = ["init_auth"]
[[permission]]
identifier = "deny-init-auth"
description = "Denies the init_auth command without any pre-configured scope."
commands.deny = ["init_auth"]
@@ -1,13 +0,0 @@
# Automatically generated - DO NOT EDIT!
"$schema" = "../../schemas/schema.json"
[[permission]]
identifier = "allow-register"
description = "Enables the register command without any pre-configured scope."
commands.allow = ["register"]
[[permission]]
identifier = "deny-register"
description = "Denies the register command without any pre-configured scope."
commands.deny = ["register"]
@@ -1,13 +0,0 @@
# Automatically generated - DO NOT EDIT!
"$schema" = "../../schemas/schema.json"
[[permission]]
identifier = "allow-sign"
description = "Enables the sign command without any pre-configured scope."
commands.allow = ["sign"]
[[permission]]
identifier = "deny-sign"
description = "Denies the sign command without any pre-configured scope."
commands.deny = ["sign"]

Some files were not shown because too many files have changed in this diff Show More