Compare commits

...

459 Commits

Author SHA1 Message Date
Lucas Nogueira
005e4a9649 chore: promote API package to RC 2024-08-02 10:32:39 -03:00
Lucas Fernandes Nogueira
88619e8914 feat: promote v2 to RC (#10434)
* feat: promote v2 to RC

* update changelog
2024-08-02 10:28:06 -03:00
Lucas Fernandes Nogueira
786f188923 feat(cli): allow using iOS device tun address for dev server (#10456)
- Changes the IP prompt to also show IPV6 address ending with ::2 (usually device's address)
- Adds --host option on ios dev to force the host
- Also makes it work with our own dev server impl (builtin)
2024-08-02 10:04:08 -03:00
Lucas Fernandes Nogueira
7ba67b4aca refactor!: use localhost for development on Android devices and emulators or iOS simulators (#10437)
* feat(cli): use localhost on mobile!

* change cargo-mobile2

* use public network address on iOS device :(

* add change file

* actually breaking

* pin cargo-mobile2

* rename env var
2024-08-02 07:35:18 -03:00
Lucas Fernandes Nogueira
a5bfbaa62b feat: add iOS frameworks config option, closes #9962 (#10393)
* feat: add iOS frameworks config option, closes #9962

* fix template

* typo
2024-08-02 07:35:03 -03:00
chip
b32295de18 prevent unnecessary rebuilds when working in the cargo workspace (#10442)
* hash codegen image cache output

* remove left over dbg! statement

* prevent info.plist from workspace rebuilds

* prevent schema generation from workspace rebuilds

* use new `Cached` struct in `CachedIcon`

* fmt

* use full import for cached plist

* use `to_vec()` for raw icons
2024-08-02 07:30:02 -03:00
Oscar Beaumont
6755af2302 fix: Specta remote implementation for Channel (#10435)
* Update channel.rs
* Don't rely on `DataType` reexport
2024-08-01 16:26:52 +09:00
Lucas Fernandes Nogueira
24445d71de fix(core): usage without the compression feature (#10432) 2024-07-31 18:40:02 -03:00
chip
eaec5fe9c1 Limit pub exposure in 2.x (#10158)
* hide `Invoke` from documentation

* make `Asset` non-exhaustive

* make `InvokeRequest` non-exhaustive

* mark `tauri_utils::platform::Target` non-exhaustive

* mark the runtime crates as unstable API

* Revert "mark the runtime crates as unstable API" [skip ci]

This reverts commit b8377222e3.

* mark the runtime crates as unstable API

* Revert "mark the runtime crates as unstable API" [skip ci]

This reverts commit 9284897644.

* mark the runtime crates as unstable API

* mark tauri_utils::TitleBarStyle as `#[non_exhaustive]`

* mark `InvokeRequest` as non_exhaustive unless `unstable` feature

* mark config and acl items as unstable
2024-07-31 10:54:43 -03:00
Lucas Fernandes Nogueira
1e0793b682 feat(core): fallback to file system for AssetResolver::get, closes #8411 (#10357)
* feat(core): fallback to file system for AssetResolver::get, closes #8411

Ports #10356 to v2

* fix test

---------

Co-authored-by: Chip Reed <chip@chip.sh>
2024-07-31 07:13:40 -03:00
chip
d03332617c chore: Transfer schemars fork to tauri-apps org (#10429) 2024-07-31 15:40:45 +09:00
Lucas Fernandes Nogueira
d5511c3117 feat(cli): add migration from 2.0.0-beta to 2.0.0-rc (#10395)
* refactor(cli): check tauri version on migration

* rc migration

* license headers

* fix tests

* add path

* update schema
2024-07-30 16:32:59 -03:00
chip
426d14bb41 check the main frame's origin in isolation.js (#10423)
* check the main frame's origin in isolation.js

* add changefile

* correct changefile tag

* use strict origin checking
2024-07-30 16:32:32 -03:00
martin frances
87029310b8 Minor: 'cargo doc' reports links need to be wrapped in angle brackets. (#10320) 2024-07-30 07:54:08 -03:00
Lucas Fernandes Nogueira
758d28c8a2 refactor: core plugin permissions are now prefixed core:, closes #10359 (#10390)
* refactor: core plugin permissions are now prefixed core:, closes #10359

* code review

* expand reserved plugin names

* fix

* add core:default permission set

* fix permission usage

---------

Co-authored-by: Tillmann <28728469+tweidinger@users.noreply.github.com>
2024-07-30 07:52:43 -03:00
Tillmann
a0841d509a Add change file for #10360 (#10421) 2024-07-30 14:29:06 +09:00
chip
11af545bf3 feat: Use loopback interface on desktop dev server by default (#10360)
Use loopback interface on desktop dev server by default
2024-07-30 14:17:19 +09:00
dependabot[bot]
a0af6c00df chore(deps): bump openssl from 0.10.64 to 0.10.66 (#10354)
Bumps [openssl](https://github.com/sfackler/rust-openssl) from 0.10.64 to 0.10.66.
- [Release notes](https://github.com/sfackler/rust-openssl/releases)
- [Commits](https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.64...openssl-v0.10.66)

---
updated-dependencies:
- dependency-name: openssl
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-29 12:56:41 -03:00
chip
cf994a6bb0 add failable try_build for plugin builder (#10405)
* add failable try_build for plugin builder

* add changefile

* implement `Hash`, `PartialEq` for `BuilderError`

* mark config and acl items as unstable

give some doc tips if they need to be used from Rust

* Revert "mark config and acl items as unstable" [skip ci]

This reverts commit e23728edb6.
2024-07-29 10:51:56 -03:00
Lucas Fernandes Nogueira
289ae5555d feat: re-enable TLS checks for Android and dev proxy (#10386)
* feat: re-enable TLS checks for Android and dev proxy

* update time
2024-07-29 10:43:59 -03:00
Vladimir Stoilov
7aeac39e7f feat(core): make setting of gtk app id optional (#10397)
* feat(core): make setting of gtk app id optional

* Fix change file

* Update .changes/linux-option-gtk-app-id.md

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

* [skip ci] Update linux-option-gtk-app-id.md

* Update app.rs

* Update app.rs

---------

Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
2024-07-29 15:26:13 +02:00
Ernest M. van der Linden
498f405ca8 fix(core): Conf parsing error always displays tauri.conf.json file name even when using toml or json5 (#10404)
* Conf parsing error displays `tauri.conf.json` when using toml or json5

Conf parsing error always displays `tauri.conf.json` as path, even when using `Tauri.toml` or `tauri.conf.json5`

Example Error Message when using Tauri.toml:
Error unable to parse toml Tauri config file at
/Users/bla/repo/bla/bla/src-tauri/tauri.conf.json because
invalid TOML value, did you mean to use a quoted string? at line 41
column 7

* merge changefile pr into main pr

* Update and rename fix-conf-parsing-error-filepath to fix-conf-parsing-error-filepath.md

---------

Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
2024-07-29 14:54:21 +02:00
github-actions[bot]
2a402b4845 apply version updates (#10281)
Co-authored-by: FabianLars <FabianLars@users.noreply.github.com>
2024-07-29 07:27:56 -03:00
Lucas Fernandes Nogueira
efdce038bb fix(core): apply clippy suggestions (#10394)
* fix(core): apply clippy suggestions

* more fixes
2024-07-29 10:53:53 +02:00
Brendan Allan
e1776946ad fix(core): use specta's derive feature (#10362)
* use specta's derive feature

* use specta rc.15

* .changes file

* try patched specta

* specta rc.16

* Update .changes/specta-derive-feature.md

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

* Update specta-derive-feature.md [skip ci]

---------

Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
2024-07-24 12:47:51 +02:00
renovate[bot]
c072090ed8 chore(deps) Update Rust crate syn to v2.0.72 (#10369)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-24 11:59:29 +08:00
Tony
f153e8b0fe docs: Fix js doc's param mismatch for setSizeConstraints (#10342) 2024-07-22 11:09:36 +02:00
Lucas Fernandes Nogueira
8b3e6eccf4 fix(ci): gh CLI expects the GH_TOKEN env var (#10333) 2024-07-20 09:42:40 -03:00
Jacob Bolda
cfc53074d0 (chore) covector comment on forks (#10331)
* (chore) covector comment on forks

* bump header year

* Update .github/workflows/covector-comment-on-fork.yml

---------

Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
2024-07-20 09:17:06 -03:00
renovate[bot]
88552d66c3 chore(deps) Update Tauri Macros (#10309)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-18 10:39:03 +08:00
Jason Tsai
9546548ec0 fix(macos): set default title-bar style to Visible, close #10225 (#10297)
* fix(macos): set default title-bar style to `Visible`

* chore: add TODO
2024-07-17 06:40:38 +03:00
Fabian-Lars
7acac58d23 docs(core): Fix syntax in tauri.conf.json example (#10299) 2024-07-17 04:27:20 +03:00
Amr Bashir
da25f73530 feat: add granular size constraints APIs (#10242) 2024-07-17 04:05:56 +03:00
Hamir Mahal
26f2e19a4f refactor: remove unnecessary hashes around raw str (#10273) 2024-07-15 14:54:46 +03:00
Tony
9f0a5fceac changes(nsis): move pre hooks before kill app (#10271) 2024-07-15 14:54:02 +03:00
Tony
d1df6be701 fix(bundler): warning for self contained updaters (#10270)
* Fix warning for self contained updaters

* Add change file
2024-07-15 16:18:48 +08:00
Tony
506f1dd873 chore: use from string instead of from_anyhow anyhow! (#10282)
* Use from string instead of from_anyhow anyhow!

* Clippy
2024-07-14 21:44:01 +08:00
Tony
3c17fb64fd Fix Webview.reparent pointing to wrong Rust API (#10277) 2024-07-14 19:20:56 +08:00
github-actions[bot]
6d965e9fbf apply version updates (#10179)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-07-12 16:37:38 -03:00
Lucas Fernandes Nogueira
7c7fa0964d feat(cli): iOS signing for CI usage (#9963)
* feat(cli): iOS signing for CI usage

* license headers

* change file

* chore: support more cert types

* xplicit method arg

* keep keychain alive

* fix early keychano drop

* set team id

* use common name as cert name
2024-07-12 11:08:55 -03:00
renovate[bot]
532b3b1c03 chore(deps) Update Tauri API Definitions (#9171)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-12 11:07:49 -03:00
Fabian-Lars
202f15fc40 ci: Fix cli auto publishing (#10223) 2024-07-12 10:45:55 -03:00
Amr Bashir
261c9f942d refactor!(core & api): rename drag events for better consistency and clarity (#10170)
* refacotr!(core & api): rename drag events for better consistency and clarity

* more renames

* remove imports

* fix drag over listen

* update example

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-07-12 10:22:06 -03:00
Lucas Fernandes Nogueira
69dcfdfe0f fix(build): skip rerun-if-changed when Info.plist do not exist (#10267) 2024-07-12 10:13:08 -03:00
Lucas Fernandes Nogueira
5d29229858 fix(codegen): icon rewriting always triggering build to rerun (#10268) 2024-07-12 10:12:58 -03:00
Amr Bashir
4c239729c3 fix(core): fix raw invoke body for isolation pattern (#10167)
* fix(core): fix raw invoke body for isolation pattern

The `isolation` pattern requests are made using JSON but the payload could be raw bytes, so we send the original `Content-Type`  from frontend and make sure to deserialize the payload using that one instead of `Content-Type` from request headers

* clippy

* disable plist embed in generate_context in tests

* change file

* docs [skip ci]

* move unused_variables [skip ci]

* last commit regression [skip ci]

* fix test

* add example, do not text encode raw request

* check type instead of contenttype

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-07-12 09:52:53 -03:00
Amr Bashir
c01e87ad46 refactor(cli/migrate): use oxc kit to parse and migrate js/ts files (#10198)
* refactor(cli/migrate): use `oxc` kit to parse and migrate js/ts files

closes #10192

* fix tests

* use majic-string to perserve formatting

* more comments

* Discard changes to package.json

* Update cli-migrate-enhancemnets.md

* Update cli-migrate-enhancemnets.md

* more context

* add missing quotes, rename getcurrent

* fix change file

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-07-12 09:03:30 -03:00
Amr Bashir
2c076d63d0 ci: recognize contributors in releases (#10003) 2024-07-12 09:02:26 -03:00
Amr Bashir
ba9590aa92 feat!: add Listener and Emitter traits (#9640)
* feat!: add `Listener` and `Emitter` traits

* keep only trait implementation

* change file

* fix doctests

* fix build
2024-07-12 09:01:40 -03:00
Hamir Mahal
1a88fc1a9b style: simplify string formatting (#10259)
* style: simplfiy string formatting

* fix: file formatting in `core/`
2024-07-12 13:33:14 +03:00
Amr Bashir
2b1ceb40d3 refactor(api)!: renamed getCurrent functions to avoid ambiguity (#10229)
* refactor(api)!: renamed `getCurrent` functions to avoid ambiguity

closes #10193

* Update .changes/get-current-ambguity.md

* rename `getAll` and update docs and examples
2024-07-11 14:26:15 +03:00
Tony
249cdde9b6 Fix Serialize impl missing TSend (#10252) 2024-07-11 11:11:15 +02:00
Tony
11339418b1 chore(example/api): fix enter doesn't work on input with action button (#10254)
* Fix enter doesn't work on input with action button

* Use form
2024-07-11 11:06:36 +02:00
Tony
080b6e1272 enhance: use EventName on window's once and remove listener before calling handler (#10246)
* Refactor

* Revert event => void

* Change file
2024-07-10 19:59:01 +03:00
Brendan Allan
57612ab249 feat: add TSend generic to Channel (#10139)
* add TSend to Channel

* add changeset

* fix tray Channel

* Update .changes/ipc-channel-generic.md

---------

Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
2024-07-10 10:03:20 -03:00
Amr Bashir
15e1259966 fix(cli): parse cargo--target-dir flag (#10234)
* fix(cli): parse cargo`--target-dir` flag

closes #10190

* clippy
2024-07-10 16:01:04 +03:00
Lorenzo Rizzotti
b4e16f3d8e fix(android): fix Android Studio project plugin link (#10235)
* add plugin resolution to gradle settings

This is needed to make Android Studio able to link to the project

* reflect codegen edit in the plugin example
2024-07-10 14:26:06 +03:00
Tony
a4a7233081 chore(example): refactor api example (#10228) 2024-07-09 12:00:06 +03:00
Fabian-Lars
c734b9e3cd feat(bundler/windows): Update wix to fix vulnerabilities and add arm support (#9861) (#10072)
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-07-08 15:51:26 +03:00
Tony
afb102c59b fix(runtime-wry): window edge not working after setting resizable false and decorated false dynamically (#10211)
* Fix window edge not working
after setting resziable false and decorated false dynamically

* Fix example don't go crazy on resize

* cargo fmt
2024-07-08 15:24:55 +03:00
Amr Bashir
5998a90f3f fix(bundler): update nsis_tauri_utils to 0.4.1 (#10184) 2024-07-08 13:33:40 +02:00
zrq8
24aaf0f5af docs(tauri-macros): fix typo in documentation of do_menu_item macro (#10200) 2024-07-04 18:03:26 +02:00
Amr Bashir
94136578bc fix(cli/migrate): fix clipboard permissions migration (#10186)
closes #10185

The plugin has been updated recently and its permissions has changed.
2024-07-04 10:47:44 +03:00
Fabian-Lars
96f65fef36 fix(bundler): Fix updater bundler warning condition for v2 artifacts (#10188) 2024-07-04 10:47:14 +03:00
Tony
11aa7743e7 enhance!(nsis): use !ifmacrodef for installer hooks (#10177) 2024-07-03 05:48:22 +03:00
Lucas Fernandes Nogueira
55733aba9c fix(core): iOS compilation without the wry feature (#10176)
Ref https://github.com/tauri-apps/plugins-workspace/pull/1402
2024-07-03 05:40:01 +03:00
Jason Tsai
7bc6a2a1d6 feat(macos): support changing title bar style dynamically, close #9763 (#9788) 2024-07-03 05:36:51 +03:00
Amr Bashir
a7354f9a81 feat(core): mark AppHandle::restart and process::restart as diverging functions (#10171)
closes #10160
2024-07-02 07:58:34 -03:00
Tony
eeae0660e1 chore(deps): update cargo mobile2 to 0.12.2 (#10165) 2024-07-02 06:55:28 +03:00
github-actions[bot]
ff79161b0d apply version updates (#10166)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-07-01 23:30:21 -03:00
Lucas Nogueira
f5b121be6e Revert "apply version updates (#9926)"
This reverts commit 1cc9aa4b66.
2024-07-01 23:14:57 -03:00
github-actions[bot]
1cc9aa4b66 apply version updates (#9926)
Co-authored-by: FabianLars <FabianLars@users.noreply.github.com>
2024-07-01 22:40:01 -03:00
Tony
911242f092 feat!(core): add bundle createUpdaterArtifacts configuration (#9883)
* Add updater field

* Don't sign updaters when updater field is false

* Clippy

* Add updater to bundle migration

* Format

* Add updater config to api example

* No warning if update is not enabled

* Build

* Add change file

* We don't generate updater for dmg package

* Warning only for v1 compatible

* clean up

* More clean up

* little bit more

* Apply suggestions from code review

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

* Revert license header change

* Remove option around pubkey and msi args

* More migration tests

* Refactor private_key getter

* Only generate signature for updater for v1 compat

* Format

* Use map_err instead of anyhow context

* Don't generate updater for api example

* Fix misaligned comment

* Rename `updater` to `createUpdaterArtifacts`

* Revert changes in helloworld example

* Add warning for v1 compatible

* Update .changes/separate-updater-field.md

Co-authored-by: Lucas Nogueira <118899497+lucasfernog-crabnebula@users.noreply.github.com>

* update error messages [skip ci]

---------

Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
Co-authored-by: Lucas Nogueira <118899497+lucasfernog-crabnebula@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-07-01 08:34:58 -03:00
Simon Hyll
e7fd7c60d6 docs: fix broken link (#10147) 2024-06-28 12:48:28 +02:00
Tony
5878fb45ce chore: Update api example (#10144) 2024-06-28 11:21:54 +02:00
Amr Bashir
3afe828940 refactor!: change Webview::navigate to return result (#10134)
closes #9935
2024-06-27 09:43:34 -03:00
Amr Bashir
77d44215ef enhance(nsis): include uninstaller size in estimated size (#10137) 2024-06-27 09:43:13 -03:00
Amr Bashir
e93ca1df3b fix(core): fix InvokeBody::Raw deserialization (#10138)
closes #9948
2024-06-27 06:55:49 -03:00
Amr Bashir
27838365a6 fix(cli): parse --profile=<profile> syntax (#10135)
* fix(cli): parse `--profile=<profile>` syntax

ref: https://github.com/tauri-apps/tauri/issues/6255#issuecomment-2192466839

* Update tooling/cli/src/interface/rust.rs

* safe check next arg

* add test

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-06-27 06:53:26 -03:00
Simon Richard
167b51a8de feat: improve deserialization errors by using serde-untagged on enums (#9952)
* Use serde-untagged instead of derive trait for capabilities structs

* Update core/tauri-utils/Cargo.toml

* improve errors for other untagged enums

* clippy

* add tests, fix deserialization

* use schemars attribute instead

---------

Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-06-26 17:54:49 -03:00
Tony
878198777e feat(schema): make acl permissions schema unique (#9999)
* Make acl permissions schema unique

* Add change file

* use a hashset

* fix cli

* Revert "use a hashset"

This reverts commit 778d316f34.

* Revert "fix cli"

This reverts commit cfc0e39182.

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-06-26 17:13:55 -03:00
Jesper L. Nielsen
1601da5b52 fix(cli): removed alpha channel from default IOS AppIcons (#10114)
* bug: removed alpha channel from default IOS AppIcons

According to Apple's human interface guideline
(https://developer.apple.com/design/human-interface-guidelines/app-icons)
transparent or icons with alpha channel are not allowed, and will be rejected
upon upload to Apple appstore.

* Update .changes/ios-non-transparent-icons.md
2024-06-26 21:10:16 +03:00
Amr Bashir
eb76df4c4f fix(cli/plugin/new): construct path from components iterator instead of PathBuf::join (#10128)
fixes #10082

The problem that we were calling `PathBuf::join()` with value of collecting an empty iterator of path components which was equivalent to `PathBuf::from("ios").join("")` which will result in `ios/` with a trailing slash.

This is fixed by chaining iterators of path components and collecting only once into `PathBuf`, which will never append empy path component and will never append trailing slash.
```rs
[
  Component::Normal(OsStr::new("ios")),
  Component::Normal(&some_folder_name),
]
.into_iter()
.chain(other_components_iterator)
.collect::<PathBuf>()
```

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-06-26 11:11:31 -03:00
olexiyb
1f6e478c84 fix: #7614 - rebuild every time on macos because of Info.plist changes (#9878)
* fix: #7614: rebuild every time on macos because of Info.plist changes

* apply proposed patch from lucasfernog

* Update core/tauri-codegen/src/context.rs

Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>

* Update core/tauri-codegen/src/context.rs

Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>

* added changes file

---------

Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
2024-06-26 08:08:14 -03:00
Tony
7d85f7cf82 chore(deps): update tao to 0.28.1 (#10130) 2024-06-26 09:18:29 +03:00
Tony
f21029b1bc feat!(nsis): add an option to customize start menu folder (#9994) 2024-06-26 09:17:02 +03:00
Tony
a15a97594f chore: generate schema (#10129)
* Generate schema

* -

* Revert "-"

This reverts commit a456975cd2.
2024-06-26 09:04:01 +03:00
Tony
35110dba21 fix(nsis): delete app data button gone on higher scaling (#10106)
* Fix delete app data button gone on high DPI

* Add change file

* change back translation template

* Use w string instead of t

* Add in some comment explaining PerMonitorV2
2024-06-26 09:01:34 +03:00
Tillmann
bb50315c50 refactor: Improve Automated Permission Documentation Generation (#10113)
* generate permission table with html

* cargo fmt

* clippy fix

* clippy fix

---------

Co-authored-by: Lucas Nogueira <118899497+lucasfernog-crabnebula@users.noreply.github.com>
2024-06-26 07:59:47 +03:00
Fabian-Lars
61bbd8373f fix(bundler/wix): Add AUTOLAUNCHAPP and LAUNCHAPPARGS public properties (#10117) 2024-06-26 06:27:12 +03:00
Amr Bashir
6c9e24a683 fix: fix new clippy errors (#10054)
* fix: fix new clippy errors

* more clippy
2024-06-24 20:54:43 +03:00
Tony
cee0bfcd6c feat(core): make all tray and menu permissions enable by default (#10092)
* Make all tray and menu permissions on by default

* Update example capabilities

* Add change file
2024-06-24 19:50:06 +03:00
Amr Bashir
d4c908cfb8 fix(deps): update rust crate windows to 0.57 and webview2-com to 0.31 (#10048)
* fix(deps): update rust crate windows to 0.57 and webview2-com to 0.31

* revert fmt

* wry@0.41
2024-06-24 19:20:47 +03:00
Amr Bashir
669b9c6b5a feat(core): set gtk app id (#9621)
* feat(core): set gtk app id

ref: https://github.com/tauri-apps/tao/issues/910

* Update core/tauri-runtime-wry/Cargo.toml

* Discard changes to Cargo.lock
2024-06-24 19:20:03 +03:00
Tony
faf282ca6c fix(nsis): use runtime ${If} check to clean up deep link on uninstall (#10103) 2024-06-24 10:48:02 +03:00
Ali Mehasin
e13ea53a26 chore(README.md): alpha -> beta (#10107) 2024-06-24 09:37:40 +03:00
Matt Nield
82c2eb3284 chore: Correct grammar typo in documentation of generate_handler macro (#10110) 2024-06-24 09:01:44 +03:00
Tony
58821fc0e5 fix(nsis): esitmated size unit (#10086)
* Fix nsis esitmated size unit

* Add change file
2024-06-19 23:04:40 +02:00
chip
3bbfac8f3b don't use invoke key template name in comment (fix #10084) (#10088) 2024-06-18 19:42:40 +03:00
Tony
16641723b0 chore(deps): update js dev dependencies (#10051) 2024-06-14 05:28:06 +03:00
Amr Bashir
3fd84cb3c9 fix(NSIS): rewrite license file with BOM (#10049)
* fix(NSIS): rewrite license file with BOM

closes #9031

This also includes a change to NSIS bundler to use UTF8 by default

* refactor and cleanup
2024-06-13 18:31:27 +03:00
Tillmann
b2ff840e83 Feat: Improved Security Docstrings and Schema Newline Handling (#10028)
* Refactor Code Docs

* updated schemas

* cargo fmt whitespace fix

* downgrade cargo-platform to 0.1.7

---------

Co-authored-by: Lucas Nogueira <118899497+lucasfernog-crabnebula@users.noreply.github.com>
2024-06-13 18:31:12 +03:00
Yasunari Fujieda
4ca297b35b fix(core): check if listener.handler is undefined (#10007) 2024-06-12 19:32:06 +03:00
Fabian-Lars
c98f385cb5 fix(api.js): Export mocks module (#10044) 2024-06-12 19:22:55 +03:00
dependabot[bot]
85889f289b chore(deps): bump braces from 3.0.2 to 3.0.3 in /examples/api (#10040)
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-12 11:17:15 +02:00
Roy Laurie
79542f4d45 fix(cli): icon should render explicit svg text node fonts (fix: #10022) (#10039)
* fix(cli): icon should render explicit svg text node fonts (fix: #10022)

* fix(cli): icon should render explicit svg text node fonts (fix: #10022)

added a .change file for the fix
2024-06-12 04:25:11 +03:00
Pylogmon
f56cdc9e39 fix: missing depends for rpm package (#10016)
* fix: missing depends for rpm package

* chore: add changes
2024-06-12 04:24:36 +03:00
Jonas Kruckenberg
b9e11a8b97 fix(bundler): AppImage startup crash (#10036)
* Update appimage

* Update appimage.rs

* changefile

---------

Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
2024-06-11 17:07:17 +02:00
Amr Bashir
f44a2ec47c feat(cli): include default.toml and capabilities in plugin template (#10030)
* feat(cli): include default.toml and capabilities in plugin template

* replace execute usage with ping

* add to capabilities

* use default permission set
2024-06-11 13:06:46 +09:00
Tony
5b769948a8 feat(core): add include_image macro (#9959) 2024-06-06 06:03:11 +03:00
Tony
586a816e62 fix(bench): update time (#9993) 2024-06-06 05:22:13 +03:00
Tony
6f469534b0 fix(nsis): run app as normal user (#9944) 2024-06-06 03:53:11 +03:00
amrbashir
30bc3d2095 fix(nsis): always pass default compression even if nsis object is not defined 2024-06-05 20:05:03 +03:00
Amr Bashir
de7da04a62 fix(rpm): use product name for output package (#9974)
* fix(rpm): use product name for output package

ref: https://github.com/tauri-apps/tauri/pull/9375
ref: https://github.com/tauri-apps/tauri/pull/9375#issuecomment-2144997488

* use kebab-case product-name for rpm

* fmt
2024-06-05 19:57:32 +03:00
amrbashir
27abecd6e5 fix(bundler/nsis): SetCompress off not false 2024-06-05 19:35:40 +03:00
Amr Bashir
148f048871 feat(api): add defaultWindowIcon to app module (#9979) 2024-06-05 19:17:06 +03:00
Tony
3ab170917e feat(nsis): add an option to disable compression (#9932) 2024-06-05 19:07:49 +03:00
thewh1teagle
656a649744 feat(cli): add macos hardened runtime signing config option (#9318)
* feat(cli): add macos signing config option

* rename option to hardened_runtime

* chore(cli): use default true in hardened runtime config

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-06-05 18:04:08 +02:00
Amr Bashir
f29b788110 fix(core/wry): implement resizing natively on Windows (#9862)
closes #7388
closes #9510
closes #9464

ref #9268
ref #9053
ref #8770
ref #8750
ref #4012
2024-06-05 19:03:22 +03:00
Amr Bashir
fafc238f72 feat: add bundle > homepage option (#9977)
* feat: add `bundle > homepage` option

If unspecified, it will fallback to `homepage` define in Cargo.toml

closes #9949

* Update settings.rs
2024-06-05 19:01:48 +03:00
Lucas Fernandes Nogueira
40c0f44e1c fix(cli): plugin iOS Xcode project deployment target should be 13.0 (#9971) 2024-06-04 17:55:40 -03:00
Tony
f955f7b490 chore(deps): migrate dirs_next to dirs (#9929) 2024-06-04 06:03:25 +03:00
Tony
e6e17ad1c8 fix(core): add std feature to raw-window-handle (#9954) 2024-06-04 05:19:54 +03:00
Tony
ea78bf5558 fix(nsis): migrate old shortcuts by setting the path only instead of re-creating a new one (#9915) 2024-06-04 04:27:17 +03:00
Kareem Ebrahim
019a74e970 fix(cli): correct module name resolution for clipboard and globalShortcut plugins (#9931) 2024-06-03 21:57:46 +03:00
Amr Bashir
ddaabda365 feat: expose WebviewWinowBuilder::on_download (#9922)
* feat: expose `WebviewWinowBuilder::on_download`

closes #9921

* fix tests
2024-06-03 21:14:00 +03:00
Lucas Fernandes Nogueira
3cca5c2be8 chore(cli): update to new buildConfig format (#9924)
* chore(cli): update to new buildConfig format

the existing usage has been deprecated and will be removed on gradle plugin v9, as Android Studio warns

* add config to our lib too
2024-05-30 16:56:11 -03:00
github-actions[bot]
916a26c2a1 apply version updates (#9913) 2024-05-29 17:02:21 -03:00
Simon Hyll
0a6e62ac58 chore: update schema.json (#9908) 2024-05-29 16:33:39 -03:00
Amr Bashir
38df6ea1c1 fix(nsis): fix regression in shortcuts pointing to a non-existing file (#9909) 2024-05-29 16:33:24 -03:00
github-actions[bot]
a0a76cea2f Apply Version Updates From Current Changes (#9911)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-05-29 13:58:51 -03:00
Amr Bashir
dfd05441c7 Revert "feat(core): add app-region: drag to data-tauri-drag-region (#9789)" (#9860)
* Revert "feat(core): add `app-region: drag` to `data-tauri-drag-region` (#9789)"

This reverts commit ae6b13dfc0.

* Update pre.json

* change files

* Discard changes to .changes/pre.json
2024-05-29 12:20:05 -03:00
Simon Hyll
5e8aa6f946 fix: workaround for broken example (#9906)
`schemars` improperly parses the docstring, causing a missing newline before the codeblock closing tics.
2024-05-30 00:16:29 +09:00
Tillmann
4942d809ab feat: Auto Generation of ACL Schema File for Documentation (#9903)
* Add auto generated acl schema files for docs

* update CI

---------

Co-authored-by: Lucas Nogueira <118899497+lucasfernog-crabnebula@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@crabnebula.dev>
2024-05-29 09:32:58 -03:00
github-actions[bot]
594e3e2939 Apply Version Updates From Current Changes (#9869)
* apply version updates

* fix bundler version

* update lockfile

---------

Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-05-29 00:10:20 -03:00
Lucas Nogueira
94cca92aeb fix: regression extracting NSIS zip - target folder already exists 2024-05-28 23:37:06 -03:00
Amr Bashir
265c23886e refactor(cli&bundler): avoid renaming main executable and preserve cargo name (#9375)
* refactor(cli&bundler): avoid renaming main executable and reserve cargo name

closes #8109
closes #8349

* fix bundler

* fix test

* Discard changes to core/tauri-build/Cargo.toml

* revert Cargo.toml changes

* Discard changes to Cargo.lock

* Discard changes to tooling/cli/Cargo.lock

* lock file

* use product name for installers

* only warn for sign on windows

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
2024-05-28 13:50:41 -03:00
Amr Bashir
e8f6eb59a5 refactor(core)!: include all args in Env.args_os, closes #9430 (#9552)
* refactor(core)!: include all args in `Env.args_os`, closes #9430

* skip first arg on restart fn

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-05-28 13:49:44 -03:00
Amr Bashir
19b696b61c fix(build): avoid copying resource onto itself (#9710)
* fix(build): avoid copying resource onto itself

closes #9666

* canonicalize once

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-05-28 13:48:52 -03:00
Amr Bashir
ccc3ea729d fix(codegen): use TAURI_ENV_TARGET_TRIPLE to determine the current platform-specific config (#9646)
* fix(codegen): use `TAURI_ENV_TARGET_TRIPLE` to determine the current platform-specific config

* set env var

* Update .changes/tauri-codegen-use-correct-env.md

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-05-28 13:48:24 -03:00
Amr Bashir
bcc63bf36d chore(examples/streaming): use get getrandom to generate boundary (#9546) 2024-05-28 11:50:55 -03:00
Jason Tsai
8b032c3cf6 fix(ios): add LaunchScreen.storyboard to iOS project template, fix#9853 (#9896)
* fix(ios): add LaunchScreen storyboard file

* chore: add changelog
2024-05-28 11:46:42 -03:00
Jason Tsai
adac2185a3 fix(android): check version code in release mode (#9898) 2024-05-28 11:37:38 -03:00
Jason Tsai
aa55e03354 fix: set window origin default to null (#9899) 2024-05-28 11:34:36 -03:00
Lucas Fernandes Nogueira
3f1c59d684 chore(cli): enhance mobile build by only compiling selected target (#9894)
Co-authored-by: Lucas Nogueira <lucas@crabnebula.dev>
2024-05-28 07:53:32 -03:00
Jason Tsai
71a5e2ba24 fix(android): allow and escape Kotlin keywords as package identifier, closes #9743 (#9799)
* fix(android): escape kotlin only keyword in template

* fix: escape keywords in wry templates aswell

* chore: add changelog

* chore: remove unused code

* fix(android): wry template, package name should reverse

* update cargo-mobile2

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-05-28 07:52:48 -03:00
Fabian-Lars
4754786aa2 fix(bundler/macos): Fix incorrect deep link plist property (#9885) 2024-05-27 15:59:00 -03:00
Lucas Fernandes Nogueira
9970d88bec chore(android): update to latest Gradle (#9892) 2024-05-27 15:58:00 -03:00
Rajaniraiyn R
aaecb6a72e refactor: rename tauri::dev to is_dev and mark as constant fn (#9890)
* refactor: made `tauri::dev` as constant function

this enables the `tauri::dev()` can be used as const or static

* is_dev && change files

---------

Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
2024-05-27 19:03:48 +03:00
Tony
27fd8cc56c nsis_tauri_utils::download -> NSISdl::download (#9887) 2024-05-26 17:59:13 +03:00
Amr Bashir
9e4b2253f6 feat(cli): add tauri bundle subcommand (#9734)
* feat(cli): add `tauri bundle` subcommand

closes #8734

* license header

* log application path after building

* fix no-bundle check

* typo

* enhance error with deep causes

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-05-25 11:46:55 -03:00
Amr Bashir
5462e5cadc feat(nsis): support installer hooks (#9731)
* feat(nsis): support installer hooks

closes #9668

* update change files

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-05-25 10:23:08 -03:00
Amr Bashir
418d72d72d feat(bundler/nsis): add /UPDATE flag (#9559)
* feat(bundler/nsis): add `/UPDATE` flag

* typo

* typo

* skip webview2 installation on updating
2024-05-25 09:41:09 -03:00
Lucas Fernandes Nogueira
80aa504987 chore(cli): update Android target SDK to 34 (#9870) 2024-05-25 07:46:34 -03:00
Amr Bashir
c4410daa85 feat(tray): add enter, move and leave events (#9777)
* feat(tray): add `enter`, `move` and `leave` events

closes #8584

* update api example

* check button state [skip ci]

* fix enum [skip ci]

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-05-24 14:56:32 -03:00
Amr Bashir
276c4b1438 fix(Windows): sync menubar theme with the window theme (#9832)
* fix(Windows): sync menubar theme with the window theme

ref: https://github.com/tauri-apps/muda/issues/170

* fix moc runtime

* muda 0.13.4

* missing change file

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-05-24 14:23:54 -03:00
Jonas Kruckenberg
9ac930380a chore: emit rustc-check-cfg for nightly (#9850)
* fix: emit cargo cfg alias using new syntax too

* Update lib.rs

* fixes for other crates

* clippy

* readd clone

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-05-24 13:12:51 -03:00
Mariotaku
fd2d7cf8b3 feat(android): aware of version info from tauri config (#9856)
* feat(android): versionName and versionCode support

* formatted code and updated schema

* fix config, cleanup generation

* update docs

* mention default version for android

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-05-24 10:56:21 -03:00
Amr Bashir
d6d3efbd12 feat(bundler): support custom sign command on Windows (#9865)
* feat(bundler): support custom sign command on Windows

closes #7188
closes #9578

* fix double quotes

* fix build

* fix build

* clippy

* Update sign.rs

* clippy && replace `winreg` with `windows-registry`

* remove log [skip ci]

* Apply suggestions from code review

* tweak arg so path with spaces work on macOS

* create nsis toolset paths

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-05-24 10:25:13 -03:00
Amr Bashir
fc1543c65e refactor!: remove skip_webview_install option (#9864) 2024-05-24 10:13:55 -03:00
Jason Tsai
1df5cdeb06 refactor!: use tauri.conf.json > identifier as package name and bundle id, close #9851 (#9858)
* fix(android): use identifier as Android package name

* update android_binding and android_fn interface

* chore: rename TAURI_ANDROID_PACKAGE_PREFIX to TAURI_ANDROID_PACKAGE_NAME

* revert back to split prefix and app_name

* rename `domain` to `identifier`

* add change log

* simplify reverse config identifier

* Update .changes/mobile-use-identifier-as-id.md

* Update core/tauri-build/src/lib.rs

* lint

* cargo-mobile2 0.12

* fmt

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-05-24 09:22:41 -03:00
Lucas Fernandes Nogueira
8a1ae2deaf feat(plugin): add option to use a Xcode project for iOS (#9843)
* wip

* add option to use xcode project

* configuration

* clear env

* add change file

* remove xcuserdatad

* delete xcuserstate
2024-05-24 08:23:41 -03:00
github-actions[bot]
51b5d581b5 Apply Version Updates From Current Changes (#9752)
* apply version updates

* fix tests

* fix tests

---------

Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-05-22 23:20:59 -03:00
Tillmann
d950ac1239 Merge pull request from GHSA-57fm-592m-34r7
* only allow tauri-initialized frames to call the ipc

* dont regenerate the invoke key

* return early if the invoke key does not match

* add change file

* wry 0.40

* update change file

* trigger ci

---------

Co-authored-by: Chip Reed <chip@chip.sh>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-05-22 17:49:08 -03:00
Fabian-Lars
beda18bce9 fix(cli/add): Fix handling of more rust-only and non cross platform plugins (#9855) 2024-05-22 19:57:57 +03:00
Tony
ae6b13dfc0 feat(core): add app-region: drag to data-tauri-drag-region (#9789) 2024-05-22 19:45:39 +03:00
Amr Bashir
0b690f242f fix(core): export UriSchemeResponder (#9845) 2024-05-21 20:13:40 +03:00
wackbyte
f4d67818f8 docs: fix typo in WebviewBuilder (#9847) 2024-05-21 20:01:52 +03:00
Fabian-Lars
781d74799a fix(bundler/rpm): Reduce compression level to gzip/6 (#9840) 2024-05-21 19:03:47 +03:00
Lucas Fernandes Nogueira
5d20530c91 feat(core): add AppHandle::set_activation_policy (#9842) 2024-05-21 11:45:08 -03:00
Amr Bashir
d0d974fa5e fix(bundler/nsis): fix registering deep-link protocols (#9833)
* fix(bundler/nsis): fix registering deep-link protocols

* Update bundler-nsis-deep-links.md

---------

Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
2024-05-21 11:01:37 +02:00
ryoichi
0c61784efb fix(example/state): correct invoke method path to __TAURI__.core.invoke() (#9817) 2024-05-19 11:16:23 +02:00
ryoichi
fe90a2925e fix(examples/parent-window): fix typo in import (#9816) 2024-05-19 10:54:51 +02:00
Angel S. Moreno
c4bacce2c2 docs: update events emitTo @since JSDoc tag (#9811)
* Update event.ts 

EmitTo is new to v2 and was not in v1

* replaced @since instead of removing
2024-05-18 01:10:15 +03:00
Jason Tsai
86250a476e ci: fix typo in android test workflow (#9800) 2024-05-16 18:44:48 +02:00
Lucas Fernandes Nogueira
be95d8d37c fix(utils): incorrect ToTokens impl for Capability (#9782) 2024-05-15 03:52:05 +03:00
Lucas Fernandes Nogueira
e713ceb75d chore(cli): remove unused iOS app icon (#9783) 2024-05-15 03:51:17 +03:00
Siddharth
ec0e092ecd feat: adds monitor_from_point method (#9770) 2024-05-14 19:48:51 +03:00
Tony
31aa90f514 chore(example): fix duplicated windows implement and update deps (#9772) 2024-05-14 13:25:15 +02:00
Tillmann
67ea20999b ci: Fix cargo vet command typo (#9771)
Co-authored-by: Lucas Nogueira <118899497+lucasfernog-crabnebula@users.noreply.github.com>
2024-05-14 12:39:12 +02:00
Lucas Fernandes Nogueira
4a33bc6a62 fix(cli): pnpm detection on mobile init and xcode-script (#9553)
* fix(cli): pnpm detection on mobile init

* small outputFiles fix

* same check for xcode-script

* Discard changes to tooling/cli/node/index.js

* Discard changes to tooling/cli/node/index.d.ts

---------

Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
2024-05-11 23:32:05 -03:00
Amr Bashir
bd64982fe6 ci: pull .crate file from workspace target directory (#9733) 2024-05-10 02:32:25 +03:00
Amr Bashir
caec19fce3 chore(deps): remove unused deps from cli (#9711)
* chore(deps): remove unused deps from cli

* fix mac build

* clippy
2024-05-09 23:35:02 +03:00
github-actions[bot]
6968c40053 Apply Version Updates From Current Changes (#9722)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-05-09 15:22:54 -03:00
Lucas Fernandes Nogueira
5a85ee2826 Revert "Apply Version Updates From Current Changes" (#9723)
This reverts commit 1bee4f279f.
2024-05-09 14:02:22 -03:00
github-actions[bot]
1bee4f279f Apply Version Updates From Current Changes (#9693)
Co-authored-by: amrbashir <amrbashir@users.noreply.github.com>
2024-05-09 12:28:30 -03:00
Lucas Fernandes Nogueira
c0bcc6c0b7 fix(tauri-runtime-wry): window draw span not closing (#9717)
* fix(tauri-runtime-wry): window draw span not closing

* use .retain
2024-05-09 10:09:41 -03:00
Lucas Fernandes Nogueira
fedca73860 fix(core): IPC tracing field incompatibility (#9720) 2024-05-09 15:41:41 +03:00
Tillmann
e78bfa722e fix: Only provide cargo-vet suggestions for now (#9714)
As the workflow is failing because of a larger number of unvetted dependencies I transform this to suggestions only until we have a better vetting workflow and resources to audit available.
2024-05-09 09:04:35 -03:00
Amr Bashir
6f281b2e30 ci: pin cross to a commit before they bumped msrv (#9712)
* ci: pin `cross` to a commit before they bumped msrv

bump commit: 7129d5ab15
pre-bump commit: 1b8cf50d20

* Update test-core.yml
2024-05-09 08:58:45 -03:00
Amr Bashir
a813caf2e4 chore(examples/parent-window): fix import closes #9704 (#9705)
* chore(examples/parent-window): fix import

closes #9704

* lock file
2024-05-08 19:06:07 +03:00
Tillmann
82e1c75594 chore: Update cargo-vet entities and update lockfile (#9702)
Co-authored-by: Lucas Nogueira <118899497+lucasfernog-crabnebula@users.noreply.github.com>
2024-05-08 16:01:49 +03:00
Golden Water
78839b6d2f feat(macos): Expose tao event Event::Reopen, closes #3084 (#4865)
* feat: expose tao event Event::Reopen

* Update .changes/event-reopen.md

* deps(core::tauri-runtime-wry): update tao to 0.28
2024-05-07 21:36:48 +03:00
Amr Bashir
783ef0f2d3 refactor!(core): return result in Webview/WebviewWindow::url getter (#9647)
* refactor!(core): return result in `Webview/WebviewWindow::url` getter

* clippy

* Apply suggestions from code review
2024-05-07 17:16:17 +03:00
Fabian-Lars
d2fc48f0e6 fix: rename kill-children.sh to tauri-stop-dev-processes.sh (#9669) 2024-05-07 16:45:37 +03:00
Lucas Fernandes Nogueira
a5205f179e fix(utils): wrong ToTokens impl of the window proxy_url config (#9691) 2024-05-07 15:59:58 +03:00
Tony
5529c5ab69 ’ -> ' (#9686) 2024-05-07 11:22:36 +02:00
Tony
5ce0737e9a Update denpendencies (#9688) 2024-05-07 11:22:05 +02:00
github-actions[bot]
83acd85788 apply version updates (#9639)
Co-authored-by: FabianLars <FabianLars@users.noreply.github.com>
2024-05-07 00:02:54 +02:00
Hankung
3fbc1703f1 fix: schemars 0.8.18 compatibility (#9676)
* fix: schemars 0.8.18 compatibility

* fix cli cargo issue

* update tauri-utils v1

---------

Co-authored-by: FabianLars <fabianlars@fabianlars.de>
2024-05-06 23:22:35 +02:00
Tony
8385733a69 chore: rename .cargo/config to .cargo/config.toml (#9655) 2024-05-04 17:54:29 +03:00
Andrej Mihajlov
07ff78c2de feat(tray): add TrayIcon::rect method (#9615) 2024-05-03 05:56:54 +03:00
Eugene Hauptmann
f1badb9fb3 fix: fixed typo in menu and submenu tooling (#9645)
* Update menu.ts

replaced `Platform-spcific` to `Platform-specific`

* Update submenu.ts

replaced `Platform-spcific` to `Platform-specific`
2024-05-02 21:20:34 +03:00
Amr Bashir
97ec422f22 fix(cli/icon): return with an error instead of panic (#9638)
* fix(cli/icon): return with an error instead of panic

closes #9636

* Update .changes/cli-icon-non-0-exit.md
2024-05-02 13:26:53 +02:00
Oscar Beaumont
7f6d2698c9 fix(core): better error when deserializing plugin config (#9631)
* Better error for errors decoding plugin config

* changes
2024-05-02 00:44:40 +03:00
Oscar Beaumont
8a71858eb2 feat: configure a default runtime for menu and tray icon types (#9630)
* Use `tauri::Wry` as default runtime for menu types

* do it properly

* changes

* same for tray icon

* change file

---------

Co-authored-by: amrbashir <amr.bashir2015@gmail.com>
2024-05-02 00:44:15 +03:00
Oscar Beaumont
bf2635ab62 fix(plugin): improve error for missing links property (#9632)
* Better error

* Improve errors
2024-05-02 00:40:31 +03:00
Oscar Beaumont
cd5580749c update link (#9637) 2024-05-01 18:58:17 +03:00
Fabian-Lars
b0421cbb21 chore: rebuild bundle.global.js (#9625) 2024-04-30 21:30:09 +02:00
github-actions[bot]
d5775ed6a4 apply version updates (#9617)
Co-authored-by: amrbashir <amrbashir@users.noreply.github.com>
2024-04-30 19:31:34 +02:00
Fabian-Lars
007af10d43 Partially Revert "Apply Version Updates From Current Changes (#9551)" (#9620)
This partially reverts commit 108ab9094a.
2024-04-30 19:23:26 +03:00
Zihan Hu
aa080696e0 fix(core): fix incorrect isTauri return type (#9618) 2024-04-30 19:03:49 +03:00
Tony
1bb87a3a22 feat(cli): generate signature for updater-enabled bundles (#9446) 2024-04-30 18:45:24 +03:00
Tony
6c047aee14 fix(windows): hide windows on cleanup (#9612)
* Hide windows on cleanup

* Add change file

* Move hide window to a loop above
2024-04-30 18:37:17 +03:00
github-actions[bot]
108ab9094a Apply Version Updates From Current Changes (#9551)
* apply version updates

* update wry to 0.39.3 to prevent dependency version mismatches

---------

Co-authored-by: FabianLars <FabianLars@users.noreply.github.com>
Co-authored-by: FabianLars <fabianlars@fabianlars.de>
2024-04-30 16:22:46 +02:00
renovate[bot]
380c507d38 chore(deps) Update Rust crate heck to 0.5 (dev) (#9555)
* chore(deps) Update Rust crate heck to 0.5

* let's help renovate out :)

* remove unicode feature

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: FabianLars <fabianlars@fabianlars.de>
2024-04-30 14:52:50 +02:00
Amr Bashir
128c580009 chore(cli/deps): update nsis-tauri-utils to 0.3 (#9604) 2024-04-30 13:54:49 +02:00
Amr Bashir
3f08054885 refactor(cli): use windows-sys instead of winapi (#9603)
* refactor(cli): use `windows-sys` instead of `winapi`

* Update cli-windows-sys.md
2024-04-29 20:50:37 +03:00
Amr Bashir
477bb8cd4e feat: add cursor_position getter (#9297)
* feat: add `cursor_position` getter

closes #9250

* js api

* Update mod.rs

* fix build on iOS and android

* use existing wrapper

* fmt

* adjust wording

* update docs

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-04-29 18:28:01 +03:00
Fabian-Lars
5a213a4bdc ci: Fix publishing of cli-macos-x64 (#9584) 2024-04-29 16:23:13 +03:00
Lucas Fernandes Nogueira
eff778b8f0 fix(core): run plugin init script in a separate context (#9571) 2024-04-28 11:15:29 -03:00
Fabian-Lars
6d5a396ae9 ci: Remove nodejs14 test in cli.js publishing workflow (#9568) 2024-04-25 12:45:15 +02:00
Lucas Fernandes Nogueira
98101cb17f fix(core): allow any headers on custom protocol IPC (#9561) 2024-04-25 01:00:03 +02:00
Tony
68c39b8c0c refactor(nsis): use nsis's built-in com plugin instead of ApplicationID plugin (#9527)
* Use WinShell instead of ApplicationID

* Uninst shortcut before removing start menu one

* Use nsis's buit-in com plugin instead of WinShell

* Remove download ApplicationID code

* Add change file

* Clippy and format

* Allow dead code on extract_zip

* Qualify extract_zip path to make clippy happy

* Move macro up
2024-04-24 16:14:30 +02:00
Oscar Beaumont
12b4159bda feat(core): add Specta integration (#9392) 2024-04-23 04:29:39 +02:00
github-actions[bot]
ac9bfada4a Apply Version Updates From Current Changes (#9548)
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-04-22 17:09:51 -03:00
Amr Bashir
e22e61af6c Revert "Apply Version Updates From Current Changes (#9489)" (#9549)
This reverts commit 198f11ae7b.
2024-04-22 15:42:46 -03:00
github-actions[bot]
198f11ae7b Apply Version Updates From Current Changes (#9489)
Co-authored-by: amrbashir <amrbashir@users.noreply.github.com>
2024-04-22 19:02:28 +02:00
Amr Bashir
07f2af0002 chore(deps): update to windows-rs 0.56 (#9493)
* chore(deps): update to windows-rs 0.56

* lockfile

* use latest versions

* update lock file
2024-04-22 18:33:16 +02:00
Tony
de7bcf3cc5 fix(bundler/nsis): auto append product name when choosing a new install path (#9478)
* Fix picking install folder
doesn't auto append product name folder for nsis installer

* Add change file

* patch -> patch:enhance

* Update nsis-append-product-name.md
2024-04-22 17:59:16 +02:00
Tony
a1e0e268f0 fix(utils): temp permission file names on windows (#9477)
* Replace `tauri:` with `tauri-`

* Add change file

* Apply suggestions from code review

* patch -> "patch:bug"

---------

Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
2024-04-22 11:18:16 -03:00
André Kohn
be7eab209c fix(api): add type definitions to package.json exports (#9486) 2024-04-22 16:18:00 +02:00
Amr Bashir
aaa332c6e7 fix(cli/migrate): migrate only known plugins (#9540)
* fix(cli/migrate): migrate only known plugins

closes #9533

* use tuple

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-04-22 15:28:19 +02:00
Lucas Fernandes Nogueira
35b25f7e5c fix: optional chaining is not supported on older webviews (#9530) 2024-04-22 10:27:45 -03:00
Amr Bashir
70c51371e0 feat(core): add isTauri (#9539)
* feat(core): add `isTauri`

* generate api
2024-04-22 15:07:11 +02:00
Amr Bashir
005fe8ce1e fix(runtime-wry): apply closable, maximizable and minimizable effects from config (#9410)
closes #9409
2024-04-21 11:43:30 -03:00
Graham Held
cf615e8e4d Set internal message ID to nextId after handling pending messages (#9463)
* Set internal message ID to nextId after handling pending messages

* add change file

* update bundle

* update reference.md

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-04-21 11:21:34 -03:00
dependabot[bot]
de7a294cc4 chore(deps): bump rustls from 0.22.3 to 0.22.4 (#9512)
Bumps [rustls](https://github.com/rustls/rustls) from 0.22.3 to 0.22.4.
- [Release notes](https://github.com/rustls/rustls/releases)
- [Changelog](https://github.com/rustls/rustls/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rustls/rustls/compare/v/0.22.3...v/0.22.4)

---
updated-dependencies:
- dependency-name: rustls
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-21 11:05:16 -03:00
Amr Bashir
88c0ad9cf5 fix(build): check if permissions dir exists before adding cargo:rerun-if-changed (#9471)
closes #9062
2024-04-21 11:04:46 -03:00
Tony
daf018e4f5 fix(core): clear resource table in cleanup_before_exit (#9505)
* Clear resource table in `cleanup_before_exit`

* Add change file

* Update .changes/cleanup-resource-table.md
2024-04-19 05:50:12 +02:00
Amr Bashir
05088b0679 feat(bundler): expose {{long_description}} to custom templates (#9494)
* feat(bundler): expose `{{long_description}}` to custom templates

closes #9437

* fix linux
2024-04-18 17:09:05 +02:00
Fabian-Lars
e64b8f1dce chore: merge remote-tracking branch '1.x' into v2 (#9479)
* chore: port PR template from `dev` branch (#9004)

* fix(runtime-wry): avoid panic during clipboard initialization on wayland (#9003)

closes #8964

* ci: downgrade thread_local to 1.1.7 in msrv list (#9012)

* Apply Version Updates From Current Changes (v1) (#9013)

Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>

* fix(bundler): escape potentially problematic strings in an XML (#9040)

* fix(bundler): escape potentially problematic strings in an XML (#9030)

- replace characters invalid in XML with their escaped form to properly bundle resources with such characters in their pathnames.

* change file

* fix(cli): use `matched_path_or_any_parents` when checking if a file is ignored (#8903)

* fix: taurignore ignoreing folders not working for watch

* docs: add to changes

* fix: panic: path is expected to be under the root

* Update taurignore-ignoring-folders-not-working-for-watch.md

* Update taurignore-ignoring-folders-not-working-for-watch.md

* fix(cli): migrate to stable features of `log` crate (#9119)

* fix(cli): migrate to stable features of `log` crate

* to_cow_str

* Apply Version Updates From Current Changes (v1) (#9074)

Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>

* fix(core/path): remove suffix in basename only once (#9166)

* fix(core/path): remove suffix in basename only once

ref: #9064

* Update tooling/api/src/path.ts

---------

Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>

* fix(cli): Clone Options struct after mutating it. (#9188)

* fix(bundler): Fix nsis resource paths on non-windows build systems. (#9281)

* fix(bundler): Fix nsis resource paths on non-windows build systems.

* remove leftover from alternative

* fix(bundler/nsis): Don't use /R flag on installation dir (#9282)

* fix(cli): upgrade heck to better support Chinese/Japanese prodcut name on Linux (#9298)

* chore: fix clippy false positive (#9329)

* fix(cli/info): fix crash when checking node version (#9411)

closes #9396

---------

Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
Co-authored-by: bifs <127015052+bifs@users.noreply.github.com>
Co-authored-by: anatawa12 <anatawa12@icloud.com>
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
Co-authored-by: Jet Li <jing.i.qin@icloud.com>
2024-04-18 05:21:21 +02:00
Amr Bashir
a07b513201 fix(core): add permission for window.start_resize_dragging (#9490)
closes #9485
2024-04-17 18:25:35 +02:00
Amr Bashir
8a63ceb4f3 feat(cli): ignore .DS_Store by default for dev watcher (#9473)
* feat(cli): ignore `.DS_Store` by default for dev watcher

closes #9451

* Update cli-ds-store-dev-watch.md
2024-04-17 14:51:24 +02:00
Amr Bashir
639d9abfdf fix(bench): fix bench compilation (#9474) 2024-04-17 14:50:58 +02:00
Jingyu
3fe9ae8520 docs(webview): fix doc typo in webview window builder (#9476)
* fix(webview): typo in webview window builder document

* Update core/tauri/src/webview/webview_window.rs

---------

Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
2024-04-16 12:34:09 +02:00
Marc Espin
55bf4eb51c fix: Remove old links and updated CONTRIBUTING.md (#9472)
* fix: Remove old links update CONTRIBUTING.md

* update
2024-04-16 00:12:33 +02:00
github-actions[bot]
535691a711 Apply Version Updates From Current Changes (#9348)
Co-authored-by: amrbashir <amrbashir@users.noreply.github.com>
2024-04-15 09:32:40 -03:00
Lucas Fernandes Nogueira
02eaf07872 fix(tauri-runtime-wry): Window::inner_size crash when the window has no webviews (#9428) 2024-04-15 13:28:59 +02:00
Amr Bashir
c8a82ad223 fix(core): fix deadlock when using resources_table in menu/image/tray plugins (#9379)
* fix(core): fix deadlock when using resources_table in menu/image/tray plugins

closes #9369

* document the resources_table requirement
2024-04-15 12:15:37 +02:00
Amr Bashir
48a7a78f80 fix(api): fix dpi types serialization (#9376)
* fix(api): fix dpi types serialization

closes #9370

* Update api-position-size-args.md

* lint

* setMinSize and setMaxSize

* Update api-position-size-args.md
2024-04-15 12:04:20 +02:00
Amr Bashir
1d39876f97 fix(cli): add missing closing bracket (#9466) 2024-04-15 11:59:23 +02:00
Tony
f22ea29986 fix(core): revert fix visibility change (#9246) (#9465)
* Revert "fix(windows): changing WebView visibility on hide/show/minimize (#9246)"

This reverts commit 5bd47b4467.

* Change files

* change file

* Update revert-fix-visibility-change.md
2024-04-15 11:50:11 +02:00
Fabian-Lars
f1674fce6d feat(core/windows): Convert UNC paths to simple paths in JS apis. (#9420) 2024-04-15 11:41:31 +02:00
Kornel
73c1c2d338 fix(cli/migrate): tolerate non-UTF-8 in migration (#9457) 2024-04-15 11:39:53 +02:00
Amr Bashir
9331435a50 fix(cli/info): fix crash when checking node version (#9412)
closes #9396
2024-04-15 11:39:19 +02:00
Kornel
cd23bb2ca2 fix(cli): clippy warnings on macOS (#9456) 2024-04-15 09:22:19 +02:00
Kornel
8f4b1050c4 feat(cli): show full expected path of frontendDist if not found (#9459)
* feat(cli): show full expected path of frontendDist
2024-04-15 09:18:46 +02:00
Lucas Fernandes Nogueira
32b213399f fix(core): deadlock on window create (#9429)
* fix(core): deadlock on window create

* Update mod.rs

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

---------

Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
2024-04-10 10:49:59 -03:00
Tony
4973d73a23 feat: Add zoom hotkey polyfill for non windows platforms (#9386) 2024-04-08 22:42:51 +02:00
Tony
58a7a552d7 feat: Expose webview zoom (#9378)
* Expose webview zoom

* Add js side support

* Generate bundle script

* Format

* Add change file
2024-04-05 02:10:07 +02:00
dependabot[bot]
b231f4c2e5 chore(deps-dev): bump vite from 4.5.2 to 4.5.3 in /examples/api (#9377)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.5.2 to 4.5.3.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v4.5.3/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v4.5.3/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-04 03:39:51 +02:00
Tony
9273d7b379 feat(windows): Expose webview2 zoom hotkeys from wry (#9352)
* Expose webview2 zoom hotkeys from wry

* Add change file

* Apply suggestions from code review

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

* Regenerate schema files

---------

Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
2024-04-03 20:14:17 +02:00
Mariotaku
36b4c12497 feat(bundler): added provides, conflicts and replaces for deb and rpm (#9331)
* feat(bundler): added provides, conflicts and replaces for deb and rpm packages

* added change file

* update .changes/deb-rpm-provides-conflicts-replaces.md according to review

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

* inlined provides/conflicts/replaces(obsoletes) variables

* fmt
2024-04-03 18:02:56 +02:00
Fabian-Lars
2f20fdf1d6 fix(core): compile error for 32bit targets (#9361)
* fix(core): compile error for 32bit targets

* clippy giving me trust issues
2024-04-03 17:19:21 +02:00
Fabian-Lars
6251645acf fix(core): Update webview metadata on window close (#9360)
* fix(core): Update webview metadata on window close

* make it multiwebview friendlier

* support webview.close() too -> THIS IS STILL MISSING AN EVENT LIKE tauri://destroyed !!!
2024-04-03 17:18:13 +02:00
Tony
4c2e7477e6 fix(windows) window center doesn't consider taskbar size (#9309)
* Fix window center doesn't consider taskbar size

* Clean up

* Add change file

* Calculate title bar size on initial creation

* Comment about not adding in rect.bottom

* Tweak comment

* Fix center existing window a bit too high

* us NSWindow::center on macOS

* skip if undecorated
2024-04-02 20:32:30 +02:00
github-actions[bot]
1a58cdf2ed Apply Version Updates From Current Changes (#9279)
* apply version updates

* fix bundler version

* fix bundler version

---------

Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-04-02 15:15:12 -03:00
Amr Bashir
284eca9ef2 refactor(core): scope JS resources to the webview (#9272)
* refactor(core): scope JS resources to the webview

* clippy

* change files

* swap args order

* more clippy

* just add them on each type

* clippy

* macro docs

* Update mod.rs

* use random rid

* revert resource table arg change

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-04-02 14:41:47 -03:00
Amr Bashir
8276ab767b chore(cli/plugin): update plugin template (#9346)
closes #9342
2024-04-02 13:59:26 -03:00
Amr Bashir
f8fde4f845 fix(cli): disable directory traversal in builtin dev server (#9344)
* fix(cli): disable directory traversal in builtin dev server

This PR also includes a cleanup refactor of the server

* Update builtin_dev_server.rs
2024-04-02 13:59:16 -03:00
Amr Bashir
dd07a36749 chore(cli/add): clippy, use char instead of str (#9333) 2024-04-01 14:22:30 -03:00
amrbashir
93e0e1392e feat(cli/add): support specifying version
closes #9325
2024-04-01 18:22:26 +02:00
Lucas Fernandes Nogueira
06833f4fa8 feat(ipc): enhance request URL checks, update wry, refactor file drop (#9100)
* feat(ipc): enhance request URL checks

* actually use req url

* fix windows, tests

* wry 0.38, file drop refactor

* wry 0.38.1

* adjust for windows [skip ci]

* wry 0.38.2 [skip ci]

* update to latest tao, wry, muda and tray-icon

* change tag

* serde

* use published crates

* downgrade cargo-platform to 0.1.7

---------

Co-authored-by: amrbashir <amr.bashir2015@gmail.com>
2024-04-01 13:03:39 -03:00
Amr Bashir
b78f90bc9c chore(cli): fix clippy errors (#9330) 2024-04-01 12:44:12 -03:00
Lucas Fernandes Nogueira
a804a70a7a feat(isolation): script now removes itself to hide key from DOM (#9328) 2024-04-01 12:43:29 -03:00
Lucas Fernandes Nogueira
7c334cb185 feat(isolation): make encrypt key unextractable (#9327) 2024-04-01 12:43:19 -03:00
scottpledger
6703b7cbca fix: use $CARGO_MANIFEST_DIR to fully specify include_dir paths in tauri-cli (#9310)
* Allow tauri-cli to work with Bazel.

Signed-off-by: Scott Pledger <scottpledger2005@gmail.com>

* change file

---------

Signed-off-by: Scott Pledger <scottpledger2005@gmail.com>
2024-04-01 16:43:52 +02:00
Tony
5bd47b4467 fix(windows): changing WebView visibility on hide/show/minimize (#9246)
* Fix not changing visibilty for windows webview

* Add change file

* Move is_visible calculation to the caller

* Rename update to set
2024-03-28 16:25:46 +02:00
Vladimir Stoilov
259d845290 feat(bundler): add post/pre install/remove scripts for linux deb and rpm packages (#9209)
* feat(cli/add): add post/pre install/remove scripts for linux

* fix(cli): clippy errors

* fix(cli): remove script struct from deb/rpm bundle

* change files and aliases
2024-03-28 05:13:26 +02:00
Fabian-Lars
c33f6e6cf3 fix(core): Announce new webviews and windows (#9211)
* fix(core): Announce new webviews and windows

fixes #9200
fixes #8144

* fix js import in example

* emit created events to all listeners.

* remove duplicate event
2024-03-28 02:23:19 +02:00
Lucas Fernandes Nogueira
e7cd973123 fix(tauri-runtime-wry): window inner size regression on macOS, closes #9236 (#9276)
* fix(tauri-runtime-wry): window inner size regression on macOS, closes #9236

* lint
2024-03-26 11:38:57 -03:00
github-actions[bot]
7898b601d1 Apply Version Updates From Current Changes (#9222)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-03-20 19:59:04 -03:00
Lucas Fernandes Nogueira
b525ddadf7 fix(cli): openssl is no longer a required macOS dep (#9237) 2024-03-20 19:15:58 -03:00
Fabian-Lars
ee028c414d fix(core): Fix menu.remove trying to remove the item from itself instead of from the menu (#9225)
follow up to https://github.com/tauri-apps/tauri/pull/9219/
2024-03-20 18:36:51 -03:00
Tillmann
edc9923c5b Feat: Initial cargo-vet Support (#9216)
* add cargo-vet with reasonable trusted entities

* update paths

* license header

---------

Co-authored-by: Lucas Nogueira <118899497+lucasfernog-crabnebula@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@crabnebula.dev>
2024-03-19 11:39:42 -03:00
Fabian-Lars
a799f24f97 fix(bundler): Fix path seperators for deep link registry entries (#9185)
* fix(bundler): Fix path seperators for deep link registry entries

* Update bundler-deep-link-reg-path.md
2024-03-19 10:41:55 -03:00
Amr Bashir
ac76a22f38 feat(cli/init): allow empty responses non-crucial questions (#9183)
closes #9181
2024-03-19 10:41:41 -03:00
Fabian-Lars
81b853bc87 fix(core): Set json content type for errors returned from commands (#9213) 2024-03-19 10:34:12 -03:00
Fabian-Lars
75f5cb4015 feat(core): Implement HasDisplayHandle for Window (#9214) 2024-03-19 09:43:15 -03:00
Tony
43230cb6b7 fix(core): menu remove js binding not working (#9219)
* Fix menu `remove` js binding not working

* add change file [skip ci]

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-03-19 09:40:25 -03:00
Dan
fb146339cc chore: Readme typo (#9130) 2024-03-18 22:47:10 +01:00
Lucas Nogueira
72d9876bc8 chore: update autogenerated file 2024-03-18 10:14:27 -03:00
github-actions[bot]
f1df6b2c35 Apply Version Updates From Current Changes (#9162)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-03-18 09:43:47 -03:00
Amr Bashir
379cc2b354 fix(core/path): remove suffix in basename only once (#9165)
* fix(core/path): remove suffix in `basename` only once

closes #9064

* Update tooling/api/src/path.ts

* remove extra assert

---------

Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
2024-03-18 08:40:23 -03:00
Lucas Fernandes Nogueira
ea0242db4a refactor(image): expose constructor, unify size getters (#9179) 2024-03-13 22:02:05 -03:00
Amr Bashir
7213b9e472 feat(cli/add): add default permission to capabilities (#9124)
* feat(cli/add): add default permission to capabilities

also cleanup `tauri add` command

* license headers & clippy

* print permission name

* do not error out if default permission is not set

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-03-13 11:58:25 -03:00
Amr Bashir
acdd76833d feat(api/tray): add TrayIcon.getById/removeById (#9155)
* feat(api/tray): add `TrayIcon.getById/removeById`

closes #9135

* generate

* add permissions

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-03-12 13:07:51 -03:00
Lucas Fernandes Nogueira
e227fe02f9 feat(core): allow defining global API script on plugin build (#9156)
* feat(core): allow defining global API script on plugin build

Adds `tauri_plugin::Builder::global_api_script_path` so plugin authors can define the JavaScript global API bindings (supposed to be injected to `window.__TAURI__`) at compile time, so the string is only part of the binary when withGlobalTauri is true.
Currently this needs to be done manually at runtime (and it's always added to the binary via include_str).

* prefix variable

* use list of scripts instead of combining them

* static str

* header [skip ci]

* slice
2024-03-12 12:01:13 -03:00
Amr Bashir
3f039c18b1 chore(deps): update muda and tray-icon crates (#9154)
* chore(deps): update `muda` and `tray-icon` crates

* lock file
2024-03-12 09:50:39 -03:00
Amr Bashir
79b8a3514b enhance(core/event): filter js listeners on rust side only then emit filtered ids to be triggered (#9151)
* fix(core/event): filter js listeners on rust side only then emit filtered ids to be triggerd

fix regression introduced in https://github.com/tauri-apps/tauri/pull/8930 , and reported in https://github.com/tauri-apps/tauri/pull/8930#issuecomment-1986279046

* Update .changes/core-js-unlisten-all-regression.md

Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>

* Discard changes to .changes/core-js-unlisten-all-regression.md

* object.defineproperty

* add change file [skip ci]

---------

Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
2024-03-12 09:41:25 -03:00
github-actions[bot]
d349558abb Apply Version Updates From Current Changes (#9149)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-03-11 15:14:25 -03:00
Amr Bashir
a44cd5a183 chore: fix description for Context::assets change from #9141 (#9148) 2024-03-11 14:47:03 -03:00
Lucas Fernandes Nogueira
e673854c83 fix(acl): inconsistencies on urlpattern usage for remote domain URL (#9133)
* fix(acl): inconsistencies on urlpattern usage for remote domain URL

* remove println!

* typo

* fix tests
2024-03-11 13:39:17 -03:00
Lucas Fernandes Nogueira
490a6b424e refactor(core): add setup() to the Assets trait (#9147)
* feat(core): allow swapping the assets implemenetation

* refactor(core): add setup() to the Assets trait

* code review
2024-03-11 13:38:32 -03:00
i-c-b
85de230f31 fix(core): race between drop old JS listeners and create new listeners on page load (#9144)
* fix(core): race between drop old JS listeners and create new listeners on page load

* Create fix-js-unlisten-all-race.md
2024-03-11 18:03:02 +02:00
Tony
c3ea3a2b7d fix(windows): relax UpdaterWindowsConfig to not deny unknowns fields (#9126) 2024-03-11 17:30:14 +02:00
Lucas Fernandes Nogueira
db0a24a973 refactor(core): use the image crate (#9132) 2024-03-11 11:46:34 -03:00
Dimitris Apostolou
26f0f71a40 chore: fix various typos (#9131) 2024-03-11 16:25:20 +02:00
Lucas Fernandes Nogueira
ba0206d8a3 feat(core): allow swapping the assets implementation (#9141) 2024-03-11 11:07:15 -03:00
studystill
db1ea98512 chore(core): remove repetitive word (#9136)
Signed-off-by: studystill <chenghuiyue@outlook.com>
2024-03-11 02:43:12 +02:00
kandrelczyk
45384ab3aa docs: adding 'desktop only' pill to menu module (#9123) 2024-03-08 06:26:31 +02:00
Lucas Nogueira
9247ecf2a4 chore(cli): update Cargo.lock 2024-03-07 20:24:53 -03:00
github-actions[bot]
d701f29f17 Apply Version Updates From Current Changes (#9117)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-03-07 19:56:45 -03:00
renovate[bot]
94ab97a884 chore(deps) Update Rust crate rpm to 0.14.0 (dev) (#9102)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-07 19:35:15 -03:00
renovate[bot]
5deb1202f6 chore(deps) Update dependency rollup to v4.12.1 (dev) (#9101)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-07 19:34:29 -03:00
Lucas Fernandes Nogueira
ed48e2b3c7 feat(core): expose the image module (#9122)
* feat(core): expose the image module

* code review

* fix import

* fix

* fix codegen

* jsimage owned

* fmt

---------

Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
2024-03-07 19:23:21 -03:00
Amr Bashir
5541aafef3 fix(core): fix emit skipping webview listeners if filter wasn't provided (#9107)
* fix(core): fix emit skipping webview listeners if filter wasn't provided

* Update .changes/core-emit-js-all-targets.md

* update api example

---------

Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-03-07 20:36:52 +02:00
Lucas Fernandes Nogueira
80c12ead46 fix(ipc): wrong response format when using a channel (#9121) 2024-03-07 14:53:49 -03:00
Lucas Fernandes Nogueira
3e472d0afc refactor(acl): permission and capability platforms are optional (#9115)
* refactor(acl): permission and capability platforms are optional

* add iterator version

* fix build

---------

Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
2024-03-07 14:18:15 -03:00
Lucas Fernandes Nogueira
4ef17d0833 refactor(acl): use URLPattern instead of glob for remote URLs (#9116) 2024-03-07 13:08:57 -03:00
Lucas Fernandes Nogueira
9dc9ca6e38 feat(core): add dev function (#9113) 2024-03-07 11:02:53 -03:00
github-actions[bot]
e7f245e81e Apply Version Updates From Current Changes (#9035)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-03-06 19:00:57 -03:00
Amr Bashir
720357fd5c refactor!: remove re-export from tauri::path module (#9104) 2024-03-06 18:31:23 -03:00
renovate[bot]
5829f23171 chore(deps) Update Rust crate base64 to 0.22 (dev) (#9092)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-06 13:55:36 -03:00
renovate[bot]
8383bea741 chore(deps) Update Rust crate env_logger to 0.11.3 (dev) (#9090)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-06 13:32:57 -03:00
renovate[bot]
cd05827f9f chore(deps) Update Rust crate log to 0.4.21 (dev) (#9091)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-06 13:32:43 -03:00
Lucas Fernandes Nogueira
9323fb7cda fix(utils): ToTokens impl for ResolvedCommand broken on release (#9087) 2024-03-05 14:54:24 -03:00
dependabot[bot]
251bdd0579 chore(deps): bump mio from 0.8.10 to 0.8.11 (#9076)
Bumps [mio](https://github.com/tokio-rs/mio) from 0.8.10 to 0.8.11.
- [Release notes](https://github.com/tokio-rs/mio/releases)
- [Changelog](https://github.com/tokio-rs/mio/blob/master/CHANGELOG.md)
- [Commits](https://github.com/tokio-rs/mio/compare/v0.8.10...v0.8.11)

---
updated-dependencies:
- dependency-name: mio
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-05 14:35:58 -03:00
dependabot[bot]
253a661516 chore(deps): bump mio from 0.8.8 to 0.8.11 in /tooling/webdriver (#9077)
Bumps [mio](https://github.com/tokio-rs/mio) from 0.8.8 to 0.8.11.
- [Release notes](https://github.com/tokio-rs/mio/releases)
- [Changelog](https://github.com/tokio-rs/mio/blob/master/CHANGELOG.md)
- [Commits](https://github.com/tokio-rs/mio/compare/v0.8.8...v0.8.11)

---
updated-dependencies:
- dependency-name: mio
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-05 14:35:48 -03:00
Lucas Fernandes Nogueira
b5c7432769 feat(core): use a strict CSP on the isolation iframe (#9086) 2024-03-05 14:20:17 -03:00
Amr Bashir
bb23511ea8 feat: enhance multiple capabilities file format & fix mixed permissions schema (#9079)
* feat: enhance multiple capabilities file format & fix mixed permissions schema

* change files
2024-03-05 13:09:32 -03:00
Lucas Fernandes Nogueira
4bf1c55b0d Revert "feat(core): use a strict CSP on the isolation iframe (#9075)" (#9078) 2024-03-04 22:22:49 -03:00
Lucas Fernandes Nogueira
fe18012d30 fix(core): resolve symlink on fs scope check (#9072) 2024-03-04 21:10:55 -03:00
Lucas Fernandes Nogueira
6a47dd212c chore(utils): remove unused RemoteDomainAccessScope (#9073) 2024-03-04 21:10:45 -03:00
Lucas Fernandes Nogueira
7cec1049e8 feat(core): use a strict CSP on the isolation iframe (#9075) 2024-03-04 21:10:34 -03:00
Amr Bashir
86fa339de7 fix(core): fix invalid path for Color in context generation (#9071) 2024-03-04 17:03:55 -03:00
Lucas Fernandes Nogueira
e62ca4ee95 feat(ipc): preserve channel message order (#9070) 2024-03-04 17:03:24 -03:00
Lucas Fernandes Nogueira
6c06832246 fix(acl): scope resolution should be per window (#9068)
* fix(acl): scope resolution should be per window

* Update core/tauri-utils/src/acl/resolved.rs

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

* update snapshots

* lint

---------

Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
2024-03-04 17:01:30 -03:00
Amr Bashir
9aa0d6e959 chore: remove unstable log features & use qualified log::<macro> path (#9069)
* chore: remove unstable log features & use qualified `log::<macro>` path

* fmt

* fix build
2024-03-04 21:22:07 +02:00
Lucas Fernandes Nogueira
46de49aaad feat(core): always use child webviews on the unstable feature (#9059)
* feat(core): always use child webviews on the unstable feature

* fmt
2024-03-04 16:09:16 -03:00
renovate[bot]
b4ffbe7aa2 chore(deps) Update Tauri CLI (dev) (#8226)
* chore(deps) Update Tauri CLI

* updates

* fmt

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-03-03 11:36:35 -03:00
renovate[bot]
ab37d6724e chore(deps) Update Tauri Bundler (dev) (#8224)
* chore(deps) Update Tauri Bundler

* fix windows

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-03-03 11:36:20 -03:00
renovate[bot]
1b18b7006f chore(deps) Update Tauri API Definitions (dev) (#8225)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-03 10:30:35 -03:00
i-c-b
947a50b8e2 fix(cli): migration for http plugin ACL (#9049)
* fix cli migration of http allowlist to ACL

* Create fix-cli-migration-http-acl.md
2024-03-03 09:28:31 -03:00
Amr Bashir
77b9a508a4 feat(api): add Image class (#9042)
* feat(api): add `Image` class

* clippy

* license headers

* small cleanup

* fixes

* code review

* readd from_png_bytes and from_ico_bytes

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-03-03 04:31:08 +02:00
Lucas Fernandes Nogueira
2ca9afb576 fix(ci): set token for repository-dispatch to publish CLIs (#9048) 2024-03-01 12:15:28 -03:00
Amr Bashir
4b75834a41 chore: update license headers 2024 (#9043) 2024-03-01 08:29:01 -03:00
Lucas Fernandes Nogueira
03098b5315 feat(core): dynamic runtime capability (#9036)
* feat(core): dynamic runtime capability

* local(), windows(), webviews()

* enhance identation
2024-03-01 08:27:29 -03:00
Lucas Fernandes Nogueira
a77be97474 fix(ipc): fallback to postMessage if protocol fails, closes #8476 (#9038) 2024-02-29 18:24:43 -03:00
Amr Bashir
c68218b362 refactor(cli): add --no-bundle flag, skip bundling on invalid formats (#8990)
* refactor(cli): add `--no-bundle` flag, skip bundling on invalid formats

* enhance bundle format parsing

* lint [skip ci]

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-02-29 10:49:42 -03:00
Lucas Fernandes Nogueira
4f78941763 chore(cli): update deps, fix log compilation issue (#9034) 2024-02-29 10:22:47 -03:00
Amr Bashir
d1e77acd8d refactor!(core): remove Icon enum and add Image type (#9011)
* refactor!(core): remove `Icon` enum and add `Image` type

* clippy

* revert api example config change

* Update image.rs

* fix build

* clippy

* change files

* add back removed methods as setter functions

* simplify error message

* Update .changes/runtime-icon-lifetime.md

* Update .changes/ico-featrue-flags.md

* Update core/tauri/src/image.rs

* update api lockfile

* update api ref

* lint

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-02-29 09:05:11 -03:00
github-actions[bot]
ab060ebb34 Apply Version Updates From Current Changes (#9000)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-02-29 00:06:59 -03:00
Amr Bashir
8fcbce9404 fix(build): fix app permissions not included when there isn't any inlined plugins (#9025)
* fix(build): fix app permissions not included when there isn't any inlined plugins

* simplify

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-02-28 23:41:40 -03:00
Lucas Fernandes Nogueira
f5e7f3843e fix(build): app ACL should be empty if no permissions are defined (#9024) 2024-02-28 19:53:48 -03:00
Lucas Fernandes Nogueira
d7f56fef85 feat(acl): allow a permission to apply to a subset of target platforms (#9014)
* feat(acl): allow a permission to apply to a subset of target platforms

* fix cli
2024-02-28 17:23:52 -03:00
Lucas Fernandes Nogueira
d7d03c7197 fix(cli): dev watcher infinite loop on mobile (#9017) 2024-02-28 17:22:45 -03:00
canxin
e4463f0814 fix(event): clear residual js listeners (#8916 ) (#8930)
* fix clear residual listeners tauri-apps#8916

* Comment out `println` on successful removal of `js_listeners`

* follow review changes.

* remvoe uneeded result

* Update fix-clear-residual-listeners.md
2024-02-28 20:26:27 +02:00
Amr Bashir
f5f3ed5f6f fix(cli): CLI path issues on mobile project initialization (#9009)
* fix(cli): fix panic when `android init` using cargo or yarn

closes #8531

* clippy

* try with fullpath

* clippy

* move cli

* Update test-android.yml

* add to path instead

* clippy

* try moving

* use cargo subcommand

* delete unused logic [skip ci]

* truncate on init [skip ci]

* enhance binary/args check

* update change files

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-02-28 14:38:24 -03:00
Lucas Fernandes Nogueira
cb92cfd6a6 fix(cli): wrong metadata for crate versions (#9022) 2024-02-28 13:48:14 -03:00
i-c-b
b658ded614 fix(cli): Truncate BuildTask.kt before writing (#9015)
* truncate BuildTask.kt before write

* Create truncate-before-write-buildtask.md

* remove unused checks

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-02-28 13:42:21 -03:00
Vitor Ayres
04440edce8 feat(utils): generate table markdown of permissions (#9019)
* generate table

* Create permission-table.md
2024-02-28 18:15:44 +02:00
Lucas Fernandes Nogueira
3657ad82f8 feat(core): allow defining permissions for the app commands (#9008)
* feat(core): allow defining permissions for the app commands

* global scope

* command scope

* write to disk

* lint

* fix path

* get autogenerated commands from generate_handler macro

* revert

* remove cli

* use const instead of empty str
2024-02-28 08:45:28 -03:00
Lucas Nogueira
7190935680 chore(ci): add covector workflow for 1.x branch 2024-02-27 21:29:53 -03:00
Lucas Fernandes Nogueira
222a96b74b fix(core): multiwebview mode fixes for auto resize, reparent and add_child (#8999)
* refactor(core): simplify multiwebview impl, fix autoresize

* add_child on main thread

* fix reparent

* revert some changes

* add change files
2024-02-27 17:36:21 -03:00
Fabian-Lars
de38c31163 fix(core): Update walkdir to v2 to fix build issues on windows arm (#9006)
fixes #8998
2024-02-27 20:29:12 +02:00
Lucas Fernandes Nogueira
e1d5b79063 fix(core): wrong ACL validation on multiwebview contexts (#8995) 2024-02-27 11:42:11 -03:00
github-actions[bot]
5a19147b06 Apply Version Updates From Current Changes (#8991)
* apply version updates

* update versions

---------

Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-02-26 23:53:48 -03:00
github-actions[bot]
31a33d4680 Apply Version Updates From Current Changes (#8980)
Co-authored-by: amrbashir <amrbashir@users.noreply.github.com>
2024-02-26 23:05:51 -03:00
Amr Bashir
b9e6a01879 refactor(cli): use tauri/custom-protocol instead of relying on user having custom-protocol in their cargo features (#8937)
* refactor(cli): use `tauri/custom-protocol` instead of relying on user having `custom-protocol` in their cargo features

* tauri-build dev cfg

* pass build-feature when building apk

* run beforeBuildCommand before first build for plugins

* clippy

* fix

* mut

* enhance dev/prod checks

* lint [skip ci]

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-02-26 15:17:45 -03:00
Amr Bashir
60bf11abcb fix(core): export ProgressBarStatus (#8986)
closes #8960
2024-02-26 19:52:14 +02:00
Amr Bashir
06d63d67a0 feat(cli): add new acl subcommands (#8827)
* unify `CI` var handling, and lay foundation for `permission` subcommand

* feat(cli/init&new): create `permissions` directory by default for plugins

* generate permissions with consistent pathing on windows and unix

* `pemrission create` initial implementation

* add ls command

* finalize `permission create` subcommand

* `permission rm` subcommand

* `permission add` subcommand

* remove empty `permission copy` subcommand

* clippy

* `capability create` subcommand and move modules under `acl` directory

* fix multiselect for `permission add` when capabilty doesn't have identifier

* clippy

* `create` -> `new`  and change file

* license headers

* more license headers

* clippy

* Discard changes to examples/resources/src-tauri/.gitignore

* fix build

* cleanup

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-02-26 14:42:13 -03:00
Amr Bashir
9be314f07a feat(cli/migrate): add plugins to Cargo.toml (#8951)
* feat(cli/migrate): add plugins to Cargo.toml

closes #8933

* small cleanup

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-02-26 13:29:16 -03:00
Lucas Fernandes Nogueira
bc5b5e671a chore(linux): remove CSP tag on custom protocol response (#8984) 2024-02-26 13:08:19 -03:00
Lucas Fernandes Nogueira
6cb601d42e fix(core): convert mobile command name to camelCase, closes #8872 (#8983) 2024-02-26 12:54:31 -03:00
Lucas Nogueira
a8a2cb6fb4 fix(tauri-runtime-wry): wrong cfg usage on message handler 2024-02-26 12:30:43 -03:00
Lucas Fernandes Nogueira
cbd9755e09 fix: process logs not showing on iOS (#8977) 2024-02-25 17:38:27 -03:00
i-c-b
9cc014f2df fix(docs): fix API webview/window class doc example (#8971)
* fix class doc example

* fix class doc example
2024-02-24 22:36:45 +02:00
github-actions[bot]
f5e4b67203 Apply Version Updates From Current Changes (#8954)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-02-22 22:24:49 -03:00
Lucas Fernandes Nogueira
6edc563cf9 fix(core): deadlock on window destroy (#8953) 2024-02-22 22:02:13 -03:00
github-actions[bot]
0606ab326b Apply Version Updates From Current Changes (#8938)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-02-22 18:50:24 -03:00
Lucas Nogueira
5ddea72c50 chore: update cargo-mobile2 to 0.10.2 ref #8949 2024-02-22 15:35:14 -03:00
Lucas Fernandes Nogueira
a76fb118ce refactor(core): allow configuring both local and remote URLs on capability (#8950) 2024-02-22 15:15:16 -03:00
Lucas Fernandes Nogueira
e538ba586c fix(cli): process spawn not working on Node.js for mobile commands, closes #6203 (#8949) 2024-02-22 15:14:55 -03:00
Amr Bashir
84c783f6bc fix(bundler): remove fallback for license_file (#8948)
* fix(bundler): remove fallback for license_file

closes #8944

* Update .changes/bundler-license.md

* use license only on rpm

* change file

* Update .changes/bundler-rpm-license.md

---------

Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
2024-02-22 14:56:22 -03:00
Philipp Bokatius
6e3bd4b9f8 fix: center window ignores scale factors (#8942)
* fix: center window ignores scale factors

* chore: add .changes

* clippy
2024-02-22 16:30:27 +02:00
Lucas Fernandes Nogueira
fdcaf935fa feat(webview): add reparent API (#8939)
* feat(webview): add reparent API

* fix build

* fix import

* remove cfg

* fix windows

* clone

* clone value

* ()
2024-02-22 08:52:27 -03:00
Amr Bashir
b5eb64728a feat(bundler): enable dpi awareness for NSIS (#8940)
closes #8896
2024-02-22 08:52:19 -03:00
Lucas Fernandes Nogueira
d75713ac6c chore(deps): update to wry 0.37 (#8936) 2024-02-21 18:45:05 -03:00
github-actions[bot]
af646520cf Apply Version Updates From Current Changes (#8918)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-02-21 12:00:32 -03:00
Lucas Fernandes Nogueira
361ec37fd4 chore(deps): update to tao 0.26 (#8932)
* chore(deps): update to tao 0.26

* fallback to crate name

* move struct to runtime

* tests
2024-02-21 11:25:42 -03:00
Amr Bashir
33bbd7fe94 fix(cli/add): fix generating code for stronghold (#8908)
closes 8880
2024-02-21 10:23:04 -03:00
Lucas Fernandes Nogueira
a029b9f77e feat(cli): codesign on iOS is optional for the simulator (#8910)
* feat(cli): codesign on iOS is optional for the simulator

* cargo-mobile2 0.10
2024-02-21 09:52:46 -03:00
Jason Tsai
3fb414b61a fix(event): let once event return EventId, close #8912 (#8914)
* fix(event): let once event return EventId

* Update .changes/core-once-event-return-event-id.md
2024-02-20 17:36:15 +02:00
github-actions[bot]
18ff84fc81 Apply Version Updates From Current Changes (#8775)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2024-02-19 15:49:28 -03:00
Lucas Fernandes Nogueira
c115a978bb fix(cli): adjust template for capabilities (#8907) 2024-02-19 15:12:52 -03:00
Lucas Fernandes Nogueira
0e8e9cd064 fix(build): move capability schema definitions to root (#8906) 2024-02-19 14:46:21 -03:00
Amr Bashir
6f064a0d6f chore: add back .changes/readme.md (#8905)
* chore: add back `.changes/readme.md`

* fix test
2024-02-19 14:39:27 -03:00
Lucas Fernandes Nogueira
258494bd24 feat(core): add Manager::add_capability, closes #8799 (#8806)
* refactor(core): capabilities must be referenced on the Tauri config file

* add all capabilities by default

* feat(codegen): allow defining additional capabilities, closes #8798

* undo example

* lint

* move add_capability to runtime authority

* feat(core): add Manager::add_capability, closes #8799

* add change file
2024-02-19 11:59:20 -03:00
Lucas Fernandes Nogueira
f284f9c545 refactor: configure URLs instead of domains on capability remote (#8898) 2024-02-19 11:14:09 -03:00
Lucas Fernandes Nogueira
8d16a80d2f feat(codegen): allow defining additional capabilities, closes #8798 (#8802)
* refactor(core): capabilities must be referenced on the Tauri config file

* add all capabilities by default

* feat(codegen): allow defining additional capabilities, closes #8798

* undo example

* lint

* move add_capability to runtime authority

* add change files

* go through code review

* fix tests

* remove tokens option
2024-02-19 11:13:36 -03:00
Anil Kumar
770051ae63 docs: fixed a spelling mistake (#8899)
Fixed a spelling mistake
2024-02-19 15:52:08 +02:00
Lucas Nogueira
c426c0dca2 merge from 1.x 2024-02-19 08:03:05 -03:00
Lucas Nogueira
e816a46b95 chore: update lock files 2024-02-18 23:46:17 -03:00
Lucas Nogueira
a4b82d9dba chore: bump tauri-utils 2024-02-18 22:31:35 -03:00
github-actions[bot]
b735b6799f Apply Version Updates From Current Changes (v1) (#8475)
* chore: change bump to patch

* apply version updates

---------

Co-authored-by: amrbashir <amr.bashir2015@gmail.com>
Co-authored-by: amrbashir <amrbashir@users.noreply.github.com>
2024-02-18 19:31:52 -03:00
Amr Bashir
77f49ad55e refactor: optimize undecorated resizing handling (#8790)
* refactor: optimize undecorated resizing handling

* license

* separate modules

* fix windows

* rename export

* fix export

* same for gtk

* shared hit_test function

* change cursor on drag

* only set cursor on windows

* Revert "only set cursor on windows"

This reverts commit 03294a8430.

* fix flickering on Windows, change cursor on motion on Linux

* remove changing cursor on move on linux

* fix linux implementation

* clippy

* Windows, on left click only

* prevent on fullscreen, use OS border size on Windows

* fix build

* clippy

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-02-18 15:56:57 -03:00
Marc Espin
dbd525ca64 docs: Update doc comment from normalize function in path plugin to match definition (#8886)
The doc comment from the normalize function in the path plugin was not matching the actual definition.

Rust definition: 0cb0a15ce2/core/tauri/src/path/plugin.rs (L18)

Typescript definition: 0cb0a15ce2/tooling/api/src/path.ts (L589)
2024-02-18 15:12:46 -03:00
Sam Willis
28fb036ce4 fix(core): Incorrect resource_dir when app run from new style target/PLATFORM+ARCH/(debug|release) dir (#8852)
* Fix resource_dir when app run from new target/someting/(debug|release) dir

* Update core/tauri-utils/src/platform.rs

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

* change file, update logic, add tests

* lint

* fix tests

---------

Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-02-18 15:10:21 -03:00
Fabian-Lars
ed33b851c7 docs: Fix PathResolver doc comment (#8876) 2024-02-18 10:43:26 -03:00
dependabot[bot]
d72b6f3842 chore(deps): bump undici from 5.26.5 to 5.28.3 in /examples/api (#8877)
Bumps [undici](https://github.com/nodejs/undici) from 5.26.5 to 5.28.3.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v5.26.5...v5.28.3)

---
updated-dependencies:
- dependency-name: undici
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-18 10:42:24 -03:00
Lucas Fernandes Nogueira
83a68deb56 refactor(core): allow referencing capabilities on the Tauri config file (#8797)
* refactor(core): capabilities must be referenced on the Tauri config file

* add all capabilities by default

* refactor(cli): reference all capabilities by default
2024-02-18 10:42:09 -03:00
Lucas Fernandes Nogueira
0cb0a15ce2 feat(core): capabilities on multiwebview contexts (#8789)
* feat(core): capabilities on multiwebview contexts

* fix cli

* lint

* sort
2024-02-16 08:24:51 -03:00
Lucas Fernandes Nogueira
edb11c138d feat(build): support plugins that are defined in app crate (#8781)
* feat(build): support plugins that are defined in app crate

* dx
2024-02-16 08:24:40 -03:00
Fabian-Lars
052e8b4311 fix(cli): Downgrade minisign to 0.7.3 once again (#8838)
* fix(cli): Downgrade minisign to 0.7.3 once again

* add tests

* add change file

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-02-16 08:24:00 -03:00
Amr Bashir
e52d5e573f enhance: center window before creation (#8845)
* enhance: center window before creation

closes #4777

* simplify variable name

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-02-16 08:13:49 -03:00
Amr Bashir
16e550ec15 refactor(core): add webview events (#8844)
* refactor(core): add webview events

* license header

* clippy

* fix doctests

* more doctests

* fix JS `listen` with `EventTarget::Any`

* typo

* update module import

* clippy

* remove console.log

* fix api example

* fix documentation for emiTo [skip ci]

* actually add RunEvent::WebviewEvent

* update migration

* lint

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-02-16 08:07:39 -03:00
Amr Bashir
5618f6d2ff feat: relax plugin identifier requirements to alphanumeric and - (#8856)
closes #8820
2024-02-16 07:27:56 -03:00
i-c-b
11a5816bdf feat(core): recursive asset scope on directory file-drop event (#8864)
* allow recursive asset scope on directory file-drop events

* Create allow-recursive-asset-scope-on-file-drop-directory.md

* Update .changes/allow-recursive-asset-scope-on-file-drop-directory.md
2024-02-15 16:56:04 +02:00
Jason Tsai
3cee26a58a fix(cli): use UTF-8 encoding for vswhere.exe output (#8865) 2024-02-15 16:55:31 +02:00
amrbashir
7b5e8712e7 ci: update msrv test and cargo.lock 2024-02-14 04:01:01 +02:00
Lucas Fernandes Nogueira
2421073576 fix(macos): use BTreeMap for windows map to prevent crash on idle (#8117)
* fix(macos): use BTreeMap for windows map to prevent crash on idle

* use arc [skip ci]

* add change file
2024-02-14 01:15:21 +02:00
Philipp Bokatius
46b6598a94 fix: target specific window for window events (#8826)
* fix: target specific window for CLOSE_REQUESTED_EVENT emission

* fix: use emit_filter() instead of emit_to()

* fix: try sending event regardless of existing js listener

* cleanups

* change file

* emit_self -> emit_to_window

---------

Co-authored-by: amrbashir <amr.bashir2015@gmail.com>
2024-02-12 17:55:20 +02:00
Jason Tsai
cf3e40cc47 fix(core): use event.code to check which key pressed (#8819)
* fix(core): use event.code to check which key pressed

* Discard changes to .changes/fix-devtool-hotkey-code.md
2024-02-08 16:29:54 +02:00
Fabian-Lars
510b62261c chore(core): Add missing changefile for #8546 (#8822) 2024-02-08 16:27:19 +02:00
Lucas Fernandes Nogueira
2f55bfecbf chore(deps): update wry to 0.36 (#8795)
* chore(deps): update wry to 0.36

* rwh 0.6

* remove raw_window_handle usage

* fix build

* fix windows test
2024-02-07 22:26:29 -03:00
Lucas Fernandes Nogueira
dd7571a780 fix(core): do not generate files if plugin has no permissions (#8815) 2024-02-07 22:26:16 -03:00
Priyadarshan Giri
aa06a0534c fix(cli): fix code output of tauri plugin android init (#8810)
* Fix: code output of tauri plugin android init
double quotes `"` wasn't matching in plugin android init command

* change file
2024-02-07 18:40:46 +02:00
Lucas Fernandes Nogueira
fb0d997117 fix(cli): regression on --config not accepting file paths (#8783)
* fix(cli): regression on --config not accepting file paths

* enhance dev server config parsing

* use serde_json::json!

* pass config to setup
2024-02-07 17:08:05 +02:00
Jason Tsai
8751c3299f fix: correct invoke command for toggling devtools by hotkey, closes #8771 (#8793) 2024-02-06 07:41:54 -03:00
Amr Bashir
2e6db908d7 fix(core): make tauri::Error sync again (#8777)
* fix(core): make `tauri::Error` sync again

closes #8754

* add unit test

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-02-05 14:52:10 -03:00
Amr Bashir
19fb5f0b20 fix(build): fix writing schema file (#8782)
* fix(build): fix writing schema file

* Update .changes/schema_str.md
2024-02-05 14:32:27 -03:00
Amr Bashir
b0f27814b9 fix(cli): map --profile dev to debug folder when finding executable (#8776) 2024-02-05 16:12:08 +02:00
Lucas Fernandes Nogueira
f2e4c9de3a chore: remove nix workaround following zbus release (#8773) 2024-02-05 10:32:10 -03:00
Fabian-Lars
ae0fe47c4c fix(core): Compile error when bundle.license is set (#8774)
* fix(core): Compile error when bundle.license is set

* wrong package
2024-02-05 15:08:32 +02:00
Lucas Fernandes Nogueira
baca704d4b fix(cli): skip migrating updater config if not active (#8768) 2024-02-05 09:54:29 -03:00
Lucas Fernandes Nogueira
bd73ab0a1a fix(multiwebview): remove webview from store on close (#8766) 2024-02-04 23:22:09 -03:00
John Smith
cc3d8e7731 fix(core): Command::output suspend while wait for response (#8539)
* fix: Command::output suspend while wait for response

* add change file

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
2024-02-01 08:06:05 -03:00
Amr Bashir
8ce51cec3b feat: retain cli args when relaunching after update, closes #7402 (#7718)
* feat: retain cli args when relaunching after update, closes #7402

* 1.61 compatible OsString join

* fix msi impl as well

* fix tests

* Update .changes/tauri-bundler-nsis-args.md

Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.studio>

* Update .changes/tauri-updater-retain-args.md

Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.studio>

* more typos

* fix update args

* pull args from Env

* check if not empty

* pin memchr

* Update core.rs

* Update core.rs

* move /args

* fix build

* lint

* more lints

---------

Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.studio>
2024-01-31 16:02:48 -03:00
Fabian-Lars
0bff8c325d fix(cli): Ignore query parameter in dev server (#8697)
* fix(cli): Ignore query parameter in dev server

fixes #8148
additional ref: https://discord.com/channels/616186924390023171/1201199918379974766

* Update .changes/cli-devserver-queryparam.md

---------

Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
2024-01-29 14:58:23 +02:00
Fabian-Lars
a9b2c0625c chore: Commit Cargo.lock (#8586)
* chore: Commit Cargo.lock

* memchr for non-windows

* cfg-expr for non-windows

* add msrv check to covector

* update script

* downgrade arboard

* downgrade petgraph

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-01-17 16:21:45 -03:00
Naman Garg
7aa30dec85 feat: Add Section, Priority and Changelog options (#8620)
* Init section, priority and changelog

* Add section. priority and changelog support

* fix variable name

* Add .changes file

* Fix Formatting

* Apply suggestions from code review
2024-01-17 04:21:46 +02:00
Naman Garg
4926648751 deps: Libflate to flate2 (#8618)
* Replace libflate with flate2

* Add .changes file

* Cargo fmt
2024-01-16 15:52:19 +02:00
Amr Bashir
06890c70c6 feat: enable socks-proxy for bundler download (#8596) (#8611)
* feat: enable socks-proxy for bundler download

* change file

Co-authored-by: Lai Zn <laizenan@gmail.com>
2024-01-16 15:42:53 +02:00
阿良仔
1ca69bcf2f fix(clipboard): build issues on wayland (fix #8515) (#8546)
* fix(clipboard): fail to build on wayland

* specify exact version

* bump MSRV to 1.63

* revert msrv changes

---------

Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
2024-01-15 19:52:49 +02:00
Naman Garg
6bdba1f330 fix(bundler/deb): use lintian-compliant permissions , closes #7992 (#8585) 2024-01-15 18:08:07 +02:00
Fabian-Lars
b546b42db7 fix(core): Retain order of map keys in ipc, fixes #7922 (#8577)
* fix(core): Retain order of map keys in ipc, fixes #7922

* enable dep on http-api feature instead of http-request

* Create fix-formbody-order.md

* Update fix-formbody-order.md
2024-01-10 21:03:25 +02:00
Fabian-Lars
67d7877f27 fix(cli): Watch workspace members if tauri dir is workspace root (#8520)
* fix(cli): Watch workspace members if tauri dir is ws root

See title. This PR also includes a fix/workaround for paths with funny characters that may not make the glob expansion panic.

Fixes #8509

* extract into function

* cleanup
2024-01-04 01:37:05 +02:00
Jason Tsai
89911296e4 feat(bundler): codesign nested code on macos (#8259)
* feat(bundler): codesign nested code on macos

* chore: update changelog tag

* typo

* also sign stuff in the Libraries folder

tested this for spacedrive, which has a bunch of dylib inside the libraries folder

* Update .changes/mac-bundler-nested-code-sign.md [skip ci]

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2023-12-28 13:58:24 -03:00
Amr Bashir
8f8729d918 fix(core): allow canceling data-tauri-drag-region maximization on macOS, closes #8306 (#8312)
* fix(core): allow canceling `data-tauri-drag-region` maximization on macOS, closes #8306

* Update .changes/tauri-data-drag-region-macos-maximize.md

* fix typo

* cancel if mouse moves

* Update tauri-data-drag-region-macos-maximize.md

[skip ci]

* Update core/tauri/scripts/core.js [skip ci]

---------

Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
2023-12-28 09:13:48 -03:00
Amr Bashir
446fc99bbe ci: use default options for repository-dispatch (#8456) 2023-12-27 13:00:37 -03:00
Amr Bashir
6e48837860 feat: re-export Url (#8474)
* feat: re-exoprt `Url`

`Url` is used/returned from public API, we should re-export it

* Update .changes/export-url.md
2023-12-27 12:59:26 -03:00
renovate[bot]
883e52153e chore(deps) Update Tauri API Definitions (1.x) (#8449)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-20 14:16:58 -03:00
github-actions[bot]
5966812735 Apply Version Updates From Current Changes (v1) (#8396)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2023-12-20 13:50:17 -03:00
Amr Bashir
b44e9c0fcb feat(bundler): redownload outdated/mis-hashed files (#8431)
* feat(bundler): redownload outdata/mis-hashed files

* change import location

* Update util.rs

* Update util.rs

* Update bundler-mishashed-files.md

* Update bundler-mishashed-files.md

* rename fn

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-12-20 12:46:19 -03:00
Fabian-Lars
b2f83f03a8 fix(core): Replace Rc with Arc to prevent crashes when sending events (#8402)
* fix(core): Prevent crash when sending events.

* add change file

* use dedicated type for windows refcell map

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-12-20 12:13:00 -03:00
Fabian-Lars
0a2175eabb fix(cli): expand globs in workspace member paths (#8439)
* fix(cli): Expand globs in workspace member paths

fixes #8403

* unusued import

* into_iter

* return error instead of of empty vec

* Update dev-watcher-glob.md
2023-12-20 15:57:10 +02:00
Amr Bashir
645e1dcc6e fix(core/updater): check if installer args are not empty before passing -ArgumentList closes #8296 (#8404) 2023-12-20 01:08:38 +02:00
693 changed files with 44951 additions and 16259 deletions

44
.changes/README.md Normal file
View File

@@ -0,0 +1,44 @@
# Changes
##### via https://github.com/jbolda/covector
As you create PRs and make changes that require a version bump, please add a new markdown file in this folder. You do not note the version _number_, but rather the type of bump that you expect: major, minor, or patch. The filename is not important, as long as it is a `.md`, but we recommend that it represents the overall change for organizational purposes.
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.
Use the following format:
```md
---
'package-a': 'patch:enhance'
'package-b': 'patch:enhance'
---
Change summary goes here
```
Summaries do not have a specific character limit, but are text only. These summaries are used within the (future implementation of) changelogs. They will give context to the change and also point back to the original PR if more details and context are needed.
Changes will be designated as a `major`, `minor` or `patch` as further described in [semver](https://semver.org/).
Given a version number MAJOR.MINOR.PATCH, increment the:
- MAJOR version when you make incompatible API changes,
- MINOR version when you add functionality in a backwards compatible manner, and
- PATCH version when you make backwards compatible bug fixes.
Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format, but will be discussed prior to usage (as extra steps will be necessary in consideration of merging and publishing).
Additionally you could specify a tag for the change file to group it with other changes by prefixing the bump with `:<tag>`, for example:
```md
---
'package-a': 'patch:enhance'
---
Change summary goes here
```
which will group this change file with other changes that specify the `bug` tag.
For list of available tags, see the `changeTags` key in [./config.json](./config.json)

View File

@@ -0,0 +1,6 @@
---
"tauri": patch:enhance
"tauri-codegen": patch:enhance
---
Enhance `AssetResolver::get` in development mode by reading distDir directly as a fallback to the embedded assets.

View File

@@ -1,15 +0,0 @@
---
"tauri": major:feat
"tauri-plugin": major:feat
"tauri-build": major:feat
"tauri-utils": major:feat
"tauri-codegen": major:feat
"tauri-macros": major:feat
"tauri-runtime": major:feat
"tauri-runtime-wry": major:feat
"tauri-cli": major:feat
"@tauri-apps/api": major:feat
"@tauri-apps/cli": major:feat
---
Move to beta!

View File

@@ -0,0 +1,5 @@
---
"tauri": patch:bug
---
Fix Specta remote implementation target for `Channel`.

View File

@@ -0,0 +1,6 @@
---
"tauri-cli": "patch:enhance"
"@tauri-apps/cli": "patch:enhance"
---
Changes the default behavior of the `dev` command to only expose to localhost (`127.0.0.1`) instead of the default system interface.

View File

@@ -71,7 +71,7 @@
],
"assets": [
{
"path": "${ pkg.path }/target/package/${ pkg.pkg }-${ pkgFile.version }.crate",
"path": "./target/package/${ pkg.pkg }-${ pkgFile.version }.crate",
"name": "${ pkg.pkg }-${ pkgFile.version }.crate"
}
]
@@ -188,10 +188,14 @@
"path": "./core/tauri-utils",
"manager": "rust"
},
"tauri-macos-sign": {
"path": "./tooling/macos-sign",
"manager": "rust"
},
"tauri-bundler": {
"path": "./tooling/bundler",
"manager": "rust",
"dependencies": ["tauri-utils"]
"dependencies": ["tauri-utils", "tauri-macos-sign"]
},
"tauri-runtime": {
"path": "./core/tauri-runtime",
@@ -262,7 +266,7 @@
"tauri-cli": {
"path": "./tooling/cli",
"manager": "rust",
"dependencies": ["tauri-bundler", "tauri-utils"],
"dependencies": ["tauri-bundler", "tauri-utils", "tauri-macos-sign"],
"postversion": [
"cargo check",
"cargo build --manifest-path ../../core/tauri-config-schema/Cargo.toml"

View File

@@ -0,0 +1,9 @@
---
"tauri": patch:breaking
"tauri-plugin": patch:breaking
"@tauri-apps/cli": patch:breaking
"tauri-cli": patch:breaking
---
Core plugin permissions are now prefixed with `core:`, the `core:default` permission set can now be used and the `core` plugin name is reserved.
The `tauri migrate` tool will automate the migration process, which involves prefixing all `app`, `event`, `image`, `menu`, `path`, `resources`, `tray`, `webview` and `window` permissions with `core:`.

View File

@@ -0,0 +1,9 @@
---
"tauri-cli": patch:breaking
"@tauri-apps/cli": patch:breaking
---
`ios dev` and `android dev` now uses localhost for the development server unless running on an iOS device,
which still requires connecting to the public network address. To conditionally check this on your frontend
framework's configuration you can check for the existence of the `TAURI_DEV_HOST`
environment variable instead of checking if the target is iOS or Android (previous recommendation).

View File

@@ -1,5 +0,0 @@
---
"tauri-build": patch:bug
---
Do not trigger build script to rerun if the frontendDist directory does not exist.

View File

@@ -0,0 +1,7 @@
---
"tauri-utils": "patch:bug"
---
Fixed an issue where configuration parsing errors always displayed 'tauri.conf.json' as the file path, even when using 'Tauri.toml' or 'tauri.conf.json5'.
The error messages now correctly shows the actual config file being used.

View File

@@ -1,5 +0,0 @@
---
"tauri": patch:bug
---
Fix regression on the JavaScript code that processes the IPC message.

View File

@@ -1,5 +0,0 @@
---
"tauri-build": patch:bug
---
Do not rewrite capability JSON schema if it did not change.

View File

@@ -1,5 +0,0 @@
---
"tauri": patch:bug
---
Workaround for zbus not enabling the proper Cargo features for its nix dependency.

View File

@@ -0,0 +1,6 @@
---
"tauri": patch:bug
"tauri-codegen": patch:bug
---
Fixes asset resolving when not using the `compression` feature.

View File

@@ -0,0 +1,7 @@
---
"tauri-utils": patch:feat
"@tauri-apps/cli": patch:feat
"tauri-cli": patch:feat
---
Added `bundle > iOS > frameworks` configuration to define a list of frameworks that are linked to the Xcode project when it is generated.

View File

@@ -0,0 +1,6 @@
---
"tauri": "patch:sec"
"tauri-utils": "patch:sec"
---
Explicitly check that the main frame's origin is the sender of Isolation Payloads

View File

@@ -0,0 +1,6 @@
---
"tauri-utils": "patch:enhance"
"tauri": "patch:enhance"
---
Make the set of gtk application id optional, to allow more then one instance of the app running at the same time.

View File

@@ -0,0 +1,5 @@
---
"tauri": "patch:enhance"
---
Add `tauri::plugin::Builder::try_build` to allow plugins to check if their `TauriPlugin` initialization is valid.

View File

@@ -1,13 +1,18 @@
{
"tag": "beta",
"tag": "rc",
"changes": [
".changes/beta.md",
".changes/fix-codegen-rerun-if-changed.md",
".changes/fix-process-ipc-message-fn.md",
".changes/fix-rewrite-schema.md",
".changes/fix-tauri-build-unix.md",
".changes/refactor-capabilities-schema.md",
".changes/rerun-if-permission-created.md",
".changes/update-plugin-template.md"
".changes/asset-resolver-dev-fallback.md",
".changes/change-pr-10435.md",
".changes/cli-desktop-port-exposure.md",
".changes/core-plugin-namespace.md",
".changes/dev-url-localhost-mobile.md",
".changes/fix-conf-parsing-error-filepath.md",
".changes/fix-usage-without-compression.md",
".changes/ios-frameworks.md",
".changes/isolation-main-frame-origin.md",
".changes/linux-option-gtk-app-id.md",
".changes/plugin-builder-failable.md",
".changes/rc-migration.md",
".changes/remove-unsecure-configs.md"
]
}

6
.changes/rc-migration.md Normal file
View File

@@ -0,0 +1,6 @@
---
"tauri-cli": patch:feat
"@tauri-apps/cli": patch:feat
---
Added migration from `2.0.0-beta` to `2.0.0-rc`.

View File

@@ -1,8 +0,0 @@
---
"@tauri-apps/cli": patch:enhance
"tauri-cli": patch:enhance
"tauri-build": patch:enhance
"tauri-utils": patch:enhance
---
Moved the capability JSON schema to the `src-tauri/gen` folder so it's easier to track changes on the `capabilities` folder.

View File

@@ -0,0 +1,8 @@
---
"tauri-cli": patch:sec
"@tauri-apps/cli": patch:sec
"tauri": patch:sec
---
Re-enable TLS checks that were previously disabled to support an insecure HTTPS custom protocol on Android which is no longer used.

View File

@@ -1,6 +0,0 @@
---
"tauri-plugin": patch:bug
"tauri-utils": patch:bug
---
Rerun build script when a new permission is added.

View File

@@ -1,6 +0,0 @@
---
"@tauri-apps/cli": patch:enhance
"tauri-cli": patch:enhance
---
Update app and plugin templates following generated files change from tauri-build and tauri-plugin.

View File

@@ -42,7 +42,7 @@ Hi! We, the maintainers, are really excited that you are interested in contribut
## Development Guide
**NOTE: Tauri is undergoing rapid development right now, and the docs match the latest published version of Tauri. They are horribly out of date when compared with the code in the dev branch. This contributor guide is up-to-date, but it doesn't cover all of Tauri's functions in depth. If you have any questions, don't hesitate to ask in our Discord server.**
**NOTE: If you have any question don't hesitate to ask in our Discord server. We try to keep this guide to up guide, but if something doesn't work let us know.**
### General Setup
@@ -52,14 +52,9 @@ To set up your machine for development, follow the [Tauri setup guide](https://t
Some Tauri packages will be automatically built when running one of the examples. Others, however, will need to be built beforehand. To build these automatically, run the `.scripts/setup.sh` (Linux and macOS) or `.scripts/setup.ps1` (Windows) script. This will install the Rust and Node.js CLI and build the JS API. After that, you should be able to run all the examples. Note that the setup script should be executed from the root folder of the repository in order to run correctly.
### Packages Overview
### Overview
- Tauri Core (`/core/tauri`) is the heart of Tauri. It contains the code that starts the app, configures communication between Rust and the Webview, and ties all the other packages together.
- The Macros (`/core/tauri-macros`) are used by Tauri Core for various functions.
- Tauri Bundler (`/tooling/bundler`) is used by the Rust CLI to package executables into installers.
- The Rust CLI aka `tauri-cli` (`/tooling/cli`) is the primary CLI for creating and developing Tauri apps.
- The JS CLI aka `@tauri-apps/cli` (`/tooling/cli/node`) is a Node.js CLI wrapper for `tauri-cli`.
- The JS API aka `@tauri-apps/api` (`/tooling/api`) contains JS bindings to the builtin Rust functions in the Rust API.
See [Architecture](../ARCHITECTURE.md#major-components) for an overview of the packages in this repository.
### Developing Tauri Bundler and Rust CLI
@@ -71,7 +66,7 @@ The code for the bundler is located in `[Tauri repo root]/tooling/bundler`, and
### Developing Tauri Core and Related Components (Rust API, Macros, Codegen, and Utils)
The code for Tauri Core is located in `[Tauri repo root]/core/tauri`, and the Rust API, Macros, and Utils are in `[Tauri repo root]/core/tauri-(api/macros/utils)`. The easiest way to test your changes is to use the `[Tauri repo root]/examples/helloworld` app. It automatically rebuilds and uses your local copy of the Tauri core packages. Just run `yarn tauri build` or `yarn tauri dev` in the helloworld app directory after making changes to test them out. To use your local changes in another project, edit its `src-tauri/Cargo.toml` file so that the `tauri` key looks like `tauri = { path = "PATH" }`, where `PATH` is the relative path to `[Tauri repo root]/core/tauri`. Then, your local copy of the Tauri core packages will be rebuilt and used whenever you build that project.
The code for the Rust crates, including the Core, Macros, Utils, WRY runtime, and a few more are located in `[Tauri repo root]/core/tauri-(macros/utils)`. The easiest way to test your changes is to use the `[Tauri repo root]/examples/helloworld` app. It automatically rebuilds and uses your local copy of the Tauri core packages. Just run `cargo run --example helloworld` after making changes to test them out.
#### Building the documentation locally
@@ -87,4 +82,4 @@ The JS API provides bindings between the developer's JS in the Webview and the b
## Financial Contribution
Tauri is an MIT-licensed open source project. Its ongoing development can be supported via [GitHub Sponsors](https://github.com/sponsors/nothingismagick) or [Open Collective](https://opencollective.com/tauri). We prefer GitHub Sponsors as donations made are doubled through the matching fund program.
Tauri is an MIT-licensed open source project. Its ongoing development can be supported via [GitHub Sponsors](https://github.com/sponsors/tauri-apps) or [Open Collective](https://opencollective.com/tauri). We prefer GitHub Sponsors as donations made are doubled through the matching fund program.

2
.github/FUNDING.yml vendored
View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -14,7 +14,7 @@ Before submitting a PR, please read https://github.com/tauri-apps/tauri/blob/dev
- fix bugs
2. If there is a related issue, reference it in the PR text, e.g. closes #123.
3. If this change requires a new version, then add a change file in `.changes` directory with the appropriate bump, see https://github.com/tauri-apps/tauri/blob/dev/.changes/readme.md
3. If this change requires a new version, then add a change file in `.changes` directory with the appropriate bump, see https://github.com/tauri-apps/tauri/blob/dev/.changes/README.md
4. Ensure that all your commits are signed https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits
5. Ensure `cargo test` and `cargo clippy` passes.
6. Propose your changes as a draft PR if your work is still in progress.

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
@@ -37,6 +37,8 @@ jobs:
- 'core/tauri-utils/src/config.rs'
- 'tooling/cli/schema.json'
- 'core/tauri-config-schema/schema.json'
- 'core/tauri-acl-schema/*.json'
api:
runs-on: ubuntu-latest
@@ -70,8 +72,11 @@ jobs:
with:
workspaces: core -> ../target
- name: generate schema.json
- name: generate config schema
run: cargo build --manifest-path ./core/tauri-config-schema/Cargo.toml
- name: generate ACL schema
run: cargo build --manifest-path ./core/tauri-acl-schema/Cargo.toml
- name: check schema
run: ./.scripts/ci/has-diff.sh

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -0,0 +1,30 @@
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
name: covector comment
on:
workflow_run:
workflows: [covector status] # the `name` of the workflow run on `pull_request` running `status` with `comment: true`
types:
- completed
# note all other permissions are set to none if not specified
# and these set the permissions for `secrets.GITHUB_TOKEN`
permissions:
# to read the action artifacts on `covector status` workflows
actions: read
# to write the comment
pull-requests: write
jobs:
comment:
runs-on: ubuntu-latest
if: github.event.workflow_run.conclusion == 'success' &&
(github.event.workflow_run.head_repository.full_name != github.repository || github.actor == 'dependabot[bot]')
steps:
- name: covector status
uses: jbolda/covector/packages/action@covector-v0
with:
token: ${{ secrets.GITHUB_TOKEN }}
command: "status"

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
@@ -18,3 +18,5 @@ jobs:
id: covector
with:
command: 'status'
token: ${{ secrets.GITHUB_TOKEN }}
comment: true

View File

@@ -0,0 +1,231 @@
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
name: covector version or publish
on:
push:
branches:
- 1.x
jobs:
msrv-list:
runs-on: ${{ matrix.platform.os }}
strategy:
fail-fast: false
matrix:
platform:
- {
target: x86_64-pc-windows-msvc,
os: windows-latest,
toolchain: '1.61.0'
}
- {
target: x86_64-unknown-linux-gnu,
os: ubuntu-latest,
toolchain: '1.60.0'
}
- {
target: x86_64-apple-darwin,
os: macos-latest,
toolchain: '1.60.0'
}
steps:
- uses: actions/checkout@v4
- name: install rust ${{ matrix.platform.toolchain }}
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.platform.toolchain }}
target: ${{ matrix.platform.target }}
override: true
default: true
- name: install Linux dependencies
if: contains(matrix.platform.target, 'unknown-linux')
run: |
sudo apt-get update
sudo apt-get install -y webkit2gtk-4.0 libayatana-appindicator3-dev
- uses: Swatinem/rust-cache@v2
- name: delete lockfile
run: rm Cargo.lock
- name: Downgrade crates with MSRV conflict
# The --precise flag can only be used once per invocation.
run: |
cargo update -p system-deps:6.2.0 --precise 6.1.1
cargo update -p toml:0.7.8 --precise 0.7.3
cargo update -p toml_edit:0.19.15 --precise 0.19.8
cargo update -p embed-resource --precise 2.3.0
cargo update -p toml_datetime --precise 0.6.1
cargo update -p serde_spanned --precise 0.6.1
cargo update -p winnow --precise 0.4.1
cargo update -p plist --precise 1.5.1
cargo update -p time --precise 0.3.15
cargo update -p ignore --precise 0.4.18
cargo update -p raw-window-handle --precise 0.5.0
cargo update -p cargo_toml:0.15.3 --precise 0.15.2
cargo update -p zbus --precise 3.13.0
cargo update -p zbus_names --precise 2.5.0
cargo update -p colored --precise 2.0.2
cargo update -p arboard --precise 3.2.1
cargo update -p tempfile --precise 3.6.0
cargo update -p serde_with:3.6.1 --precise 3.0.0
cargo update -p tokio --precise 1.29.0
cargo update -p flate2 --precise 1.0.26
cargo update -p h2 --precise 0.3.20
cargo update -p reqwest --precise 0.11.18
cargo update -p bstr --precise 1.6.2
cargo update -p cfg-expr:0.15.7 --precise 0.15.4
cargo update -p memchr --precise 2.6.2
cargo update -p async-executor --precise 1.5.1
cargo update -p proptest --precise 1.2.0
cargo update -p regex --precise 1.9.6
cargo update -p bstr --precise 1.6.2
cargo update -p backtrace --precise 0.3.68
cargo update -p blocking --precise 1.4.1
cargo update -p ignore --precise 0.4.18
cargo update -p regex --precise 1.9.6
cargo update -p globset --precise 0.4.13
cargo update -p crossbeam-channel --precise 0.5.8
cargo update -p crossbeam-utils --precise 0.8.16
cargo update -p image --precise 0.24.4
cargo update -p async-process --precise 1.7.0
cargo update -p is-terminal --precise 0.4.7
cargo update -p tar --precise 0.4.39
cargo update -p serde_json --precise 1.0.97
cargo update -p petgraph --precise 0.6.3
cargo update -p os_str_bytes --precise 6.5.1
cargo update -p thread_local --precise 1.1.7
- name: test build
run: cargo check --target ${{ matrix.platform.target }} --features tracing,compression,wry,linux-protocol-headers,isolation,custom-protocol,api-all,cli,updater,system-tray,windows7-compat,http-multipart,test
run-integration-tests:
runs-on: ${{ matrix.platform }}
needs: msrv-list
strategy:
fail-fast: false
matrix:
platform: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: install stable
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: install Linux dependencies
if: matrix.platform == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y webkit2gtk-4.0 libayatana-appindicator3-dev libfuse2
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
core -> ../target
tooling/cli
- name: build CLI
uses: actions-rs/cargo@v1
with:
command: build
args: --manifest-path ./tooling/cli/Cargo.toml
- name: run integration tests
run: cargo test --test '*' -- --ignored
- name: run CLI tests
timeout-minutes: 30
run: |
cd ./tooling/cli/node
yarn
yarn build
yarn test
version-or-publish:
runs-on: ubuntu-latest
timeout-minutes: 65
outputs:
change: ${{ steps.covector.outputs.change }}
commandRan: ${{ steps.covector.outputs.commandRan }}
successfulPublish: ${{ steps.covector.outputs.successfulPublish }}
needs:
- run-integration-tests
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v2
with:
node-version: 14
registry-url: 'https://registry.npmjs.org'
cache: yarn
cache-dependency-path: tooling/*/yarn.lock
- name: cargo login
run: cargo login ${{ secrets.ORG_CRATES_IO_TOKEN }}
- name: git config
run: |
git config --global user.name "${{ github.event.pusher.name }}"
git config --global user.email "${{ github.event.pusher.email }}"
- name: covector version or publish (publish when no change files present)
uses: jbolda/covector/packages/action@covector-v0
id: covector
env:
NODE_AUTH_TOKEN: ${{ secrets.ORG_NPM_TOKEN }}
CARGO_AUDIT_OPTIONS: ${{ secrets.CARGO_AUDIT_OPTIONS }}
with:
token: ${{ secrets.GITHUB_TOKEN }}
command: 'version-or-publish'
createRelease: true
- name: Create Pull Request With Versions Bumped
if: steps.covector.outputs.commandRan == 'version'
uses: tauri-apps/create-pull-request@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: release/version-updates-v1
title: Apply Version Updates From Current Changes (v1)
commit-message: 'apply version updates'
labels: 'version updates'
body: ${{ steps.covector.outputs.change }}
- name: Trigger doc update
if: |
steps.covector.outputs.successfulPublish == 'true' &&
steps.covector.outputs.packagesPublished != ''
uses: peter-evans/repository-dispatch@v1
with:
token: ${{ secrets.ORG_TAURI_BOT_PAT }}
repository: tauri-apps/tauri-docs
event-type: update-docs
- name: Trigger `@tauri-apps/cli` publishing workflow
if: |
steps.covector.outputs.successfulPublish == 'true' &&
contains(steps.covector.outputs.packagesPublished, '@tauri-apps/cli')
uses: peter-evans/repository-dispatch@v1
with:
token: ${{ secrets.ORG_TAURI_BOT_PAT }}
event-type: publish-js-cli
client-payload: >-
{"releaseId": "${{ steps.covector.outputs['-tauri-apps-cli-releaseId'] }}" }
- name: Trigger `tauri-cli` publishing workflow
if: |
steps.covector.outputs.successfulPublish == 'true' &&
contains(steps.covector.outputs.packagesPublished, 'tauri-cli')
uses: peter-evans/repository-dispatch@v1
with:
token: ${{ secrets.ORG_TAURI_BOT_PAT }}
event-type: publish-clirs

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
@@ -87,9 +87,10 @@ jobs:
NODE_AUTH_TOKEN: ${{ secrets.ORG_NPM_TOKEN }}
CARGO_AUDIT_OPTIONS: ${{ secrets.CARGO_AUDIT_OPTIONS }}
with:
token: ${{ secrets.GITHUB_TOKEN }}
command: 'version-or-publish'
token: ${{ secrets.GITHUB_TOKEN }}
createRelease: true
recognizeContributors: true
- name: Create Pull Request With Versions Bumped
if: steps.covector.outputs.commandRan == 'version'
@@ -116,16 +117,14 @@ jobs:
if: |
steps.covector.outputs.successfulPublish == 'true' &&
contains(steps.covector.outputs.packagesPublished, '@tauri-apps/cli')
uses: peter-evans/repository-dispatch@v1
with:
event-type: publish-js-cli
client-payload: >-
{"releaseId": "${{ steps.covector.outputs['-tauri-apps-cli-releaseId'] }}" }
run: gh workflow run 31554138 -r dev -f releaseId=${{ steps.covector.outputs['-tauri-apps-cli-releaseId'] }}
env:
GH_TOKEN: ${{ secrets.ORG_TAURI_BOT_PAT }}
- name: Trigger `tauri-cli` publishing workflow
if: |
steps.covector.outputs.successfulPublish == 'true' &&
contains(steps.covector.outputs.packagesPublished, 'tauri-cli')
uses: peter-evans/repository-dispatch@v1
with:
event-type: publish-clirs
run: gh workflow run 31554139 -r dev
env:
GH_TOKEN: ${{ secrets.ORG_TAURI_BOT_PAT }}

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
@@ -30,7 +30,7 @@ jobs:
target: x86_64-apple-darwin
architecture: x64
build: |
yarn build:release
yarn build:release --target=x86_64-apple-darwin
strip -x *.node
- host: windows-latest
build: yarn build:release
@@ -195,13 +195,13 @@ jobs:
matrix:
settings:
- host: macos-latest
target: 'x86_64-apple-darwin'
target: aarch64-apple-darwin
- host: windows-latest
target: x86_64-pc-windows-msvc
node:
- '14'
- '16'
- '18'
- '20'
runs-on: ${{ matrix.settings.host }}
steps:
- uses: actions/checkout@v4
@@ -232,9 +232,9 @@ jobs:
fail-fast: false
matrix:
node:
- '14'
- '16'
- '18'
- '20'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
@@ -269,9 +269,9 @@ jobs:
fail-fast: false
matrix:
node:
- '14'
- '16'
- '18'
- '20'
runs-on: ubuntu-latest
container:
image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
@@ -312,9 +312,9 @@ jobs:
fail-fast: false
matrix:
node:
- '14'
- '16'
- '18'
- '20'
image:
- ghcr.io/napi-rs/napi-rs/nodejs:aarch64-16
- ghcr.io/napi-rs/napi-rs/nodejs:armhf-16
@@ -372,7 +372,7 @@ jobs:
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: 16
node-version: 20
check-latest: true
cache: yarn
cache-dependency-path: 'tooling/cli/node/yarn.lock'

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

45
.github/workflows/supply-chain.yml vendored Normal file
View File

@@ -0,0 +1,45 @@
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
name: supply chain health status
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
push:
branches:
- dev
- 1.x
paths:
- '.github/workflows/supply-chain.yml'
- '**/Cargo.lock'
- '**/Cargo.toml'
jobs:
cargo-vet:
name: check rust dependencies with cargo vet
runs-on: ubuntu-latest
env:
CARGO_VET_VERSION: 0.9.1
steps:
- uses: actions/checkout@master
- name: Install Rust
run: rustup update stable && rustup default stable
- uses: actions/cache@v2
with:
path: ${{ runner.tool_cache }}/cargo-vet
key: cargo-vet-bin-${{ env.CARGO_VET_VERSION }}
- name: Add the tool cache directory to the search path
run: echo "${{ runner.tool_cache }}/cargo-vet/bin" >> $GITHUB_PATH
- name: Ensure that the tool cache is populated with the cargo-vet binary
run: cargo install --root ${{ runner.tool_cache }}/cargo-vet --version ${{ env.CARGO_VET_VERSION }} cargo-vet
# Enable this again to break the workflow once we have a reasonable amount of suggestions to get to a clean base line
# - name: Invoke cargo-vet
# run: cargo vet --locked
- name: Provide audit suggestions
run: cargo vet suggest

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
@@ -85,6 +85,14 @@ jobs:
- name: build CLI
run: cargo build --manifest-path ./tooling/cli/Cargo.toml
- name: move CLI to cargo bin dir
if: matrix.platform != 'windows-latest'
run: mv ./tooling/cli/target/debug/cargo-tauri $HOME/.cargo/bin
- name: move CLI to cargo bin dir
if: matrix.platform == 'windows-latest'
run: mv ./tooling/cli/target/debug/cargo-tauri.exe $HOME/.cargo/bin
- name: build Tauri API
working-directory: ./tooling/api
run: yarn && yarn build
@@ -95,12 +103,12 @@ jobs:
- name: init Android Studio project
working-directory: ./examples/api
run: ../../tooling/cli/target/debug/cargo-tauri android init
run: cargo tauri android init
env:
NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
- name: build APK
working-directory: ./examples/api
run: ../../tooling/cli/target/debug/cargo-tauri android build
run: cargo tauri android build
env:
NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
@@ -93,8 +93,9 @@ jobs:
- name: test (using cross)
if: ${{ matrix.platform.cross }}
# update or remove the rev once we update the MSRV from 1.70.0
run: |
cargo install cross --git https://github.com/cross-rs/cross
cargo install cross --git https://github.com/cross-rs/cross --rev 20c73df79c9aaf78a2ad2e9fe8ae981668a729dc --locked
cross ${{ matrix.platform.command }} --target ${{ matrix.platform.target }} ${{ matrix.features.args }}
- name: test (using cargo)

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

2
.gitignore vendored
View File

@@ -73,7 +73,7 @@ TODO.md
target
# lock for libs
/Cargo.lock
#/Cargo.lock Committed to prevent msrv checks from failing
/tooling/bench/tests/Cargo.lock
/yarn.lock

View File

@@ -1,6 +1,6 @@
#!/bin/sh
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,5 +1,8 @@
{
"singleQuote": true,
"semi": false,
"trailingComma": "none"
"trailingComma": "none",
"overrides": [
{ "files": [".changes/**.md"], "options": { "singleQuote": false } }
]
}

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env pwsh
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env sh
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env node
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -69,7 +69,9 @@ function checkChangeFiles(changeFiles) {
const [_bin, _script, ...files] = process.argv
if (files.length > 0) {
checkChangeFiles(files.filter((f) => f.toLowerCase() !== 'readme.md'))
checkChangeFiles(
files.filter((f) => f.toLowerCase() !== '.changes/readme.md')
)
} else {
const changeFiles = fs
.readdirSync('.changes')

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env node
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -8,7 +8,7 @@ const fs = require('fs')
const path = require('path')
const readline = require('readline')
const header = `Copyright 2019-2023 Tauri Programme within The Commons Conservancy
const header = `Copyright 2019-2024 Tauri Programme within The Commons Conservancy
SPDX-License-Identifier: Apache-2.0
SPDX-License-Identifier: MIT`
const bundlerLicense =

View File

@@ -1,6 +1,6 @@
#!/bin/bash
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,6 +1,6 @@
#!/bin/bash
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env node
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env node
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -34,6 +34,7 @@ switch (bump) {
index = 2
break
case 'prerelease':
case 'prepatch':
index = 3
break
default:

View File

@@ -1,6 +1,6 @@
#!/bin/sh
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env pwsh
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env sh
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# Copyright 2019-2024 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT

View File

@@ -1,10 +1,10 @@
: Copyright 2019-2023 Tauri Programme within The Commons Conservancy
: Copyright 2019-2024 Tauri Programme within The Commons Conservancy
: SPDX-License-Identifier: Apache-2.0
: SPDX-License-Identifier: MIT
@ECHO OFF
REM Copyright 2019-2023 Tauri Programme within The Commons Conservancy
REM Copyright 2019-2024 Tauri Programme within The Commons Conservancy
REM SPDX-License-Identifier: Apache-2.0
REM SPDX-License-Identifier: MIT

View File

@@ -1,8 +1,8 @@
# The Tauri Architecture
https://tauri.app
<https://tauri.app>
https://github.com/tauri-apps/tauri
<https://github.com/tauri-apps/tauri>
## Introduction
@@ -113,9 +113,9 @@ Generally speaking, plugins are authored by third parties (even though there may
Here are several examples of Tauri Plugins:
- https://github.com/tauri-apps/tauri-plugin-sql
- https://github.com/tauri-apps/tauri-plugin-stronghold
- https://github.com/tauri-apps/tauri-plugin-authenticator
- <https://github.com/tauri-apps/tauri-plugin-sql>
- <https://github.com/tauri-apps/tauri-plugin-stronghold>
- <https://github.com/tauri-apps/tauri-plugin-authenticator>
# Workflows

5082
Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -10,6 +10,7 @@ members = [
"core/tauri-build",
"core/tauri-codegen",
"core/tauri-config-schema",
"core/tauri-acl-schema",
"core/tauri-plugin",
# integration tests
@@ -43,3 +44,8 @@ codegen-units = 1
lto = true
incremental = false
opt-level = "s"
# Temporary patch to schemars to preserve newlines in docstrings for our reference docs schemas
# See https://github.com/GREsau/schemars/issues/120 for reference
[patch.crates-io]
schemars_derive = { git = 'https://github.com/tauri-apps/schemars.git', branch = 'feat/preserve-description-newlines' }

View File

@@ -6,7 +6,7 @@ PackageSupplier: Organization: The Tauri Programme in the Commons Conservancy
PackageHomePage: https://tauri.app
PackageLicenseDeclared: Apache-2.0
PackageLicenseDeclared: MIT
PackageCopyrightText: 2019-2022, The Tauri Programme in the Commons Conservancy
PackageCopyrightText: 2019-2024, The Tauri Programme in the Commons Conservancy
PackageSummary: <text>Tauri is a rust project that enables developers to make secure
and small desktop applications using a web frontend.
</text>

View File

@@ -35,7 +35,7 @@ The list of Tauri's features includes, but is not limited to:
- Built-in self updater (desktop only)
- System tray icons
- Native notifications
- Localhost free (:fire:)
- Localhost free (🔥)
- GitHub action for streamlined CI
- VS Code extension
@@ -48,8 +48,8 @@ Tauri currently supports development and distribution on the following platforms
| Windows | 7 and above |
| macOS | 10.15 and above |
| Linux | webkit2gtk 4.0 for Tauri v1 (for example Ubuntu 18.04). webkit2gtk 4.1 for Tauri v2 (for example Ubuntu 22.04). |
| iOS/iPadOS (alpha) | 9 and above |
| Android (alpha) | 7 and above |
| iOS/iPadOS (beta) | 9 and above |
| Android (beta) | 7 and above |
## Contributing
@@ -61,7 +61,7 @@ Thank you to everyone contributing to Tauri!
### Documentation
Documentation in a polyglot system is a tricky proposition. To this end, we prefer to use inline documentation in the Rust & JS source code as much as possible. Check out the hosting repository for the documentation site for further information: https://github.com/tauri-apps/tauri-docs
Documentation in a polyglot system is a tricky proposition. To this end, we prefer to use inline documentation in the Rust & JS source code as much as possible. Check out the hosting repository for the documentation site for further information: <https://github.com/tauri-apps/tauri-docs>
## Partners

View File

@@ -10,8 +10,8 @@
## Reporting a Vulnerability
If you have found a potential security threat, vulnerability or exploit in Tauri
or one of its upstream dependencies, please DONT create a pull-request, DONT
file an issue on GitHub, DONT mention it on Discord and DONT create a forum thread.
or one of its upstream dependencies, please DON'T create a pull-request, DON'T
file an issue on GitHub, DON'T mention it on Discord and DON'T create a forum thread.
Please submit your report via the GitHub Private Vulnerability Disclosure functionality.

View File

@@ -0,0 +1,12 @@
[package]
name = "tauri-acl-schema"
version = "0.0.0"
edition = "2021"
publish = false
[build-dependencies]
tauri-utils = { features = [ "schema" ], path = "../tauri-utils" }
schemars = { version = "0.8", features = ["url", "preserve_order"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
url = { version = "2.3", features = ["serde"] }

View File

@@ -0,0 +1,34 @@
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
use std::{error::Error, path::PathBuf};
use schemars::schema_for;
use tauri_utils::{
acl::capability::Capability,
acl::{Permission, Scopes},
write_if_changed,
};
macro_rules! schema {
($name:literal, $path:ty) => {
(concat!($name, "-schema.json"), schema_for!($path))
};
}
pub fn main() -> Result<(), Box<dyn Error>> {
let schemas = [
schema!("capability", Capability),
schema!("permission", Permission),
schema!("scope", Scopes),
];
let out = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR")?);
for (filename, schema) in schemas {
let schema = serde_json::to_string_pretty(&schema)?;
write_if_changed(out.join(filename), schema)?;
}
Ok(())
}

View File

@@ -0,0 +1,234 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Capability",
"description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\n It controls application windows fine grained access to the Tauri core, application, or plugin commands.\n If a window is not matching any capability then it has no access to the IPC layer at all.\n\n This can be done to create groups of windows, based on their required system access, which can reduce\n impact of frontend vulnerabilities in less privileged windows.\n Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`.\n A Window can have none, one, or multiple associated capabilities.\n\n ## Example\n\n ```json\n {\n \"identifier\": \"main-user-files-write\",\n \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\",\n \"windows\": [\n \"main\"\n ],\n \"permissions\": [\n \"core:default\",\n \"dialog:open\",\n {\n \"identifier\": \"fs:allow-write-text-file\",\n \"allow\": [{ \"path\": \"$HOME/test.txt\" }]\n },\n \"platforms\": [\"macOS\",\"windows\"]\n }\n ```",
"type": "object",
"required": [
"identifier",
"permissions"
],
"properties": {
"identifier": {
"description": "Identifier of the capability.\n\n ## Example\n\n `main-user-files-write`",
"type": "string"
},
"description": {
"description": "Description of what the capability is intended to allow on associated windows.\n\n It should contain a description of what the grouped permissions should allow.\n\n ## Example\n\n This capability allows the `main` window access to `filesystem` write related\n commands and `dialog` commands to enable programatic access to files selected by the user.",
"default": "",
"type": "string"
},
"remote": {
"description": "Configure remote URLs that can use the capability permissions.\n\n This setting is optional and defaults to not being set, as our\n default use case is that the content is served from our local application.\n\n :::caution\n Make sure you understand the security implications of providing remote\n sources with local system access.\n :::\n\n ## Example\n\n ```json\n {\n \"urls\": [\"https://*.mydomain.dev\"]\n }\n ```",
"anyOf": [
{
"$ref": "#/definitions/CapabilityRemote"
},
{
"type": "null"
}
]
},
"local": {
"description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.",
"default": true,
"type": "boolean"
},
"windows": {
"description": "List of windows that are affected by this capability. Can be a glob pattern.\n\n On multiwebview windows, prefer [`Self::webviews`] for a fine grained access control.\n\n ## Example\n\n `[\"main\"]`",
"type": "array",
"items": {
"type": "string"
}
},
"webviews": {
"description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\n This is only required when using on multiwebview contexts, by default\n all child webviews of a window that matches [`Self::windows`] are linked.\n\n ## Example\n\n `[\"sub-webview-one\", \"sub-webview-two\"]`",
"type": "array",
"items": {
"type": "string"
}
},
"permissions": {
"description": "List of permissions attached to this capability.\n\n Must include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`.\n For commands directly implemented in the application itself only `${permission-name}`\n is required.\n\n ## Example\n\n ```json\n [\n \"core:default\",\n \"shell:allow-open\",\n \"dialog:open\",\n {\n \"identifier\": \"fs:allow-write-text-file\",\n \"allow\": [{ \"path\": \"$HOME/test.txt\" }]\n }\n ```",
"type": "array",
"items": {
"$ref": "#/definitions/PermissionEntry"
},
"uniqueItems": true
},
"platforms": {
"description": "Limit which target platforms this capability applies to.\n\n By default all platforms are targeted.\n\n ## Example\n\n `[\"macOS\",\"windows\"]`",
"type": [
"array",
"null"
],
"items": {
"$ref": "#/definitions/Target"
}
}
},
"definitions": {
"CapabilityRemote": {
"description": "Configuration for remote URLs that are associated with the capability.",
"type": "object",
"required": [
"urls"
],
"properties": {
"urls": {
"description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n ## Examples\n\n - \"https://*.mydomain.dev\": allows subdomains of mydomain.dev\n - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api",
"type": "array",
"items": {
"type": "string"
}
}
}
},
"PermissionEntry": {
"description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`]\n or an object that references a permission and extends its scope.",
"anyOf": [
{
"description": "Reference a permission or permission set by identifier.",
"allOf": [
{
"$ref": "#/definitions/Identifier"
}
]
},
{
"description": "Reference a permission or permission set by identifier and extends its scope.",
"type": "object",
"required": [
"identifier"
],
"properties": {
"identifier": {
"description": "Identifier of the permission or permission set.",
"allOf": [
{
"$ref": "#/definitions/Identifier"
}
]
},
"allow": {
"description": "Data that defines what is allowed by the scope.",
"type": [
"array",
"null"
],
"items": {
"$ref": "#/definitions/Value"
}
},
"deny": {
"description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.",
"type": [
"array",
"null"
],
"items": {
"$ref": "#/definitions/Value"
}
}
}
}
]
},
"Identifier": {
"type": "string"
},
"Value": {
"description": "All supported ACL values.",
"anyOf": [
{
"description": "Represents a null JSON value.",
"type": "null"
},
{
"description": "Represents a [`bool`].",
"type": "boolean"
},
{
"description": "Represents a valid ACL [`Number`].",
"allOf": [
{
"$ref": "#/definitions/Number"
}
]
},
{
"description": "Represents a [`String`].",
"type": "string"
},
{
"description": "Represents a list of other [`Value`]s.",
"type": "array",
"items": {
"$ref": "#/definitions/Value"
}
},
{
"description": "Represents a map of [`String`] keys to [`Value`]s.",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Value"
}
}
]
},
"Number": {
"description": "A valid ACL number.",
"anyOf": [
{
"description": "Represents an [`i64`].",
"type": "integer",
"format": "int64"
},
{
"description": "Represents a [`f64`].",
"type": "number",
"format": "double"
}
]
},
"Target": {
"description": "Platform target.",
"oneOf": [
{
"description": "MacOS.",
"type": "string",
"enum": [
"macOS"
]
},
{
"description": "Windows.",
"type": "string",
"enum": [
"windows"
]
},
{
"description": "Linux.",
"type": "string",
"enum": [
"linux"
]
},
{
"description": "Android.",
"type": "string",
"enum": [
"android"
]
},
{
"description": "iOS.",
"type": "string",
"enum": [
"iOS"
]
}
]
}
}
}

View File

@@ -0,0 +1,205 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Permission",
"description": "Descriptions of explicit privileges of commands.\n\n It can enable commands to be accessible in the frontend of the application.\n\n If the scope is defined it can be used to fine grain control the access of individual or multiple commands.",
"type": "object",
"required": [
"identifier"
],
"properties": {
"version": {
"description": "The version of the permission.",
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 1.0
},
"identifier": {
"description": "A unique identifier for the permission.",
"type": "string"
},
"description": {
"description": "Human-readable description of what the permission does.\n Tauri internal convention is to use <h4> headings in markdown content\n for Tauri documentation generation purposes.",
"type": [
"string",
"null"
]
},
"commands": {
"description": "Allowed or denied commands when using this permission.",
"default": {
"allow": [],
"deny": []
},
"allOf": [
{
"$ref": "#/definitions/Commands"
}
]
},
"scope": {
"description": "Allowed or denied scoped when using this permission.",
"allOf": [
{
"$ref": "#/definitions/Scopes"
}
]
},
"platforms": {
"description": "Target platforms this permission applies. By default all platforms are affected by this permission.",
"type": [
"array",
"null"
],
"items": {
"$ref": "#/definitions/Target"
}
}
},
"definitions": {
"Commands": {
"description": "Allowed and denied commands inside a permission.\n\n If two commands clash inside of `allow` and `deny`, it should be denied by default.",
"type": "object",
"properties": {
"allow": {
"description": "Allowed command.",
"default": [],
"type": "array",
"items": {
"type": "string"
}
},
"deny": {
"description": "Denied command, which takes priority.",
"default": [],
"type": "array",
"items": {
"type": "string"
}
}
}
},
"Scopes": {
"description": "An argument for fine grained behavior control of Tauri commands.\n\n It can be of any serde serializable type and is used to allow or prevent certain actions inside a Tauri command.\n The configured scope is passed to the command and will be enforced by the command implementation.\n\n ## Example\n\n ```json\n {\n \"allow\": [{ \"path\": \"$HOME/**\" }],\n \"deny\": [{ \"path\": \"$HOME/secret.txt\" }]\n }\n ```",
"type": "object",
"properties": {
"allow": {
"description": "Data that defines what is allowed by the scope.",
"type": [
"array",
"null"
],
"items": {
"$ref": "#/definitions/Value"
}
},
"deny": {
"description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.",
"type": [
"array",
"null"
],
"items": {
"$ref": "#/definitions/Value"
}
}
}
},
"Value": {
"description": "All supported ACL values.",
"anyOf": [
{
"description": "Represents a null JSON value.",
"type": "null"
},
{
"description": "Represents a [`bool`].",
"type": "boolean"
},
{
"description": "Represents a valid ACL [`Number`].",
"allOf": [
{
"$ref": "#/definitions/Number"
}
]
},
{
"description": "Represents a [`String`].",
"type": "string"
},
{
"description": "Represents a list of other [`Value`]s.",
"type": "array",
"items": {
"$ref": "#/definitions/Value"
}
},
{
"description": "Represents a map of [`String`] keys to [`Value`]s.",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Value"
}
}
]
},
"Number": {
"description": "A valid ACL number.",
"anyOf": [
{
"description": "Represents an [`i64`].",
"type": "integer",
"format": "int64"
},
{
"description": "Represents a [`f64`].",
"type": "number",
"format": "double"
}
]
},
"Target": {
"description": "Platform target.",
"oneOf": [
{
"description": "MacOS.",
"type": "string",
"enum": [
"macOS"
]
},
{
"description": "Windows.",
"type": "string",
"enum": [
"windows"
]
},
{
"description": "Linux.",
"type": "string",
"enum": [
"linux"
]
},
{
"description": "Android.",
"type": "string",
"enum": [
"android"
]
},
{
"description": "iOS.",
"type": "string",
"enum": [
"iOS"
]
}
]
}
}
}

View File

@@ -0,0 +1,84 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Scopes",
"description": "An argument for fine grained behavior control of Tauri commands.\n\n It can be of any serde serializable type and is used to allow or prevent certain actions inside a Tauri command.\n The configured scope is passed to the command and will be enforced by the command implementation.\n\n ## Example\n\n ```json\n {\n \"allow\": [{ \"path\": \"$HOME/**\" }],\n \"deny\": [{ \"path\": \"$HOME/secret.txt\" }]\n }\n ```",
"type": "object",
"properties": {
"allow": {
"description": "Data that defines what is allowed by the scope.",
"type": [
"array",
"null"
],
"items": {
"$ref": "#/definitions/Value"
}
},
"deny": {
"description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.",
"type": [
"array",
"null"
],
"items": {
"$ref": "#/definitions/Value"
}
}
},
"definitions": {
"Value": {
"description": "All supported ACL values.",
"anyOf": [
{
"description": "Represents a null JSON value.",
"type": "null"
},
{
"description": "Represents a [`bool`].",
"type": "boolean"
},
{
"description": "Represents a valid ACL [`Number`].",
"allOf": [
{
"$ref": "#/definitions/Number"
}
]
},
{
"description": "Represents a [`String`].",
"type": "string"
},
{
"description": "Represents a list of other [`Value`]s.",
"type": "array",
"items": {
"$ref": "#/definitions/Value"
}
},
{
"description": "Represents a map of [`String`] keys to [`Value`]s.",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Value"
}
}
]
},
"Number": {
"description": "A valid ACL number.",
"anyOf": [
{
"description": "Represents an [`i64`].",
"type": "integer",
"format": "int64"
},
{
"description": "Represents a [`f64`].",
"type": "number",
"format": "double"
}
]
}
}
}

View File

@@ -0,0 +1,14 @@
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
//! [![](https://github.com/tauri-apps/tauri/raw/dev/.github/splash.png)](https://tauri.app)
//!
//! Hosts the schema for the Tauri configuration file.
#![doc(
html_logo_url = "https://github.com/tauri-apps/tauri/raw/dev/app-icon.png",
html_favicon_url = "https://github.com/tauri-apps/tauri/raw/dev/app-icon.png"
)]
fn main() {}

View File

@@ -1,5 +1,204 @@
# Changelog
## \[2.0.0-rc.0]
### Dependencies
- Upgraded to `tauri-codegen@2.0.0-rc.0`
- Upgraded to `tauri-utils@2.0.0-rc.0`
## \[2.0.0-beta.19]
### Bug Fixes
- [`69dcfdfe0`](https://www.github.com/tauri-apps/tauri/commit/69dcfdfe0f3b0570fcf5997267a7200087d5341b) ([#10267](https://www.github.com/tauri-apps/tauri/pull/10267) by [@lucasfernog](https://www.github.com/tauri-apps/tauri/../../lucasfernog)) Fix build script rerun-if-changed instruction if Info.plist do not exist next to tauri.conf.json.
### Dependencies
- Upgraded to `tauri-codegen@2.0.0-beta.19`
- Upgraded to `tauri-utils@2.0.0-beta.19`
## \[2.0.0-beta.18]
### Enhancements
- [`35110dba2`](https://www.github.com/tauri-apps/tauri/commit/35110dba21d7db0f155c45da58b41c9ca4d5853c) ([#10106](https://www.github.com/tauri-apps/tauri/pull/10106)) Fix delete app data button gone on higher scaling (>= 1.5)
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.18`
- Upgraded to `tauri-codegen@2.0.0-beta.18`
- [`f955f7b49`](https://www.github.com/tauri-apps/tauri/commit/f955f7b4903bcea376c0a8b430736f66c8cebf56) ([#9929](https://www.github.com/tauri-apps/tauri/pull/9929)) Switch from `dirs_next` to `dirs` as `dirs_next` is now unmaintained while `dirs` is
## \[2.0.0-beta.17]
### Enhancements
- [`adac2185a`](https://www.github.com/tauri-apps/tauri/commit/adac2185a3e2e65a89a3c392363c50ddde4acff2)([#9898](https://www.github.com/tauri-apps/tauri/pull/9898)) Check for Android version code before building the package in release mode.
### Bug Fixes
- [`19b696b61`](https://www.github.com/tauri-apps/tauri/commit/19b696b61c95ced0f07dd7471565ad329a0badcf)([#9710](https://www.github.com/tauri-apps/tauri/pull/9710)) Avoid copying resources if the target path is the same as source.
### What's Changed
- [`9ac930380`](https://www.github.com/tauri-apps/tauri/commit/9ac930380a5df3fe700e68e75df8684d261ca292)([#9850](https://www.github.com/tauri-apps/tauri/pull/9850)) Emit `cargo:rustc-check-cfg` instruction so Cargo validates custom cfg attributes on Rust 1.80 (or nightly-2024-05-05).
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.17`
- Upgraded to `tauri-codegen@2.0.0-beta.17`
### Breaking Changes
- [`1df5cdeb0`](https://www.github.com/tauri-apps/tauri/commit/1df5cdeb06f5464e0eec4055e21b7b7bc8739eed)([#9858](https://www.github.com/tauri-apps/tauri/pull/9858)) Use `tauri.conf.json > identifier` to set the `PackageName` in Android and `BundleId` in iOS.
- [`aaecb6a72`](https://www.github.com/tauri-apps/tauri/commit/aaecb6a72e5d1462967cc910c2628999997742d0)([#9890](https://www.github.com/tauri-apps/tauri/pull/9890)) Renamed `dev` function to `is_dev`
## \[2.0.0-beta.16]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.16`
- Upgraded to `tauri-codegen@2.0.0-beta.16`
## \[2.0.0-beta.15]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.15`
- Upgraded to `tauri-codegen@2.0.0-beta.15`
## \[2.0.0-beta.14]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.14`
- Upgraded to `tauri-codegen@2.0.0-beta.14`
## \[2.0.0-beta.13]
### Bug Fixes
- [`88c0ad9cf`](https://www.github.com/tauri-apps/tauri/commit/88c0ad9cf5d2f9ed65285540c26b54fb18b10137)([#9471](https://www.github.com/tauri-apps/tauri/pull/9471)) Fix tauri always rebuilding even if source code didn't change.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.13`
- Upgraded to `tauri-codegen@2.0.0-beta.13`
## \[2.0.0-beta.12]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.12`
- Upgraded to `tauri-codegen@2.0.0-beta.12`
## \[2.0.0-beta.11]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.11`
- Upgraded to `tauri-codegen@2.0.0-beta.11`
## \[2.0.0-beta.10]
### New Features
- [`e227fe02f`](https://www.github.com/tauri-apps/tauri/commit/e227fe02f986e145c0731a64693e1c830a9eb5b0)([#9156](https://www.github.com/tauri-apps/tauri/pull/9156)) Allow plugins to define (at compile time) JavaScript that are initialized when `withGlobalTauri` is true.
### Enhancements
- [`7213b9e47`](https://www.github.com/tauri-apps/tauri/commit/7213b9e47242bef814aa7257e0bf84631bf5fe7e)([#9124](https://www.github.com/tauri-apps/tauri/pull/9124)) Fallback to an empty permission set if the plugin did not define its `default` permissions.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.10`
- Upgraded to `tauri-codegen@2.0.0-beta.10`
## \[2.0.0-beta.9]
### Dependencies
- Upgraded to `tauri-codegen@2.0.0-beta.9`
- Upgraded to `tauri-utils@2.0.0-beta.9`
## \[2.0.0-beta.8]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.8`
- Upgraded to `tauri-codegen@2.0.0-beta.8`
## \[2.0.0-beta.7]
### Bug Fixes
- [`bb23511ea`](https://www.github.com/tauri-apps/tauri/commit/bb23511ea80bcaffbdebf057301e463fff268c90)([#9079](https://www.github.com/tauri-apps/tauri/pull/9079)) Fixed generation of capability schema for permissions field which previously disallowed mixed (strings and objects) permission definition.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.7`
- Upgraded to `tauri-codegen@2.0.0-beta.7`
## \[2.0.0-beta.6]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.6`
- Upgraded to `tauri-codegen@2.0.0-beta.6`
### Breaking Changes
- [`3657ad82`](https://www.github.com/tauri-apps/tauri/commit/3657ad82f88ce528551d032d521c52eed3f396b4)([#9008](https://www.github.com/tauri-apps/tauri/pull/9008)) Allow defining permissions for the application commands via `tauri_build::Attributes::app_manifest`.
## \[2.0.0-beta.5]
### Breaking Changes
- [`b9e6a018`](https://www.github.com/tauri-apps/tauri/commit/b9e6a01879d9233040f3d3fab11c59e70563da7e)([#8937](https://www.github.com/tauri-apps/tauri/pull/8937)) The `custom-protocol` Cargo feature is no longer required on your application and is now ignored. To check if running on production, use `#[cfg(not(dev))]` instead of `#[cfg(feature = "custom-protocol")]`.
- [`b9e6a018`](https://www.github.com/tauri-apps/tauri/commit/b9e6a01879d9233040f3d3fab11c59e70563da7e)([#8937](https://www.github.com/tauri-apps/tauri/pull/8937)) Removed `tauri_build::CodegenContext::dev()` and added `tauri_build::dev()`.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.5`
- Upgraded to `tauri-codegen@2.0.0-beta.5`
## \[2.0.0-beta.4]
### Enhancements
- [`b5eb6472`](https://www.github.com/tauri-apps/tauri/commit/b5eb64728aeb410d3f3068608a94762655c4690f)([#8940](https://www.github.com/tauri-apps/tauri/pull/8940)) Enable Hight DPI awareness for NSIS installer so it is not blurry on some systems.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.4`
- Upgraded to `tauri-codegen@2.0.0-beta.4`
## \[2.0.0-beta.3]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.3`
- Upgraded to `tauri-codegen@2.0.0-beta.3`
## \[2.0.0-beta.2]
### Enhancements
- [`83a68deb`](https://www.github.com/tauri-apps/tauri/commit/83a68deb5676d39cd4728d2e140f6b46d5f787ed)([#8797](https://www.github.com/tauri-apps/tauri/pull/8797)) Added a new configuration option `tauri.conf.json > app > security > capabilities` to reference existing capabilities and inline new ones. If it is empty, all capabilities are still included preserving the current behavior.
- [`edb11c13`](https://www.github.com/tauri-apps/tauri/commit/edb11c138def2e317099db432479e3ca5dbf803f)([#8781](https://www.github.com/tauri-apps/tauri/pull/8781)) Added `Attributes::plugin()` to register a plugin that is inlined in the application crate.
- [`8d16a80d`](https://www.github.com/tauri-apps/tauri/commit/8d16a80d2fb2468667e7987d0cc99dbc7e3b9d0a)([#8802](https://www.github.com/tauri-apps/tauri/pull/8802)) Added `CodegenContext::capability` to include a capability file dynamically.
### Bug Fixes
- [`0e8e9cd0`](https://www.github.com/tauri-apps/tauri/commit/0e8e9cd064627e734adf8f62e571dc5f4e8f4d9f)([#8906](https://www.github.com/tauri-apps/tauri/pull/8906)) Fixes the capability schema not resolving inner definitions.
- [`19fb5f0b`](https://www.github.com/tauri-apps/tauri/commit/19fb5f0b20479885bf8bc4fdd8c431052420191d)([#8782](https://www.github.com/tauri-apps/tauri/pull/8782)) Fix generating invalid schema files.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.2`
- Upgraded to `tauri-codegen@2.0.0-beta.2`
## \[2.0.0-beta.1]
### Enhancements
@@ -174,6 +373,13 @@
- First mobile alpha release!
- [fa3a1098](https://www.github.com/tauri-apps/tauri/commit/fa3a10988a03aed1b66fb17d893b1a9adb90f7cd) feat(ci): prepare 2.0.0-alpha.0 ([#5786](https://www.github.com/tauri-apps/tauri/pull/5786)) on 2022-12-08
## \[1.5.1]
### Dependencies
- Upgraded to `tauri-utils@1.5.2`
- Upgraded to `tauri-codegen@1.4.2`
## \[1.5.0]
### What's Changed
@@ -198,7 +404,7 @@
- [`52474e47`](https://www.github.com/tauri-apps/tauri/commit/52474e479d695865299d8c8d868fb98b99731020)([#7141](https://www.github.com/tauri-apps/tauri/pull/7141)) Enhance Cargo features check.
- [`af937290`](https://www.github.com/tauri-apps/tauri/commit/af93729031565a69d1fde6cf16bea3b9b6e43a65)([#6676](https://www.github.com/tauri-apps/tauri/pull/6676)) On Windows, set `LegalCopyright` and `FileDescription` file properties on the executable from `tauri.bundle.copyright` and `tauri.bundle.shortDescription`,
- [`d2710e9d`](https://www.github.com/tauri-apps/tauri/commit/d2710e9d2e8fd93975ef6494512370faa8cb3b7e)([#6944](https://www.github.com/tauri-apps/tauri/pull/6944)) Unpin `time`, `ignore`, and `winnow` crate versions. Developers now have to pin crates if needed themselves. A list of crates that need pinning to adhere to Tauri's MSRV will be visible in Tauri's GitHub workflow: https://github.com/tauri-apps/tauri/blob/dev/.github/workflows/test-core.yml#L85.
- [`d2710e9d`](https://www.github.com/tauri-apps/tauri/commit/d2710e9d2e8fd93975ef6494512370faa8cb3b7e)([#6944](https://www.github.com/tauri-apps/tauri/pull/6944)) Unpin `time`, `ignore`, and `winnow` crate versions. Developers now have to pin crates if needed themselves. A list of crates that need pinning to adhere to Tauri's MSRV will be visible in Tauri's GitHub workflow: <https://github.com/tauri-apps/tauri/blob/dev/.github/workflows/test-core.yml#L85>.
## \[1.3.0]

View File

@@ -1,6 +1,6 @@
[package]
name = "tauri-build"
version = "2.0.0-beta.1"
version = "2.0.0-rc.0"
description = "build time code to pair with https://crates.io/crates/tauri"
exclude = [ "CHANGELOG.md", "/target" ]
readme = "README.md"
@@ -28,20 +28,20 @@ rustdoc-args = [ "--cfg", "docsrs" ]
[dependencies]
anyhow = "1"
quote = { version = "1", optional = true }
tauri-codegen = { version = "2.0.0-beta.1", path = "../tauri-codegen", optional = true }
tauri-utils = { version = "2.0.0-beta.1", path = "../tauri-utils", features = [ "build", "resources" ] }
tauri-codegen = { version = "2.0.0-rc.0", path = "../tauri-codegen", optional = true }
tauri-utils = { version = "2.0.0-rc.0", path = "../tauri-utils", features = [ "build", "resources" ] }
cargo_toml = "0.17"
serde = "1"
serde_json = "1"
heck = "0.4"
heck = "0.5"
json-patch = "1.2"
walkdir = "2"
tauri-winres = "0.1"
semver = "1"
dirs-next = "2"
dirs = "5"
glob = "0.3"
toml = "0.8"
schemars = { version = "0.8", features = [ "preserve_order" ] }
schemars = { version = "0.8.18", features = [ "preserve_order" ] }
[features]
default = [ "config-json" ]

View File

@@ -1,11 +1,12 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
use std::{
collections::{BTreeMap, BTreeSet},
collections::{BTreeMap, BTreeSet, HashMap},
env::current_dir,
fs::{copy, create_dir_all, read_to_string, write},
path::PathBuf,
path::{Path, PathBuf},
};
use anyhow::{Context, Result};
@@ -17,7 +18,11 @@ use schemars::{
schema_for,
};
use tauri_utils::{
acl::{build::CapabilityFile, capability::Capability, plugin::Manifest},
acl::{
capability::{Capability, CapabilityFile},
manifest::Manifest,
APP_ACL_KEY,
},
platform::Target,
};
@@ -25,43 +30,119 @@ const CAPABILITIES_SCHEMA_FILE_NAME: &str = "schema.json";
/// Path of the folder where schemas are saved.
const CAPABILITIES_SCHEMA_FOLDER_PATH: &str = "gen/schemas";
const CAPABILITIES_FILE_NAME: &str = "capabilities.json";
const PLUGIN_MANIFESTS_FILE_NAME: &str = "plugin-manifests.json";
const ACL_MANIFESTS_FILE_NAME: &str = "acl-manifests.json";
fn capabilities_schema(plugin_manifests: &BTreeMap<String, Manifest>) -> RootSchema {
/// Definition of a plugin that is part of the Tauri application instead of having its own crate.
///
/// By default it generates a plugin manifest that parses permissions from the `permissions/$plugin-name` directory.
/// To change the glob pattern that is used to find permissions, use [`Self::permissions_path_pattern`].
///
/// To autogenerate permissions for each of the plugin commands, see [`Self::commands`].
#[derive(Debug, Default)]
pub struct InlinedPlugin {
commands: &'static [&'static str],
permissions_path_pattern: Option<&'static str>,
}
impl InlinedPlugin {
pub fn new() -> Self {
Self::default()
}
/// Define a list of commands that gets permissions autogenerated in the format of `allow-$command` and `deny-$command`
/// where $command is the command name in snake_case.
pub fn commands(mut self, commands: &'static [&'static str]) -> Self {
self.commands = commands;
self
}
/// Sets a glob pattern that is used to find the permissions of this inlined plugin.
///
/// **Note:** You must emit [rerun-if-changed] instructions for the plugin permissions directory.
///
/// By default it is `./permissions/$plugin-name/**/*`
pub fn permissions_path_pattern(mut self, pattern: &'static str) -> Self {
self.permissions_path_pattern.replace(pattern);
self
}
}
/// Tauri application permission manifest.
///
/// By default it generates a manifest that parses permissions from the `permissions` directory.
/// To change the glob pattern that is used to find permissions, use [`Self::permissions_path_pattern`].
///
/// To autogenerate permissions for each of the app commands, see [`Self::commands`].
#[derive(Debug, Default)]
pub struct AppManifest {
commands: &'static [&'static str],
permissions_path_pattern: Option<&'static str>,
}
impl AppManifest {
pub fn new() -> Self {
Self::default()
}
/// Define a list of commands that gets permissions autogenerated in the format of `allow-$command` and `deny-$command`
/// where $command is the command name in snake_case.
pub fn commands(mut self, commands: &'static [&'static str]) -> Self {
self.commands = commands;
self
}
/// Sets a glob pattern that is used to find the permissions of the app.
///
/// **Note:** You must emit [rerun-if-changed] instructions for the permissions directory.
///
/// By default it is `./permissions/**/*` ignoring any [`InlinedPlugin`].
pub fn permissions_path_pattern(mut self, pattern: &'static str) -> Self {
self.permissions_path_pattern.replace(pattern);
self
}
}
fn capabilities_schema(acl_manifests: &BTreeMap<String, Manifest>) -> RootSchema {
let mut schema = schema_for!(CapabilityFile);
fn schema_from(plugin: &str, id: &str, description: Option<&str>) -> Schema {
fn schema_from(key: &str, id: &str, description: Option<&str>) -> Schema {
let command_name = if key == APP_ACL_KEY {
id.to_string()
} else {
format!("{key}:{id}")
};
Schema::Object(SchemaObject {
metadata: Some(Box::new(Metadata {
description: description
.as_ref()
.map(|d| format!("{plugin}:{id} -> {d}")),
.map(|d| format!("{command_name} -> {d}")),
..Default::default()
})),
instance_type: Some(InstanceType::String.into()),
enum_values: Some(vec![serde_json::Value::String(format!("{plugin}:{id}"))]),
enum_values: Some(vec![serde_json::Value::String(command_name)]),
..Default::default()
})
}
let mut permission_schemas = Vec::new();
for (plugin, manifest) in plugin_manifests {
for (key, manifest) in acl_manifests {
for (set_id, set) in &manifest.permission_sets {
permission_schemas.push(schema_from(plugin, set_id, Some(&set.description)));
permission_schemas.push(schema_from(key, set_id, Some(&set.description)));
}
if let Some(default) = &manifest.default_permission {
permission_schemas.push(schema_from(
plugin,
"default",
Some(default.description.as_ref()),
));
}
permission_schemas.push(schema_from(
key,
"default",
manifest
.default_permission
.as_ref()
.map(|d| d.description.as_ref()),
));
for (permission_id, permission) in &manifest.permissions {
permission_schemas.push(schema_from(
plugin,
key,
permission_id,
permission.description.as_deref(),
));
@@ -83,27 +164,32 @@ fn capabilities_schema(plugin_manifests: &BTreeMap<String, Manifest>) -> RootSch
}));
}
let mut definitions = Vec::new();
if let Some(Schema::Object(obj)) = schema.definitions.get_mut("PermissionEntry") {
let permission_entry_any_of_schemas = obj.subschemas().any_of.as_mut().unwrap();
if let Schema::Object(mut scope_extended_schema_obj) =
permission_entry_any_of_schemas.remove(permission_entry_any_of_schemas.len() - 1)
if let Schema::Object(scope_extended_schema_obj) =
permission_entry_any_of_schemas.last_mut().unwrap()
{
let mut global_scope_one_of = Vec::new();
for (plugin, manifest) in plugin_manifests {
for (key, manifest) in acl_manifests {
if let Some(global_scope_schema) = &manifest.global_scope_schema {
let global_scope_schema_def: Schema = serde_json::from_value(global_scope_schema.clone())
.unwrap_or_else(|e| panic!("invalid JSON schema for plugin {plugin}: {e}"));
let global_scope_schema_def: RootSchema =
serde_json::from_value(global_scope_schema.clone())
.unwrap_or_else(|e| panic!("invalid JSON schema for plugin {key}: {e}"));
let global_scope_schema = Schema::Object(SchemaObject {
array: Some(Box::new(ArrayValidation {
items: Some(global_scope_schema_def.into()),
items: Some(Schema::Object(global_scope_schema_def.schema).into()),
..Default::default()
})),
..Default::default()
});
definitions.push(global_scope_schema_def.definitions);
let mut required = BTreeSet::new();
required.insert("identifier".to_string());
@@ -113,15 +199,20 @@ fn capabilities_schema(plugin_manifests: &BTreeMap<String, Manifest>) -> RootSch
};
let mut permission_schemas = Vec::new();
if let Some(default) = &manifest.default_permission {
permission_schemas.push(schema_from(plugin, "default", Some(&default.description)));
}
permission_schemas.push(schema_from(
key,
"default",
manifest
.default_permission
.as_ref()
.map(|d| d.description.as_ref()),
));
for set in manifest.permission_sets.values() {
permission_schemas.push(schema_from(plugin, &set.identifier, Some(&set.description)));
permission_schemas.push(schema_from(key, &set.identifier, Some(&set.description)));
}
for permission in manifest.permissions.values() {
permission_schemas.push(schema_from(
plugin,
key,
&permission.identifier,
permission.description.as_deref(),
));
@@ -161,27 +252,26 @@ fn capabilities_schema(plugin_manifests: &BTreeMap<String, Manifest>) -> RootSch
one_of: Some(global_scope_one_of),
..Default::default()
}));
permission_entry_any_of_schemas.push(scope_extended_schema_obj.into());
};
}
}
for definitions_map in definitions {
schema.definitions.extend(definitions_map);
}
schema
}
pub fn generate_schema(
plugin_manifests: &BTreeMap<String, Manifest>,
target: Target,
) -> Result<()> {
let schema = capabilities_schema(plugin_manifests);
pub fn generate_schema(acl_manifests: &BTreeMap<String, Manifest>, target: Target) -> Result<()> {
let schema = capabilities_schema(acl_manifests);
let schema_str = serde_json::to_string_pretty(&schema).unwrap();
let out_dir = PathBuf::from(CAPABILITIES_SCHEMA_FOLDER_PATH);
create_dir_all(&out_dir).context("unable to create schema output directory")?;
let schema_path = out_dir.join(format!("{target}-{CAPABILITIES_SCHEMA_FILE_NAME}"));
if schema_str != read_to_string(&schema_path).unwrap_or_default() {
write(&schema_path, "{schema_str}")?;
write(&schema_path, schema_str)?;
copy(
schema_path,
@@ -209,17 +299,17 @@ pub fn save_capabilities(capabilities: &BTreeMap<String, Capability>) -> Result<
Ok(capabilities_path)
}
pub fn save_plugin_manifests(plugin_manifests: &BTreeMap<String, Manifest>) -> Result<PathBuf> {
let plugin_manifests_path =
PathBuf::from(CAPABILITIES_SCHEMA_FOLDER_PATH).join(PLUGIN_MANIFESTS_FILE_NAME);
let plugin_manifests_json = serde_json::to_string(&plugin_manifests)?;
if plugin_manifests_json != read_to_string(&plugin_manifests_path).unwrap_or_default() {
std::fs::write(&plugin_manifests_path, plugin_manifests_json)?;
pub fn save_acl_manifests(acl_manifests: &BTreeMap<String, Manifest>) -> Result<PathBuf> {
let acl_manifests_path =
PathBuf::from(CAPABILITIES_SCHEMA_FOLDER_PATH).join(ACL_MANIFESTS_FILE_NAME);
let acl_manifests_json = serde_json::to_string(&acl_manifests)?;
if acl_manifests_json != read_to_string(&acl_manifests_path).unwrap_or_default() {
std::fs::write(&acl_manifests_path, acl_manifests_json)?;
}
Ok(plugin_manifests_path)
Ok(acl_manifests_path)
}
pub fn get_plugin_manifests() -> Result<BTreeMap<String, Manifest>> {
pub fn get_manifests_from_plugins() -> Result<BTreeMap<String, Manifest>> {
let permission_map =
tauri_utils::acl::build::read_permissions().context("failed to read plugin permissions")?;
let mut global_scope_map = tauri_utils::acl::build::read_global_scope_schemas()
@@ -234,52 +324,197 @@ pub fn get_plugin_manifests() -> Result<BTreeMap<String, Manifest>> {
Ok(processed)
}
pub fn inline_plugins(
out_dir: &Path,
inlined_plugins: HashMap<&'static str, InlinedPlugin>,
) -> Result<BTreeMap<String, Manifest>> {
let mut acl_manifests = BTreeMap::new();
for (name, plugin) in inlined_plugins {
let plugin_out_dir = out_dir.join("plugins").join(name);
create_dir_all(&plugin_out_dir)?;
let mut permission_files = if plugin.commands.is_empty() {
Vec::new()
} else {
tauri_utils::acl::build::autogenerate_command_permissions(
&plugin_out_dir,
plugin.commands,
"",
false,
);
tauri_utils::acl::build::define_permissions(
&plugin_out_dir.join("*").to_string_lossy(),
name,
&plugin_out_dir,
|_| true,
)?
};
if let Some(pattern) = plugin.permissions_path_pattern {
permission_files.extend(tauri_utils::acl::build::define_permissions(
pattern,
name,
&plugin_out_dir,
|_| true,
)?);
} else {
let default_permissions_path = Path::new("permissions").join(name);
if default_permissions_path.exists() {
println!(
"cargo:rerun-if-changed={}",
default_permissions_path.display()
);
}
permission_files.extend(tauri_utils::acl::build::define_permissions(
&default_permissions_path
.join("**")
.join("*")
.to_string_lossy(),
name,
&plugin_out_dir,
|_| true,
)?);
}
let manifest = tauri_utils::acl::manifest::Manifest::new(permission_files, None);
acl_manifests.insert(name.into(), manifest);
}
Ok(acl_manifests)
}
pub fn app_manifest_permissions(
out_dir: &Path,
manifest: AppManifest,
inlined_plugins: &HashMap<&'static str, InlinedPlugin>,
) -> Result<Manifest> {
let app_out_dir = out_dir.join("app-manifest");
create_dir_all(&app_out_dir)?;
let pkg_name = "__app__";
let mut permission_files = if manifest.commands.is_empty() {
Vec::new()
} else {
let autogenerated_path = Path::new("./permissions/autogenerated");
tauri_utils::acl::build::autogenerate_command_permissions(
autogenerated_path,
manifest.commands,
"",
false,
);
tauri_utils::acl::build::define_permissions(
&autogenerated_path.join("*").to_string_lossy(),
pkg_name,
&app_out_dir,
|_| true,
)?
};
if let Some(pattern) = manifest.permissions_path_pattern {
permission_files.extend(tauri_utils::acl::build::define_permissions(
pattern,
pkg_name,
&app_out_dir,
|_| true,
)?);
} else {
let default_permissions_path = Path::new("permissions");
if default_permissions_path.exists() {
println!(
"cargo:rerun-if-changed={}",
default_permissions_path.display()
);
}
let permissions_root = current_dir()?.join("permissions");
let inlined_plugins_permissions: Vec<_> = inlined_plugins
.keys()
.map(|name| permissions_root.join(name))
.collect();
permission_files.extend(tauri_utils::acl::build::define_permissions(
&default_permissions_path
.join("**")
.join("*")
.to_string_lossy(),
pkg_name,
&app_out_dir,
// filter out directories containing inlined plugins
|p| {
!inlined_plugins_permissions
.iter()
.any(|inlined_path| p.starts_with(inlined_path))
},
)?);
}
Ok(tauri_utils::acl::manifest::Manifest::new(
permission_files,
None,
))
}
pub fn validate_capabilities(
plugin_manifests: &BTreeMap<String, Manifest>,
acl_manifests: &BTreeMap<String, Manifest>,
capabilities: &BTreeMap<String, Capability>,
) -> Result<()> {
let target = tauri_utils::platform::Target::from_triple(&std::env::var("TARGET").unwrap());
for capability in capabilities.values() {
if !capability.platforms.contains(&target) {
if !capability
.platforms
.as_ref()
.map(|platforms| platforms.contains(&target))
.unwrap_or(true)
{
continue;
}
for permission_entry in &capability.permissions {
let permission_id = permission_entry.identifier();
if let Some((plugin_name, permission_name)) = permission_id.get().split_once(':') {
let permission_exists = plugin_manifests
.get(plugin_name)
.map(|manifest| {
if permission_name == "default" {
manifest.default_permission.is_some()
} else {
manifest.permissions.contains_key(permission_name)
|| manifest.permission_sets.contains_key(permission_name)
}
})
.unwrap_or(false);
if !permission_exists {
let mut available_permissions = Vec::new();
for (plugin, manifest) in plugin_manifests {
if manifest.default_permission.is_some() {
available_permissions.push(format!("{plugin}:default"));
}
for p in manifest.permissions.keys() {
available_permissions.push(format!("{plugin}:{p}"));
}
for p in manifest.permission_sets.keys() {
available_permissions.push(format!("{plugin}:{p}"));
}
let key = permission_id.get_prefix().unwrap_or(APP_ACL_KEY);
let permission_name = permission_id.get_base();
if key == "core" && permission_name == "default" {
continue;
}
let permission_exists = acl_manifests
.get(key)
.map(|manifest| {
// the default permission is always treated as valid, the CLI automatically adds it on the `tauri add` command
permission_name == "default"
|| manifest.permissions.contains_key(permission_name)
|| manifest.permission_sets.contains_key(permission_name)
})
.unwrap_or(false);
if !permission_exists {
let mut available_permissions = Vec::new();
for (key, manifest) in acl_manifests {
let prefix = if key == APP_ACL_KEY {
"".to_string()
} else {
format!("{key}:")
};
if manifest.default_permission.is_some() {
available_permissions.push(format!("{prefix}default"));
}
for p in manifest.permissions.keys() {
available_permissions.push(format!("{prefix}{p}"));
}
for p in manifest.permission_sets.keys() {
available_permissions.push(format!("{prefix}{p}"));
}
anyhow::bail!(
"Permission {} not found, expected one of {}",
permission_id.get(),
available_permissions.join(", ")
);
}
anyhow::bail!(
"Permission {} not found, expected one of {}",
permission_id.get(),
available_permissions.join(", ")
);
}
}
}

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@ use std::{
env::var,
fs::{create_dir_all, File},
io::{BufWriter, Write},
path::PathBuf,
path::{Path, PathBuf},
};
use tauri_codegen::{context_codegen, ContextData};
use tauri_utils::config::FrontendDist;
@@ -17,17 +17,17 @@ use tauri_utils::config::FrontendDist;
#[cfg_attr(docsrs, doc(cfg(feature = "codegen")))]
#[derive(Debug)]
pub struct CodegenContext {
dev: bool,
config_path: PathBuf,
out_file: PathBuf,
capabilities: Option<Vec<PathBuf>>,
}
impl Default for CodegenContext {
fn default() -> Self {
Self {
dev: false,
config_path: PathBuf::from("tauri.conf.json"),
out_file: PathBuf::from("tauri-build-context.rs"),
capabilities: None,
}
}
}
@@ -66,11 +66,13 @@ impl CodegenContext {
self
}
/// Run the codegen in a `dev` context, meaning that Tauri is using a dev server or local file for development purposes,
/// usually with the `tauri dev` CLI command.
/// Adds a capability file to the generated context.
#[must_use]
pub fn dev(mut self) -> Self {
self.dev = true;
pub fn capability<P: AsRef<Path>>(mut self, path: P) -> Self {
self
.capabilities
.get_or_insert_with(Default::default)
.push(path.as_ref().to_path_buf());
self
}
@@ -113,18 +115,23 @@ impl CodegenContext {
}
#[cfg(target_os = "macos")]
println!(
"cargo:rerun-if-changed={}",
config_parent.join("Info.plist").display()
);
{
let info_plist_path = config_parent.join("Info.plist");
if info_plist_path.exists() {
println!("cargo:rerun-if-changed={}", info_plist_path.display());
}
}
let code = context_codegen(ContextData {
dev: self.dev,
dev: crate::is_dev(),
config,
config_parent,
// it's very hard to have a build script for unit tests, so assume this is always called from
// outside the tauri crate, making the ::tauri root valid.
root: quote::quote!(::tauri),
capabilities: self.capabilities,
assets: None,
test: false,
})?;
// get the full output file path

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -15,15 +15,15 @@
use anyhow::Context;
pub use anyhow::Result;
use cargo_toml::Manifest;
use heck::AsShoutySnakeCase;
use tauri_utils::{
acl::build::parse_capabilities,
acl::{build::parse_capabilities, APP_ACL_KEY},
config::{BundleResources, Config, WebviewInstallMode},
resources::{external_binaries, ResourcePaths},
};
use std::{
collections::HashMap,
env::var_os,
fs::copy,
path::{Path, PathBuf},
@@ -40,7 +40,9 @@ mod static_vcruntime;
#[cfg_attr(docsrs, doc(cfg(feature = "codegen")))]
pub use codegen::context::CodegenContext;
const PLUGIN_MANIFESTS_FILE_NAME: &str = "plugin-manifests.json";
pub use acl::{AppManifest, InlinedPlugin};
const ACL_MANIFESTS_FILE_NAME: &str = "acl-manifests.json";
const CAPABILITIES_FILE_NAME: &str = "capabilities.json";
fn copy_file(from: impl AsRef<Path>, to: impl AsRef<Path>) -> Result<()> {
@@ -91,10 +93,18 @@ fn copy_binaries(
/// Copies resources to a path.
fn copy_resources(resources: ResourcePaths<'_>, path: &Path) -> Result<()> {
let path = path.canonicalize()?;
for resource in resources.iter() {
let resource = resource?;
println!("cargo:rerun-if-changed={}", resource.path().display());
copy_file(resource.path(), path.join(resource.target()))?;
// avoid copying the resource if target is the same as source
let src = resource.path().canonicalize()?;
let target = path.join(resource.target());
if src != target {
copy_file(src, target)?;
}
}
Ok(())
}
@@ -146,7 +156,7 @@ fn copy_dir(from: &Path, to: &Path) -> Result<()> {
// Copies the framework under `{src_dir}/{framework}.framework` to `{dest_dir}/{framework}.framework`.
fn copy_framework_from(src_dir: &Path, framework: &str, dest_dir: &Path) -> Result<bool> {
let src_name = format!("{}.framework", framework);
let src_name = format!("{framework}.framework");
let src_path = src_dir.join(&src_name);
if src_path.exists() {
copy_dir(&src_path, &dest_dir.join(&src_name))?;
@@ -158,12 +168,8 @@ fn copy_framework_from(src_dir: &Path, framework: &str, dest_dir: &Path) -> Resu
// Copies the macOS application bundle frameworks to the target folder
fn copy_frameworks(dest_dir: &Path, frameworks: &[String]) -> Result<()> {
std::fs::create_dir_all(dest_dir).with_context(|| {
format!(
"Failed to create frameworks output directory at {:?}",
dest_dir
)
})?;
std::fs::create_dir_all(dest_dir)
.with_context(|| format!("Failed to create frameworks output directory at {dest_dir:?}"))?;
for framework in frameworks.iter() {
if framework.ends_with(".framework") {
let src_path = PathBuf::from(framework);
@@ -188,7 +194,7 @@ fn copy_frameworks(dest_dir: &Path, frameworks: &[String]) -> Result<()> {
framework
));
}
if let Some(home_dir) = dirs_next::home_dir() {
if let Some(home_dir) = dirs::home_dir() {
if copy_framework_from(&home_dir.join("Library/Frameworks/"), framework, dest_dir)? {
continue;
}
@@ -206,18 +212,10 @@ fn copy_frameworks(dest_dir: &Path, frameworks: &[String]) -> Result<()> {
Ok(())
}
// checks if the given Cargo feature is enabled.
fn has_feature(feature: &str) -> bool {
// when a feature is enabled, Cargo sets the `CARGO_FEATURE_<name` env var to 1
// https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-build-scripts
std::env::var(format!("CARGO_FEATURE_{}", AsShoutySnakeCase(feature)))
.map(|x| x == "1")
.unwrap_or(false)
}
// creates a cfg alias if `has_feature` is true.
// `alias` must be a snake case string.
fn cfg_alias(alias: &str, has_feature: bool) {
println!("cargo:rustc-check-cfg=cfg({alias})");
if has_feature {
println!("cargo:rustc-cfg={alias}");
}
@@ -301,7 +299,7 @@ impl WindowsAttributes {
/// # Example
///
/// The following manifest will brand the exe as requesting administrator privileges.
/// Thus, everytime it is executed, a Windows UAC dialog will appear.
/// Thus, every time it is executed, a Windows UAC dialog will appear.
///
/// ```rust,no_run
/// let mut windows = tauri_build::WindowsAttributes::new();
@@ -339,6 +337,8 @@ pub struct Attributes {
capabilities_path_pattern: Option<&'static str>,
#[cfg(feature = "codegen")]
codegen: Option<codegen::context::CodegenContext>,
inlined_plugins: HashMap<&'static str, InlinedPlugin>,
app_manifest: AppManifest,
}
impl Attributes {
@@ -365,6 +365,22 @@ impl Attributes {
self
}
/// Adds the given plugin to the list of inlined plugins (a plugin that is part of your application).
///
/// See [`InlinedPlugin`] for more information.
pub fn plugin(mut self, name: &'static str, plugin: InlinedPlugin) -> Self {
self.inlined_plugins.insert(name, plugin);
self
}
/// Sets the application manifest for the Access Control List.
///
/// See [`AppManifest`] for more information.
pub fn app_manifest(mut self, manifest: AppManifest) -> Self {
self.app_manifest = manifest;
self
}
#[cfg(feature = "codegen")]
#[cfg_attr(docsrs, doc(cfg(feature = "codegen")))]
#[must_use]
@@ -374,6 +390,12 @@ impl Attributes {
}
}
pub fn is_dev() -> bool {
std::env::var("DEP_TAURI_DEV")
.expect("missing `cargo:dev` instruction, please update tauri to latest")
== "true"
}
/// Run all build time helpers for your Tauri Application.
///
/// The current helpers include the following:
@@ -442,19 +464,21 @@ pub fn try_build(attributes: Attributes) -> Result<()> {
let last = s.clone().count() - 1;
let mut android_package_prefix = String::new();
for (i, w) in s.enumerate() {
if i == 0 || i != last {
if i == last {
println!("cargo:rustc-env=TAURI_ANDROID_PACKAGE_NAME_APP_NAME={w}");
} else {
android_package_prefix.push_str(w);
android_package_prefix.push('_');
}
}
android_package_prefix.pop();
println!("cargo:rustc-env=TAURI_ANDROID_PACKAGE_PREFIX={android_package_prefix}");
println!("cargo:rustc-env=TAURI_ANDROID_PACKAGE_NAME_PREFIX={android_package_prefix}");
if let Some(project_dir) = var_os("TAURI_ANDROID_PROJECT_PATH").map(PathBuf::from) {
mobile::generate_gradle_files(project_dir)?;
mobile::generate_gradle_files(project_dir, &config)?;
}
cfg_alias("dev", !has_feature("custom-protocol"));
cfg_alias("dev", is_dev());
let ws_path = get_workspace_dir()?;
let mut manifest =
@@ -473,26 +497,45 @@ pub fn try_build(attributes: Attributes) -> Result<()> {
let out_dir = PathBuf::from(std::env::var("OUT_DIR").unwrap());
manifest::check(&config, &mut manifest)?;
let plugin_manifests = acl::get_plugin_manifests()?;
std::fs::write(
out_dir.join(PLUGIN_MANIFESTS_FILE_NAME),
serde_json::to_string(&plugin_manifests)?,
let mut acl_manifests = acl::get_manifests_from_plugins()?;
let app_manifest = acl::app_manifest_permissions(
&out_dir,
attributes.app_manifest,
&attributes.inlined_plugins,
)?;
if app_manifest.default_permission.is_some()
|| !app_manifest.permission_sets.is_empty()
|| !app_manifest.permissions.is_empty()
{
acl_manifests.insert(APP_ACL_KEY.into(), app_manifest);
}
acl_manifests.extend(acl::inline_plugins(&out_dir, attributes.inlined_plugins)?);
std::fs::write(
out_dir.join(ACL_MANIFESTS_FILE_NAME),
serde_json::to_string(&acl_manifests)?,
)?;
let capabilities = if let Some(pattern) = attributes.capabilities_path_pattern {
parse_capabilities(pattern)?
} else {
println!("cargo:rerun-if-changed=capabilities");
parse_capabilities("./capabilities/**/*")?
};
acl::generate_schema(&plugin_manifests, target)?;
acl::validate_capabilities(&plugin_manifests, &capabilities)?;
acl::generate_schema(&acl_manifests, target)?;
acl::validate_capabilities(&acl_manifests, &capabilities)?;
let capabilities_path = acl::save_capabilities(&capabilities)?;
copy(capabilities_path, out_dir.join(CAPABILITIES_FILE_NAME))?;
acl::save_plugin_manifests(&plugin_manifests)?;
acl::save_acl_manifests(&acl_manifests)?;
tauri_utils::plugin::load_global_api_scripts(&out_dir);
println!("cargo:rustc-env=TAURI_ENV_TARGET_TRIPLE={target_triple}");
// when running codegen in this build script, we need to access the env var directly
std::env::set_var("TAURI_ENV_TARGET_TRIPLE", &target_triple);
// TODO: far from ideal, but there's no other way to get the target dir, see <https://github.com/rust-lang/cargo/issues/5457>
let target_dir = out_dir

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -65,7 +65,7 @@ pub fn check(config: &Config, manifest: &mut Manifest) -> Result<()> {
if deps.is_empty() {
if let Some(alias) = &metadata.alias {
deps = find_dependency(manifest, alias, metadata.kind);
name = alias.clone();
name.clone_from(alias);
}
}

View File

@@ -1,14 +1,19 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
use std::{fs::write, path::PathBuf};
use anyhow::{Context, Result};
use semver::Version;
use tauri_utils::config::Config;
pub fn generate_gradle_files(project_dir: PathBuf) -> Result<()> {
use crate::is_dev;
pub fn generate_gradle_files(project_dir: PathBuf, config: &Config) -> Result<()> {
let gradle_settings_path = project_dir.join("tauri.settings.gradle");
let app_build_gradle_path = project_dir.join("app").join("tauri.build.gradle.kts");
let app_tauri_properties_path = project_dir.join("app").join("tauri.properties");
let mut gradle_settings =
"// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.\n".to_string();
@@ -16,6 +21,7 @@ pub fn generate_gradle_files(project_dir: PathBuf) -> Result<()> {
val implementation by configurations
dependencies {"
.to_string();
let mut app_tauri_properties = Vec::new();
for (env, value) in std::env::vars_os() {
let env = env.to_string_lossy();
@@ -48,13 +54,56 @@ dependencies {"
app_build_gradle.push_str("\n}");
if let Some(version) = config.version.as_ref() {
app_tauri_properties.push(format!("tauri.android.versionName={version}"));
if let Some(version_code) = config.bundle.android.version_code.as_ref() {
app_tauri_properties.push(format!("tauri.android.versionCode={version_code}"));
} else if let Ok(version) = Version::parse(version) {
let mut version_code = version.major * 1000000 + version.minor * 1000 + version.patch;
if is_dev() {
version_code = version_code.clamp(1, 2100000000);
}
if version_code == 0 {
return Err(anyhow::anyhow!(
"You must change the `version` in `tauri.conf.json`. The default value `0.0.0` is not allowed for Android package and must be at least `0.0.1`."
));
} else if version_code > 2100000000 {
return Err(anyhow::anyhow!(
"Invalid version code {}. Version code must be between 1 and 2100000000. You must change the `version` in `tauri.conf.json`.",
version_code
));
}
app_tauri_properties.push(format!("tauri.android.versionCode={version_code}"));
}
}
write(&gradle_settings_path, gradle_settings).context("failed to write tauri.settings.gradle")?;
write(&app_build_gradle_path, app_build_gradle)
.context("failed to write tauri.build.gradle.kts")?;
if !app_tauri_properties.is_empty() {
write(
&app_tauri_properties_path,
format!(
"// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.\n{}",
app_tauri_properties.join("\n")
),
)
.context("failed to write tauri.properties")?;
}
println!("cargo:rerun-if-changed={}", gradle_settings_path.display());
println!("cargo:rerun-if-changed={}", app_build_gradle_path.display());
if !app_tauri_properties.is_empty() {
println!(
"cargo:rerun-if-changed={}",
app_tauri_properties_path.display()
);
}
Ok(())
}

View File

@@ -1,8 +1,8 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
// taken from https://github.com/ChrisDenton/static_vcruntime/
// taken from <https://github.com/ChrisDenton/static_vcruntime/>
// we're not using static_vcruntime directly because we want this for debug builds too
use std::{env, fs, io::Write, path::Path};

View File

@@ -1,5 +1,176 @@
# Changelog
## \[2.0.0-rc.0]
### Enhancements
- [`1e0793b68`](https://www.github.com/tauri-apps/tauri/commit/1e0793b6821799829e380c88066b3415cc9006df) ([#10357](https://www.github.com/tauri-apps/tauri/pull/10357)) Enhance `AssetResolver::get` in development mode by reading distDir directly as a fallback to the embedded assets.
### Bug Fixes
- [`24445d71d`](https://www.github.com/tauri-apps/tauri/commit/24445d71de92d526d0ccaecb54f13003ddc6f6b4)([#10432](https://www.github.com/tauri-apps/tauri/pull/10432)) Fixes asset resolving when not using the `compression` feature.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-rc.0`
## \[2.0.0-beta.19]
### Bug Fixes
- [`5d2922985`](https://www.github.com/tauri-apps/tauri/commit/5d2922985801908e4b929a7a0e387806ff02ab89) ([#10268](https://www.github.com/tauri-apps/tauri/pull/10268) by [@lucasfernog](https://www.github.com/tauri-apps/tauri/../../lucasfernog)) Fix icon rewriting always triggering build to rerun due to conflicts between file names.
### What's Changed
- [`4c239729c`](https://www.github.com/tauri-apps/tauri/commit/4c239729c3e1b899ecbc6793c3682848e8de1729) ([#10167](https://www.github.com/tauri-apps/tauri/pull/10167) by [@amrbashir](https://www.github.com/tauri-apps/tauri/../../amrbashir)) Add support for `test = true` in `generate_context!` macro to skip some code generation that could affect some tests, for now it only skips empedding a plist on macOS.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.19`
## \[2.0.0-beta.18]
### New Features
- [`5b769948a`](https://www.github.com/tauri-apps/tauri/commit/5b769948a81cac333f64c870a470ba6525bd5cd3) ([#9959](https://www.github.com/tauri-apps/tauri/pull/9959)) Add `include_image_codegen` function to help embedding instances of `Image` struct at compile-time in rust to be used with window, menu or tray icons.
### Bug Fixes
- [`1f6e478c8`](https://www.github.com/tauri-apps/tauri/commit/1f6e478c842a16219798b9962718e9ddb969c041) ([#9878](https://www.github.com/tauri-apps/tauri/pull/9878)) Fixes Info.plist rewriting always triggering build to rerun.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.18`
## \[2.0.0-beta.17]
### What's Changed
- [`ccc3ea729`](https://www.github.com/tauri-apps/tauri/commit/ccc3ea729de205ef467f737f1feeb5bf02d9cd72)([#9646](https://www.github.com/tauri-apps/tauri/pull/9646)) Use `TAURI_ENV_TARGET_TRIPLE` (which is set by `tauri-build`) to determine the target when reading the config file.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.17`
## \[2.0.0-beta.16]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.16`
## \[2.0.0-beta.15]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.15`
## \[2.0.0-beta.14]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.14`
## \[2.0.0-beta.13]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.13`
## \[2.0.0-beta.12]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.12`
## \[2.0.0-beta.11]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.11`
## \[2.0.0-beta.10]
### New Features
- [`e227fe02f`](https://www.github.com/tauri-apps/tauri/commit/e227fe02f986e145c0731a64693e1c830a9eb5b0)([#9156](https://www.github.com/tauri-apps/tauri/pull/9156)) Allow plugins to define (at compile time) JavaScript that are initialized when `withGlobalTauri` is true.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.10`
## \[2.0.0-beta.9]
### New Features
- [`ba0206d8a`](https://www.github.com/tauri-apps/tauri/commit/ba0206d8a30a9b43ec5090dcaabd1a23baa1420c)([#9141](https://www.github.com/tauri-apps/tauri/pull/9141)) The `Context` codegen now accepts a `assets` input to define a custom `tauri::Assets` implementation.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.9`
## \[2.0.0-beta.8]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.8`
### Breaking Changes
- [`ed48e2b3c`](https://www.github.com/tauri-apps/tauri/commit/ed48e2b3c7fa914e4c9af432c02b8154f872c68a)([#9122](https://www.github.com/tauri-apps/tauri/pull/9122)) Expose `tauri::image` module to export the `JsImage` type and removed the `Image` root re-export.
## \[2.0.0-beta.7]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.7`
### Breaking Changes
- [`d1e77acd8`](https://www.github.com/tauri-apps/tauri/commit/d1e77acd8dfdf554b90b542513a58a2de1ef2360)([#9011](https://www.github.com/tauri-apps/tauri/pull/9011)) Change the generated context code to use the new `Image` type in tauri.
## \[2.0.0-beta.6]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.6`
### Breaking Changes
- [`3657ad82`](https://www.github.com/tauri-apps/tauri/commit/3657ad82f88ce528551d032d521c52eed3f396b4)([#9008](https://www.github.com/tauri-apps/tauri/pull/9008)) Allow defining permissions for the application commands via `tauri_build::Attributes::app_manifest`.
## \[2.0.0-beta.5]
### Enhancements
- [`bc5b5e67`](https://www.github.com/tauri-apps/tauri/commit/bc5b5e671a546512f823f1c157421b4c3311dfc0)([#8984](https://www.github.com/tauri-apps/tauri/pull/8984)) Do not include a CSP tag in the application HTML and rely on the custom protocol response header instead.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.5`
## \[2.0.0-beta.4]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.4`
## \[2.0.0-beta.3]
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.3`
## \[2.0.0-beta.2]
### Enhancements
- [`83a68deb`](https://www.github.com/tauri-apps/tauri/commit/83a68deb5676d39cd4728d2e140f6b46d5f787ed)([#8797](https://www.github.com/tauri-apps/tauri/pull/8797)) Added a new configuration option `tauri.conf.json > app > security > capabilities` to reference existing capabilities and inline new ones. If it is empty, all capabilities are still included preserving the current behavior.
- [`8d16a80d`](https://www.github.com/tauri-apps/tauri/commit/8d16a80d2fb2468667e7987d0cc99dbc7e3b9d0a)([#8802](https://www.github.com/tauri-apps/tauri/pull/8802)) The `generate_context` proc macro now accepts a `capabilities` attribute where the value is an array of file paths that can be [conditionally compiled](https://doc.rust-lang.org/reference/conditional-compilation.html). These capabilities are added to the application along the capabilities defined in the Tauri configuration file.
### Dependencies
- Upgraded to `tauri-utils@2.0.0-beta.2`
## \[2.0.0-beta.1]
### Dependencies
@@ -135,6 +306,12 @@
- First mobile alpha release!
- [fa3a1098](https://www.github.com/tauri-apps/tauri/commit/fa3a10988a03aed1b66fb17d893b1a9adb90f7cd) feat(ci): prepare 2.0.0-alpha.0 ([#5786](https://www.github.com/tauri-apps/tauri/pull/5786)) on 2022-12-08
## \[1.4.2]
### Dependencies
- Upgraded to `tauri-utils@1.5.2`
## \[1.4.1]
### Dependencies

View File

@@ -1,6 +1,6 @@
[package]
name = "tauri-codegen"
version = "2.0.0-beta.1"
version = "2.0.0-rc.0"
description = "code generation meant to be consumed inside of `tauri` through `tauri-build` or `tauri-macros`"
exclude = [ "CHANGELOG.md", "/target" ]
readme = "README.md"
@@ -14,12 +14,13 @@ rust-version = { workspace = true }
[dependencies]
sha2 = "0.10"
base64 = "0.21"
base64 = "0.22"
proc-macro2 = "1"
quote = "1"
syn = "2"
serde = { version = "1", features = [ "derive" ] }
serde_json = "1"
tauri-utils = { version = "2.0.0-beta.1", path = "../tauri-utils", features = [ "build" ] }
tauri-utils = { version = "2.0.0-rc.0", path = "../tauri-utils", features = [ "build" ] }
thiserror = "1"
walkdir = "2"
brotli = { version = "3", optional = true, default-features = false, features = [ "std" ] }
@@ -36,7 +37,6 @@ plist = "1"
time = { version = "0.3", features = [ "parsing", "formatting" ] }
[features]
default = [ "compression" ]
compression = [ "brotli", "tauri-utils/compression" ]
isolation = [ "tauri-utils/isolation" ]
config-json5 = [ "tauri-utils/config-json5" ]

View File

@@ -4,10 +4,9 @@
[![status](https://img.shields.io/badge/Status-Stable-green.svg)](https://github.com/tauri-apps/tauri)
[![Chat Server](https://img.shields.io/badge/chat-on%20discord-7289da.svg)](https://discord.gg/SpmNs4S)
[![devto](https://img.shields.io/badge/blog-dev.to-black.svg)](https://dev.to/tauri)
[![test core](https://img.shields.io/github/actions/workflow/status/tauri-apps/tauri/test-core.yml?label=test%20core&logo=github)](https://github.com/tauri-apps/tauri/actions/workflows/test-core.yml)
[![devto](https://img.shields.io/badge/documentation-site-purple.svg)](https://tauri.app)
[![website](https://img.shields.io/badge/website-tauri.app-purple.svg)](https://tauri.app)
[![https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg](https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg)](https://good-labs.github.io/greater-good-affirmation)
[![support](https://img.shields.io/badge/sponsor-Opencollective-blue.svg)](https://opencollective.com/tauri)

View File

@@ -1,29 +1,36 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
use std::collections::BTreeMap;
use std::convert::identity;
use std::path::{Path, PathBuf};
use std::{ffi::OsStr, str::FromStr};
use crate::{
embedded_assets::{
ensure_out_dir, AssetOptions, CspHashes, EmbeddedAssets, EmbeddedAssetsResult,
},
image::CachedIcon,
};
use base64::Engine;
use proc_macro2::TokenStream;
use quote::quote;
use sha2::{Digest, Sha256};
use tauri_utils::acl::capability::Capability;
use tauri_utils::acl::plugin::Manifest;
use tauri_utils::acl::resolved::Resolved;
use tauri_utils::assets::AssetKey;
use tauri_utils::config::{Config, FrontendDist, PatternKind};
use tauri_utils::html::{
inject_nonce_token, parse as parse_html, serialize_node as serialize_html_node,
use syn::Expr;
use tauri_utils::{
acl::capability::{Capability, CapabilityFile},
acl::manifest::Manifest,
acl::resolved::Resolved,
assets::AssetKey,
config::{CapabilityEntry, Config, FrontendDist, PatternKind},
html::{inject_nonce_token, parse as parse_html, serialize_node as serialize_html_node, NodeRef},
platform::Target,
plugin::GLOBAL_API_SCRIPT_FILE_LIST_PATH,
tokens::{map_lit, str_lit},
};
use tauri_utils::platform::Target;
use crate::embedded_assets::{AssetOptions, CspHashes, EmbeddedAssets, EmbeddedAssetsError};
const PLUGIN_MANIFESTS_FILE_NAME: &str = "plugin-manifests.json";
const ACL_MANIFESTS_FILE_NAME: &str = "acl-manifests.json";
const CAPABILITIES_FILE_NAME: &str = "capabilities.json";
/// Necessary data needed by [`context_codegen`] to generate code for a Tauri application context.
@@ -32,14 +39,38 @@ pub struct ContextData {
pub config: Config,
pub config_parent: PathBuf,
pub root: TokenStream,
/// Additional capabilities to include.
pub capabilities: Option<Vec<PathBuf>>,
/// The custom assets implementation
pub assets: Option<Expr>,
/// Skip runtime-only types generation for tests (e.g. embed-plist usage).
pub test: bool,
}
fn inject_script_hashes(document: &NodeRef, key: &AssetKey, csp_hashes: &mut CspHashes) {
if let Ok(inline_script_elements) = document.select("script:not(empty)") {
let mut scripts = Vec::new();
for inline_script_el in inline_script_elements {
let script = inline_script_el.as_node().text_contents();
let mut hasher = Sha256::new();
hasher.update(&script);
let hash = hasher.finalize();
scripts.push(format!(
"'sha256-{}'",
base64::engine::general_purpose::STANDARD.encode(hash)
));
}
csp_hashes
.inline_scripts
.entry(key.clone().into())
.or_default()
.append(&mut scripts);
}
}
fn map_core_assets(
options: &AssetOptions,
target: Target,
) -> impl Fn(&AssetKey, &Path, &mut Vec<u8>, &mut CspHashes) -> Result<(), EmbeddedAssetsError> {
#[cfg(feature = "isolation")]
let pattern = tauri_utils::html::PatternObject::from(&options.pattern);
) -> impl Fn(&AssetKey, &Path, &mut Vec<u8>, &mut CspHashes) -> EmbeddedAssetsResult<()> {
let csp = options.csp;
let dangerous_disable_asset_csp_modification =
options.dangerous_disable_asset_csp_modification.clone();
@@ -49,45 +80,10 @@ fn map_core_assets(
if csp {
let document = parse_html(String::from_utf8_lossy(input).into_owned());
if target == Target::Linux {
::tauri_utils::html::inject_csp_token(&document);
}
inject_nonce_token(&document, &dangerous_disable_asset_csp_modification);
if dangerous_disable_asset_csp_modification.can_modify("script-src") {
if let Ok(inline_script_elements) = document.select("script:not(empty)") {
let mut scripts = Vec::new();
for inline_script_el in inline_script_elements {
let script = inline_script_el.as_node().text_contents();
let mut hasher = Sha256::new();
hasher.update(&script);
let hash = hasher.finalize();
scripts.push(format!(
"'sha256-{}'",
base64::engine::general_purpose::STANDARD.encode(hash)
));
}
csp_hashes
.inline_scripts
.entry(key.clone().into())
.or_default()
.append(&mut scripts);
}
}
#[cfg(feature = "isolation")]
if dangerous_disable_asset_csp_modification.can_modify("style-src") {
if let tauri_utils::html::PatternObject::Isolation { .. } = &pattern {
// create the csp for the isolation iframe styling now, to make the runtime less complex
let mut hasher = Sha256::new();
hasher.update(tauri_utils::pattern::isolation::IFRAME_STYLE);
let hash = hasher.finalize();
csp_hashes.styles.push(format!(
"'sha256-{}'",
base64::engine::general_purpose::STANDARD.encode(hash)
));
}
inject_script_hashes(&document, key, csp_hashes);
}
*input = serialize_html_node(&document);
@@ -101,10 +97,19 @@ fn map_core_assets(
fn map_isolation(
_options: &AssetOptions,
dir: PathBuf,
) -> impl Fn(&AssetKey, &Path, &mut Vec<u8>, &mut CspHashes) -> Result<(), EmbeddedAssetsError> {
move |_key, path, input, _csp_hashes| {
) -> impl Fn(&AssetKey, &Path, &mut Vec<u8>, &mut CspHashes) -> EmbeddedAssetsResult<()> {
// create the csp for the isolation iframe styling now, to make the runtime less complex
let mut hasher = Sha256::new();
hasher.update(tauri_utils::pattern::isolation::IFRAME_STYLE);
let hash = hasher.finalize();
let iframe_style_csp_hash = format!(
"'sha256-{}'",
base64::engine::general_purpose::STANDARD.encode(hash)
);
move |key, path, input, csp_hashes| {
if path.extension() == Some(OsStr::new("html")) {
let isolation_html = tauri_utils::html::parse(String::from_utf8_lossy(input).into_owned());
let isolation_html = parse_html(String::from_utf8_lossy(input).into_owned());
// this is appended, so no need to reverse order it
tauri_utils::html::inject_codegen_isolation_script(&isolation_html);
@@ -112,6 +117,15 @@ fn map_isolation(
// temporary workaround for windows not loading assets
tauri_utils::html::inline_isolation(&isolation_html, &dir);
inject_nonce_token(
&isolation_html,
&tauri_utils::config::DisabledCspModificationKind::Flag(false),
);
inject_script_hashes(&isolation_html, key, csp_hashes);
csp_hashes.styles.push(iframe_style_csp_hash.clone());
*input = isolation_html.to_string().as_bytes().to_vec()
}
@@ -120,16 +134,21 @@ fn map_isolation(
}
/// Build a `tauri::Context` for including in application code.
pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsError> {
pub fn context_codegen(data: ContextData) -> EmbeddedAssetsResult<TokenStream> {
let ContextData {
dev,
config,
config_parent,
root,
capabilities: additional_capabilities,
assets,
test,
} = data;
let target = std::env::var("TARGET")
.or_else(|_| std::env::var("TAURI_ENV_TARGET_TRIPLE"))
#[allow(unused_variables)]
let running_tests = test;
let target = std::env::var("TAURI_ENV_TARGET_TRIPLE")
.as_deref()
.map(Target::from_triple)
.unwrap_or_else(|_| Target::current());
@@ -157,21 +176,23 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
options = options.with_csp();
}
let assets = if dev && config.build.dev_url.is_some() {
Default::default()
let assets = if let Some(assets) = assets {
quote!(#assets)
} else if dev && config.build.dev_url.is_some() {
let assets = EmbeddedAssets::default();
quote!(#assets)
} else {
match &config.build.frontend_dist {
let assets = match &config.build.frontend_dist {
Some(url) => match url {
FrontendDist::Url(_url) => Default::default(),
FrontendDist::Directory(path) => {
let assets_path = config_parent.join(path);
if !assets_path.exists() {
panic!(
"The `frontendDist` configuration is set to `{:?}` but this path doesn't exist",
path
"The `frontendDist` configuration is set to `{path:?}` but this path doesn't exist"
)
}
EmbeddedAssets::new(assets_path, &options, map_core_assets(&options, target))?
EmbeddedAssets::new(assets_path, &options, map_core_assets(&options))?
}
FrontendDist::Files(files) => EmbeddedAssets::new(
files
@@ -179,25 +200,16 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
.map(|p| config_parent.join(p))
.collect::<Vec<_>>(),
&options,
map_core_assets(&options, target),
map_core_assets(&options),
)?,
_ => unimplemented!(),
},
None => Default::default(),
}
};
quote!(#assets)
};
let out_dir = {
let out_dir = std::env::var("OUT_DIR")
.map_err(|_| EmbeddedAssetsError::OutDir)
.map(PathBuf::from)
.and_then(|p| p.canonicalize().map_err(|_| EmbeddedAssetsError::OutDir))?;
// make sure that our output directory is created
std::fs::create_dir_all(&out_dir).map_err(|_| EmbeddedAssetsError::OutDir)?;
out_dir
};
let out_dir = ensure_out_dir()?;
let default_window_icon = {
if target == Target::Windows {
@@ -209,7 +221,8 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
"icons/icon.ico",
);
if icon_path.exists() {
ico_icon(&root, &out_dir, icon_path).map(|i| quote!(::std::option::Option::Some(#i)))?
let icon = CachedIcon::new(&root, &icon_path)?;
quote!(::std::option::Option::Some(#icon))
} else {
let icon_path = find_icon(
&config,
@@ -217,7 +230,8 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
|i| i.ends_with(".png"),
"icons/icon.png",
);
png_icon(&root, &out_dir, icon_path).map(|i| quote!(::std::option::Option::Some(#i)))?
let icon = CachedIcon::new(&root, &icon_path)?;
quote!(::std::option::Option::Some(#icon))
}
} else {
// handle default window icons for Unix targets
@@ -227,7 +241,8 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
|i| i.ends_with(".png"),
"icons/icon.png",
);
png_icon(&root, &out_dir, icon_path).map(|i| quote!(::std::option::Option::Some(#i)))?
let icon = CachedIcon::new(&root, &icon_path)?;
quote!(::std::option::Option::Some(#icon))
}
};
@@ -246,7 +261,9 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
"icons/icon.png",
);
}
raw_icon(&out_dir, icon_path)?
let icon = CachedIcon::new_raw(&root, &icon_path)?;
quote!(::std::option::Option::Some(#icon.to_vec()))
} else {
quote!(::std::option::Option::None)
};
@@ -275,18 +292,8 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
let with_tray_icon_code = if target.is_desktop() {
if let Some(tray) = &config.app.tray_icon {
let tray_icon_icon_path = config_parent.join(&tray.icon_path);
let ext = tray_icon_icon_path.extension();
if ext.map_or(false, |e| e == "ico") {
ico_icon(&root, &out_dir, tray_icon_icon_path)
.map(|i| quote!(context.set_tray_icon(#i);))?
} else if ext.map_or(false, |e| e == "png") {
png_icon(&root, &out_dir, tray_icon_icon_path)
.map(|i| quote!(context.set_tray_icon(#i);))?
} else {
quote!(compile_error!(
"The tray icon extension must be either `.ico` or `.png`."
))
}
let icon = CachedIcon::new(&root, &tray_icon_icon_path)?;
quote!(context.set_tray_icon(::std::option::Option::Some(#icon));)
} else {
quote!()
}
@@ -295,7 +302,7 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
};
#[cfg(target_os = "macos")]
let info_plist = if target == Target::MacOS && dev {
let info_plist = if target == Target::MacOS && dev && !running_tests {
let info_plist_path = config_parent.join("Info.plist");
let mut info_plist = if info_plist_path.exists() {
plist::Value::from_file(&info_plist_path)
@@ -310,19 +317,20 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
}
if let Some(version) = &config.version {
plist.insert("CFBundleShortVersionString".into(), version.clone().into());
}
let format =
time::format_description::parse("[year][month][day].[hour][minute][second]").unwrap();
if let Ok(build_number) = time::OffsetDateTime::now_utc().format(&format) {
plist.insert("CFBundleVersion".into(), build_number.into());
plist.insert("CFBundleVersion".into(), version.clone().into());
}
}
let mut plist_contents = std::io::BufWriter::new(Vec::new());
info_plist
.to_file_xml(out_dir.join("Info.plist"))
.expect("failed to write Info.plist");
.to_writer_xml(&mut plist_contents)
.expect("failed to serialize plist");
let plist_contents =
String::from_utf8_lossy(&plist_contents.into_inner().unwrap()).into_owned();
let plist = crate::Cached::try_from(plist_contents)?;
quote!({
tauri::embed_plist::embed_info_plist!(concat!(std::env!("OUT_DIR"), "/Info.plist"));
tauri::embed_plist::embed_info_plist!(#plist);
})
} else {
quote!(())
@@ -331,10 +339,10 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
let info_plist = quote!(());
let pattern = match &options.pattern {
PatternKind::Brownfield => quote!(#root::Pattern::Brownfield(std::marker::PhantomData)),
PatternKind::Brownfield => quote!(#root::Pattern::Brownfield),
#[cfg(not(feature = "isolation"))]
PatternKind::Isolation { dir: _ } => {
quote!(#root::Pattern::Brownfield(std::marker::PhantomData))
quote!(#root::Pattern::Brownfield)
}
#[cfg(feature = "isolation")]
PatternKind::Isolation { dir } => {
@@ -371,7 +379,7 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
}
};
let acl_file_path = out_dir.join(PLUGIN_MANIFESTS_FILE_NAME);
let acl_file_path = out_dir.join(ACL_MANIFESTS_FILE_NAME);
let acl: BTreeMap<String, Manifest> = if acl_file_path.exists() {
let acl_file =
std::fs::read_to_string(acl_file_path).expect("failed to read plugin manifest map");
@@ -381,7 +389,8 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
};
let capabilities_file_path = out_dir.join(CAPABILITIES_FILE_NAME);
let capabilities: BTreeMap<String, Capability> = if capabilities_file_path.exists() {
let mut capabilities_from_files: BTreeMap<String, Capability> = if capabilities_file_path.exists()
{
let capabilities_file =
std::fs::read_to_string(capabilities_file_path).expect("failed to read capabilities");
serde_json::from_str(&capabilities_file).expect("failed to parse capabilities")
@@ -389,7 +398,96 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
Default::default()
};
let resolved_acl = Resolved::resolve(acl, capabilities, target).expect("failed to resolve ACL");
let mut capabilities = if config.app.security.capabilities.is_empty() {
capabilities_from_files
} else {
let mut capabilities = BTreeMap::new();
for capability_entry in &config.app.security.capabilities {
match capability_entry {
CapabilityEntry::Inlined(capability) => {
capabilities.insert(capability.identifier.clone(), capability.clone());
}
CapabilityEntry::Reference(id) => {
let capability = capabilities_from_files
.remove(id)
.unwrap_or_else(|| panic!("capability with identifier {id} not found"));
capabilities.insert(id.clone(), capability);
}
}
}
capabilities
};
let acl_tokens = map_lit(
quote! { ::std::collections::BTreeMap },
&acl,
str_lit,
identity,
);
if let Some(paths) = additional_capabilities {
for path in paths {
let capability = CapabilityFile::load(&path)
.unwrap_or_else(|e| panic!("failed to read capability {}: {e}", path.display()));
match capability {
CapabilityFile::Capability(c) => {
capabilities.insert(c.identifier.clone(), c);
}
CapabilityFile::List(capabilities_list)
| CapabilityFile::NamedList {
capabilities: capabilities_list,
} => {
capabilities.extend(
capabilities_list
.into_iter()
.map(|c| (c.identifier.clone(), c)),
);
}
}
}
}
let resolved = Resolved::resolve(&acl, capabilities, target).expect("failed to resolve ACL");
let runtime_authority = quote!(#root::ipc::RuntimeAuthority::new(#acl_tokens, #resolved));
let plugin_global_api_script_file_list_path = out_dir.join(GLOBAL_API_SCRIPT_FILE_LIST_PATH);
let plugin_global_api_script =
if config.app.with_global_tauri && plugin_global_api_script_file_list_path.exists() {
let file_list_str = std::fs::read_to_string(plugin_global_api_script_file_list_path)
.expect("failed to read plugin global API script paths");
let file_list = serde_json::from_str::<Vec<PathBuf>>(&file_list_str)
.expect("failed to parse plugin global API script paths");
let mut plugins = Vec::new();
for path in file_list {
plugins.push(std::fs::read_to_string(&path).unwrap_or_else(|e| {
panic!(
"failed to read plugin global API script {}: {e}",
path.display()
)
}));
}
Some(plugins)
} else {
None
};
let plugin_global_api_script = if let Some(scripts) = plugin_global_api_script {
let scripts = scripts.into_iter().map(|s| quote!(#s));
quote!(::std::option::Option::Some(&[#(#scripts),*]))
} else {
quote!(::std::option::Option::None)
};
let maybe_config_parent_setter = if dev {
let config_parent = config_parent.to_string_lossy();
quote!({
context.with_config_parent(#config_parent);
})
} else {
quote!()
};
Ok(quote!({
#[allow(unused_mut, clippy::let_and_return)]
@@ -401,137 +499,29 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
#package_info,
#info_plist,
#pattern,
#resolved_acl
#runtime_authority,
#plugin_global_api_script
);
#with_tray_icon_code
#maybe_config_parent_setter
context
}))
}
fn ico_icon<P: AsRef<Path>>(
root: &TokenStream,
out_dir: &Path,
path: P,
) -> Result<TokenStream, EmbeddedAssetsError> {
let path = path.as_ref();
let bytes = std::fs::read(path)
.unwrap_or_else(|e| panic!("failed to read icon {}: {}", path.display(), e))
.to_vec();
let icon_dir = ico::IconDir::read(std::io::Cursor::new(bytes))
.unwrap_or_else(|e| panic!("failed to parse icon {}: {}", path.display(), e));
let entry = &icon_dir.entries()[0];
let rgba = entry
.decode()
.unwrap_or_else(|e| panic!("failed to decode icon {}: {}", path.display(), e))
.rgba_data()
.to_vec();
let width = entry.width();
let height = entry.height();
let icon_file_name = path.file_name().unwrap();
let out_path = out_dir.join(icon_file_name);
write_if_changed(&out_path, &rgba).map_err(|error| EmbeddedAssetsError::AssetWrite {
path: path.to_owned(),
error,
})?;
let icon_file_name = icon_file_name.to_str().unwrap();
let icon = quote!(#root::Icon::Rgba {
rgba: include_bytes!(concat!(std::env!("OUT_DIR"), "/", #icon_file_name)).to_vec(),
width: #width,
height: #height
});
Ok(icon)
}
fn raw_icon<P: AsRef<Path>>(out_dir: &Path, path: P) -> Result<TokenStream, EmbeddedAssetsError> {
let path = path.as_ref();
let bytes = std::fs::read(path)
.unwrap_or_else(|e| panic!("failed to read icon {}: {}", path.display(), e))
.to_vec();
let out_path = out_dir.join(path.file_name().unwrap());
write_if_changed(&out_path, &bytes).map_err(|error| EmbeddedAssetsError::AssetWrite {
path: path.to_owned(),
error,
})?;
let icon_path = path.file_name().unwrap().to_str().unwrap().to_string();
let icon = quote!(::std::option::Option::Some(
include_bytes!(concat!(std::env!("OUT_DIR"), "/", #icon_path)).to_vec()
));
Ok(icon)
}
fn png_icon<P: AsRef<Path>>(
root: &TokenStream,
out_dir: &Path,
path: P,
) -> Result<TokenStream, EmbeddedAssetsError> {
let path = path.as_ref();
let bytes = std::fs::read(path)
.unwrap_or_else(|e| panic!("failed to read icon {}: {}", path.display(), e))
.to_vec();
let decoder = png::Decoder::new(std::io::Cursor::new(bytes));
let mut reader = decoder
.read_info()
.unwrap_or_else(|e| panic!("failed to read icon {}: {}", path.display(), e));
let (color_type, _) = reader.output_color_type();
if color_type != png::ColorType::Rgba {
panic!("icon {} is not RGBA", path.display());
}
let mut buffer: Vec<u8> = Vec::new();
while let Ok(Some(row)) = reader.next_row() {
buffer.extend(row.data());
}
let width = reader.info().width;
let height = reader.info().height;
let icon_file_name = path.file_name().unwrap();
let out_path = out_dir.join(icon_file_name);
write_if_changed(&out_path, &buffer).map_err(|error| EmbeddedAssetsError::AssetWrite {
path: path.to_owned(),
error,
})?;
let icon_file_name = icon_file_name.to_str().unwrap();
let icon = quote!(#root::Icon::Rgba {
rgba: include_bytes!(concat!(std::env!("OUT_DIR"), "/", #icon_file_name)).to_vec(),
width: #width,
height: #height,
});
Ok(icon)
}
fn write_if_changed(out_path: &Path, data: &[u8]) -> std::io::Result<()> {
use std::fs::File;
use std::io::Write;
if let Ok(curr) = std::fs::read(out_path) {
if curr == data {
return Ok(());
}
}
let mut out_file = File::create(out_path)?;
out_file.write_all(data)
}
fn find_icon<F: Fn(&&String) -> bool>(
fn find_icon(
config: &Config,
config_parent: &Path,
predicate: F,
predicate: impl Fn(&&String) -> bool,
default: &str,
) -> PathBuf {
let icon_path = config
.bundle
.icon
.iter()
.find(|i| predicate(i))
.cloned()
.unwrap_or_else(|| default.to_string());
.find(predicate)
.map(AsRef::as_ref)
.unwrap_or(default);
config_parent.join(icon_path)
}

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -8,7 +8,6 @@ use quote::{quote, ToTokens, TokenStreamExt};
use sha2::{Digest, Sha256};
use std::{
collections::HashMap,
fmt::Write,
fs::File,
path::{Path, PathBuf},
};
@@ -48,6 +47,9 @@ pub enum EmbeddedAssetsError {
#[error("invalid prefix {prefix} used while including path {path}")]
PrefixInvalid { prefix: PathBuf, path: PathBuf },
#[error("invalid extension `{extension}` used for image {path}, must be `ico` or `png`")]
InvalidImageExtension { extension: PathBuf, path: PathBuf },
#[error("failed to walk directory {path} because {error}")]
Walkdir {
path: PathBuf,
@@ -61,6 +63,8 @@ pub enum EmbeddedAssetsError {
Version(#[from] semver::Error),
}
pub type EmbeddedAssetsResult<T> = Result<T, EmbeddedAssetsError>;
/// Represent a directory of assets that are compressed and embedded.
///
/// This is the compile time generation of [`tauri_utils::assets::Assets`] from a directory. Assets
@@ -336,19 +340,7 @@ impl EmbeddedAssets {
std::fs::create_dir_all(&out_dir).map_err(|_| EmbeddedAssetsError::OutDir)?;
// get a hash of the input - allows for caching existing files
let hash = {
let mut hasher = crate::vendor::blake3_reference::Hasher::default();
hasher.update(&input);
let mut bytes = [0u8; 32];
hasher.finalize(&mut bytes);
let mut hex = String::with_capacity(2 * bytes.len());
for b in bytes {
write!(hex, "{b:02x}").map_err(EmbeddedAssetsError::Hex)?;
}
hex
};
let hash = crate::checksum(&input).map_err(EmbeddedAssetsError::Hex)?;
// use the content hash to determine filename, keep extensions that exist
let out_path = if let Some(ext) = path.extension().and_then(|e| e.to_str()) {
@@ -439,3 +431,14 @@ impl ToTokens for EmbeddedAssets {
}});
}
}
pub(crate) fn ensure_out_dir() -> EmbeddedAssetsResult<PathBuf> {
let out_dir = std::env::var("OUT_DIR")
.map_err(|_| EmbeddedAssetsError::OutDir)
.map(PathBuf::from)
.and_then(|p| p.canonicalize().map_err(|_| EmbeddedAssetsError::OutDir))?;
// make sure that our output directory is created
std::fs::create_dir_all(&out_dir).map_err(|_| EmbeddedAssetsError::OutDir)?;
Ok(out_dir)
}

View File

@@ -0,0 +1,118 @@
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
use crate::{
embedded_assets::{EmbeddedAssetsError, EmbeddedAssetsResult},
Cached,
};
use proc_macro2::TokenStream;
use quote::{quote, ToTokens, TokenStreamExt};
use std::{ffi::OsStr, io::Cursor, path::Path};
/// The format the Icon is consumed as.
pub(crate) enum IconFormat {
/// The image, completely unmodified.
Raw,
/// RGBA raw data, meant to be consumed by [`tauri::image::Image`].
Image { width: u32, height: u32 },
}
pub struct CachedIcon {
cache: Cached,
format: IconFormat,
root: TokenStream,
}
impl CachedIcon {
pub fn new(root: &TokenStream, icon: &Path) -> EmbeddedAssetsResult<Self> {
match icon.extension().map(OsStr::to_string_lossy).as_deref() {
Some("png") => Self::new_png(root, icon),
Some("ico") => Self::new_ico(root, icon),
unknown => Err(EmbeddedAssetsError::InvalidImageExtension {
extension: unknown.unwrap_or_default().into(),
path: icon.to_path_buf(),
}),
}
}
/// Cache the icon without any manipulation.
pub fn new_raw(root: &TokenStream, icon: &Path) -> EmbeddedAssetsResult<Self> {
let buf = Self::open(icon);
Cached::try_from(buf).map(|cache| Self {
cache,
root: root.clone(),
format: IconFormat::Raw,
})
}
/// Cache an ICO icon as RGBA data, see [`ImageFormat::Image`].
pub fn new_ico(root: &TokenStream, icon: &Path) -> EmbeddedAssetsResult<Self> {
let buf = Self::open(icon);
let icon_dir = ico::IconDir::read(Cursor::new(&buf))
.unwrap_or_else(|e| panic!("failed to parse icon {}: {}", icon.display(), e));
let entry = &icon_dir.entries()[0];
let rgba = entry
.decode()
.unwrap_or_else(|e| panic!("failed to decode icon {}: {}", icon.display(), e))
.rgba_data()
.to_vec();
Cached::try_from(rgba).map(|cache| Self {
cache,
root: root.clone(),
format: IconFormat::Image {
width: entry.width(),
height: entry.height(),
},
})
}
/// Cache a PNG icon as RGBA data, see [`ImageFormat::Image`].
pub fn new_png(root: &TokenStream, icon: &Path) -> EmbeddedAssetsResult<Self> {
let buf = Self::open(icon);
let decoder = png::Decoder::new(Cursor::new(&buf));
let mut reader = decoder
.read_info()
.unwrap_or_else(|e| panic!("failed to read icon {}: {}", icon.display(), e));
if reader.output_color_type().0 != png::ColorType::Rgba {
panic!("icon {} is not RGBA", icon.display());
}
let mut rgba = Vec::with_capacity(reader.output_buffer_size());
while let Ok(Some(row)) = reader.next_row() {
rgba.extend(row.data());
}
Cached::try_from(rgba).map(|cache| Self {
cache,
root: root.clone(),
format: IconFormat::Image {
width: reader.info().width,
height: reader.info().height,
},
})
}
fn open(path: &Path) -> Vec<u8> {
std::fs::read(path).unwrap_or_else(|e| panic!("failed to open icon {}: {}", path.display(), e))
}
}
impl ToTokens for CachedIcon {
fn to_tokens(&self, tokens: &mut TokenStream) {
let root = &self.root;
let cache = &self.cache;
let raw = quote!(::std::include_bytes!(#cache));
tokens.append_all(match self.format {
IconFormat::Raw => raw,
IconFormat::Image { width, height } => {
quote!(#root::image::Image::new(#raw, #width, #height))
}
})
}
}

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -13,14 +13,21 @@
)]
pub use self::context::{context_codegen, ContextData};
use crate::embedded_assets::{ensure_out_dir, EmbeddedAssetsError};
use proc_macro2::TokenStream;
use quote::{quote, ToTokens, TokenStreamExt};
use std::{
borrow::Cow,
fmt::{self, Write},
path::{Path, PathBuf},
};
pub use tauri_utils::config::{parse::ConfigError, Config};
use tauri_utils::platform::Target;
use tauri_utils::write_if_changed;
mod context;
pub mod embedded_assets;
pub mod image;
#[doc(hidden)]
pub mod vendor;
@@ -63,22 +70,28 @@ pub fn get_config(path: &Path) -> Result<(Config, PathBuf), CodegenConfigError>
.map(ToOwned::to_owned)
.ok_or_else(|| CodegenConfigError::Parent(path.into_owned()))?;
let target = std::env::var("TAURI_ENV_TARGET_TRIPLE")
.as_deref()
.map(Target::from_triple)
.unwrap_or_else(|_| Target::current());
// in the future we may want to find a way to not need the TAURI_CONFIG env var so that
// it is impossible for the content of two separate configs to get mixed up. The chances are
// already unlikely unless the developer goes out of their way to run the cli on a different
// project than the target crate.
let mut config = serde_json::from_value(tauri_utils::config::parse::read_from(
tauri_utils::platform::Target::current(),
target,
parent.clone(),
)?)?;
if let Ok(env) = std::env::var("TAURI_CONFIG") {
let merge_config: serde_json::Value =
serde_json::from_str(&env).map_err(CodegenConfigError::FormatInline)?;
json_patch::merge(&mut config, &merge_config);
}
let old_cwd = std::env::current_dir().map_err(CodegenConfigError::CurrentDir)?;
// Set working directory to where `tauri.config.json` is, so that relative paths in it are parsed correctly.
let old_cwd = std::env::current_dir().map_err(CodegenConfigError::CurrentDir)?;
std::env::set_current_dir(parent.clone()).map_err(CodegenConfigError::CurrentDir)?;
let config = serde_json::from_value(config)?;
@@ -88,3 +101,54 @@ pub fn get_config(path: &Path) -> Result<(Config, PathBuf), CodegenConfigError>
Ok((config, parent))
}
/// Create a blake3 checksum of the passed bytes.
fn checksum(bytes: &[u8]) -> Result<String, fmt::Error> {
let mut hasher = vendor::blake3_reference::Hasher::default();
hasher.update(bytes);
let mut bytes = [0u8; 32];
hasher.finalize(&mut bytes);
let mut hex = String::with_capacity(2 * bytes.len());
for b in bytes {
write!(hex, "{b:02x}")?;
}
Ok(hex)
}
/// Cache the data to `$OUT_DIR`, only if it does not already exist.
///
/// Due to using a checksum as the filename, an existing file should be the exact same content
/// as the data being checked.
struct Cached {
checksum: String,
}
impl TryFrom<String> for Cached {
type Error = EmbeddedAssetsError;
fn try_from(value: String) -> Result<Self, Self::Error> {
Self::try_from(Vec::from(value))
}
}
impl TryFrom<Vec<u8>> for Cached {
type Error = EmbeddedAssetsError;
fn try_from(content: Vec<u8>) -> Result<Self, Self::Error> {
let checksum = checksum(content.as_ref()).map_err(EmbeddedAssetsError::Hex)?;
let path = ensure_out_dir()?.join(&checksum);
write_if_changed(&path, &content)
.map(|_| Self { checksum })
.map_err(|error| EmbeddedAssetsError::AssetWrite { path, error })
}
}
impl ToTokens for Cached {
fn to_tokens(&self, tokens: &mut TokenStream) {
let path = &self.checksum;
tokens.append_all(quote!(::std::concat!(::std::env!("OUT_DIR"), "/", #path)))
}
}

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT

View File

@@ -6,7 +6,7 @@ publish = false
[build-dependencies]
tauri-utils = { features = [ "schema" ], path = "../tauri-utils" }
schemars = { version = "0.8", features = ["url", "preserve_order"] }
schemars = { version = "0.8.18", features = ["url", "preserve_order"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
url = { version = "2.3", features = ["serde"] }

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