Compare commits

...

213 Commits

Author SHA1 Message Date
Lucas Nogueira
7fd4ca0aef chore(api): downgrade documentation dependencies 2023-05-03 10:10:59 -03:00
Lucas Fernandes Nogueira
0dfd5f875f fix(core): pin winnow dependency to 0.4.1 to keep 1.60 MSRV (#6845) 2023-05-03 09:31:59 -03:00
Lucas Fernandes Nogueira
14b3667420 fix(api): downgrade typedoc to 0.23 (#6844) 2023-05-03 09:19:37 -03:00
github-actions[bot]
bf804657f5 Apply Version Updates From Current Changes (#5815)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2023-05-03 08:19:06 -03:00
Lucas Fernandes Nogueira
93452b791a feat(bundler): download NSIS zip from tauri-apps/binary-releases (#6838) 2023-05-02 16:36:33 -03:00
Lucas Fernandes Nogueira
6d6b6e653e feat: configure escaping on handlebars templates (#6678)
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
2023-05-02 09:59:59 -03:00
Lucas Fernandes Nogueira
40f137c214 fix(core): IPC remote domain check bypassed by isolation iframe usage (#6691) 2023-05-02 09:58:51 -03:00
renovate[bot]
e8e214b72e chore(deps) Update Tauri API Definitions (#6739)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-24 11:19:59 -03:00
renovate[bot]
eae0150b0a chore(deps) Update Rust crate serde_json to 1.0.96 (#6738)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-24 11:19:49 -03:00
Kárándi Tamás
51460340bf fix: copy failure in NSIS bundler #6743 (#6744) 2023-04-19 19:42:38 -03:00
renovate[bot]
dfb5f52d3c chore(deps) Update Tauri API Definitions (#6684)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-12 11:20:44 -03:00
renovate[bot]
80069e1dc0 chore(deps) Update Rust crate json-patch to v1 (#6686)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-12 11:20:08 -03:00
renovate[bot]
5fcb55e420 chore(deps) Update Rust crate json-patch to v1 (#6687)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-12 11:19:55 -03:00
Lucas Fernandes Nogueira
ee71c31fd0 feat(core): allow configuring remote domains with IPC access, closes #5088 (#5918) 2023-04-11 08:50:15 -03:00
Amr Bashir
6ff801e27d chore: rename config-schema to tauri-config-schema (#6250)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-04-07 12:11:05 -03:00
renovate[bot]
44b4e2ee00 chore(deps) Update dependency eslint-config-standard-with-typescript to v34 (#6180)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-06 21:15:51 -03:00
renovate[bot]
5a1d86b346 chore(deps) Update Tauri JS CLI (#6177)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-06 21:14:04 -03:00
renovate[bot]
f4c9635724 chore(deps) Update Rust crate cargo_toml to 0.15 (#6214)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-06 21:13:25 -03:00
renovate[bot]
565dc3baa7 chore(deps) Update Tauri Utils (major) (#4717)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-06 21:12:33 -03:00
renovate[bot]
a3c9754950 chore(deps) Update Tauri Bundler (#6640)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-06 13:03:43 -03:00
thep0y
708efbd9b7 fix(core/tauri): upgrade open to 3.2 to fix a bug on Windows (#6441)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-04-06 12:08:32 -03:00
Si Yang
da30753754 style: needless_borrow, useless_format (#6620) 2023-04-04 10:10:47 -03:00
Amr Bashir
0b46637eba fix(api): construct correct object for onResized and onMoved, closes #6507 (#6509)
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2023-04-03 12:18:36 -03:00
renovate[bot]
d3e4fb20b5 chore(deps) Update Tauri API Definitions (#6523)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2023-04-03 11:33:47 -03:00
dependabot[bot]
919d96dd8a chore(deps): bump openssl from 0.10.40 to 0.10.49 in /tooling/cli (#6618)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-03 10:57:03 -03:00
dependabot[bot]
6c7eac7288 chore(deps): bump openssl from 0.10.45 to 0.10.48 in /examples/api/src-tauri (#6551)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-03 10:05:45 -03:00
dependabot[bot]
901ce937d6 chore(deps): bump openssl from 0.10.45 to 0.10.48 in /examples/updater/src-tauri (#6550)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-03 10:05:36 -03:00
Mokhtar Hamdoune
81b9c505cc return the commment of maximum number of redirects to its right place… (#6607) 2023-04-03 08:39:15 -03:00
afa
7489f96697 fix(bundler): fix problem of macOS bunder while i18n is set, closes #6614 (#6615)
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2023-04-03 08:37:50 -03:00
Miniontoby
a926b49a01 Fix Github Actions of Tauri Plugin with-api template (#6603)
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
2023-04-03 08:12:49 -03:00
Zeeshan Ali Khan
5fdc616df9 feat: Use the zbus-backed of notify-rust (#6332)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-03-31 12:36:59 -03:00
Amr Bashir
1487b18dcb refactor: add useful diagnostics to tauri info (#6570)
* refactor: add useful diagnostics to `tauri info`

this also paves the way for interactive fixes in the future

* refactor: add useful diagnostics to `tauri info`

this also paves the way for interactive fixes in the future

* fix use_npm logic [skip ci]

* lint [skip ci]

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-03-31 10:23:34 -03:00
Lucas Fernandes Nogueira
7f820ee190 chore(tests): enhance and document updater NSIS test (#6556) 2023-03-31 10:13:35 -03:00
Lucas Fernandes Nogueira
54c6f158d9 chore(cli): enhance empty updater key password warning (#6558) 2023-03-31 10:13:25 -03:00
Fabian-Lars
23282873e7 docs(api.js): Fix basename example, closes tauri-apps/tauri-docs#1180 (#6553) 2023-03-31 10:13:04 -03:00
Amr Bashir
eb1ec0416c fix(core/updater): read and parse response after checking status code, closes #6192 (#6575) 2023-03-31 10:06:59 -03:00
Lucas Fernandes Nogueira
5e0c4489df fix(bundler): enhance extract_zip security by using enclosed_name() (#6555)
See https://docs.rs/zip/0.6.4/zip/read/struct.ZipFile.html#method.enclosed_name
2023-03-31 10:05:44 -03:00
Lucas Fernandes Nogueira
d788d23071 refactor(core): do not allow JS API to set additional browser args (#6216)
This was introduced in #5799, but it's dangerous to let the frontend set this option.
2023-03-31 10:05:18 -03:00
Amr Bashir
a7ee5ca7c3 fix(cli): look for available ports for built-in dev server, closes #6511 (#6514)
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2023-03-31 10:03:38 -03:00
Amr Bashir
ff4ea1eabb fix: dispatch focus event to app.run on Windows, closes #6460 (#6504) 2023-03-31 10:03:25 -03:00
CzBiX
57c6bf07bb fix(cli): fix default-run not deserialized (#6584)
* fix(cli): fix default-run not deserialized

* Create fix-cli-default-run.md

* Update .changes/fix-cli-default-run.md [skip ci]

---------

Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
2023-03-29 14:43:16 -03:00
amrbashir
38ee5066e7 chore: update schema files 2023-03-28 16:25:33 +02:00
Elliot Waite
8c07076e25 docs: update grammer 2023-03-28 16:04:44 +02:00
passivedragon
2f70d8da2b fix: symlink issue bundling for linux #5781 (#6391)
* bundler for linux: fix error on pre-existing links

* fix: symlink issue bundling for linux #5781
2023-03-17 15:03:40 -03:00
Lucas Fernandes Nogueira
c46c09f31d fix(deps): pin raw-window-handle to 0.5.0 (#6480)
* fix(deps): pin raw-window-handle to 0.5.0

* lint [skip ci]
2023-03-17 14:11:24 -03:00
Shaun Hamilton
c2867a65d8 feat: add config links to json schema (closes #5479) (#6356)
* feat(core): add config links to json schema

* feat(core): add schema builds
2023-03-17 13:17:34 -03:00
Amr Bashir
058469114d docs: update formdata usage (#6374)
* docs: update formdata usage

* update generated files

* update generated files

* run workflow on push for dev only

* remove `js-api.json` from generated files check

* restore js-api.json before checking diff
2023-03-17 13:13:02 -03:00
sameoldlab
00c60097c5 fix scope example (#6401)
Changed `scope` example to provide an array, as described in the docs and how it works.
2023-03-17 13:11:43 -03:00
Fabian-Lars
1d0de2a558 fix(core): export SystemTrayMenuItemHandle to fix doc generation. (#6440) 2023-03-17 13:09:27 -03:00
Fabian-Lars
1fa729b218 fix(docs): mark internal interfaces as such to deduplicate markdown output (#6260) 2023-03-16 09:25:13 -03:00
renovate[bot]
808deecfff chore(deps) Update Tauri API Definitions (#6277)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-16 09:22:20 -03:00
Amr Bashir
b7a2ce2c63 feat(cli): add --port, closes #6186 (#6283)
* feat(cli): add --dev-server-port, closes #6186

* add http:// prefix

* name it to `--port`

* rename in all places
2023-03-16 09:22:02 -03:00
2nthony
3536aa00d1 fix(api): event name types (#6318)
* fix(api): event name

* suggestion change

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

---------

Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
2023-03-16 09:16:50 -03:00
Amr Bashir
1c8229fbe2 fix(cli.js): detect node-<version> binary, closes #6427 (#6432)
* fix(cli.js): detect `node-<version>` binary, closes #6427

* use `?` instead of `*` and escape the hyphen

Co-authored-by: TurtleIdiot <18502738+TurtleIdiot@users.noreply.github.com>

---------

Co-authored-by: TurtleIdiot <18502738+TurtleIdiot@users.noreply.github.com>
2023-03-16 09:01:41 -03:00
amrbashir
e513b69d98 chore: fix info rendering in bug issue template 2023-03-06 15:37:27 +02:00
Lorenzo Lewis
cfcc7f3c20 Commit JS AST, update check-generated-file checkout action (#6262)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-02-22 10:10:54 -03:00
Lucas Fernandes Nogueira
5fdf8dcb8e fix(core): mime type of .less, .sass and .styl files (#6316) 2023-02-19 16:23:18 -03:00
Lucas Fernandes Nogueira
36e4837cea chore(examples): delete mobile.toml file (#6317) 2023-02-19 16:23:09 -03:00
Lucas Fernandes Nogueira
17bf7f1f0f feat(ci): add workflow to check license header (#6315) 2023-02-19 10:33:59 -03:00
Lucas Fernandes Nogueira
46e6187c89 chore: update license year (#6311) 2023-02-19 10:17:49 -03:00
Lucas Fernandes Nogueira
3d16461b68 fix(core): pin time to 0.3.15 (#6312) 2023-02-19 09:02:36 -03:00
dependabot[bot]
8661e4a0d7 chore(deps): bump undici from 5.9.1 to 5.19.1 in /examples/api (#6296)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-18 16:23:25 -03:00
Amr Bashir
f6c3ea6faa chore: simplify windows_subsystem attribute (#6273) 2023-02-18 16:23:09 -03:00
Amr Bashir
bfa69691a5 fix(cli): detect --profile. closes #6255 (#6268) 2023-02-18 16:20:21 -03:00
Lucas Fernandes Nogueira
e8014a7f61 fix(cli): do not crash on watcher (#6303) 2023-02-17 22:06:10 -03:00
Lucas Fernandes Nogueira
138cb8d739 fix(tauri-runtime-wry): tray event listener not registered (#6270) 2023-02-14 14:56:36 -03:00
dependabot[bot]
852e11e17b chore(deps): bump tokio from 1.23.1 to 1.24.2 in /tooling/cli (#6194)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-02-08 09:15:49 -03:00
renovate[bot]
c9364c2a4c chore(deps) Update Tauri API Definitions (#6215)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-08 09:14:15 -03:00
Lucas Fernandes Nogueira
a8d640b3c6 fix(core): pin unarray and os_info (#6212) 2023-02-07 20:47:31 -03:00
dependabot[bot]
b72adc0a66 chore(deps): bump tokio from 1.20.3 to 1.20.4 in /tooling/webdriver (#6193)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-07 19:46:31 -03:00
renovate[bot]
7e8e0e76ec chore(deps) Update Tauri API Definitions (#6178)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-02 16:45:17 -03:00
chip
50576a5e1e fix 1.67 clippy warnings (compatible with MSRV) (#6179) 2023-02-01 14:24:01 -03:00
Alain Nicolas Schneble
314f0e212f fix(cli): web_dev_server html template serialization (fix #6165) (#6166)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-29 15:12:01 -03:00
Fabian-Lars
f7ac2e9250 docs(api.js): fix heading level in window api docs (#6157) 2023-01-29 15:00:50 -03:00
renovate[bot]
db7765edad chore(deps) Update Tauri Codegen (#6034)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-26 11:23:08 -03:00
Fabian-Lars
d20a728892 feat: Further improve workspace inheritance, closes #6122, #5070 (#6144)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-26 10:47:23 -03:00
Amr Bashir
9da996073f fix(cli): fix printing paths on Windows (#6137) 2023-01-26 10:45:58 -03:00
renovate[bot]
ed6b81b29d chore(deps) Update Rust crate toml to 0.6.0 (#6139)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-26 09:32:34 -03:00
Fabian-Lars
b0d3128597 fix(bundler): NSIS: default to user permission level (#6135) 2023-01-26 09:24:57 -03:00
renovate[bot]
2d9936931a chore(deps) Update Tauri JS CLI (#6138)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-26 09:24:08 -03:00
renovate[bot]
0d6bc3b583 chore(deps) Update dependency eslint-config-standard-with-typescript to v32 (#6141)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-26 09:16:57 -03:00
Amr Bashir
aff1fd2c7d chore: update nsis-tauri-utils to 0.1.1 (#6136) 2023-01-26 09:16:43 -03:00
renovate[bot]
7a17c1e89f chore(deps) Update Tauri API Definitions to v5.49.0 (#6140)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-26 09:12:36 -03:00
Jonas Kruckenberg
e71e375c29 chore: enable aarch64-apple-darwin cargo-binstall builds (#6145) 2023-01-26 09:09:04 -03:00
Fabian-Lars
36540ce3c3 feat(bundler): enable arm64 target for nsis bundle (#6070)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-23 18:32:45 -03:00
Ludea
275800a603 feat: add french support for nsis (#6114)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-23 18:29:27 -03:00
Amr Bashir
f29c56da8c feat(NSIS): option to remove user data & uninstaller lang & fix RTL (#6129)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-23 18:25:01 -03:00
Amr Bashir
328583e12e feat(bundler/nsis): migrate to nsis_tauri_utils (#6120)
Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
2023-01-23 18:12:14 -03:00
Chris Ohk
26f306d65c fix: Correct minor typos (#6132) 2023-01-23 18:10:42 -03:00
dependabot[bot]
87ea607ef4 chore(deps): bump bumpalo from 3.10.0 to 3.12.0 in /tooling/cli (#6118)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-23 18:10:07 -03:00
Golden Water
763f0bdcb0 feat: add Simplified Chinese support for nsis. (#6109)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-20 11:35:08 -03:00
DK Liao
27fa1022ee feat: add Traditional Chinese support for nsis (#6111) 2023-01-20 11:11:18 -03:00
DK Liao
e601b9a790 fix: quick typo fix for nsis (#6112) 2023-01-20 11:10:31 -03:00
Fabian-Lars
60e6f6c3f1 feat(bundler): Add support for creating NSIS bundles on unix hosts (#5788)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-19 15:42:40 -03:00
Amr Bashir
35b587c830 feat: add languages support for nsis (#6039)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-19 14:39:53 -03:00
renovate[bot]
b9559b35d1 chore(deps) Update dependency eslint-config-standard-with-typescript to v30 (#6091)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-19 00:25:18 -03:00
Lucas Nogueira
d4f89af18d feat: skip password prompt on the build command if CI is set fixes #6089 2023-01-18 23:54:30 -03:00
Amr Bashir
8fb1df8aa6 feat(cli): add --ci flag to signer generate, closes #6089 (#6097)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-18 23:43:37 -03:00
renovate[bot]
e0631d379c chore(deps) Update Tauri API Definitions (#6087)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-18 22:39:53 -03:00
renovate[bot]
581b515e08 chore(deps) Update Tauri JS CLI (#6088)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-18 22:39:44 -03:00
Fabian-Lars
20ff1f4596 feat(bundler): Add support for numeric-only build numbers in msi version (#6096)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-18 22:30:44 -03:00
Fabian-Lars
fc193a502f ci: downgrade benchmark runner to ubuntu20.04 (#6095) 2023-01-18 22:28:42 -03:00
Amr Bashir
d4d6a98d98 fix(core): convert js Map to object before serialization, closes #6078 (#6099)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-18 22:17:01 -03:00
Lucas Nogueira
a822a6ad74 chore: update versions after ignore=0.4.18 patch 2023-01-18 21:47:26 -03:00
Lucas Nogueira
6ed2b04872 chore(deps): revert phf to 0.10 2023-01-17 13:26:22 -03:00
Lucas Nogueira
7ccfa2fb0b chore(deps): pin ignore to =0.4.18 2023-01-17 13:10:09 -03:00
Lucas Nogueira
1b9f0ec350 fix(core): adjust aes_gcm usage 2023-01-17 13:09:49 -03:00
Lucas Nogueira
2455328f81 fix(core): WindowBuilder::from_config documentation example 2023-01-17 12:28:11 -03:00
Lucas Nogueira
f4fe3beb84 chore(tauri-utils): update dependencies 2023-01-17 12:25:01 -03:00
Lucas Nogueira
54a4a14b41 Revert "chore(deps): update embed_plist to 1.4"
This reverts commit b3591d46e6.
2023-01-17 12:21:35 -03:00
Lucas Nogueira
b3591d46e6 chore(deps): update embed_plist to 1.4 2023-01-17 12:19:36 -03:00
Amr Bashir
0b4882ed92 fix(cli/node): add json5 resolution, fix audit ci (#5991) 2023-01-16 22:55:18 -03:00
dependabot[bot]
ca3a53005a chore(deps): bump tokio from 1.21.2 to 1.23.1 in /tooling/cli (#5997)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-16 22:47:48 -03:00
dependabot[bot]
6ccfce4180 chore(deps): bump tokio from 1.19.2 to 1.20.3 in /tooling/webdriver (#5996)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-16 22:47:34 -03:00
dependabot[bot]
7aca4527e8 chore(deps): bump tokio from 1.21.2 to 1.24.1 in /examples/api/src-tauri (#5998)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-16 22:42:50 -03:00
dependabot[bot]
9d543f6ed3 chore(deps): bump tokio from 1.21.2 to 1.24.1 in /examples/resources/src-tauri (#5999)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-16 22:42:35 -03:00
dependabot[bot]
2761dd037f chore(deps): bump tokio from 1.21.2 to 1.23.1 in /examples/tauri-dynamic-lib/src-tauri (#6000)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-16 22:42:24 -03:00
dependabot[bot]
9afbeb6b7a chore(deps): bump tokio from 1.21.2 to 1.24.1 in /examples/sidecar/src-tauri (#6001)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-16 22:42:15 -03:00
dependabot[bot]
6e60bd637c chore(deps): bump tokio from 1.21.2 to 1.24.1 in /examples/updater/src-tauri (#6002)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-16 22:42:05 -03:00
dependabot[bot]
8e4820642e chore(deps): bump tokio from 1.21.2 to 1.24.1 in /examples/web/core (#6003)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-16 22:41:57 -03:00
dependabot[bot]
a788aea85d chore(deps): bump tokio from 1.23.0 to 1.24.1 in /examples/workspace (#6004)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-16 22:41:47 -03:00
Amr Bashir
7aab3e2076 fix(cli.rs): improve rustc not found error msg (#6021) 2023-01-16 22:41:05 -03:00
dependabot[bot]
05662b3129 chore(deps): bump bzip2 from 0.4.3 to 0.4.4 in /tooling/cli (#6028)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-16 22:40:44 -03:00
renovate[bot]
62f8659bef chore(deps) Update Tauri API Definitions (#6031)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-16 22:40:34 -03:00
renovate[bot]
8ac2f412be chore(deps) Update Tauri JS CLI (#6032)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-16 22:40:21 -03:00
Fabian-Lars
01b876761a fix(bundler): fix order of webview2 installer args in nsis bundle (#6042) 2023-01-16 22:35:22 -03:00
Jonas Kruckenberg
8eabb09e80 Update FUNDING.yml to point to the org sponsors (#6056) 2023-01-16 22:33:42 -03:00
Fabian-Lars
49dff27ef1 feat(core): create WindowBuilder from WindowConfig (#6073)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-16 22:29:21 -03:00
Fabian-Lars
b08ae637a0 fix(cli): remove default features from template (#6074) 2023-01-16 21:43:29 -03:00
Shogo Hida
8c842a54a6 feature: disable mouse event when building windows on Linux, closes #5913 (#6025)
Co-authored-by: Wu Yu Wei <wusyong9104@gmail.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
Fixes https://github.com/tauri-apps/tauri/issues/5913
2023-01-16 10:33:06 -03:00
matthme
72aa17f79a added additional information to AllowlistConfid documentation (#5985)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-04 18:21:26 -03:00
renovate[bot]
7ae67dde69 chore(deps) Update dependency eslint-config-standard-with-typescript to v26 (#5981)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-04 13:05:00 -03:00
dependabot[bot]
2809171fb4 chore(deps): bump json5 from 1.0.1 to 1.0.2 in /tooling/api (#5973)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-04 10:11:46 -03:00
renovate[bot]
4b9a5af3cf chore(deps) Update dependency @napi-rs/cli to v2.14.1 (#5977)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-04 10:10:51 -03:00
renovate[bot]
d2df2e831b chore(deps) Update Tauri API Definitions (#5978)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-04 10:10:10 -03:00
Amr Bashir
c94e1326a7 feat(bundler): add nsis, closes #4450, closes #2319 (#4674)
Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2023-01-03 14:29:20 -03:00
Jason
4892637f83 fix: Resizing glitch on custom titlebar click (closes #2549) (#5966)
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.studio>
closes https://github.com/tauri-apps/tauri/issues/2549
2023-01-03 14:14:37 -03:00
alesharik
ce76d95ab1 feat(tauri-cli): add dylib support to tauri.bundle.macOS.frameworks, closes #4615 (#5732)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-12-31 13:53:35 -03:00
luofei
2265e09718 feat(windows): implement with_tooltip (#5938)
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-12-31 13:24:39 -03:00
dependabot[bot]
6d5dc9489c chore(deps): bump json5 from 2.2.0 to 2.2.2 in /tooling/cli/node (#5949)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-31 12:55:52 -03:00
renovate[bot]
d703c7f459 chore(deps) Update Rust crate cargo_toml to 0.14 (#5928)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-31 12:55:19 -03:00
renovate[bot]
281714e567 chore(deps) Update dependency @napi-rs/cli to v2.14.0 (#5930)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-31 12:48:50 -03:00
renovate[bot]
c1d84e8127 chore(deps) Update Tauri API Definitions (#5927)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-31 12:47:45 -03:00
renovate[bot]
04ddee91e8 chore(deps) Update Rust crate ico to 0.3 (#5929)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-31 12:47:25 -03:00
Lucas Nogueira
864dfe4de5 fix(examples): use new MessageDialogButtons variant name 2022-12-30 20:15:45 -03:00
Amr Bashir
077605f58b refactor: use windows manifest already present in tauri-build crate (#5936)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-12-30 08:44:31 -03:00
Bo
00e1efaa9b feat: customize button texts of message dialog (#4383)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-12-27 18:15:53 -03:00
Amr Bashir
7a8d570db7 fix: sync webview theme with window theme on Windows, closes #5802 (#5874)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-12-27 14:57:02 -03:00
Amr Bashir
0d5835d133 chore: update plugin example based on CTA (#5213)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-12-27 14:32:29 -03:00
renovate[bot]
488a7562bb chore(deps) Update dependency eslint-config-standard-with-typescript to v24 (#5832)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-12-27 13:15:58 -03:00
Darin Morrison
3f35b45263 Expose wry navigation_handler via WindowBuilder closes #4080 (#5686)
Co-authored-by: silvanshade <silvanshade@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-12-27 12:54:57 -03:00
Amr Bashir
146a794cb6 fix(core): sync windows metadata across all windows, closes #5571 (#5615)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-12-27 12:19:07 -03:00
TomatoCake
ff99a9bf74 docs(api): Add missing APIs to dialog allowlist (#5858) 2022-12-27 10:40:28 -03:00
renovate[bot]
bf550f94cc chore(deps) Update Tauri JS CLI (#5882)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-27 10:39:55 -03:00
renovate[bot]
f439122622 chore(deps) Update Tauri API Definitions (#5883)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-27 10:39:46 -03:00
khuongduy354
9d2144128f feat(cli): add option to make custom icon sizes, closes #5121 (#5246)
Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-12-27 10:34:20 -03:00
tweidinger
f5305de251 Added GitHub disclosure process (#5905) 2022-12-26 19:01:45 -03:00
Lucas Fernandes Nogueira
d17027e1a0 feat: expose url method (#5914)
Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
Co-authored-by: Jonas Kruckenberg <iterpre@protonmail.com>
2022-12-26 15:31:40 -03:00
Amr Bashir
72621892fe fix(cli): use unicode feature for heck crate, closes #5860 (#5872) 2022-12-26 11:38:13 -03:00
Amr Bashir
89602cdce3 feat(bundler): check Launch app by default for WiX, closes #5859 (#5871) 2022-12-26 11:36:43 -03:00
Amr Bashir
c2608423b6 fix(cli): don't panic when a crate version couldn't be parsed (#5873)
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.studio>
2022-12-26 11:35:04 -03:00
Lucas Nogueira
1956a3aeda fix(core): window allowlist error message for internal APIs 2022-12-23 22:28:04 -03:00
Lucas Nogueira
14d567f7ec chore: update tauri changelog 2022-12-22 11:35:29 -03:00
Amr Bashir
72389b00d7 Merge pull request from GHSA-6mv3-wm7j-h4w5
* fix(core): use `require_literal_separator` when matching paths

* document the need for `require_literal_separator`

* use `require_literal_leading_dot`
2022-12-22 15:53:46 +02:00
Lucas Nogueira
4f2fd4dcf7 chore: run cargo fmt 2022-12-15 18:40:57 -03:00
Lucas Nogueira
cf0986491c chore(cli): fix clippy warnings 2022-12-15 18:30:32 -03:00
Lucas Nogueira
d7ffa7f95e chore: addition to previous commit 2022-12-15 18:28:44 -03:00
Lucas Nogueira
015020760a chore: fix clippy warnings 2022-12-15 18:03:28 -03:00
renovate[bot]
a02c6c4c81 chore(deps) Update Rust crate toml to 0.5.10 (#5836)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-15 12:35:58 -03:00
Fabian-Lars
cd8c074ae6 feat(cli): add support for Cargo's workspace inheritance for the package version, closes #5070 (#5775)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-12-14 13:39:05 -03:00
Robin van Boven
f7a080a121 fix(bench): Result interpretation problems (#5798)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-12-14 12:44:05 -03:00
Amr Bashir
bca09f7f5f feat(tauri-build): add option to specify Windows manifest, closes #5584 (#5730)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-12-14 12:18:46 -03:00
Lucas Nogueira
2bf9c27375 fix(ci): use client-payload input to trigger cli.js publish workflow 2022-12-14 12:17:43 -03:00
Noam Zaks
3dc38b150e feat(core): expose additional_browser_args to window config (fix: #5757) (#5799)
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-12-14 11:46:24 -03:00
renovate[bot]
28133c5155 chore(deps) Update dependency @napi-rs/cli to v2.13.2 (#5827)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-14 09:01:29 -03:00
renovate[bot]
1efe861d3c chore(deps) Update Rust crate json-patch to 0.3 (#5828)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-14 09:01:20 -03:00
renovate[bot]
0eddb812c6 chore(deps) Update Tauri API Definitions (#5829)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-14 09:00:53 -03:00
renovate[bot]
19ec53fae4 chore(deps) Update Tauri Codegen (#5830)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-14 09:00:36 -03:00
filip
73fd60eef2 expose set_device_event_filter in tauri (#5562)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
Closes https://github.com/tauri-apps/tauri/issues/5496
2022-12-13 13:57:32 -03:00
Amr Bashir
5fd4d20e3b chore: remove duplicate field (#5824) 2022-12-13 12:56:58 -03:00
Amr Bashir
4ab5545b7a feat: add content protection api, closes #5132 (#5513)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-12-13 01:04:22 -03:00
Amr Bashir
233e43b0c3 feat: add title getter on window, closes #5023 (#5515)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-12-13 00:59:09 -03:00
Lucas Fernandes Nogueira
d0d873e39a feat(core): add support to mailto: and tel: links, closes #5521 (#5544) 2022-12-13 00:57:39 -03:00
Lucas Nogueira
9db9e6c037 feat(ci): also run check-generated-files on pull request 2022-12-12 10:36:25 -03:00
crpz1
62144ef3be feat: add is_minimized (fix #3878) (#5618)
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
fixes https://github.com/tauri-apps/tauri/issues/3878
2022-12-12 10:34:19 -03:00
Lucas Fernandes Nogueira
eaf0d71779 fix(ci): do not test cli.js on node v12 (#5784) 2022-12-08 13:23:50 -03:00
github-actions[bot]
75a0c79dea Apply Version Updates From Current Changes (#5710)
Co-authored-by: lucasfernog <lucasfernog@users.noreply.github.com>
2022-12-08 11:57:21 -03:00
Orvar Segerström
c14b1df372 fix(core): Invoke event listener in windows safely to avoid causing uncaught errors in windows that have loaded external urls (#5563)
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-12-08 11:32:52 -03:00
Lucas Fernandes Nogueira
41a471b23a feat(covector): improve published version check (#5783) 2022-12-08 09:49:55 -03:00
Avaab Razzaq
9e7ce0a8ee feat(cli): detect SolidJS and SolidStart (#5758) 2022-12-08 09:47:32 -03:00
Lucas Nogueira
b293da35dd fix(changes): change enable_macos_default_menu bump to patch
This is a regression so we can publish it as a patch.
2022-12-08 09:32:59 -03:00
Lucas Nogueira
fdcd77338c chore(deps): update wry to 0.23 2022-12-08 09:01:12 -03:00
Lucas Fernandes Nogueira
9093ef3314 fix(bundler): blank taskbar icon on WiX update, closes #5631 (#5779) 2022-12-08 08:49:54 -03:00
Lucas Nogueira
ffe21e0225 chore(cli): rerun build on template changes 2022-12-07 16:30:35 -03:00
Lucas Nogueira
4f087cfd92 chore(deps): pin wry to 0.22.6 2022-12-07 16:28:40 -03:00
renovate[bot]
7225501c13 chore(deps) Update dependency prettier to v2.8.1 (#5777)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-07 16:27:02 -03:00
renovate[bot]
9c632ee35d chore(deps) Update dependency prettier to v2.8.1 (#5776)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-07 16:26:52 -03:00
renovate[bot]
b5059d77e9 chore(deps) Update Tauri API Definitions (#5772)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-07 16:06:27 -03:00
Lucas Nogueira
f81c3f2922 fix(ci): install libfuse2 to run integration tests 2022-12-07 16:06:06 -03:00
Amr Bashir
8866ecac3c feat(core): add tauri::Builder::enable_macos_default_menu (#5756) 2022-12-07 11:01:53 +08:00
Amr Bashir
0f26960891 fix(core/api): cleanup before exit (#5765) 2022-12-07 11:01:13 +08:00
Antoine Meloche
c7bffb01be DOCS: incorrect descriptions in AboutMetadata fields (#5744) 2022-12-03 10:22:17 -03:00
Lucas Fernandes Nogueira
9d872ab872 feat(cli): detect SvelteKit and Vite (#5742) 2022-12-02 08:18:28 -03:00
renovate[bot]
b6027b2dd2 chore(deps) Update Tauri API Definitions (#5729)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-30 11:31:11 -03:00
renovate[bot]
2a0b2cea03 chore(deps) Update dependency fs-extra to v11 (#5727)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-30 11:30:53 -03:00
renovate[bot]
873840a204 chore(deps) Update Rust crate image to 0.24.5 (#5675)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-30 11:25:53 -03:00
renovate[bot]
445a8b6062 chore(deps) Update Tauri API Definitions (#5676)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-30 11:11:07 -03:00
renovate[bot]
677db85877 chore(deps) Update Tauri JS CLI (#5678)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-30 11:10:54 -03:00
Amr Bashir
c0989848b9 feat(cli/dev): add --no-dev-server, ref #5708 (#5722) 2022-11-30 10:34:51 -03:00
Fabian-Lars
04681a6b13 fix(docs): cross-link to correct PathResolver method in path module docs. (#5714) 2022-11-29 11:26:13 +08:00
Fabian-Lars
2d545eff58 fix(cli): corrupted icons in bundled macOS icons (#5698)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2022-11-28 08:57:32 -03:00
Vilian Gerdzhikov
0e8d3a6f16 wording & version corrections (#5696) 2022-11-28 08:57:11 -03:00
Fabian-Lars
b490308c88 fix(core): compilation error on older Linux versions, fixes #5684 (#5697) 2022-11-28 08:39:19 -03:00
526 changed files with 15371 additions and 6248 deletions

2
.cargo/config Normal file
View File

@@ -0,0 +1,2 @@
[env]
__TAURI_WORKSPACE__ = "true"

View File

@@ -5,7 +5,7 @@
"rust": {
"errorOnVersionRange": "^2.0.0-0",
"version": true,
"getPublishedVersion": "cargo search ${ pkgFile.pkg.package.name } --limit 1 | sed -nE \"s/^[^\\\"]*\\\"//; s/\\\".*//1p\"",
"getPublishedVersion": "node ../../.scripts/covector/package-latest-version.js cargo ${ pkgFile.pkg.package.name } ${ pkgFile.pkg.package.version }",
"prepublish": [
"sudo apt-get update",
"sudo apt-get install -y webkit2gtk-4.0 libayatana-appindicator3-dev",
@@ -70,7 +70,7 @@
"javascript": {
"errorOnVersionRange": "^2.0.0-0",
"version": true,
"getPublishedVersion": "npm view ${ pkgFile.pkg.name } version",
"getPublishedVersion": "node ../../.scripts/covector/package-latest-version.js npm ${ pkgFile.pkg.name } ${ pkgFile.pkg.version }",
"prepublish": [
{
"command": "yarn",
@@ -211,7 +211,7 @@
"dependencies": ["tauri-codegen", "tauri-utils"],
"postversion": [
"node ../../.scripts/covector/sync-cli-metadata.js ${ pkg.pkg } ${ release.type }",
"cargo build --manifest-path ../config-schema/Cargo.toml"
"cargo build --manifest-path ../tauri-config-schema/Cargo.toml"
],
"assets": [
{
@@ -234,10 +234,11 @@
"cli.js": {
"path": "./tooling/cli/node",
"manager": "javascript",
"getPublishedVersion": "node ../../../.scripts/covector/package-latest-version.js npm ${ pkgFile.pkg.name } ${ pkgFile.pkg.version }",
"dependencies": ["cli.rs"],
"postversion": [
"node ../../../.scripts/covector/sync-cli-metadata.js ${ pkg.pkg } ${ release.type }",
"cargo build --manifest-path ../../../core/config-schema/Cargo.toml"
"cargo build --manifest-path ../../../core/tauri-config-schema/Cargo.toml"
],
"prepublish": [],
"publish": [],
@@ -249,7 +250,7 @@
"dependencies": ["tauri-bundler", "tauri-utils"],
"postversion": [
"cargo check",
"cargo build --manifest-path ../../core/config-schema/Cargo.toml"
"cargo build --manifest-path ../../core/tauri-config-schema/Cargo.toml"
],
"assets": [
{

6
.github/FUNDING.yml vendored
View File

@@ -1,6 +1,10 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
# These are supported funding model platforms
github: nothingismagick
github: tauri-apps
patreon: #
open_collective: tauri
ko_fi: # Replace with a single Ko-fi username

View File

@@ -1,3 +1,7 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
name: 🐞 Bug Report
title: '[bug] '
description: Report a bug
@@ -43,6 +47,7 @@ body:
attributes:
label: Platform and versions
description: "Output of `npm run tauri info` or `cargo tauri info`"
render: text
validations:
required: true
@@ -50,8 +55,8 @@ body:
id: logs
attributes:
label: Stack trace
render: shell
render: text
- type: textarea
id: context
attributes:

View File

@@ -1,3 +1,7 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
contact_links:
- name: 💬 Discord Chat
url: https://discord.com/invite/tauri

View File

@@ -1,3 +1,7 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
name: 💡 Feature Request
title: '[feat] '
description: Suggest an idea

3
.github/config.yml vendored
View File

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

View File

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

View File

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

View File

@@ -1,3 +1,7 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
name: benches
on:
@@ -10,6 +14,7 @@ on:
env:
RUST_BACKTRACE: 1
CARGO_PROFILE_DEV_DEBUG: 0 # This would add unnecessary bloat to the target folder, decreasing cache efficiency.
LC_ALL: en_US.UTF-8 # This prevents strace from changing it's number format to use commas.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
@@ -22,7 +27,7 @@ jobs:
matrix:
rust: [nightly]
platform:
- { target: x86_64-unknown-linux-gnu, os: ubuntu-latest }
- { target: x86_64-unknown-linux-gnu, os: ubuntu-20.04 }
runs-on: ${{ matrix.platform.os }}

View File

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

View File

@@ -1,18 +1,28 @@
# Copyright 2019-2022 Tauri Programme within The Commons Conservancy
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
name: Check generated files
on:
push:
pull_request:
paths:
- '.github/workflows/check-generated-files.yml'
- 'tooling/api/src/**'
- 'core/tauri/scripts/bundle.global.js'
- 'core/tauri-utils/src/config.rs'
- 'tooling/cli/schema.json'
- 'core/config-schema/schema.json'
- 'core/tauri-config-schema/schema.json'
push:
branches:
- dev
paths:
- '.github/workflows/check-generated-files.yml'
- 'tooling/api/src/**'
- 'core/tauri/scripts/bundle.global.js'
- 'core/tauri-utils/src/config.rs'
- 'tooling/cli/schema.json'
- 'core/tauri-config-schema/schema.json'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
@@ -22,41 +32,44 @@ jobs:
changes:
runs-on: ubuntu-latest
outputs:
bundle: ${{ steps.filter.outputs.bundle }}
api: ${{ steps.filter.outputs.api }}
schema: ${{ steps.filter.outputs.schema }}
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- uses: dorny/paths-filter@v2
id: filter
with:
filters: |
bundle:
api:
- 'tooling/api/src/**'
- 'tooling/api/docs/js-api.json'
- 'core/tauri/scripts/bundle.global.js'
schema:
- 'core/tauri-utils/src/config.rs'
- 'tooling/cli/schema.json'
- 'core/config-schema/schema.json'
- 'core/tauri-config-schema/schema.json'
check-bundle:
check-api:
runs-on: ubuntu-latest
needs: changes
if: needs.changes.outputs.bundle == 'true'
if: needs.changes.outputs.api == 'true'
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: generate bundle
- name: build api
working-directory: tooling/api
run: yarn && yarn build
- name: check bundle
run: ./.scripts/ci/has-diff.sh
- name: check api
run: |
git restore tooling/api/docs/js-api.json
./.scripts/ci/has-diff.sh
check-schema:
runs-on: ubuntu-latest
needs: changes
if: needs.changes.outputs.schema == 'true'
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: install stable
uses: actions-rs/toolchain@v1
@@ -77,7 +90,7 @@ jobs:
uses: actions-rs/cargo@v1
with:
command: build
args: --manifest-path ./core/config-schema/Cargo.toml
args: --manifest-path ./core/tauri-config-schema/Cargo.toml
- name: check schema
run: ./.scripts/ci/has-diff.sh

View File

@@ -0,0 +1,28 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
name: Check generated files
on:
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: dorny/paths-filter@v2
id: filter
with:
list-files: shell
filters: |
added:
- added: '**'
- name: check header license on new files
if: ${{ steps.filter.outputs.added == 'true' }}
run: node check-license-header.js ${{ steps.filter.outputs.added_files }}

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2022 Tauri Programme within The Commons Conservancy
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
@@ -30,7 +30,7 @@ jobs:
if: matrix.platform == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y webkit2gtk-4.0 libayatana-appindicator3-dev
sudo apt-get install -y webkit2gtk-4.0 libayatana-appindicator3-dev libfuse2
- uses: Swatinem/rust-cache@v2
with:
@@ -124,7 +124,7 @@ jobs:
token: ${{ secrets.ORG_TAURI_BOT_PAT }}
repository: tauri-apps/tauri
event-type: publish-clijs
inputs: '{"releaseId": "${{ steps.covector.outputs.cli.js-releaseId }}" }'
client-payload: '{"releaseId": "${{ steps.covector.outputs.cli.js-releaseId }}" }'
- name: Trigger cli.rs publishing workflow
if: |

View File

@@ -1,3 +1,7 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
name: docker
on:

View File

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

View File

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

View File

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

View File

@@ -1,3 +1,7 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
name: publish cli.js
env:
DEBUG: napi:*
@@ -198,7 +202,6 @@ jobs:
- host: windows-latest
target: x86_64-pc-windows-msvc
node:
- '12'
- '14'
- '16'
- '18'
@@ -232,7 +235,6 @@ jobs:
fail-fast: false
matrix:
node:
- '12'
- '14'
- '16'
- '18'
@@ -270,7 +272,6 @@ jobs:
fail-fast: false
matrix:
node:
- '12'
- '14'
- '16'
- '18'
@@ -318,7 +319,6 @@ jobs:
fail-fast: false
matrix:
node:
- '12'
- '14'
- '16'
- '18'
@@ -401,4 +401,4 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.ORG_NPM_TOKEN }}
RELEASE_ID: ${{ github.event.inputs.releaseId }}
RELEASE_ID: ${{ github.event.client_payload.releaseId || github.event.inputs.releaseId }}

View File

@@ -1,3 +1,7 @@
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
name: publish cli.rs
env:
MACOSX_DEPLOYMENT_TARGET: '10.13'
@@ -8,40 +12,45 @@ on:
jobs:
build:
runs-on: ${{ matrix.target.platform }}
runs-on: ${{ matrix.config.os }}
strategy:
fail-fast: false
matrix:
target:
- {
name: 'x86_64-unknown-linux-gnu',
platform: 'ubuntu-18.04',
ext: ''
}
- { name: 'x86_64-apple-darwin', platform: 'macos-latest', ext: '' }
- {
name: 'x86_64-pc-windows-msvc',
platform: 'windows-latest',
ext: '.exe'
}
config:
- os: ubuntu-18.04
rust_target: x86_64-unknown-linux-gnu
ext: ''
- os: macos-latest
rust_target: x86_64-apple-darwin
ext: ''
- os: macos-latest
rust_target: aarch64-apple-darwin
ext: ''
- os: windows-latest
rust_target: x86_64-pc-windows-msvc
ext: '.exe'
steps:
- name: Checkout
uses: actions/checkout@v3
- name: install stable
uses: actions-rs/toolchain@v1
- name: 'Setup Rust'
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
targets: ${{ matrix.config.rust_target }}
- uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.config.rust_target }}
- name: install Linux dependencies
if: matrix.target.platform == 'ubuntu-latest'
if: matrix.config.os == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y libgtk-3-dev
- name: build CLI
- name: Build CLI
uses: actions-rs/cargo@v1
with:
command: build
@@ -50,8 +59,8 @@ jobs:
- name: Upload CLI
uses: actions/upload-artifact@v3
with:
name: cargo-tauri-${{ matrix.target.name }}${{ matrix.target.ext }}
path: tooling/cli/target/release/cargo-tauri${{ matrix.target.ext }}
name: cargo-tauri-${{ matrix.config.rust_target }}${{ matrix.config.ext }}
path: tooling/cli/target/release/cargo-tauri${{ matrix.config.ext }}
if-no-files-found: error
upload:

View File

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

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
# Copyright 2019-2022 Tauri Programme within The Commons Conservancy
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
@@ -39,12 +39,12 @@ jobs:
- {
target: x86_64-unknown-linux-gnu,
os: ubuntu-latest,
toolchain: '1.59.0'
toolchain: '1.60.0'
}
- {
target: x86_64-apple-darwin,
os: macos-latest,
toolchain: '1.59.0'
toolchain: '1.60.0'
}
features:
- {

View File

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

View File

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

View File

@@ -9,4 +9,5 @@ dist
/tooling/cli/templates
/tooling/cli/node
/tooling/cli/schema.json
/core/config-schema/schema.json
/tooling/api/docs/js-api.json
/core/tauri-config-schema/schema.json

View File

@@ -1,3 +1,7 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
module.exports = {
singleQuote: true,
semi: false,

View File

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

View File

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

View File

@@ -0,0 +1,56 @@
#!/usr/bin/env node
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
/*
This script is solely intended to be run as part of the `covector publish` step to
check the latest version of a crate, considering the current minor version.
*/
const https = require('https')
const kind = process.argv[2]
const packageName = process.argv[3]
const packageVersion = process.argv[4]
const target = packageVersion.substring(0, packageVersion.lastIndexOf('.'))
let url = null
switch (kind) {
case 'cargo':
url = `https://crates.io/api/v1/crates/${packageName}`
break
case 'npm':
url = `https://registry.npmjs.org/${packageName}`
break
default:
throw new Error('unexpected kind ' + kind)
}
const options = {
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
'User-Agent': 'tauri (https://github.com/tauri-apps/tauri)'
}
}
https.get(url, options, (response) => {
let chunks = []
response.on('data', function (chunk) {
chunks.push(chunk)
})
response.on('end', function () {
const data = JSON.parse(chunks.join(''))
if (kind === 'cargo') {
const versions = data.versions.filter((v) => v.num.startsWith(target))
console.log(versions.length ? versions[0].num : '0.0.0')
} else if (kind === 'npm') {
const versions = Object.keys(data.versions).filter((v) =>
v.startsWith(target)
)
console.log(versions[versions.length - 1] || '0.0.0')
}
})
})

View File

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

View File

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

View File

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

View File

@@ -1,9 +1,9 @@
#!/usr/bin/env sh
# Copyright 2019-2022 Tauri Programme within The Commons Conservancy
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
declare -a examples=("api" "sidecar" "updater" "resources" "tauri-dynamic-lib")
declare -a examples=("api" "sidecar" "updater" "resources" "tauri-dynamic-lib" "workspace")
declare -a tooling=("bench" "cli" "webdriver")
for example in "${examples[@]}"

View File

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

View File

@@ -8,11 +8,11 @@ members = [
"core/tauri-utils",
"core/tauri-build",
"core/tauri-codegen",
"core/config-schema",
"core/tauri-config-schema",
# integration tests
"core/tests/restart",
"core/tests/app-updater"
"core/tests/app-updater",
]
exclude = [
@@ -21,7 +21,8 @@ exclude = [
"examples/updater/src-tauri",
"examples/resources/src-tauri",
"examples/sidecar/src-tauri",
"examples/web/core"
"examples/web/core",
"examples/workspace",
]
# default to small, optimized workspace release binaries

View File

@@ -13,7 +13,16 @@ 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.
We will be adding contact information to this page very soon.
Please submit your report via the GitHub Private Vulnerability Disclosure functionality.
Find out more about the reporting process [here](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability#privately-reporting-a-security-vulnerability).
Our team will triage your report and keep you informed about the progress.
We may ask questions or request further guidance on reproduction of the vulnerability in the comments of the advisory, which will be publicized.
Additionally, we may ask you to independently verify our patch, which will be available in the private advisory branch. Please do not publish your vulnerability during the process or before coordinated public disclosure from our side. We try to adhere to common standards of publication within 90-Days of disclosure.
Depending on your decision to accept or deny credit for the vulnerability, you will be publicly attributed to the vulnerability and may be mentioned in our announcements.
At the current time we do not have the financial ability to reward bounties,
but in extreme cases will at our discretion consider a reward.

102
check-license-header.js Normal file
View File

@@ -0,0 +1,102 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
const fs = require('fs')
const path = require('path')
const readline = require('readline')
const header = `Copyright 2019-2023 Tauri Programme within The Commons Conservancy
SPDX-License-Identifier: Apache-2.0
SPDX-License-Identifier: MIT`
const bundlerLicense = '// Copyright 2016-2019 Cargo-Bundle developers <https://github.com/burtonageo/cargo-bundle>'
const extensions = ['.rs', '.js', '.ts', '.yml']
const ignore = ['target', 'templates', 'node_modules', 'gen', 'dist', 'bundle.js', 'bundle.global.js']
async function checkFile(file) {
if (extensions.some(e => file.endsWith(e))) {
const fileStream = fs.createReadStream(file)
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
})
let contents = ``
let i = 0
for await (let line of rl) {
// ignore empty lines, allow shebang and bundler license
if (line.length === 0 || line.startsWith("#!") || line === bundlerLicense) {
continue
}
// strip comment marker
if (line.startsWith('// ')) {
line = line.substring(3)
} else if (line.startsWith('# ')) {
line = line.substring(2)
}
contents += line
if (++i === 3) {
break
}
contents += '\n'
}
if (contents !== header) {
return true
}
}
return false
}
async function check(src) {
const missingHeader = []
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
const p = path.join(src, entry.name)
if (entry.isSymbolicLink() || ignore.includes(entry.name)) {
continue
}
if (entry.isDirectory()) {
const missing = await check(p)
missingHeader.push(...missing)
} else {
const isMissing = await checkFile(p)
if (isMissing) {
missingHeader.push(p)
}
}
}
return missingHeader
}
const [_bin, _script, ...files] = process.argv
if (files.length > 0) {
async function run() {
const missing = []
for (const f of files) {
const isMissing = await checkFile(f)
if (isMissing) {
missing.push(f)
}
}
if (missing.length > 0) {
console.log(missing.join('\n'))
process.exit(1)
}
}
run()
} else {
check('.').then(missing => {
if (missing.length > 0) {
console.log(missing.join('\n'))
process.exit(1)
}
})
}

View File

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

View File

@@ -1 +0,0 @@
fn main() {}

View File

@@ -1,5 +1,18 @@
# Changelog
## \[1.3.0]
- Bump minimum supported Rust version to 1.60.
- [5fdc616d](https://www.github.com/tauri-apps/tauri/commit/5fdc616df9bea633810dcb814ac615911d77222c) feat: Use the zbus-backed of notify-rust ([#6332](https://www.github.com/tauri-apps/tauri/pull/6332)) on 2023-03-31
- Add initial support for building `nsis` bundles on non-Windows platforms.
- [60e6f6c3](https://www.github.com/tauri-apps/tauri/commit/60e6f6c3f1605f3064b5bb177992530ff788ccf0) feat(bundler): Add support for creating NSIS bundles on unix hosts ([#5788](https://www.github.com/tauri-apps/tauri/pull/5788)) on 2023-01-19
- Add `WindowsAttributes::app_manifest` to specify the application manifest on Windows.
- [bca09f7f](https://www.github.com/tauri-apps/tauri/commit/bca09f7f5ff1c9c5a4b51da043bdd5da668a179b) feat(tauri-build): add option to specify Windows manifest, closes [#5584](https://www.github.com/tauri-apps/tauri/pull/5584) ([#5730](https://www.github.com/tauri-apps/tauri/pull/5730)) on 2022-12-14
- Added support for Cargo's workspace inheritance for package information. The cli now also detects inherited `tauri` and `tauri-build` dependencies and disables manifest rewrites accordingly.
- [cd8c074a](https://www.github.com/tauri-apps/tauri/commit/cd8c074ae6592303d3f6844a4fb6d262eae913b2) feat(cli): add support for Cargo's workspace inheritance for the package version, closes [#5070](https://www.github.com/tauri-apps/tauri/pull/5070) ([#5775](https://www.github.com/tauri-apps/tauri/pull/5775)) on 2022-12-14
- [d20a7288](https://www.github.com/tauri-apps/tauri/commit/d20a728892eee1858ab525ab6216cd721f473ab5) feat: Further improve workspace inheritance, closes [#6122](https://www.github.com/tauri-apps/tauri/pull/6122), [#5070](https://www.github.com/tauri-apps/tauri/pull/5070) ([#6144](https://www.github.com/tauri-apps/tauri/pull/6144)) on 2023-01-26
- Pin `winnow` crate to 0.4.1 to keep the 1.60 MSRV.
## \[1.2.1]
- Fix `allowlist > app > show/hide` always disabled when `allowlist > app > all: false`.

View File

@@ -1,6 +1,6 @@
[package]
name = "tauri-build"
version = "1.2.1"
version = "1.3.0"
authors = [ "Tauri Programme within The Commons Conservancy" ]
categories = [ "gui", "web-programming" ]
license = "Apache-2.0 OR MIT"
@@ -8,7 +8,7 @@ homepage = "https://tauri.app"
repository = "https://github.com/tauri-apps/tauri/tree/dev/core/tauri-build"
description = "build time code to pair with https://crates.io/crates/tauri"
edition = "2021"
rust-version = "1.59"
rust-version = "1.60"
exclude = [ "CHANGELOG.md", "/target" ]
readme = "README.md"
@@ -19,15 +19,15 @@ rustdoc-args = [ "--cfg", "doc_cfg" ]
[dependencies]
anyhow = "1"
quote = { version = "1", optional = true }
tauri-codegen = { version = "1.2.1", path = "../tauri-codegen", optional = true }
tauri-utils = { version = "1.2.1", path = "../tauri-utils", features = [ "build", "resources" ] }
cargo_toml = "0.13"
tauri-codegen = { version = "1.3.0", path = "../tauri-codegen", optional = true }
tauri-utils = { version = "1.3.0", path = "../tauri-utils", features = [ "build", "resources" ] }
cargo_toml = "0.15"
winnow = "=0.4.1"
serde = "1"
serde_json = "1"
heck = "0.4"
json-patch = "0.2"
[target."cfg(windows)".dependencies]
winres = "0.1"
json-patch = "1.0"
tauri-winres = "0.1"
semver = "1"
[features]

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -86,7 +86,7 @@ impl CodegenContext {
pub fn build(self) -> PathBuf {
match self.try_build() {
Ok(out) => out,
Err(error) => panic!("Error found during Codegen::build: {}", error),
Err(error) => panic!("Error found during Codegen::build: {error}"),
}
}
@@ -161,7 +161,7 @@ impl CodegenContext {
)
})?;
writeln!(file, "{}", code).with_context(|| {
writeln!(file, "{code}").with_context(|| {
format!(
"Unable to write tokenstream to out file during tauri-build {}",
out.display()

View File

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

View File

@@ -1,19 +1,22 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
#![cfg_attr(doc_cfg, feature(doc_cfg))]
pub use anyhow::Result;
use cargo_toml::{Dependency, Manifest};
use heck::AsShoutySnakeCase;
use tauri_utils::resources::{external_binaries, resource_relpath, ResourcePaths};
use tauri_utils::{
config::Config,
resources::{external_binaries, resource_relpath, ResourcePaths},
};
use std::path::{Path, PathBuf};
#[cfg(feature = "codegen")]
mod codegen;
#[cfg(windows)]
mod static_vcruntime;
#[cfg(feature = "codegen")]
@@ -35,8 +38,8 @@ fn copy_file(from: impl AsRef<Path>, to: impl AsRef<Path>) -> Result<()> {
Ok(())
}
fn copy_binaries<'a>(
binaries: ResourcePaths<'a>,
fn copy_binaries(
binaries: ResourcePaths,
target_triple: &str,
path: &Path,
package_name: Option<&String>,
@@ -48,7 +51,7 @@ fn copy_binaries<'a>(
.file_name()
.expect("failed to extract external binary filename")
.to_string_lossy()
.replace(&format!("-{}", target_triple), "");
.replace(&format!("-{target_triple}"), "");
if package_name.map_or(false, |n| n == &file_name) {
return Err(anyhow::anyhow!(
@@ -72,7 +75,7 @@ fn copy_resources(resources: ResourcePaths<'_>, path: &Path) -> Result<()> {
let src = src?;
println!("cargo:rerun-if-changed={}", src.display());
let dest = path.join(resource_relpath(&src));
copy_file(&src, &dest)?;
copy_file(&src, dest)?;
}
Ok(())
}
@@ -90,7 +93,7 @@ fn has_feature(feature: &str) -> bool {
// `alias` must be a snake case string.
fn cfg_alias(alias: &str, has_feature: bool) {
if has_feature {
println!("cargo:rustc-cfg={}", alias);
println!("cargo:rustc-cfg={alias}");
}
}
@@ -110,6 +113,15 @@ pub struct WindowsAttributes {
///
/// If it is left unset, it will look up a path in the registry, i.e. HKLM\SOFTWARE\Microsoft\Windows Kits\Installed Roots
sdk_dir: Option<PathBuf>,
/// A string containing an [application manifest] to be included with the application on Windows.
///
/// Defaults to:
/// ```ignore
#[doc = include_str!("window-app-manifest.xml")]
/// ```
///
/// [application manifest]: https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests
app_manifest: Option<String>,
}
impl WindowsAttributes {
@@ -135,6 +147,45 @@ impl WindowsAttributes {
self.sdk_dir = Some(sdk_dir.as_ref().into());
self
}
/// Sets the Windows app [manifest].
///
/// # Example
///
/// The following manifest will brand the exe as requesting administrator privileges.
/// Thus, everytime it is executed, a Windows UAC dialog will appear.
///
/// Note that you can move the manifest contents to a separate file and use `include_str!("manifest.xml")`
/// instead of the inline string.
///
/// ```rust,no_run
/// let mut windows = tauri_build::WindowsAttributes::new();
/// windows = windows.app_manifest(r#"
/// <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
/// <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
/// <security>
/// <requestedPrivileges>
/// <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
/// </requestedPrivileges>
/// </security>
/// </trustInfo>
/// </assembly>
/// "#);
/// tauri_build::try_build(
/// tauri_build::Attributes::new().windows_attributes(windows)
/// ).expect("failed to run build script");
/// ```
///
/// Defaults to:
/// ```ignore
#[doc = include_str!("window-app-manifest.xml")]
/// [manifest]: https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests
/// ```
#[must_use]
pub fn app_manifest<S: AsRef<str>>(mut self, manifest: S) -> Self {
self.app_manifest = Some(manifest.as_ref().to_string());
self
}
}
/// The attributes used on the build.
@@ -179,8 +230,8 @@ impl Attributes {
/// This is typically desirable when running inside a build script; see [`try_build`] for no panics.
pub fn build() {
if let Err(error) = try_build(Attributes::default()) {
let error = format!("{:#}", error);
println!("{}", error);
let error = format!("{error:#}");
println!("{error}");
if error.starts_with("unknown field") {
print!("found an unknown configuration field. This usually means that you are using a CLI version that is newer than `tauri-build` and is incompatible. ");
println!(
@@ -195,8 +246,6 @@ pub fn build() {
#[allow(unused_variables)]
pub fn try_build(attributes: Attributes) -> Result<()> {
use anyhow::anyhow;
use cargo_toml::{Dependency, Manifest};
use tauri_utils::config::{Config, TauriConfig};
println!("cargo:rerun-if-env-changed=TAURI_CONFIG");
println!("cargo:rerun-if-changed=tauri.conf.json");
@@ -221,50 +270,33 @@ pub fn try_build(attributes: Attributes) -> Result<()> {
cfg_alias("dev", !has_feature("custom-protocol"));
let mut manifest = Manifest::from_path("Cargo.toml")?;
let ws_path = get_workspace_dir()?;
let mut manifest =
Manifest::<cargo_toml::Value>::from_slice_with_metadata(&std::fs::read("Cargo.toml")?)?;
if let Ok(ws_manifest) = Manifest::from_path(ws_path.join("Cargo.toml")) {
Manifest::complete_from_path_and_workspace(
&mut manifest,
Path::new("Cargo.toml"),
Some((&ws_manifest, ws_path.as_path())),
)?;
} else {
Manifest::complete_from_path(&mut manifest, Path::new("Cargo.toml"))?;
}
if let Some(tauri_build) = manifest.build_dependencies.remove("tauri-build") {
let error_message = check_features(&config, tauri_build, true);
if !error_message.is_empty() {
return Err(anyhow!("
The `tauri-build` dependency features on the `Cargo.toml` file does not match the allowlist defined under `tauri.conf.json`.
Please run `tauri dev` or `tauri build` or {}.
", error_message));
}
}
if let Some(tauri) = manifest.dependencies.remove("tauri") {
let features = match tauri {
Dependency::Simple(_) => Vec::new(),
Dependency::Detailed(dep) => dep.features,
Dependency::Inherited(dep) => dep.features,
};
let all_cli_managed_features = TauriConfig::all_features();
let diff = features_diff(
&features
.into_iter()
.filter(|f| all_cli_managed_features.contains(&f.as_str()))
.collect::<Vec<String>>(),
&config
.tauri
.features()
.into_iter()
.map(|f| f.to_string())
.collect::<Vec<String>>(),
);
let mut error_message = String::new();
if !diff.remove.is_empty() {
error_message.push_str("remove the `");
error_message.push_str(&diff.remove.join(", "));
error_message.push_str(if diff.remove.len() == 1 {
"` feature"
} else {
"` features"
});
if !diff.add.is_empty() {
error_message.push_str(" and ");
}
}
if !diff.add.is_empty() {
error_message.push_str("add the `");
error_message.push_str(&diff.add.join(", "));
error_message.push_str(if diff.add.len() == 1 {
"` feature"
} else {
"` features"
});
}
let error_message = check_features(&config, tauri, false);
if !error_message.is_empty() {
return Err(anyhow!("
@@ -296,25 +328,25 @@ pub fn try_build(attributes: Attributes) -> Result<()> {
#[allow(unused_mut, clippy::redundant_clone)]
let mut resources = config.tauri.bundle.resources.clone().unwrap_or_default();
#[cfg(windows)]
if let Some(fixed_webview2_runtime_path) = &config.tauri.bundle.windows.webview_fixed_runtime_path
{
resources.push(fixed_webview2_runtime_path.display().to_string());
if target_triple.contains("windows") {
if let Some(fixed_webview2_runtime_path) =
&config.tauri.bundle.windows.webview_fixed_runtime_path
{
resources.push(fixed_webview2_runtime_path.display().to_string());
}
}
copy_resources(ResourcePaths::new(resources.as_slice(), true), target_dir)?;
#[cfg(target_os = "macos")]
{
if let Some(version) = config.tauri.bundle.macos.minimum_system_version {
println!("cargo:rustc-env=MACOSX_DEPLOYMENT_TARGET={}", version);
if target_triple.contains("darwin") {
if let Some(version) = &config.tauri.bundle.macos.minimum_system_version {
println!("cargo:rustc-env=MACOSX_DEPLOYMENT_TARGET={version}");
}
}
#[cfg(windows)]
{
if target_triple.contains("windows") {
use anyhow::Context;
use semver::Version;
use winres::{VersionInfo, WindowsResource};
use tauri_winres::{VersionInfo, WindowsResource};
fn find_icon<F: Fn(&&String) -> bool>(config: &Config, predicate: F, default: &str) -> PathBuf {
let icon_path = config
@@ -336,24 +368,11 @@ pub fn try_build(attributes: Attributes) -> Result<()> {
if window_icon_path.exists() {
let mut res = WindowsResource::new();
res.set_manifest(
r#"
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
"#,
);
if let Some(manifest) = attributes.windows_attributes.app_manifest {
res.set_manifest(&manifest);
} else {
res.set_manifest(include_str!("window-app-manifest.xml"));
}
if let Some(sdk_dir) = &attributes.windows_attributes.sdk_dir {
if let Some(sdk_dir_str) = sdk_dir.to_str() {
@@ -451,6 +470,89 @@ fn features_diff(current: &[String], expected: &[String]) -> Diff {
Diff { remove, add }
}
fn check_features(config: &Config, dependency: Dependency, is_tauri_build: bool) -> String {
use tauri_utils::config::{PatternKind, TauriConfig};
let features = match dependency {
Dependency::Simple(_) => Vec::new(),
Dependency::Detailed(dep) => dep.features,
Dependency::Inherited(dep) => dep.features,
};
let all_cli_managed_features = if is_tauri_build {
vec!["isolation"]
} else {
TauriConfig::all_features()
};
let expected = if is_tauri_build {
match config.tauri.pattern {
PatternKind::Isolation { .. } => vec!["isolation".to_string()],
_ => vec![],
}
} else {
config
.tauri
.features()
.into_iter()
.map(|f| f.to_string())
.collect::<Vec<String>>()
};
let diff = features_diff(
&features
.into_iter()
.filter(|f| all_cli_managed_features.contains(&f.as_str()))
.collect::<Vec<String>>(),
&expected,
);
let mut error_message = String::new();
if !diff.remove.is_empty() {
error_message.push_str("remove the `");
error_message.push_str(&diff.remove.join(", "));
error_message.push_str(if diff.remove.len() == 1 {
"` feature"
} else {
"` features"
});
if !diff.add.is_empty() {
error_message.push_str(" and ");
}
}
if !diff.add.is_empty() {
error_message.push_str("add the `");
error_message.push_str(&diff.add.join(", "));
error_message.push_str(if diff.add.len() == 1 {
"` feature"
} else {
"` features"
});
}
error_message
}
#[derive(serde::Deserialize)]
struct CargoMetadata {
workspace_root: PathBuf,
}
fn get_workspace_dir() -> Result<PathBuf> {
let output = std::process::Command::new("cargo")
.args(["metadata", "--no-deps", "--format-version", "1"])
.output()?;
if !output.status.success() {
return Err(anyhow::anyhow!(
"cargo metadata command exited with a non zero exit code: {}",
String::from_utf8(output.stderr)?
));
}
Ok(serde_json::from_slice::<CargoMetadata>(&output.stdout)?.workspace_root)
}
#[cfg(test)]
mod tests {
use super::Diff;

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -48,11 +48,11 @@ fn override_msvcrt_lib() {
let f = fs::OpenOptions::new()
.write(true)
.create_new(true)
.open(&path);
.open(path);
if let Ok(mut f) = f {
f.write_all(machine).unwrap();
f.write_all(bytes).unwrap();
}
// Add the output directory to the native library path.
println!("cargo:rustc-link-search=native={}", out_dir);
println!("cargo:rustc-link-search=native={out_dir}");
}

View File

@@ -0,0 +1,14 @@
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>

View File

@@ -1,5 +1,12 @@
# Changelog
## \[1.3.0]
- Bump minimum supported Rust version to 1.60.
- [5fdc616d](https://www.github.com/tauri-apps/tauri/commit/5fdc616df9bea633810dcb814ac615911d77222c) feat: Use the zbus-backed of notify-rust ([#6332](https://www.github.com/tauri-apps/tauri/pull/6332)) on 2023-03-31
- Pin `time` to `0.3.15`.
- [3d16461b](https://www.github.com/tauri-apps/tauri/commit/3d16461b68583ba7db037fbc217786e79b46ddf2) fix(core): pin time to 0.3.15 ([#6312](https://www.github.com/tauri-apps/tauri/pull/6312)) on 2023-02-19
## \[1.2.1]
- Fix `allowlist > app > show/hide` always disabled when `allowlist > app > all: false`.

View File

@@ -1,6 +1,6 @@
[package]
name = "tauri-codegen"
version = "1.2.1"
version = "1.3.0"
authors = [ "Tauri Programme within The Commons Conservancy" ]
categories = [ "gui", "web-programming" ]
license = "Apache-2.0 OR MIT"
@@ -8,31 +8,31 @@ homepage = "https://tauri.app"
repository = "https://github.com/tauri-apps/tauri/tree/dev/core/tauri-codegen"
description = "code generation meant to be consumed inside of `tauri` through `tauri-build` or `tauri-macros`"
edition = "2021"
rust-version = "1.59"
rust-version = "1.60"
exclude = [ "CHANGELOG.md", "/target" ]
readme = "README.md"
[dependencies]
sha2 = "0.10"
base64 = "0.13"
base64 = "0.21"
proc-macro2 = "1"
quote = "1"
serde = { version = "1", features = [ "derive" ] }
serde_json = "1"
tauri-utils = { version = "1.2.1", path = "../tauri-utils", features = [ "build" ] }
tauri-utils = { version = "1.3.0", path = "../tauri-utils", features = [ "build" ] }
thiserror = "1"
walkdir = "2"
brotli = { version = "3", optional = true, default-features = false, features = [ "std" ] }
regex = { version = "1.7.0", optional = true }
regex = { version = "1.7.1", optional = true }
uuid = { version = "1", features = [ "v4" ] }
semver = "1"
ico = "0.2"
ico = "0.3"
png = "0.17"
json-patch = "0.2"
json-patch = "1.0"
[target."cfg(target_os = \"macos\")".dependencies]
plist = "1"
time = { version = "0.3", features = [ "parsing", "formatting" ] }
time = { version = "=0.3.15", features = [ "parsing", "formatting" ] }
[features]
default = [ "compression" ]

View File

@@ -1,10 +1,11 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
use std::path::{Path, PathBuf};
use std::{ffi::OsStr, str::FromStr};
use base64::Engine;
use proc_macro2::TokenStream;
use quote::quote;
use sha2::{Digest, Sha256};
@@ -57,7 +58,10 @@ fn map_core_assets(
let mut hasher = Sha256::new();
hasher.update(&script);
let hash = hasher.finalize();
scripts.push(format!("'sha256-{}'", base64::encode(hash)));
scripts.push(format!(
"'sha256-{}'",
base64::engine::general_purpose::STANDARD.encode(hash)
));
}
csp_hashes
.inline_scripts
@@ -74,9 +78,10 @@ fn map_core_assets(
let mut hasher = Sha256::new();
hasher.update(tauri_utils::pattern::isolation::IFRAME_STYLE);
let hash = hasher.finalize();
csp_hashes
.styles
.push(format!("'sha256-{}'", base64::encode(hash)));
csp_hashes.styles.push(format!(
"'sha256-{}'",
base64::engine::general_purpose::STANDARD.encode(hash)
));
}
}
@@ -141,7 +146,7 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
} else if target.contains("apple-ios") {
Target::Ios
} else {
panic!("unknown codegen target {}", target);
panic!("unknown codegen target {target}");
}
} else if cfg!(target_os = "linux") {
Target::Linux
@@ -370,10 +375,7 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
PatternKind::Isolation { dir } => {
let dir = config_parent.join(dir);
if !dir.exists() {
panic!(
"The isolation application path is set to `{:?}` but it does not exist",
dir
)
panic!("The isolation application path is set to `{dir:?}` but it does not exist")
}
let mut sets_isolation_hook = false;
@@ -414,7 +416,7 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
let shell_scope_open = match &config.tauri.allowlist.shell.open {
ShellAllowlistOpen::Flag(false) => quote!(::std::option::Option::None),
ShellAllowlistOpen::Flag(true) => {
quote!(::std::option::Option::Some(#root::regex::Regex::new("^https?://").unwrap()))
quote!(::std::option::Option::Some(#root::regex::Regex::new(r#"^((mailto:\w+)|(tel:\w+)|(https?://\w+)).+"#).unwrap()))
}
ShellAllowlistOpen::Validate(regex) => match Regex::new(regex) {
Ok(_) => quote!(::std::option::Option::Some(#root::regex::Regex::new(#regex).unwrap())),

View File

@@ -1,7 +1,8 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
use base64::Engine;
use proc_macro2::TokenStream;
use quote::{quote, ToTokens, TokenStreamExt};
use sha2::{Digest, Sha256};
@@ -181,9 +182,10 @@ impl CspHashes {
})?,
);
let hash = hasher.finalize();
self
.scripts
.push(format!("'sha256-{}'", base64::encode(hash)));
self.scripts.push(format!(
"'sha256-{}'",
base64::engine::general_purpose::STANDARD.encode(hash)
));
}
}
@@ -343,14 +345,14 @@ impl EmbeddedAssets {
let mut hex = String::with_capacity(2 * bytes.len());
for b in bytes {
write!(hex, "{:02x}", b).map_err(EmbeddedAssetsError::Hex)?;
write!(hex, "{b:02x}").map_err(EmbeddedAssetsError::Hex)?;
}
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()) {
out_dir.join(format!("{}.{}", hash, ext))
out_dir.join(format!("{hash}.{ext}"))
} else {
out_dir.join(hash)
};
@@ -431,6 +433,7 @@ impl ToTokens for EmbeddedAssets {
// we expect phf related items to be in path when generating the path code
tokens.append_all(quote! {{
#[allow(unused)]
use ::tauri::utils::assets::{CspHash, EmbeddedAssets, phf, phf::phf_map};
EmbeddedAssets::new(phf_map! { #assets }, &[#global_hashes], phf_map! { #html_hashes })
}});

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -17,8 +17,8 @@ pub fn main() -> Result<(), Box<dyn Error>> {
crate_dir.join("schema.json"),
crate_dir.join("../../tooling/cli/schema.json"),
] {
let mut schema_file = BufWriter::new(File::create(&file)?);
write!(schema_file, "{}", schema_str)?;
let mut schema_file = BufWriter::new(File::create(file)?);
write!(schema_file, "{schema_str}")?;
}
Ok(())

View File

@@ -105,6 +105,7 @@
"print": false,
"requestUserAttention": false,
"setAlwaysOnTop": false,
"setContentProtected": false,
"setCursorGrab": false,
"setCursorIcon": false,
"setCursorPosition": false,
@@ -145,6 +146,7 @@
"allowDowngrades": true,
"certificateThumbprint": null,
"digestAlgorithm": null,
"nsis": null,
"timestampUrl": null,
"tsp": false,
"webviewFixedRuntimePath": null,
@@ -161,6 +163,7 @@
},
"security": {
"dangerousDisableAssetCspModification": false,
"dangerousRemoteDomainIpcAccess": [],
"freezePrototype": false
},
"updater": {
@@ -168,7 +171,8 @@
"dialog": true,
"pubkey": "",
"windows": {
"installMode": "passive"
"installMode": "passive",
"installerArgs": []
}
},
"windows": []
@@ -205,7 +209,7 @@
"additionalProperties": false,
"definitions": {
"PackageConfig": {
"description": "The package configuration.",
"description": "The package configuration.\n\nSee more: https://tauri.app/v1/api/config#packageconfig",
"type": "object",
"properties": {
"productName": {
@@ -228,7 +232,7 @@
"additionalProperties": false
},
"TauriConfig": {
"description": "The Tauri configuration object.",
"description": "The Tauri configuration object.\n\nSee more: https://tauri.app/v1/api/config#tauriconfig",
"type": "object",
"properties": {
"pattern": {
@@ -281,6 +285,7 @@
"allowDowngrades": true,
"certificateThumbprint": null,
"digestAlgorithm": null,
"nsis": null,
"timestampUrl": null,
"tsp": false,
"webviewFixedRuntimePath": null,
@@ -378,6 +383,7 @@
"print": false,
"requestUserAttention": false,
"setAlwaysOnTop": false,
"setContentProtected": false,
"setCursorGrab": false,
"setCursorIcon": false,
"setCursorPosition": false,
@@ -410,6 +416,7 @@
"description": "Security configuration.",
"default": {
"dangerousDisableAssetCspModification": false,
"dangerousRemoteDomainIpcAccess": [],
"freezePrototype": false
},
"allOf": [
@@ -425,7 +432,8 @@
"dialog": true,
"pubkey": "",
"windows": {
"installMode": "passive"
"installMode": "passive",
"installerArgs": []
}
},
"allOf": [
@@ -502,7 +510,7 @@
]
},
"WindowConfig": {
"description": "The window configuration object.",
"description": "The window configuration object.\n\nSee more: https://tauri.app/v1/api/config#windowconfig",
"type": "object",
"properties": {
"label": {
@@ -641,6 +649,11 @@
"default": false,
"type": "boolean"
},
"contentProtected": {
"description": "Prevents the window contents from being captured by other apps.",
"default": false,
"type": "boolean"
},
"skipTaskbar": {
"description": "If `true`, hides the window icon from the taskbar on Windows and Linux.",
"default": false,
@@ -682,6 +695,13 @@
"string",
"null"
]
},
"additionalBrowserArgs": {
"description": "Defines additional browser arguments on Windows. By default wry passes `--disable-features=msWebOOUI,msPdfOOUI,msSmartScreenProtection` so if you use this method, you also need to disable these components by yourself if you want.",
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
@@ -746,7 +766,7 @@
]
},
"CliConfig": {
"description": "describes a CLI configuration",
"description": "describes a CLI configuration\n\nSee more: https://tauri.app/v1/api/config#cliconfig",
"type": "object",
"properties": {
"description": {
@@ -992,7 +1012,7 @@
"additionalProperties": false
},
"BundleConfig": {
"description": "Configuration for tauri-bundler.",
"description": "Configuration for tauri-bundler.\n\nSee more: https://tauri.app/v1/api/config#bundleconfig",
"type": "object",
"required": [
"identifier"
@@ -1004,7 +1024,7 @@
"type": "boolean"
},
"targets": {
"description": "The bundle targets, currently supports [\"deb\", \"appimage\", \"msi\", \"app\", \"dmg\", \"updater\"] or \"all\".",
"description": "The bundle targets, currently supports [\"deb\", \"appimage\", \"nsis\", \"msi\", \"app\", \"dmg\", \"updater\"] or \"all\".",
"default": "all",
"allOf": [
{
@@ -1118,6 +1138,7 @@
"allowDowngrades": true,
"certificateThumbprint": null,
"digestAlgorithm": null,
"nsis": null,
"timestampUrl": null,
"tsp": false,
"webviewFixedRuntimePath": null,
@@ -1186,6 +1207,13 @@
"msi"
]
},
{
"description": "The NSIS bundle (.exe).",
"type": "string",
"enum": [
"nsis"
]
},
{
"description": "The macOS application bundle (.app).",
"type": "string",
@@ -1210,7 +1238,7 @@
]
},
"AppImageConfig": {
"description": "Configuration for AppImage bundles.",
"description": "Configuration for AppImage bundles.\n\nSee more: https://tauri.app/v1/api/config#appimageconfig",
"type": "object",
"properties": {
"bundleMediaFramework": {
@@ -1222,7 +1250,7 @@
"additionalProperties": false
},
"DebConfig": {
"description": "Configuration for Debian (.deb) bundles.",
"description": "Configuration for Debian (.deb) bundles.\n\nSee more: https://tauri.app/v1/api/config#debconfig",
"type": "object",
"properties": {
"depends": {
@@ -1247,7 +1275,7 @@
"additionalProperties": false
},
"MacConfig": {
"description": "Configuration for the macOS bundles.",
"description": "Configuration for the macOS bundles.\n\nSee more: https://tauri.app/v1/api/config#macconfig",
"type": "object",
"properties": {
"frameworks": {
@@ -1307,7 +1335,7 @@
"additionalProperties": false
},
"WindowsConfig": {
"description": "Windows bundler configuration.",
"description": "Windows bundler configuration.\n\nSee more: https://tauri.app/v1/api/config#windowsconfig",
"type": "object",
"properties": {
"digestAlgorithm": {
@@ -1370,6 +1398,17 @@
"type": "null"
}
]
},
"nsis": {
"description": "Configuration for the installer generated with NSIS.",
"anyOf": [
{
"$ref": "#/definitions/NsisConfig"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
@@ -1394,7 +1433,7 @@
"additionalProperties": false
},
{
"description": "Download the bootstrapper and run it. Requires internet connection. Results in a smaller installer size, but is not recommended on Windows 7.",
"description": "Download the bootstrapper and run it. Requires an internet connection. Results in a smaller installer size, but is not recommended on Windows 7.",
"type": "object",
"required": [
"type"
@@ -1415,7 +1454,7 @@
"additionalProperties": false
},
{
"description": "Embed the bootstrapper and run it. Requires internet connection. Increases the installer size by around 1.8MB, but offers better support on Windows 7.",
"description": "Embed the bootstrapper and run it. Requires an internet connection. Increases the installer size by around 1.8MB, but offers better support on Windows 7.",
"type": "object",
"required": [
"type"
@@ -1436,7 +1475,7 @@
"additionalProperties": false
},
{
"description": "Embed the offline installer and run it. Does not require internet connection. Increases the installer size by around 127MB.",
"description": "Embed the offline installer and run it. Does not require an internet connection. Increases the installer size by around 127MB.",
"type": "object",
"required": [
"type"
@@ -1480,7 +1519,7 @@
]
},
"WixConfig": {
"description": "Configuration for the MSI bundle using WiX.",
"description": "Configuration for the MSI bundle using WiX.\n\nSee more: https://tauri.app/v1/api/config#wixconfig",
"type": "object",
"properties": {
"language": {
@@ -1605,7 +1644,7 @@
]
},
"WixLanguageConfig": {
"description": "Configuration for a target language for the WiX build.",
"description": "Configuration for a target language for the WiX build.\n\nSee more: https://tauri.app/v1/api/config#wixlanguageconfig",
"type": "object",
"properties": {
"localePath": {
@@ -1618,8 +1657,93 @@
},
"additionalProperties": false
},
"NsisConfig": {
"description": "Configuration for the Installer bundle using NSIS.",
"type": "object",
"properties": {
"license": {
"description": "The path to the license file to render on the installer.",
"type": [
"string",
"null"
]
},
"headerImage": {
"description": "The path to a bitmap file to display on the header of installers pages.\n\nThe recommended dimensions are 150px x 57px.",
"type": [
"string",
"null"
]
},
"sidebarImage": {
"description": "The path to a bitmap file for the Welcome page and the Finish page.\n\nThe recommended dimensions are 164px x 314px.",
"type": [
"string",
"null"
]
},
"installerIcon": {
"description": "The path to an icon file used as the installer icon.",
"type": [
"string",
"null"
]
},
"installMode": {
"description": "Whether the installation will be for all users or just the current user.",
"default": "currentUser",
"allOf": [
{
"$ref": "#/definitions/NSISInstallerMode"
}
]
},
"languages": {
"description": "A list of installer languages. By default the OS language is used. If the OS language is not in the list of languages, the first language will be used. To allow the user to select the language, set `display_language_selector` to `true`.\n\nSee <https://github.com/kichik/nsis/tree/9465c08046f00ccb6eda985abbdbf52c275c6c4d/Contrib/Language%20files> for the complete list of languages.",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"displayLanguageSelector": {
"description": "Whether to display a language selector dialog before the installer and uninstaller windows are rendered or not. By default the OS language is selected, with a fallback to the first language in the `languages` array.",
"default": false,
"type": "boolean"
}
},
"additionalProperties": false
},
"NSISInstallerMode": {
"description": "Install Modes for the NSIS installer.",
"oneOf": [
{
"description": "Default mode for the installer.\n\nInstall the app by default in a directory that doesn't require Administrator access.\n\nInstaller metadata will be saved under the `HKCU` registry path.",
"type": "string",
"enum": [
"currentUser"
]
},
{
"description": "Install the app by default in the `Program Files` folder directory requires Administrator access for the installation.\n\nInstaller metadata will be saved under the `HKLM` registry path.",
"type": "string",
"enum": [
"perMachine"
]
},
{
"description": "Combines both modes and allows the user to choose at install time whether to install for the current user or per machine. Note that this mode will require Administrator access even if the user wants to install it for the current user only.\n\nInstaller metadata will be saved under the `HKLM` or `HKCU` registry path based on the user's choice.",
"type": "string",
"enum": [
"both"
]
}
]
},
"AllowlistConfig": {
"description": "Allowlist configuration.",
"description": "Allowlist configuration. The allowlist is a translation of the [Cargo allowlist features](https://docs.rs/tauri/latest/tauri/#cargo-allowlist-features).\n\n# Notes\n\n- Endpoints that don't have their own allowlist option are enabled by default. - There is only \"opt-in\", no \"opt-out\". Setting an option to `false` has no effect.\n\n# Examples\n\n- * [`\"app-all\": true`](https://tauri.app/v1/api/config/#appallowlistconfig.all) will make the [hide](https://tauri.app/v1/api/js/app#hide) endpoint be available regardless of whether `hide` is set to `false` or `true` in the allowlist.",
"type": "object",
"properties": {
"all": {
@@ -1661,6 +1785,7 @@
"print": false,
"requestUserAttention": false,
"setAlwaysOnTop": false,
"setContentProtected": false,
"setCursorGrab": false,
"setCursorIcon": false,
"setCursorPosition": false,
@@ -1833,7 +1958,7 @@
"additionalProperties": false
},
"FsAllowlistConfig": {
"description": "Allowlist for the file system APIs.",
"description": "Allowlist for the file system APIs.\n\nSee more: https://tauri.app/v1/api/config#fsallowlistconfig",
"type": "object",
"properties": {
"scope": {
@@ -1933,7 +2058,7 @@
]
},
"WindowAllowlistConfig": {
"description": "Allowlist for the window APIs.",
"description": "Allowlist for the window APIs.\n\nSee more: https://tauri.app/v1/api/config#windowallowlistconfig",
"type": "object",
"properties": {
"all": {
@@ -2011,6 +2136,11 @@
"default": false,
"type": "boolean"
},
"setContentProtected": {
"description": "Allows preventing the window contents from being captured by other apps.",
"default": false,
"type": "boolean"
},
"setSize": {
"description": "Allows setting the window size.",
"default": false,
@@ -2090,7 +2220,7 @@
"additionalProperties": false
},
"ShellAllowlistConfig": {
"description": "Allowlist for the shell APIs.",
"description": "Allowlist for the shell APIs.\n\nSee more: https://tauri.app/v1/api/config#shellallowlistconfig",
"type": "object",
"properties": {
"scope": {
@@ -2211,7 +2341,7 @@
"description": "Defines the `shell > open` api scope.",
"anyOf": [
{
"description": "If the shell open API should be enabled.\n\nIf enabled, the default validation regex (`^https?://`) is used.",
"description": "If the shell open API should be enabled.\n\nIf enabled, the default validation regex (`^((mailto:\\w+)|(tel:\\w+)|(https?://\\w+)).+`) is used.",
"type": "boolean"
},
{
@@ -2221,7 +2351,7 @@
]
},
"DialogAllowlistConfig": {
"description": "Allowlist for the dialog APIs.",
"description": "Allowlist for the dialog APIs.\n\nSee more: https://tauri.app/v1/api/config#dialogallowlistconfig",
"type": "object",
"properties": {
"all": {
@@ -2258,7 +2388,7 @@
"additionalProperties": false
},
"HttpAllowlistConfig": {
"description": "Allowlist for the HTTP APIs.",
"description": "Allowlist for the HTTP APIs.\n\nSee more: https://tauri.app/v1/api/config#httpallowlistconfig",
"type": "object",
"properties": {
"scope": {
@@ -2292,7 +2422,7 @@
}
},
"NotificationAllowlistConfig": {
"description": "Allowlist for the notification APIs.",
"description": "Allowlist for the notification APIs.\n\nSee more: https://tauri.app/v1/api/config#notificationallowlistconfig",
"type": "object",
"properties": {
"all": {
@@ -2304,7 +2434,7 @@
"additionalProperties": false
},
"GlobalShortcutAllowlistConfig": {
"description": "Allowlist for the global shortcut APIs.",
"description": "Allowlist for the global shortcut APIs.\n\nSee more: https://tauri.app/v1/api/config#globalshortcutallowlistconfig",
"type": "object",
"properties": {
"all": {
@@ -2316,7 +2446,7 @@
"additionalProperties": false
},
"OsAllowlistConfig": {
"description": "Allowlist for the OS APIs.",
"description": "Allowlist for the OS APIs.\n\nSee more: https://tauri.app/v1/api/config#osallowlistconfig",
"type": "object",
"properties": {
"all": {
@@ -2328,7 +2458,7 @@
"additionalProperties": false
},
"PathAllowlistConfig": {
"description": "Allowlist for the path APIs.",
"description": "Allowlist for the path APIs.\n\nSee more: https://tauri.app/v1/api/config#pathallowlistconfig",
"type": "object",
"properties": {
"all": {
@@ -2340,7 +2470,7 @@
"additionalProperties": false
},
"ProtocolAllowlistConfig": {
"description": "Allowlist for the custom protocols.",
"description": "Allowlist for the custom protocols.\n\nSee more: https://tauri.app/v1/api/config#protocolallowlistconfig",
"type": "object",
"properties": {
"assetScope": {
@@ -2366,7 +2496,7 @@
"additionalProperties": false
},
"ProcessAllowlistConfig": {
"description": "Allowlist for the process APIs.",
"description": "Allowlist for the process APIs.\n\nSee more: https://tauri.app/v1/api/config#processallowlistconfig",
"type": "object",
"properties": {
"all": {
@@ -2393,7 +2523,7 @@
"additionalProperties": false
},
"ClipboardAllowlistConfig": {
"description": "Allowlist for the clipboard APIs.",
"description": "Allowlist for the clipboard APIs.\n\nSee more: https://tauri.app/v1/api/config#clipboardallowlistconfig",
"type": "object",
"properties": {
"all": {
@@ -2415,7 +2545,7 @@
"additionalProperties": false
},
"AppAllowlistConfig": {
"description": "Allowlist for the app APIs.",
"description": "Allowlist for the app APIs.\n\nSee more: https://tauri.app/v1/api/config#appallowlistconfig",
"type": "object",
"properties": {
"all": {
@@ -2437,7 +2567,7 @@
"additionalProperties": false
},
"SecurityConfig": {
"description": "Security configuration.",
"description": "Security configuration.\n\nSee more: https://tauri.app/v1/api/config#securityconfig",
"type": "object",
"properties": {
"csp": {
@@ -2475,6 +2605,14 @@
"$ref": "#/definitions/DisabledCspModificationKind"
}
]
},
"dangerousRemoteDomainIpcAccess": {
"description": "Allow external domains to send command to Tauri.\n\nBy default, external domains do not have access to `window.__TAURI__`, which means they cannot communicate with the commands defined in Rust. This prevents attacks where an externally loaded malicious or compromised sites could start executing commands on the user's device.\n\nThis configuration allows a set of external domains to have access to the Tauri commands. When you configure a domain to be allowed to access the IPC, all subpaths are allowed. Subdomains are not allowed.\n\n**WARNING:** Only use this option if you either have internal checks against malicious external sites or you can trust the allowed external sites. You application might be vulnerable to dangerous Tauri command related attacks otherwise.",
"default": [],
"type": "array",
"items": {
"$ref": "#/definitions/RemoteDomainAccessScope"
}
}
},
"additionalProperties": false
@@ -2527,8 +2665,50 @@
}
]
},
"RemoteDomainAccessScope": {
"description": "External command access definition.",
"type": "object",
"required": [
"domain",
"windows"
],
"properties": {
"scheme": {
"description": "The URL scheme to allow. By default, all schemas are allowed.",
"type": [
"string",
"null"
]
},
"domain": {
"description": "The domain to allow.",
"type": "string"
},
"windows": {
"description": "The list of window labels this scope applies to.",
"type": "array",
"items": {
"type": "string"
}
},
"plugins": {
"description": "The list of plugins that are allowed in this scope.",
"default": [],
"type": "array",
"items": {
"type": "string"
}
},
"enableTauriAPI": {
"description": "Enables access to the Tauri API.",
"default": false,
"type": "boolean"
}
},
"additionalProperties": false
},
"UpdaterConfig": {
"description": "The Updater configuration object.",
"description": "The Updater configuration object.\n\nSee more: https://tauri.app/v1/api/config#updaterconfig",
"type": "object",
"properties": {
"active": {
@@ -2559,7 +2739,8 @@
"windows": {
"description": "The Windows configuration for the updater.",
"default": {
"installMode": "passive"
"installMode": "passive",
"installerArgs": []
},
"allOf": [
{
@@ -2576,9 +2757,17 @@
"format": "uri"
},
"UpdaterWindowsConfig": {
"description": "The updater configuration for Windows.",
"description": "The updater configuration for Windows.\n\nSee more: https://tauri.app/v1/api/config#updaterwindowsconfig",
"type": "object",
"properties": {
"installerArgs": {
"description": "Additional arguments given to the NSIS or WiX installer.",
"default": [],
"type": "array",
"items": {
"type": "string"
}
},
"installMode": {
"description": "The installation mode for the update on Windows. Defaults to `passive`.",
"default": "passive",
@@ -2602,7 +2791,7 @@
]
},
{
"description": "The quiet mode means there's no user interaction required. Requires admin privileges if the installer does.",
"description": "The quiet mode means there's no user interaction required. Requires admin privileges if the installer does (WiX).",
"type": "string",
"enum": [
"quiet"
@@ -2618,7 +2807,7 @@
]
},
"SystemTrayConfig": {
"description": "Configuration for application system tray icon.",
"description": "Configuration for application system tray icon.\n\nSee more: https://tauri.app/v1/api/config#systemtrayconfig",
"type": "object",
"required": [
"iconPath"
@@ -2649,7 +2838,7 @@
"additionalProperties": false
},
"BuildConfig": {
"description": "The Build configuration object.",
"description": "The Build configuration object.\n\nSee more: https://tauri.app/v1/api/config#buildconfig",
"type": "object",
"properties": {
"runner": {
@@ -2812,7 +3001,7 @@
]
},
"PluginConfig": {
"description": "The plugin configs holds a HashMap mapping a plugin name to its configuration object.",
"description": "The plugin configs holds a HashMap mapping a plugin name to its configuration object.\n\nSee more: https://tauri.app/v1/api/config#pluginconfig",
"type": "object",
"additionalProperties": true
}

View File

@@ -0,0 +1,5 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
fn main() {}

View File

@@ -1,5 +1,10 @@
# Changelog
## \[1.3.0]
- Bump minimum supported Rust version to 1.60.
- [5fdc616d](https://www.github.com/tauri-apps/tauri/commit/5fdc616df9bea633810dcb814ac615911d77222c) feat: Use the zbus-backed of notify-rust ([#6332](https://www.github.com/tauri-apps/tauri/pull/6332)) on 2023-03-31
## \[1.2.1]
- Fix `allowlist > app > show/hide` always disabled when `allowlist > app > all: false`.

View File

@@ -1,6 +1,6 @@
[package]
name = "tauri-macros"
version = "1.2.1"
version = "1.3.0"
authors = [ "Tauri Programme within The Commons Conservancy" ]
categories = [ "gui", "os", "filesystem", "web-programming" ]
license = "Apache-2.0 OR MIT"
@@ -8,7 +8,7 @@ homepage = "https://tauri.app"
repository = "https://github.com/tauri-apps/tauri"
description = "Macros for the tauri crate."
edition = "2021"
rust-version = "1.59"
rust-version = "1.60"
exclude = [ "CHANGELOG.md", "/target" ]
readme = "README.md"
@@ -20,8 +20,8 @@ proc-macro2 = "1"
quote = "1"
syn = { version = "1", features = [ "full" ] }
heck = "0.4"
tauri-codegen = { version = "1.2.1", default-features = false, path = "../tauri-codegen" }
tauri-utils = { version = "1.2.1", path = "../tauri-utils" }
tauri-codegen = { version = "1.3.0", default-features = false, path = "../tauri-codegen" }
tauri-utils = { version = "1.3.0", path = "../tauri-utils" }
[features]
custom-protocol = [ ]

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,5 +1,43 @@
# Changelog
## \[0.13.0]
- Added the `additional_browser_args` option when creating a window.
- [3dc38b15](https://www.github.com/tauri-apps/tauri/commit/3dc38b150ea8c59c8ba67fd586f921016928f47c) feat(core): expose additional_browser_args to window config (fix: [#5757](https://www.github.com/tauri-apps/tauri/pull/5757)) ([#5799](https://www.github.com/tauri-apps/tauri/pull/5799)) on 2022-12-14
- Added the `content_protected` option when creating a window and `Window::set_content_protected` to change it at runtime.
- [4ab5545b](https://www.github.com/tauri-apps/tauri/commit/4ab5545b7a831c549f3c65e74de487ede3ab7ce5) feat: add content protection api, closes [#5132](https://www.github.com/tauri-apps/tauri/pull/5132) ([#5513](https://www.github.com/tauri-apps/tauri/pull/5513)) on 2022-12-13
- Added `Builder::device_event_filter` and `App::set_device_event_filter` methods.
- [73fd60ee](https://www.github.com/tauri-apps/tauri/commit/73fd60eef2b60f5dc84525ef9c315f4d80c4414f) expose set_device_event_filter in tauri ([#5562](https://www.github.com/tauri-apps/tauri/pull/5562)) on 2022-12-13
- Fixes tray events not being delivered.
- [138cb8d7](https://www.github.com/tauri-apps/tauri/commit/138cb8d739b15bccdb388e555c20f17ffe16318c) fix(tauri-runtime-wry): tray event listener not registered ([#6270](https://www.github.com/tauri-apps/tauri/pull/6270)) on 2023-02-14
- Add `is_minimized()` window method.
- [62144ef3](https://www.github.com/tauri-apps/tauri/commit/62144ef3be63b237869e511826edfb938e2c7174) feat: add is_minimized (fix [#3878](https://www.github.com/tauri-apps/tauri/pull/3878)) ([#5618](https://www.github.com/tauri-apps/tauri/pull/5618)) on 2022-12-13
- Disable cursor mouse events on Linux.
- [8c842a54](https://www.github.com/tauri-apps/tauri/commit/8c842a54a6f3dc5327b4d737df7123dcddaa5769) feature: disable mouse event when building windows on Linux, closes [#5913](https://www.github.com/tauri-apps/tauri/pull/5913) ([#6025](https://www.github.com/tauri-apps/tauri/pull/6025)) on 2023-01-16
- Bump minimum supported Rust version to 1.60.
- [5fdc616d](https://www.github.com/tauri-apps/tauri/commit/5fdc616df9bea633810dcb814ac615911d77222c) feat: Use the zbus-backed of notify-rust ([#6332](https://www.github.com/tauri-apps/tauri/pull/6332)) on 2023-03-31
- Pin raw-window-handle to 0.5.0 to keep MSRV.
- [c46c09f3](https://www.github.com/tauri-apps/tauri/commit/c46c09f31d9f5169ca8a7e62406a9ea170e3a5c5) fix(deps): pin raw-window-handle to 0.5.0 ([#6480](https://www.github.com/tauri-apps/tauri/pull/6480)) on 2023-03-17
- Add `title` getter on window.
- [233e43b0](https://www.github.com/tauri-apps/tauri/commit/233e43b0c34fada1ca025378533a0b76931a6540) feat: add `title` getter on window, closes [#5023](https://www.github.com/tauri-apps/tauri/pull/5023) ([#5515](https://www.github.com/tauri-apps/tauri/pull/5515)) on 2022-12-13
- Added `TrayHandle::set_tooltip` and `SystemTray::with_tooltip`.
- [2265e097](https://www.github.com/tauri-apps/tauri/commit/2265e09718f6ebfeb1d200f11e1e1e069075af6e) feat(windows): implement `with_tooltip` ([#5938](https://www.github.com/tauri-apps/tauri/pull/5938)) on 2023-01-01
- Added window's `url()` getter.
- [d17027e1](https://www.github.com/tauri-apps/tauri/commit/d17027e1a0db3e8c5ae81fc4f472c5918fbce611) feat: expose url method ([#5914](https://www.github.com/tauri-apps/tauri/pull/5914)) on 2022-12-26
- On Windows, change webview theme based on Window theme for more accurate `prefers-color-scheme` support.
- [7a8d570d](https://www.github.com/tauri-apps/tauri/commit/7a8d570db72667367eb24b75ddc5dd07a968f7c0) fix: sync webview theme with window theme on Windows, closes [#5802](https://www.github.com/tauri-apps/tauri/pull/5802) ([#5874](https://www.github.com/tauri-apps/tauri/pull/5874)) on 2022-12-27
- On Windows, Fix missing `WindowEvent::Focused` in `App::run` callback.
- [ff4ea1ea](https://www.github.com/tauri-apps/tauri/commit/ff4ea1eabbf2874b113c6b4698002929bbac737a) fix: dispatch focus event to app.run on Windows, closes [#6460](https://www.github.com/tauri-apps/tauri/pull/6460) ([#6504](https://www.github.com/tauri-apps/tauri/pull/6504)) on 2023-03-31
- Implement the webview navigation handler.
- [3f35b452](https://www.github.com/tauri-apps/tauri/commit/3f35b452637ef1c794a423f1eda62a15d2ddaf42) Expose wry navigation_handler via WindowBuilder closes [#4080](https://www.github.com/tauri-apps/tauri/pull/4080) ([#5686](https://www.github.com/tauri-apps/tauri/pull/5686)) on 2022-12-27
## \[0.12.2]
- Fix compatibility with older Linux distributions.
- [b490308c](https://www.github.com/tauri-apps/tauri/commit/b490308c8897b893292951754607c2253abbc6e1) fix(core): compilation error on older Linux versions, fixes [#5684](https://www.github.com/tauri-apps/tauri/pull/5684) ([#5697](https://www.github.com/tauri-apps/tauri/pull/5697)) on 2022-11-28
- Update wry to 0.23.
- [fdcd7733](https://www.github.com/tauri-apps/tauri/commit/fdcd77338c1a3a7ef8a8ea1907351c5c350ea7ba) chore(deps): update wry to 0.23 on 2022-12-08
## \[0.12.1]
- Fix `allowlist > app > show/hide` always disabled when `allowlist > app > all: false`.

View File

@@ -1,6 +1,6 @@
[package]
name = "tauri-runtime-wry"
version = "0.12.1"
version = "0.13.0"
authors = [ "Tauri Programme within The Commons Conservancy" ]
categories = [ "gui", "web-programming" ]
license = "Apache-2.0 OR MIT"
@@ -8,17 +8,17 @@ homepage = "https://tauri.app"
repository = "https://github.com/tauri-apps/tauri"
description = "Wry bindings to the Tauri runtime"
edition = "2021"
rust-version = "1.59"
rust-version = "1.60"
exclude = [ "CHANGELOG.md", "/target" ]
readme = "README.md"
[dependencies]
wry = { version = "0.22.4", default-features = false, features = [ "file-drop", "protocol" ] }
tauri-runtime = { version = "0.12.1", path = "../tauri-runtime" }
tauri-utils = { version = "1.2.1", path = "../tauri-utils" }
wry = { version = "0.24.1", default-features = false, features = [ "file-drop", "protocol" ] }
tauri-runtime = { version = "0.13.0", path = "../tauri-runtime" }
tauri-utils = { version = "1.3.0", path = "../tauri-utils" }
uuid = { version = "1", features = [ "v4" ] }
rand = "0.8"
raw-window-handle = "0.5"
raw-window-handle = "=0.5.0"
[target."cfg(windows)".dependencies]
webview2-com = "0.19.1"
@@ -29,7 +29,7 @@ webview2-com = "0.19.1"
[target."cfg(any(target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies]
gtk = { version = "0.15", features = [ "v3_20" ] }
webkit2gtk = { version = "0.18.2", features = [ "v2_36" ] }
webkit2gtk = { version = "0.18.2", features = [ "v2_22" ] }
percent-encoding = "2.1"
[target."cfg(any(target_os = \"ios\", target_os = \"macos\"))".dependencies]
@@ -47,4 +47,4 @@ macos-private-api = [
objc-exception = [ "wry/objc-exception" ]
global-shortcut = [ "tauri-runtime/global-shortcut" ]
clipboard = [ "tauri-runtime/clipboard" ]
linux-headers = [ "wry/linux-headers" ]
linux-headers = [ "wry/linux-headers", "webkit2gtk/v2_36" ]

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -6,7 +6,7 @@
// `alias` must be a snake case string.
fn alias(alias: &str, has_feature: bool) {
if has_feature {
println!("cargo:rustc-cfg={}", alias);
println!("cargo:rustc-cfg={alias}");
}
}

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -14,8 +14,8 @@ use tauri_runtime::{
dpi::{LogicalPosition, LogicalSize, PhysicalPosition, PhysicalSize, Position, Size},
CursorIcon, DetachedWindow, FileDropEvent, JsEventListenerKey, PendingWindow, WindowEvent,
},
Dispatch, Error, EventLoopProxy, ExitRequestedEventAction, Icon, Result, RunEvent, RunIteration,
Runtime, RuntimeHandle, UserAttentionType, UserEvent,
DeviceEventFilter, Dispatch, Error, EventLoopProxy, ExitRequestedEventAction, Icon, Result,
RunEvent, RunIteration, Runtime, RuntimeHandle, UserAttentionType, UserEvent,
};
use tauri_runtime::window::MenuEvent;
@@ -33,6 +33,8 @@ use wry::application::platform::macos::WindowBuilderExtMacOS;
use wry::application::platform::unix::{WindowBuilderExtUnix, WindowExtUnix};
#[cfg(windows)]
use wry::application::platform::windows::{WindowBuilderExtWindows, WindowExtWindows};
#[cfg(windows)]
use wry::webview::WebViewBuilderExtWindows;
#[cfg(target_os = "macos")]
use tauri_utils::TitleBarStyle;
@@ -47,7 +49,8 @@ use wry::{
},
event::{Event, StartCause, WindowEvent as WryWindowEvent},
event_loop::{
ControlFlow, EventLoop, EventLoopProxy as WryEventLoopProxy, EventLoopWindowTarget,
ControlFlow, DeviceEventFilter as WryDeviceEventFilter, EventLoop,
EventLoopProxy as WryEventLoopProxy, EventLoopWindowTarget,
},
menu::{
AboutMetadata as WryAboutMetadata, CustomMenuItem as WryCustomMenuItem, MenuBar,
@@ -61,10 +64,9 @@ use wry::{
},
},
http::{Request as WryRequest, Response as WryResponse},
webview::{FileDropEvent as WryFileDropEvent, WebContext, WebView, WebViewBuilder},
webview::{FileDropEvent as WryFileDropEvent, Url, WebContext, WebView, WebViewBuilder},
};
pub use wry;
pub use wry::application::window::{Window, WindowBuilder as WryWindowBuilder, WindowId};
#[cfg(windows)]
@@ -79,6 +81,7 @@ pub use wry::application::platform::macos::{
};
use std::{
borrow::Cow,
cell::RefCell,
collections::{
hash_map::Entry::{Occupied, Vacant},
@@ -211,6 +214,7 @@ impl<T: UserEvent> Context<T> {
impl<T: UserEvent> Context<T> {
fn create_webview(&self, pending: PendingWindow<T, Wry<T>>) -> Result<DetachedWindow<T, Wry<T>>> {
let label = pending.label.clone();
let current_url = pending.current_url.clone();
let menu_ids = pending.menu_ids.clone();
let js_event_listeners = pending.js_event_listeners.clone();
let context = self.clone();
@@ -232,6 +236,7 @@ impl<T: UserEvent> Context<T> {
};
Ok(DetachedWindow {
label,
current_url,
dispatcher,
menu_ids,
js_event_listeners,
@@ -284,7 +289,7 @@ impl From<&WryRequest<Vec<u8>>> for HttpRequestWrapper {
}
// response
struct HttpResponseWrapper(WryResponse<Vec<u8>>);
struct HttpResponseWrapper(WryResponse<Cow<'static, [u8]>>);
impl From<HttpResponse> for HttpResponseWrapper {
fn from(response: HttpResponse) -> Self {
let (parts, body) = response.into_parts();
@@ -298,7 +303,7 @@ impl From<HttpResponse> for HttpResponseWrapper {
res_builder = res_builder.header(name, val);
}
let res = res_builder.body(body).unwrap();
let res = res_builder.body(Cow::Owned(body)).unwrap();
Self(res)
}
}
@@ -364,6 +369,18 @@ impl From<MenuItem> for MenuItemWrapper {
}
}
pub struct DeviceEventFilterWrapper(pub WryDeviceEventFilter);
impl From<DeviceEventFilter> for DeviceEventFilterWrapper {
fn from(item: DeviceEventFilter) -> Self {
match item {
DeviceEventFilter::Always => Self(WryDeviceEventFilter::Always),
DeviceEventFilter::Never => Self(WryDeviceEventFilter::Never),
DeviceEventFilter::Unfocused => Self(WryDeviceEventFilter::Unfocused),
}
}
}
#[cfg(target_os = "macos")]
pub struct NativeImageWrapper(pub WryNativeImage);
@@ -705,6 +722,7 @@ impl WindowBuilder for WindowBuilderWrapper {
.decorations(config.decorations)
.maximized(config.maximized)
.always_on_top(config.always_on_top)
.content_protected(config.content_protected)
.skip_taskbar(config.skip_taskbar)
.theme(config.theme);
@@ -734,6 +752,12 @@ impl WindowBuilder for WindowBuilderWrapper {
");
}
#[cfg(target_os = "linux")]
{
// Mouse event is disabled on Linux since sudden event bursts could block event loop.
window.inner = window.inner.with_cursor_moved_event(false);
}
if let (Some(min_width), Some(min_height)) = (config.min_width, config.min_height) {
window = window.min_inner_size(min_width, min_height);
}
@@ -839,6 +863,11 @@ impl WindowBuilder for WindowBuilderWrapper {
self
}
fn content_protected(mut self, protected: bool) -> Self {
self.inner = self.inner.with_content_protection(protected);
self
}
#[cfg(windows)]
fn parent_window(mut self, parent: HWND) -> Self {
self.inner = self.inner.with_parent_window(parent);
@@ -1017,16 +1046,19 @@ pub enum WindowMessage {
#[cfg(any(debug_assertions, feature = "devtools"))]
IsDevToolsOpen(Sender<bool>),
// Getters
Url(Sender<Url>),
ScaleFactor(Sender<f64>),
InnerPosition(Sender<Result<PhysicalPosition<i32>>>),
OuterPosition(Sender<Result<PhysicalPosition<i32>>>),
InnerSize(Sender<PhysicalSize<u32>>),
OuterSize(Sender<PhysicalSize<u32>>),
IsFullscreen(Sender<bool>),
IsMinimized(Sender<bool>),
IsMaximized(Sender<bool>),
IsDecorated(Sender<bool>),
IsResizable(Sender<bool>),
IsVisible(Sender<bool>),
Title(Sender<String>),
IsMenuVisible(Sender<bool>),
CurrentMonitor(Sender<Option<MonitorHandle>>),
PrimaryMonitor(Sender<Option<MonitorHandle>>),
@@ -1057,6 +1089,7 @@ pub enum WindowMessage {
Close,
SetDecorations(bool),
SetAlwaysOnTop(bool),
SetContentProtected(bool),
SetSize(Size),
SetMinSize(Option<Size>),
SetMaxSize(Option<Size>),
@@ -1099,6 +1132,7 @@ pub enum TrayMessage {
UpdateIconAsTemplate(bool),
#[cfg(target_os = "macos")]
UpdateTitle(String),
UpdateTooltip(String),
Create(SystemTray, Sender<Result<()>>),
Destroy(Sender<Result<()>>),
}
@@ -1215,6 +1249,10 @@ impl<T: UserEvent> Dispatch<T> for WryDispatcher<T> {
// Getters
fn url(&self) -> Result<Url> {
window_getter!(self, WindowMessage::Url)
}
fn scale_factor(&self) -> Result<f64> {
window_getter!(self, WindowMessage::ScaleFactor)
}
@@ -1239,6 +1277,10 @@ impl<T: UserEvent> Dispatch<T> for WryDispatcher<T> {
window_getter!(self, WindowMessage::IsFullscreen)
}
fn is_minimized(&self) -> Result<bool> {
window_getter!(self, WindowMessage::IsMinimized)
}
fn is_maximized(&self) -> Result<bool> {
window_getter!(self, WindowMessage::IsMaximized)
}
@@ -1257,6 +1299,10 @@ impl<T: UserEvent> Dispatch<T> for WryDispatcher<T> {
window_getter!(self, WindowMessage::IsVisible)
}
fn title(&self) -> Result<String> {
window_getter!(self, WindowMessage::Title)
}
fn is_menu_visible(&self) -> Result<bool> {
window_getter!(self, WindowMessage::IsMenuVisible)
}
@@ -1426,6 +1472,16 @@ impl<T: UserEvent> Dispatch<T> for WryDispatcher<T> {
)
}
fn set_content_protected(&self, protected: bool) -> Result<()> {
send_user_message(
&self.context,
Message::Window(
self.window_id,
WindowMessage::SetContentProtected(protected),
),
)
}
fn set_size(&self, size: Size) -> Result<()> {
send_user_message(
&self.context,
@@ -1931,6 +1987,7 @@ impl<T: UserEvent> Runtime<T> for Wry<T> {
fn create_window(&self, pending: PendingWindow<T, Self>) -> Result<DetachedWindow<T, Self>> {
let label = pending.label.clone();
let current_url = pending.current_url.clone();
let menu_ids = pending.menu_ids.clone();
let js_event_listeners = pending.js_event_listeners.clone();
let window_id = rand::random();
@@ -1957,6 +2014,7 @@ impl<T: UserEvent> Runtime<T> for Wry<T> {
Ok(DetachedWindow {
label,
current_url,
dispatcher,
menu_ids,
js_event_listeners,
@@ -2028,6 +2086,12 @@ impl<T: UserEvent> Runtime<T> for Wry<T> {
self.event_loop.hide_application();
}
fn set_device_event_filter(&mut self, filter: DeviceEventFilter) {
self
.event_loop
.set_device_event_filter(DeviceEventFilterWrapper::from(filter).0);
}
#[cfg(desktop)]
fn run_iteration<F: FnMut(RunEvent<T>) + 'static>(&mut self, mut callback: F) -> RunIteration {
use wry::application::platform::run_return::EventLoopExtRunReturn;
@@ -2315,6 +2379,11 @@ fn handle_user_message<T: UserEvent>(
}
}
// Getters
WindowMessage::Url(tx) => {
if let WindowHandle::Webview { inner: w, .. } = &window {
tx.send(w.url()).unwrap();
}
}
WindowMessage::ScaleFactor(tx) => tx.send(window.scale_factor()).unwrap(),
WindowMessage::InnerPosition(tx) => tx
.send(
@@ -2339,10 +2408,12 @@ fn handle_user_message<T: UserEvent>(
.send(PhysicalSizeWrapper(window.outer_size()).into())
.unwrap(),
WindowMessage::IsFullscreen(tx) => tx.send(window.fullscreen().is_some()).unwrap(),
WindowMessage::IsMinimized(tx) => tx.send(window.is_minimized()).unwrap(),
WindowMessage::IsMaximized(tx) => tx.send(window.is_maximized()).unwrap(),
WindowMessage::IsDecorated(tx) => tx.send(window.is_decorated()).unwrap(),
WindowMessage::IsResizable(tx) => tx.send(window.is_resizable()).unwrap(),
WindowMessage::IsVisible(tx) => tx.send(window.is_visible()).unwrap(),
WindowMessage::Title(tx) => tx.send(window.title()).unwrap(),
WindowMessage::IsMenuVisible(tx) => tx.send(window.is_menu_visible()).unwrap(),
WindowMessage::CurrentMonitor(tx) => tx.send(window.current_monitor()).unwrap(),
WindowMessage::PrimaryMonitor(tx) => tx.send(window.primary_monitor()).unwrap(),
@@ -2387,6 +2458,9 @@ fn handle_user_message<T: UserEvent>(
}
WindowMessage::SetDecorations(decorations) => window.set_decorations(decorations),
WindowMessage::SetAlwaysOnTop(always_on_top) => window.set_always_on_top(always_on_top),
WindowMessage::SetContentProtected(protected) => {
window.set_content_protection(protected)
}
WindowMessage::SetSize(size) => {
window.set_inner_size(SizeWrapper::from(size).0);
}
@@ -2462,21 +2536,7 @@ fn handle_user_message<T: UserEvent>(
let _ = webview.print();
}
}
WebviewMessage::WebviewEvent(event) => {
let window_event_listeners = windows
.borrow()
.get(&id)
.map(|w| w.window_event_listeners.clone());
if let Some(window_event_listeners) = window_event_listeners {
if let Some(event) = WindowEventWrapper::from(&event).0 {
let listeners = window_event_listeners.lock().unwrap();
let handlers = listeners.values();
for handler in handlers {
handler(&event);
}
}
}
}
WebviewMessage::WebviewEvent(_event) => { /* already handled */ }
},
Message::CreateWebview(window_id, handler) => match handler(event_loop, web_context) {
Ok(webview) => {
@@ -2513,14 +2573,18 @@ fn handle_user_message<T: UserEvent>(
Message::Tray(tray_id, tray_message) => {
let mut trays = system_tray_manager.trays.lock().unwrap();
if let TrayMessage::Create(tray, tx) = tray_message {
if let TrayMessage::Create(mut tray, tx) = tray_message {
let mut listeners = Vec::new();
if let Some(l) = tray.on_event.take() {
listeners.push(Arc::new(l));
}
match create_tray(WryTrayId(tray_id), tray, event_loop) {
Ok((tray, items)) => {
trays.insert(
tray_id,
TrayContext {
tray: Arc::new(Mutex::new(Some(tray))),
listeners: Default::default(),
listeners: Arc::new(Mutex::new(listeners)),
items: Arc::new(Mutex::new(items)),
},
);
@@ -2573,6 +2637,11 @@ fn handle_user_message<T: UserEvent>(
tray.set_title(&title);
}
}
TrayMessage::UpdateTooltip(tooltip) => {
if let Some(tray) = &mut *tray_context.tray.lock().unwrap() {
tray.set_tooltip(&tooltip);
}
}
TrayMessage::Create(_tray, _tx) => {
// already handled
}
@@ -2761,6 +2830,24 @@ fn handle_event_loop<T: UserEvent>(
global_listener(id.0, &event);
}
}
Event::UserEvent(Message::Webview(id, WebviewMessage::WebviewEvent(event))) => {
if let Some(event) = WindowEventWrapper::from(&event).0 {
let windows = windows.borrow();
let window = windows.get(&id);
if let Some(window) = window {
callback(RunEvent::WindowEvent {
label: window.label.clone(),
event: event.clone(),
});
let listeners = window.window_event_listeners.lock().unwrap();
let handlers = listeners.values();
for handler in handlers {
handler(&event);
}
}
}
}
Event::WindowEvent {
event, window_id, ..
} => {
@@ -2788,6 +2875,19 @@ fn handle_event_loop<T: UserEvent>(
}
match event {
#[cfg(windows)]
WryWindowEvent::ThemeChanged(theme) => {
if let Some(window) = windows.borrow().get(&window_id) {
if let Some(WindowHandle::Webview { inner, .. }) = &window.inner {
let theme = match theme {
WryTheme::Dark => wry::webview::Theme::Dark,
WryTheme::Light => wry::webview::Theme::Light,
_ => wry::webview::Theme::Light,
};
inner.set_theme(theme);
}
}
}
WryWindowEvent::CloseRequested => {
on_close_requested(callback, window_id, windows.clone());
}
@@ -2944,7 +3044,7 @@ fn create_webview<T: UserEvent>(
mut window_builder,
ipc_handler,
label,
url,
current_url,
menu_ids,
js_event_listeners,
..
@@ -2962,6 +3062,9 @@ fn create_webview<T: UserEvent>(
.with_drag_and_drop(webview_attributes.file_drop_handler_enabled);
}
#[cfg(windows)]
let window_theme = window_builder.inner.window.preferred_theme;
#[cfg(target_os = "macos")]
{
if window_builder.tabbing_identifier.is_none()
@@ -2990,7 +3093,7 @@ fn create_webview<T: UserEvent>(
}
let mut webview_builder = WebViewBuilder::new(window)
.map_err(|e| Error::CreateWebview(Box::new(e)))?
.with_url(&url)
.with_url(current_url.lock().unwrap().as_str())
.unwrap() // safe to unwrap because we validate the URL beforehand
.with_transparent(is_window_transparent)
.with_accept_first_mouse(webview_attributes.accept_first_mouse);
@@ -2998,13 +3101,34 @@ fn create_webview<T: UserEvent>(
webview_builder = webview_builder
.with_file_drop_handler(create_file_drop_handler(window_event_listeners.clone()));
}
if let Some(navigation_handler) = pending.navigation_handler {
webview_builder = webview_builder.with_navigation_handler(move |url| {
Url::parse(&url).map(&navigation_handler).unwrap_or(true)
});
}
if let Some(user_agent) = webview_attributes.user_agent {
webview_builder = webview_builder.with_user_agent(&user_agent);
}
#[cfg(windows)]
if let Some(additional_browser_args) = webview_attributes.additional_browser_args {
webview_builder = webview_builder.with_additional_browser_args(&additional_browser_args);
}
#[cfg(windows)]
if let Some(theme) = window_theme {
webview_builder = webview_builder.with_theme(match theme {
WryTheme::Dark => wry::webview::Theme::Dark,
WryTheme::Light => wry::webview::Theme::Light,
_ => wry::webview::Theme::Light,
});
}
if let Some(handler) = ipc_handler {
webview_builder = webview_builder.with_ipc_handler(create_ipc_handler(
context,
label.clone(),
current_url,
menu_ids,
js_event_listeners,
handler,
@@ -3115,6 +3239,7 @@ fn create_webview<T: UserEvent>(
fn create_ipc_handler<T: UserEvent>(
context: Context<T>,
label: String,
current_url: Arc<Mutex<Url>>,
menu_ids: Arc<Mutex<HashMap<MenuHash, MenuId>>>,
js_event_listeners: Arc<Mutex<HashMap<JsEventListenerKey, HashSet<u64>>>>,
handler: WebviewIpcHandler<T, Wry<T>>,
@@ -3123,6 +3248,7 @@ fn create_ipc_handler<T: UserEvent>(
let window_id = context.webview_id_map.get(&window.id()).unwrap();
handler(
DetachedWindow {
current_url: current_url.clone(),
dispatcher: WryDispatcher {
window_id,
context: context.clone(),

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -114,6 +114,10 @@ pub fn create_tray<T>(
}
}
if let Some(tooltip) = system_tray.tooltip {
builder = builder.with_tooltip(&tooltip);
}
let tray = builder
.build(event_loop)
.map_err(|e| Error::SystemTray(Box::new(e)))?;
@@ -172,6 +176,16 @@ impl<T: UserEvent> TrayHandle for SystemTrayHandle<T> {
.map_err(|_| Error::FailedToSendMessage)
}
fn set_tooltip(&self, tooltip: &str) -> Result<()> {
self
.proxy
.send_event(Message::Tray(
self.id,
TrayMessage::UpdateTooltip(tooltip.to_owned()),
))
.map_err(|_| Error::FailedToSendMessage)
}
fn destroy(&self) -> Result<()> {
let (tx, rx) = std::sync::mpsc::channel();
send_user_message(

View File

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

View File

@@ -1,5 +1,30 @@
# Changelog
## \[0.13.0]
- Added the `additional_browser_args` option when creating a window.
- [3dc38b15](https://www.github.com/tauri-apps/tauri/commit/3dc38b150ea8c59c8ba67fd586f921016928f47c) feat(core): expose additional_browser_args to window config (fix: [#5757](https://www.github.com/tauri-apps/tauri/pull/5757)) ([#5799](https://www.github.com/tauri-apps/tauri/pull/5799)) on 2022-12-14
- Added the `content_protected` option when creating a window and `Window::set_content_protected` to change it at runtime.
- [4ab5545b](https://www.github.com/tauri-apps/tauri/commit/4ab5545b7a831c549f3c65e74de487ede3ab7ce5) feat: add content protection api, closes [#5132](https://www.github.com/tauri-apps/tauri/pull/5132) ([#5513](https://www.github.com/tauri-apps/tauri/pull/5513)) on 2022-12-13
- Added `Builder::device_event_filter` and `App::set_device_event_filter` methods.
- [73fd60ee](https://www.github.com/tauri-apps/tauri/commit/73fd60eef2b60f5dc84525ef9c315f4d80c4414f) expose set_device_event_filter in tauri ([#5562](https://www.github.com/tauri-apps/tauri/pull/5562)) on 2022-12-13
- Add `is_minimized()` window method.
- [62144ef3](https://www.github.com/tauri-apps/tauri/commit/62144ef3be63b237869e511826edfb938e2c7174) feat: add is_minimized (fix [#3878](https://www.github.com/tauri-apps/tauri/pull/3878)) ([#5618](https://www.github.com/tauri-apps/tauri/pull/5618)) on 2022-12-13
- Bump minimum supported Rust version to 1.60.
- [5fdc616d](https://www.github.com/tauri-apps/tauri/commit/5fdc616df9bea633810dcb814ac615911d77222c) feat: Use the zbus-backed of notify-rust ([#6332](https://www.github.com/tauri-apps/tauri/pull/6332)) on 2023-03-31
- Pin raw-window-handle to 0.5.0 to keep MSRV.
- [c46c09f3](https://www.github.com/tauri-apps/tauri/commit/c46c09f31d9f5169ca8a7e62406a9ea170e3a5c5) fix(deps): pin raw-window-handle to 0.5.0 ([#6480](https://www.github.com/tauri-apps/tauri/pull/6480)) on 2023-03-17
- Added `navigation_handler` field on `PendingWindow`.
- [3f35b452](https://www.github.com/tauri-apps/tauri/commit/3f35b452637ef1c794a423f1eda62a15d2ddaf42) Expose wry navigation_handler via WindowBuilder closes [#4080](https://www.github.com/tauri-apps/tauri/pull/4080) ([#5686](https://www.github.com/tauri-apps/tauri/pull/5686)) on 2022-12-27
- Add `title` getter on window.
- [233e43b0](https://www.github.com/tauri-apps/tauri/commit/233e43b0c34fada1ca025378533a0b76931a6540) feat: add `title` getter on window, closes [#5023](https://www.github.com/tauri-apps/tauri/pull/5023) ([#5515](https://www.github.com/tauri-apps/tauri/pull/5515)) on 2022-12-13
- Added `TrayHandle::set_tooltip` and `SystemTray::with_tooltip`.
- [2265e097](https://www.github.com/tauri-apps/tauri/commit/2265e09718f6ebfeb1d200f11e1e1e069075af6e) feat(windows): implement `with_tooltip` ([#5938](https://www.github.com/tauri-apps/tauri/pull/5938)) on 2023-01-01
- Added window's `url()` getter.
- [d17027e1](https://www.github.com/tauri-apps/tauri/commit/d17027e1a0db3e8c5ae81fc4f472c5918fbce611) feat: expose url method ([#5914](https://www.github.com/tauri-apps/tauri/pull/5914)) on 2022-12-26
- On Windows, change webview theme based on Window theme for more accurate `prefers-color-scheme` support.
- [7a8d570d](https://www.github.com/tauri-apps/tauri/commit/7a8d570db72667367eb24b75ddc5dd07a968f7c0) fix: sync webview theme with window theme on Windows, closes [#5802](https://www.github.com/tauri-apps/tauri/pull/5802) ([#5874](https://www.github.com/tauri-apps/tauri/pull/5874)) on 2022-12-27
## \[0.12.1]
- Fix `allowlist > app > show/hide` always disabled when `allowlist > app > all: false`.

View File

@@ -1,6 +1,6 @@
[package]
name = "tauri-runtime"
version = "0.12.1"
version = "0.13.0"
authors = [ "Tauri Programme within The Commons Conservancy" ]
categories = [ "gui", "web-programming" ]
license = "Apache-2.0 OR MIT"
@@ -8,7 +8,7 @@ homepage = "https://tauri.app"
repository = "https://github.com/tauri-apps/tauri"
description = "Runtime for Tauri applications"
edition = "2021"
rust-version = "1.59"
rust-version = "1.60"
exclude = [ "CHANGELOG.md", "/target" ]
readme = "README.md"
@@ -26,12 +26,13 @@ targets = [
serde = { version = "1.0", features = [ "derive" ] }
serde_json = "1.0"
thiserror = "1.0"
tauri-utils = { version = "1.2.1", path = "../tauri-utils" }
tauri-utils = { version = "1.3.0", path = "../tauri-utils" }
uuid = { version = "1", features = [ "v4" ] }
http = "0.2.4"
http-range = "0.1.4"
raw-window-handle = "0.5"
raw-window-handle = "=0.5.0"
rand = "0.8"
url = { version = "2" }
[target."cfg(windows)".dependencies]
webview2-com = "0.19.1"

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -6,7 +6,7 @@
// `alias` must be a snake case string.
fn alias(alias: &str, has_feature: bool) {
if has_feature {
println!("cargo:rustc-cfg={}", alias);
println!("cargo:rustc-cfg={alias}");
}
}

View File

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

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -10,6 +10,7 @@ use raw_window_handle::RawDisplayHandle;
use serde::Deserialize;
use std::{fmt::Debug, sync::mpsc::Sender};
use tauri_utils::Theme;
use url::Url;
use uuid::Uuid;
pub mod http;
@@ -53,6 +54,7 @@ pub struct SystemTray {
#[cfg(target_os = "macos")]
pub title: Option<String>,
pub on_event: Option<Box<TrayEventHandler>>,
pub tooltip: Option<String>,
}
#[cfg(all(desktop, feature = "system-tray"))]
@@ -86,6 +88,7 @@ impl Clone for SystemTray {
menu_on_left_click: self.menu_on_left_click,
#[cfg(target_os = "macos")]
title: self.title.clone(),
tooltip: self.tooltip.clone(),
}
}
}
@@ -104,6 +107,7 @@ impl Default for SystemTray {
#[cfg(target_os = "macos")]
title: None,
on_event: None,
tooltip: None,
}
}
}
@@ -156,6 +160,17 @@ impl SystemTray {
self
}
/// Sets the tray icon tooltip.
///
/// ## Platform-specific:
///
/// - **Linux:** Unsupported
#[must_use]
pub fn with_tooltip(mut self, tooltip: &str) -> Self {
self.tooltip = Some(tooltip.to_owned());
self
}
/// Sets the menu to show when the system tray is right clicked.
#[must_use]
pub fn with_menu(mut self, menu: menu::SystemTrayMenu) -> Self {
@@ -184,6 +199,23 @@ pub enum UserAttentionType {
Informational,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize)]
#[serde(tag = "type")]
pub enum DeviceEventFilter {
/// Always filter out device events.
Always,
/// Filter out device events while the window is not focused.
Unfocused,
/// Report all device events regardless of window focus.
Never,
}
impl Default for DeviceEventFilter {
fn default() -> Self {
Self::Unfocused
}
}
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum Error {
@@ -461,6 +493,19 @@ pub trait Runtime<T: UserEvent>: Debug + Sized + 'static {
#[cfg_attr(doc_cfg, doc(cfg(target_os = "macos")))]
fn hide(&self);
/// Change the device event filter mode.
///
/// Since the DeviceEvent capture can lead to high CPU usage for unfocused windows, [`tao`]
/// will ignore them by default for unfocused windows on Windows. This method allows changing
/// the filter to explicitly capture them again.
///
/// ## Platform-specific
///
/// - ** Linux / macOS / iOS / Android**: Unsupported.
///
/// [`tao`]: https://crates.io/crates/tao
fn set_device_event_filter(&mut self, filter: DeviceEventFilter);
/// Runs the one step of the webview runtime event loop and returns control flow to the caller.
#[cfg(desktop)]
fn run_iteration<F: Fn(RunEvent<T>) + 'static>(&mut self, callback: F) -> RunIteration;
@@ -500,6 +545,9 @@ pub trait Dispatch<T: UserEvent>: Debug + Clone + Send + Sync + Sized + 'static
// GETTERS
/// Returns the webview's current URL.
fn url(&self) -> Result<Url>;
/// Returns the scale factor that can be used to map logical pixels to physical pixels, and vice versa.
fn scale_factor(&self) -> Result<f64>;
@@ -522,6 +570,9 @@ pub trait Dispatch<T: UserEvent>: Debug + Clone + Send + Sync + Sized + 'static
/// Gets the window's current fullscreen state.
fn is_fullscreen(&self) -> Result<bool>;
/// Gets the window's current minimized state.
fn is_minimized(&self) -> Result<bool>;
/// Gets the window's current maximized state.
fn is_maximized(&self) -> Result<bool>;
@@ -533,6 +584,8 @@ pub trait Dispatch<T: UserEvent>: Debug + Clone + Send + Sync + Sized + 'static
/// Gets the window's current visibility state.
fn is_visible(&self) -> Result<bool>;
/// Gets the window's current title.
fn title(&self) -> Result<String>;
/// Gets the window menu current visibility state.
fn is_menu_visible(&self) -> Result<bool>;
@@ -623,6 +676,9 @@ pub trait Dispatch<T: UserEvent>: Debug + Clone + Send + Sync + Sized + 'static
/// Updates the window alwaysOnTop flag.
fn set_always_on_top(&self, always_on_top: bool) -> Result<()>;
/// Prevents the window contents from being captured by other apps.
fn set_content_protected(&self, protected: bool) -> Result<()>;
/// Resizes the window.
fn set_size(&self, size: Size) -> Result<()>;

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -154,6 +154,7 @@ pub trait TrayHandle: fmt::Debug + Clone + Send + Sync {
fn set_icon_as_template(&self, is_template: bool) -> crate::Result<()>;
#[cfg(target_os = "macos")]
fn set_title(&self, title: &str) -> crate::Result<()>;
fn set_tooltip(&self, tooltip: &str) -> crate::Result<()>;
fn destroy(&self) -> crate::Result<()>;
}
@@ -584,13 +585,13 @@ impl AboutMetadata {
self
}
/// Defines the application version.
/// Defines the application's website link.
pub fn website(mut self, website: impl Into<String>) -> Self {
self.website.replace(website.into());
self
}
/// Defines the application version.
/// Defines the application's website link name.
pub fn website_label(mut self, website_label: impl Into<String>) -> Self {
self.website_label.replace(website_label.into());
self

View File

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

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -28,6 +28,7 @@ pub struct WebviewAttributes {
pub file_drop_handler_enabled: bool,
pub clipboard: bool,
pub accept_first_mouse: bool,
pub additional_browser_args: Option<String>,
}
impl WebviewAttributes {
@@ -41,6 +42,7 @@ impl WebviewAttributes {
file_drop_handler_enabled: true,
clipboard: false,
accept_first_mouse: false,
additional_browser_args: None,
}
}
@@ -88,6 +90,13 @@ impl WebviewAttributes {
self.accept_first_mouse = accept;
self
}
/// Sets additional browser arguments. **Windows Only**
#[must_use]
pub fn additional_browser_args(mut self, additional_args: &str) -> Self {
self.additional_browser_args = Some(additional_args.to_string());
self
}
}
/// Do **NOT** implement this trait except for use in a custom [`Runtime`](crate::Runtime).
@@ -172,6 +181,10 @@ pub trait WindowBuilder: WindowBuilderBase {
#[must_use]
fn always_on_top(self, always_on_top: bool) -> Self;
/// Prevents the window contents from being captured by other apps.
#[must_use]
fn content_protected(self, protected: bool) -> Self;
/// Sets the window icon.
fn icon(self, icon: Icon) -> crate::Result<Self>;

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -12,6 +12,7 @@ use crate::{
};
use serde::{Deserialize, Deserializer, Serialize};
use tauri_utils::{config::WindowConfig, Theme};
use url::Url;
use std::{
collections::{HashMap, HashSet},
@@ -224,14 +225,17 @@ pub struct PendingWindow<T: UserEvent, R: Runtime<T>> {
/// How to handle IPC calls on the webview window.
pub ipc_handler: Option<WebviewIpcHandler<T, R>>,
/// The resolved URL to load on the webview.
pub url: String,
/// Maps runtime id to a string menu id.
pub menu_ids: Arc<Mutex<HashMap<MenuHash, MenuId>>>,
/// A HashMap mapping JS event names with associated listener ids.
pub js_event_listeners: Arc<Mutex<HashMap<JsEventListenerKey, HashSet<u64>>>>,
/// A handler to decide if incoming url is allowed to navigate.
pub navigation_handler: Option<Box<dyn Fn(Url) -> bool + Send>>,
/// The current webview URL.
pub current_url: Arc<Mutex<Url>>,
}
pub fn is_label_valid(label: &str) -> bool {
@@ -268,9 +272,10 @@ impl<T: UserEvent, R: Runtime<T>> PendingWindow<T, R> {
uri_scheme_protocols: Default::default(),
label,
ipc_handler: None,
url: "tauri://localhost".to_string(),
menu_ids: Arc::new(Mutex::new(menu_ids)),
js_event_listeners: Default::default(),
navigation_handler: Default::default(),
current_url: Arc::new(Mutex::new("tauri://localhost".parse().unwrap())),
})
}
}
@@ -297,9 +302,10 @@ impl<T: UserEvent, R: Runtime<T>> PendingWindow<T, R> {
uri_scheme_protocols: Default::default(),
label,
ipc_handler: None,
url: "tauri://localhost".to_string(),
menu_ids: Arc::new(Mutex::new(menu_ids)),
js_event_listeners: Default::default(),
navigation_handler: Default::default(),
current_url: Arc::new(Mutex::new("tauri://localhost".parse().unwrap())),
})
}
}
@@ -340,6 +346,9 @@ pub struct JsEventListenerKey {
/// A webview window that is not yet managed by Tauri.
#[derive(Debug)]
pub struct DetachedWindow<T: UserEvent, R: Runtime<T>> {
/// The current webview URL.
pub current_url: Arc<Mutex<Url>>,
/// Name of the window
pub label: String,
@@ -356,6 +365,7 @@ pub struct DetachedWindow<T: UserEvent, R: Runtime<T>> {
impl<T: UserEvent, R: Runtime<T>> Clone for DetachedWindow<T, R> {
fn clone(&self) -> Self {
Self {
current_url: self.current_url.clone(),
label: self.label.clone(),
dispatcher: self.dispatcher.clone(),
menu_ids: self.menu_ids.clone(),

View File

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

View File

@@ -1,5 +1,22 @@
# Changelog
## \[1.3.0]
- Added the `additional_browser_args` option to the window configuration.
- [3dc38b15](https://www.github.com/tauri-apps/tauri/commit/3dc38b150ea8c59c8ba67fd586f921016928f47c) feat(core): expose additional_browser_args to window config (fix: [#5757](https://www.github.com/tauri-apps/tauri/pull/5757)) ([#5799](https://www.github.com/tauri-apps/tauri/pull/5799)) on 2022-12-14
- Added the `content_protected` option to the window configuration.
- [4ab5545b](https://www.github.com/tauri-apps/tauri/commit/4ab5545b7a831c549f3c65e74de487ede3ab7ce5) feat: add content protection api, closes [#5132](https://www.github.com/tauri-apps/tauri/pull/5132) ([#5513](https://www.github.com/tauri-apps/tauri/pull/5513)) on 2022-12-13
- Correctly determine mime type of `.less`, `.sass` and `.styl` files.
- [5fdf8dcb](https://www.github.com/tauri-apps/tauri/commit/5fdf8dcb8ed171d06121dceb32078a7e4f86cc64) fix(core): mime type of .less, .sass and .styl files ([#6316](https://www.github.com/tauri-apps/tauri/pull/6316)) on 2023-02-19
- Bump minimum supported Rust version to 1.60.
- [5fdc616d](https://www.github.com/tauri-apps/tauri/commit/5fdc616df9bea633810dcb814ac615911d77222c) feat: Use the zbus-backed of notify-rust ([#6332](https://www.github.com/tauri-apps/tauri/pull/6332)) on 2023-03-31
- Add initial support for building `nsis` bundles on non-Windows platforms.
- [60e6f6c3](https://www.github.com/tauri-apps/tauri/commit/60e6f6c3f1605f3064b5bb177992530ff788ccf0) feat(bundler): Add support for creating NSIS bundles on unix hosts ([#5788](https://www.github.com/tauri-apps/tauri/pull/5788)) on 2023-01-19
- Add `nsis` bundle target
- [c94e1326](https://www.github.com/tauri-apps/tauri/commit/c94e1326a7c0767a13128a8b1d327a00156ece12) feat(bundler): add `nsis`, closes [#4450](https://www.github.com/tauri-apps/tauri/pull/4450), closes [#2319](https://www.github.com/tauri-apps/tauri/pull/2319) ([#4674](https://www.github.com/tauri-apps/tauri/pull/4674)) on 2023-01-03
- Added configuration to specify remote URLs allowed to access the IPC.
- [ee71c31f](https://www.github.com/tauri-apps/tauri/commit/ee71c31fd09cc5427da6d29d37c003a914547696) feat(core): allow configuring remote domains with IPC access, closes [#5088](https://www.github.com/tauri-apps/tauri/pull/5088) ([#5918](https://www.github.com/tauri-apps/tauri/pull/5918)) on 2023-04-11
## \[1.2.1]
- Fix `allowlist > app > show/hide` always disabled when `allowlist > app > all: false`.

View File

@@ -1,41 +1,41 @@
[package]
name = "tauri-utils"
version = "1.2.1"
version = "1.3.0"
authors = [ "Tauri Programme within The Commons Conservancy" ]
license = "Apache-2.0 OR MIT"
homepage = "https://tauri.app"
repository = "https://github.com/tauri-apps/tauri"
description = "Utilities for Tauri"
edition = "2021"
rust-version = "1.59"
rust-version = "1.60"
exclude = [ "CHANGELOG.md", "/target" ]
readme = "README.md"
[dependencies]
serde = { version = "1.0", features = [ "derive" ] }
serde_json = "1.0"
thiserror = "1.0.30"
serde = { version = "1", features = [ "derive" ] }
serde_json = "1"
thiserror = "1"
phf = { version = "0.10", features = [ "macros" ] }
brotli = { version = "3", optional = true, default-features = false, features = [ "std" ] }
url = { version = "2.2", features = [ "serde" ] }
url = { version = "2", features = [ "serde" ] }
kuchiki = "0.8"
html5ever = "0.25"
proc-macro2 = { version = "1.0", optional = true }
quote = { version = "1.0", optional = true }
proc-macro2 = { version = "1", optional = true }
quote = { version = "1", optional = true }
schemars = { version = "0.8", features = [ "url" ], optional = true }
serde_with = "1.12"
aes-gcm = { version = "0.9", optional = true }
serde_with = "2"
aes-gcm = { version = "0.10", optional = true }
getrandom = { version = "0.2", optional = true, features = [ "std" ] }
serialize-to-javascript = { version = "=0.1.1", optional = true }
ctor = "0.1"
json5 = { version = "0.4", optional = true }
toml = { version = "0.5", optional = true }
json-patch = "0.2"
glob = { version = "0.3.0", optional = true }
json-patch = "1.0"
glob = { version = "0.3", optional = true }
walkdir = { version = "2", optional = true }
memchr = "2.4"
memchr = "2"
semver = "1"
infer = "0.7"
infer = "0.12"
[target."cfg(target_os = \"linux\")".dependencies]
heck = "0.4"

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -174,8 +174,7 @@ impl Assets for EmbeddedAssets {
.get(html_path.as_ref())
.copied()
.into_iter()
.flatten()
.into_iter(),
.flatten(),
)
.copied(),
)

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -55,7 +55,7 @@ pub enum WindowUrl {
impl fmt::Display for WindowUrl {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::External(url) => write!(f, "{}", url),
Self::External(url) => write!(f, "{url}"),
Self::App(path) => write!(f, "{}", path.display()),
}
}
@@ -78,6 +78,8 @@ pub enum BundleType {
AppImage,
/// The Microsoft Installer bundle (.msi).
Msi,
/// The NSIS bundle (.exe).
Nsis,
/// The macOS application bundle (.app).
App,
/// The Apple Disk Image bundle (.dmg).
@@ -95,6 +97,7 @@ impl Display for BundleType {
Self::Deb => "deb",
Self::AppImage => "appimage",
Self::Msi => "msi",
Self::Nsis => "nsis",
Self::App => "app",
Self::Dmg => "dmg",
Self::Updater => "updater",
@@ -122,10 +125,11 @@ impl<'de> Deserialize<'de> for BundleType {
"deb" => Ok(Self::Deb),
"appimage" => Ok(Self::AppImage),
"msi" => Ok(Self::Msi),
"nsis" => Ok(Self::Nsis),
"app" => Ok(Self::App),
"dmg" => Ok(Self::Dmg),
"updater" => Ok(Self::Updater),
_ => Err(DeError::custom(format!("unknown bundle target '{}'", s))),
_ => Err(DeError::custom(format!("unknown bundle target '{s}'"))),
}
}
}
@@ -223,7 +227,7 @@ impl<'de> Deserialize<'de> for BundleTarget {
match BundleTargetInner::deserialize(deserializer)? {
BundleTargetInner::All(s) if s.to_lowercase() == "all" => Ok(Self::All),
BundleTargetInner::All(t) => Err(DeError::custom(format!("invalid bundle type {}", t))),
BundleTargetInner::All(t) => Err(DeError::custom(format!("invalid bundle type {t}"))),
BundleTargetInner::List(l) => Ok(Self::List(l)),
BundleTargetInner::One(t) => Ok(Self::One(t)),
}
@@ -243,6 +247,8 @@ impl BundleTarget {
}
/// Configuration for AppImage bundles.
///
/// See more: https://tauri.app/v1/api/config#appimageconfig
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -254,6 +260,8 @@ pub struct AppImageConfig {
}
/// Configuration for Debian (.deb) bundles.
///
/// See more: https://tauri.app/v1/api/config#debconfig
#[skip_serializing_none]
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
@@ -278,6 +286,8 @@ where
}
/// Configuration for the macOS bundles.
///
/// See more: https://tauri.app/v1/api/config#macconfig
#[skip_serializing_none]
#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
@@ -334,6 +344,8 @@ fn minimum_system_version() -> Option<String> {
}
/// Configuration for a target language for the WiX build.
///
/// See more: https://tauri.app/v1/api/config#wixlanguageconfig
#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -363,6 +375,8 @@ impl Default for WixLanguage {
}
/// Configuration for the MSI bundle using WiX.
///
/// See more: https://tauri.app/v1/api/config#wixconfig
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -416,6 +430,71 @@ pub struct WixConfig {
pub dialog_image_path: Option<PathBuf>,
}
/// Configuration for the Installer bundle using NSIS.
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct NsisConfig {
/// The path to the license file to render on the installer.
pub license: Option<PathBuf>,
/// The path to a bitmap file to display on the header of installers pages.
///
/// The recommended dimensions are 150px x 57px.
#[serde(alias = "header-image")]
pub header_image: Option<PathBuf>,
/// The path to a bitmap file for the Welcome page and the Finish page.
///
/// The recommended dimensions are 164px x 314px.
#[serde(alias = "sidebar-image")]
pub sidebar_image: Option<PathBuf>,
/// The path to an icon file used as the installer icon.
#[serde(alias = "install-icon")]
pub installer_icon: Option<PathBuf>,
/// Whether the installation will be for all users or just the current user.
#[serde(default, alias = "install-mode")]
pub install_mode: NSISInstallerMode,
/// A list of installer languages.
/// By default the OS language is used. If the OS language is not in the list of languages, the first language will be used.
/// To allow the user to select the language, set `display_language_selector` to `true`.
///
/// See <https://github.com/kichik/nsis/tree/9465c08046f00ccb6eda985abbdbf52c275c6c4d/Contrib/Language%20files> for the complete list of languages.
pub languages: Option<Vec<String>>,
/// Whether to display a language selector dialog before the installer and uninstaller windows are rendered or not.
/// By default the OS language is selected, with a fallback to the first language in the `languages` array.
#[serde(default, alias = "display-language-selector")]
pub display_language_selector: bool,
}
/// Install Modes for the NSIS installer.
#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub enum NSISInstallerMode {
/// Default mode for the installer.
///
/// Install the app by default in a directory that doesn't require Administrator access.
///
/// Installer metadata will be saved under the `HKCU` registry path.
CurrentUser,
/// Install the app by default in the `Program Files` folder directory requires Administrator
/// access for the installation.
///
/// Installer metadata will be saved under the `HKLM` registry path.
PerMachine,
/// Combines both modes and allows the user to choose at install time
/// whether to install for the current user or per machine. Note that this mode
/// will require Administrator access even if the user wants to install it for the current user only.
///
/// Installer metadata will be saved under the `HKLM` or `HKCU` registry path based on the user's choice.
Both,
}
impl Default for NSISInstallerMode {
fn default() -> Self {
Self::CurrentUser
}
}
/// Install modes for the Webview2 runtime.
/// Note that for the updater bundle [`Self::DownloadBootstrapper`] is used.
///
@@ -427,7 +506,7 @@ pub enum WebviewInstallMode {
/// Do not install the Webview2 as part of the Windows Installer.
Skip,
/// Download the bootstrapper and run it.
/// Requires internet connection.
/// Requires an internet connection.
/// Results in a smaller installer size, but is not recommended on Windows 7.
DownloadBootstrapper {
/// Instructs the installer to run the bootstrapper in silent mode. Defaults to `true`.
@@ -435,7 +514,7 @@ pub enum WebviewInstallMode {
silent: bool,
},
/// Embed the bootstrapper and run it.
/// Requires internet connection.
/// Requires an internet connection.
/// Increases the installer size by around 1.8MB, but offers better support on Windows 7.
EmbedBootstrapper {
/// Instructs the installer to run the bootstrapper in silent mode. Defaults to `true`.
@@ -443,7 +522,7 @@ pub enum WebviewInstallMode {
silent: bool,
},
/// Embed the offline installer and run it.
/// Does not require internet connection.
/// Does not require an internet connection.
/// Increases the installer size by around 127MB.
OfflineInstaller {
/// Instructs the installer to run the installer in silent mode. Defaults to `true`.
@@ -474,6 +553,8 @@ impl Default for WebviewInstallMode {
}
/// Windows bundler configuration.
///
/// See more: https://tauri.app/v1/api/config#windowsconfig
#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -512,6 +593,8 @@ pub struct WindowsConfig {
pub allow_downgrades: bool,
/// Configuration for the MSI generated with WiX.
pub wix: Option<WixConfig>,
/// Configuration for the installer generated with NSIS.
pub nsis: Option<NsisConfig>,
}
impl Default for WindowsConfig {
@@ -525,6 +608,7 @@ impl Default for WindowsConfig {
webview_fixed_runtime_path: None,
allow_downgrades: default_allow_downgrades(),
wix: None,
nsis: None,
}
}
}
@@ -534,6 +618,8 @@ fn default_allow_downgrades() -> bool {
}
/// Configuration for tauri-bundler.
///
/// See more: https://tauri.app/v1/api/config#bundleconfig
#[skip_serializing_none]
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
@@ -542,7 +628,7 @@ pub struct BundleConfig {
/// Whether Tauri should bundle your application or just output the executable.
#[serde(default)]
pub active: bool,
/// The bundle targets, currently supports ["deb", "appimage", "msi", "app", "dmg", "updater"] or "all".
/// The bundle targets, currently supports ["deb", "appimage", "nsis", "msi", "app", "dmg", "updater"] or "all".
#[serde(default)]
pub targets: BundleTarget,
/// The application identifier in reverse domain name notation (e.g. `com.tauri.example`).
@@ -722,6 +808,8 @@ pub struct CliArg {
}
/// describes a CLI configuration
///
/// See more: https://tauri.app/v1/api/config#cliconfig
#[skip_serializing_none]
#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
@@ -785,6 +873,8 @@ impl CliConfig {
}
/// The window configuration object.
///
/// See more: https://tauri.app/v1/api/config#windowconfig
#[skip_serializing_none]
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
@@ -859,6 +949,9 @@ pub struct WindowConfig {
/// Whether the window should always be on top of other windows.
#[serde(default, alias = "always-on-top")]
pub always_on_top: bool,
/// Prevents the window contents from being captured by other apps.
#[serde(default, alias = "content-protected")]
pub content_protected: bool,
/// If `true`, hides the window icon from the taskbar on Windows and Linux.
#[serde(default, alias = "skip-taskbar")]
pub skip_taskbar: bool,
@@ -881,6 +974,10 @@ pub struct WindowConfig {
/// [tabbing identifier]: <https://developer.apple.com/documentation/appkit/nswindow/1644704-tabbingidentifier>
#[serde(default, alias = "tabbing-identifier")]
pub tabbing_identifier: Option<String>,
/// Defines additional browser arguments on Windows. By default wry passes `--disable-features=msWebOOUI,msPdfOOUI,msSmartScreenProtection`
/// so if you use this method, you also need to disable these components by yourself if you want.
#[serde(default, alias = "additional-browser-args")]
pub additional_browser_args: Option<String>,
}
impl Default for WindowConfig {
@@ -908,12 +1005,14 @@ impl Default for WindowConfig {
visible: default_visible(),
decorations: default_decorations(),
always_on_top: false,
content_protected: false,
skip_taskbar: false,
theme: None,
title_bar_style: Default::default(),
hidden_title: false,
accept_first_mouse: false,
tabbing_identifier: None,
additional_browser_args: None,
}
}
}
@@ -985,7 +1084,7 @@ impl CspDirectiveSources {
/// Whether the given source is configured on this directive or not.
pub fn contains(&self, source: &str) -> bool {
match self {
Self::Inline(s) => s.contains(&format!("{} ", source)) || s.contains(&format!(" {}", source)),
Self::Inline(s) => s.contains(&format!("{source} ")) || s.contains(&format!(" {source}")),
Self::List(l) => l.contains(&source.into()),
}
}
@@ -1051,7 +1150,7 @@ impl From<Csp> for HashMap<String, CspDirectiveSources> {
impl Display for Csp {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Policy(s) => write!(f, "{}", s),
Self::Policy(s) => write!(f, "{s}"),
Self::DirectiveMap(m) => {
let len = m.len();
let mut i = 0;
@@ -1097,7 +1196,28 @@ impl Default for DisabledCspModificationKind {
}
}
/// External command access definition.
#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct RemoteDomainAccessScope {
/// The URL scheme to allow. By default, all schemas are allowed.
pub scheme: Option<String>,
/// The domain to allow.
pub domain: String,
/// The list of window labels this scope applies to.
pub windows: Vec<String>,
/// The list of plugins that are allowed in this scope.
#[serde(default)]
pub plugins: Vec<String>,
/// Enables access to the Tauri API.
#[serde(default, rename = "enableTauriAPI", alias = "enable-tauri-api")]
pub enable_tauri_api: bool,
}
/// Security configuration.
///
/// See more: https://tauri.app/v1/api/config#securityconfig
#[skip_serializing_none]
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
@@ -1132,6 +1252,20 @@ pub struct SecurityConfig {
/// Your application might be vulnerable to XSS attacks without this Tauri protection.
#[serde(default, alias = "dangerous-disable-asset-csp-modification")]
pub dangerous_disable_asset_csp_modification: DisabledCspModificationKind,
/// Allow external domains to send command to Tauri.
///
/// By default, external domains do not have access to `window.__TAURI__`, which means they cannot
/// communicate with the commands defined in Rust. This prevents attacks where an externally
/// loaded malicious or compromised sites could start executing commands on the user's device.
///
/// This configuration allows a set of external domains to have access to the Tauri commands.
/// When you configure a domain to be allowed to access the IPC, all subpaths are allowed. Subdomains are not allowed.
///
/// **WARNING:** Only use this option if you either have internal checks against malicious
/// external sites or you can trust the allowed external sites. You application might be
/// vulnerable to dangerous Tauri command related attacks otherwise.
#[serde(default, alias = "dangerous-remote-domain-ipc-access")]
pub dangerous_remote_domain_ipc_access: Vec<RemoteDomainAccessScope>,
}
/// Defines an allowlist type.
@@ -1201,6 +1335,8 @@ impl FsAllowlistScope {
}
/// Allowlist for the file system APIs.
///
/// See more: https://tauri.app/v1/api/config#fsallowlistconfig
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -1280,6 +1416,8 @@ impl Allowlist for FsAllowlistConfig {
}
/// Allowlist for the window APIs.
///
/// See more: https://tauri.app/v1/api/config#windowallowlistconfig
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -1329,6 +1467,9 @@ pub struct WindowAllowlistConfig {
/// Allows setting the always_on_top flag of the window.
#[serde(default, alias = "set-always-on-top")]
pub set_always_on_top: bool,
/// Allows preventing the window contents from being captured by other apps.
#[serde(default, alias = "set-content-protected")]
pub set_content_protected: bool,
/// Allows setting the window size.
#[serde(default, alias = "set-size")]
pub set_size: bool,
@@ -1394,6 +1535,7 @@ impl Allowlist for WindowAllowlistConfig {
close: true,
set_decorations: true,
set_always_on_top: true,
set_content_protected: false,
set_size: true,
set_min_size: true,
set_max_size: true,
@@ -1444,6 +1586,12 @@ impl Allowlist for WindowAllowlistConfig {
set_always_on_top,
"window-set-always-on-top"
);
check_feature!(
self,
features,
set_content_protected,
"window-set-content-protected"
);
check_feature!(self, features, set_size, "window-set-size");
check_feature!(self, features, set_min_size, "window-set-min-size");
check_feature!(self, features, set_max_size, "window-set-max-size");
@@ -1599,7 +1747,7 @@ pub struct ShellAllowlistScope(pub Vec<ShellAllowedCommand>);
pub enum ShellAllowlistOpen {
/// If the shell open API should be enabled.
///
/// If enabled, the default validation regex (`^https?://`) is used.
/// If enabled, the default validation regex (`^((mailto:\w+)|(tel:\w+)|(https?://\w+)).+`) is used.
Flag(bool),
/// Enable the shell open API, with a custom regex that the opened path must match against.
@@ -1616,6 +1764,8 @@ impl Default for ShellAllowlistOpen {
}
/// Allowlist for the shell APIs.
///
/// See more: https://tauri.app/v1/api/config#shellallowlistconfig
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -1672,6 +1822,8 @@ impl Allowlist for ShellAllowlistConfig {
}
/// Allowlist for the dialog APIs.
///
/// See more: https://tauri.app/v1/api/config#dialogallowlistconfig
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -1740,6 +1892,8 @@ impl Allowlist for DialogAllowlistConfig {
pub struct HttpAllowlistScope(pub Vec<Url>);
/// Allowlist for the HTTP APIs.
///
/// See more: https://tauri.app/v1/api/config#httpallowlistconfig
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -1779,6 +1933,8 @@ impl Allowlist for HttpAllowlistConfig {
}
/// Allowlist for the notification APIs.
///
/// See more: https://tauri.app/v1/api/config#notificationallowlistconfig
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -1806,6 +1962,8 @@ impl Allowlist for NotificationAllowlistConfig {
}
/// Allowlist for the global shortcut APIs.
///
/// See more: https://tauri.app/v1/api/config#globalshortcutallowlistconfig
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -1833,6 +1991,8 @@ impl Allowlist for GlobalShortcutAllowlistConfig {
}
/// Allowlist for the OS APIs.
///
/// See more: https://tauri.app/v1/api/config#osallowlistconfig
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -1860,6 +2020,8 @@ impl Allowlist for OsAllowlistConfig {
}
/// Allowlist for the path APIs.
///
/// See more: https://tauri.app/v1/api/config#pathallowlistconfig
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -1887,6 +2049,8 @@ impl Allowlist for PathAllowlistConfig {
}
/// Allowlist for the custom protocols.
///
/// See more: https://tauri.app/v1/api/config#protocolallowlistconfig
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -1926,6 +2090,8 @@ impl Allowlist for ProtocolAllowlistConfig {
}
/// Allowlist for the process APIs.
///
/// See more: https://tauri.app/v1/api/config#processallowlistconfig
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -1983,6 +2149,8 @@ impl Allowlist for ProcessAllowlistConfig {
}
/// Allowlist for the clipboard APIs.
///
/// See more: https://tauri.app/v1/api/config#clipboardallowlistconfig
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -2023,6 +2191,8 @@ impl Allowlist for ClipboardAllowlistConfig {
}
/// Allowlist for the app APIs.
///
/// See more: https://tauri.app/v1/api/config#appallowlistconfig
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -2062,7 +2232,16 @@ impl Allowlist for AppAllowlistConfig {
}
}
/// Allowlist configuration.
/// Allowlist configuration. The allowlist is a translation of the [Cargo allowlist features](https://docs.rs/tauri/latest/tauri/#cargo-allowlist-features).
///
/// # Notes
///
/// - Endpoints that don't have their own allowlist option are enabled by default.
/// - There is only "opt-in", no "opt-out". Setting an option to `false` has no effect.
///
/// # Examples
///
/// - * [`"app-all": true`](https://tauri.app/v1/api/config/#appallowlistconfig.all) will make the [hide](https://tauri.app/v1/api/js/app#hide) endpoint be available regardless of whether `hide` is set to `false` or `true` in the allowlist.
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -2175,6 +2354,8 @@ impl Default for PatternKind {
}
/// The Tauri configuration object.
///
/// See more: https://tauri.app/v1/api/config#tauriconfig
#[skip_serializing_none]
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
@@ -2287,7 +2468,7 @@ pub enum WindowsUpdateInstallMode {
/// Specifies there's a basic UI during the installation process, including a final dialog box at the end.
BasicUi,
/// The quiet mode means there's no user interaction required.
/// Requires admin privileges if the installer does.
/// Requires admin privileges if the installer does (WiX).
Quiet,
/// Specifies unattended mode, which means the installation only shows a progress bar.
Passive,
@@ -2346,25 +2527,31 @@ impl<'de> Deserialize<'de> for WindowsUpdateInstallMode {
"quiet" => Ok(Self::Quiet),
"passive" => Ok(Self::Passive),
_ => Err(DeError::custom(format!(
"unknown update install mode '{}'",
s
"unknown update install mode '{s}'"
))),
}
}
}
/// The updater configuration for Windows.
///
/// See more: https://tauri.app/v1/api/config#updaterwindowsconfig
#[skip_serializing_none]
#[derive(Debug, Default, PartialEq, Eq, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct UpdaterWindowsConfig {
/// Additional arguments given to the NSIS or WiX installer.
#[serde(default, alias = "installer-args")]
pub installer_args: Vec<String>,
/// The installation mode for the update on Windows. Defaults to `passive`.
#[serde(default, alias = "install-mode")]
pub install_mode: WindowsUpdateInstallMode,
}
/// The Updater configuration object.
///
/// See more: https://tauri.app/v1/api/config#updaterconfig
#[skip_serializing_none]
#[derive(Debug, PartialEq, Eq, Clone, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
@@ -2444,6 +2631,8 @@ impl Default for UpdaterConfig {
}
/// Configuration for application system tray icon.
///
/// See more: https://tauri.app/v1/api/config#systemtrayconfig
#[skip_serializing_none]
#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
@@ -2491,7 +2680,7 @@ pub enum AppUrl {
impl std::fmt::Display for AppUrl {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Url(url) => write!(f, "{}", url),
Self::Url(url) => write!(f, "{url}"),
Self::Files(files) => write!(f, "{}", serde_json::to_string(files).unwrap()),
}
}
@@ -2533,6 +2722,8 @@ pub enum HookCommand {
}
/// The Build configuration object.
///
/// See more: https://tauri.app/v1/api/config#buildconfig
#[skip_serializing_none]
#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
@@ -2630,9 +2821,9 @@ impl<'d> serde::Deserialize<'d> for PackageVersion {
let path = PathBuf::from(value);
if path.exists() {
let json_str = read_to_string(&path)
.map_err(|e| DeError::custom(format!("failed to read version JSON file: {}", e)))?;
.map_err(|e| DeError::custom(format!("failed to read version JSON file: {e}")))?;
let package_json: serde_json::Value = serde_json::from_str(&json_str)
.map_err(|e| DeError::custom(format!("failed to read version JSON file: {}", e)))?;
.map_err(|e| DeError::custom(format!("failed to read version JSON file: {e}")))?;
if let Some(obj) = package_json.as_object() {
let version = obj
.get("version")
@@ -2666,6 +2857,8 @@ impl<'d> serde::Deserialize<'d> for PackageVersion {
}
/// The package configuration.
///
/// See more: https://tauri.app/v1/api/config#packageconfig
#[derive(Debug, Clone, Default, PartialEq, Eq, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -2795,6 +2988,8 @@ pub struct Config {
}
/// The plugin configs holds a HashMap mapping a plugin name to its configuration object.
///
/// See more: https://tauri.app/v1/api/config#pluginconfig
#[derive(Debug, Clone, Default, PartialEq, Eq, Deserialize, Serialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct PluginConfig(pub HashMap<String, JsonValue>);
@@ -3040,12 +3235,14 @@ mod build {
let visible = self.visible;
let decorations = self.decorations;
let always_on_top = self.always_on_top;
let content_protected = self.content_protected;
let skip_taskbar = self.skip_taskbar;
let theme = opt_lit(self.theme.as_ref());
let title_bar_style = &self.title_bar_style;
let hidden_title = self.hidden_title;
let accept_first_mouse = self.accept_first_mouse;
let tabbing_identifier = opt_str_lit(self.tabbing_identifier.as_ref());
let additional_browser_args = opt_str_lit(self.additional_browser_args.as_ref());
literal_struct!(
tokens,
@@ -3072,12 +3269,14 @@ mod build {
visible,
decorations,
always_on_top,
content_protected,
skip_taskbar,
theme,
title_bar_style,
hidden_title,
accept_first_mouse,
tabbing_identifier
tabbing_identifier,
additional_browser_args
);
}
}
@@ -3333,7 +3532,8 @@ mod build {
impl ToTokens for UpdaterWindowsConfig {
fn to_tokens(&self, tokens: &mut TokenStream) {
let install_mode = &self.install_mode;
literal_struct!(tokens, UpdaterWindowsConfig, install_mode);
let installer_args = vec_lit(&self.installer_args, str_lit);
literal_struct!(tokens, UpdaterWindowsConfig, install_mode, installer_args);
}
}
@@ -3423,12 +3623,34 @@ mod build {
}
}
impl ToTokens for RemoteDomainAccessScope {
fn to_tokens(&self, tokens: &mut TokenStream) {
let scheme = opt_str_lit(self.scheme.as_ref());
let domain = str_lit(&self.domain);
let windows = vec_lit(&self.windows, str_lit);
let plugins = vec_lit(&self.plugins, str_lit);
let enable_tauri_api = self.enable_tauri_api;
literal_struct!(
tokens,
RemoteDomainAccessScope,
scheme,
domain,
windows,
plugins,
enable_tauri_api
);
}
}
impl ToTokens for SecurityConfig {
fn to_tokens(&self, tokens: &mut TokenStream) {
let csp = opt_lit(self.csp.as_ref());
let dev_csp = opt_lit(self.dev_csp.as_ref());
let freeze_prototype = self.freeze_prototype;
let dangerous_disable_asset_csp_modification = &self.dangerous_disable_asset_csp_modification;
let dangerous_remote_domain_ipc_access =
vec_lit(&self.dangerous_remote_domain_ipc_access, identity);
literal_struct!(
tokens,
@@ -3436,7 +3658,8 @@ mod build {
csp,
dev_csp,
freeze_prototype,
dangerous_disable_asset_csp_modification
dangerous_disable_asset_csp_modification,
dangerous_remote_domain_ipc_access
);
}
}
@@ -3701,6 +3924,7 @@ mod test {
dev_csp: None,
freeze_prototype: false,
dangerous_disable_asset_csp_modification: DisabledCspModificationKind::Flag(false),
dangerous_remote_domain_ipc_access: Vec::new(),
},
allowlist: AllowlistConfig::default(),
system_tray: None,

View File

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

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -37,7 +37,7 @@ fn serialize_node_ref_internal<S: Serializer>(
traversal_scope: TraversalScope,
) -> crate::Result<()> {
match (traversal_scope, node.data()) {
(ref scope, &NodeData::Element(ref element)) => {
(ref scope, NodeData::Element(element)) => {
if *scope == TraversalScope::IncludeNode {
let attrs = element.attributes.borrow();
@@ -82,16 +82,16 @@ fn serialize_node_ref_internal<S: Serializer>(
(TraversalScope::ChildrenOnly(_), _) => Ok(()),
(TraversalScope::IncludeNode, &NodeData::Doctype(ref doctype)) => {
(TraversalScope::IncludeNode, NodeData::Doctype(doctype)) => {
serializer.write_doctype(&doctype.name).map_err(Into::into)
}
(TraversalScope::IncludeNode, &NodeData::Text(ref text)) => {
(TraversalScope::IncludeNode, NodeData::Text(text)) => {
serializer.write_text(&text.borrow()).map_err(Into::into)
}
(TraversalScope::IncludeNode, &NodeData::Comment(ref text)) => {
(TraversalScope::IncludeNode, NodeData::Comment(text)) => {
serializer.write_comment(&text.borrow()).map_err(Into::into)
}
(TraversalScope::IncludeNode, &NodeData::ProcessingInstruction(ref contents)) => {
(TraversalScope::IncludeNode, NodeData::ProcessingInstruction(contents)) => {
let contents = contents.borrow();
serializer
.write_processing_instruction(&contents.0, &contents.1)

View File

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

View File

@@ -1,11 +1,14 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
//! Tauri utility helpers
#![warn(missing_docs, rust_2018_idioms)]
use std::fmt::Display;
use std::{
fmt::Display,
path::{Path, PathBuf},
};
use semver::Version;
use serde::{Deserialize, Deserializer, Serialize, Serializer};
@@ -294,3 +297,12 @@ macro_rules! debug_eprintln {
$crate::consume_unused_variable!($($arg)*);
};
}
/// Reconstructs a path from its components using the platform separator then converts it to String
pub fn display_path<P: AsRef<Path>>(p: P) -> String {
p.as_ref()
.components()
.collect::<PathBuf>()
.display()
.to_string()
}

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -39,7 +39,7 @@ impl std::fmt::Display for MimeType {
MimeType::Svg => "image/svg+xml",
MimeType::Mp4 => "video/mp4",
};
write!(f, "{}", mime)
write!(f, "{mime}")
}
}
@@ -49,7 +49,7 @@ impl MimeType {
let suffix = uri.split('.').last();
match suffix {
Some("bin") => Self::OctetStream,
Some("css") => Self::Css,
Some("css" | "less" | "sass" | "styl") => Self::Css,
Some("csv") => Self::Csv,
Some("html") => Self::Html,
Some("ico") => Self::Ico,

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -43,7 +43,7 @@
algorithm.iv = window.crypto.getRandomValues(new Uint8Array(12))
let encoder = new TextEncoder()
let payloadRaw = encoder.encode(JSON.stringify(data))
let payloadRaw = encoder.encode(__RAW_stringify_ipc_message_fn__(data))
return window.crypto.subtle
.encrypt(algorithm, aesGcmKey, payloadRaw)

View File

@@ -1,4 +1,4 @@
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
@@ -8,7 +8,7 @@ use std::fmt::{Debug, Formatter};
use std::string::FromUtf8Error;
use aes_gcm::aead::Aead;
use aes_gcm::{aead::NewAead, Aes256Gcm, Nonce};
use aes_gcm::{Aes256Gcm, KeyInit, Nonce};
use getrandom::{getrandom, Error as CsprngError};
use serialize_to_javascript::{default_template, Template};
@@ -57,7 +57,7 @@ impl AesGcmPair {
fn new() -> Result<Self, Error> {
let mut raw = [0u8; 32];
getrandom(&mut raw)?;
let key = aes_gcm::Key::from_slice(&raw);
let key = aes_gcm::Key::<Aes256Gcm>::from_slice(&raw);
Ok(Self {
raw,
key: Aes256Gcm::new(key),
@@ -141,6 +141,9 @@ pub struct IsolationJavascriptCodegen {
pub struct IsolationJavascriptRuntime<'a> {
/// The key used on the Rust backend and the Isolation Javascript
pub runtime_aes_gcm_key: &'a [u8; 32],
/// The function that stringifies a IPC message.
#[raw]
pub stringify_ipc_message_fn: &'a str,
}
#[cfg(test)]

View File

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

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