Compare commits

...

214 Commits

Author SHA1 Message Date
pengx17
f0aafda509 fix(electron): cannot restart recording the same app again (#11498)
fix AF-2455
2025-04-09 02:37:50 +00:00
fundon
c57f41805f fix(editor): should auto close dropdown menus on toolbar (#11522)
Closes: [BS-2524](https://linear.app/affine-design/issue/BS-2524/切换-block-后,刷新-toolbar-时,应该自动关闭已经打开的-dropdown)
2025-04-09 01:29:44 +00:00
darkskygit
984a6763ae chore(server): try repair text in structured outputs (#11543) 2025-04-08 16:48:22 +00:00
Saul-Mirone
dd1cf14069 refactor(editor): cleanup duplicated code (#11548) 2025-04-08 16:35:25 +00:00
doouding
d7268ce04c test: add std gfx test (#11442)
### Changed
- Move some intergraion tests to std as they are more like basic tests
- Add some basic gfx-related tests
2025-04-08 16:20:36 +00:00
donteatfriedrice
e4e3d8ef59 fix(editor): paste to code block should delete selected text (#11546)
Close [BS-3064](https://linear.app/affine-design/issue/BS-3064/fix-bug-pasting-in-code-block-does-not-replace-text)
2025-04-08 12:37:36 +00:00
Saul-Mirone
1081d6281f feat(editor): adjust url input ui (#11535)
Closes: BS-1074
2025-04-08 11:05:24 +00:00
L-Sun
3820186512 fix(editor): incorrect brush bound with rotation and line width (#11524)
This transfered PR from [BS/#9058](https://github.com/toeverything/blocksuite/pull/9058) fixes an issue where the selection rectangle of a brush element was incorrect after resizing and rotating.
2025-04-08 10:48:12 +00:00
L-Sun
7d4bb5150e chore(editor): improve bookmark UI&UX (#11525)
Close [BS-2804](https://linear.app/affine-design/issue/BS-2804/[ui-bug]-link-card-view-ui-布局错了,url-应该是-text-secondary-color)
Close [BS-3034](https://linear.app/affine-design/issue/BS-3034/link-card-view-链接需要-fix-在底部)

### What Changes
- remove url selected color
- improve url click area by moving `@click` callback to inner small url container
- improve layout
2025-04-08 10:34:36 +00:00
pengx17
a2125787c2 fix(electron): use another origin for popup to disable zoom in/out issue of the popup window (#11506)
fix AF-2473
2025-04-08 10:18:09 +00:00
pengx17
93d8e22b07 feat(electron): meeting recording permissions checks (#11505)
fix AF-2472, AF-2446

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/536f8412-cbf1-47ad-a8a0-0b86e97521d7.png)

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/b49a64cc-d288-49c9-8382-e4e8b5806850.png)
2025-04-08 10:18:08 +00:00
Saul-Mirone
780c35eabe fix(editor): prevent Tab key propagation outside editor (#11531)
Closes: BS-2964
2025-04-08 10:03:06 +00:00
CatsJuice
280227fa5f feat(editor): change note cursor to crosshair (#11499) 2025-04-08 09:49:29 +00:00
renovate[bot]
0887c1864c chore: bump up Rust crate tokio to v1.44.2 [SECURITY] (#11521)
Co-authored-by: renovate <29139614+renovate@users.noreply.github.com>
2025-04-08 17:47:36 +08:00
liuyi
1b858e1e6c chore: wrong $shcmea field in config example (#11526) 2025-04-08 17:46:35 +08:00
Flrande
8c87d2a39e fix(editor): disable mention node select (#11512)
Close [BS-3011: inline at 有时候会进入可以选中的状态](https://linear.app/affine-design/issue/BS-3011/inline-at-有时候会进入可以选中的状态)
2025-04-08 09:31:19 +00:00
Saul-Mirone
238ec59dd2 fix(editor): image icon color (#11536)
Closes: BS-2166
2025-04-08 09:18:26 +00:00
Saul-Mirone
ca75162fc9 fix(editor): text overflow in journal card (#11537)
Closes: BS-3000
2025-04-08 09:04:48 +00:00
Saul-Mirone
bda5562f90 fix(editor): allow copy in readonly mode (#11538) 2025-04-08 08:52:20 +00:00
donteatfriedrice
b8e7ca3214 test(editor): fix flaky embed iframe e2e test (#11530) 2025-04-08 08:37:12 +00:00
liuyi
ebdeaf3783 chore(core): reorg polyfill (#11528) 2025-04-08 14:59:54 +08:00
Saul-Mirone
d1b82f0c58 fix: sentry-6337909140 (#11534)
Closes: BS-3076
2025-04-08 06:44:37 +00:00
Saul-Mirone
a28b8b1b11 fix: sentry-6451187280 (#11533)
Closes: BS-3075
2025-04-08 06:06:16 +00:00
darkskygit
558e84138c chore: remove lame encoder (#11529) 2025-04-08 05:02:30 +00:00
yoyoyohamapi
49c6ad7c04 feat(core): ai panel adaptation for edgeless theme (#11509)
### TL;DR

AI panel adaptation for Edgeless theme

> CLOSE BS-3017

![截屏2025-04-07 17.30.48.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyktQ6Qwc7H6TiRCFoYN/a2e83338-d795-4b16-b2a8-bdd4f922a4c3.png)
2025-04-08 02:29:57 +00:00
liuyi
646182ea2a fix(server): duplicate registered otel providers (#11513) 2025-04-08 10:25:36 +08:00
fundon
e927d02c96 fix(editor): improve link popup positioning with autoUpdate (#11510)
Closes: [BS-3038](https://linear.app/affine-design/issue/BS-3038/遇到一个新bug-抽象的一p)

Maybe the `mock selection widget` is needed.
2025-04-07 13:33:11 +00:00
Saul-Mirone
1f45cc5dec refactor(editor): unify directories naming (#11516)
**Directory Structure Changes**

- Renamed multiple block-related directories by removing the "block-" prefix:
  - `block-attachment` → `attachment`
  - `block-bookmark` → `bookmark`
  - `block-callout` → `callout`
  - `block-code` → `code`
  - `block-data-view` → `data-view`
  - `block-database` → `database`
  - `block-divider` → `divider`
  - `block-edgeless-text` → `edgeless-text`
  - `block-embed` → `embed`
2025-04-07 12:34:40 +00:00
darkskygit
e1bd2047c4 feat(server): add table support for doc parse (#11508)
fix AF-2478
2025-04-07 09:59:20 +00:00
donteatfriedrice
43809838ef test(editor): add embed iframe block e2e tests (#11502)
Close [BS-2669](https://linear.app/affine-design/issue/BS-2669/iframe-embed-block-添加测试)
2025-04-07 09:43:36 +00:00
darkskygit
3792464fa0 fix(server): early exit in doc parse (#11507) 2025-04-07 09:30:06 +00:00
JimmFly
af48df230d feat(core): add docRole to inviteUserDocRole tracking event (#11501)
close AF-2476
2025-04-07 08:51:45 +00:00
EYHN
f93acc6635 fix(android): fix uniffi bindgen (#11500) 2025-04-07 08:37:35 +00:00
forehalo
40f218c898 chore: set base version to 0.21 2025-04-07 16:10:32 +08:00
pengx17
952f1878a6 fix(core): add option to disable middle click paste behavior on linux (#11496)
fix BS-3028
2025-04-07 07:01:37 +00:00
fundon
6e10fe6205 fix(editor): popover style on link popup (#11495)
Closes: [BS-3039](https://linear.app/affine-design/issue/BS-3039/这个输入框样式也g了)
2025-04-07 06:43:37 +00:00
fundon
eb0bcd9b99 fix(editor): improve menu content UX on toolbar (#11491)
* Added scrollbar style

![Screenshot 2025-04-07 at 11.50.19.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/8ypiIKZXudF5a0tIgIzf/c2a44dcc-7f24-44d5-a855-e2c1671e85f9.png)

* Used `padding` instead of `offset`
2025-04-07 06:30:07 +00:00
pengx17
92240fc1a2 chore(electron): add community link for meeting feature (#11494)
fix AF-2471

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/024ac070-fbd8-4ab0-be93-6670cbee587e.png)
2025-04-07 06:15:50 +00:00
pengx17
fddf68f061 fix(core): stop media when audio block is removed (#11492) 2025-04-07 06:15:50 +00:00
L-Sun
4e33059d58 fix(editor): remove copy-as-png from toolbar of surface-ref (#11493) 2025-04-07 06:03:49 +00:00
darkskygit
ea9de7b542 feat(server): add transcript block indexing (#11487)
fix AF-2469
2025-04-07 05:51:06 +00:00
Saul-Mirone
c306d98370 fix(editor): range sync in lit portal (#11490)
Closes: BS-3032
2025-04-07 05:38:20 +00:00
JimmFly
53dff7a158 fix(admin): adjust available upgrade button style (#11489) 2025-04-07 05:25:34 +00:00
Saul-Mirone
8c473cf685 fix(editor): adjust block meta info (#11488)
Closes: BS-2901
2025-04-07 05:12:04 +00:00
yoyoyohamapi
da580076b0 fix(core): cannot select text in electron (#11486) 2025-04-07 03:19:34 +00:00
fundon
8a13eca271 fix(editor): should focus on input of popover on toolbar (#11485)
Related to: https://github.com/toeverything/AFFiNE/pull/11429
2025-04-07 03:04:34 +00:00
donteatfriedrice
568a390b75 feat(editor): support markdown adapter preprocessed with latex delimiters (#11431)
To close [BS-2870](https://linear.app/affine-design/issue/BS-2870/支持识别-和-[-包裹内容为公式)

## Add Markdown Preprocessor Extension and Enhanced LaTeX Support

### Markdown Preprocessor Extension
This PR introduces a new preprocessor extension for Markdown adapters that allows preprocessing of content before conversion:

Adds a new PreprocessorManager for handling text transformations
Introduces extensible preprocessor interface that supports different processing levels (block/slice/doc)

Integrates preprocessor extension into the existing Markdown adapter workflow

### LaTeX Support Enhancement
Extends LaTeX support to handle both traditional and alternative syntax:
Adds support for backslash LaTeX syntax:

Block math: ```\[...\] ``` alongside existing ```$$...$$```
Inline math: ```\(...\) ``` alongside existing ```$...$```

Implements LaTeX preprocessor to standardize syntax before conversion

Updates tests to cover both syntax variants
2025-04-07 02:18:04 +00:00
liuyi
e376992ccf chore(server): default DEPLOYMENT_TYPE should be selfhosted (#11484) 2025-04-07 10:05:14 +08:00
Saul-Mirone
854569af2d refactor(editor): remove lasso tool (#11481) 2025-04-07 01:12:28 +00:00
Saul-Mirone
bb1270061a feat(editor): gfx template package (#11480) 2025-04-06 12:24:13 +00:00
Saul-Mirone
41499c1cd6 refactor(editor): merge implementation of createTemplateJob (#11474) 2025-04-05 12:59:48 +00:00
Saul-Mirone
aed7f40568 refactor(editor): improve element adapters (#11473) 2025-04-05 09:40:13 +00:00
Saul-Mirone
0fbca31c27 refactor(editor): improve edgeless clipboard config (#11472) 2025-04-05 03:48:26 +00:00
renovate
96e860caf3 chore: Lock file maintenance (#10724)
This PR contains the following updates:

| Update | Change |
|---|---|
| lockFileMaintenance | All locks refreshed |

🔧 This Pull Request updates lock files to use the latest dependency versions.

---

### Configuration

📅 **Schedule**: Branch creation - "* 0-3 * * 1" (UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xODUuNCIsInVwZGF0ZWRJblZlciI6IjM5LjIwNy4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-04-04 15:10:05 +00:00
Saul-Mirone
2a1306c58c refactor(editor): separate the element renders (#11461) 2025-04-04 13:09:46 +00:00
Saul-Mirone
5a1106fb88 refactor(editor): extract brush element renderer (#11460) 2025-04-04 13:09:45 +00:00
Saul-Mirone
138e7f60de refactor(editor): extensionalize surface canvas renderer (#11456) 2025-04-04 13:09:45 +00:00
JimmFly
3ecdc377fe fix(admin): unable to log into admin panel (#11451) 2025-04-04 10:39:20 +00:00
LongYinan
eed26b1601 ci: pick blaze/macos-14 and namespace runner randomly (#11465) 2025-04-04 18:38:05 +08:00
renovate[bot]
0f7a739b3b chore: bump up all non-major dependencies (#11351)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: LongYinan <lynweklm@gmail.com>
2025-04-04 18:37:22 +08:00
renovate
a76414066a chore: bump up rustc version to v1.86.0 (#11464)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [rustc](https://redirect.github.com/rust-lang/rust) | minor | `1.85.1` -> `1.86.0` |

---

### Release Notes

<details>
<summary>rust-lang/rust (rustc)</summary>

### [`v1.86.0`](https://redirect.github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1860-2025-04-03)

[Compare Source](https://redirect.github.com/rust-lang/rust/compare/1.85.1...1.86.0)

\==========================

<a id="1.86.0-Language"></a>

## Language

-   [Stabilize upcasting trait objects to supertraits.](https://redirect.github.com/rust-lang/rust/pull/134367)
-   [Allow safe functions to be marked with the `#[target_feature]` attribute.](https://redirect.github.com/rust-lang/rust/pull/134090)
-   [The `missing_abi` lint now warns-by-default.](https://redirect.github.com/rust-lang/rust/pull/132397)
-   Rust now lints about double negations, to catch cases that might have intended to be a prefix decrement operator (`--x`) as written in other languages. This was previously a clippy lint, `clippy::double_neg`, and is [now available directly in Rust as `double_negations`.](https://redirect.github.com/rust-lang/rust/pull/126604)
-   [More pointers are now detected as definitely not-null based on their alignment in const eval.](https://redirect.github.com/rust-lang/rust/pull/133700)
-   [Empty `repr()` attribute applied to invalid items are now correctly rejected.](https://redirect.github.com/rust-lang/rust/pull/133925)
-   [Inner attributes `#![test]` and `#![rustfmt::skip]` are no longer accepted in more places than intended.](https://redirect.github.com/rust-lang/rust/pull/134276)

<a id="1.86.0-Compiler"></a>

## Compiler

-   [Debug-assert that raw pointers are non-null on access.](https://redirect.github.com/rust-lang/rust/pull/134424)
-   [Change `-O` to mean `-C opt-level=3` instead of `-C opt-level=2` to match Cargo's defaults.](https://redirect.github.com/rust-lang/rust/pull/135439)
-   [Fix emission of `overflowing_literals` under certain macro environments.](https://redirect.github.com/rust-lang/rust/pull/136393)

<a id="1.86.0-Platform-Support"></a>

## Platform Support

-   [Replace `i686-unknown-redox` target with `i586-unknown-redox`.](https://redirect.github.com/rust-lang/rust/pull/136698)
-   [Increase baseline CPU of `i686-unknown-hurd-gnu` to Pentium 4.](https://redirect.github.com/rust-lang/rust/pull/136700)
-   New tier 3 targets:
    -   [`{aarch64-unknown,x86_64-pc}-nto-qnx710_iosock`](https://redirect.github.com/rust-lang/rust/pull/133631).
        For supporting Neutrino QNX 7.1 with `io-socket` network stack.
    -   [`{aarch64-unknown,x86_64-pc}-nto-qnx800`](https://redirect.github.com/rust-lang/rust/pull/133631).
        For supporting Neutrino QNX 8.0 (`no_std`-only).
    -   [`{x86_64,i686}-win7-windows-gnu`](https://redirect.github.com/rust-lang/rust/pull/134609).
        Intended for backwards compatibility with Windows 7. `{x86_64,i686}-win7-windows-msvc` are the Windows MSVC counterparts that already exist as Tier 3 targets.
    -   [`amdgcn-amd-amdhsa`](https://redirect.github.com/rust-lang/rust/pull/134740).
    -   [`x86_64-pc-cygwin`](https://redirect.github.com/rust-lang/rust/pull/134999).
    -   [`{mips,mipsel}-mti-none-elf`](https://redirect.github.com/rust-lang/rust/pull/135074).
        Initial bare-metal support.
    -   [`m68k-unknown-none-elf`](https://redirect.github.com/rust-lang/rust/pull/135085).
    -   [`armv7a-nuttx-{eabi,eabihf}`, `aarch64-unknown-nuttx`, and `thumbv7a-nuttx-{eabi,eabihf}`](https://redirect.github.com/rust-lang/rust/pull/135757).

Refer to Rust's \[platform support page]\[platform-support-doc]
for more information on Rust's tiered platform support.

<a id="1.86.0-Libraries"></a>

## Libraries

-   The type of `FromBytesWithNulError` in `CStr::from_bytes_with_nul(bytes: &[u8]) -> Result<&Self, FromBytesWithNulError>` was [changed from an opaque struct to an enum](https://redirect.github.com/rust-lang/rust/pull/134143), allowing users to examine why the conversion failed.
-   [Remove `RustcDecodable` and `RustcEncodable`.](https://redirect.github.com/rust-lang/rust/pull/134272)
-   [Deprecate libtest's `--logfile` option.](https://redirect.github.com/rust-lang/rust/pull/134283)
-   [On recent versions of Windows, `std::fs::remove_file` will now remove read-only files.](https://redirect.github.com/rust-lang/rust/pull/134679)

<a id="1.86.0-Stabilized-APIs"></a>

## Stabilized APIs

-   [`{float}::next_down`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_down)
-   [`{float}::next_up`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_up)
-   [`<[_]>::get_disjoint_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_mut)
-   [`<[_]>::get_disjoint_unchecked_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_unchecked_mut)
-   [`slice::GetDisjointMutError`](https://doc.rust-lang.org/stable/std/slice/enum.GetDisjointMutError.html)
-   [`HashMap::get_disjoint_mut`](https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_mut)
-   [`HashMap::get_disjoint_unchecked_mut`](https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_unchecked_mut)
-   [`NonZero::count_ones`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.count_ones)
-   [`Vec::pop_if`](https://doc.rust-lang.org/std/vec/struct.Vec.html#method.pop_if)
-   [`sync::Once::wait`](https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait)
-   [`sync::Once::wait_force`](https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait_force)
-   [`sync::OnceLock::wait`](https://doc.rust-lang.org/stable/std/sync/struct.OnceLock.html#method.wait)

These APIs are now stable in const contexts:

-   [`hint::black_box`](https://doc.rust-lang.org/stable/std/hint/fn.black_box.html)
-   [`io::Cursor::get_mut`](https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.get_mut)
-   [`io::Cursor::set_position`](https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.set_position)
-   [`str::is_char_boundary`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.is_char_boundary)
-   [`str::split_at`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at)
-   [`str::split_at_checked`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_checked)
-   [`str::split_at_mut`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut)
-   [`str::split_at_mut_checked`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut_checked)

<a id="1.86.0-Cargo"></a>

## Cargo

-   [When merging, replace rather than combine configuration keys that refer to a program path and its arguments.](https://redirect.github.com/rust-lang/cargo/pull/15066/)
-   [Error if both `--package` and `--workspace` are passed but the requested package is missing.](https://redirect.github.com/rust-lang/cargo/pull/15071/) This was previously silently ignored, which was considered a bug since missing packages should be reported.
-   [Deprecate the token argument in `cargo login` to avoid shell history leaks.](https://redirect.github.com/rust-lang/cargo/pull/15057/)
-   [Simplify the implementation of `SourceID` comparisons.](https://redirect.github.com/rust-lang/cargo/pull/14980/) This may potentially change behavior if the canonicalized URL compares differently in alternative registries.

<a id="1.86.0-Rustdoc"></a>

## Rustdoc

-   [Add a sans-serif font setting.](https://redirect.github.com/rust-lang/rust/pull/133636)

<a id="1.86.0-Compatibility-Notes"></a>

## Compatibility Notes

-   [The `wasm_c_abi` future compatibility warning is now a hard error.](https://redirect.github.com/rust-lang/rust/pull/133951)
    Users of `wasm-bindgen` should upgrade to at least version 0.2.89, otherwise compilation will fail.
-   [Remove long-deprecated no-op attributes `#![no_start]` and `#![crate_id]`.](https://redirect.github.com/rust-lang/rust/pull/134300)
-   [The future incompatibility lint `cenum_impl_drop_cast` has been made into a hard error.](https://redirect.github.com/rust-lang/rust/pull/135964) This means it is now an error to cast a field-less enum to an integer if the enum implements `Drop`.
-   [SSE2 is now required for "i686" 32-bit x86 hard-float targets; disabling it causes a warning that will become a hard error eventually.](https://redirect.github.com/rust-lang/rust/pull/137037)
    To compile for pre-SSE2 32-bit x86, use a "i586" target instead.

<a id="1.86.0-Internal-Changes"></a>

## Internal Changes

These changes do not affect any public interfaces of Rust, but they represent
significant improvements to the performance or internals of rustc and related
tools.

-   [Build the rustc on AArch64 Linux with ThinLTO + PGO.](https://redirect.github.com/rust-lang/rust/pull/133807)
    The ARM 64-bit compiler (AArch64) on Linux is now optimized with ThinLTO and PGO, similar to the optimizations we have already performed for the x86-64 compiler on Linux. This should make it up to 30% faster.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMjcuMyIsInVwZGF0ZWRJblZlciI6IjM5LjIyNy4zIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-04-04 07:21:18 +00:00
CatsJuice
905349a139 chore(core): modify ai purchase button text (#11035) 2025-04-04 07:07:50 +00:00
renovate
3090724659 chore: bump up nestjs to v11.0.13 (#11271)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@nestjs/common](https://nestjs.com) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/common)) | [`11.0.12` -> `11.0.13`](https://renovatebot.com/diffs/npm/@nestjs%2fcommon/11.0.12/11.0.13) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fcommon/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fcommon/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fcommon/11.0.12/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fcommon/11.0.12/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@nestjs/core](https://nestjs.com) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/core)) | [`11.0.12` -> `11.0.13`](https://renovatebot.com/diffs/npm/@nestjs%2fcore/11.0.12/11.0.13) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fcore/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fcore/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fcore/11.0.12/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fcore/11.0.12/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@nestjs/platform-express](https://nestjs.com) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/platform-express)) | [`11.0.12` -> `11.0.13`](https://renovatebot.com/diffs/npm/@nestjs%2fplatform-express/11.0.12/11.0.13) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fplatform-express/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fplatform-express/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fplatform-express/11.0.12/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fplatform-express/11.0.12/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@nestjs/platform-socket.io](https://nestjs.com) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/platform-socket.io)) | [`11.0.12` -> `11.0.13`](https://renovatebot.com/diffs/npm/@nestjs%2fplatform-socket.io/11.0.12/11.0.13) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fplatform-socket.io/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fplatform-socket.io/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fplatform-socket.io/11.0.12/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fplatform-socket.io/11.0.12/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@nestjs/websockets](https://redirect.github.com/nestjs/nest) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/websockets)) | [`11.0.12` -> `11.0.13`](https://renovatebot.com/diffs/npm/@nestjs%2fwebsockets/11.0.12/11.0.13) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fwebsockets/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fwebsockets/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fwebsockets/11.0.12/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fwebsockets/11.0.12/11.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>nestjs/nest (@&#8203;nestjs/common)</summary>

### [`v11.0.13`](https://redirect.github.com/nestjs/nest/releases/tag/v11.0.13)

[Compare Source](https://redirect.github.com/nestjs/nest/compare/v11.0.12...v11.0.13)

#### v11.0.13 (2025-04-03)

##### Bug fixes

-   `platform-fastify`
    -   [#&#8203;14895](https://redirect.github.com/nestjs/nest/pull/14895) fix(fastify-adapter): global prefix exclusion path handling w/middleware ([@&#8203;KyleLilly](https://redirect.github.com/KyleLilly))
-   `microservices`
    -   [#&#8203;14869](https://redirect.github.com/nestjs/nest/pull/14869) fix(microservices): do not re-create client connection once get client by service name ([@&#8203;mingo023](https://redirect.github.com/mingo023))

##### Dependencies

-   `platform-express`
    -   [#&#8203;14883](https://redirect.github.com/nestjs/nest/pull/14883) fix(deps): update dependency express to v5.1.0 ([@&#8203;renovate\[bot\]](https://redirect.github.com/apps/renovate))
    -   [#&#8203;14817](https://redirect.github.com/nestjs/nest/pull/14817) fix(deps): update dependency multer to v1.4.5-lts.2 ([@&#8203;renovate\[bot\]](https://redirect.github.com/apps/renovate))
-   `platform-fastify`
    -   [#&#8203;14861](https://redirect.github.com/nestjs/nest/pull/14861) fix(deps): update dependency fastify to v5.2.2 ([@&#8203;renovate\[bot\]](https://redirect.github.com/apps/renovate))
    -   [#&#8203;14864](https://redirect.github.com/nestjs/nest/pull/14864) chore(deps): bump [@&#8203;fastify/cors](https://redirect.github.com/fastify/cors) from 11.0.0 to 11.0.1 ([@&#8203;dependabot\[bot\]](https://redirect.github.com/apps/dependabot))

##### Committers: 2

-   Kyle Lilly ([@&#8203;KyleLilly](https://redirect.github.com/KyleLilly))
-   Minh Ngo ([@&#8203;mingo023](https://redirect.github.com/mingo023))

</details>

<details>
<summary>nestjs/nest (@&#8203;nestjs/core)</summary>

### [`v11.0.13`](https://redirect.github.com/nestjs/nest/compare/v11.0.12...466e9b9e23a3f7d03dee772b6c611cb478de52e1)

[Compare Source](https://redirect.github.com/nestjs/nest/compare/v11.0.12...v11.0.13)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMDcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjIyNy4zIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-04-04 06:04:02 +00:00
CatsJuice
fa50743393 feat(core): hide all sidebars when resizing to a small screen (#11105) 2025-04-04 05:51:19 +00:00
CatsJuice
ae92aef1a4 feat(core): automatically focus on the Readwise token input when the window is focused (#11112) 2025-04-04 05:36:59 +00:00
CatsJuice
eebc7b751a feat(component): apply animation for tooltip, remove triangle (#11245) 2025-04-04 05:24:18 +00:00
CatsJuice
46d8d30e62 feat(editor): disable clickToDrag for edgeless toolbar shape and mindmap (#11310) 2025-04-04 05:10:05 +00:00
JimmFly
adbd41130c fix(admin): adjust import users dialog styles (#11436)
close AF-2456 AF-2454 AF-2441 AF-2422
2025-04-04 04:52:50 +00:00
JimmFly
7a1d5ab252 feat(core): upgrade icons package (#11435) 2025-04-04 04:52:49 +00:00
yoyoyohamapi
030af6f426 test(core): edgeless shape e2e (#11446)
### TL;DR

Add Edgeless shape ai e2e tests.

### What Changed

- Add Edgeless shape make it real e2e
- Add Edgeless shape generate image e2e
- Fix Edgeless generate headings e2e
2025-04-03 16:53:20 +00:00
pengx17
133be72ac2 refactor(electron): encoding recording on the fly (#11457)
fix AF-2460, AF-2463

When recording is started, we start polling the pending raw buffers that are waiting for encoding. The buffers are determined by the cursor of the original raw buffer file. When recording is stopped, we will flush the pending buffers and wrap the encoded chunks into WebM.

```mermaid
sequenceDiagram
    participant App as App/UI
    participant RecordingFeature as Recording Feature
    participant StateMachine as State Machine
    participant FileSystem as File System
    participant StreamEncoder as Stream Encoder
    participant OpusEncoder as Opus Encoder
    participant WebM as WebM Muxer

    Note over App,WebM: Recording Start Flow
    App->>RecordingFeature: startRecording()
    RecordingFeature->>StateMachine: dispatch(START_RECORDING)
    StateMachine-->>RecordingFeature: status: 'recording'
    RecordingFeature->>StreamEncoder: createStreamEncoder(id, {sampleRate, channels})

    Note over App,WebM: Streaming Flow
    loop Audio Data Streaming
        RecordingFeature->>FileSystem: Write raw audio chunks to .raw file
        StreamEncoder->>FileSystem: Poll raw audio data
        FileSystem-->>StreamEncoder: Raw audio chunks
        StreamEncoder->>OpusEncoder: Encode chunks
        OpusEncoder-->>StreamEncoder: Encoded Opus frames
    end

    Note over App,WebM: Recording Stop Flow
    App->>RecordingFeature: stopRecording()
    RecordingFeature->>StateMachine: dispatch(STOP_RECORDING)
    StateMachine-->>RecordingFeature: status: 'stopped'
    StreamEncoder->>OpusEncoder: flush()
    StreamEncoder->>WebM: muxToWebM(encodedChunks)
    WebM-->>RecordingFeature: WebM buffer
    RecordingFeature->>FileSystem: Save as .opus file
    RecordingFeature->>StateMachine: dispatch(SAVE_RECORDING)
```
2025-04-03 15:56:53 +00:00
pengx17
8ce10e6d0a feat(electron): add tray menu settings (#11437)
fix AF-2447
2025-04-03 15:56:52 +00:00
akumatus
0aeb3041b5 feat(core): add ai chat composer (#11443)
Close [BS-2583](https://linear.app/affine-design/issue/BS-2583).

![截屏2025-04-03 15.11.43.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/5b545486-7c8b-4f09-bf65-9adeb482dfa9.png)
2025-04-03 14:53:50 +00:00
akumatus
6cf182190c refactor(core): remove useless chat-input components (#11426)
Close [BS-2583](https://linear.app/affine-design/issue/BS-2583).
2025-04-03 14:53:50 +00:00
akumatus
6033baeb86 refactor(core): add useAIChatConfig hook (#11424)
Close [BS-2583](https://linear.app/affine-design/issue/BS-2583).
2025-04-03 14:53:49 +00:00
fundon
363476a46c fix(editor): add hoverable container for image and surface-ref (#11458)
Closes: [BS-3012](https://linear.app/affine-design/issue/BS-3012/hover-yuan素时冲突)
2025-04-03 13:43:55 +00:00
L-Sun
90a3bd53cd chore(editor): telemetry for slash menu (#11438)
Close [BS-2959](https://linear.app/affine-design/issue/BS-2959/slash-menu埋点)
2025-04-03 13:31:09 +00:00
L-Sun
f2865c7bb0 fix(editor): prevent white edges in grid background by rounding grid gap (#11454)
Close [BS-2147](https://linear.app/affine-design/issue/BS-2147/%E7%A7%BB%E5%8A%A8%E7%AB%AF%EF%BC%8C%E5%8D%95%E6%8C%87%E6%BB%91%E5%8A%A8%E6%97%B6%E4%BC%9A%E5%87%BA%E7%8E%B0%E5%AF%B9%E9%BD%90%E7%BA%BF)
2025-04-03 13:17:47 +00:00
forehalo
2533a92873 chore(server): avoid config object been modified (#11452) 2025-04-03 12:57:29 +00:00
forehalo
6939e80827 chore(server): never reuse cls id for job handler (#11449) 2025-04-03 12:26:02 +00:00
forehalo
c8d22d97d5 refactor: webpack config (#11421) 2025-04-03 11:55:56 +00:00
fundon
565d7b2b1e fix(editor): should not show inner toolbar of surface-ref in edgeless (#11453)
Closes: [BS-3015](https://linear.app/affine-design/issue/BS-3015/toolbar-有时会出现空状态且被显示) [BS-3023](https://linear.app/affine-design/issue/BS-3023/surface-ref-inner-toolbar-的标题圆角)
2025-04-03 11:13:09 +00:00
EYHN
a9ba54a92e feat(core): adjust notification style (#11455) 2025-04-03 10:59:37 +00:00
EYHN
093bffdf5c fix(core): fix notification list (#11423) 2025-04-03 10:44:32 +00:00
Saul-Mirone
01429f8f66 fix(editor): clear remote selection when editor is deactive (#11450)
Closes: BS-3022
2025-04-03 09:36:28 +00:00
Saul-Mirone
773db7860a feat(editor): not sync selection from awareness (#11420) 2025-04-03 09:22:26 +00:00
L-Sun
727c540fda fix(editor): disable pointer event in surface-ref content (#11448)
Close [BS-3016](https://linear.app/affine-design/issue/BS-3016/当在-page-下框选时,如果遇到-affine-surface-ref-block-则会阻断框选)
Close [BS-3020](https://linear.app/affine-design/issue/BS-3020/inserted-frame-%E7%82%B9%E5%87%BB%E9%87%8C%E9%9D%A2%E7%9A%84%E5%9B%BE%E7%89%87%E4%BC%9A%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80)
2025-04-03 09:05:27 +00:00
L-Sun
56e98f26ff refactor(editor): update surface-ref placeholder (#11440)
Close [BS-2996](https://linear.app/affine-design/issue/BS-2996/删除的-inserted-frame-需要更新样式)
2025-04-03 09:05:27 +00:00
fundon
dd109459a9 fix(editor): adjust button background color of inner toolbar in dark mode (#11439)
Closes: [BS-3018](https://linear.app/affine-design/issue/BS-3018/在-dark-主题下,imagesurface-ref-inner-toolbar-没背景色)
2025-04-03 08:39:53 +00:00
fundon
e334347592 fix(editor): disable touch events on toolbar (#11447)
Closes: [BS-3021](https://linear.app/affine-design/issue/BS-3021/在-toolbar-上禁止-touch-事件冒泡,触发白板缩放)
2025-04-03 08:27:06 +00:00
L-Sun
64ed23d473 fix(editor): missing refFlavour in creation of surface-ref (#11445) 2025-04-03 07:57:10 +00:00
darkskygit
cfde175298 chore: remove structure output limit (#11444) 2025-04-03 07:45:03 +00:00
darkskygit
b4c643e8bc chore(server): improve gql types (#11441) 2025-04-03 07:30:51 +00:00
fengmk2
70a318f1c4 fix(server): auto-accept pending invitations by link in team workspace (#11433)
close CLOUD-192
2025-04-03 07:19:14 +00:00
pengx17
a4c76ff485 fix(editor): link popover ui in modal (#11415)
fix AF-2316
2025-04-03 05:11:46 +00:00
donteatfriedrice
9206145a48 feat(editor): remove embed iframe feature flag (#11432)
Close [BS-3019](https://linear.app/affine-design/issue/BS-3019/remove-embed-iframe-feature-flag)
2025-04-03 04:59:52 +00:00
L-Sun
f2646796fc refactor(editor): remove unused modal (#11428) 2025-04-03 04:21:20 +00:00
fundon
a1500e3ee1 fix(editor): textarea not focusing in AI panel (#11429)
Closes: [BS-3006](https://linear.app/affine-design/issue/BS-3006/insider上面,圈选yuan素后,ad-hoc的ai对话框焦点控制有大问题(无法对焦,总是会跳走))
2025-04-03 03:27:26 +00:00
yoyoyohamapi
c61df18ab9 test(core): chat with collection & tags (#11388)
### TL:DR

* AI chat with collection E2E
* AI chat with tag E2E

> Close BS-3007
2025-04-03 02:46:08 +00:00
fundon
03dd073cb4 fix(editor): add recent open doc with mode button (#11419)
Closes: [BS-3013](https://linear.app/affine-design/issue/BS-3013/open-doc-分开两个按钮:一个快捷按钮和一个菜单)

Split into two buttons: `recent open doc with mode button` and `open doc with dropdown menu`.
2025-04-03 02:06:14 +00:00
L-Sun
b53b2acfe3 fix(ios): mobile modal occlusion issues (#11427)
Close [BS-2925](https://linear.app/affine-design/issue/BS-2925/移动端-dialog-遮挡相关)
2025-04-03 01:51:57 +00:00
L-Sun
80a663efe7 fix(ios): adjust bootom padding of body when keyboard toolbar existed (#11410)
Close [BS-2919](https://linear.app/affine-design/issue/BS-2919/【移动端】ios-页面底部点几,页面定位有问题,光标和浮层重叠,并且看不到新添加的-block)
Close [BS-2918](https://linear.app/affine-design/issue/BS-2918/【移动端】ios-添加标题无法展示对应-block,滑动页面也无效,光标位置也不对)

## Changes
- Fixed body padding calculation when keyboard toolbar is present
- Removed redundant position controller logic and simplified the implementation
2025-04-03 01:51:57 +00:00
L-Sun
5109ceccec fix(ios): can not open keyboard in editor (#11401)
Close [BS-2917](https://linear.app/affine-design/issue/BS-2917/【移动端】ios-唤起键盘的edge-case)

This PR fixes an issue where the keyboard cannot be re-triggered on iOS devices after the keyboard toolbar is hidden or executing some actions in keyboard toolbar.

Key changes:
- Preserve and restore the initial input mode when keyboard toolbar shows/hides
- Improve virtual keyboard service interface to better handle keyboard state
- Add proper cleanup of input mode state in component lifecycle
2025-04-03 01:51:56 +00:00
fundon
2026f12daa fix(editor): improve color preview in custom tab of color picker (#11411)
Closes: [BS-3002](https://linear.app/affine-design/issue/BS-3002/color-picker-上-lightdark-按钮颜色丢失)

[Screen Recording 2025-04-02 at 17.19.34.mov <span class="graphite__hidden">(uploaded via Graphite)</span> <img class="graphite__hidden" src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/8ypiIKZXudF5a0tIgIzf/13288c59-ef11-4cbb-aec7-934a8a689feb.mov" />](https://app.graphite.dev/media/video/8ypiIKZXudF5a0tIgIzf/13288c59-ef11-4cbb-aec7-934a8a689feb.mov)
2025-04-03 01:38:27 +00:00
fengmk2
a5eb1b9985 fix(server): correct notification pagination by using 'lt' instead of 'gt' for createdAt (#11430) 2025-04-03 01:25:35 +00:00
EYHN
bd5428e311 feat(core): adjust notification button style (#11425) 2025-04-02 15:41:14 +00:00
darkskygit
90c43356c1 fix(server): copilot test condition (#11417) 2025-04-02 14:59:22 +00:00
pengx17
abfbf07712 fix(native): properly cleanup resource when activating device failed (#11380) 2025-04-02 14:46:34 +00:00
fengmk2
f3e9b4bbf0 feat(server): search workspace users support case insensitive (#11422)
close CLOUD-193
2025-04-02 14:33:07 +00:00
pengx17
90c3c4bf7f feat(electron): recording popup ux (#11403)
fix AF-2444, AF-2443
2025-04-02 14:17:53 +00:00
pengx17
2adb8e1404 feat(core): allow retry transcription (#11416) 2025-04-02 14:05:12 +00:00
akumatus
c5c6978136 refactor(core): ai input (#11381)
Close [BS-2758](https://linear.app/affine-design/issue/BS-2758).
Support [BS-2583](https://linear.app/affine-design/issue/BS-2583).

### What changed?
- Extend `ChatPanelInput` and `ChatBlockInput` from the same abstract class `AIChatInput` to reduce duplication of code.
- Unify the context interface of `chat-panel` and `chat-block`.
  - Rename `items` field to `messages`.
  - Remove duplicated type declare.
2025-04-02 13:37:30 +00:00
fengmk2
c8392d0cbe fix(server): auto-accept pending invitations by link (#11409)
close CLOUD-192
2025-04-02 13:24:03 +00:00
fundon
fde97dcf78 fix(editor): improve some experiences on note toolbar (#11413)
Closes: [BS-3004](https://linear.app/affine-design/issue/BS-3004/page-block-ui-adjust)
2025-04-02 13:11:33 +00:00
darkskygit
0f18585631 chore(server): update sign domain description (#11407) 2025-04-02 12:58:03 +00:00
forehalo
1386a66579 chore(server): hide not configurable module (#11406) 2025-04-02 12:44:20 +00:00
EYHN
07b1c2fa05 fix(core): fix member search loading state (#11418) 2025-04-02 12:23:54 +00:00
darkskygit
501b5f6a97 feat(server): retry transcript job (#11414) 2025-04-02 12:02:07 +00:00
Brooooooklyn
3b13affa58 docs: add blaze sponsor info (#11377) 2025-04-02 11:35:12 +00:00
darkskygit
94ddcc7a7a chore(server): move embedding job namespace (#11397) 2025-04-02 10:51:36 +00:00
yoyoyohamapi
c4c6cdb6f2 fix(core): prevent input event propagation (#11307)
### TL;DR

Prevent input event of search propagate to editor

> CLOSE BS-2832
2025-04-02 10:22:25 +00:00
forehalo
35bea20b80 chore(server): adjust job config (#11405) 2025-04-02 09:48:46 +00:00
forehalo
85d176ce6f chore(server): customize config merge logic (#11400) 2025-04-02 09:48:45 +00:00
forehalo
b21a0b4520 chore: release with config.schema.json (#11391) 2025-04-02 09:48:45 +00:00
fengmk2
432634c5a3 feat(server): enable job queue log (#11390) 2025-04-02 09:34:13 +00:00
Flrande
51b3f2b057 fix(editor): do not display format bar with embed node (#11371)
Close [BS-2895: 点击inline名字区域不需要显示format toolbar](https://linear.app/affine-design/issue/BS-2895/点击inline名字区域不需要显示format-toolbar)
2025-04-02 09:21:32 +00:00
pengx17
6d1fe37e4c chore(core): remove audio block feature flag (#11399)
fix
AF-2445
2025-04-02 09:07:19 +00:00
EYHN
a3e4978354 feat(ios): add markdown import api (#11394) 2025-04-02 08:54:26 +00:00
donteatfriedrice
b8fd6370f8 fix(editor): remove embed iframe toolbar edit item (#11396) 2025-04-02 08:40:56 +00:00
CatsJuice
c6d4787954 feat(core): remove integration feature flag (#11393) 2025-04-02 08:28:10 +00:00
github-actions[bot]
90bf003ab8 chore(i18n): sync translations (#10396)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-04-02 07:57:36 +00:00
fengmk2
e125b2a7c0 fix(server): should use error instance stack (#11392) 2025-04-02 07:12:18 +00:00
doouding
36b1ca4327 feat: render placeholder in edgeless mode (#11387)
Complete [BS-2997](https://linear.app/affine-design/issue/BS-2997/在白板上渲染-inserted-frame-group-时提供占位)
2025-04-02 06:59:25 +00:00
doouding
ef76c83184 fix: connector should remain the same when its target or source switch to other
shape type (#11369)

Fixes [BS-1431](https://linear.app/affine-design/issue/BS-1431/改变-shape-形状后,connector-丢失)
2025-04-02 05:10:30 +00:00
pengx17
c20514f269 fix(core): audio player loading styles (#11384)
fix BS-2998
2025-04-02 04:58:27 +00:00
pengx17
08eb248cb4 fix(core): add toDocSearchParams for better typeschecking doc search params (#11383) 2025-04-02 04:46:22 +00:00
darkskygit
1b5df6b75e fix(server): handle empty transcript result correctly (#11385) 2025-04-02 04:33:35 +00:00
darkskygit
add4a5859d fix(server): handle s3 notfound error (#11386) 2025-04-02 04:20:06 +00:00
pengx17
f091ac7e74 fix(core): bidi panel show button color (#11374)
fix AF-2394
2025-04-02 03:48:14 +00:00
forehalo
6833c2a2dd chore: missing env 2025-04-02 11:03:10 +08:00
forehalo
5a955d9f70 chore: fix beta deployment 2025-04-02 10:47:01 +08:00
pengx17
679e9e1966 feat(core): add copy link to doc peek view controls (#11373)
fix AF-2314
2025-04-02 02:21:32 +00:00
fundon
d9fade8045 fix(core): should display date as original title of journal (#11375)
Closes: [BS-2991](https://linear.app/affine-design/issue/BS-2991/linked-journal添加alias后,toolbar上获取不到标题)
2025-04-02 01:24:43 +00:00
L-Sun
8d9f5327a1 chore(editor): update slash menu tooltips of latex and loom (#11350)
Close [BS-2983](https://linear.app/affine-design/issue/BS-2983/slash-menu-loom没有tooltip)
Close [BS-2953](https://linear.app/affine-design/issue/BS-2982/slash-menu中latex没有tooltip)
2025-04-02 01:11:18 +00:00
pengx17
b759a22221 fix(electron): global tap should activate input device if it is not active (#11370)
fix AF-2442
2025-04-01 15:34:32 +00:00
darkskygit
f2e2072878 feat(server): s3 presigned url (#11364) 2025-04-01 15:14:07 +00:00
forehalo
dad858014f feat(admin): adapt new config system (#11360)
feat(server): add test mail api

feat(admin): adapt new config system
2025-04-01 15:00:10 +00:00
fundon
8427293d36 fix(core): fix target block cannot be reached when clicking affine-link multiple times (#10473)
Closes: [BS-2702](https://linear.app/affine-design/issue/BS-2702/超链接无法滚动到指定block)
2025-04-01 14:46:35 +00:00
CatsJuice
d8997576a5 chore(core): wrap 'get access token' for connecting readwise (#11147) 2025-04-01 14:33:00 +00:00
pengx17
2d304adf15 fix(electron): incorrect app allow list logic for recording (#11368) 2025-04-01 14:19:29 +00:00
Saul-Mirone
7f98420061 chore: allow cursor in none-contenteditable blocks (#11366) 2025-04-01 13:20:08 +00:00
darkskygit
4e1e91120f chore(server): omit system message in error (#11365) 2025-04-01 13:06:33 +00:00
forehalo
eb219b2c48 chore(server): watch storages config updates (#11367) 2025-04-01 12:52:45 +00:00
fundon
f374f2695f fix(core): add shortcuts to open doc dropdown menu (#11358)
Closes: [BS-2992](https://linear.app/affine-design/issue/BS-2992/走查toolbar上的open-in-button)

[Screen Recording 2025-04-01 at 16.37.57.mov <span class="graphite__hidden">(uploaded via Graphite)</span> <img class="graphite__hidden" src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/8ypiIKZXudF5a0tIgIzf/cf4b1baf-aa2c-4f37-9c62-f7202d0f7c42.mov" />](https://app.graphite.dev/media/video/8ypiIKZXudF5a0tIgIzf/cf4b1baf-aa2c-4f37-9c62-f7202d0f7c42.mov)
2025-04-01 12:39:13 +00:00
yoyoyohamapi
bd30a73db8 fix(core): do not show AI avatar during generating (#11363)
> CLOSE BS-2989
2025-04-01 12:11:28 +00:00
L-Sun
cad4dde4b1 fix(editor): missing doc mode extension in frame preview (#11348)
Close [BS-2777](https://linear.app/affine-design/issue/BS-2777/frame-preview里的embed-card展示的doc-mode不对)
2025-04-01 11:57:53 +00:00
Saul-Mirone
bed02f2520 fix(editor): wrong deactive logic (#11361)
Closes: BS-2591
2025-04-01 11:44:24 +00:00
EYHN
521eb09a7a fix(nbstore): adjust indexer logic (#11355) 2025-04-01 11:31:58 +00:00
EYHN
cb7b5caa74 fix(ios): fix nbstore worker (#11362) 2025-04-01 11:11:26 +00:00
forehalo
6276732efc chore(server): reschedule doc merging jobs (#11318) 2025-04-01 10:57:54 +00:00
renovate
d38458b733 chore: bump up Node.js to v22 (#11357)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [node](https://nodejs.org) ([source](https://redirect.github.com/nodejs/node)) | major | `18` -> `22` |

---

### Release Notes

<details>
<summary>nodejs/node (node)</summary>

### [`v22.14.0`](https://redirect.github.com/nodejs/node/releases/tag/v22.14.0): 2025-02-11, Version 22.14.0 &#x27;Jod&#x27; (LTS), @&#8203;aduh95

[Compare Source](https://redirect.github.com/nodejs/node/compare/v22.13.1...v22.14.0)

##### Notable Changes

-   \[[`82a9000e9e`](https://redirect.github.com/nodejs/node/commit/82a9000e9e)] - **crypto**: update root certificates to NSS 3.107 (Node.js GitHub Bot) [#&#8203;56566](https://redirect.github.com/nodejs/node/pull/56566)
-   \[[`b7fe54fc88`](https://redirect.github.com/nodejs/node/commit/b7fe54fc88)] - **(SEMVER-MINOR)** **fs**: allow `exclude` option in globs to accept glob patterns (Daeyeon Jeong) [#&#8203;56489](https://redirect.github.com/nodejs/node/pull/56489)
-   \[[`3ac92ef607`](https://redirect.github.com/nodejs/node/commit/3ac92ef607)] - **(SEMVER-MINOR)** **lib**: add typescript support to STDIN eval (Marco Ippolito) [#&#8203;56359](https://redirect.github.com/nodejs/node/pull/56359)
-   \[[`1614e8e7bc`](https://redirect.github.com/nodejs/node/commit/1614e8e7bc)] - **(SEMVER-MINOR)** **module**: add ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX (Marco Ippolito) [#&#8203;56610](https://redirect.github.com/nodejs/node/pull/56610)
-   \[[`6d6cffa9cc`](https://redirect.github.com/nodejs/node/commit/6d6cffa9cc)] - **(SEMVER-MINOR)** **module**: add `findPackageJSON` util (Jacob Smith) [#&#8203;55412](https://redirect.github.com/nodejs/node/pull/55412)
-   \[[`d35333ae18`](https://redirect.github.com/nodejs/node/commit/d35333ae18)] - **(SEMVER-MINOR)** **process**: add process.ref() and process.unref() methods (James M Snell) [#&#8203;56400](https://redirect.github.com/nodejs/node/pull/56400)
-   \[[`07ff3ddcb5`](https://redirect.github.com/nodejs/node/commit/07ff3ddcb5)] - **(SEMVER-MINOR)** **sqlite**: support TypedArray and DataView in `StatementSync` (Alex Yang) [#&#8203;56385](https://redirect.github.com/nodejs/node/pull/56385)
-   \[[`94d3fe1b62`](https://redirect.github.com/nodejs/node/commit/94d3fe1b62)] - **(SEMVER-MINOR)** **src**: add --disable-sigusr1 to prevent signal i/o thread (Rafael Gonzaga) [#&#8203;56441](https://redirect.github.com/nodejs/node/pull/56441)
-   \[[`5afffb4415`](https://redirect.github.com/nodejs/node/commit/5afffb4415)] - **(SEMVER-MINOR)** **src,worker**: add isInternalWorker (Carlos Espa) [#&#8203;56469](https://redirect.github.com/nodejs/node/pull/56469)
-   \[[`697a851fb3`](https://redirect.github.com/nodejs/node/commit/697a851fb3)] - **(SEMVER-MINOR)** **test_runner**: add TestContext.prototype.waitFor() (Colin Ihrig) [#&#8203;56595](https://redirect.github.com/nodejs/node/pull/56595)
-   \[[`047537b48c`](https://redirect.github.com/nodejs/node/commit/047537b48c)] - **(SEMVER-MINOR)** **test_runner**: add t.assert.fileSnapshot() (Colin Ihrig) [#&#8203;56459](https://redirect.github.com/nodejs/node/pull/56459)
-   \[[`926cf84e95`](https://redirect.github.com/nodejs/node/commit/926cf84e95)] - **(SEMVER-MINOR)** **test_runner**: add assert.register() API (Colin Ihrig) [#&#8203;56434](https://redirect.github.com/nodejs/node/pull/56434)
-   \[[`c658a8afdf`](https://redirect.github.com/nodejs/node/commit/c658a8afdf)] - **(SEMVER-MINOR)** **worker**: add eval ts input (Marco Ippolito) [#&#8203;56394](https://redirect.github.com/nodejs/node/pull/56394)

##### Commits

-   \[[`bad1ad8650`](https://redirect.github.com/nodejs/node/commit/bad1ad8650)] - **assert**: make myers_diff function more performant (Giovanni Bucci) [#&#8203;56303](https://redirect.github.com/nodejs/node/pull/56303)
-   \[[`e222e36f3b`](https://redirect.github.com/nodejs/node/commit/e222e36f3b)] - **assert**: make partialDeepStrictEqual work with urls and File prototypes (Giovanni Bucci) [#&#8203;56231](https://redirect.github.com/nodejs/node/pull/56231)
-   \[[`e232789fe2`](https://redirect.github.com/nodejs/node/commit/e232789fe2)] - **assert**: show diff when doing partial comparisons (Giovanni Bucci) [#&#8203;56211](https://redirect.github.com/nodejs/node/pull/56211)
-   \[[`c99de1fdcf`](https://redirect.github.com/nodejs/node/commit/c99de1fdcf)] - **assert**: make partialDeepStrictEqual throw when comparing \[0] with \[-0] (Giovanni) [#&#8203;56237](https://redirect.github.com/nodejs/node/pull/56237)
-   \[[`2386fd5840`](https://redirect.github.com/nodejs/node/commit/2386fd5840)] - **benchmark**: add validateStream to styleText bench (Rafael Gonzaga) [#&#8203;56556](https://redirect.github.com/nodejs/node/pull/56556)
-   \[[`b197dfa7ec`](https://redirect.github.com/nodejs/node/commit/b197dfa7ec)] - **build**: fix GN build for ngtcp2 (Cheng) [#&#8203;56300](https://redirect.github.com/nodejs/node/pull/56300)
-   \[[`2a3cdd34ff`](https://redirect.github.com/nodejs/node/commit/2a3cdd34ff)] - **build**: test macos-13 on GitHub actions (Michaël Zasso) [#&#8203;56307](https://redirect.github.com/nodejs/node/pull/56307)
-   \[[`12f716be0a`](https://redirect.github.com/nodejs/node/commit/12f716be0a)] - **build**: build v8 with -fvisibility=hidden on macOS (Joyee Cheung) [#&#8203;56275](https://redirect.github.com/nodejs/node/pull/56275)
-   \[[`c5ca15bd34`](https://redirect.github.com/nodejs/node/commit/c5ca15bd34)] - **child_process**: fix parsing messages with splitted length field (Maksim Gorkov) [#&#8203;56106](https://redirect.github.com/nodejs/node/pull/56106)
-   \[[`8346b8fc2c`](https://redirect.github.com/nodejs/node/commit/8346b8fc2c)] - **crypto**: add missing return value check (Michael Dawson) [#&#8203;56615](https://redirect.github.com/nodejs/node/pull/56615)
-   \[[`82a9000e9e`](https://redirect.github.com/nodejs/node/commit/82a9000e9e)] - **crypto**: update root certificates to NSS 3.107 (Node.js GitHub Bot) [#&#8203;56566](https://redirect.github.com/nodejs/node/pull/56566)
-   \[[`890eef20a1`](https://redirect.github.com/nodejs/node/commit/890eef20a1)] - **crypto**: fix checkPrime crash with large buffers (Santiago Gimeno) [#&#8203;56559](https://redirect.github.com/nodejs/node/pull/56559)
-   \[[`5edb7b5e87`](https://redirect.github.com/nodejs/node/commit/5edb7b5e87)] - **crypto**: fix warning of ignoring return value (Cheng) [#&#8203;56527](https://redirect.github.com/nodejs/node/pull/56527)
-   \[[`b89f123a0b`](https://redirect.github.com/nodejs/node/commit/b89f123a0b)] - **crypto**: make generatePrime/checkPrime interruptible (James M Snell) [#&#8203;56460](https://redirect.github.com/nodejs/node/pull/56460)
-   \[[`63c1859e01`](https://redirect.github.com/nodejs/node/commit/63c1859e01)] - **deps**: update corepack to 0.31.0 (Node.js GitHub Bot) [#&#8203;56795](https://redirect.github.com/nodejs/node/pull/56795)
-   \[[`a48430d4d3`](https://redirect.github.com/nodejs/node/commit/a48430d4d3)] - **deps**: move inspector_protocol to deps (Chengzhong Wu) [#&#8203;56649](https://redirect.github.com/nodejs/node/pull/56649)
-   \[[`74cccc824f`](https://redirect.github.com/nodejs/node/commit/74cccc824f)] - **deps**: macro ENODATA is deprecated in libc++ (Cheng) [#&#8203;56698](https://redirect.github.com/nodejs/node/pull/56698)
-   \[[`fa869ea0f2`](https://redirect.github.com/nodejs/node/commit/fa869ea0f2)] - **deps**: fixup some minor coverity warnings (James M Snell) [#&#8203;56612](https://redirect.github.com/nodejs/node/pull/56612)
-   \[[`1a4fa2b015`](https://redirect.github.com/nodejs/node/commit/1a4fa2b015)] - **deps**: update amaro to 0.3.0 (Node.js GitHub Bot) [#&#8203;56568](https://redirect.github.com/nodejs/node/pull/56568)
-   \[[`b47076fd82`](https://redirect.github.com/nodejs/node/commit/b47076fd82)] - **deps**: update amaro to 0.2.2 (Node.js GitHub Bot) [#&#8203;56568](https://redirect.github.com/nodejs/node/pull/56568)
-   \[[`46bd4b8731`](https://redirect.github.com/nodejs/node/commit/46bd4b8731)] - **deps**: update simdutf to 6.0.3 (Node.js GitHub Bot) [#&#8203;56567](https://redirect.github.com/nodejs/node/pull/56567)
-   \[[`8ead9c693b`](https://redirect.github.com/nodejs/node/commit/8ead9c693b)] - **deps**: update simdutf to 5.7.2 (Node.js GitHub Bot) [#&#8203;56388](https://redirect.github.com/nodejs/node/pull/56388)
-   \[[`18d4b502af`](https://redirect.github.com/nodejs/node/commit/18d4b502af)] - **deps**: update amaro to 0.2.1 (Node.js GitHub Bot) [#&#8203;56390](https://redirect.github.com/nodejs/node/pull/56390)
-   \[[`d938d7cc86`](https://redirect.github.com/nodejs/node/commit/d938d7cc86)] - **deps**: update googletest to [`7d76a23`](https://redirect.github.com/nodejs/node/commit/7d76a23) (Node.js GitHub Bot) [#&#8203;56387](https://redirect.github.com/nodejs/node/pull/56387)
-   \[[`9761e7dccb`](https://redirect.github.com/nodejs/node/commit/9761e7dccb)] - **deps**: update googletest to [`e54519b`](https://redirect.github.com/nodejs/node/commit/e54519b) (Node.js GitHub Bot) [#&#8203;56370](https://redirect.github.com/nodejs/node/pull/56370)
-   \[[`8319dc6bc5`](https://redirect.github.com/nodejs/node/commit/8319dc6bc5)] - **deps**: update ngtcp2 to 1.10.0 (Node.js GitHub Bot) [#&#8203;56334](https://redirect.github.com/nodejs/node/pull/56334)
-   \[[`6eacd19d6a`](https://redirect.github.com/nodejs/node/commit/6eacd19d6a)] - **deps**: update simdutf to 5.7.0 (Node.js GitHub Bot) [#&#8203;56332](https://redirect.github.com/nodejs/node/pull/56332)
-   \[[`28bec2dda3`](https://redirect.github.com/nodejs/node/commit/28bec2dda3)] - **diagnostics_channel**: capture console messages (Stephen Belanger) [#&#8203;56292](https://redirect.github.com/nodejs/node/pull/56292)
-   \[[`d519d33502`](https://redirect.github.com/nodejs/node/commit/d519d33502)] - **doc**: update macOS and Xcode versions for releases (Michaël Zasso) [#&#8203;56337](https://redirect.github.com/nodejs/node/pull/56337)
-   \[[`fcfe650507`](https://redirect.github.com/nodejs/node/commit/fcfe650507)] - **doc**: add note for features using `InternalWorker` with permission model (Antoine du Hamel) [#&#8203;56706](https://redirect.github.com/nodejs/node/pull/56706)
-   \[[`efbba182b5`](https://redirect.github.com/nodejs/node/commit/efbba182b5)] - **doc**: add entry to changelog about SQLite Session Extension (Bart Louwers) [#&#8203;56318](https://redirect.github.com/nodejs/node/pull/56318)
-   \[[`31bf9c7dd9`](https://redirect.github.com/nodejs/node/commit/31bf9c7dd9)] - **doc**: move anatoli to emeritus (Michael Dawson) [#&#8203;56592](https://redirect.github.com/nodejs/node/pull/56592)
-   \[[`6096e38c7c`](https://redirect.github.com/nodejs/node/commit/6096e38c7c)] - **doc**: fix styles of the expandable TOC (Antoine du Hamel) [#&#8203;56755](https://redirect.github.com/nodejs/node/pull/56755)
-   \[[`d423638281`](https://redirect.github.com/nodejs/node/commit/d423638281)] - **doc**: add "Skip to content" button (Antoine du Hamel) [#&#8203;56750](https://redirect.github.com/nodejs/node/pull/56750)
-   \[[`edeb157d75`](https://redirect.github.com/nodejs/node/commit/edeb157d75)] - **doc**: improve accessibility of expandable lists (Antoine du Hamel) [#&#8203;56749](https://redirect.github.com/nodejs/node/pull/56749)
-   \[[`1a79e87687`](https://redirect.github.com/nodejs/node/commit/1a79e87687)] - **doc**: add note regarding commit message trailers (Dario Piotrowicz) [#&#8203;56736](https://redirect.github.com/nodejs/node/pull/56736)
-   \[[`927c7e47e4`](https://redirect.github.com/nodejs/node/commit/927c7e47e4)] - **doc**: fix typo in example code for util.styleText (Robin Mehner) [#&#8203;56720](https://redirect.github.com/nodejs/node/pull/56720)
-   \[[`fade522538`](https://redirect.github.com/nodejs/node/commit/fade522538)] - **doc**: fix inconsistencies in `WeakSet` and `WeakMap` comparison details (Shreyans Pathak) [#&#8203;56683](https://redirect.github.com/nodejs/node/pull/56683)
-   \[[`55533bf147`](https://redirect.github.com/nodejs/node/commit/55533bf147)] - **doc**: add RafaelGSS as latest sec release stewards (Rafael Gonzaga) [#&#8203;56682](https://redirect.github.com/nodejs/node/pull/56682)
-   \[[`8e978bdee1`](https://redirect.github.com/nodejs/node/commit/8e978bdee1)] - **doc**: clarify cjs/esm diff in `queueMicrotask()` vs `process.nextTick()` (Dario Piotrowicz) [#&#8203;56659](https://redirect.github.com/nodejs/node/pull/56659)
-   \[[`ae360c30dc`](https://redirect.github.com/nodejs/node/commit/ae360c30dc)] - **doc**: `WeakSet` and `WeakMap` comparison details (Shreyans Pathak) [#&#8203;56648](https://redirect.github.com/nodejs/node/pull/56648)
-   \[[`acd2a2fda5`](https://redirect.github.com/nodejs/node/commit/acd2a2fda5)] - **doc**: mention prepare --security (Rafael Gonzaga) [#&#8203;56617](https://redirect.github.com/nodejs/node/pull/56617)
-   \[[`d3c0a2831d`](https://redirect.github.com/nodejs/node/commit/d3c0a2831d)] - **doc**: tweak info on reposts in ambassador program (Michael Dawson) [#&#8203;56589](https://redirect.github.com/nodejs/node/pull/56589)
-   \[[`3299505b49`](https://redirect.github.com/nodejs/node/commit/3299505b49)] - **doc**: add type stripping to ambassadors program (Marco Ippolito) [#&#8203;56598](https://redirect.github.com/nodejs/node/pull/56598)
-   \[[`b1a6ffa4e4`](https://redirect.github.com/nodejs/node/commit/b1a6ffa4e4)] - **doc**: improve internal documentation on built-in snapshot (Joyee Cheung) [#&#8203;56505](https://redirect.github.com/nodejs/node/pull/56505)
-   \[[`1641a28930`](https://redirect.github.com/nodejs/node/commit/1641a28930)] - **doc**: document CLI way to open the nodejs/bluesky PR (Antoine du Hamel) [#&#8203;56506](https://redirect.github.com/nodejs/node/pull/56506)
-   \[[`2042628fda`](https://redirect.github.com/nodejs/node/commit/2042628fda)] - **doc**: add section about using npx with permission model (Rafael Gonzaga) [#&#8203;56539](https://redirect.github.com/nodejs/node/pull/56539)
-   \[[`ace19a0263`](https://redirect.github.com/nodejs/node/commit/ace19a0263)] - **doc**: update gcc-version for ubuntu-lts (Kunal Kumar) [#&#8203;56553](https://redirect.github.com/nodejs/node/pull/56553)
-   \[[`4aa57b50f8`](https://redirect.github.com/nodejs/node/commit/4aa57b50f8)] - **doc**: fix parentheses in options (Tobias Nießen) [#&#8203;56563](https://redirect.github.com/nodejs/node/pull/56563)
-   \[[`b40b01b4d3`](https://redirect.github.com/nodejs/node/commit/b40b01b4d3)] - **doc**: include CVE to EOL lines as sec release process (Rafael Gonzaga) [#&#8203;56520](https://redirect.github.com/nodejs/node/pull/56520)
-   \[[`6701360113`](https://redirect.github.com/nodejs/node/commit/6701360113)] - **doc**: add esm examples to node:trace_events (Alfredo González) [#&#8203;56514](https://redirect.github.com/nodejs/node/pull/56514)
-   \[[`d3207cca3e`](https://redirect.github.com/nodejs/node/commit/d3207cca3e)] - **doc**: add message for Ambassadors to promote (Michael Dawson) [#&#8203;56235](https://redirect.github.com/nodejs/node/pull/56235)
-   \[[`97ece4ae06`](https://redirect.github.com/nodejs/node/commit/97ece4ae06)] - **doc**: allow request for TSC reviews via the GitHub UI (Antoine du Hamel) [#&#8203;56493](https://redirect.github.com/nodejs/node/pull/56493)
-   \[[`03f25055ab`](https://redirect.github.com/nodejs/node/commit/03f25055ab)] - **doc**: add example for piping ReadableStream (Gabriel Schulhof) [#&#8203;56415](https://redirect.github.com/nodejs/node/pull/56415)
-   \[[`516d07482c`](https://redirect.github.com/nodejs/node/commit/516d07482c)] - **doc**: expand description of `parseArg`'s `default` (Kevin Gibbons) [#&#8203;54431](https://redirect.github.com/nodejs/node/pull/54431)
-   \[[`a6491effcb`](https://redirect.github.com/nodejs/node/commit/a6491effcb)] - **doc**: use `<ul>` instead of `<ol>` in `SECURITY.md` (Antoine du Hamel) [#&#8203;56346](https://redirect.github.com/nodejs/node/pull/56346)
-   \[[`e4ec134b21`](https://redirect.github.com/nodejs/node/commit/e4ec134b21)] - **doc**: clarify that WASM is trusted (Matteo Collina) [#&#8203;56345](https://redirect.github.com/nodejs/node/pull/56345)
-   \[[`0f7aed8a59`](https://redirect.github.com/nodejs/node/commit/0f7aed8a59)] - **doc**: fix the `crc32` documentation (Kevin Toshihiro Uehara) [#&#8203;55898](https://redirect.github.com/nodejs/node/pull/55898)
-   \[[`721104a296`](https://redirect.github.com/nodejs/node/commit/721104a296)] - **doc**: fix links in `module.md` (Antoine du Hamel) [#&#8203;56283](https://redirect.github.com/nodejs/node/pull/56283)
-   \[[`928540d792`](https://redirect.github.com/nodejs/node/commit/928540d792)] - **doc**: fix typos (Nathan Baulch) [#&#8203;55066](https://redirect.github.com/nodejs/node/pull/55066)
-   \[[`e69d35f03b`](https://redirect.github.com/nodejs/node/commit/e69d35f03b)] - **doc**: add history info for Permission Model (Antoine du Hamel) [#&#8203;56707](https://redirect.github.com/nodejs/node/pull/56707)
-   \[[`c6fd867ab5`](https://redirect.github.com/nodejs/node/commit/c6fd867ab5)] - **esm**: fix jsdoc type refs to `ModuleJobBase` in esm/loader (Jacob Smith) [#&#8203;56499](https://redirect.github.com/nodejs/node/pull/56499)
-   \[[`9cf9046bd7`](https://redirect.github.com/nodejs/node/commit/9cf9046bd7)] - ***Revert*** "**events**: add hasEventListener util for validate" (origranot) [#&#8203;56282](https://redirect.github.com/nodejs/node/pull/56282)
-   \[[`b7fe54fc88`](https://redirect.github.com/nodejs/node/commit/b7fe54fc88)] - **(SEMVER-MINOR)** **fs**: allow `exclude` option in globs to accept glob patterns (Daeyeon Jeong) [#&#8203;56489](https://redirect.github.com/nodejs/node/pull/56489)
-   \[[`6ca27c2a59`](https://redirect.github.com/nodejs/node/commit/6ca27c2a59)] - **http2**: omit server name when HTTP2 host is IP address (islandryu) [#&#8203;56530](https://redirect.github.com/nodejs/node/pull/56530)
-   \[[`9f1fa199bf`](https://redirect.github.com/nodejs/node/commit/9f1fa199bf)] - **inspector**: roll inspector_protocol (Chengzhong Wu) [#&#8203;56649](https://redirect.github.com/nodejs/node/pull/56649)
-   \[[`0dae4bb3ab`](https://redirect.github.com/nodejs/node/commit/0dae4bb3ab)] - **inspector**: add undici http tracking support (Chengzhong Wu) [#&#8203;56488](https://redirect.github.com/nodejs/node/pull/56488)
-   \[[`2c6124cec4`](https://redirect.github.com/nodejs/node/commit/2c6124cec4)] - **inspector**: report loadingFinished until the response data is consumed (Chengzhong Wu) [#&#8203;56372](https://redirect.github.com/nodejs/node/pull/56372)
-   \[[`96ec862ce2`](https://redirect.github.com/nodejs/node/commit/96ec862ce2)] - **lib**: refactor execution.js (Marco Ippolito) [#&#8203;56358](https://redirect.github.com/nodejs/node/pull/56358)
-   \[[`3ac92ef607`](https://redirect.github.com/nodejs/node/commit/3ac92ef607)] - **(SEMVER-MINOR)** **lib**: add typescript support to STDIN eval (Marco Ippolito) [#&#8203;56359](https://redirect.github.com/nodejs/node/pull/56359)
-   \[[`d5bf3db0cf`](https://redirect.github.com/nodejs/node/commit/d5bf3db0cf)] - **lib**: allow skipping source maps in node_modules (Chengzhong Wu) [#&#8203;56639](https://redirect.github.com/nodejs/node/pull/56639)
-   \[[`d33eaf2bcb`](https://redirect.github.com/nodejs/node/commit/d33eaf2bcb)] - **lib**: ensure FORCE_COLOR forces color output in non-TTY environments (Pietro Marchini) [#&#8203;55404](https://redirect.github.com/nodejs/node/pull/55404)
-   \[[`dc003218a8`](https://redirect.github.com/nodejs/node/commit/dc003218a8)] - **lib**: optimize `prepareStackTrace` on builtin frames (Chengzhong Wu) [#&#8203;56299](https://redirect.github.com/nodejs/node/pull/56299)
-   \[[`df06524863`](https://redirect.github.com/nodejs/node/commit/df06524863)] - **lib**: suppress source map lookup exceptions (Chengzhong Wu) [#&#8203;56299](https://redirect.github.com/nodejs/node/pull/56299)
-   \[[`35335a5a66`](https://redirect.github.com/nodejs/node/commit/35335a5a66)] - **meta**: move one or more collaborators to emeritus (Node.js GitHub Bot) [#&#8203;56580](https://redirect.github.com/nodejs/node/pull/56580)
-   \[[`1faabdb150`](https://redirect.github.com/nodejs/node/commit/1faabdb150)] - **meta**: add codeowners of security release document (Rafael Gonzaga) [#&#8203;56521](https://redirect.github.com/nodejs/node/pull/56521)
-   \[[`b4ece22ef5`](https://redirect.github.com/nodejs/node/commit/b4ece22ef5)] - **meta**: move one or more collaborators to emeritus (Node.js GitHub Bot) [#&#8203;56342](https://redirect.github.com/nodejs/node/pull/56342)
-   \[[`9ec67e7ce0`](https://redirect.github.com/nodejs/node/commit/9ec67e7ce0)] - **meta**: move MoLow to TSC regular member (Moshe Atlow) [#&#8203;56276](https://redirect.github.com/nodejs/node/pull/56276)
-   \[[`bae4b2e20a`](https://redirect.github.com/nodejs/node/commit/bae4b2e20a)] - **module**: use more defensive code when handling SWC errors (Antoine du Hamel) [#&#8203;56646](https://redirect.github.com/nodejs/node/pull/56646)
-   \[[`1614e8e7bc`](https://redirect.github.com/nodejs/node/commit/1614e8e7bc)] - **(SEMVER-MINOR)** **module**: add ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX (Marco Ippolito) [#&#8203;56610](https://redirect.github.com/nodejs/node/pull/56610)
-   \[[`174d88eab1`](https://redirect.github.com/nodejs/node/commit/174d88eab1)] - **module**: support eval with ts syntax detection (Marco Ippolito) [#&#8203;56285](https://redirect.github.com/nodejs/node/pull/56285)
-   \[[`299d6fa829`](https://redirect.github.com/nodejs/node/commit/299d6fa829)] - **module**: fix jsdoc for `format` parameter in cjs/loader (pacexy) [#&#8203;56501](https://redirect.github.com/nodejs/node/pull/56501)
-   \[[`0307e4dd59`](https://redirect.github.com/nodejs/node/commit/0307e4dd59)] - **module**: unify TypeScript and .mjs handling in CommonJS (Joyee Cheung) [#&#8203;55590](https://redirect.github.com/nodejs/node/pull/55590)
-   \[[`1f4f9be93d`](https://redirect.github.com/nodejs/node/commit/1f4f9be93d)] - **module**: fix async resolution error within the sync `findPackageJSON` (Jacob Smith) [#&#8203;56382](https://redirect.github.com/nodejs/node/pull/56382)
-   \[[`bbedffa0f0`](https://redirect.github.com/nodejs/node/commit/bbedffa0f0)] - **module**: simplify `findPackageJSON` implementation (Antoine du Hamel) [#&#8203;55543](https://redirect.github.com/nodejs/node/pull/55543)
-   \[[`6d6cffa9cc`](https://redirect.github.com/nodejs/node/commit/6d6cffa9cc)] - **(SEMVER-MINOR)** **module**: add `findPackageJSON` util (Jacob Smith) [#&#8203;55412](https://redirect.github.com/nodejs/node/pull/55412)
-   \[[`cd7ce18233`](https://redirect.github.com/nodejs/node/commit/cd7ce18233)] - **module**: fix bad `require.resolve` with option paths for `.` and `..` (Dario Piotrowicz) [#&#8203;56735](https://redirect.github.com/nodejs/node/pull/56735)
-   \[[`152df4da21`](https://redirect.github.com/nodejs/node/commit/152df4da21)] - **module**: rethrow amaro error message (Marco Ippolito) [#&#8203;56568](https://redirect.github.com/nodejs/node/pull/56568)
-   \[[`acba5dc87e`](https://redirect.github.com/nodejs/node/commit/acba5dc87e)] - **module**: use buffer.toString base64 (Chengzhong Wu) [#&#8203;56315](https://redirect.github.com/nodejs/node/pull/56315)
-   \[[`01e69be8ff`](https://redirect.github.com/nodejs/node/commit/01e69be8ff)] - **node-api**: define version 10 (Gabriel Schulhof) [#&#8203;55676](https://redirect.github.com/nodejs/node/pull/55676)
-   \[[`724524528e`](https://redirect.github.com/nodejs/node/commit/724524528e)] - **node-api**: remove deprecated attribute from napi_module_register (Vladimir Morozov) [#&#8203;56162](https://redirect.github.com/nodejs/node/pull/56162)
-   \[[`c78e11064f`](https://redirect.github.com/nodejs/node/commit/c78e11064f)] - **process**: remove support for undocumented symbol (Antoine du Hamel) [#&#8203;56552](https://redirect.github.com/nodejs/node/pull/56552)
-   \[[`3f69b18a23`](https://redirect.github.com/nodejs/node/commit/3f69b18a23)] - **process**: fix symbol key and mark experimental new `node:process` methods (Antoine du Hamel) [#&#8203;56517](https://redirect.github.com/nodejs/node/pull/56517)
-   \[[`d35333ae18`](https://redirect.github.com/nodejs/node/commit/d35333ae18)] - **(SEMVER-MINOR)** **process**: add process.ref() and process.unref() methods (James M Snell) [#&#8203;56400](https://redirect.github.com/nodejs/node/pull/56400)
-   \[[`fa49f0f7d5`](https://redirect.github.com/nodejs/node/commit/fa49f0f7d5)] - **punycode**: limit deprecation warning (Colin Ihrig) [#&#8203;56632](https://redirect.github.com/nodejs/node/pull/56632)
-   \[[`d77c7073b7`](https://redirect.github.com/nodejs/node/commit/d77c7073b7)] - **sqlite**: disable memstatus APIs at build time (Colin Ihrig) [#&#8203;56541](https://redirect.github.com/nodejs/node/pull/56541)
-   \[[`07ff3ddcb5`](https://redirect.github.com/nodejs/node/commit/07ff3ddcb5)] - **(SEMVER-MINOR)** **sqlite**: support TypedArray and DataView in `StatementSync` (Alex Yang) [#&#8203;56385](https://redirect.github.com/nodejs/node/pull/56385)
-   \[[`b6c2e91365`](https://redirect.github.com/nodejs/node/commit/b6c2e91365)] - **sqlite**: enable SQL math functions (Colin Ihrig) [#&#8203;56447](https://redirect.github.com/nodejs/node/pull/56447)
-   \[[`3462263e8b`](https://redirect.github.com/nodejs/node/commit/3462263e8b)] - **sqlite**: pass conflict type to conflict resolution handler (Bart Louwers) [#&#8203;56352](https://redirect.github.com/nodejs/node/pull/56352)
-   \[[`89ba3af743`](https://redirect.github.com/nodejs/node/commit/89ba3af743)] - **src**: add nullptr handling from X509\_STORE_new() (Burkov Egor) [#&#8203;56700](https://redirect.github.com/nodejs/node/pull/56700)
-   \[[`89a7c82e0c`](https://redirect.github.com/nodejs/node/commit/89a7c82e0c)] - **src**: add default value for RSACipherConfig mode field (Burkov Egor) [#&#8203;56701](https://redirect.github.com/nodejs/node/pull/56701)
-   \[[`7bae51e62e`](https://redirect.github.com/nodejs/node/commit/7bae51e62e)] - **src**: fix build with GCC 15 (tjuhaszrh) [#&#8203;56740](https://redirect.github.com/nodejs/node/pull/56740)
-   \[[`432a4b8bd6`](https://redirect.github.com/nodejs/node/commit/432a4b8bd6)] - **src**: fix to generate path from wchar_t via wstring (yamachu) [#&#8203;56696](https://redirect.github.com/nodejs/node/pull/56696)
-   \[[`8c9eaf82f0`](https://redirect.github.com/nodejs/node/commit/8c9eaf82f0)] - **src**: initialize FSReqWrapSync in path that uses it (Michaël Zasso) [#&#8203;56613](https://redirect.github.com/nodejs/node/pull/56613)
-   \[[`bcdb42d40b`](https://redirect.github.com/nodejs/node/commit/bcdb42d40b)] - **src**: handle duplicate paths granted (Rafael Gonzaga) [#&#8203;56591](https://redirect.github.com/nodejs/node/pull/56591)
-   \[[`d6a7acc207`](https://redirect.github.com/nodejs/node/commit/d6a7acc207)] - **src**: update ECKeyPointer in ncrypto (James M Snell) [#&#8203;56526](https://redirect.github.com/nodejs/node/pull/56526)
-   \[[`01922f8b1f`](https://redirect.github.com/nodejs/node/commit/01922f8b1f)] - **src**: update ECPointPointer in ncrypto (James M Snell) [#&#8203;56526](https://redirect.github.com/nodejs/node/pull/56526)
-   \[[`2a3a36eceb`](https://redirect.github.com/nodejs/node/commit/2a3a36eceb)] - **src**: update ECGroupPointer in ncrypto (James M Snell) [#&#8203;56526](https://redirect.github.com/nodejs/node/pull/56526)
-   \[[`67c10cdacb`](https://redirect.github.com/nodejs/node/commit/67c10cdacb)] - **src**: update ECDASSigPointer implementation in ncrypto (James M Snell) [#&#8203;56526](https://redirect.github.com/nodejs/node/pull/56526)
-   \[[`17f931c68b`](https://redirect.github.com/nodejs/node/commit/17f931c68b)] - **src**: cleaning up more crypto internals for ncrypto (James M Snell) [#&#8203;56526](https://redirect.github.com/nodejs/node/pull/56526)
-   \[[`94d3fe1b62`](https://redirect.github.com/nodejs/node/commit/94d3fe1b62)] - **(SEMVER-MINOR)** **src**: add --disable-sigusr1 to prevent signal i/o thread (Rafael Gonzaga) [#&#8203;56441](https://redirect.github.com/nodejs/node/pull/56441)
-   \[[`6594ee8dff`](https://redirect.github.com/nodejs/node/commit/6594ee8dff)] - **src**: fix undefined script name in error source (Chengzhong Wu) [#&#8203;56502](https://redirect.github.com/nodejs/node/pull/56502)
-   \[[`b46bad3e91`](https://redirect.github.com/nodejs/node/commit/b46bad3e91)] - **src**: refactor --trace-env to reuse option selection and handling (Joyee Cheung) [#&#8203;56293](https://redirect.github.com/nodejs/node/pull/56293)
-   \[[`76921b822b`](https://redirect.github.com/nodejs/node/commit/76921b822b)] - **src**: minor cleanups on OneByteString usage (James M Snell) [#&#8203;56482](https://redirect.github.com/nodejs/node/pull/56482)
-   \[[`3f0d1dd4fe`](https://redirect.github.com/nodejs/node/commit/3f0d1dd4fe)] - **src**: move more crypto impl detail to ncrypto dep (James M Snell) [#&#8203;56421](https://redirect.github.com/nodejs/node/pull/56421)
-   \[[`04f623b283`](https://redirect.github.com/nodejs/node/commit/04f623b283)] - **src**: fixup more ToLocalChecked uses in node_file (James M Snell) [#&#8203;56484](https://redirect.github.com/nodejs/node/pull/56484)
-   \[[`5aa436f5a1`](https://redirect.github.com/nodejs/node/commit/5aa436f5a1)] - **src**: make some minor ToLocalChecked cleanups (James M Snell) [#&#8203;56483](https://redirect.github.com/nodejs/node/pull/56483)
-   \[[`6eec5e7ec2`](https://redirect.github.com/nodejs/node/commit/6eec5e7ec2)] - **src**: lock the thread properly in snapshot builder (Joyee Cheung) [#&#8203;56327](https://redirect.github.com/nodejs/node/pull/56327)
-   \[[`5614993968`](https://redirect.github.com/nodejs/node/commit/5614993968)] - **src**: drain platform tasks before creating startup snapshot (Chengzhong Wu) [#&#8203;56403](https://redirect.github.com/nodejs/node/pull/56403)
-   \[[`48493e9fd5`](https://redirect.github.com/nodejs/node/commit/48493e9fd5)] - **src**: use LocalVector in more places (James M Snell) [#&#8203;56457](https://redirect.github.com/nodejs/node/pull/56457)
-   \[[`7e5ea0681e`](https://redirect.github.com/nodejs/node/commit/7e5ea0681e)] - **src**: use v8::LocalVector consistently with other minor cleanups (James M Snell) [#&#8203;56417](https://redirect.github.com/nodejs/node/pull/56417)
-   \[[`ad3d857f2b`](https://redirect.github.com/nodejs/node/commit/ad3d857f2b)] - **src**: use starts_with in fs_permission.cc (ishabi) [#&#8203;55811](https://redirect.github.com/nodejs/node/pull/55811)
-   \[[`5afffb4415`](https://redirect.github.com/nodejs/node/commit/5afffb4415)] - **(SEMVER-MINOR)** **src,worker**: add isInternalWorker (Carlos Espa) [#&#8203;56469](https://redirect.github.com/nodejs/node/pull/56469)
-   \[[`7d1676e72e`](https://redirect.github.com/nodejs/node/commit/7d1676e72e)] - **stream**: fix typo in ReadableStreamBYOBReader.readIntoRequests (Mattias Buelens) [#&#8203;56560](https://redirect.github.com/nodejs/node/pull/56560)
-   \[[`e658ea6b26`](https://redirect.github.com/nodejs/node/commit/e658ea6b26)] - **stream**: validate undefined sizeAlgorithm in WritableStream (Jason Zhang) [#&#8203;56067](https://redirect.github.com/nodejs/node/pull/56067)
-   \[[`e4f133c20c`](https://redirect.github.com/nodejs/node/commit/e4f133c20c)] - **test**: add ts eval snapshots (Marco Ippolito) [#&#8203;56358](https://redirect.github.com/nodejs/node/pull/56358)
-   \[[`f041742400`](https://redirect.github.com/nodejs/node/commit/f041742400)] - **test**: remove empty lines from snapshots (Marco Ippolito) [#&#8203;56358](https://redirect.github.com/nodejs/node/pull/56358)
-   \[[`801cde91f6`](https://redirect.github.com/nodejs/node/commit/801cde91f6)] - **test**: reduce number of written chunks (Luigi Pinca) [#&#8203;56757](https://redirect.github.com/nodejs/node/pull/56757)
-   \[[`6fdf1879ab`](https://redirect.github.com/nodejs/node/commit/6fdf1879ab)] - **test**: fix invalid common.mustSucceed() usage (Luigi Pinca) [#&#8203;56756](https://redirect.github.com/nodejs/node/pull/56756)
-   \[[`d2bfbfa364`](https://redirect.github.com/nodejs/node/commit/d2bfbfa364)] - **test**: use strict mode in global setters test (Rich Trott) [#&#8203;56742](https://redirect.github.com/nodejs/node/pull/56742)
-   \[[`5c030da42f`](https://redirect.github.com/nodejs/node/commit/5c030da42f)] - **test**: cleanup and simplify test-crypto-aes-wrap (James M Snell) [#&#8203;56748](https://redirect.github.com/nodejs/node/pull/56748)
-   \[[`f1442d6eaf`](https://redirect.github.com/nodejs/node/commit/f1442d6eaf)] - **test**: do not use common.isMainThread (Luigi Pinca) [#&#8203;56768](https://redirect.github.com/nodejs/node/pull/56768)
-   \[[`49405bd9e7`](https://redirect.github.com/nodejs/node/commit/49405bd9e7)] - **test**: make some requires lazy in common/index (James M Snell) [#&#8203;56715](https://redirect.github.com/nodejs/node/pull/56715)
-   \[[`52ef376788`](https://redirect.github.com/nodejs/node/commit/52ef376788)] - **test**: add test that uses multibyte for path and resolves modules (yamachu) [#&#8203;56696](https://redirect.github.com/nodejs/node/pull/56696)
-   \[[`b811dea85a`](https://redirect.github.com/nodejs/node/commit/b811dea85a)] - **test**: replace more uses of `global` with `globalThis` (James M Snell) [#&#8203;56712](https://redirect.github.com/nodejs/node/pull/56712)
-   \[[`eb97076199`](https://redirect.github.com/nodejs/node/commit/eb97076199)] - **test**: make common/index slightly less node.js specific (James M Snell) [#&#8203;56712](https://redirect.github.com/nodejs/node/pull/56712)
-   \[[`1795202d19`](https://redirect.github.com/nodejs/node/commit/1795202d19)] - **test**: rely less on duplicative common test harness utilities (James M Snell) [#&#8203;56712](https://redirect.github.com/nodejs/node/pull/56712)
-   \[[`5be29a274e`](https://redirect.github.com/nodejs/node/commit/5be29a274e)] - **test**: simplify common/index.js (James M Snell) [#&#8203;56712](https://redirect.github.com/nodejs/node/pull/56712)
-   \[[`92e99780f0`](https://redirect.github.com/nodejs/node/commit/92e99780f0)] - **test**: move hasMultiLocalhost to common/net (James M Snell) [#&#8203;56716](https://redirect.github.com/nodejs/node/pull/56716)
-   \[[`1c3204a4cc`](https://redirect.github.com/nodejs/node/commit/1c3204a4cc)] - **test**: move crypto related common utilities in common/crypto (James M Snell) [#&#8203;56714](https://redirect.github.com/nodejs/node/pull/56714)
-   \[[`fe79d63be0`](https://redirect.github.com/nodejs/node/commit/fe79d63be0)] - **test**: add missing test for env file (Jonas) [#&#8203;56642](https://redirect.github.com/nodejs/node/pull/56642)
-   \[[`e08af61537`](https://redirect.github.com/nodejs/node/commit/e08af61537)] - **test**: enforce strict mode in test-zlib-const (Rich Trott) [#&#8203;56689](https://redirect.github.com/nodejs/node/pull/56689)
-   \[[`c96792d7f8`](https://redirect.github.com/nodejs/node/commit/c96792d7f8)] - **test**: fix localization data for ICU 74.2 (Antoine du Hamel) [#&#8203;56661](https://redirect.github.com/nodejs/node/pull/56661)
-   \[[`48b72f1195`](https://redirect.github.com/nodejs/node/commit/48b72f1195)] - **test**: use --permission instead of --experimental-permission (Rafael Gonzaga) [#&#8203;56685](https://redirect.github.com/nodejs/node/pull/56685)
-   \[[`de81d90fce`](https://redirect.github.com/nodejs/node/commit/de81d90fce)] - **test**: test-stream-compose.js doesn't need internals (Meghan Denny) [#&#8203;56619](https://redirect.github.com/nodejs/node/pull/56619)
-   \[[`f5b8499ad0`](https://redirect.github.com/nodejs/node/commit/f5b8499ad0)] - **test**: add maxCount and gcOptions to gcUntil() (Joyee Cheung) [#&#8203;56522](https://redirect.github.com/nodejs/node/pull/56522)
-   \[[`d9e5a81041`](https://redirect.github.com/nodejs/node/commit/d9e5a81041)] - **test**: add line break at end of file (Rafael Gonzaga) [#&#8203;56588](https://redirect.github.com/nodejs/node/pull/56588)
-   \[[`59be346fbf`](https://redirect.github.com/nodejs/node/commit/59be346fbf)] - **test**: mark test-worker-prof as flaky on smartos (Joyee Cheung) [#&#8203;56583](https://redirect.github.com/nodejs/node/pull/56583)
-   \[[`12a2cae9e5`](https://redirect.github.com/nodejs/node/commit/12a2cae9e5)] - **test**: update test-child-process-bad-stdio to use node:test (Colin Ihrig) [#&#8203;56562](https://redirect.github.com/nodejs/node/pull/56562)
-   \[[`2dc4a30e19`](https://redirect.github.com/nodejs/node/commit/2dc4a30e19)] - **test**: disable openssl 3.4.0 incompatible tests (Jelle van der Waa) [#&#8203;56160](https://redirect.github.com/nodejs/node/pull/56160)
-   \[[`1950fbf51d`](https://redirect.github.com/nodejs/node/commit/1950fbf51d)] - **test**: make test-crypto-hash compatible with OpenSSL > 3.4.0 (Jelle van der Waa) [#&#8203;56160](https://redirect.github.com/nodejs/node/pull/56160)
-   \[[`a533420a91`](https://redirect.github.com/nodejs/node/commit/a533420a91)] - **test**: clarify fork inherit permission flags (Rafael Gonzaga) [#&#8203;56523](https://redirect.github.com/nodejs/node/pull/56523)
-   \[[`697e799dc1`](https://redirect.github.com/nodejs/node/commit/697e799dc1)] - **test**: add error only reporter for node:test (Carlos Espa) [#&#8203;56438](https://redirect.github.com/nodejs/node/pull/56438)
-   \[[`4844fa212d`](https://redirect.github.com/nodejs/node/commit/4844fa212d)] - **test**: mark test-http-server-request-timeouts-mixed as flaky (Joyee Cheung) [#&#8203;56503](https://redirect.github.com/nodejs/node/pull/56503)
-   \[[`843c2389b9`](https://redirect.github.com/nodejs/node/commit/843c2389b9)] - **test**: update error code in tls-psk-circuit for for OpenSSL 3.4 (sebastianas) [#&#8203;56420](https://redirect.github.com/nodejs/node/pull/56420)
-   \[[`ccb2ddbd83`](https://redirect.github.com/nodejs/node/commit/ccb2ddbd83)] - **test**: update compiled sqlite tests to match other tests (Colin Ihrig) [#&#8203;56446](https://redirect.github.com/nodejs/node/pull/56446)
-   \[[`b40f50324d`](https://redirect.github.com/nodejs/node/commit/b40f50324d)] - **test**: add initial test426 coverage (Chengzhong Wu) [#&#8203;56436](https://redirect.github.com/nodejs/node/pull/56436)
-   \[[`059f81e4fd`](https://redirect.github.com/nodejs/node/commit/059f81e4fd)] - **test**: update test-set-http-max-http-headers to use node:test (Colin Ihrig) [#&#8203;56439](https://redirect.github.com/nodejs/node/pull/56439)
-   \[[`ec2940b418`](https://redirect.github.com/nodejs/node/commit/ec2940b418)] - **test**: update test-child-process-windows-hide to use node:test (Colin Ihrig) [#&#8203;56437](https://redirect.github.com/nodejs/node/pull/56437)
-   \[[`0362924880`](https://redirect.github.com/nodejs/node/commit/0362924880)] - **test**: use unusual chars in the path to ensure our tests are robust (Antoine du Hamel) [#&#8203;48409](https://redirect.github.com/nodejs/node/pull/48409)
-   \[[`b6c3869910`](https://redirect.github.com/nodejs/node/commit/b6c3869910)] - **test**: improve abort signal dropping test (Edy Silva) [#&#8203;56339](https://redirect.github.com/nodejs/node/pull/56339)
-   \[[`cc648ef923`](https://redirect.github.com/nodejs/node/commit/cc648ef923)] - **test**: enable ts test on win arm64 (Marco Ippolito) [#&#8203;56349](https://redirect.github.com/nodejs/node/pull/56349)
-   \[[`68819b4997`](https://redirect.github.com/nodejs/node/commit/68819b4997)] - **test**: deflake test-watch-file-shared-dependency (Luigi Pinca) [#&#8203;56344](https://redirect.github.com/nodejs/node/pull/56344)
-   \[[`ca6ed2190c`](https://redirect.github.com/nodejs/node/commit/ca6ed2190c)] - **test**: skip `test-sqlite-extensions` when SQLite is not built by us (Antoine du Hamel) [#&#8203;56341](https://redirect.github.com/nodejs/node/pull/56341)
-   \[[`8ffeb8b58c`](https://redirect.github.com/nodejs/node/commit/8ffeb8b58c)] - **test**: increase spin for eventloop test on s390 (Michael Dawson) [#&#8203;56228](https://redirect.github.com/nodejs/node/pull/56228)
-   \[[`6ae9950f08`](https://redirect.github.com/nodejs/node/commit/6ae9950f08)] - **test**: migrate message eval tests from Python to JS (Yiyun Lei) [#&#8203;50482](https://redirect.github.com/nodejs/node/pull/50482)
-   \[[`4352bf69e9`](https://redirect.github.com/nodejs/node/commit/4352bf69e9)] - **test**: check typescript loader (Marco Ippolito) [#&#8203;54657](https://redirect.github.com/nodejs/node/pull/54657)
-   \[[`406e7db9c3`](https://redirect.github.com/nodejs/node/commit/406e7db9c3)] - **test**: remove async-hooks/test-writewrap flaky designation (Luigi Pinca) [#&#8203;56048](https://redirect.github.com/nodejs/node/pull/56048)
-   \[[`fa56ab2bba`](https://redirect.github.com/nodejs/node/commit/fa56ab2bba)] - **test**: deflake test-esm-loader-hooks-inspect-brk (Luigi Pinca) [#&#8203;56050](https://redirect.github.com/nodejs/node/pull/56050)
-   \[[`8e149aac99`](https://redirect.github.com/nodejs/node/commit/8e149aac99)] - **test**: add test case for listeners (origranot) [#&#8203;56282](https://redirect.github.com/nodejs/node/pull/56282)
-   \[[`a3f5ef22cd`](https://redirect.github.com/nodejs/node/commit/a3f5ef22cd)] - **test**: make `test-permission-sqlite-load-extension` more robust (Antoine du Hamel) [#&#8203;56295](https://redirect.github.com/nodejs/node/pull/56295)
-   \[[`8cbb7cc838`](https://redirect.github.com/nodejs/node/commit/8cbb7cc838)] - **test_runner**: print failing assertion only once with spec reporter (Pietro Marchini) [#&#8203;56662](https://redirect.github.com/nodejs/node/pull/56662)
-   \[[`1f426bad9a`](https://redirect.github.com/nodejs/node/commit/1f426bad9a)] - **test_runner**: remove unused errors (Pietro Marchini) [#&#8203;56607](https://redirect.github.com/nodejs/node/pull/56607)
-   \[[`697a851fb3`](https://redirect.github.com/nodejs/node/commit/697a851fb3)] - **(SEMVER-MINOR)** **test_runner**: add TestContext.prototype.waitFor() (Colin Ihrig) [#&#8203;56595](https://redirect.github.com/nodejs/node/pull/56595)
-   \[[`047537b48c`](https://redirect.github.com/nodejs/node/commit/047537b48c)] - **(SEMVER-MINOR)** **test_runner**: add t.assert.fileSnapshot() (Colin Ihrig) [#&#8203;56459](https://redirect.github.com/nodejs/node/pull/56459)
-   \[[`19b4aa4b14`](https://redirect.github.com/nodejs/node/commit/19b4aa4b14)] - **test_runner**: run single test file benchmark (Pietro Marchini) [#&#8203;56479](https://redirect.github.com/nodejs/node/pull/56479)
-   \[[`926cf84e95`](https://redirect.github.com/nodejs/node/commit/926cf84e95)] - **(SEMVER-MINOR)** **test_runner**: add assert.register() API (Colin Ihrig) [#&#8203;56434](https://redirect.github.com/nodejs/node/pull/56434)
-   \[[`fb4661a4cf`](https://redirect.github.com/nodejs/node/commit/fb4661a4cf)] - **test_runner**: finish marking snapshot testing as stable (Colin Ihrig) [#&#8203;56425](https://redirect.github.com/nodejs/node/pull/56425)
-   \[[`900c6c3940`](https://redirect.github.com/nodejs/node/commit/900c6c3940)] - **tls**: fix error stack conversion in cryptoErrorListToException() (Joyee Cheung) [#&#8203;56554](https://redirect.github.com/nodejs/node/pull/56554)
-   \[[`e9f185b658`](https://redirect.github.com/nodejs/node/commit/e9f185b658)] - **tools**: update doc to new version (Node.js GitHub Bot) [#&#8203;56259](https://redirect.github.com/nodejs/node/pull/56259)
-   \[[`7644c7e619`](https://redirect.github.com/nodejs/node/commit/7644c7e619)] - **tools**: update inspector_protocol roller (Chengzhong Wu) [#&#8203;56649](https://redirect.github.com/nodejs/node/pull/56649)
-   \[[`362272b0a4`](https://redirect.github.com/nodejs/node/commit/362272b0a4)] - **tools**: do not throw on missing `create-release-proposal.sh` (Antoine du Hamel) [#&#8203;56704](https://redirect.github.com/nodejs/node/pull/56704)
-   \[[`df8b835953`](https://redirect.github.com/nodejs/node/commit/df8b835953)] - **tools**: fix tools-deps-update (Daniel Lemire) [#&#8203;56684](https://redirect.github.com/nodejs/node/pull/56684)
-   \[[`feba5d3274`](https://redirect.github.com/nodejs/node/commit/feba5d3274)] - **tools**: do not throw on missing `create-release-proposal.sh` (Antoine du Hamel) [#&#8203;56695](https://redirect.github.com/nodejs/node/pull/56695)
-   \[[`9827f7d395`](https://redirect.github.com/nodejs/node/commit/9827f7d395)] - **tools**: fix permissions in `lint-release-proposal` workflow (Antoine du Hamel) [#&#8203;56614](https://redirect.github.com/nodejs/node/pull/56614)
-   \[[`14c562c0dc`](https://redirect.github.com/nodejs/node/commit/14c562c0dc)] - **tools**: remove github reporter (Carlos Espa) [#&#8203;56468](https://redirect.github.com/nodejs/node/pull/56468)
-   \[[`ed1785d0ae`](https://redirect.github.com/nodejs/node/commit/ed1785d0ae)] - **tools**: edit `create-release-proposal` workflow (Antoine du Hamel) [#&#8203;56540](https://redirect.github.com/nodejs/node/pull/56540)
-   \[[`294e4c42f5`](https://redirect.github.com/nodejs/node/commit/294e4c42f5)] - **tools**: validate commit list as part of `lint-release-commit` (Antoine du Hamel) [#&#8203;56291](https://redirect.github.com/nodejs/node/pull/56291)
-   \[[`98d3474267`](https://redirect.github.com/nodejs/node/commit/98d3474267)] - **tools**: fix loong64 build failed (Xiao-Tao) [#&#8203;56466](https://redirect.github.com/nodejs/node/pull/56466)
-   \[[`3e729ceec8`](https://redirect.github.com/nodejs/node/commit/3e729ceec8)] - **tools**: disable unneeded rule ignoring in Python linting (Rich Trott) [#&#8203;56429](https://redirect.github.com/nodejs/node/pull/56429)
-   \[[`d5c05328e2`](https://redirect.github.com/nodejs/node/commit/d5c05328e2)] - **tools**: use a configurable value for number of open dependabot PRs (Antoine du Hamel) [#&#8203;56427](https://redirect.github.com/nodejs/node/pull/56427)
-   \[[`1705cbe002`](https://redirect.github.com/nodejs/node/commit/1705cbe002)] - **tools**: bump the eslint group in /tools/eslint with 4 updates (dependabot\[bot]) [#&#8203;56426](https://redirect.github.com/nodejs/node/pull/56426)
-   \[[`53b29b0469`](https://redirect.github.com/nodejs/node/commit/53b29b0469)] - **tools**: fix `require-common-first` lint rule from subfolder (Antoine du Hamel) [#&#8203;56325](https://redirect.github.com/nodejs/node/pull/56325)
-   \[[`105c4ed4fb`](https://redirect.github.com/nodejs/node/commit/105c4ed4fb)] - **tools**: add release line label when opening release proposal (Antoine du Hamel) [#&#8203;56317](https://redirect.github.com/nodejs/node/pull/56317)
-   \[[`30f61f4aa5`](https://redirect.github.com/nodejs/node/commit/30f61f4aa5)] - **url**: use resolved path to convert UNC paths to URL (Antoine du Hamel) [#&#8203;56302](https://redirect.github.com/nodejs/node/pull/56302)
-   \[[`a0aef4dfb6`](https://redirect.github.com/nodejs/node/commit/a0aef4dfb6)] - **util**: inspect: do not crash on an Error stack that contains a Symbol (Jordan Harband) [#&#8203;56573](https://redirect.github.com/nodejs/node/pull/56573)
-   \[[`a8a060341f`](https://redirect.github.com/nodejs/node/commit/a8a060341f)] - **util**: inspect: do not crash on an Error with a regex `name` (Jordan Harband) [#&#8203;56574](https://redirect.github.com/nodejs/node/pull/56574)
-   \[[`ea66bf3553`](https://redirect.github.com/nodejs/node/commit/ea66bf3553)] - **util**: rename CallSite.column to columnNumber (Chengzhong Wu) [#&#8203;56584](https://redirect.github.com/nodejs/node/pull/56584)
-   \[[`9cdc3b373c`](https://redirect.github.com/nodejs/node/commit/9cdc3b373c)] - **util**: do not crash on inspecting function with `Symbol` name (Jordan Harband) [#&#8203;56572](https://redirect.github.com/nodejs/node/pull/56572)
-   \[[`0bfbb68569`](https://redirect.github.com/nodejs/node/commit/0bfbb68569)] - **util**: expose CallSite.scriptId (Chengzhong Wu) [#&#8203;56551](https://redirect.github.com/nodejs/node/pull/56551)
-   \[[`5dd7116e09`](https://redirect.github.com/nodejs/node/commit/5dd7116e09)] - **watch**: reload env file for --env-file-if-exists (Jonas) [#&#8203;56643](https://redirect.github.com/nodejs/node/pull/56643)
-   \[[`c658a8afdf`](https://redirect.github.com/nodejs/node/commit/c658a8afdf)] - **(SEMVER-MINOR)** **worker**: add eval ts input (Marco Ippolito) [#&#8203;56394](https://redirect.github.com/nodejs/node/pull/56394)
-   \[[`2e5d038f48`](https://redirect.github.com/nodejs/node/commit/2e5d038f48)] - **worker**: refactor stdio to improve performance (Matteo Collina) [#&#8203;56630](https://redirect.github.com/nodejs/node/pull/56630)
-   \[[`f959805d01`](https://redirect.github.com/nodejs/node/commit/f959805d01)] - **worker**: flush stdout and stderr on exit (Matteo Collina) [#&#8203;56428](https://redirect.github.com/nodejs/node/pull/56428)

### [`v22.13.1`](https://redirect.github.com/nodejs/node/releases/tag/v22.13.1): 2025-01-21, Version 22.13.1 &#x27;Jod&#x27; (LTS), @&#8203;RafaelGSS

[Compare Source](https://redirect.github.com/nodejs/node/compare/v22.13.0...v22.13.1)

This is a security release.

##### Notable Changes

-   CVE-2025-23083 - src,loader,permission: throw on InternalWorker use when permission model is enabled (High)
-   CVE-2025-23085 - src: fix HTTP2 mem leak on premature close and ERR_PROTO (Medium)
-   CVE-2025-23084 - path: fix path traversal in normalize() on Windows (Medium)

Dependency update:

-   CVE-2025-22150 - Use of Insufficiently Random Values in undici fetch() (Medium)

##### Commits

-   \[[`520da342e0`](https://redirect.github.com/nodejs/node/commit/520da342e0)] - **(CVE-2025-22150)** **deps**: update undici to v6.21.1 (Matteo Collina) [nodejs-private/node-private#662](https://redirect.github.com/nodejs-private/node-private/pull/662)
-   \[[`99f217369f`](https://redirect.github.com/nodejs/node/commit/99f217369f)] - **(CVE-2025-23084)** **path**: fix path traversal in normalize() on Windows (Tobias Nießen) [nodejs-private/node-private#555](https://redirect.github.com/nodejs-private/node-private/pull/555)
-   \[[`984f735e35`](https://redirect.github.com/nodejs/node/commit/984f735e35)] - **(CVE-2025-23085)** **src**: fix HTTP2 mem leak on premature close and ERR_PROTO (RafaelGSS) [nodejs-private/node-private#650](https://redirect.github.com/nodejs-private/node-private/pull/650)
-   \[[`2446870618`](https://redirect.github.com/nodejs/node/commit/2446870618)] - **(CVE-2025-23083)** **src,loader,permission**: throw on InternalWorker use (RafaelGSS) [nodejs-private/node-private#651](https://redirect.github.com/nodejs-private/node-private/pull/651)

### [`v22.13.0`](https://redirect.github.com/nodejs/node/releases/tag/v22.13.0): 2025-01-07, Version 22.13.0 &#x27;Jod&#x27; (LTS), @&#8203;ruyadorno

[Compare Source](https://redirect.github.com/nodejs/node/compare/v22.12.0...v22.13.0)

##### Notable Changes

##### Stabilize Permission Model

Upgrades the Permission Model status from Active Development to Stable.

Contributed by Rafael Gonzaga [#&#8203;56201](https://redirect.github.com/nodejs/node/pull/56201)

##### Graduate WebCryptoAPI [`Ed25519`](https://redirect.github.com/nodejs/node/commit/Ed25519) and X25519 algorithms as stable

Following the merge of Curve25519 into the [Web Cryptography API Editor's Draft](https://w3c.github.io/webcrypto/) the `Ed25519` and `X25519` algorithm identifiers are now stable and will no longer emit an ExperimentalWarning upon use.

Contributed by (Filip Skokan) [#&#8203;56142](https://redirect.github.com/nodejs/node/pull/56142)

##### Other Notable Changes

-   \[[`05d6227a88`](https://redirect.github.com/nodejs/node/commit/05d6227a88)] - **(SEMVER-MINOR)** **assert**: add partialDeepStrictEqual (Giovanni Bucci) [#&#8203;54630](https://redirect.github.com/nodejs/node/pull/54630)
-   \[[`a933103499`](https://redirect.github.com/nodejs/node/commit/a933103499)] - **(SEMVER-MINOR)** **cli**: implement --trace-env and --trace-env-\[js|native]-stack (Joyee Cheung) [#&#8203;55604](https://redirect.github.com/nodejs/node/pull/55604)
-   \[[`ba9d5397de`](https://redirect.github.com/nodejs/node/commit/ba9d5397de)] - **(SEMVER-MINOR)** **dgram**: support blocklist in udp (theanarkh) [#&#8203;56087](https://redirect.github.com/nodejs/node/pull/56087)
-   \[[`f6d0c01303`](https://redirect.github.com/nodejs/node/commit/f6d0c01303)] - **doc**: stabilize util.styleText (Rafael Gonzaga) [#&#8203;56265](https://redirect.github.com/nodejs/node/pull/56265)
-   \[[`34c68827af`](https://redirect.github.com/nodejs/node/commit/34c68827af)] - **doc**: move typescript support to active development (Marco Ippolito) [#&#8203;55536](https://redirect.github.com/nodejs/node/pull/55536)
-   \[[`dd14b80350`](https://redirect.github.com/nodejs/node/commit/dd14b80350)] - **doc**: add LJHarb to collaborators (Jordan Harband) [#&#8203;56132](https://redirect.github.com/nodejs/node/pull/56132)
-   \[[`5263086169`](https://redirect.github.com/nodejs/node/commit/5263086169)] - **(SEMVER-MINOR)** **doc**: add report version and history section (Chengzhong Wu) [#&#8203;56130](https://redirect.github.com/nodejs/node/pull/56130)
-   \[[`8cb3c2018d`](https://redirect.github.com/nodejs/node/commit/8cb3c2018d)] - **(SEMVER-MINOR)** **doc**: sort --report-exclude alphabetically (Rafael Gonzaga) [#&#8203;55788](https://redirect.github.com/nodejs/node/pull/55788)
-   \[[`55239a48b6`](https://redirect.github.com/nodejs/node/commit/55239a48b6)] - **(SEMVER-MINOR)** **doc,lib,src,test**: unflag sqlite module (Colin Ihrig) [#&#8203;55890](https://redirect.github.com/nodejs/node/pull/55890)
-   \[[`7cbe3de1d8`](https://redirect.github.com/nodejs/node/commit/7cbe3de1d8)] - **(SEMVER-MINOR)** **module**: only emit require(esm) warning under --trace-require-module (Joyee Cheung) [#&#8203;56194](https://redirect.github.com/nodejs/node/pull/56194)
-   \[[`6575b76042`](https://redirect.github.com/nodejs/node/commit/6575b76042)] - **(SEMVER-MINOR)** **module**: add module.stripTypeScriptTypes (Marco Ippolito) [#&#8203;55282](https://redirect.github.com/nodejs/node/pull/55282)
-   \[[`bacfe6d5c9`](https://redirect.github.com/nodejs/node/commit/bacfe6d5c9)] - **(SEMVER-MINOR)** **net**: support blocklist in net.connect (theanarkh) [#&#8203;56075](https://redirect.github.com/nodejs/node/pull/56075)
-   \[[`b47888d390`](https://redirect.github.com/nodejs/node/commit/b47888d390)] - **(SEMVER-MINOR)** **net**: support blocklist for net.Server (theanarkh) [#&#8203;56079](https://redirect.github.com/nodejs/node/pull/56079)
-   \[[`566f0a1d25`](https://redirect.github.com/nodejs/node/commit/566f0a1d25)] - **(SEMVER-MINOR)** **net**: add SocketAddress.parse (James M Snell) [#&#8203;56076](https://redirect.github.com/nodejs/node/pull/56076)
-   \[[`ed7eab1421`](https://redirect.github.com/nodejs/node/commit/ed7eab1421)] - **(SEMVER-MINOR)** **net**: add net.BlockList.isBlockList(value) (James M Snell) [#&#8203;56078](https://redirect.github.com/nodejs/node/pull/56078)
-   \[[`ea4891856d`](https://redirect.github.com/nodejs/node/commit/ea4891856d)] - **(SEMVER-MINOR)** **process**: deprecate `features.{ipv6,uv}` and `features.tls_*` (René) [#&#8203;55545](https://redirect.github.com/nodejs/node/pull/55545)
-   \[[`01eb308f26`](https://redirect.github.com/nodejs/node/commit/01eb308f26)] - **(SEMVER-MINOR)** **report**: fix typos in report keys and bump the version (Yuan-Ming Hsu) [#&#8203;56068](https://redirect.github.com/nodejs/node/pull/56068)
-   \[[`97c38352d0`](https://redirect.github.com/nodejs/node/commit/97c38352d0)] - **(SEMVER-MINOR)** **sqlite**: aggregate constants in a single property (Edigleysson Silva (Edy)) [#&#8203;56213](https://redirect.github.com/nodejs/node/pull/56213)
-   \[[`b4041e554a`](https://redirect.github.com/nodejs/node/commit/b4041e554a)] - **(SEMVER-MINOR)** **sqlite**: add `StatementSync.prototype.iterate` method (tpoisseau) [#&#8203;54213](https://redirect.github.com/nodejs/node/pull/54213)
-   \[[`2e3ca1bbdd`](https://redirect.github.com/nodejs/node/commit/2e3ca1bbdd)] - **(SEMVER-MINOR)** **src**: add cli option to preserve env vars on diagnostic reports (Rafael Gonzaga) [#&#8203;55697](https://redirect.github.com/nodejs/node/pull/55697)
-   \[[`bcfe9c80fc`](https://redirect.github.com/nodejs/node/commit/bcfe9c80fc)] - **(SEMVER-MINOR)** **util**: add sourcemap support to getCallSites (Marco Ippolito) [#&#8203;55589](https://redirect.github.com/nodejs/node/pull/55589)

##### Commits

-   \[[`e9024779c0`](https://redirect.github.com/nodejs/node/commit/e9024779c0)] - **assert**: make Maps be partially compared in partialDeepStrictEqual (Giovanni Bucci) [#&#8203;56195](https://redirect.github.com/nodejs/node/pull/56195)
-   \[[`4c13d8e587`](https://redirect.github.com/nodejs/node/commit/4c13d8e587)] - **assert**: make partialDeepStrictEqual work with ArrayBuffers (Giovanni Bucci) [#&#8203;56098](https://redirect.github.com/nodejs/node/pull/56098)
-   \[[`a4fa31a86e`](https://redirect.github.com/nodejs/node/commit/a4fa31a86e)] - **assert**: optimize partial comparison of two `Set`s (Antoine du Hamel) [#&#8203;55970](https://redirect.github.com/nodejs/node/pull/55970)
-   \[[`05d6227a88`](https://redirect.github.com/nodejs/node/commit/05d6227a88)] - **(SEMVER-MINOR)** **assert**: add partialDeepStrictEqual (Giovanni Bucci) [#&#8203;54630](https://redirect.github.com/nodejs/node/pull/54630)
-   \[[`5e1321abd7`](https://redirect.github.com/nodejs/node/commit/5e1321abd7)] - **buffer**: document concat zero-fill (Duncan) [#&#8203;55562](https://redirect.github.com/nodejs/node/pull/55562)
-   \[[`be5ba7c648`](https://redirect.github.com/nodejs/node/commit/be5ba7c648)] - **build**: set DESTCPU correctly for 'make binary' on loongarch64 (吴小白) [#&#8203;56271](https://redirect.github.com/nodejs/node/pull/56271)
-   \[[`38cf37ee2d`](https://redirect.github.com/nodejs/node/commit/38cf37ee2d)] - **build**: fix missing fp16 dependency in d8 builds (Joyee Cheung) [#&#8203;56266](https://redirect.github.com/nodejs/node/pull/56266)
-   \[[`dbb7557455`](https://redirect.github.com/nodejs/node/commit/dbb7557455)] - **build**: add major release action (Rafael Gonzaga) [#&#8203;56199](https://redirect.github.com/nodejs/node/pull/56199)
-   \[[`27cc90f3be`](https://redirect.github.com/nodejs/node/commit/27cc90f3be)] - **build**: fix C string encoding for `PRODUCT_DIR_ABS` (Anna Henningsen) [#&#8203;56111](https://redirect.github.com/nodejs/node/pull/56111)
-   \[[`376561c2b4`](https://redirect.github.com/nodejs/node/commit/376561c2b4)] - **build**: use variable for simdutf path (Shelley Vohr) [#&#8203;56196](https://redirect.github.com/nodejs/node/pull/56196)
-   \[[`126ae15000`](https://redirect.github.com/nodejs/node/commit/126ae15000)] - **build**: allow overriding clang usage (Shelley Vohr) [#&#8203;56016](https://redirect.github.com/nodejs/node/pull/56016)
-   \[[`97bb8f7c76`](https://redirect.github.com/nodejs/node/commit/97bb8f7c76)] - **build**: remove defaults for create-release-proposal (Rafael Gonzaga) [#&#8203;56042](https://redirect.github.com/nodejs/node/pull/56042)
-   \[[`a8fb1a06f3`](https://redirect.github.com/nodejs/node/commit/a8fb1a06f3)] - **build**: set node_arch to target_cpu in GN (Shelley Vohr) [#&#8203;55967](https://redirect.github.com/nodejs/node/pull/55967)
-   \[[`9f48ca27f1`](https://redirect.github.com/nodejs/node/commit/9f48ca27f1)] - **build**: use variable for crypto dep path (Shelley Vohr) [#&#8203;

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMjcuMyIsInVwZGF0ZWRJblZlciI6IjM5LjIyNy4zIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-04-01 10:45:10 +00:00
zzj3720
08327b14d6 fix(editor): database block columns popover closes unexpectedly (#11352)
fix: BS-2906
2025-04-01 10:32:23 +00:00
fundon
7af5e53838 refactor(editor): image toolbar config extension (#11329)
Closes: [BS-2378](https://linear.app/affine-design/issue/BS-2378/image-toolbar-迁移)
2025-04-01 10:04:28 +00:00
Lakr
032244ae61 feat(ios): translate & continue to chat & clear history (#11347) 2025-04-01 18:03:48 +08:00
akumatus
b74d40d45f refactor(core): ai chat chips (#11341)
Support [BS-2583](https://linear.app/affine-design/issue/BS-2583).

### What changed?
- Move chat panel chip components to `/components` folder.
- Separate `chips` and `embeddingProgress` from ChatContextValue.
2025-04-01 09:15:16 +00:00
pengx17
9cb80205f8 chore(electron): add telemetry events for enabling meetings (#11327)
fix AF-2436
2025-04-01 09:01:31 +00:00
EYHN
275098abe2 fix(core): improve tag list performance (#11353) 2025-04-01 08:48:09 +00:00
zzj3720
ab60203849 fix(editor): database block view layout menu style (#11312)
fix: BS-2950
2025-04-01 08:31:02 +00:00
renovate
cfd709bbbc chore: bump up oxlint version to v0.16.4 (#11349)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [oxlint](https://oxc.rs) ([source](https://redirect.github.com/oxc-project/oxc/tree/HEAD/npm/oxlint)) | [`0.16.3` -> `0.16.4`](https://renovatebot.com/diffs/npm/oxlint/0.16.3/0.16.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/oxlint/0.16.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/oxlint/0.16.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/oxlint/0.16.3/0.16.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/oxlint/0.16.3/0.16.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>oxc-project/oxc (oxlint)</summary>

### [`v0.16.4`](https://redirect.github.com/oxc-project/oxc/releases/tag/oxlint_v0.16.4): oxlint v0.16.4

#### \[0.16.4] - 2025-04-01

-   [`cd1f035`](https://redirect.github.com/oxc-project/oxc/commit/cd1f035) semantic: \[**BREAKING**] Store symbol information as the first entry in `symbol_declarations` when it is redeclared ([#&#8203;10062](https://redirect.github.com/oxc-project/oxc/issues/10062)) (Dunqing)

-   [`da6336c`](https://redirect.github.com/oxc-project/oxc/commit/da6336c) language_server: \[**BREAKING**] Remove `enable` configuration, the client should shutdown the server instead ([#&#8203;9990](https://redirect.github.com/oxc-project/oxc/issues/9990)) (Sysix)

##### Features

-   [`06e3db9`](https://redirect.github.com/oxc-project/oxc/commit/06e3db9) linter: Support `multipleFileExtensions` option for `unicorn/filename-case` ([#&#8203;10118](https://redirect.github.com/oxc-project/oxc/issues/10118)) (shulaoda)
-   [`dbe0e46`](https://redirect.github.com/oxc-project/oxc/commit/dbe0e46) linter: Support `ignore` option for `unicorn/filename-case` ([#&#8203;10107](https://redirect.github.com/oxc-project/oxc/issues/10107)) (shulaoda)
-   [`84a3490`](https://redirect.github.com/oxc-project/oxc/commit/84a3490) semantic: Add `symbol_id` for declare function binding ([#&#8203;10078](https://redirect.github.com/oxc-project/oxc/issues/10078)) (Dunqing)
-   [`370266c`](https://redirect.github.com/oxc-project/oxc/commit/370266c) semantic: Check redeclaration of variable declaration and function declaration in the block scope ([#&#8203;10074](https://redirect.github.com/oxc-project/oxc/issues/10074)) (Dunqing)
-   [`b804f7c`](https://redirect.github.com/oxc-project/oxc/commit/b804f7c) semantic: Introduce `Redeclaraion` for `Scoping::symbol_declarations` ([#&#8203;10059](https://redirect.github.com/oxc-project/oxc/issues/10059)) (Dunqing)

##### Bug Fixes

-   [`0a33e27`](https://redirect.github.com/oxc-project/oxc/commit/0a33e27) editor: Update `initializationOptions` for a possible restart ([#&#8203;10121](https://redirect.github.com/oxc-project/oxc/issues/10121)) (Sysix)
-   [`ac780a2`](https://redirect.github.com/oxc-project/oxc/commit/ac780a2) editor: Repair filewatchers when no custom config provided ([#&#8203;10104](https://redirect.github.com/oxc-project/oxc/issues/10104)) (Sysix)
-   [`4303ace`](https://redirect.github.com/oxc-project/oxc/commit/4303ace) editor: Dont send `didChangeConfiguration` request to the server when it is shutdown ([#&#8203;10084](https://redirect.github.com/oxc-project/oxc/issues/10084)) (Sysix)
-   [`07f2a25`](https://redirect.github.com/oxc-project/oxc/commit/07f2a25) editor: Enable regex parsing in language server ([#&#8203;10035](https://redirect.github.com/oxc-project/oxc/issues/10035)) (camchenry)
-   [`fcf7702`](https://redirect.github.com/oxc-project/oxc/commit/fcf7702) language_server: Start from a default oxlint configuration + SafeFix for nested configuration ([#&#8203;10043](https://redirect.github.com/oxc-project/oxc/issues/10043)) (Sysix)
-   [`aba3654`](https://redirect.github.com/oxc-project/oxc/commit/aba3654) linter: Span disable directive correctly on next line ([#&#8203;10141](https://redirect.github.com/oxc-project/oxc/issues/10141)) (Ulrich Stark 🦀)
-   [`2c80858`](https://redirect.github.com/oxc-project/oxc/commit/2c80858) linter: Enable multi-file analysis for nested configs ([#&#8203;10089](https://redirect.github.com/oxc-project/oxc/issues/10089)) (camchenry)

##### Performance

-   [`566be59`](https://redirect.github.com/oxc-project/oxc/commit/566be59) linter: Replace `phf_set` with `array` in `eslint/func-names` ([#&#8203;10119](https://redirect.github.com/oxc-project/oxc/issues/10119)) (shulaoda)
-   [`5e14fe9`](https://redirect.github.com/oxc-project/oxc/commit/5e14fe9) linter: Inline `PRE_DEFINE_VAR` and use `array` format ([#&#8203;10079](https://redirect.github.com/oxc-project/oxc/issues/10079)) (shulaoda)

##### Refactor

-   [`327be53`](https://redirect.github.com/oxc-project/oxc/commit/327be53) editor: `LanguageClient` can be undefined ([#&#8203;10112](https://redirect.github.com/oxc-project/oxc/issues/10112)) (Sysix)
-   [`5ec477c`](https://redirect.github.com/oxc-project/oxc/commit/5ec477c) editor: Make `onConfigChange` async ([#&#8203;10110](https://redirect.github.com/oxc-project/oxc/issues/10110)) (Sysix)
-   [`a278d73`](https://redirect.github.com/oxc-project/oxc/commit/a278d73) editor: Use warning background when the plugin is deactived ([#&#8203;10085](https://redirect.github.com/oxc-project/oxc/issues/10085)) (Sysix)
-   [`c0e5251`](https://redirect.github.com/oxc-project/oxc/commit/c0e5251) language_server: Set `null` as a default value for `configPath` ([#&#8203;10047](https://redirect.github.com/oxc-project/oxc/issues/10047)) (Sysix)
-   [`09c0ac6`](https://redirect.github.com/oxc-project/oxc/commit/09c0ac6) linter: Improve `unicorn/filename-case` ([#&#8203;10117](https://redirect.github.com/oxc-project/oxc/issues/10117)) (shulaoda)
-   [`d8e49a1`](https://redirect.github.com/oxc-project/oxc/commit/d8e49a1) linter: Compute lintable extensions at compile time ([#&#8203;10090](https://redirect.github.com/oxc-project/oxc/issues/10090)) (camchenry)
-   [`b3ec235`](https://redirect.github.com/oxc-project/oxc/commit/b3ec235) linter: Use items of `oxc_ast::ast` module directly ([#&#8203;10100](https://redirect.github.com/oxc-project/oxc/issues/10100)) (Ulrich Stark 🦀)
-   [`93e6c0b`](https://redirect.github.com/oxc-project/oxc/commit/93e6c0b) linter: Use `FormalParameter::has_modifier` to detect parameter properties ([#&#8203;10097](https://redirect.github.com/oxc-project/oxc/issues/10097)) (Ulrich Stark 🦀)
-   [`5d829c2`](https://redirect.github.com/oxc-project/oxc/commit/5d829c2) semantic: Align handling of declaring symbol for function with TypeScript ([#&#8203;10086](https://redirect.github.com/oxc-project/oxc/issues/10086)) (Dunqing)

##### Testing

-   [`410b8d6`](https://redirect.github.com/oxc-project/oxc/commit/410b8d6) editor: Use debug build of the language server ([#&#8203;10083](https://redirect.github.com/oxc-project/oxc/issues/10083)) (Sysix)
-   [`500add0`](https://redirect.github.com/oxc-project/oxc/commit/500add0) editor: Add test for `oxc.fixAll` command ([#&#8203;10045](https://redirect.github.com/oxc-project/oxc/issues/10045)) (Sysix)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMDcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjIwNy4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-04-01 08:17:07 +00:00
doouding
56db0d3b0e refactor: remove unused surface service (#11339) 2025-04-01 08:03:00 +00:00
Brooooooklyn
c94f782da2 ci: increase Node.js rss memory limits during desktop clients building (#11345) 2025-04-01 07:13:38 +00:00
pengx17
d96f00925c fix(core): should not close peek view when clicking at menu items (#11344)
fix AF-2329
2025-04-01 07:00:04 +00:00
renovate
b785b7e8e5 chore: bump up @types/node version to v22.13.15 (#11346)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`22.13.14` -> `22.13.15`](https://renovatebot.com/diffs/npm/@types%2fnode/22.13.14/22.13.15) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/22.13.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/22.13.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/22.13.14/22.13.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/22.13.14/22.13.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMDcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjIwNy4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-04-01 06:35:36 +00:00
renovate
b1d4a3c001 chore: bump up app-builder-lib version to v26 (#11343)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [app-builder-lib](https://redirect.github.com/electron-userland/electron-builder) ([source](https://redirect.github.com/electron-userland/electron-builder/tree/HEAD/packages/app-builder-lib)) | [`^25.1.8` -> `^26.0.0`](https://renovatebot.com/diffs/npm/app-builder-lib/25.1.8/26.0.12) | [![age](https://developer.mend.io/api/mc/badges/age/npm/app-builder-lib/26.0.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/app-builder-lib/26.0.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/app-builder-lib/25.1.8/26.0.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/app-builder-lib/25.1.8/26.0.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>electron-userland/electron-builder (app-builder-lib)</summary>

### [`v26.0.12`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#26012)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.11...v26.0.12)

##### Patch Changes

-   [#&#8203;8968](https://redirect.github.com/electron-userland/electron-builder/pull/8968) [`2d25ec8c`](2d25ec8ca9) Thanks [@&#8203;t3chguy](https://redirect.github.com/t3chguy)! - chore(docs): Fix typo in `SquirrelWindowsOptions`

-   [#&#8203;8947](https://redirect.github.com/electron-userland/electron-builder/pull/8947) [`7ba4fea9`](7ba4fea958) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: support `mas` packages for flipping fuses

-   [#&#8203;8958](https://redirect.github.com/electron-userland/electron-builder/pull/8958) [`81e0c472`](81e0c472fe) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - optimize workspace package resolution in dependency tree

-   [#&#8203;8979](https://redirect.github.com/electron-userland/electron-builder/pull/8979) [`f24a2ce0`](f24a2ce05c) Thanks [@&#8203;teamchong](https://redirect.github.com/teamchong)! - Fix: Azure trust signing fails with spaces in parameters

-   [#&#8203;8957](https://redirect.github.com/electron-userland/electron-builder/pull/8957) [`ad151b9d`](ad151b9dbe) Thanks [@&#8203;indutny-signal](https://redirect.github.com/indutny-signal)! - fix: pnpm collection of optional dependencies

-   Updated dependencies \[]:
    -   dmg-builder@26.0.12
    -   electron-builder-squirrel-windows@26.0.12

### [`v26.0.11`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#26011)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.10...v26.0.11)

##### Patch Changes

-   [#&#8203;8941](https://redirect.github.com/electron-userland/electron-builder/pull/8941) [`14b96dfc`](14b96dfcbb) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: find cwd using getProjectRootPath for detecting package manager

-   [#&#8203;8928](https://redirect.github.com/electron-userland/electron-builder/pull/8928) [`70d7c855`](70d7c85536) Thanks [@&#8203;rotu](https://redirect.github.com/rotu)! - chore(docs): Document that detectUpdateChannel doesn't work when publishing to github

-   [#&#8203;8932](https://redirect.github.com/electron-userland/electron-builder/pull/8932) [`e1ea62b0`](e1ea62b002) Thanks [@&#8203;gaaf](https://redirect.github.com/gaaf)! - fix: `after-install.tpl`: Detect if apparmor is enabled instead of just file-exists check

-   Updated dependencies \[[`53a81939`](53a81939b8)]:
    -   builder-util@26.0.11
    -   dmg-builder@26.0.11
    -   electron-builder-squirrel-windows@26.0.11
    -   electron-publish@26.0.11

### [`v26.0.10`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#26010)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.9...v26.0.10)

##### Patch Changes

-   [#&#8203;8890](https://redirect.github.com/electron-userland/electron-builder/pull/8890) [`3ce33edb`](3ce33edbe0) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - chore: replace the plist functionality in app-builder-bin with plist

-   [#&#8203;8926](https://redirect.github.com/electron-userland/electron-builder/pull/8926) [`3caab3c4`](3caab3c422) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: fix custom publisher check and throw error if not found

-   [#&#8203;8915](https://redirect.github.com/electron-userland/electron-builder/pull/8915) [`8903c5df`](8903c5df04) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - fix: improve atomicRMDir function in NSIS uninstaller

-   Updated dependencies \[]:
    -   dmg-builder@26.0.10
    -   electron-builder-squirrel-windows@26.0.10

### [`v26.0.9`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2609)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.8...v26.0.9)

##### Patch Changes

-   [#&#8203;8895](https://redirect.github.com/electron-userland/electron-builder/pull/8895) [`22da6442`](22da644251) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: remove Promise ability from AsyncEventEmitter as it's impossible to filter listeners by without being async

-   [#&#8203;8885](https://redirect.github.com/electron-userland/electron-builder/pull/8885) [`4cc475ed`](4cc475ed21) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: `node-linker=hoisted` fallback to utilize Npm module collector

-   [#&#8203;8908](https://redirect.github.com/electron-userland/electron-builder/pull/8908) [`62029b08`](62029b08c1) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: when using osx-sign, specifically pass in identity name instead of hash

-   [#&#8203;8896](https://redirect.github.com/electron-userland/electron-builder/pull/8896) [`67b6f71f`](67b6f71f85) Thanks [@&#8203;BrandonXLF](https://redirect.github.com/BrandonXLF)! - fix: allow publishing to Snap Store to be disabled with snap specific publish options

-   [#&#8203;8899](https://redirect.github.com/electron-userland/electron-builder/pull/8899) [`69184315`](6918431560) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - test: adding fixtures for lockfiles to support `--frozen-lockfile` (yarn, pnpm) and `ci` (npm)

-   Updated dependencies \[]:
    -   dmg-builder@26.0.9
    -   electron-builder-squirrel-windows@26.0.9

### [`v26.0.8`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2608)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.7...v26.0.8)

##### Patch Changes

-   [#&#8203;8872](https://redirect.github.com/electron-userland/electron-builder/pull/8872) [`7f6c3fea`](7f6c3fea6f) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore: refactor node module collector, extract explicit `DependencyTree`, update types to be generic and respective to `npm list` vs `pnpm list` dependency trees

-   [#&#8203;8868](https://redirect.github.com/electron-userland/electron-builder/pull/8868) [`48c9f88b`](48c9f88b18) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: allow usage of .cjs, .mjs, and type=module custom/generic publishers

-   [#&#8203;8872](https://redirect.github.com/electron-userland/electron-builder/pull/8872) [`7f6c3fea`](7f6c3fea6f) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore: refactor node module collector to reduce recursion, extract explicit DependencyTree, update types

-   Updated dependencies \[]:
    -   dmg-builder@26.0.8
    -   electron-builder-squirrel-windows@26.0.8

### [`v26.0.7`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2607)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.6...v26.0.7)

##### Patch Changes

-   [#&#8203;8864](https://redirect.github.com/electron-userland/electron-builder/pull/8864) [`3fe27d77`](3fe27d7758) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - Detected circular dependencies and add debug logs for nodeModulesCollector, and refactored YarnNodeModulesCollector to extend NpmNodeModulesCollector.

-   Updated dependencies \[[`bee179b3`](bee179b3cf), [`c12f86f2`](c12f86f2e2)]:
    -   electron-builder-squirrel-windows@26.0.7
    -   builder-util@26.0.7
    -   dmg-builder@26.0.7
    -   electron-publish@26.0.7

### [`v26.0.6`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2606)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.5...v26.0.6)

##### Patch Changes

-   [#&#8203;8843](https://redirect.github.com/electron-userland/electron-builder/pull/8843) [`7fc78460`](7fc784603d) Thanks [@&#8203;fiesh](https://redirect.github.com/fiesh)! - fix: Only update AppArmor profile if not chroot'ed

-   [#&#8203;8851](https://redirect.github.com/electron-userland/electron-builder/pull/8851) [`0f2c9637`](0f2c963791) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - Fix the issue of the missing ms package

-   Updated dependencies \[]:
    -   dmg-builder@26.0.6
    -   electron-builder-squirrel-windows@26.0.6

### [`v26.0.5`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2605)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.4...v26.0.5)

##### Patch Changes

-   [#&#8203;8845](https://redirect.github.com/electron-userland/electron-builder/pull/8845) [`53ee6c6c`](53ee6c6c49) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - delete peerDepenencies when collecting node modules

-   Updated dependencies \[]:
    -   dmg-builder@26.0.5
    -   electron-builder-squirrel-windows@26.0.5

### [`v26.0.4`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2604)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.3...v26.0.4)

##### Patch Changes

-   [#&#8203;8839](https://redirect.github.com/electron-userland/electron-builder/pull/8839) [`8b059ad3`](8b059ad3ba) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - feat: switch app-builder-bin to node-module-collector to get all production node modules

-   Updated dependencies \[[`8b059ad3`](8b059ad3ba)]:
    -   builder-util@26.0.4
    -   dmg-builder@26.0.4
    -   electron-builder-squirrel-windows@26.0.4
    -   electron-publish@26.0.4

### [`v26.0.3`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2603)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.2...v26.0.3)

##### Patch Changes

-   [#&#8203;8344](https://redirect.github.com/electron-userland/electron-builder/pull/8344) [`27b2ba81`](27b2ba8129) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - use electron-winstaller instead of self module

-   [#&#8203;8834](https://redirect.github.com/electron-userland/electron-builder/pull/8834) [`6261c9a0`](6261c9a038) Thanks [@&#8203;dominhhai](https://redirect.github.com/dominhhai)! - feat(pkg): support notarizing pkg for macos archives

-   Updated dependencies \[[`27b2ba81`](27b2ba8129)]:
    -   electron-builder-squirrel-windows@26.0.3
    -   dmg-builder@26.0.3

### [`v26.0.2`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2602)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.1...v26.0.2)

##### Patch Changes

-   [#&#8203;8785](https://redirect.github.com/electron-userland/electron-builder/pull/8785) [`b3adf480`](b3adf4800b) Thanks [@&#8203;lamawithonel](https://redirect.github.com/lamawithonel)! - feat: Allow users to pass a custom electrons headers URL via env var

-   [#&#8203;8767](https://redirect.github.com/electron-userland/electron-builder/pull/8767) [`f45a09ee`](f45a09eeeb) Thanks [@&#8203;dominhhai](https://redirect.github.com/dominhhai)! - feat(pkg): support extra component packages (`.pkg`) for macos archives

-   [#&#8203;8833](https://redirect.github.com/electron-userland/electron-builder/pull/8833) [`f5af99ac`](f5af99ac87) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: upgrading TrustedSigning module and setting it as minimum version instead of required

-   [#&#8203;8830](https://redirect.github.com/electron-userland/electron-builder/pull/8830) [`44603f2f`](44603f2f3c) Thanks [@&#8203;Julusian](https://redirect.github.com/Julusian)! - fix: handle yarn berry patch format in electron-updater version check

-   Updated dependencies \[]:
    -   dmg-builder@26.0.2
    -   electron-builder-squirrel-windows@26.0.2

### [`v26.0.1`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#26012)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.0...v26.0.1)

##### Patch Changes

-   [#&#8203;8968](https://redirect.github.com/electron-userland/electron-builder/pull/8968) [`2d25ec8c`](2d25ec8ca9) Thanks [@&#8203;t3chguy](https://redirect.github.com/t3chguy)! - chore(docs): Fix typo in `SquirrelWindowsOptions`

-   [#&#8203;8947](https://redirect.github.com/electron-userland/electron-builder/pull/8947) [`7ba4fea9`](7ba4fea958) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: support `mas` packages for flipping fuses

-   [#&#8203;8958](https://redirect.github.com/electron-userland/electron-builder/pull/8958) [`81e0c472`](81e0c472fe) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - optimize workspace package resolution in dependency tree

-   [#&#8203;8979](https://redirect.github.com/electron-userland/electron-builder/pull/8979) [`f24a2ce0`](f24a2ce05c) Thanks [@&#8203;teamchong](https://redirect.github.com/teamchong)! - Fix: Azure trust signing fails with spaces in parameters

-   [#&#8203;8957](https://redirect.github.com/electron-userland/electron-builder/pull/8957) [`ad151b9d`](ad151b9dbe) Thanks [@&#8203;indutny-signal](https://redirect.github.com/indutny-signal)! - fix: pnpm collection of optional dependencies

-   Updated dependencies \[]:
    -   dmg-builder@26.0.12
    -   electron-builder-squirrel-windows@26.0.12

### [`v26.0.0`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2600)

##### Major Changes

-   [#&#8203;8582](https://redirect.github.com/electron-userland/electron-builder/pull/8582) [`6a9597b4`](6a9597b4d7) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore: remove deprecated fields from `winOptions` and `macOptions`

    For `winOptions` signing configuration, it has been moved to `win.signtoolOptions` in order to support `azureOptions` as a separate field and avoid bloating `win` configuration object
    For `macOptions`, notarize options has been deprecated in favor of env vars for quite some time. Env vars are much more secure

-   [#&#8203;8572](https://redirect.github.com/electron-userland/electron-builder/pull/8572) [`0dbe357a`](0dbe357ac5) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - feat: allowing additional entries in .desktop file, such as `[Desktop Actions <actionName>]`. Requires changing configuration `desktop` property to object to be more extensible in the future

-   [#&#8203;8562](https://redirect.github.com/electron-userland/electron-builder/pull/8562) [`b8185d48`](b8185d48a7) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - support including node_modules in other subdirectories

##### Minor Changes

-   [#&#8203;8609](https://redirect.github.com/electron-userland/electron-builder/pull/8609) [`d672b04b`](d672b04b47) Thanks [@&#8203;iongion](https://redirect.github.com/iongion)! - feat: support completely custom AppxManifest.xml

-   [#&#8203;8607](https://redirect.github.com/electron-userland/electron-builder/pull/8607) [`f123628c`](f123628ce4) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - feat: allow disabling of building a universal windows installer

-   [#&#8203;8711](https://redirect.github.com/electron-userland/electron-builder/pull/8711) [`6f0fb8e4`](6f0fb8e44f) Thanks [@&#8203;hrueger](https://redirect.github.com/hrueger)! - Add `host` property to support self-hosted Keygen instances

-   [#&#8203;8636](https://redirect.github.com/electron-userland/electron-builder/pull/8636) [`88cc0b06`](88cc0b06db) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - feat: add support for AppArmor with template profile and configuration property

-   [#&#8203;8570](https://redirect.github.com/electron-userland/electron-builder/pull/8570) [`c8484305`](c84843053a) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - feat: migrate to official `electron/asar` packaging

-   [#&#8203;8525](https://redirect.github.com/electron-userland/electron-builder/pull/8525) [`13f55a3e`](13f55a3ef0) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - feat: migrate `electronDist` to be an electron-builder `Hook`

-   [#&#8203;8588](https://redirect.github.com/electron-userland/electron-builder/pull/8588) [`8434e10d`](8434e10dad) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - feat: adding integration with [@&#8203;electron/fuses](https://redirect.github.com/electron/fuses)

-   [#&#8203;8787](https://redirect.github.com/electron-userland/electron-builder/pull/8787) [`cdf18d9a`](cdf18d9a0f) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - feat: add `pwsh` detection to enable azure trusted signing within docker image

-   [#&#8203;8394](https://redirect.github.com/electron-userland/electron-builder/pull/8394) [`ae9221d9`](ae9221d947) Thanks [@&#8203;xyloflake](https://redirect.github.com/xyloflake)! - feat: Implement autoupdates for pacman

##### Patch Changes

-   [#&#8203;8645](https://redirect.github.com/electron-userland/electron-builder/pull/8645) [`f4d40f91`](f4d40f91f1) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - fix: smart unpack for local module with dll

-   [#&#8203;8762](https://redirect.github.com/electron-userland/electron-builder/pull/8762) [`c4f54977`](c4f5497704) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: update [@&#8203;electron/asar](https://redirect.github.com/electron/asar) to 3.2.18 to resolve signing issue with framework symlinks

-   [#&#8203;8650](https://redirect.github.com/electron-userland/electron-builder/pull/8650) [`f84a0831`](f84a0831d1) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix(win): add required `publisherName` field to Azure Trusted Signing

-   [#&#8203;8573](https://redirect.github.com/electron-userland/electron-builder/pull/8573) [`1fee87a2`](1fee87a20e) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore(deps): update ejs to v3.1.10

-   [#&#8203;8799](https://redirect.github.com/electron-userland/electron-builder/pull/8799) [`45a402b9`](45a402b978) Thanks [@&#8203;t3chguy](https://redirect.github.com/t3chguy)! - fix(mac): only fuse macOS universal builds on the combined universal package

-   [#&#8203;8671](https://redirect.github.com/electron-userland/electron-builder/pull/8671) [`a4505a37`](a4505a3785) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - chore(deps): update electron/asar to 3.2.17

-   [#&#8203;8596](https://redirect.github.com/electron-userland/electron-builder/pull/8596) [`e0b0e351`](e0b0e351ba) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore: refactor files for publishing to electron-publish

-   [#&#8203;8653](https://redirect.github.com/electron-userland/electron-builder/pull/8653) [`796e1a07`](796e1a072a) Thanks [@&#8203;IsaacAderogba](https://redirect.github.com/IsaacAderogba)! - fix: cscIKeyPassword must support empty string arguments

-   [#&#8203;8627](https://redirect.github.com/electron-userland/electron-builder/pull/8627) [`2a3195d9`](2a3195d99f) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: add rfc3161 timestamp entry as default for azure signing to resolve Windows Defender alert

-   [#&#8203;8725](https://redirect.github.com/electron-userland/electron-builder/pull/8725) [`ccbf0a5b`](ccbf0a5be3) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - fix: electron-builder fails when list of node_modules files is too big to pass in a glob

-   [#&#8203;8661](https://redirect.github.com/electron-userland/electron-builder/pull/8661) [`6a294c97`](6a294c9725) Thanks [@&#8203;t3chguy](https://redirect.github.com/t3chguy)! - chore: remove stale handler for `extend-info` in electronMac plist creation

-   [#&#8203;8577](https://redirect.github.com/electron-userland/electron-builder/pull/8577) [`e9eef0c1`](e9eef0c1c7) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: add additional default exclusions to copy logic

-   [#&#8203;8566](https://redirect.github.com/electron-userland/electron-builder/pull/8566) [`e45fecf0`](e45fecf04d) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore: change signing warning message to debug

-   [#&#8203;8576](https://redirect.github.com/electron-userland/electron-builder/pull/8576) [`3eab7143`](3eab7143d7) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - fix: packages in the workspace not being under node_modules

-   [#&#8203;8691](https://redirect.github.com/electron-userland/electron-builder/pull/8691) [`5a9141f6`](5a9141f60a) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore(mac): add back logging of identity name and hash as opposed to just hash

-   [#&#8203;8805](https://redirect.github.com/electron-userland/electron-builder/pull/8805) [`c6d6b6e5`](c6d6b6e57b) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: ASAR files in extraResources are not included in integrity calculations

-   [#&#8203;8575](https://redirect.github.com/electron-userland/electron-builder/pull/8575) [`dfa35c32`](dfa35c321f) Thanks [@&#8203;doctolivier](https://redirect.github.com/doctolivier)! - chore(deps): update [@&#8203;electron/rebuild](https://redirect.github.com/electron/rebuild) to v3.7.0

-   [#&#8203;8637](https://redirect.github.com/electron-userland/electron-builder/pull/8637) [`667ab2f8`](667ab2f8d5) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore: migrate default recommends and default depends for fpm from app-builder-bin to JS code

-   [#&#8203;8727](https://redirect.github.com/electron-userland/electron-builder/pull/8727) [`7268c2ee`](7268c2eea3) Thanks [@&#8203;NoahAndrews](https://redirect.github.com/NoahAndrews)! - chore: Rename `vmRequired` variable to `useVmIfNotOnWin`

-   [#&#8203;8714](https://redirect.github.com/electron-userland/electron-builder/pull/8714) [`66334502`](66334502a5) Thanks [@&#8203;kttmv](https://redirect.github.com/kttmv)! - chore: Remove informal Russian messages in the NSIS installer

-   [#&#8203;8606](https://redirect.github.com/electron-userland/electron-builder/pull/8606) [`a0e635c1`](a0e635c183) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: add quotes to surround file path during azure signing to handle files with spaces

-   [#&#8203;8603](https://redirect.github.com/electron-userland/electron-builder/pull/8603) [`712a8bce`](712a8bce56) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: checking relative path without separator as that doesn't work on Windows

-   [#&#8203;8639](https://redirect.github.com/electron-userland/electron-builder/pull/8639) [`28006623`](28006623a1) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore: refactor electron dist logic to avoid unnecessary console logs

-   [#&#8203;8715](https://redirect.github.com/electron-userland/electron-builder/pull/8715) [`4c394d54`](4c394d5468) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - fix: does not work with NPM workspaces

-   [#&#8203;8654](https://redirect.github.com/electron-userland/electron-builder/pull/8654) [`9e11358f`](9e11358fc2) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: check ResolvedFileSet src when verifying symlinks to be within project directory

-   [#&#8203;8632](https://redirect.github.com/electron-userland/electron-builder/pull/8632) [`645e2abd`](645e2abd5e) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: only sign concurrently when using local signtool. azure can't be in parallel due to resources being locked during usage

-   [#&#8203;8601](https://redirect.github.com/electron-userland/electron-builder/pull/8601) [`215fc36b`](215fc36b5e) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - Revert "fix(win): use appInfo description as primary entry for FileDescription" to resolve [https://github.com/electron-userland/electron-builder/issues/8599](https://redirect.github.com/electron-userland/electron-builder/issues/8599)

-   [`a1ee0419`](a1ee04191f) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: use FileCopier for copying files and queue creation of symlinks

-   [#&#8203;8689](https://redirect.github.com/electron-userland/electron-builder/pull/8689) [`1d7f87c1`](1d7f87c102) Thanks [@&#8203;Lemonexe](https://redirect.github.com/Lemonexe)! - fix(win): corrupt asar integrity file path on crossplatform build

-   [#&#8203;8749](https://redirect.github.com/electron-userland/electron-builder/pull/8749) [`ee2c6dc1`](ee2c6dc133) Thanks [@&#8203;kethinov](https://redirect.github.com/kethinov)! - fix: typo in urls in tsdoc

-   Updated dependencies \[[`f4d40f91`](f4d40f91f1), [`633490cb`](633490cb39), [`e0b0e351`](e0b0e351ba), [`eacbbf59`](eacbbf593f), [`6f0fb8e4`](6f0fb8e44f), [`6a6bed46`](6a6bed46c4), [`3eab7143`](3eab7143d7), [`a5558e33`](a5558e3380), [`d4ea0d99`](d4ea0d998d), [`b8185d48`](b8185d48a7), [`dcd91a1f`](dcd91a1f79)]:
    -   builder-util@26.0.0
    -   dmg-builder@26.0.0
    -   electron-builder-squirrel-windows@26.0.0
    -   electron-publish@26.0.0
    -   builder-util-runtime@9.3.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMDcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjIwNy4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-04-01 06:20:34 +00:00
renovate
1d6698572a chore: bump up Lakr233/MSDisplayLink version to v2 (#9541)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [Lakr233/MSDisplayLink](https://redirect.github.com/Lakr233/MSDisplayLink) | major | `from: "1.1.1"` -> `from: "2.0.8"` |

---

### Release Notes

<details>
<summary>Lakr233/MSDisplayLink (Lakr233/MSDisplayLink)</summary>

### [`v2.0.8`](https://redirect.github.com/Lakr233/MSDisplayLink/compare/2.0.7...2.0.8)

[Compare Source](https://redirect.github.com/Lakr233/MSDisplayLink/compare/2.0.7...2.0.8)

### [`v2.0.7`](https://redirect.github.com/Lakr233/MSDisplayLink/compare/2.0.6...2.0.7)

[Compare Source](https://redirect.github.com/Lakr233/MSDisplayLink/compare/2.0.6...2.0.7)

### [`v2.0.6`](https://redirect.github.com/Lakr233/MSDisplayLink/compare/2.0.5...2.0.6)

[Compare Source](https://redirect.github.com/Lakr233/MSDisplayLink/compare/2.0.5...2.0.6)

### [`v2.0.5`](https://redirect.github.com/Lakr233/MSDisplayLink/compare/2.0.4...2.0.5)

[Compare Source](https://redirect.github.com/Lakr233/MSDisplayLink/compare/2.0.4...2.0.5)

### [`v2.0.4`](https://redirect.github.com/Lakr233/MSDisplayLink/compare/2.0.3...2.0.4)

[Compare Source](https://redirect.github.com/Lakr233/MSDisplayLink/compare/2.0.3...2.0.4)

### [`v2.0.3`](https://redirect.github.com/Lakr233/MSDisplayLink/compare/1.1.1...2.0.3)

[Compare Source](https://redirect.github.com/Lakr233/MSDisplayLink/compare/1.1.1...2.0.3)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS44NS4wIiwidXBkYXRlZEluVmVyIjoiMzkuMjA3LjEiLCJ0YXJnZXRCcmFuY2giOiJjYW5hcnkiLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19-->
2025-04-01 06:06:19 +00:00
L-Sun
10d86fee9f chore(editor): update slash menu ui (#11305)
Close [BS-2954](https://linear.app/affine-design/issue/BS-2954/menu长宽为280390)
Close [BS-2955](https://linear.app/affine-design/issue/BS-2955/frame-与mind-map的tooltips)
Close [BS-2956](https://linear.app/affine-design/issue/BS-2956/to-do-list-tooltip缺失)

### What Changes
- update size of slash menu
- updare tooltips in slash menu
  - frame
  - mindmap
2025-04-01 05:51:59 +00:00
darkskygit
dc67614d6d feat(server): improve context error handle (#11342) 2025-04-01 05:38:33 +00:00
Flrande
6ed9c33c33 fix(editor): inline editor should not change event source editable (#11331)
Close [BS-2988: database block会把顶层content editable设成false](https://linear.app/affine-design/issue/BS-2988/database-block会把顶层content-editable设成false)
2025-04-01 05:24:27 +00:00
LongYinan
cbe372c6ec Revert "chore: bump up app-builder-lib version to v26 (#11218)"
This reverts commit 7478df56ee.
2025-04-01 13:23:27 +08:00
renovate
b6faf70e4d chore: bump up tinybench version to v4 (#11340)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [tinybench](https://redirect.github.com/tinylibs/tinybench) | [`^3.0.7` -> `^4.0.0`](https://renovatebot.com/diffs/npm/tinybench/3.1.1/4.0.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/tinybench/4.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tinybench/4.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tinybench/3.1.1/4.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tinybench/3.1.1/4.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>tinylibs/tinybench (tinybench)</summary>

### [`v4.0.1`](https://redirect.github.com/tinylibs/tinybench/releases/tag/v4.0.1)

[Compare Source](https://redirect.github.com/tinylibs/tinybench/compare/v4.0.0...v4.0.1)

#####    🐞 Bug Fixes

-   Export newly added FnHook type definition  -  by [@&#8203;jerome-benoit](https://redirect.github.com/jerome-benoit) [<samp>(802ff)</samp>](https://redirect.github.com/tinylibs/tinybench/commit/802ffac)

#####     [View changes on GitHub](https://redirect.github.com/tinylibs/tinybench/compare/v4.0.0...v4.0.1)

### [`v4.0.0`](https://redirect.github.com/tinylibs/tinybench/releases/tag/v4.0.0)

[Compare Source](https://redirect.github.com/tinylibs/tinybench/compare/v3.1.1...v4.0.0)

#####    🚨 Breaking Changes

-   Esm-only  -  by [@&#8203;43081j](https://redirect.github.com/43081j) and [@&#8203;jerome-benoit](https://redirect.github.com/jerome-benoit) in [https://github.com/tinylibs/tinybench/issues/253](https://redirect.github.com/tinylibs/tinybench/issues/253) [<samp>(63e90)</samp>](https://redirect.github.com/tinylibs/tinybench/commit/63e90d8)
-   Change setup/teardown hook signature by making `task` and `mode` arguments optional

#####    🚀 Features

-   Add mode to fn hooks  -  by [@&#8203;crimx](https://redirect.github.com/crimx) in [https://github.com/tinylibs/tinybench/issues/259](https://redirect.github.com/tinylibs/tinybench/issues/259) [<samp>(e13f0)</samp>](https://redirect.github.com/tinylibs/tinybench/commit/e13f07a)

#####     [View changes on GitHub](https://redirect.github.com/tinylibs/tinybench/compare/v3.1.1...v4.0.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMDcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjIwNy4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-04-01 05:09:20 +00:00
L-Sun
e7f5601303 fix(editor): undo should remove the new frame created by dragging (#11303)
Close [BS-2848](https://linear.app/affine-design/issue/BS-2848/但我发现frame创建后,要撤销两次才能删掉)
2025-04-01 04:41:44 +00:00
renovate
c3a5301d5b chore: bump up sinon version to v20 (#11338)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [sinon](https://sinonjs.org/) ([source](https://redirect.github.com/sinonjs/sinon)) | [`^19.0.2` -> `^20.0.0`](https://renovatebot.com/diffs/npm/sinon/19.0.5/20.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/sinon/20.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/sinon/20.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/sinon/19.0.5/20.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/sinon/19.0.5/20.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>sinonjs/sinon (sinon)</summary>

### [`v20.0.0`](https://redirect.github.com/sinonjs/sinon/blob/HEAD/CHANGES.md#2000)

[Compare Source](https://redirect.github.com/sinonjs/sinon/compare/v19.0.5...v20.0.0)

-   [`b6daed26`](b6daed26cd)
    chore!: remove usingPromise (Morgan Roderick)
    > Everyone should be using native promises by now, or should know how to stub natives
-   [`95d4b8fc`](95d4b8fc89)
    chore!: remove fakeXMLHttpRequest and fakeServer (Morgan Roderick)
    > BREAKING CHANGE: remove fakeXMLHttpRequest and fakeServer from the API

*Released by Morgan Roderick on 2025-03-24.*

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMDcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjIwNy4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-04-01 04:28:31 +00:00
Flrande
b0b7534599 fix(editor): improve error message in mention (#11309)
Close [BS-2972](https://linear.app/affine-design/issue/BS-2972/邀请了无权限阅读的用户时,报错信息展示不正确)
Close [BS-2973](https://linear.app/affine-design/issue/BS-2973/也没有区分邀请人是否有邀请权限,并如设计稿给出邀请提示)
2025-04-01 04:15:01 +00:00
renovate
9f8cf4e2ca chore: bump up react-email version to v4 (#11335)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [react-email](https://redirect.github.com/resend/react-email) ([source](https://redirect.github.com/resend/react-email/tree/HEAD/packages/react-email)) | [`3.0.7` -> `4.0.2`](https://renovatebot.com/diffs/npm/react-email/3.0.7/4.0.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-email/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-email/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-email/3.0.7/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-email/3.0.7/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>resend/react-email (react-email)</summary>

### [`v4.0.2`](https://redirect.github.com/resend/react-email/blob/HEAD/packages/react-email/CHANGELOG.md#402)

[Compare Source](https://redirect.github.com/resend/react-email/compare/react-email@4.0.1...react-email@4.0.2)

##### Patch Changes

-   [`ddf9652`](https://redirect.github.com/resend/react-email/commit/ddf9652): Fix crashing when the link or image does not exist

### [`v4.0.1`](https://redirect.github.com/resend/react-email/blob/HEAD/packages/react-email/CHANGELOG.md#401)

[Compare Source](https://redirect.github.com/resend/react-email/compare/react-email@4.0.0...react-email@4.0.1)

##### Patch Changes

-   [`8fd7409`](https://redirect.github.com/resend/react-email/commit/8fd7409): Fix static files regression
-   [`8448a0b`](https://redirect.github.com/resend/react-email/commit/8448a0b): Improved classes, better borders on table, improved scollbar colors

### [`v4.0.0`](https://redirect.github.com/resend/react-email/blob/HEAD/packages/react-email/CHANGELOG.md#400)

[Compare Source](https://redirect.github.com/resend/react-email/compare/react-email@3.0.7...react-email@4.0.0)

##### Major Changes

-   [`56ab5ab`](https://redirect.github.com/resend/react-email/commit/56ab5ab): Add toolbar with image/link validation, compatibility checking and a spam scoring system

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMDcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjIwNy4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-04-01 03:33:06 +00:00
JimmFly
93d4b6dc4d fix(core): can't open history modal in self-hosting client (#11336)
handle #11282
2025-04-01 03:18:22 +00:00
renovate
7478df56ee chore: bump up app-builder-lib version to v26 (#11218)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [app-builder-lib](https://redirect.github.com/electron-userland/electron-builder) ([source](https://redirect.github.com/electron-userland/electron-builder/tree/HEAD/packages/app-builder-lib)) | [`^25.1.8` -> `^26.0.0`](https://renovatebot.com/diffs/npm/app-builder-lib/25.1.8/26.0.12) | [![age](https://developer.mend.io/api/mc/badges/age/npm/app-builder-lib/26.0.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/app-builder-lib/26.0.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/app-builder-lib/25.1.8/26.0.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/app-builder-lib/25.1.8/26.0.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>electron-userland/electron-builder (app-builder-lib)</summary>

### [`v26.0.12`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#26012)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.11...v26.0.12)

##### Patch Changes

-   [#&#8203;8968](https://redirect.github.com/electron-userland/electron-builder/pull/8968) [`2d25ec8c`](2d25ec8ca9) Thanks [@&#8203;t3chguy](https://redirect.github.com/t3chguy)! - chore(docs): Fix typo in `SquirrelWindowsOptions`

-   [#&#8203;8947](https://redirect.github.com/electron-userland/electron-builder/pull/8947) [`7ba4fea9`](7ba4fea958) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: support `mas` packages for flipping fuses

-   [#&#8203;8958](https://redirect.github.com/electron-userland/electron-builder/pull/8958) [`81e0c472`](81e0c472fe) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - optimize workspace package resolution in dependency tree

-   [#&#8203;8979](https://redirect.github.com/electron-userland/electron-builder/pull/8979) [`f24a2ce0`](f24a2ce05c) Thanks [@&#8203;teamchong](https://redirect.github.com/teamchong)! - Fix: Azure trust signing fails with spaces in parameters

-   [#&#8203;8957](https://redirect.github.com/electron-userland/electron-builder/pull/8957) [`ad151b9d`](ad151b9dbe) Thanks [@&#8203;indutny-signal](https://redirect.github.com/indutny-signal)! - fix: pnpm collection of optional dependencies

-   Updated dependencies \[]:
    -   dmg-builder@26.0.12
    -   electron-builder-squirrel-windows@26.0.12

### [`v26.0.11`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#26011)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.10...v26.0.11)

##### Patch Changes

-   [#&#8203;8941](https://redirect.github.com/electron-userland/electron-builder/pull/8941) [`14b96dfc`](14b96dfcbb) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: find cwd using getProjectRootPath for detecting package manager

-   [#&#8203;8928](https://redirect.github.com/electron-userland/electron-builder/pull/8928) [`70d7c855`](70d7c85536) Thanks [@&#8203;rotu](https://redirect.github.com/rotu)! - chore(docs): Document that detectUpdateChannel doesn't work when publishing to github

-   [#&#8203;8932](https://redirect.github.com/electron-userland/electron-builder/pull/8932) [`e1ea62b0`](e1ea62b002) Thanks [@&#8203;gaaf](https://redirect.github.com/gaaf)! - fix: `after-install.tpl`: Detect if apparmor is enabled instead of just file-exists check

-   Updated dependencies \[[`53a81939`](53a81939b8)]:
    -   builder-util@26.0.11
    -   dmg-builder@26.0.11
    -   electron-builder-squirrel-windows@26.0.11
    -   electron-publish@26.0.11

### [`v26.0.10`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#26010)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.9...v26.0.10)

##### Patch Changes

-   [#&#8203;8890](https://redirect.github.com/electron-userland/electron-builder/pull/8890) [`3ce33edb`](3ce33edbe0) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - chore: replace the plist functionality in app-builder-bin with plist

-   [#&#8203;8926](https://redirect.github.com/electron-userland/electron-builder/pull/8926) [`3caab3c4`](3caab3c422) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: fix custom publisher check and throw error if not found

-   [#&#8203;8915](https://redirect.github.com/electron-userland/electron-builder/pull/8915) [`8903c5df`](8903c5df04) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - fix: improve atomicRMDir function in NSIS uninstaller

-   Updated dependencies \[]:
    -   dmg-builder@26.0.10
    -   electron-builder-squirrel-windows@26.0.10

### [`v26.0.9`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2609)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.8...v26.0.9)

##### Patch Changes

-   [#&#8203;8895](https://redirect.github.com/electron-userland/electron-builder/pull/8895) [`22da6442`](22da644251) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: remove Promise ability from AsyncEventEmitter as it's impossible to filter listeners by without being async

-   [#&#8203;8885](https://redirect.github.com/electron-userland/electron-builder/pull/8885) [`4cc475ed`](4cc475ed21) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: `node-linker=hoisted` fallback to utilize Npm module collector

-   [#&#8203;8908](https://redirect.github.com/electron-userland/electron-builder/pull/8908) [`62029b08`](62029b08c1) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: when using osx-sign, specifically pass in identity name instead of hash

-   [#&#8203;8896](https://redirect.github.com/electron-userland/electron-builder/pull/8896) [`67b6f71f`](67b6f71f85) Thanks [@&#8203;BrandonXLF](https://redirect.github.com/BrandonXLF)! - fix: allow publishing to Snap Store to be disabled with snap specific publish options

-   [#&#8203;8899](https://redirect.github.com/electron-userland/electron-builder/pull/8899) [`69184315`](6918431560) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - test: adding fixtures for lockfiles to support `--frozen-lockfile` (yarn, pnpm) and `ci` (npm)

-   Updated dependencies \[]:
    -   dmg-builder@26.0.9
    -   electron-builder-squirrel-windows@26.0.9

### [`v26.0.8`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2608)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.7...v26.0.8)

##### Patch Changes

-   [#&#8203;8872](https://redirect.github.com/electron-userland/electron-builder/pull/8872) [`7f6c3fea`](7f6c3fea6f) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore: refactor node module collector, extract explicit `DependencyTree`, update types to be generic and respective to `npm list` vs `pnpm list` dependency trees

-   [#&#8203;8868](https://redirect.github.com/electron-userland/electron-builder/pull/8868) [`48c9f88b`](48c9f88b18) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: allow usage of .cjs, .mjs, and type=module custom/generic publishers

-   [#&#8203;8872](https://redirect.github.com/electron-userland/electron-builder/pull/8872) [`7f6c3fea`](7f6c3fea6f) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore: refactor node module collector to reduce recursion, extract explicit DependencyTree, update types

-   Updated dependencies \[]:
    -   dmg-builder@26.0.8
    -   electron-builder-squirrel-windows@26.0.8

### [`v26.0.7`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2607)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.6...v26.0.7)

##### Patch Changes

-   [#&#8203;8864](https://redirect.github.com/electron-userland/electron-builder/pull/8864) [`3fe27d77`](3fe27d7758) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - Detected circular dependencies and add debug logs for nodeModulesCollector, and refactored YarnNodeModulesCollector to extend NpmNodeModulesCollector.

-   Updated dependencies \[[`bee179b3`](bee179b3cf), [`c12f86f2`](c12f86f2e2)]:
    -   electron-builder-squirrel-windows@26.0.7
    -   builder-util@26.0.7
    -   dmg-builder@26.0.7
    -   electron-publish@26.0.7

### [`v26.0.6`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2606)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.5...v26.0.6)

##### Patch Changes

-   [#&#8203;8843](https://redirect.github.com/electron-userland/electron-builder/pull/8843) [`7fc78460`](7fc784603d) Thanks [@&#8203;fiesh](https://redirect.github.com/fiesh)! - fix: Only update AppArmor profile if not chroot'ed

-   [#&#8203;8851](https://redirect.github.com/electron-userland/electron-builder/pull/8851) [`0f2c9637`](0f2c963791) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - Fix the issue of the missing ms package

-   Updated dependencies \[]:
    -   dmg-builder@26.0.6
    -   electron-builder-squirrel-windows@26.0.6

### [`v26.0.5`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2605)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.4...v26.0.5)

##### Patch Changes

-   [#&#8203;8845](https://redirect.github.com/electron-userland/electron-builder/pull/8845) [`53ee6c6c`](53ee6c6c49) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - delete peerDepenencies when collecting node modules

-   Updated dependencies \[]:
    -   dmg-builder@26.0.5
    -   electron-builder-squirrel-windows@26.0.5

### [`v26.0.4`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2604)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.3...v26.0.4)

##### Patch Changes

-   [#&#8203;8839](https://redirect.github.com/electron-userland/electron-builder/pull/8839) [`8b059ad3`](8b059ad3ba) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - feat: switch app-builder-bin to node-module-collector to get all production node modules

-   Updated dependencies \[[`8b059ad3`](8b059ad3ba)]:
    -   builder-util@26.0.4
    -   dmg-builder@26.0.4
    -   electron-builder-squirrel-windows@26.0.4
    -   electron-publish@26.0.4

### [`v26.0.3`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2603)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.2...v26.0.3)

##### Patch Changes

-   [#&#8203;8344](https://redirect.github.com/electron-userland/electron-builder/pull/8344) [`27b2ba81`](27b2ba8129) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - use electron-winstaller instead of self module

-   [#&#8203;8834](https://redirect.github.com/electron-userland/electron-builder/pull/8834) [`6261c9a0`](6261c9a038) Thanks [@&#8203;dominhhai](https://redirect.github.com/dominhhai)! - feat(pkg): support notarizing pkg for macos archives

-   Updated dependencies \[[`27b2ba81`](27b2ba8129)]:
    -   electron-builder-squirrel-windows@26.0.3
    -   dmg-builder@26.0.3

### [`v26.0.2`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2602)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.1...v26.0.2)

##### Patch Changes

-   [#&#8203;8785](https://redirect.github.com/electron-userland/electron-builder/pull/8785) [`b3adf480`](b3adf4800b) Thanks [@&#8203;lamawithonel](https://redirect.github.com/lamawithonel)! - feat: Allow users to pass a custom electrons headers URL via env var

-   [#&#8203;8767](https://redirect.github.com/electron-userland/electron-builder/pull/8767) [`f45a09ee`](f45a09eeeb) Thanks [@&#8203;dominhhai](https://redirect.github.com/dominhhai)! - feat(pkg): support extra component packages (`.pkg`) for macos archives

-   [#&#8203;8833](https://redirect.github.com/electron-userland/electron-builder/pull/8833) [`f5af99ac`](f5af99ac87) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: upgrading TrustedSigning module and setting it as minimum version instead of required

-   [#&#8203;8830](https://redirect.github.com/electron-userland/electron-builder/pull/8830) [`44603f2f`](44603f2f3c) Thanks [@&#8203;Julusian](https://redirect.github.com/Julusian)! - fix: handle yarn berry patch format in electron-updater version check

-   Updated dependencies \[]:
    -   dmg-builder@26.0.2
    -   electron-builder-squirrel-windows@26.0.2

### [`v26.0.1`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#26012)

[Compare Source](https://redirect.github.com/electron-userland/electron-builder/compare/v26.0.0...v26.0.1)

##### Patch Changes

-   [#&#8203;8968](https://redirect.github.com/electron-userland/electron-builder/pull/8968) [`2d25ec8c`](2d25ec8ca9) Thanks [@&#8203;t3chguy](https://redirect.github.com/t3chguy)! - chore(docs): Fix typo in `SquirrelWindowsOptions`

-   [#&#8203;8947](https://redirect.github.com/electron-userland/electron-builder/pull/8947) [`7ba4fea9`](7ba4fea958) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: support `mas` packages for flipping fuses

-   [#&#8203;8958](https://redirect.github.com/electron-userland/electron-builder/pull/8958) [`81e0c472`](81e0c472fe) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - optimize workspace package resolution in dependency tree

-   [#&#8203;8979](https://redirect.github.com/electron-userland/electron-builder/pull/8979) [`f24a2ce0`](f24a2ce05c) Thanks [@&#8203;teamchong](https://redirect.github.com/teamchong)! - Fix: Azure trust signing fails with spaces in parameters

-   [#&#8203;8957](https://redirect.github.com/electron-userland/electron-builder/pull/8957) [`ad151b9d`](ad151b9dbe) Thanks [@&#8203;indutny-signal](https://redirect.github.com/indutny-signal)! - fix: pnpm collection of optional dependencies

-   Updated dependencies \[]:
    -   dmg-builder@26.0.12
    -   electron-builder-squirrel-windows@26.0.12

### [`v26.0.0`](https://redirect.github.com/electron-userland/electron-builder/blob/HEAD/packages/app-builder-lib/CHANGELOG.md#2600)

##### Major Changes

-   [#&#8203;8582](https://redirect.github.com/electron-userland/electron-builder/pull/8582) [`6a9597b4`](6a9597b4d7) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore: remove deprecated fields from `winOptions` and `macOptions`

    For `winOptions` signing configuration, it has been moved to `win.signtoolOptions` in order to support `azureOptions` as a separate field and avoid bloating `win` configuration object
    For `macOptions`, notarize options has been deprecated in favor of env vars for quite some time. Env vars are much more secure

-   [#&#8203;8572](https://redirect.github.com/electron-userland/electron-builder/pull/8572) [`0dbe357a`](0dbe357ac5) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - feat: allowing additional entries in .desktop file, such as `[Desktop Actions <actionName>]`. Requires changing configuration `desktop` property to object to be more extensible in the future

-   [#&#8203;8562](https://redirect.github.com/electron-userland/electron-builder/pull/8562) [`b8185d48`](b8185d48a7) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - support including node_modules in other subdirectories

##### Minor Changes

-   [#&#8203;8609](https://redirect.github.com/electron-userland/electron-builder/pull/8609) [`d672b04b`](d672b04b47) Thanks [@&#8203;iongion](https://redirect.github.com/iongion)! - feat: support completely custom AppxManifest.xml

-   [#&#8203;8607](https://redirect.github.com/electron-userland/electron-builder/pull/8607) [`f123628c`](f123628ce4) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - feat: allow disabling of building a universal windows installer

-   [#&#8203;8711](https://redirect.github.com/electron-userland/electron-builder/pull/8711) [`6f0fb8e4`](6f0fb8e44f) Thanks [@&#8203;hrueger](https://redirect.github.com/hrueger)! - Add `host` property to support self-hosted Keygen instances

-   [#&#8203;8636](https://redirect.github.com/electron-userland/electron-builder/pull/8636) [`88cc0b06`](88cc0b06db) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - feat: add support for AppArmor with template profile and configuration property

-   [#&#8203;8570](https://redirect.github.com/electron-userland/electron-builder/pull/8570) [`c8484305`](c84843053a) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - feat: migrate to official `electron/asar` packaging

-   [#&#8203;8525](https://redirect.github.com/electron-userland/electron-builder/pull/8525) [`13f55a3e`](13f55a3ef0) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - feat: migrate `electronDist` to be an electron-builder `Hook`

-   [#&#8203;8588](https://redirect.github.com/electron-userland/electron-builder/pull/8588) [`8434e10d`](8434e10dad) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - feat: adding integration with [@&#8203;electron/fuses](https://redirect.github.com/electron/fuses)

-   [#&#8203;8787](https://redirect.github.com/electron-userland/electron-builder/pull/8787) [`cdf18d9a`](cdf18d9a0f) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - feat: add `pwsh` detection to enable azure trusted signing within docker image

-   [#&#8203;8394](https://redirect.github.com/electron-userland/electron-builder/pull/8394) [`ae9221d9`](ae9221d947) Thanks [@&#8203;xyloflake](https://redirect.github.com/xyloflake)! - feat: Implement autoupdates for pacman

##### Patch Changes

-   [#&#8203;8645](https://redirect.github.com/electron-userland/electron-builder/pull/8645) [`f4d40f91`](f4d40f91f1) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - fix: smart unpack for local module with dll

-   [#&#8203;8762](https://redirect.github.com/electron-userland/electron-builder/pull/8762) [`c4f54977`](c4f5497704) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: update [@&#8203;electron/asar](https://redirect.github.com/electron/asar) to 3.2.18 to resolve signing issue with framework symlinks

-   [#&#8203;8650](https://redirect.github.com/electron-userland/electron-builder/pull/8650) [`f84a0831`](f84a0831d1) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix(win): add required `publisherName` field to Azure Trusted Signing

-   [#&#8203;8573](https://redirect.github.com/electron-userland/electron-builder/pull/8573) [`1fee87a2`](1fee87a20e) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore(deps): update ejs to v3.1.10

-   [#&#8203;8799](https://redirect.github.com/electron-userland/electron-builder/pull/8799) [`45a402b9`](45a402b978) Thanks [@&#8203;t3chguy](https://redirect.github.com/t3chguy)! - fix(mac): only fuse macOS universal builds on the combined universal package

-   [#&#8203;8671](https://redirect.github.com/electron-userland/electron-builder/pull/8671) [`a4505a37`](a4505a3785) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - chore(deps): update electron/asar to 3.2.17

-   [#&#8203;8596](https://redirect.github.com/electron-userland/electron-builder/pull/8596) [`e0b0e351`](e0b0e351ba) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore: refactor files for publishing to electron-publish

-   [#&#8203;8653](https://redirect.github.com/electron-userland/electron-builder/pull/8653) [`796e1a07`](796e1a072a) Thanks [@&#8203;IsaacAderogba](https://redirect.github.com/IsaacAderogba)! - fix: cscIKeyPassword must support empty string arguments

-   [#&#8203;8627](https://redirect.github.com/electron-userland/electron-builder/pull/8627) [`2a3195d9`](2a3195d99f) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: add rfc3161 timestamp entry as default for azure signing to resolve Windows Defender alert

-   [#&#8203;8725](https://redirect.github.com/electron-userland/electron-builder/pull/8725) [`ccbf0a5b`](ccbf0a5be3) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - fix: electron-builder fails when list of node_modules files is too big to pass in a glob

-   [#&#8203;8661](https://redirect.github.com/electron-userland/electron-builder/pull/8661) [`6a294c97`](6a294c9725) Thanks [@&#8203;t3chguy](https://redirect.github.com/t3chguy)! - chore: remove stale handler for `extend-info` in electronMac plist creation

-   [#&#8203;8577](https://redirect.github.com/electron-userland/electron-builder/pull/8577) [`e9eef0c1`](e9eef0c1c7) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: add additional default exclusions to copy logic

-   [#&#8203;8566](https://redirect.github.com/electron-userland/electron-builder/pull/8566) [`e45fecf0`](e45fecf04d) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore: change signing warning message to debug

-   [#&#8203;8576](https://redirect.github.com/electron-userland/electron-builder/pull/8576) [`3eab7143`](3eab7143d7) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - fix: packages in the workspace not being under node_modules

-   [#&#8203;8691](https://redirect.github.com/electron-userland/electron-builder/pull/8691) [`5a9141f6`](5a9141f60a) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore(mac): add back logging of identity name and hash as opposed to just hash

-   [#&#8203;8805](https://redirect.github.com/electron-userland/electron-builder/pull/8805) [`c6d6b6e5`](c6d6b6e57b) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: ASAR files in extraResources are not included in integrity calculations

-   [#&#8203;8575](https://redirect.github.com/electron-userland/electron-builder/pull/8575) [`dfa35c32`](dfa35c321f) Thanks [@&#8203;doctolivier](https://redirect.github.com/doctolivier)! - chore(deps): update [@&#8203;electron/rebuild](https://redirect.github.com/electron/rebuild) to v3.7.0

-   [#&#8203;8637](https://redirect.github.com/electron-userland/electron-builder/pull/8637) [`667ab2f8`](667ab2f8d5) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore: migrate default recommends and default depends for fpm from app-builder-bin to JS code

-   [#&#8203;8727](https://redirect.github.com/electron-userland/electron-builder/pull/8727) [`7268c2ee`](7268c2eea3) Thanks [@&#8203;NoahAndrews](https://redirect.github.com/NoahAndrews)! - chore: Rename `vmRequired` variable to `useVmIfNotOnWin`

-   [#&#8203;8714](https://redirect.github.com/electron-userland/electron-builder/pull/8714) [`66334502`](66334502a5) Thanks [@&#8203;kttmv](https://redirect.github.com/kttmv)! - chore: Remove informal Russian messages in the NSIS installer

-   [#&#8203;8606](https://redirect.github.com/electron-userland/electron-builder/pull/8606) [`a0e635c1`](a0e635c183) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: add quotes to surround file path during azure signing to handle files with spaces

-   [#&#8203;8603](https://redirect.github.com/electron-userland/electron-builder/pull/8603) [`712a8bce`](712a8bce56) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: checking relative path without separator as that doesn't work on Windows

-   [#&#8203;8639](https://redirect.github.com/electron-userland/electron-builder/pull/8639) [`28006623`](28006623a1) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - chore: refactor electron dist logic to avoid unnecessary console logs

-   [#&#8203;8715](https://redirect.github.com/electron-userland/electron-builder/pull/8715) [`4c394d54`](4c394d5468) Thanks [@&#8203;beyondkmp](https://redirect.github.com/beyondkmp)! - fix: does not work with NPM workspaces

-   [#&#8203;8654](https://redirect.github.com/electron-userland/electron-builder/pull/8654) [`9e11358f`](9e11358fc2) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: check ResolvedFileSet src when verifying symlinks to be within project directory

-   [#&#8203;8632](https://redirect.github.com/electron-userland/electron-builder/pull/8632) [`645e2abd`](645e2abd5e) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: only sign concurrently when using local signtool. azure can't be in parallel due to resources being locked during usage

-   [#&#8203;8601](https://redirect.github.com/electron-userland/electron-builder/pull/8601) [`215fc36b`](215fc36b5e) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - Revert "fix(win): use appInfo description as primary entry for FileDescription" to resolve [https://github.com/electron-userland/electron-builder/issues/8599](https://redirect.github.com/electron-userland/electron-builder/issues/8599)

-   [`a1ee0419`](a1ee04191f) Thanks [@&#8203;mmaietta](https://redirect.github.com/mmaietta)! - fix: use FileCopier for copying files and queue creation of symlinks

-   [#&#8203;8689](https://redirect.github.com/electron-userland/electron-builder/pull/8689) [`1d7f87c1`](1d7f87c102) Thanks [@&#8203;Lemonexe](https://redirect.github.com/Lemonexe)! - fix(win): corrupt asar integrity file path on crossplatform build

-   [#&#8203;8749](https://redirect.github.com/electron-userland/electron-builder/pull/8749) [`ee2c6dc1`](ee2c6dc133) Thanks [@&#8203;kethinov](https://redirect.github.com/kethinov)! - fix: typo in urls in tsdoc

-   Updated dependencies \[[`f4d40f91`](f4d40f91f1), [`633490cb`](633490cb39), [`e0b0e351`](e0b0e351ba), [`eacbbf59`](eacbbf593f), [`6f0fb8e4`](6f0fb8e44f), [`6a6bed46`](6a6bed46c4), [`3eab7143`](3eab7143d7), [`a5558e33`](a5558e3380), [`d4ea0d99`](d4ea0d998d), [`b8185d48`](b8185d48a7), [`dcd91a1f`](dcd91a1f79)]:
    -   builder-util@26.0.0
    -   dmg-builder@26.0.0
    -   electron-builder-squirrel-windows@26.0.0
    -   electron-publish@26.0.0
    -   builder-util-runtime@9.3.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMDcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjIwNy4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-04-01 03:04:34 +00:00
donteatfriedrice
1dbd34177e feat(editor): embed iframe block event tracking (#11313)
Close [BS-2958](https://linear.app/affine-design/issue/BS-2958/埋点相关)
2025-04-01 02:50:23 +00:00
CatsJuice
3467515ae9 fix(core): should show divider between readwise content and note (#11113) 2025-04-01 02:37:27 +00:00
renovate
1be83dc330 chore: bump up express version to v5 (#11333)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [express](https://expressjs.com/) ([source](https://redirect.github.com/expressjs/express)) | [`^4.21.2` -> `^5.0.0`](https://renovatebot.com/diffs/npm/express/4.21.2/5.1.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/express/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/express/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/express/4.21.2/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/express/4.21.2/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@types/express](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/express) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/express)) | [`^4` -> `^5.0.0`](https://renovatebot.com/diffs/npm/@types%2fexpress/4.17.21/5.0.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fexpress/5.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fexpress/5.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fexpress/4.17.21/5.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fexpress/4.17.21/5.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>expressjs/express (express)</summary>

### [`v5.1.0`](https://redirect.github.com/expressjs/express/blob/HEAD/History.md#510--2025-03-31)

[Compare Source](https://redirect.github.com/expressjs/express/compare/5.0.1...v5.1.0)

\========================

-   Add support for `Uint8Array` in `res.send()`
-   Add support for ETag option in `res.sendFile()`
-   Add support for multiple links with the same rel in `res.links()`
-   Add funding field to package.json
-   perf: use loop for acceptParams
-   refactor: prefix built-in node module imports
-   deps: remove `setprototypeof`
-   deps: remove `safe-buffer`
-   deps: remove `utils-merge`
-   deps: remove `methods`
-   deps: remove `depd`
-   deps: `debug@^4.4.0`
-   deps: `body-parser@^2.2.0`
-   deps: `router@^2.2.0`
-   deps: `content-type@^1.0.5`
-   deps: `finalhandler@^2.1.0`
-   deps: `qs@^6.14.0`
-   deps: `server-static@2.2.0`
-   deps: `type-is@2.0.1`

### [`v5.0.1`](https://redirect.github.com/expressjs/express/blob/HEAD/History.md#501--2024-10-08)

[Compare Source](https://redirect.github.com/expressjs/express/compare/v5.0.0...5.0.1)

\==========

-   Update `cookie` semver lock to address [CVE-2024-47764](https://nvd.nist.gov/vuln/detail/CVE-2024-47764)

### [`v5.0.0`](https://redirect.github.com/expressjs/express/blob/HEAD/History.md#500--2024-09-10)

[Compare Source](https://redirect.github.com/expressjs/express/compare/4.21.2...v5.0.0)

\=========================

-   remove:
    -   `path-is-absolute` dependency - use `path.isAbsolute` instead
-   breaking:
    -   `res.status()` accepts only integers, and input must be greater than 99 and less than 1000
        -   will throw a `RangeError: Invalid status code: ${code}. Status code must be greater than 99 and less than 1000.` for inputs outside this range
        -   will throw a `TypeError: Invalid status code: ${code}. Status code must be an integer.` for non integer inputs
    -   deps: send@1.0.0
    -   `res.redirect('back')` and `res.location('back')` is no longer a supported magic string, explicitly use `req.get('Referrer') || '/'`.
-   change:
    -   `res.clearCookie` will ignore user provided `maxAge` and `expires` options
-   deps: cookie-signature@^1.2.1
-   deps: debug@4.3.6
-   deps: merge-descriptors@^2.0.0
-   deps: serve-static@^2.1.0
-   deps: qs@6.13.0
-   deps: accepts@^2.0.0
-   deps: mime-types@^3.0.0
    -   `application/javascript` => `text/javascript`
-   deps: type-is@^2.0.0
-   deps: content-disposition@^1.0.0
-   deps: finalhandler@^2.0.0
-   deps: fresh@^2.0.0
-   deps: body-parser@^2.0.1
-   deps: send@^1.1.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMDcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjIwNy4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-04-01 02:24:11 +00:00
pengx17
0a37ca91fb feat(electron): add allow list for recording apps (#11321) 2025-04-01 01:48:07 +00:00
fundon
eac8f32f4c refactor(editor): basic styles of font and panel (#11290)
* Updated `border-radius` of panel to `8px`.  [BS-2901](https://linear.app/affine-design/issue/BS-2901/meta-info-ui-issue) [BS-2810](https://linear.app/affine-design/issue/BS-2810/toolbarpicker-圆角更新为-8px)
* Refactored basic styles of font and panel.

<img width="549" alt="Screenshot 2025-03-31 at 12 56 36" src="https://github.com/user-attachments/assets/4a827e1e-f802-4251-a563-4a34b891a5e3" />
2025-04-01 01:35:59 +00:00
darkskygit
b099deb6df feat(server): bump gemini version (#11317) 2025-04-01 01:11:36 +00:00
renovate
782f31ad26 chore: bump up all non-major dependencies (#11273)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type | Update |
|---|---|---|---|---|---|---|---|
| [@ai-sdk/google](https://sdk.vercel.ai/docs) ([source](https://redirect.github.com/vercel/ai)) | [`1.2.3` -> `1.2.5`](https://renovatebot.com/diffs/npm/@ai-sdk%2fgoogle/1.2.3/1.2.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@ai-sdk%2fgoogle/1.2.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@ai-sdk%2fgoogle/1.2.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@ai-sdk%2fgoogle/1.2.3/1.2.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@ai-sdk%2fgoogle/1.2.3/1.2.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@aws-sdk/client-s3](https://redirect.github.com/aws/aws-sdk-js-v3/tree/main/clients/client-s3) ([source](https://redirect.github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3)) | [`3.777.0` -> `3.779.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fclient-s3/3.777.0/3.779.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fclient-s3/3.779.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fclient-s3/3.779.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fclient-s3/3.777.0/3.779.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fclient-s3/3.777.0/3.779.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@capacitor/android](https://capacitorjs.com) ([source](https://redirect.github.com/ionic-team/capacitor)) | [`7.1.0` -> `7.2.0`](https://renovatebot.com/diffs/npm/@capacitor%2fandroid/7.1.0/7.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fandroid/7.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capacitor%2fandroid/7.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capacitor%2fandroid/7.1.0/7.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fandroid/7.1.0/7.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@capacitor/cli](https://capacitorjs.com) ([source](https://redirect.github.com/ionic-team/capacitor)) | [`7.1.0` -> `7.2.0`](https://renovatebot.com/diffs/npm/@capacitor%2fcli/7.1.0/7.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcli/7.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capacitor%2fcli/7.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capacitor%2fcli/7.1.0/7.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcli/7.1.0/7.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@capacitor/core](https://capacitorjs.com) ([source](https://redirect.github.com/ionic-team/capacitor)) | [`7.1.0` -> `7.2.0`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/7.1.0/7.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcore/7.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capacitor%2fcore/7.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capacitor%2fcore/7.1.0/7.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcore/7.1.0/7.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@capacitor/ios](https://capacitorjs.com) ([source](https://redirect.github.com/ionic-team/capacitor)) | [`7.1.0` -> `7.2.0`](https://renovatebot.com/diffs/npm/@capacitor%2fios/7.1.0/7.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fios/7.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capacitor%2fios/7.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capacitor%2fios/7.1.0/7.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fios/7.1.0/7.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@capgo/inappbrowser](https://redirect.github.com/Cap-go/capacitor-inappbrowser) | [`7.6.8` -> `7.7.2`](https://renovatebot.com/diffs/npm/@capgo%2finappbrowser/7.6.8/7.7.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capgo%2finappbrowser/7.7.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capgo%2finappbrowser/7.7.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capgo%2finappbrowser/7.6.8/7.7.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capgo%2finappbrowser/7.6.8/7.7.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@lottiefiles/dotlottie-wc](https://redirect.github.com/LottieFiles/dotlottie-web) ([source](https://redirect.github.com/LottieFiles/dotlottie-web/tree/HEAD/packages/wc)) | [`0.5.0` -> `0.5.1`](https://renovatebot.com/diffs/npm/@lottiefiles%2fdotlottie-wc/0.5.0/0.5.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@lottiefiles%2fdotlottie-wc/0.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@lottiefiles%2fdotlottie-wc/0.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@lottiefiles%2fdotlottie-wc/0.5.0/0.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@lottiefiles%2fdotlottie-wc/0.5.0/0.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@perfsee/webpack](https://redirect.github.com/perfsee/perfsee) | [`1.13.0` -> `1.14.2`](https://renovatebot.com/diffs/npm/@perfsee%2fwebpack/1.13.0/1.14.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@perfsee%2fwebpack/1.14.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@perfsee%2fwebpack/1.14.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@perfsee%2fwebpack/1.13.0/1.14.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@perfsee%2fwebpack/1.13.0/1.14.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@sentry/react](https://redirect.github.com/getsentry/sentry-javascript/tree/master/packages/react) ([source](https://redirect.github.com/getsentry/sentry-javascript)) | [`9.10.0` -> `9.10.1`](https://renovatebot.com/diffs/npm/@sentry%2freact/9.10.0/9.10.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2freact/9.10.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2freact/9.10.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2freact/9.10.0/9.10.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2freact/9.10.0/9.10.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@sentry/react](https://redirect.github.com/getsentry/sentry-javascript/tree/master/packages/react) ([source](https://redirect.github.com/getsentry/sentry-javascript)) | [`9.10.0` -> `9.10.1`](https://renovatebot.com/diffs/npm/@sentry%2freact/9.10.0/9.10.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2freact/9.10.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2freact/9.10.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2freact/9.10.0/9.10.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2freact/9.10.0/9.10.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@vitest/browser](https://redirect.github.com/vitest-dev/vitest/tree/main/packages/browser#readme) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser)) | [`3.0.9` -> `3.1.1`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser/3.0.9/3.1.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser/3.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser/3.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser/3.0.9/3.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser/3.0.9/3.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@vitest/coverage-istanbul](https://redirect.github.com/vitest-dev/vitest/tree/main/packages/coverage-istanbul#readme) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-istanbul)) | [`3.0.9` -> `3.1.1`](https://renovatebot.com/diffs/npm/@vitest%2fcoverage-istanbul/3.0.9/3.1.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fcoverage-istanbul/3.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fcoverage-istanbul/3.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fcoverage-istanbul/3.0.9/3.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fcoverage-istanbul/3.0.9/3.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@vitest/ui](https://redirect.github.com/vitest-dev/vitest/tree/main/packages/ui#readme) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/ui)) | [`3.0.9` -> `3.1.1`](https://renovatebot.com/diffs/npm/@vitest%2fui/3.0.9/3.1.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fui/3.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fui/3.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fui/3.0.9/3.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fui/3.0.9/3.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [ai](https://sdk.vercel.ai/docs) ([source](https://redirect.github.com/vercel/ai)) | [`4.2.8` -> `4.2.10`](https://renovatebot.com/diffs/npm/ai/4.2.8/4.2.10) | [![age](https://developer.mend.io/api/mc/badges/age/npm/ai/4.2.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/ai/4.2.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/ai/4.2.8/4.2.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/ai/4.2.8/4.2.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [bullmq](https://bullmq.io/) ([source](https://redirect.github.com/taskforcesh/bullmq)) | [`5.45.0` -> `5.45.2`](https://renovatebot.com/diffs/npm/bullmq/5.45.0/5.45.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/bullmq/5.45.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/bullmq/5.45.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/bullmq/5.45.0/5.45.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/bullmq/5.45.0/5.45.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [esbuild](https://redirect.github.com/evanw/esbuild) | [`0.25.1` -> `0.25.2`](https://renovatebot.com/diffs/npm/esbuild/0.25.1/0.25.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/esbuild/0.25.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/esbuild/0.25.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/esbuild/0.25.1/0.25.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/esbuild/0.25.1/0.25.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [express](https://expressjs.com/) ([source](https://redirect.github.com/expressjs/express)) | [`5.0.1` -> `5.1.0`](https://renovatebot.com/diffs/npm/express/5.0.1/5.1.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/express/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/express/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/express/5.0.1/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/express/5.0.1/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [lucide-react](https://lucide.dev) ([source](https://redirect.github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react)) | [`^0.484.0` -> `^0.486.0`](https://renovatebot.com/diffs/npm/lucide-react/0.484.0/0.486.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lucide-react/0.486.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lucide-react/0.486.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lucide-react/0.484.0/0.486.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lucide-react/0.484.0/0.486.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [once_cell](https://redirect.github.com/matklad/once_cell) | `1.21.2` -> `1.21.3` | [![age](https://developer.mend.io/api/mc/badges/age/crate/once_cell/1.21.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/once_cell/1.21.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/once_cell/1.21.2/1.21.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/once_cell/1.21.2/1.21.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [openai](https://redirect.github.com/openai/openai-node) | [`4.90.0` -> `4.91.0`](https://renovatebot.com/diffs/npm/openai/4.90.0/4.91.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/openai/4.91.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/openai/4.91.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/openai/4.90.0/4.91.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/openai/4.90.0/4.91.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [react](https://react.dev/) ([source](https://redirect.github.com/facebook/react/tree/HEAD/packages/react)) | [`19.0.0` -> `19.1.0`](https://renovatebot.com/diffs/npm/react/19.0.0/19.1.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react/19.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react/19.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react/19.0.0/19.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react/19.0.0/19.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [react-day-picker](https://daypicker.dev) ([source](https://redirect.github.com/gpbl/react-day-picker)) | [`9.6.3` -> `9.6.4`](https://renovatebot.com/diffs/npm/react-day-picker/9.6.3/9.6.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-day-picker/9.6.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-day-picker/9.6.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-day-picker/9.6.3/9.6.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-day-picker/9.6.3/9.6.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [react-dom](https://react.dev/) ([source](https://redirect.github.com/facebook/react/tree/HEAD/packages/react-dom)) | [`19.0.0` -> `19.1.0`](https://renovatebot.com/diffs/npm/react-dom/19.0.0/19.1.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-dom/19.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-dom/19.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-dom/19.0.0/19.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-dom/19.0.0/19.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [react-hook-form](https://www.react-hook-form.com) ([source](https://redirect.github.com/react-hook-form/react-hook-form)) | [`7.54.2` -> `7.55.0`](https://renovatebot.com/diffs/npm/react-hook-form/7.54.2/7.55.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-hook-form/7.55.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-hook-form/7.55.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-hook-form/7.54.2/7.55.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-hook-form/7.54.2/7.55.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [react-refresh](https://react.dev/) ([source](https://redirect.github.com/facebook/react/tree/HEAD/packages/react)) | [`^0.16.0` -> `^0.17.0`](https://renovatebot.com/diffs/npm/react-refresh/0.16.0/0.17.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-refresh/0.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-refresh/0.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-refresh/0.16.0/0.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-refresh/0.16.0/0.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [react-virtuoso](https://virtuoso.dev/) ([source](https://redirect.github.com/petyosi/react-virtuoso)) | [`4.12.5` -> `4.12.6`](https://renovatebot.com/diffs/npm/react-virtuoso/4.12.5/4.12.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-virtuoso/4.12.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-virtuoso/4.12.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-virtuoso/4.12.5/4.12.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-virtuoso/4.12.5/4.12.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [rubato](https://redirect.github.com/HEnquist/rubato) | `0.16.1` -> `0.16.2` | [![age](https://developer.mend.io/api/mc/badges/age/crate/rubato/0.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/rubato/0.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/rubato/0.16.1/0.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/rubato/0.16.1/0.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [tailwind-merge](https://redirect.github.com/dcastil/tailwind-merge) | [`3.0.2` -> `3.1.0`](https://renovatebot.com/diffs/npm/tailwind-merge/3.0.2/3.1.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/tailwind-merge/3.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tailwind-merge/3.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tailwind-merge/3.0.2/3.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tailwind-merge/3.0.2/3.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [typescript-eslint](https://typescript-eslint.io/packages/typescript-eslint) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)) | [`8.28.0` -> `8.29.0`](https://renovatebot.com/diffs/npm/typescript-eslint/8.28.0/8.29.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/typescript-eslint/8.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/typescript-eslint/8.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/typescript-eslint/8.28.0/8.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript-eslint/8.28.0/8.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [vitest](https://redirect.github.com/vitest-dev/vitest) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`3.0.9` -> `3.1.1`](https://renovatebot.com/diffs/npm/vitest/3.0.9/3.1.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/3.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest/3.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest/3.0.9/3.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/3.0.9/3.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [yarn](https://redirect.github.com/yarnpkg/berry) ([source](https://redirect.github.com/yarnpkg/berry/tree/HEAD/packages/yarnpkg-cli)) | [`4.8.0` -> `4.8.1`](https://renovatebot.com/diffs/npm/yarn/4.8.0/4.8.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@yarnpkg%2fcli/4.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@yarnpkg%2fcli/4.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@yarnpkg%2fcli/4.8.0/4.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@yarnpkg%2fcli/4.8.0/4.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | packageManager | patch |

---

### Release Notes

<details>
<summary>vercel/ai (@&#8203;ai-sdk/google)</summary>

### [`v1.2.5`](https://redirect.github.com/vercel/ai/releases/tag/%40ai-sdk/openai%401.2.5)

[Compare Source](https://redirect.github.com/vercel/ai/compare/@ai-sdk/google@1.2.4...@ai-sdk/google@1.2.5)

##### Patch Changes

-   [`2e1101a`](https://redirect.github.com/vercel/ai/commit/2e1101a): feat (provider/openai): pdf input support
-   Updated dependencies \[[`2e1101a`](https://redirect.github.com/vercel/ai/commit/2e1101a)]
    -   [@&#8203;ai-sdk/provider](https://redirect.github.com/ai-sdk/provider)[@&#8203;1](https://redirect.github.com/1).0.11
    -   [@&#8203;ai-sdk/provider-utils](https://redirect.github.com/ai-sdk/provider-utils)[@&#8203;2](https://redirect.github.com/2).1.13

### [`v1.2.4`](https://redirect.github.com/vercel/ai/releases/tag/%40ai-sdk/openai%401.2.4)

[Compare Source](https://redirect.github.com/vercel/ai/compare/@ai-sdk/google@1.2.3...@ai-sdk/google@1.2.4)

##### Patch Changes

-   [`523f128`](https://redirect.github.com/vercel/ai/commit/523f128): feat (provider/openai): add strictSchemas option to responses model

</details>

<details>
<summary>aws/aws-sdk-js-v3 (@&#8203;aws-sdk/client-s3)</summary>

### [`v3.779.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#37790-2025-03-31)

[Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.777.0...v3.779.0)

##### Features

-   **client-s3:** Amazon S3 adds support for S3 Access Points for directory buckets in AWS Dedicated Local Zones ([7f2cfea](7f2cfea14e))

</details>

<details>
<summary>ionic-team/capacitor (@&#8203;capacitor/android)</summary>

### [`v7.2.0`](https://redirect.github.com/ionic-team/capacitor/blob/HEAD/CHANGELOG.md#720-2025-03-31)

[Compare Source](https://redirect.github.com/ionic-team/capacitor/compare/7.1.0...7.2.0)

##### Bug Fixes

-   **android:** rename bridge layout to avoid collision ([#&#8203;7919](https://redirect.github.com/ionic-team/capacitor/issues/7919)) ([a629f16](a629f167b3))
-   **cli:** Don't migrate Podfile on SPM projects ([#&#8203;7939](https://redirect.github.com/ionic-team/capacitor/issues/7939)) ([ab4e700](ab4e700035))
-   **ios:** respect shouldEncodeUrlParams value ([#&#8203;7931](https://redirect.github.com/ionic-team/capacitor/issues/7931)) ([4fb12a0](4fb12a03a9))

##### Features

-   **http:** Apply overrideUserAgent to requests ([#&#8203;7906](https://redirect.github.com/ionic-team/capacitor/issues/7906)) ([52482c9](52482c9d3c))
-   **ios:** Enable Fullscreen API on WebView ([#&#8203;7909](https://redirect.github.com/ionic-team/capacitor/issues/7909)) ([172638e](172638ec7b))

</details>

<details>
<summary>Cap-go/capacitor-inappbrowser (@&#8203;capgo/inappbrowser)</summary>

### [`v7.7.2`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#772-2025-03-31)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.7.1...7.7.2)

### [`v7.7.1`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#771-2025-03-30)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.6.12...7.7.1)

### [`v7.6.12`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#7612-2025-03-30)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.6.9...7.6.12)

### [`v7.6.9`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#769-2025-03-29)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.6.8...7.6.9)

</details>

<details>
<summary>LottieFiles/dotlottie-web (@&#8203;lottiefiles/dotlottie-wc)</summary>

### [`v0.5.1`](https://redirect.github.com/LottieFiles/dotlottie-web/blob/HEAD/packages/wc/CHANGELOG.md#051)

##### Patch Changes

-   Updated dependencies \[[`faaf25e`](https://redirect.github.com/LottieFiles/dotlottie-web/commit/faaf25e)]
-   Updated dependencies \[[`4ffcae2`](https://redirect.github.com/LottieFiles/dotlottie-web/commit/4ffcae2)]
-   Updated dependencies \[[`faaf25e`](https://redirect.github.com/LottieFiles/dotlottie-web/commit/faaf25e)]
    -   [@&#8203;lottiefiles/dotlottie-web](https://redirect.github.com/lottiefiles/dotlottie-web)[@&#8203;0](https://redirect.github.com/0).42.0

</details>

<details>
<summary>perfsee/perfsee (@&#8203;perfsee/webpack)</summary>

### [`v1.14.2`](https://redirect.github.com/perfsee/perfsee/compare/v1.13.0...v1.14.2)

[Compare Source](https://redirect.github.com/perfsee/perfsee/compare/v1.13.0...v1.14.2)

</details>

<details>
<summary>getsentry/sentry-javascript (@&#8203;sentry/react)</summary>

### [`v9.10.1`](https://redirect.github.com/getsentry/sentry-javascript/blob/HEAD/CHANGELOG.md#9101)

[Compare Source](https://redirect.github.com/getsentry/sentry-javascript/compare/9.10.0...9.10.1)

-   fix: Correct [@&#8203;sentry-internal/feedback](https://redirect.github.com/sentry-internal/feedback) docs to match the code ([#&#8203;15874](https://redirect.github.com/getsentry/sentry-javascript/pull/15874))
-   deps: Bump bundler plugins to version `3.2.4` ([#&#8203;15909](https://redirect.github.com/getsentry/sentry-javascript/pull/15909))

</details>

<details>
<summary>vitest-dev/vitest (@&#8203;vitest/browser)</summary>

### [`v3.1.1`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v3.1.1)

[Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v3.1.0...v3.1.1)

#####    🐞 Bug Fixes

-   **reporter**:
    -   Report tests in correct order  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7752](https://redirect.github.com/vitest-dev/vitest/issues/7752) [<samp>(b166e)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b166efa2)
    -   Print test only once in the verbose mode  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7738](https://redirect.github.com/vitest-dev/vitest/issues/7738) [<samp>(69ca4)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/69ca425c)

#####     [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v3.1.0...v3.1.1)

### [`v3.1.0`](https://redirect.github.com/vitest-dev/vitest/compare/v3.0.9...v3.1.0)

[Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v3.0.9...v3.1.0)

</details>

<details>
<summary>taskforcesh/bullmq (bullmq)</summary>

### [`v5.45.2`](https://redirect.github.com/taskforcesh/bullmq/releases/tag/v5.45.2)

[Compare Source](https://redirect.github.com/taskforcesh/bullmq/compare/v5.45.1...v5.45.2)

##### Bug Fixes

-   **flow:** validate pending dependencies before removing lock ([#&#8203;3182](https://redirect.github.com/taskforcesh/bullmq/issues/3182)) ([8d59e3b](8d59e3b808))

### [`v5.45.1`](https://redirect.github.com/taskforcesh/bullmq/releases/tag/v5.45.1)

[Compare Source](https://redirect.github.com/taskforcesh/bullmq/compare/v5.45.0...v5.45.1)

##### Bug Fixes

-   **job-scheduler:** emit duplicated event when next delayed job exists ([#&#8203;3172](https://redirect.github.com/taskforcesh/bullmq/issues/3172)) ([d57698f](d57698f9af))

</details>

<details>
<summary>evanw/esbuild (esbuild)</summary>

### [`v0.25.2`](https://redirect.github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0252)

[Compare Source](https://redirect.github.com/evanw/esbuild/compare/v0.25.1...v0.25.2)

-   Support flags in regular expressions for the API ([#&#8203;4121](https://redirect.github.com/evanw/esbuild/issues/4121))

    The JavaScript plugin API for esbuild takes JavaScript regular expression objects for the `filter` option. Internally these are translated into Go regular expressions. However, this translation previously ignored the `flags` property of the regular expression. With this release, esbuild will now translate JavaScript regular expression flags into Go regular expression flags. Specifically the JavaScript regular expression `/\.[jt]sx?$/i` is turned into the Go regular expression `` `(?i)\.[jt]sx?$` `` internally inside of esbuild's API. This should make it possible to use JavaScript regular expressions with the `i` flag. Note that JavaScript and Go don't support all of the same regular expression features, so this mapping is only approximate.

-   Fix node-specific annotations for string literal export names ([#&#8203;4100](https://redirect.github.com/evanw/esbuild/issues/4100))

    When node instantiates a CommonJS module, it scans the AST to look for names to expose via ESM named exports. This is a heuristic that looks for certain patterns such as `exports.NAME = ...` or `module.exports = { ... }`. This behavior is used by esbuild to "annotate" CommonJS code that was converted from ESM with the original ESM export names. For example, when converting the file `export let foo, bar` from ESM to CommonJS, esbuild appends this to the end of the file:

    ```js
    // Annotate the CommonJS export names for ESM import in node:
    0 && (module.exports = {
      bar,
      foo
    });
    ```

    However, this feature previously didn't work correctly for export names that are not valid identifiers, which can be constructed using string literal export names. The generated code contained a syntax error. That problem is fixed in this release:

    ```js
    // Original code
    let foo
    export { foo as "foo!" }

    // Old output (with --format=cjs --platform=node)
    ...
    0 && (module.exports = {
      "foo!"
    });

    // New output (with --format=cjs --platform=node)
    ...
    0 && (module.exports = {
      "foo!": null
    });
    ```

-   Basic support for index source maps ([#&#8203;3439](https://redirect.github.com/evanw/esbuild/issues/3439), [#&#8203;4109](https://redirect.github.com/evanw/esbuild/pull/4109))

    The source map specification has an optional mode called [index source maps](https://tc39.es/ecma426/#sec-index-source-map) that makes it easier for tools to create an aggregate JavaScript file by concatenating many smaller JavaScript files with source maps, and then generate an aggregate source map by simply providing the original source maps along with some offset information. My understanding is that this is rarely used in practice. I'm only aware of two uses of it in the wild: [ClojureScript](https://clojurescript.org/) and [Turbopack](https://turbo.build/pack/).

    This release provides basic support for indexed source maps. However, the implementation has not been tested on a real app (just on very simple test input). If you are using index source maps in a real app, please try this out and report back if anything isn't working for you.

    Note that this is also not a complete implementation. For example, index source maps technically allows nesting source maps to an arbitrary depth, while esbuild's implementation in this release only supports a single level of nesting. It's unclear whether supporting more than one level of nesting is important or not given the lack of available test cases.

    This feature was contributed by [@&#8203;clyfish](https://redirect.github.com/clyfish).

</details>

<details>
<summary>expressjs/express (express)</summary>

### [`v5.1.0`](https://redirect.github.com/expressjs/express/blob/HEAD/History.md#510--2025-03-31)

[Compare Source](https://redirect.github.com/expressjs/express/compare/5.0.1...v5.1.0)

\========================

-   Add support for `Uint8Array` in `res.send()`
-   Add support for ETag option in `res.sendFile()`
-   Add support for multiple links with the same rel in `res.links()`
-   Add funding field to package.json
-   perf: use loop for acceptParams
-   refactor: prefix built-in node module imports
-   deps: remove `setprototypeof`
-   deps: remove `safe-buffer`
-   deps: remove `utils-merge`
-   deps: remove `methods`
-   deps: remove `depd`
-   deps: `debug@^4.4.0`
-   deps: `body-parser@^2.2.0`
-   deps: `router@^2.2.0`
-   deps: `content-type@^1.0.5`
-   deps: `finalhandler@^2.1.0`
-   deps: `qs@^6.14.0`
-   deps: `server-static@2.2.0`
-   deps: `type-is@2.0.1`

</details>

<details>
<summary>lucide-icons/lucide (lucide-react)</summary>

### [`v0.486.0`](https://redirect.github.com/lucide-icons/lucide/releases/tag/0.486.0): Version 0.486.0

[Compare Source](https://redirect.github.com/lucide-icons/lucide/compare/0.485.0...0.486.0)

##### What's Changed

-   feat([@&#8203;lucide/astro](https://redirect.github.com/lucide/astro)): add lucide package for Astro by [@&#8203;MoustaphaDev](https://redirect.github.com/MoustaphaDev) in [https://github.com/lucide-icons/lucide/pull/2665](https://redirect.github.com/lucide-icons/lucide/pull/2665)

##### New Contributors

-   [@&#8203;MoustaphaDev](https://redirect.github.com/MoustaphaDev) made their first contribution in [https://github.com/lucide-icons/lucide/pull/2665](https://redirect.github.com/lucide-icons/lucide/pull/2665)

**Full Changelog**: https://github.com/lucide-icons/lucide/compare/0.485.0...0.486.0

### [`v0.485.0`](https://redirect.github.com/lucide-icons/lucide/compare/0.484.0...0.485.0)

[Compare Source](https://redirect.github.com/lucide-icons/lucide/compare/0.484.0...0.485.0)

</details>

<details>
<summary>matklad/once_cell (once_cell)</summary>

### [`v1.21.3`](https://redirect.github.com/matklad/once_cell/blob/HEAD/CHANGELOG.md#1213)

[Compare Source](https://redirect.github.com/matklad/once_cell/compare/v1.21.2...v1.21.3)

-   Outline more initialization in `race`: [#&#8203;284](https://redirect.github.com/matklad/once_cell/pull/284),
    [#&#8203;285](https://redirect.github.com/matklad/once_cell/pull/285).

</details>

<details>
<summary>openai/openai-node (openai)</summary>

### [`v4.91.0`](https://redirect.github.com/openai/openai-node/blob/HEAD/CHANGELOG.md#4910-2025-03-31)

[Compare Source](https://redirect.github.com/openai/openai-node/compare/v4.90.0...v4.91.0)

Full Changelog: [v4.90.0...v4.91.0](https://redirect.github.com/openai/openai-node/compare/v4.90.0...v4.91.0)

##### Features

-   **api:** add `get /responses/{response_id}/input_items` endpoint ([ef0e0ac](ef0e0acd46))

##### Performance Improvements

-   **embedding:** default embedding creation to base64 ([#&#8203;1312](https://redirect.github.com/openai/openai-node/issues/1312)) ([e54530e](e54530e4f6)), closes [#&#8203;1310](https://redirect.github.com/openai/openai-node/issues/1310)

</details>

<details>
<summary>facebook/react (react)</summary>

### [`v19.1.0`](https://redirect.github.com/facebook/react/compare/v19.0.0...1825990c5608f0ab0c1475b4292218a508a171c9)

[Compare Source](https://redirect.github.com/facebook/react/compare/v19.0.0...v19.1.0)

</details>

<details>
<summary>gpbl/react-day-picker (react-day-picker)</summary>

### [`v9.6.4`](https://redirect.github.com/gpbl/react-day-picker/releases/tag/v9.6.4)

[Compare Source](https://redirect.github.com/gpbl/react-day-picker/compare/v9.6.3...v9.6.4)

#### What's Changed

-   fix(animation): fix issues when navigating months during animation by [@&#8203;rodgobbi](https://redirect.github.com/rodgobbi) in [https://github.com/gpbl/react-day-picker/pull/2710](https://redirect.github.com/gpbl/react-day-picker/pull/2710)

**Full Changelog**: https://github.com/gpbl/react-day-picker/compare/v9.6.3...v9.6.4

</details>

<details>
<summary>facebook/react (react-dom)</summary>

### [`v19.1.0`](https://redirect.github.com/facebook/react/compare/v19.0.0...1825990c5608f0ab0c1475b4292218a508a171c9)

[Compare Source](https://redirect.github.com/facebook/react/compare/v19.0.0...v19.1.0)

</details>

<details>
<summary>react-hook-form/react-hook-form (react-hook-form)</summary>

### [`v7.55.0`](https://redirect.github.com/react-hook-form/react-hook-form/compare/v7.54.2...a66b52a4f0d5c0de3c09307c074371e3e881ce73)

[Compare Source](https://redirect.github.com/react-hook-form/react-hook-form/compare/v7.54.2...v7.55.0)

</details>

<details>
<summary>petyosi/react-virtuoso (react-virtuoso)</summary>

### [`v4.12.6`](https://redirect.github.com/petyosi/react-virtuoso/releases/tag/react-virtuoso%404.12.6)

[Compare Source](https://redirect.github.com/petyosi/react-virtuoso/compare/react-virtuoso@4.12.5...react-virtuoso@4.12.6)

##### Patch Changes

-   [`bb0402e`](https://redirect.github.com/petyosi/react-virtuoso/commit/bb0402e): Support window scrolling to iframe react portals

</details>

<details>
<summary>HEnquist/rubato (rubato)</summary>

### [`v0.16.2`](https://redirect.github.com/HEnquist/rubato/releases/tag/v0.16.2)

[Compare Source](https://redirect.github.com/HEnquist/rubato/compare/v0.16.1...v0.16.2)

#### What's Changed

-   Fix tests on 32-bit archs, add test by [@&#8203;HEnquist](https://redirect.github.com/HEnquist) in [https://github.com/HEnquist/rubato/pull/102](https://redirect.github.com/HEnquist/rubato/pull/102)

**Full Changelog**: https://github.com/HEnquist/rubato/compare/v0.16.1...v0.16.2

</details>

<details>
<summary>dcastil/tailwind-merge (tailwind-merge)</summary>

### [`v3.1.0`](https://redirect.github.com/dcastil/tailwind-merge/releases/tag/v3.1.0)

[Compare Source](https://redirect.github.com/dcastil/tailwind-merge/compare/v3.0.2...v3.1.0)

##### New Features

-   Add support for Tailwind CSS v4.0.10 by [@&#8203;dcastil](https://redirect.github.com/dcastil) in [https://github.com/dcastil/tailwind-merge/pull/546](https://redirect.github.com/dcastil/tailwind-merge/pull/546)

##### Bug Fixes

-   Fix length variable in `via-(length:*)` class being merged with `via-<color>` classes accidentally by [@&#8203;dcastil](https://redirect.github.com/dcastil) in [https://github.com/dcastil/tailwind-merge/pull/559](https://redirect.github.com/dcastil/tailwind-merge/pull/559)

##### Documentation

-   Fix typo in comment in types.ts by [@&#8203;roottool](https://redirect.github.com/roottool) in [https://github.com/dcastil/tailwind-merge/pull/549](https://redirect.github.com/dcastil/tailwind-merge/pull/549)
-   Update shadow scale recipe to tailwind merge v3 API by [@&#8203;dcastil](https://redirect.github.com/dcastil) in [https://github.com/dcastil/tailwind-merge/pull/545](https://redirect.github.com/dcastil/tailwind-merge/pull/545)

##### Other

-   Fix metrics report action erroring on PRs from forks by [@&#8203;dcastil](https://redirect.github.com/dcastil) in [https://github.com/dcastil/tailwind-merge/pull/551](https://redirect.github.com/dcastil/tailwind-merge/pull/551)

**Full Changelog**: https://github.com/dcastil/tailwind-merge/compare/v3.0.2...v3.1.0

Thanks to [@&#8203;brandonmcconnell](https://redirect.github.com/brandonmcconnell), [@&#8203;manavm1990](https://redirect.github.com/manavm1990), [@&#8203;langy](https://redirect.github.com/langy), [@&#8203;jamesreaco](https://redirect.github.com/jamesreaco), [@&#8203;roboflow](https://redirect.github.com/roboflow), [@&#8203;syntaxfm](https://redirect.github.com/syntaxfm), [@&#8203;getsentry](https://redirect.github.com/getsentry), [@&#8203;codecov](https://redirect.github.com/codecov), [@&#8203;sourcegraph](https://redirect.github.com/sourcegraph) and a private sponsor for sponsoring tailwind-merge! ❤️

</details>

<details>
<summary>typescript-eslint/typescript-eslint (typescript-eslint)</summary>

### [`v8.29.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-eslint/CHANGELOG.md#8290-2025-03-31)

[Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.28.0...v8.29.0)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website.

</details>

<details>
<summary>yarnpkg/berry (yarn)</summary>

### [`v4.8.1`](260cff1745...76596c5d3f)

[Compare Source](260cff1745...76596c5d3f)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMDcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjIwNy4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-04-01 00:56:18 +00:00
renovate
5930bba97d chore: bump up vite version to v6.2.4 [SECURITY] (#11332)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [vite](https://vite.dev) ([source](https://redirect.github.com/vitejs/vite/tree/HEAD/packages/vite)) | [`6.2.3` -> `6.2.4`](https://renovatebot.com/diffs/npm/vite/6.2.3/6.2.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vite/6.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vite/6.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vite/6.2.3/6.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vite/6.2.3/6.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

### GitHub Vulnerability Alerts

#### [CVE-2025-31125](https://redirect.github.com/vitejs/vite/security/advisories/GHSA-4r4m-qw57-chr8)

### Summary

The contents of arbitrary files can be returned to the browser.

### Impact
Only apps explicitly exposing the Vite dev server to the network (using `--host` or [`server.host` config option](https://vitejs.dev/config/server-options.html#server-host)) are affected.

### Details

- base64 encoded content of non-allowed files is exposed using `?inline&import` (originally reported as `?import&?inline=1.wasm?init`)
- content of non-allowed files is exposed using `?raw?import`

`/@&#8203;fs/` isn't needed to reproduce the issue for files inside the project root.

### PoC

Original report (check details above for simplified cases):

The ?import&?inline=1.wasm?init ending allows attackers to read arbitrary files and returns the file content if it exists.  Base64 decoding needs to be performed twice
```
$ npm create vite@latest
$ cd vite-project/
$ npm install
$ npm run dev
```

Example full URL `http://localhost:5173/@&#8203;fs/C:/windows/win.ini?import&?inline=1.wasm?init`

---

### Release Notes

<details>
<summary>vitejs/vite (vite)</summary>

### [`v6.2.4`](https://redirect.github.com/vitejs/vite/releases/tag/v6.2.4)

[Compare Source](https://redirect.github.com/vitejs/vite/compare/v6.2.3...v6.2.4)

Please refer to [CHANGELOG.md](https://redirect.github.com/vitejs/vite/blob/v6.2.4/packages/vite/CHANGELOG.md) for details.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMDcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjIwNy4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-04-01 00:43:32 +00:00
akumatus
afd1a30b96 feat(core): add chat-panel track (#11323)
Close [AF-2434](https://linear.app/affine-design/issue/AF-2434).
2025-03-31 17:01:10 +00:00
EYHN
bc0f32f20b feat(nbstore): add indexer sync version (#11324) 2025-03-31 16:48:47 +00:00
Brooooooklyn
d31e0c0e71 ci: run some optimize on CI e2e (#11330) 2025-03-31 15:23:21 +00:00
Brooooooklyn
2eecfef393 chore: replace woff to woff2 (#11328) 2025-03-31 15:23:21 +00:00
darkskygit
fe05872ada feat(server): compress transcript response (#11316) 2025-03-31 14:46:10 +00:00
Saul-Mirone
58d6a96e45 fix(editor): firefox invalid selection range (#11320)
Closes: BS-2987
2025-03-31 14:33:24 +00:00
EYHN
5f3cf53819 feat(core): cleanup unused indexeddb when bootstrapping (#11325) 2025-03-31 14:20:41 +00:00
pengx17
ac096f533a feat(electron): should listen to app audio input event for isRunning check (#11315)
fix AF-2435
2025-03-31 14:02:37 +00:00
EYHN
8957d0645f feat(nbstore): add indexer storage (#10953) 2025-03-31 12:59:51 +00:00
L-Sun
c9e14ac0db fix(editor): sync gfx block transform update with RAF to prevent stale transform (#11322)
Close [BS-2866](https://linear.app/affine-design/issue/BS-2866/presentation-mode中的note消失)

## Problem
When using RequestAnimationFrame (RAF) for GFX block updates, there was a timing issue where the transform update would lag behind the RAF callback, causing the block to display with the previous frame's transform state.

## Solution
1. Refactored the block state management to use signals for better reactivity
2. Moved block visibility state management from `viewport-element.ts` to `gfx-block-component.ts`
3. Added `transformState$` signal to track block state
4. Synchronized transform updates with RAF using `effect` to ensure updates happen in the correct frame
5. Added test case to verify note visibility in presentation mode
2025-03-31 12:47:01 +00:00
L-Sun
fec698fd8b chore(editor): improve selection of doc in canvas (#11314)
Close [BS-2705](https://linear.app/affine-design/issue/BS-2705/[improvement]-通过-viability-control-选择-hide-in-edgeless)

This PR disabled selecting operation of notes that are only shown in page mode.
2025-03-31 12:35:02 +00:00
fundon
587fea02b8 feat(editor): add cursor to drawing tools (#11311)
Closes: [BS-2862](https://linear.app/affine-design/issue/BS-2862/pencil与highlighter光标改成)
2025-03-31 12:22:20 +00:00
CatsJuice
731a4c952f feat(core): track for integration (#11128) 2025-03-31 11:45:32 +00:00
fundon
f1882061a2 fix(editor): should exit drawing tools menu when Escape is pressed (#11306)
Closes: [BS-2978](https://linear.app/affine-design/issue/BS-2978/二级菜单的激活状态错误) [BS-2977](https://linear.app/affine-design/issue/BS-2977/pen和highlighter没做esc)
2025-03-31 11:05:01 +00:00
L-Sun
2f1f09e25f fix(editor): extract store spec register from effects (#11268)
Close [BS-2802](https://linear.app/affine-design/issue/BS-2802/移動端缺少bseffects導致文檔創建錯誤)
2025-03-31 10:53:02 +00:00
Brooooooklyn
47a8d15878 ci: start devServer before test running to avoid tests timeout (#11297) 2025-03-31 10:39:34 +00:00
JimmFly
eda680ccdc fix(admin): adjust admin panel settings style (#11291)
Adjusted the style of some runtime configurations to match the new parameters.
Adjusted the style of dialog and right sidebar.

close AF-2411 AF-2412 AF-2413 AF-2422
2025-03-31 10:26:07 +00:00
doouding
51dddc10be fix: template panel tooltip overflow (#11304)
Close #10171
Fixes [BS-2577](https://linear.app/affine-design/issue/BS-2577/​title-overflow-in-edgeless-mode-in-web-interface)
2025-03-31 09:51:33 +00:00
darkskygit
b37182ceb7 feat(server): improve transcript error handle (#11293) 2025-03-31 09:30:32 +00:00
fundon
6a66bf53a8 fix(editor): adjust highlighter color (#11300)
Closes: [BS-2980](https://linear.app/affine-design/issue/BS-2980/highlighter透明度改为30percent) [BS-2979](https://linear.app/affine-design/issue/BS-2979/highlighter默认选择颜色为蓝色)
2025-03-31 09:11:26 +00:00
1813 changed files with 26244 additions and 18673 deletions

View File

@@ -6,7 +6,7 @@
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
"features": {
"ghcr.io/devcontainers/features/node:1": {
"version": "18"
"version": "22"
},
"ghcr.io/devcontainers/features/rust:1": {}
},

View File

@@ -0,0 +1,6 @@
{
"$schema": "https://github.com/toeverything/affine/releases/latest/download/config.schema.json",
"server": {
"name": "AFFiNE Self Hosted Server"
}
}

View File

@@ -3,42 +3,6 @@
"title": "AFFiNE Application Configuration",
"type": "object",
"properties": {
"redis": {
"type": "object",
"description": "Configuration for redis module",
"properties": {
"db": {
"type": "number",
"description": "The database index of redis server to be used(Must be less than 10).\n@default 0\n@environment `REDIS_DATABASE`",
"default": 0
},
"host": {
"type": "string",
"description": "The host of the redis server.\n@default \"localhost\"\n@environment `REDIS_HOST`",
"default": "localhost"
},
"port": {
"type": "number",
"description": "The port of the redis server.\n@default 6379\n@environment `REDIS_PORT`",
"default": 6379
},
"username": {
"type": "string",
"description": "The username of the redis server.\n@default \"\"\n@environment `REDIS_USERNAME`",
"default": ""
},
"password": {
"type": "string",
"description": "The password of the redis server.\n@default \"\"\n@environment `REDIS_PASSWORD`",
"default": ""
},
"ioredis": {
"type": "object",
"description": "The config for the ioredis client.\n@default {}\n@link https://github.com/luin/ioredis",
"default": {}
}
}
},
"metrics": {
"type": "object",
"description": "Configuration for metrics module",
@@ -50,25 +14,6 @@
}
}
},
"graphql": {
"type": "object",
"description": "Configuration for graphql module",
"properties": {
"apolloDriverConfig": {
"type": "object",
"description": "The config for underlying nestjs GraphQL and apollo driver engine.\n@default {\"buildSchemaOptions\":{\"numberScalarMode\":\"integer\"},\"useGlobalPrefix\":true,\"playground\":true,\"introspection\":true,\"sortSchema\":true}\n@link https://docs.nestjs.com/graphql/quick-start",
"default": {
"buildSchemaOptions": {
"numberScalarMode": "integer"
},
"useGlobalPrefix": true,
"playground": true,
"introspection": true,
"sortSchema": true
}
}
}
},
"crypto": {
"type": "object",
"description": "Configuration for crypto module",
@@ -86,25 +31,20 @@
"properties": {
"queue": {
"type": "object",
"description": "The config for job queues\n@default {\"prefix\":\"affine_job\",\"defaultJobOptions\":{\"attempts\":5,\"removeOnComplete\":true,\"removeOnFail\":{\"age\":86400,\"count\":500}}}\n@link https://api.docs.bullmq.io/interfaces/v5.QueueOptions.html",
"description": "The config for job queues\n@default {\"attempts\":5,\"removeOnComplete\":true,\"removeOnFail\":{\"age\":86400,\"count\":500}}\n@link https://api.docs.bullmq.io/interfaces/v5.QueueOptions.html",
"default": {
"prefix": "affine_job",
"defaultJobOptions": {
"attempts": 5,
"removeOnComplete": true,
"removeOnFail": {
"age": 86400,
"count": 500
}
"attempts": 5,
"removeOnComplete": true,
"removeOnFail": {
"age": 86400,
"count": 500
}
}
},
"worker": {
"type": "object",
"description": "The config for job workers\n@default {\"defaultWorkerOptions\":{}}\n@link https://api.docs.bullmq.io/interfaces/v5.WorkerOptions.html",
"default": {
"defaultWorkerOptions": {}
}
"description": "The config for job workers\n@default {}\n@link https://api.docs.bullmq.io/interfaces/v5.WorkerOptions.html",
"default": {}
},
"queues.copilot": {
"type": "object",
@@ -209,22 +149,6 @@
}
}
},
"db": {
"type": "object",
"description": "Configuration for db module",
"properties": {
"datasourceUrl": {
"type": "string",
"description": "The datasource url for the prisma client.\n@default \"postgresql://localhost:5432/affine\"\n@environment `DATABASE_URL`",
"default": "postgresql://localhost:5432/affine"
},
"prisma": {
"type": "object",
"description": "The config for the prisma client.\n@default {}\n@link https://www.prisma.io/docs/reference/api-reference/prisma-client-reference",
"default": {}
}
}
},
"auth": {
"type": "object",
"description": "Configuration for auth module",
@@ -427,6 +351,24 @@
"accountId": {
"type": "string",
"description": "The account id for the cloudflare r2 storage provider."
},
"usePresignedURL": {
"type": "object",
"description": "The presigned url config for the cloudflare r2 storage provider.",
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether to use presigned url for the cloudflare r2 storage provider."
},
"urlPrefix": {
"type": "string",
"description": "The presigned url prefix for the cloudflare r2 storage provider.\nsee https://developers.cloudflare.com/waf/custom-rules/use-cases/configure-token-authentication/ to configure it.\nExample value: \"https://storage.example.com\"\nExample rule: is_timed_hmac_valid_v0(\"your_secret\", http.request.uri, 10800, http.request.timestamp.sec, 6)"
},
"signKey": {
"type": "string",
"description": "The presigned key for the cloudflare r2 storage provider."
}
}
}
}
}
@@ -530,6 +472,24 @@
"accountId": {
"type": "string",
"description": "The account id for the cloudflare r2 storage provider."
},
"usePresignedURL": {
"type": "object",
"description": "The presigned url config for the cloudflare r2 storage provider.",
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether to use presigned url for the cloudflare r2 storage provider."
},
"urlPrefix": {
"type": "string",
"description": "The presigned url prefix for the cloudflare r2 storage provider.\nsee https://developers.cloudflare.com/waf/custom-rules/use-cases/configure-token-authentication/ to configure it.\nExample value: \"https://storage.example.com\"\nExample rule: is_timed_hmac_valid_v0(\"your_secret\", http.request.uri, 10800, http.request.timestamp.sec, 6)"
},
"signKey": {
"type": "string",
"description": "The presigned key for the cloudflare r2 storage provider."
}
}
}
}
}
@@ -557,8 +517,8 @@
},
"externalUrl": {
"type": "string",
"description": "Base url of AFFiNE server, used for generating external urls.\nDefault to be `[server.protocol]://[server.host][:server.port]` if not specified.\n \n@default \"http://localhost:3010\"\n@environment `AFFINE_SERVER_EXTERNAL_URL`",
"default": "http://localhost:3010"
"description": "Base url of AFFiNE server, used for generating external urls.\nDefault to be `[server.protocol]://[server.host][:server.port]` if not specified.\n \n@default \"\"\n@environment `AFFINE_SERVER_EXTERNAL_URL`",
"default": ""
},
"https": {
"type": "boolean",
@@ -593,6 +553,17 @@
}
}
},
"docService": {
"type": "object",
"description": "Configuration for docService module",
"properties": {
"endpoint": {
"type": "string",
"description": "The endpoint of the doc service.\n@default \"\"\n@environment `DOC_SERVICE_ENDPOINT`",
"default": ""
}
}
},
"client": {
"type": "object",
"description": "Configuration for client module",
@@ -765,6 +736,24 @@
"accountId": {
"type": "string",
"description": "The account id for the cloudflare r2 storage provider."
},
"usePresignedURL": {
"type": "object",
"description": "The presigned url config for the cloudflare r2 storage provider.",
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether to use presigned url for the cloudflare r2 storage provider."
},
"urlPrefix": {
"type": "string",
"description": "The presigned url prefix for the cloudflare r2 storage provider.\nsee https://developers.cloudflare.com/waf/custom-rules/use-cases/configure-token-authentication/ to configure it.\nExample value: \"https://storage.example.com\"\nExample rule: is_timed_hmac_valid_v0(\"your_secret\", http.request.uri, 10800, http.request.timestamp.sec, 6)"
},
"signKey": {
"type": "string",
"description": "The presigned key for the cloudflare r2 storage provider."
}
}
}
}
}
@@ -877,7 +866,7 @@
},
"stripe": {
"type": "object",
"description": "Stripe API keys\n@default {}\n@link https://docs.stripe.com/api",
"description": "Stripe sdk options\n@default {}\n@link https://docs.stripe.com/api",
"default": {}
}
}

View File

@@ -10,6 +10,7 @@ const {
DATABASE_USERNAME,
DATABASE_PASSWORD,
DATABASE_NAME,
GCLOUD_CONNECTION_NAME,
CLOUD_SQL_IAM_ACCOUNT,
APP_IAM_ACCOUNT,
REDIS_SERVER_HOST,
@@ -71,6 +72,7 @@ const createHelmCommand = ({ isDryRun }) => {
isProduction || isBeta || isInternal
? [
`--set cloud-sql-proxy.enabled=true`,
`--set-string cloud-sql-proxy.database.connectionName="${GCLOUD_CONNECTION_NAME}"`,
`--set-string global.database.host=${DATABASE_URL}`,
`--set-string global.database.user=${DATABASE_USERNAME}`,
`--set-string global.database.password=${DATABASE_PASSWORD}`,

View File

@@ -3,4 +3,4 @@ name: affine
description: AFFiNE cloud chart
type: application
version: 0.0.0
appVersion: "0.20.0"
appVersion: "0.21.0"

View File

@@ -1,5 +1,7 @@
replicaCount: 3
enabled: false
database:
connectionName: ""
image:
# the tag is defined as chart appVersion.

View File

@@ -3,7 +3,7 @@ name: graphql
description: AFFiNE GraphQL server
type: application
version: 0.0.0
appVersion: "0.20.0"
appVersion: "0.21.0"
dependencies:
- name: gcloud-sql-proxy
version: 0.0.0

View File

@@ -3,7 +3,7 @@ name: sync
description: AFFiNE Sync Server
type: application
version: 0.0.0
appVersion: "0.20.0"
appVersion: "0.21.0"
dependencies:
- name: gcloud-sql-proxy
version: 0.0.0

View File

@@ -92,34 +92,16 @@ jobs:
APP_VERSION: ${{ steps.version.outputs.APP_VERSION }}
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
CANARY_DEPLOY_HOST: ${{ secrets.CANARY_DEPLOY_HOST }}
R2_ACCOUNT_ID: ${{ secrets.R2_ACCOUNT_ID }}
R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
CAPTCHA_TURNSTILE_SECRET: ${{ secrets.CAPTCHA_TURNSTILE_SECRET }}
COPILOT_OPENAI_API_KEY: ${{ secrets.COPILOT_OPENAI_API_KEY }}
COPILOT_FAL_API_KEY: ${{ secrets.COPILOT_FAL_API_KEY }}
COPILOT_GOOGLE_API_KEY: ${{ secrets.COPILOT_GOOGLE_API_KEY }}
COPILOT_PERPLEXITY_API_KEY: ${{ secrets.COPILOT_PERPLEXITY_API_KEY }}
COPILOT_UNSPLASH_API_KEY: ${{ secrets.COPILOT_UNSPLASH_API_KEY }}
METRICS_CUSTOMER_IO_TOKEN: ${{ secrets.METRICS_CUSTOMER_IO_TOKEN }}
MAILER_SENDER: ${{ secrets.OAUTH_EMAIL_SENDER }}
MAILER_USER: ${{ secrets.OAUTH_EMAIL_LOGIN }}
MAILER_PASSWORD: ${{ secrets.OAUTH_EMAIL_PASSWORD }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
AFFINE_GOOGLE_CLIENT_ID: ${{ secrets.AFFINE_GOOGLE_CLIENT_ID }}
AFFINE_GOOGLE_CLIENT_SECRET: ${{ secrets.AFFINE_GOOGLE_CLIENT_SECRET }}
DATABASE_URL: ${{ secrets.DATABASE_URL }}
DATABASE_USERNAME: ${{ secrets.DATABASE_USERNAME }}
DATABASE_PASSWORD: ${{ secrets.DATABASE_PASSWORD }}
DATABASE_NAME: ${{ secrets.DATABASE_NAME }}
GCLOUD_CONNECTION_NAME: ${{ secrets.GCLOUD_CONNECTION_NAME }}
GCLOUD_CLOUD_SQL_INTERNAL_ENDPOINT: ${{ secrets.GCLOUD_CLOUD_SQL_INTERNAL_ENDPOINT }}
REDIS_SERVER_HOST: ${{ secrets.REDIS_SERVER_HOST }}
REDIS_SERVER_PASSWORD: ${{ secrets.REDIS_SERVER_PASSWORD }}
CLOUD_SQL_IAM_ACCOUNT: ${{ secrets.CLOUD_SQL_IAM_ACCOUNT }}
APP_IAM_ACCOUNT: ${{ secrets.APP_IAM_ACCOUNT }}
STRIPE_API_KEY: ${{ secrets.STRIPE_API_KEY }}
STRIPE_WEBHOOK_KEY: ${{ secrets.STRIPE_WEBHOOK_KEY }}
STATIC_IP_NAME: ${{ secrets.STATIC_IP_NAME }}
deploy-done:

View File

@@ -142,11 +142,19 @@ jobs:
# some flatpak deps need git protocol.file.allow
git config --global protocol.file.allow always
- name: Remove nbstore node_modules
shell: bash
# node_modules of nbstore is not needed for building, and it will make the build process out of memory
run: |
rm -rf packages/frontend/apps/electron/node_modules/@affine/nbstore/node_modules/@blocksuite
rm -rf packages/frontend/apps/electron/node_modules/@affine/native/node_modules
- name: make
run: yarn affine @affine/electron make --platform=${{ matrix.spec.platform }} --arch=${{ matrix.spec.arch }}
env:
SKIP_WEB_BUILD: 1
HOIST_NODE_MODULES: 1
NODE_OPTIONS: --max-old-space-size=14384
- name: signing DMG
if: ${{ matrix.spec.platform == 'darwin' }}
@@ -240,11 +248,20 @@ jobs:
- name: Build Desktop Layers
run: yarn affine @affine/electron build
- name: Remove nbstore node_modules
shell: bash
# node_modules of nbstore is not needed for building, and it will make the build process out of memory
run: |
rm -rf packages/frontend/apps/electron/node_modules/@affine/nbstore/node_modules/@blocksuite
rm -rf packages/frontend/apps/electron/node_modules/@affine/native/node_modules
- name: package
run: yarn affine @affine/electron package --platform=${{ matrix.spec.platform }} --arch=${{ matrix.spec.arch }}
run: |
yarn affine @affine/electron package --platform=${{ matrix.spec.platform }} --arch=${{ matrix.spec.arch }}
env:
SKIP_WEB_BUILD: 1
HOIST_NODE_MODULES: 1
NODE_OPTIONS: --max-old-space-size=14384
- name: get all files to be signed
id: get_files_to_be_signed
@@ -443,6 +460,7 @@ jobs:
run: |
cp ./.docker/selfhost/compose.yml ./release/docker-compose.yml
cp ./.docker/selfhost/.env.example ./release/.env.example
cp ./.docker/selfhost/schema.json ./release/config.schema.json
- name: Generate Release yml
run: |
node ./scripts/generate-release-yml.mjs

View File

@@ -117,10 +117,31 @@ jobs:
name: android
path: packages/frontend/apps/android/dist
ios:
runs-on: namespace-profile-macos
determine-ios-runner:
runs-on: ubuntu-latest
needs:
- build-ios-web
outputs:
RUNNER: ${{ steps.runner.outputs.RUNNER }}
steps:
- name: Determine Runner
id: runner
# Randomly pick runner with 80% chance for blaze/macos-14 and 20% chance for namespace-profile-macos
# blaze/macos-14 is free but has limited concurrency
run: |
RANDOM_NUMBER=$(( $RANDOM % 100 + 1 ))
if [ $RANDOM_NUMBER -le 20 ]; then
echo "Selected namespace-profile-macos (20% probability)"
echo "RUNNER=namespace-profile-macos" >> $GITHUB_OUTPUT
else
echo "Selected blaze/macos-14 (80% probability)"
echo "RUNNER=blaze/macos-14" >> $GITHUB_OUTPUT
fi
ios:
runs-on: ${{ github.ref_name == 'canary' && 'macos-latest' || needs.determine-ios-runner.outputs.RUNNER }}
needs:
- determine-ios-runner
steps:
- uses: actions/checkout@v4
- name: Download mobile artifact

File diff suppressed because one or more lines are too long

View File

@@ -12,4 +12,4 @@ npmPublishAccess: public
npmPublishRegistry: "https://registry.npmjs.org"
yarnPath: .yarn/releases/yarn-4.8.0.cjs
yarnPath: .yarn/releases/yarn-4.8.1.cjs

374
Cargo.lock generated
View File

@@ -81,7 +81,6 @@ dependencies = [
"coreaudio-rs",
"dispatch2",
"libc",
"mp3lame-encoder",
"napi",
"napi-build",
"napi-derive",
@@ -349,7 +348,7 @@ dependencies = [
"derive_utils",
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -358,15 +357,6 @@ version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
[[package]]
name = "autotools"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef941527c41b0fc0dd48511a8154cd5fc7e29200a0ff8b7203c5d777dbc795cf"
dependencies = [
"cc",
]
[[package]]
name = "backtrace"
version = "0.3.74"
@@ -406,9 +396,9 @@ dependencies = [
[[package]]
name = "base64ct"
version = "1.6.0"
version = "1.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3"
[[package]]
name = "basic-toml"
@@ -434,7 +424,7 @@ dependencies = [
"regex",
"rustc-hash 1.1.0",
"shlex",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -508,18 +498,18 @@ dependencies = [
[[package]]
name = "borsh"
version = "1.5.5"
version = "1.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5430e3be710b68d984d1391c854eb431a9d548640711faa54eecb1df93db91cc"
checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce"
dependencies = [
"cfg_aliases",
]
[[package]]
name = "bpaf"
version = "0.9.18"
version = "0.9.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4de4d74c5891642753c67ab88f58d971a68dd98673b69689a8c24ce3ec78a412"
checksum = "4848ed5727d39a7573551c205bcb1ccd88c8cad4ed2c80f62e2316f208196b8d"
[[package]]
name = "bstr"
@@ -729,9 +719,9 @@ dependencies = [
[[package]]
name = "clap"
version = "4.5.31"
version = "4.5.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767"
checksum = "d8aa86934b44c19c50f87cc2790e19f54f7a67aedb64101c2e1a2e5ecfb73944"
dependencies = [
"clap_builder",
"clap_derive",
@@ -739,9 +729,9 @@ dependencies = [
[[package]]
name = "clap_builder"
version = "4.5.31"
version = "4.5.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863"
checksum = "2414dbb2dd0695280da6ea9261e327479e9d37b0630f6b53ba2a11c60c679fd9"
dependencies = [
"anstream",
"anstyle",
@@ -751,14 +741,14 @@ dependencies = [
[[package]]
name = "clap_derive"
version = "4.5.28"
version = "4.5.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed"
checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7"
dependencies = [
"heck",
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -1068,7 +1058,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -1081,7 +1071,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustc_version",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -1092,7 +1082,7 @@ checksum = "ccfae181bab5ab6c5478b2ccb69e4c68a02f8c3ec72f6616bfec9dbc599d2ee0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -1133,7 +1123,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -1259,9 +1249,9 @@ dependencies = [
[[package]]
name = "event-listener-strategy"
version = "0.5.3"
version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2"
checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
dependencies = [
"event-listener",
"pin-project-lite",
@@ -1298,9 +1288,9 @@ checksum = "e7ef3d5e8ae27277c8285ac43ed153158178ef0f79567f32024ca8140a0c7cd8"
[[package]]
name = "flate2"
version = "1.1.0"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc"
checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece"
dependencies = [
"crc32fast",
"miniz_oxide",
@@ -1325,9 +1315,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "foldhash"
version = "0.1.4"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
[[package]]
name = "foreign-types"
@@ -1347,7 +1337,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -1504,14 +1494,14 @@ dependencies = [
[[package]]
name = "getrandom"
version = "0.3.1"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8"
checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0"
dependencies = [
"cfg-if",
"libc",
"wasi 0.13.3+wasi-0.2.2",
"windows-targets 0.52.6",
"r-efi",
"wasi 0.14.2+wasi-0.2.4",
]
[[package]]
@@ -1539,9 +1529,9 @@ dependencies = [
[[package]]
name = "half"
version = "2.4.1"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888"
checksum = "7db2ff139bba50379da6aa0766b52fdcb62cb5b263009b09ed58ba604e14bbd1"
dependencies = [
"cfg-if",
"crunchy",
@@ -1669,16 +1659,17 @@ dependencies = [
[[package]]
name = "iana-time-zone"
version = "0.1.61"
version = "0.1.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"
checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
"log",
"wasm-bindgen",
"windows-core 0.52.0",
"windows-core 0.61.0",
]
[[package]]
@@ -1731,9 +1722,9 @@ dependencies = [
[[package]]
name = "icu_locid_transform_data"
version = "1.5.0"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"
checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d"
[[package]]
name = "icu_normalizer"
@@ -1755,9 +1746,9 @@ dependencies = [
[[package]]
name = "icu_normalizer_data"
version = "1.5.0"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516"
checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7"
[[package]]
name = "icu_properties"
@@ -1776,9 +1767,9 @@ dependencies = [
[[package]]
name = "icu_properties_data"
version = "1.5.0"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"
checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2"
[[package]]
name = "icu_provider"
@@ -1805,7 +1796,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -1826,9 +1817,9 @@ dependencies = [
[[package]]
name = "icu_segmenter_data"
version = "1.5.0"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f739ee737260d955e330bc83fdeaaf1631f7fb7ed218761d3c04bb13bb7d79df"
checksum = "a1e52775179941363cc594e49ce99284d13d6948928d8e72c755f55e98caa1eb"
[[package]]
name = "idna"
@@ -1853,9 +1844,9 @@ dependencies = [
[[package]]
name = "indexmap"
version = "2.7.1"
version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652"
checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058"
dependencies = [
"equivalent",
"hashbrown 0.15.2",
@@ -2006,9 +1997,9 @@ checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa"
[[package]]
name = "libmimalloc-sys"
version = "0.1.40"
version = "0.1.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07d0e07885d6a754b9c7993f2625187ad694ee985d60f23355ff0e7077261502"
checksum = "6b20daca3a4ac14dbdc753c5e90fc7b490a48a9131daed3c9a9ced7b2defd37b"
dependencies = [
"cc",
"libc",
@@ -2027,9 +2018,9 @@ dependencies = [
[[package]]
name = "linux-raw-sys"
version = "0.9.2"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6db9c683daf087dc577b7506e9695b3d556a9f3849903fa28186283afd6809e9"
checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413"
[[package]]
name = "litemap"
@@ -2049,9 +2040,9 @@ dependencies = [
[[package]]
name = "log"
version = "0.4.26"
version = "0.4.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e"
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
[[package]]
name = "loom"
@@ -2162,9 +2153,9 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
[[package]]
name = "mimalloc"
version = "0.1.44"
version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99585191385958383e13f6b822e6b6d8d9cf928e7d286ceb092da92b43c87bc1"
checksum = "03cb1f88093fe50061ca1195d336ffec131347c7b833db31f9ab62a2d1b7925f"
dependencies = [
"libmimalloc-sys",
]
@@ -2193,9 +2184,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "miniz_oxide"
version = "0.8.5"
version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5"
checksum = "ff70ce3e48ae43fa075863cef62e8b43b71a4f2382229920e0df362592919430"
dependencies = [
"adler2",
]
@@ -2211,27 +2202,6 @@ dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "mp3lame-encoder"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc8c8b5cdbe788ccd1098c3d3635298a011cffdebdd3460c9ca5060a7551557b"
dependencies = [
"libc",
"mp3lame-sys",
]
[[package]]
name = "mp3lame-sys"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acaec8842b2ebd61692a6c8c2b9f3edbf5c36e5e5c4677b5911430eaf859377c"
dependencies = [
"autotools",
"cc",
"libc",
]
[[package]]
name = "nanoid"
version = "0.4.0"
@@ -2273,7 +2243,7 @@ dependencies = [
"napi-derive-backend",
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -2286,7 +2256,7 @@ dependencies = [
"proc-macro2",
"quote",
"semver",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -2430,7 +2400,7 @@ dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -2501,9 +2471,9 @@ dependencies = [
[[package]]
name = "once_cell"
version = "1.21.2"
version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2806eaa3524762875e21c3dcd057bc4b7bfa01ce4da8d46be1cd43649e1cc6b"
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]]
name = "oorandom"
@@ -2734,11 +2704,11 @@ checksum = "78451badbdaebaf17f053fd9152b3ffb33b516104eacb45e7864aaa9c712f306"
[[package]]
name = "ppv-lite86"
version = "0.2.20"
version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
dependencies = [
"zerocopy 0.7.35",
"zerocopy 0.8.24",
]
[[package]]
@@ -2787,13 +2757,19 @@ dependencies = [
[[package]]
name = "quote"
version = "1.0.39"
version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801"
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
dependencies = [
"proc-macro2",
]
[[package]]
name = "r-efi"
version = "5.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5"
[[package]]
name = "radium"
version = "0.7.0"
@@ -2819,7 +2795,7 @@ checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94"
dependencies = [
"rand_chacha 0.9.0",
"rand_core 0.9.3",
"zerocopy 0.8.23",
"zerocopy 0.8.24",
]
[[package]]
@@ -2857,7 +2833,7 @@ version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
dependencies = [
"getrandom 0.3.1",
"getrandom 0.3.2",
]
[[package]]
@@ -2973,9 +2949,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
[[package]]
name = "ring"
version = "0.17.13"
version = "0.17.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70ac5d832aa16abd7d1def883a8545280c20a60f523a370aa3a9617c2b8550ee"
checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
dependencies = [
"cc",
"cfg-if",
@@ -3010,7 +2986,7 @@ dependencies = [
"rinja_parser",
"rustc-hash 2.1.1",
"serde",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -3026,9 +3002,9 @@ dependencies = [
[[package]]
name = "rsa"
version = "0.9.7"
version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47c75d7c5c6b673e58bf54d8544a9f432e3a925b0e80f7cd3602ab5c50c55519"
checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b"
dependencies = [
"const-oid",
"digest",
@@ -3046,9 +3022,9 @@ dependencies = [
[[package]]
name = "rubato"
version = "0.16.1"
version = "0.16.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdd96992d7e24b3d7f35fdfe02af037a356ac90d41b466945cf3333525a86eea"
checksum = "5258099699851cfd0082aeb645feb9c084d9a5e1f1b8d5372086b989fc5e56a1"
dependencies = [
"num-complex",
"num-integer",
@@ -3100,9 +3076,9 @@ dependencies = [
[[package]]
name = "rustix"
version = "1.0.1"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dade4812df5c384711475be5fcd8c162555352945401aed22a35bffeab61f657"
checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf"
dependencies = [
"bitflags 2.9.0",
"errno",
@@ -3113,9 +3089,9 @@ dependencies = [
[[package]]
name = "rustls"
version = "0.23.23"
version = "0.23.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395"
checksum = "822ee9188ac4ec04a2f0531e55d035fb2de73f18b41a63c70c2712503b6fb13c"
dependencies = [
"once_cell",
"ring",
@@ -3142,9 +3118,9 @@ checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c"
[[package]]
name = "rustls-webpki"
version = "0.102.8"
version = "0.103.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9"
checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03"
dependencies = [
"ring",
"rustls-pki-types",
@@ -3217,7 +3193,7 @@ checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -3246,7 +3222,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -3388,9 +3364,9 @@ dependencies = [
[[package]]
name = "socket2"
version = "0.5.8"
version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8"
checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef"
dependencies = [
"libc",
"windows-sys 0.52.0",
@@ -3475,7 +3451,7 @@ dependencies = [
"quote",
"sqlx-core",
"sqlx-macros-core",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -3498,7 +3474,7 @@ dependencies = [
"sqlx-mysql",
"sqlx-postgres",
"sqlx-sqlite",
"syn 2.0.99",
"syn 2.0.100",
"tempfile",
"tokio",
"url",
@@ -3635,9 +3611,9 @@ checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82"
[[package]]
name = "string_cache"
version = "0.8.8"
version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "938d512196766101d333398efde81bc1f37b00cb42c2f8350e5df639f040bbbe"
checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f"
dependencies = [
"new_debug_unreachable",
"parking_lot",
@@ -3694,7 +3670,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustversion",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -3912,9 +3888,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.99"
version = "2.0.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e02e925281e18ffd9d640e234264753c43edc62d64b2d4cf898f1bc5e75f3fc2"
checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
dependencies = [
"proc-macro2",
"quote",
@@ -3929,7 +3905,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -3940,13 +3916,12 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
[[package]]
name = "tempfile"
version = "3.18.0"
version = "3.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c317e0a526ee6120d8dabad239c8dadca62b24b6f168914bbbc8e2fb1f0e567"
checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf"
dependencies = [
"cfg-if",
"fastrand",
"getrandom 0.3.1",
"getrandom 0.3.2",
"once_cell",
"rustix",
"windows-sys 0.59.0",
@@ -4017,7 +3992,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -4028,7 +4003,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -4084,9 +4059,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
version = "1.44.1"
version = "1.44.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a"
checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48"
dependencies = [
"backtrace",
"bytes",
@@ -4108,7 +4083,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -4168,7 +4143,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -4322,9 +4297,9 @@ dependencies = [
[[package]]
name = "tree-sitter-rust"
version = "0.23.2"
version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4d64d449ca63e683c562c7743946a646671ca23947b9c925c0cfbe65051a4af"
checksum = "4b9b18034c684a2420722be8b2a91c9c44f2546b631c039edf575ccba8c61be1"
dependencies = [
"cc",
"tree-sitter-language",
@@ -4474,7 +4449,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f9902d4ed16c65e6c0222241024dd0bfeed07ea3deb7c470eb175e5f5ef406cd"
dependencies = [
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -4489,7 +4464,7 @@ dependencies = [
"proc-macro2",
"quote",
"serde",
"syn 2.0.99",
"syn 2.0.100",
"toml",
"uniffi_meta",
]
@@ -4564,7 +4539,7 @@ version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9"
dependencies = [
"getrandom 0.3.1",
"getrandom 0.3.2",
]
[[package]]
@@ -4615,9 +4590,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasi"
version = "0.13.3+wasi-0.2.2"
version = "0.14.2+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2"
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
dependencies = [
"wit-bindgen-rt",
]
@@ -4650,7 +4625,7 @@ dependencies = [
"log",
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
"wasm-bindgen-shared",
]
@@ -4672,7 +4647,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -4712,9 +4687,9 @@ checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082"
[[package]]
name = "whoami"
version = "1.5.2"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d"
checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7"
dependencies = [
"redox_syscall",
"wasite",
@@ -4722,9 +4697,9 @@ dependencies = [
[[package]]
name = "widestring"
version = "1.1.0"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311"
checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d"
[[package]]
name = "winapi"
@@ -4777,15 +4752,6 @@ dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "windows-core"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "windows-core"
version = "0.57.0"
@@ -4807,10 +4773,23 @@ dependencies = [
"windows-implement 0.58.0",
"windows-interface 0.58.0",
"windows-result 0.2.0",
"windows-strings",
"windows-strings 0.1.0",
"windows-targets 0.52.6",
]
[[package]]
name = "windows-core"
version = "0.61.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980"
dependencies = [
"windows-implement 0.60.0",
"windows-interface 0.59.1",
"windows-link",
"windows-result 0.3.2",
"windows-strings 0.4.0",
]
[[package]]
name = "windows-implement"
version = "0.57.0"
@@ -4819,7 +4798,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -4830,7 +4809,18 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
name = "windows-implement"
version = "0.60.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.100",
]
[[package]]
@@ -4841,7 +4831,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -4852,14 +4842,25 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
name = "windows-interface"
version = "0.59.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.100",
]
[[package]]
name = "windows-link"
version = "0.1.0"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3"
checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
[[package]]
name = "windows-result"
@@ -4879,6 +4880,15 @@ dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "windows-result"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252"
dependencies = [
"windows-link",
]
[[package]]
name = "windows-strings"
version = "0.1.0"
@@ -4889,6 +4899,15 @@ dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "windows-strings"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97"
dependencies = [
"windows-link",
]
[[package]]
name = "windows-sys"
version = "0.48.0"
@@ -5039,18 +5058,18 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "winnow"
version = "0.7.3"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1"
checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36"
dependencies = [
"memchr",
]
[[package]]
name = "wit-bindgen-rt"
version = "0.33.0"
version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c"
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
dependencies = [
"bitflags 2.9.0",
]
@@ -5138,7 +5157,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
"synstructure",
]
@@ -5148,17 +5167,16 @@ version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
dependencies = [
"byteorder",
"zerocopy-derive 0.7.35",
]
[[package]]
name = "zerocopy"
version = "0.8.23"
version = "0.8.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6"
checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879"
dependencies = [
"zerocopy-derive 0.8.23",
"zerocopy-derive 0.8.24",
]
[[package]]
@@ -5169,18 +5187,18 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
name = "zerocopy-derive"
version = "0.8.23"
version = "0.8.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154"
checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]
@@ -5200,7 +5218,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
"synstructure",
]
@@ -5229,7 +5247,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.99",
"syn 2.0.100",
]
[[package]]

View File

@@ -31,7 +31,6 @@ homedir = "0.3"
infer = { version = "0.19.0" }
libc = "0.2"
mimalloc = "0.1"
mp3lame-encoder = "0.2"
napi = { version = "3.0.0-alpha.31", features = ["async", "chrono_date", "error_anyhow", "napi9", "serde"] }
napi-build = { version = "2" }
napi-derive = { version = "3.0.0-alpha.28" }
@@ -66,7 +65,7 @@ tree-sitter-java = { version = "0.23" }
tree-sitter-javascript = { version = "0.23" }
tree-sitter-kotlin-ng = { version = "1.1" }
tree-sitter-python = { version = "0.23" }
tree-sitter-rust = { version = "0.23" }
tree-sitter-rust = { version = "0.24" }
tree-sitter-scala = { version = "0.23" }
tree-sitter-typescript = { version = "0.23" }
uniffi = "0.29"
@@ -83,3 +82,7 @@ codegen-units = 1
lto = true
opt-level = 3
strip = "symbols"
# android uniffi bindgen requires symbols
[profile.release.package.affine_mobile_native]
strip = "none"

View File

@@ -21,6 +21,23 @@
<br/>
<br/>
<div align="left" valign="middle">
<a href="https://runblaze.dev">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://www.runblaze.dev/logo_dark.png">
<img align="right" src="https://www.runblaze.dev/logo_light.png" height="102px"/>
</picture>
</a>
<br style="display: none;"/>
_Special thanks to [Blaze](https://runblaze.dev) for their support of this project. They provide high-performance Apple Silicon macOS and Linux (AMD64 & ARM64) runners for GitHub Actions, greatly reducing our automated build times._
</div>
<br/>
<br/>
<div align="center">
<a href="https://affine.pro">Home Page</a> |
<a href="https://affine.pro/redirect/discord">Discord</a> |
@@ -160,7 +177,6 @@ We would also like to give thanks to open-source projects that make AFFiNE possi
- [Jotai](https://github.com/pmndrs/jotai) - Primitive and flexible state management for React.
- [async-call-rpc](https://github.com/Jack-Works/async-call-rpc) - A lightweight JSON RPC client & server.
- [Vite](https://github.com/vitejs/vite) - Next generation frontend tooling.
- [lame](https://lame.sourceforge.io/) - High quality MPEG Audio Layer III (MP3) encoder.
- Other upstream [dependencies](https://github.com/toeverything/AFFiNE/network/dependencies).
Thanks a lot to the community for providing such powerful and simple libraries, so that we can focus more on the implementation of the product logic, and we hope that in the future our projects will also provide a more easy-to-use knowledge base for everyone.

View File

@@ -39,6 +39,7 @@
"@blocksuite/affine-gfx-mindmap": "workspace:*",
"@blocksuite/affine-gfx-note": "workspace:*",
"@blocksuite/affine-gfx-shape": "workspace:*",
"@blocksuite/affine-gfx-template": "workspace:*",
"@blocksuite/affine-gfx-text": "workspace:*",
"@blocksuite/affine-gfx-turbo-renderer": "workspace:*",
"@blocksuite/affine-inline-footnote": "workspace:*",
@@ -128,6 +129,7 @@
"./gfx/mindmap": "./src/gfx/mindmap.ts",
"./gfx/connector": "./src/gfx/connector.ts",
"./gfx/group": "./src/gfx/group.ts",
"./gfx/template": "./src/gfx/template.ts",
"./gfx/turbo-renderer": "./src/gfx/turbo-renderer.ts",
"./components/block-selection": "./src/components/block-selection.ts",
"./components/block-zero-width": "./src/components/block-zero-width.ts",
@@ -178,9 +180,9 @@
"!src/__tests__",
"!dist/__tests__"
],
"version": "0.20.0",
"version": "0.21.0",
"devDependencies": {
"@vanilla-extract/vite-plugin": "^5.0.0",
"vitest": "3.0.9"
"vitest": "3.1.1"
}
}

View File

@@ -3680,88 +3680,95 @@ bbb
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
test('inline latex', async () => {
const markdown = 'inline $E=mc^2$ latex\n';
const blockSnapshot: BlockSnapshot = {
type: 'block',
id: 'matchesReplaceMap[0]',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
},
children: [
{
type: 'block',
id: 'matchesReplaceMap[1]',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [
{
insert: 'inline ',
},
{
insert: ' ',
attributes: {
latex: 'E=mc^2',
},
},
{
insert: ' latex',
},
],
},
},
children: [],
describe('inline latex', () => {
test.each([
['dollar sign syntax', 'inline $E=mc^2$ latex\n'],
['backslash syntax', 'inline \\(E=mc^2\\) latex\n'],
])('should convert %s correctly', async (_, markdown) => {
const blockSnapshot: BlockSnapshot = {
type: 'block',
id: 'matchesReplaceMap[0]',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
},
],
};
children: [
{
type: 'block',
id: 'matchesReplaceMap[1]',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [
{
insert: 'inline ',
},
{
insert: ' ',
attributes: {
latex: 'E=mc^2',
},
},
{
insert: ' latex',
},
],
},
},
children: [],
},
],
};
const mdAdapter = new MarkdownAdapter(createJob(), provider);
const rawBlockSnapshot = await mdAdapter.toBlockSnapshot({
file: markdown,
const mdAdapter = new MarkdownAdapter(createJob(), provider);
const rawBlockSnapshot = await mdAdapter.toBlockSnapshot({
file: markdown,
});
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
test('latex block', async () => {
const markdown = '$$\nE=mc^2\n$$\n';
const blockSnapshot: BlockSnapshot = {
type: 'block',
id: 'matchesReplaceMap[0]',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
},
children: [
{
type: 'block',
id: 'matchesReplaceMap[1]',
flavour: 'affine:latex',
props: {
latex: 'E=mc^2',
},
children: [],
describe('latex block', () => {
test.each([
['dollar sign syntax', '$$\nE=mc^2\n$$\n'],
['backslash syntax', '\\[\nE=mc^2\n\\]\n'],
])('should convert %s correctly', async (_, markdown) => {
const blockSnapshot: BlockSnapshot = {
type: 'block',
id: 'matchesReplaceMap[0]',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
},
],
};
children: [
{
type: 'block',
id: 'matchesReplaceMap[1]',
flavour: 'affine:latex',
props: {
latex: 'E=mc^2',
},
children: [],
},
],
};
const mdAdapter = new MarkdownAdapter(createJob(), provider);
const rawBlockSnapshot = await mdAdapter.toBlockSnapshot({
file: markdown,
const mdAdapter = new MarkdownAdapter(createJob(), provider);
const rawBlockSnapshot = await mdAdapter.toBlockSnapshot({
file: markdown,
});
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
test('reference', async () => {

View File

@@ -1,9 +1,13 @@
import { SpecProvider } from '@blocksuite/affine-shared/utils';
import { Container } from '@blocksuite/global/di';
import { registerSpecs } from '../../extensions/register';
import {
registerBlockSpecs,
registerStoreSpecs,
} from '../../extensions/register';
registerSpecs();
registerStoreSpecs();
registerBlockSpecs();
export function getProvider() {
const container = new Container();

View File

@@ -20,6 +20,7 @@ import type { ExtensionType } from '@blocksuite/store';
import { defaultBlockHtmlAdapterMatchers } from './html/block-matcher';
import { defaultBlockMarkdownAdapterMatchers } from './markdown/block-matcher';
import { defaultMarkdownPreprocessors } from './markdown/preprocessor';
import { defaultBlockNotionHtmlAdapterMatchers } from './notion-html/block-matcher';
import { defaultBlockPlainTextAdapterMatchers } from './plain-text/block-matcher';
@@ -44,6 +45,7 @@ export const MarkdownAdapterExtension: ExtensionType[] = [
...MarkdownInlineToDeltaAdapterExtensions,
...defaultBlockMarkdownAdapterMatchers,
...InlineDeltaToMarkdownAdapterExtensions,
...defaultMarkdownPreprocessors,
];
export const NotionHtmlAdapterExtension: ExtensionType[] = [

View File

@@ -1,5 +1,6 @@
export * from './extension.js';
export * from './html/block-matcher.js';
export * from './markdown/block-matcher.js';
export * from './markdown/preprocessor.js';
export * from './notion-html/block-matcher.js';
export * from './plain-text/block-matcher.js';

View File

@@ -0,0 +1,7 @@
import { CodeMarkdownPreprocessorExtension } from '@blocksuite/affine-block-code';
import { LatexMarkdownPreprocessorExtension } from '@blocksuite/affine-block-latex';
export const defaultMarkdownPreprocessors = [
LatexMarkdownPreprocessorExtension,
CodeMarkdownPreprocessorExtension,
];

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-components/open-doc-dropdown-menu';

View File

@@ -34,6 +34,7 @@ import { effects as componentHighlightDropdownMenuEffects } from '@blocksuite/af
import { IconButton } from '@blocksuite/affine-components/icon-button';
import { effects as componentLinkPreviewEffects } from '@blocksuite/affine-components/link-preview';
import { effects as componentLinkedDocTitleEffects } from '@blocksuite/affine-components/linked-doc-title';
import { effects as componentOpenDocDropdownMenuEffects } from '@blocksuite/affine-components/open-doc-dropdown-menu';
import { effects as componentPortalEffects } from '@blocksuite/affine-components/portal';
import { effects as componentSizeDropdownMenuEffects } from '@blocksuite/affine-components/size-dropdown-menu';
import { SmoothCorner } from '@blocksuite/affine-components/smooth-corner';
@@ -62,7 +63,7 @@ import { effects as widgetToolbarEffects } from '@blocksuite/affine-widget-toolb
import { effects as dataViewEffects } from '@blocksuite/data-view/effects';
import { effects as stdEffects } from '@blocksuite/std/effects';
import { registerSpecs } from './extensions/register.js';
import { registerBlockSpecs } from './extensions';
export declare const _GLOBAL_:
| typeof stdEffects
@@ -112,8 +113,7 @@ export declare const _GLOBAL_:
| typeof fragmentOutlineEffects;
export function effects() {
registerSpecs();
registerBlockSpecs();
stdEffects();
dataViewEffects();
@@ -165,6 +165,7 @@ export function effects() {
componentEdgelessLineWidthEffects();
componentEdgelessLineStylesEffects();
componentEdgelessShapeColorPickerEffects();
componentOpenDocDropdownMenuEffects();
widgetScrollAnchoringEffects();
widgetFrameTitleEffects();

View File

@@ -17,14 +17,40 @@ import {
} from '@blocksuite/affine-block-note';
import { ParagraphBlockSpec } from '@blocksuite/affine-block-paragraph';
import {
EdgelessSurfaceBlockAdapterExtensions,
EdgelessSurfaceBlockSpec,
PageSurfaceBlockSpec,
SurfaceBlockAdapterExtensions,
} from '@blocksuite/affine-block-surface';
import {
EdgelessSurfaceRefBlockSpec,
PageSurfaceRefBlockSpec,
} from '@blocksuite/affine-block-surface-ref';
import { TableBlockSpec } from '@blocksuite/affine-block-table';
import {
brushToMarkdownAdapterMatcher,
brushToPlainTextAdapterMatcher,
} from '@blocksuite/affine-gfx-brush';
import {
connectorToMarkdownAdapterMatcher,
connectorToPlainTextAdapterMatcher,
} from '@blocksuite/affine-gfx-connector';
import {
groupToMarkdownAdapterMatcher,
groupToPlainTextAdapterMatcher,
} from '@blocksuite/affine-gfx-group';
import {
mindmapToMarkdownAdapterMatcher,
mindmapToPlainTextAdapterMatcher,
} from '@blocksuite/affine-gfx-mindmap';
import {
shapeToMarkdownAdapterMatcher,
shapeToPlainTextAdapterMatcher,
} from '@blocksuite/affine-gfx-shape';
import {
textToMarkdownAdapterMatcher,
textToPlainTextAdapterMatcher,
} from '@blocksuite/affine-gfx-text';
import { inlinePresetExtensions } from '@blocksuite/affine-inline-preset';
import {
DefaultOpenDocExtension,
@@ -34,6 +60,24 @@ import {
} from '@blocksuite/affine-shared/services';
import type { ExtensionType } from '@blocksuite/store';
const elementToPlainTextAdapterMatchers = [
groupToPlainTextAdapterMatcher,
shapeToPlainTextAdapterMatcher,
connectorToPlainTextAdapterMatcher,
brushToPlainTextAdapterMatcher,
textToPlainTextAdapterMatcher,
mindmapToPlainTextAdapterMatcher,
];
const elementToMarkdownAdapterMatchers = [
groupToMarkdownAdapterMatcher,
shapeToMarkdownAdapterMatcher,
connectorToMarkdownAdapterMatcher,
brushToMarkdownAdapterMatcher,
textToMarkdownAdapterMatcher,
mindmapToMarkdownAdapterMatcher,
];
export const CommonBlockSpecs: ExtensionType[] = [
inlinePresetExtensions,
DocDisplayMetaService,
@@ -54,6 +98,9 @@ export const CommonBlockSpecs: ExtensionType[] = [
FontLoaderService,
CalloutBlockSpec,
FrameBlockSpec,
elementToPlainTextAdapterMatchers,
elementToMarkdownAdapterMatchers,
].flat();
export const PageFirstPartyBlockSpecs: ExtensionType[] = [
@@ -61,6 +108,8 @@ export const PageFirstPartyBlockSpecs: ExtensionType[] = [
NoteBlockSpec,
PageSurfaceBlockSpec,
PageSurfaceRefBlockSpec,
...SurfaceBlockAdapterExtensions,
].flat();
export const EdgelessFirstPartyBlockSpecs: ExtensionType[] = [
@@ -70,4 +119,6 @@ export const EdgelessFirstPartyBlockSpecs: ExtensionType[] = [
EdgelessSurfaceBlockSpec,
EdgelessSurfaceRefBlockSpec,
EdgelessTextBlockSpec,
...EdgelessSurfaceBlockAdapterExtensions,
].flat();

View File

@@ -1,4 +1,5 @@
export * from './common.js';
export * from './editor-specs.js';
export * from './preview-specs.js';
export * from './store.js';
export * from './common';
export * from './editor-specs';
export * from './preview-specs';
export * from './register';
export * from './store';

View File

@@ -10,8 +10,11 @@ import {
} from './preview-specs.js';
import { StoreExtensions } from './store.js';
export function registerSpecs() {
export function registerStoreSpecs() {
SpecProvider._.addSpec('store', StoreExtensions);
}
export function registerBlockSpecs() {
SpecProvider._.addSpec('page', PageEditorBlockSpecs);
SpecProvider._.addSpec('edgeless', EdgelessEditorBlockSpecs);
SpecProvider._.addSpec('preview:page', PreviewPageEditorBlockSpecs);

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-gfx-template';

View File

@@ -7,35 +7,36 @@
},
"include": ["./src"],
"references": [
{ "path": "../blocks/block-attachment" },
{ "path": "../blocks/block-bookmark" },
{ "path": "../blocks/block-callout" },
{ "path": "../blocks/block-code" },
{ "path": "../blocks/block-data-view" },
{ "path": "../blocks/block-database" },
{ "path": "../blocks/block-divider" },
{ "path": "../blocks/block-edgeless-text" },
{ "path": "../blocks/block-embed" },
{ "path": "../blocks/block-frame" },
{ "path": "../blocks/block-image" },
{ "path": "../blocks/block-latex" },
{ "path": "../blocks/block-list" },
{ "path": "../blocks/block-note" },
{ "path": "../blocks/block-paragraph" },
{ "path": "../blocks/block-root" },
{ "path": "../blocks/block-surface" },
{ "path": "../blocks/block-surface-ref" },
{ "path": "../blocks/block-table" },
{ "path": "../blocks/attachment" },
{ "path": "../blocks/bookmark" },
{ "path": "../blocks/callout" },
{ "path": "../blocks/code" },
{ "path": "../blocks/data-view" },
{ "path": "../blocks/database" },
{ "path": "../blocks/divider" },
{ "path": "../blocks/edgeless-text" },
{ "path": "../blocks/embed" },
{ "path": "../blocks/frame" },
{ "path": "../blocks/image" },
{ "path": "../blocks/latex" },
{ "path": "../blocks/list" },
{ "path": "../blocks/note" },
{ "path": "../blocks/paragraph" },
{ "path": "../blocks/root" },
{ "path": "../blocks/surface" },
{ "path": "../blocks/surface-ref" },
{ "path": "../blocks/table" },
{ "path": "../components" },
{ "path": "../fragments/fragment-doc-title" },
{ "path": "../fragments/fragment-frame-panel" },
{ "path": "../fragments/fragment-outline" },
{ "path": "../fragments/doc-title" },
{ "path": "../fragments/frame-panel" },
{ "path": "../fragments/outline" },
{ "path": "../gfx/brush" },
{ "path": "../gfx/connector" },
{ "path": "../gfx/group" },
{ "path": "../gfx/mindmap" },
{ "path": "../gfx/note" },
{ "path": "../gfx/shape" },
{ "path": "../gfx/template" },
{ "path": "../gfx/text" },
{ "path": "../gfx/turbo-renderer" },
{ "path": "../inlines/footnote" },
@@ -47,14 +48,14 @@
{ "path": "../model" },
{ "path": "../rich-text" },
{ "path": "../shared" },
{ "path": "../widgets/widget-drag-handle" },
{ "path": "../widgets/widget-edgeless-auto-connect" },
{ "path": "../widgets/widget-edgeless-toolbar" },
{ "path": "../widgets/widget-frame-title" },
{ "path": "../widgets/widget-remote-selection" },
{ "path": "../widgets/widget-scroll-anchoring" },
{ "path": "../widgets/widget-slash-menu" },
{ "path": "../widgets/widget-toolbar" },
{ "path": "../widgets/drag-handle" },
{ "path": "../widgets/edgeless-auto-connect" },
{ "path": "../widgets/edgeless-toolbar" },
{ "path": "../widgets/frame-title" },
{ "path": "../widgets/remote-selection" },
{ "path": "../widgets/scroll-anchoring" },
{ "path": "../widgets/slash-menu" },
{ "path": "../widgets/toolbar" },
{ "path": "../data-view" },
{ "path": "../../framework/global" },
{ "path": "../../framework/std" },

View File

@@ -17,7 +17,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/affine-widget-slash-menu": "workspace:*",
"@blocksuite/global": "workspace:*",
"@blocksuite/icons": "^2.2.8",
"@blocksuite/icons": "^2.2.10",
"@blocksuite/std": "workspace:*",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
@@ -40,5 +40,5 @@
"!src/__tests__",
"!dist/__tests__"
],
"version": "0.20.0"
"version": "0.21.0"
}

View File

@@ -1,9 +1,9 @@
import { FONT_XS, PANEL_BASE } from '@blocksuite/affine-shared/styles';
import { fontXSStyle, panelBaseStyle } from '@blocksuite/affine-shared/styles';
import { css } from 'lit';
export const renameStyles = css`
${panelBaseStyle('.affine-attachment-rename-container')}
.affine-attachment-rename-container {
${PANEL_BASE};
position: relative;
display: flex;
align-items: center;
@@ -35,8 +35,8 @@ export const renameStyles = css`
outline: none;
background: transparent;
color: var(--affine-text-primary-color);
${FONT_XS};
}
${fontXSStyle('.affine-attachment-rename-input-wrapper input')}
.affine-attachment-rename-input-wrapper input::placeholder {
color: var(--affine-placeholder-color);

View File

@@ -0,0 +1,34 @@
import { EdgelessClipboardConfig } from '@blocksuite/affine-block-surface';
import { type BlockSnapshot } from '@blocksuite/store';
export class EdgelessClipboardAttachmentConfig extends EdgelessClipboardConfig {
static override readonly key = 'affine:attachment';
override async createBlock(
attachment: BlockSnapshot
): Promise<string | null> {
if (!this.surface) return null;
const { xywh, rotate, sourceId, name, size, type, embed, style } =
attachment.props;
if (!(await this.std.workspace.blobSync.get(sourceId as string))) {
return null;
}
const attachmentId = this.crud.addBlock(
'affine:attachment',
{
xywh,
rotate,
sourceId,
name,
size,
type,
embed,
style,
},
this.surface.model.id
);
return attachmentId;
}
}

View File

@@ -3,6 +3,7 @@ export * from './attachment-block';
export * from './attachment-service';
export * from './attachment-spec';
export { attachmentViewDropdownMenu } from './configs/toolbar';
export * from './edgeless-clipboard-config';
export {
type AttachmentEmbedConfig,
AttachmentEmbedConfigIdentifier,

View File

@@ -7,12 +7,12 @@
},
"include": ["./src"],
"references": [
{ "path": "../block-note" },
{ "path": "../block-surface" },
{ "path": "../embed" },
{ "path": "../surface" },
{ "path": "../../components" },
{ "path": "../../model" },
{ "path": "../../shared" },
{ "path": "../../widgets/widget-slash-menu" },
{ "path": "../../widgets/slash-menu" },
{ "path": "../../../framework/global" },
{ "path": "../../../framework/std" },
{ "path": "../../../framework/store" }

View File

@@ -1,79 +0,0 @@
import {
type InsertedLinkType,
insertEmbedIframeWithUrlCommand,
insertEmbedLinkedDocCommand,
type LinkableFlavour,
} from '@blocksuite/affine-block-embed';
import {
FeatureFlagService,
QuickSearchProvider,
} from '@blocksuite/affine-shared/services';
import type { Command } from '@blocksuite/std';
import { insertBookmarkCommand } from './insert-bookmark';
export const insertLinkByQuickSearchCommand: Command<
{},
{ insertedLinkType: Promise<InsertedLinkType> }
> = (ctx, next) => {
const { std } = ctx;
const quickSearchService = std.getOptional(QuickSearchProvider);
if (!quickSearchService) {
next();
return;
}
const insertedLinkType: Promise<InsertedLinkType> = quickSearchService
.openQuickSearch()
.then(result => {
if (!result) return null;
// add linked doc
if ('docId' in result) {
std.command.exec(insertEmbedLinkedDocCommand, {
docId: result.docId,
params: result.params,
});
return {
flavour: 'affine:embed-linked-doc',
};
}
// add normal link;
if ('externalUrl' in result) {
const featureFlagService = std.get(FeatureFlagService);
const enableEmbedIframeBlock = featureFlagService.getFlag(
'enable_embed_iframe_block'
);
if (enableEmbedIframeBlock) {
// try to insert embed iframe block first
const [success, { flavour }] = std.command
.chain()
.try(chain => [
chain.pipe(insertEmbedIframeWithUrlCommand, {
url: result.externalUrl,
}),
chain.pipe(insertBookmarkCommand, { url: result.externalUrl }),
])
.run();
if (!success || !flavour) return null;
return {
flavour: flavour as LinkableFlavour,
};
} else {
const [success, { flavour }] = std.command.exec(
insertBookmarkCommand,
{ url: result.externalUrl }
);
if (!success || !flavour) return null;
return {
flavour: flavour as LinkableFlavour,
};
}
}
return null;
});
next({ insertedLinkType });
};

View File

@@ -1,20 +0,0 @@
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./dist",
"tsBuildInfoFile": "./dist/tsconfig.tsbuildinfo"
},
"include": ["./src"],
"references": [
{ "path": "../block-surface" },
{ "path": "../../components" },
{ "path": "../../model" },
{ "path": "../../shared" },
{ "path": "../../widgets/widget-edgeless-toolbar" },
{ "path": "../../widgets/widget-frame-title" },
{ "path": "../../../framework/global" },
{ "path": "../../../framework/std" },
{ "path": "../../../framework/store" }
]
}

View File

@@ -1,58 +0,0 @@
import { ImageBlockModel } from '@blocksuite/affine-model';
import {
type ToolbarModuleConfig,
ToolbarModuleExtension,
} from '@blocksuite/affine-shared/services';
import { CaptionIcon, DownloadIcon } from '@blocksuite/icons/lit';
import { BlockFlavourIdentifier } from '@blocksuite/std';
import type { ExtensionType } from '@blocksuite/store';
import { ImageEdgelessBlockComponent } from '../image-edgeless-block';
const trackBaseProps = {
category: 'image',
type: 'card view',
};
const builtinSurfaceToolbarConfig = {
actions: [
{
id: 'a.download',
tooltip: 'Download',
icon: DownloadIcon(),
run(ctx) {
const block = ctx.getCurrentBlockByType(ImageEdgelessBlockComponent);
block?.download();
},
},
{
id: 'b.caption',
tooltip: 'Caption',
icon: CaptionIcon(),
run(ctx) {
const block = ctx.getCurrentBlockByType(ImageEdgelessBlockComponent);
block?.captionEditor?.show();
ctx.track('OpenedCaptionEditor', {
...trackBaseProps,
control: 'add caption',
});
},
},
],
when: ctx => ctx.getSurfaceModelsByType(ImageBlockModel).length === 1,
} as const satisfies ToolbarModuleConfig;
export const createBuiltinToolbarConfigExtension = (
flavour: string
): ExtensionType[] => {
const name = flavour.split(':').pop();
return [
ToolbarModuleExtension({
id: BlockFlavourIdentifier(`affine:surface:${name}`),
config: builtinSurfaceToolbarConfig,
}),
];
};

View File

@@ -1,435 +0,0 @@
import {
type ClipboardConfigCreationContext,
EdgelessClipboardConfig,
} from '@blocksuite/affine-block-surface';
import { ReferenceInfoSchema } from '@blocksuite/affine-model';
import { type BlockSnapshot, fromJSON } from '@blocksuite/store';
export class EdgelessClipboardNoteConfig extends EdgelessClipboardConfig {
static override readonly key = 'affine:note';
override async createBlock(note: BlockSnapshot): Promise<null | string> {
const oldId = note.id;
delete note.props.index;
if (!note.props.xywh) {
console.error(`Note block(id: ${oldId}) does not have xywh property`);
return null;
}
const newId = await this.onBlockSnapshotPaste(
note,
this.std.store,
this.std.store.root!.id
);
if (!newId) {
console.error(`Failed to paste note block(id: ${oldId})`);
return null;
}
return newId;
}
}
export class EdgelessClipboardEdgelessTextConfig extends EdgelessClipboardConfig {
static override readonly key = 'affine:edgeless-text';
override async createBlock(
edgelessText: BlockSnapshot
): Promise<string | null> {
const oldId = edgelessText.id;
delete edgelessText.props.index;
if (!edgelessText.props.xywh) {
console.error(
`EdgelessText block(id: ${oldId}) does not have xywh property`
);
return null;
}
if (!this.surface) {
return null;
}
const newId = await this.onBlockSnapshotPaste(
edgelessText,
this.std.store,
this.surface.model.id
);
if (!newId) {
console.error(`Failed to paste EdgelessText block(id: ${oldId})`);
return null;
}
return newId;
}
}
export class EdgelessClipboardImageConfig extends EdgelessClipboardConfig {
static override readonly key = 'affine:image';
override async createBlock(image: BlockSnapshot) {
const { xywh, rotate, sourceId, size, width, height, caption } =
image.props;
if (!this.surface) return null;
if (!(await this.std.workspace.blobSync.get(sourceId as string))) {
return null;
}
return this.crud.addBlock(
'affine:image',
{
caption,
sourceId,
xywh,
rotate,
size,
width,
height,
},
this.surface.model.id
);
}
}
export class EdgelessClipboardFrameConfig extends EdgelessClipboardConfig {
static override readonly key = 'affine:frame';
override createBlock(
frame: BlockSnapshot,
context: ClipboardConfigCreationContext
): string | null {
if (!this.surface) return null;
const { oldToNewIdMap, newPresentationIndexes } = context;
const { xywh, title, background, childElementIds } = frame.props;
const newChildElementIds: Record<string, boolean> = {};
if (typeof childElementIds === 'object' && childElementIds !== null) {
Object.keys(childElementIds).forEach(oldId => {
const newId = oldToNewIdMap.get(oldId);
if (newId) {
newChildElementIds[newId] = true;
}
});
}
const frameId = this.crud.addBlock(
'affine:frame',
{
xywh,
background,
title: fromJSON(title),
childElementIds: newChildElementIds,
presentationIndex: newPresentationIndexes.get(frame.id),
},
this.surface.model.id
);
return frameId;
}
}
export class EdgelessClipboardAttachmentConfig extends EdgelessClipboardConfig {
static override readonly key = 'affine:attachment';
override async createBlock(
attachment: BlockSnapshot
): Promise<string | null> {
if (!this.surface) return null;
const { xywh, rotate, sourceId, name, size, type, embed, style } =
attachment.props;
if (!(await this.std.workspace.blobSync.get(sourceId as string))) {
return null;
}
const attachmentId = this.crud.addBlock(
'affine:attachment',
{
xywh,
rotate,
sourceId,
name,
size,
type,
embed,
style,
},
this.surface.model.id
);
return attachmentId;
}
}
export class EdgelessClipboardBookmarkConfig extends EdgelessClipboardConfig {
static override readonly key = 'affine:bookmark';
override createBlock(bookmark: BlockSnapshot): string | null {
if (!this.surface) return null;
const { xywh, style, url, caption, description, icon, image, title } =
bookmark.props;
const bookmarkId = this.crud.addBlock(
'affine:bookmark',
{
xywh,
style,
url,
caption,
description,
icon,
image,
title,
},
this.surface.model.id
);
return bookmarkId;
}
}
export class EdgelessClipboardEmbedFigmaConfig extends EdgelessClipboardConfig {
static override readonly key = 'affine:embed-figma';
override createBlock(figmaEmbed: BlockSnapshot): string | null {
if (!this.surface) return null;
const { xywh, style, url, caption, title, description } = figmaEmbed.props;
const embedFigmaId = this.crud.addBlock(
'affine:embed-figma',
{
xywh,
style,
url,
caption,
title,
description,
},
this.surface.model.id
);
return embedFigmaId;
}
}
export class EdgelessClipboardEmbedGithubConfig extends EdgelessClipboardConfig {
static override readonly key = 'affine:embed-github';
override createBlock(githubEmbed: BlockSnapshot): string | null {
if (!this.surface) return null;
const {
xywh,
style,
owner,
repo,
githubType,
githubId,
url,
caption,
image,
status,
statusReason,
title,
description,
createdAt,
assignees,
} = githubEmbed.props;
const embedGithubId = this.crud.addBlock(
'affine:embed-github',
{
xywh,
style,
owner,
repo,
githubType,
githubId,
url,
caption,
image,
status,
statusReason,
title,
description,
createdAt,
assignees,
},
this.surface.model.id
);
return embedGithubId;
}
}
export class EdgelessClipboardEmbedHtmlConfig extends EdgelessClipboardConfig {
static override readonly key = 'affine:embed-html';
override createBlock(htmlEmbed: BlockSnapshot): string | null {
if (!this.surface) return null;
const { xywh, style, caption, html, design } = htmlEmbed.props;
const embedHtmlId = this.crud.addBlock(
'affine:embed-html',
{
xywh,
style,
caption,
html,
design,
},
this.surface.model.id
);
return embedHtmlId;
}
}
export class EdgelessClipboardEmbedLoomConfig extends EdgelessClipboardConfig {
static override readonly key = 'affine:embed-loom';
override createBlock(loomEmbed: BlockSnapshot): string | null {
if (!this.surface) return null;
const { xywh, style, url, caption, videoId, image, title, description } =
loomEmbed.props;
const embedLoomId = this.crud.addBlock(
'affine:embed-loom',
{
xywh,
style,
url,
caption,
videoId,
image,
title,
description,
},
this.surface.model.id
);
return embedLoomId;
}
}
export class EdgelessClipboardEmbedYoutubeConfig extends EdgelessClipboardConfig {
static override readonly key = 'affine:embed-youtube';
override createBlock(youtubeEmbed: BlockSnapshot): string | null {
if (!this.surface) return null;
const {
xywh,
style,
url,
caption,
videoId,
image,
title,
description,
creator,
creatorUrl,
creatorImage,
} = youtubeEmbed.props;
const embedYoutubeId = this.crud.addBlock(
'affine:embed-youtube',
{
xywh,
style,
url,
caption,
videoId,
image,
title,
description,
creator,
creatorUrl,
creatorImage,
},
this.surface.model.id
);
return embedYoutubeId;
}
}
export class EdgelessClipboardEmbedIframeConfig extends EdgelessClipboardConfig {
static override readonly key = 'affine:embed-iframe';
override createBlock(embedIframe: BlockSnapshot): string | null {
if (!this.surface) return null;
const {
xywh,
caption,
url,
title,
description,
iframeUrl,
scale,
width,
height,
} = embedIframe.props;
return this.crud.addBlock(
'affine:embed-iframe',
{
url,
iframeUrl,
xywh,
caption,
title,
description,
scale,
width,
height,
},
this.surface.model.id
);
}
}
export class EdgelessClipboardEmbedLinkedDocConfig extends EdgelessClipboardConfig {
static override readonly key = 'affine:embed-linked-doc';
override createBlock(linkedDocEmbed: BlockSnapshot): string | null {
if (!this.surface) return null;
const { xywh, style, caption, pageId, params, title, description } =
linkedDocEmbed.props;
const referenceInfo = ReferenceInfoSchema.parse({
pageId,
params,
title,
description,
});
return this.crud.addBlock(
'affine:embed-linked-doc',
{
xywh,
style,
caption,
...referenceInfo,
},
this.surface.model.id
);
}
}
export class EdgelessClipboardEmbedSyncedDocConfig extends EdgelessClipboardConfig {
static override readonly key = 'affine:embed-synced-doc';
override createBlock(syncedDocEmbed: BlockSnapshot): string | null {
if (!this.surface) return null;
const { xywh, style, caption, scale, pageId, params } =
syncedDocEmbed.props;
const referenceInfo = ReferenceInfoSchema.parse({ pageId, params });
return this.crud.addBlock(
'affine:embed-synced-doc',
{
xywh,
style,
caption,
scale,
...referenceInfo,
},
this.surface.model.id
);
}
}

View File

@@ -1,71 +0,0 @@
import { html } from 'lit';
export const LassoFreeHandIcon = html`
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M7.03152 18.9667C8.07902 18.9667 8.92819 18.1175 8.92819 17.07C8.92819 16.0225 8.07902 15.1733 7.03152 15.1733C5.98402 15.1733 5.13485 16.0225 5.13485 17.07C5.13485 18.1175 5.98402 18.9667 7.03152 18.9667ZM7.03152 20.2667C8.79699 20.2667 10.2282 18.8355 10.2282 17.07C10.2282 15.3045 8.79699 13.8733 7.03152 13.8733C5.26605 13.8733 3.83485 15.3045 3.83485 17.07C3.83485 18.8355 5.26605 20.2667 7.03152 20.2667Z"
fill="currentColor"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M4.75714 19.6175C4.75714 19.3949 4.81661 19.145 4.93113 18.856C5.02405 18.6215 5.30218 18.5315 5.52776 18.6442C5.75334 18.757 5.83848 19.0293 5.75223 19.2663C5.68785 19.4432 5.67047 19.5529 5.67047 19.6175C5.67047 19.6727 5.67683 19.6824 5.71909 19.7205C5.74837 19.7468 5.77881 19.7695 5.82813 19.8062C5.8416 19.8162 5.85647 19.8273 5.87312 19.8398C5.94101 19.8907 6.03269 19.9615 6.119 20.0543C6.31218 20.2619 6.44109 20.5388 6.44109 20.9276C6.44109 21.3166 6.3093 21.6272 6.02789 21.8443C5.80114 22.0192 5.50339 22.1052 5.27045 22.1724C5.26524 22.1739 5.26006 22.1754 5.25492 22.1769C5.24264 22.1804 5.23031 22.184 5.21794 22.1876C4.8171 22.3032 4.37177 22.4316 3.91148 22.7773C3.70983 22.9288 3.42276 22.9326 3.24443 22.7542C3.06609 22.5759 3.06453 22.2842 3.26124 22.1263C3.89506 21.6177 4.50962 21.4409 4.94956 21.3144C4.96714 21.3093 4.98443 21.3044 5.00143 21.2994C5.28007 21.2189 5.40217 21.1735 5.47003 21.1211C5.471 21.1204 5.47202 21.1196 5.47311 21.1188C5.49238 21.1045 5.52776 21.0781 5.52776 20.9276C5.52776 20.7684 5.48543 20.7141 5.45027 20.6763C5.42241 20.6464 5.38566 20.6159 5.32511 20.5705C5.31683 20.5642 5.30753 20.5574 5.29743 20.5499C5.24552 20.5114 5.17247 20.4573 5.1081 20.3994C4.92203 20.2319 4.75714 19.9905 4.75714 19.6175Z"
fill="currentColor"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M12.2086 12.6149C11.9968 11.7531 12.903 11.0458 13.6876 11.4606L22.0945 15.905C22.9737 16.3698 22.7465 17.6876 21.7625 17.8313L17.8897 18.3968C17.8383 18.4043 17.7946 18.4384 17.7749 18.4867L16.3978 21.8656C16.0219 22.7881 14.685 22.6903 14.4473 21.7229L12.2086 12.6149ZM13.2757 12.2397C13.1636 12.1804 13.0342 12.2815 13.0644 12.4046L15.3031 21.5126C15.3371 21.6508 15.528 21.6648 15.5817 21.533L16.9588 18.1541C17.0963 17.8167 17.402 17.5773 17.7624 17.5247L21.6352 16.9593C21.7758 16.9388 21.8082 16.7505 21.6826 16.6841L13.2757 12.2397Z"
fill="currentColor"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M19.1489 14.9806C20.1975 13.7474 20.8015 12.2466 20.8015 10.6767C20.8015 6.775 17.0709 3.3 12.0549 3.3C7.03878 3.3 3.30818 6.775 3.30818 10.6767C3.30818 12.1636 3.85 13.5886 4.7983 14.7828C4.47298 15.1005 4.21518 15.4871 4.04843 15.9189C2.76805 14.4626 2.00818 12.6463 2.00818 10.6767C2.00818 5.88468 6.50623 2 12.0549 2C17.6035 2 22.1015 5.88468 22.1015 10.6767C22.1015 12.4784 21.4656 14.1519 20.3771 15.5389L19.1489 14.9806ZM13.9695 17.8785C13.3575 17.9927 12.7174 18.0534 12.0549 18.0534C11.3871 18.0534 10.7422 17.9918 10.1258 17.8758C10.0103 18.3206 9.80141 18.7278 9.52133 19.0751C10.3307 19.2567 11.1797 19.3533 12.0549 19.3533C12.8212 19.3533 13.5675 19.2793 14.2846 19.1389L13.9695 17.8785Z"
fill="currentColor"
/>
</svg>
`;
export const LassoPolygonalIcon = html`
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M12.1538 12.3949C11.9419 11.533 12.8482 10.8257 13.6328 11.2405L22.0397 15.6849C22.9188 16.1497 22.6917 17.4676 21.7077 17.6112L17.8349 18.1767C17.7834 18.1842 17.7397 18.2184 17.7201 18.2666L16.343 21.6455C15.967 22.568 14.6302 22.4703 14.3924 21.5029L12.1538 12.3949ZM13.2209 12.0196C13.1088 11.9604 12.9793 12.0614 13.0096 12.1845L15.2482 21.2926C15.2822 21.4308 15.4732 21.4447 15.5269 21.3129L16.9039 17.934C17.0414 17.5967 17.3471 17.3573 17.7076 17.3047L21.5804 16.7393C21.7209 16.7187 21.7534 16.5304 21.6278 16.4641L13.2209 12.0196Z"
fill="currentColor"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M9.11 18.9667C10.1575 18.9667 11.0067 18.1175 11.0067 17.07C11.0067 16.0225 10.1575 15.1733 9.11 15.1733C8.0625 15.1733 7.21333 16.0225 7.21333 17.07C7.21333 18.1175 8.0625 18.9667 9.11 18.9667ZM9.11 20.2667C10.8755 20.2667 12.3067 18.8355 12.3067 17.07C12.3067 15.3045 10.8755 13.8733 9.11 13.8733C7.34453 13.8733 5.91333 15.3045 5.91333 17.07C5.91333 18.8355 7.34453 20.2667 9.11 20.2667Z"
fill="currentColor"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M20.15 1.78546V12.8479L18.2895 14.0882L17.0275 13.3671L18.85 12.1521V4.21453L10.565 9.7379L3.78505 6.77169L7.24943 14.4703C6.85977 14.7497 6.5355 15.1145 6.30404 15.5374L1.21497 4.22831L10.4351 8.26209L20.15 1.78546ZM12.0942 18.2184L13.8336 17.0588L13.443 15.7568L12.2635 16.5431C12.2919 16.7146 12.3067 16.8905 12.3067 17.07C12.3067 17.4748 12.2315 17.862 12.0942 18.2184Z"
fill="currentColor"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M6.83562 19.6175C6.83562 19.3949 6.89509 19.145 7.00962 18.856C7.10254 18.6215 7.38066 18.5314 7.60625 18.6442C7.83183 18.757 7.91697 19.0293 7.83072 19.2663C7.76634 19.4432 7.74896 19.5529 7.74896 19.6175C7.74896 19.6726 7.75531 19.6824 7.79757 19.7204C7.82686 19.7468 7.8573 19.7695 7.90662 19.8062C7.92009 19.8162 7.93496 19.8273 7.9516 19.8398C8.0195 19.8907 8.11118 19.9615 8.19749 20.0542C8.39066 20.2619 8.51958 20.5387 8.51958 20.9276C8.51958 21.3165 8.38779 21.6272 8.10638 21.8443C7.87962 22.0192 7.58188 22.1051 7.34894 22.1724C7.34373 22.1739 7.33855 22.1754 7.33341 22.1769C7.32112 22.1804 7.3088 22.184 7.29643 22.1875C6.89559 22.3031 6.45026 22.4316 5.98997 22.7773C5.78832 22.9288 5.50125 22.9326 5.32291 22.7542C5.14457 22.5759 5.14302 22.2841 5.33973 22.1263C5.97355 21.6177 6.58811 21.4409 7.02805 21.3144C7.04562 21.3093 7.06292 21.3043 7.07992 21.2994C7.35856 21.2189 7.48065 21.1735 7.54851 21.1211C7.54948 21.1204 7.55051 21.1196 7.55159 21.1188C7.57087 21.1044 7.60625 21.0781 7.60625 20.9276C7.60625 20.7684 7.56391 20.7141 7.52876 20.6763C7.5009 20.6464 7.46415 20.6158 7.4036 20.5704C7.39532 20.5642 7.38602 20.5573 7.37592 20.5498C7.324 20.5114 7.25095 20.4573 7.18659 20.3993C7.00052 20.2319 6.83562 19.9905 6.83562 19.6175Z"
fill="currentColor"
/>
</svg>
`;

View File

@@ -1,41 +0,0 @@
import { menu } from '@blocksuite/affine-components/context-menu';
import { LassoMode } from '@blocksuite/affine-shared/types';
import type { DenseMenuBuilder } from '@blocksuite/affine-widget-edgeless-toolbar';
import { LassoFreeHandIcon, LassoPolygonalIcon } from './icons.js';
export const buildLassoDenseMenu: DenseMenuBuilder = (_, gfx) => {
// TODO: active state
// const prevMode =
// edgeless.service.editPropsStore.getLastProps('lasso').mode ??
// LassoMode.FreeHand;
const isActive = gfx.tool.currentToolName$.peek() === 'lasso';
const createSelect = (mode: LassoMode) => () => {
gfx.tool.setTool('lasso', { mode });
};
return menu.subMenu({
name: 'Lasso',
prefix: LassoFreeHandIcon,
select: createSelect(LassoMode.FreeHand),
isSelected: isActive,
options: {
items: [
menu.action({
prefix: LassoFreeHandIcon,
name: 'Free',
select: createSelect(LassoMode.FreeHand),
// isSelected: isActive && prevMode === LassoMode.FreeHand,
}),
menu.action({
prefix: LassoPolygonalIcon,
name: 'Polygonal',
select: createSelect(LassoMode.Polygonal),
// isSelected: isActive && prevMode === LassoMode.Polygonal,
}),
],
},
});
};

View File

@@ -1,99 +0,0 @@
import { LassoMode } from '@blocksuite/affine-shared/types';
import { QuickToolMixin } from '@blocksuite/affine-widget-edgeless-toolbar';
import { WithDisposable } from '@blocksuite/global/lit';
import { effect } from '@preact/signals-core';
import { css, html, LitElement } from 'lit';
import { query, state } from 'lit/decorators.js';
import { LassoFreeHandIcon, LassoPolygonalIcon } from './icons.js';
export class EdgelessLassoToolButton extends QuickToolMixin(
WithDisposable(LitElement)
) {
static override styles = css`
.current-icon {
transition: 100ms;
width: 24px;
height: 24px;
}
.current-icon > svg {
display: block;
}
`;
private readonly _changeTool = () => {
const tool = this.edgelessTool;
if (tool.type !== 'lasso') {
this.setEdgelessTool({ type: 'lasso', mode: this.curMode });
return;
}
this._fadeOut();
setTimeout(() => {
this.curMode === LassoMode.FreeHand
? this.setEdgelessTool({ type: 'lasso', mode: LassoMode.Polygonal })
: this.setEdgelessTool({ type: 'lasso', mode: LassoMode.FreeHand });
this._fadeIn();
}, 100);
};
override type = 'lasso' as const;
private _fadeIn() {
this.currentIcon.style.opacity = '1';
this.currentIcon.style.transform = `translateY(0px)`;
}
private _fadeOut() {
this.currentIcon.style.opacity = '0';
this.currentIcon.style.transform = `translateY(-5px)`;
}
override connectedCallback(): void {
super.connectedCallback();
this.disposables.add(
effect(() => {
const tool = this.gfx.tool.currentToolOption$.value;
if (tool?.type === 'lasso') {
const { mode } = tool;
this.curMode = mode;
}
})
);
}
override render() {
const type = this.edgelessTool?.type;
const mode = this.curMode === LassoMode.FreeHand ? 'freehand' : 'polygonal';
return html`
<edgeless-tool-icon-button
class="edgeless-lasso-button ${mode}"
.tooltip=${html`<affine-tooltip-content-with-shortcut
data-tip="${'Lasso'}"
data-shortcut="${'L'}"
></affine-tooltip-content-with-shortcut>`}
.tooltipOffset=${17}
.active=${type === 'lasso'}
.iconContainerPadding=${6}
.iconSize=${'24px'}
@click=${this._changeTool}
>
<span class="current-icon">
${this.curMode === LassoMode.FreeHand
? LassoFreeHandIcon
: LassoPolygonalIcon}
</span>
<toolbar-arrow-up-icon></toolbar-arrow-up-icon>
</edgeless-tool-icon-button>
`;
}
@state()
accessor curMode: LassoMode = LassoMode.FreeHand;
@query('.current-icon')
accessor currentIcon!: HTMLInputElement;
}

View File

@@ -1,326 +0,0 @@
import {
Overlay,
type SurfaceBlockComponent,
} from '@blocksuite/affine-block-surface';
import { ThemeProvider } from '@blocksuite/affine-shared/services';
import { LassoMode } from '@blocksuite/affine-shared/types';
import type { IPoint, IVec } from '@blocksuite/global/gfx';
import {
Bound,
getBoundFromPoints,
getPolygonPathFromPoints,
getSvgPathFromStroke,
linePolygonIntersects,
pointInPolygon,
rotatePoints,
Vec,
} from '@blocksuite/global/gfx';
import type { PointerEventState } from '@blocksuite/std';
import { BaseTool } from '@blocksuite/std/gfx';
class LassoOverlay extends Overlay {
d = '';
startPoint: IVec | null = null;
render(ctx: CanvasRenderingContext2D): void {
const path = new Path2D(this.d);
const zoom = this._renderer?.viewport.zoom ?? 1.0;
ctx.save();
const primaryColor = this.gfx.std
.get(ThemeProvider)
.getCssVariableColor('--affine-primary-color');
const strokeColor = this.gfx.std
.get(ThemeProvider)
.getCssVariableColor('--affine-secondary-color');
if (this.startPoint) {
const [x, y] = this.startPoint;
ctx.beginPath();
ctx.arc(x, y, 2 / zoom, 0, Math.PI * 2);
ctx.fillStyle = primaryColor;
ctx.fill();
}
ctx.strokeStyle = strokeColor;
ctx.fillStyle = 'rgba(255, 255, 255, 0.1)';
ctx.lineWidth = 2 / zoom;
ctx.lineJoin = 'round';
ctx.lineCap = 'round';
ctx.setLineDash([2, 5]);
ctx.fill(path);
ctx.stroke(path);
ctx.restore();
}
}
export type LassoToolOption = {
mode: LassoMode;
};
export class LassoTool extends BaseTool<LassoToolOption> {
static override toolName: string = 'lasso';
private _currentSelectionState = new Set<string>();
private _isSelecting = false;
private _lassoPoints: IVec[] = [];
private _lastPoint: IVec = [0, 0];
private readonly _loop = () => {
const path =
this.activatedOption.mode === LassoMode.FreeHand
? getSvgPathFromStroke(this._lassoPoints)
: getPolygonPathFromPoints(this._lassoPoints);
this._overlay.d = path;
(this.gfx.surfaceComponent as SurfaceBlockComponent)?.refresh?.();
this._raf = requestAnimationFrame(this._loop);
};
private readonly _overlay = new LassoOverlay(this.gfx);
private _raf = 0;
get isSelecting() {
return this._isSelecting;
}
get selection() {
return this.gfx.selection;
}
get surfaceComponent() {
return this.gfx.surfaceComponent as SurfaceBlockComponent;
}
private _clearLastSelection() {
if (this.selection.empty) {
this.selection.clearLast();
}
}
private _getElementsInsideLasso() {
const lassoBounds = getBoundFromPoints(this._lassoPoints);
return this.gfx
.getElementsByBound(lassoBounds)
.filter(e =>
this.isInsideLassoSelection(Bound.deserialize(e.xywh), e.rotate)
);
}
private _getSelectionMode(ev: PointerEventState): 'add' | 'sub' | 'set' {
const shiftKey = ev.keys.shift ?? this.gfx.keyboard.shiftKey$.peek();
const altKey = ev.keys.alt ?? false;
if (shiftKey) return 'add';
else if (altKey) return 'sub';
else {
return 'set';
}
}
private _reset() {
cancelAnimationFrame(this._raf);
(
this.gfx.surfaceComponent as SurfaceBlockComponent
)?.renderer.removeOverlay(this._overlay);
this._overlay.d = '';
this._overlay.startPoint = null;
const elements = this._getElementsInsideLasso();
this._currentSelectionState = new Set([
...Array.from(this._currentSelectionState),
...elements.map(el => el.id),
]);
this._lassoPoints = [];
this._isSelecting = false;
}
private _setSelectionState(elements: string[], editing: boolean) {
this.selection.set({
elements,
editing,
});
}
private _updateSelection(e: PointerEventState) {
// elements inside the lasso selection
const elements = this._getElementsInsideLasso()
.filter(el => !el.isLocked())
.map(el => el.id);
// current selections
const selection = this.selection.selectedElements.map(el => el.id);
const selectionMode = this._getSelectionMode(e);
let set!: Set<string>;
switch (selectionMode) {
case 'add':
set = new Set([
...elements,
...selection.filter(elId => this._currentSelectionState.has(elId)),
]);
break;
case 'sub': {
const toRemove = new Set(elements);
set = new Set(
Array.from(this._currentSelectionState).filter(
el => !toRemove.has(el)
)
);
break;
}
case 'set':
set = new Set(elements);
break;
}
this._setSelectionState(Array.from(set), false);
}
private isInsideLassoSelection(bound: Bound, rotate: number): boolean {
const { points, center } = bound;
const firstPoint = this._lassoPoints[0];
const lassoPoints = this._lassoPoints.concat(
firstPoint ? [firstPoint] : []
);
const elPoly = rotatePoints(points, center, rotate);
const lassoLen = lassoPoints.length;
return (
elPoly.some(point => pointInPolygon(point, lassoPoints)) ||
lassoPoints.some((point, i, points) => {
return linePolygonIntersects(point, points[(i + 1) % lassoLen], elPoly);
})
);
}
private toModelCoord(p: IPoint): IVec {
return this.gfx.viewport.toModelCoord(p.x, p.y);
}
abort() {
this._reset();
}
override activate(): void {
this._currentSelectionState = new Set(
this.selection.selectedElements.map(el => el.id)
);
this._reset();
}
override deactivate() {
this._clearLastSelection();
}
override dragEnd(e: PointerEventState): void {
if (this.activatedOption.mode !== LassoMode.FreeHand) return;
this._updateSelection(e);
this._reset();
}
override dragMove(e: PointerEventState): void {
if (this.activatedOption.mode !== LassoMode.FreeHand) return;
const { point } = e;
const [x, y] = this.toModelCoord(point);
this._lassoPoints.push([x, y]);
this._updateSelection(e);
}
// For Freehand Mode =
override dragStart(e: PointerEventState): void {
if (this.activatedOption.mode !== LassoMode.FreeHand) return;
const { alt, shift } = e.keys;
if (!shift && !alt) {
this._currentSelectionState.clear();
this.selection.clear();
}
this._currentSelectionState = new Set(
this.selection.selectedElements.map(el => el.id)
);
this._isSelecting = true;
const { point } = e;
const [x, y] = this.toModelCoord(point);
this._lassoPoints = [[x, y]];
this._raf = requestAnimationFrame(this._loop);
this._overlay.startPoint = this._lassoPoints[0];
this.surfaceComponent.renderer.addOverlay(this._overlay);
}
override pointerDown(e: PointerEventState): void {
const { mode } = this.activatedOption;
if (mode !== LassoMode.Polygonal) return;
const { alt, shift } = e.keys;
if (!shift && !alt) {
this._currentSelectionState.clear();
this.selection.clear();
}
this._isSelecting = true;
const { point } = e;
const [x, y] = this.toModelCoord(point);
if (this._lassoPoints.length < 2) {
this._currentSelectionState = new Set(
this.selection.selectedElements.map(el => el.id)
);
const a: IVec = [x, y];
const b: IVec = [x, y];
this._lassoPoints = [a, b];
this._lastPoint = b;
this._overlay.startPoint = a;
this._raf = requestAnimationFrame(this._loop);
this.surfaceComponent.renderer.addOverlay(this._overlay);
} else {
const firstPoint = this._lassoPoints[0];
const lastPoint = this._lastPoint;
const dx = lastPoint[0] - firstPoint[0];
const dy = lastPoint[1] - firstPoint[1];
if (Vec.len2([dx, dy]) < 20 ** 2) {
this._updateSelection(e);
return this._reset();
}
this._lastPoint = [x, y];
this._lassoPoints.push(this._lastPoint);
}
}
override pointerMove(e: PointerEventState): void {
if (this.activatedOption.mode !== LassoMode.Polygonal || !this._isSelecting)
return;
const lastPoint = this._lastPoint;
const [x, y] = this.toModelCoord(e.point);
if (lastPoint) {
lastPoint[0] = x;
lastPoint[1] = y;
}
this._updateSelection(e);
}
}
declare module '@blocksuite/std/gfx' {
interface GfxToolsMap {
lasso: LassoTool;
}
interface GfxToolsOption {
lasso: LassoToolOption;
}
}

View File

@@ -1,138 +0,0 @@
import { createLitPortal } from '@blocksuite/affine-components/portal';
import type {
EditorIconButton,
MenuItemGroup,
} from '@blocksuite/affine-components/toolbar';
import { renderGroups } from '@blocksuite/affine-components/toolbar';
import { noop } from '@blocksuite/global/utils';
import { MoreVerticalIcon } from '@blocksuite/icons/lit';
import { flip, offset } from '@floating-ui/dom';
import { html, LitElement } from 'lit';
import { property, query, state } from 'lit/decorators.js';
import { styleMap } from 'lit/directives/style-map.js';
import type { ImageToolbarContext } from '../context.js';
import { styles } from '../styles.js';
export class AffineImageToolbar extends LitElement {
static override styles = styles;
private _currentOpenMenu: AbortController | null = null;
private _popMenuAbortController: AbortController | null = null;
closeCurrentMenu = () => {
if (this._currentOpenMenu && !this._currentOpenMenu.signal.aborted) {
this._currentOpenMenu.abort();
this._currentOpenMenu = null;
}
};
private _clearPopMenu() {
if (this._popMenuAbortController) {
this._popMenuAbortController.abort();
this._popMenuAbortController = null;
}
}
private _toggleMoreMenu() {
// If the menu we're trying to open is already open, return
if (
this._currentOpenMenu &&
!this._currentOpenMenu.signal.aborted &&
this._currentOpenMenu === this._popMenuAbortController
) {
this.closeCurrentMenu();
this._moreMenuOpen = false;
return;
}
this.closeCurrentMenu();
this._popMenuAbortController = new AbortController();
this._popMenuAbortController.signal.addEventListener('abort', () => {
this._moreMenuOpen = false;
this.onActiveStatusChange(false);
});
this.onActiveStatusChange(true);
this._currentOpenMenu = this._popMenuAbortController;
if (!this._moreButton) {
return;
}
createLitPortal({
template: html`
<editor-menu-content
data-show
class="image-more-popup-menu"
style=${styleMap({
'--content-padding': '8px',
'--packed-height': '4px',
})}
>
<div data-size="large" data-orientation="vertical">
${renderGroups(this.moreGroups, this.context)}
</div>
</editor-menu-content>
`,
container: this.context.host,
// stacking-context(editor-host)
portalStyles: {
zIndex: 'var(--affine-z-index-popover)',
},
computePosition: {
referenceElement: this._moreButton,
placement: 'bottom-start',
middleware: [flip(), offset(4)],
autoUpdate: { animationFrame: true },
},
abortController: this._popMenuAbortController,
closeOnClickAway: true,
});
this._moreMenuOpen = true;
}
override disconnectedCallback() {
super.disconnectedCallback();
this.closeCurrentMenu();
this._clearPopMenu();
}
override render() {
return html`
<editor-toolbar class="affine-image-toolbar-container" data-without-bg>
${renderGroups(this.primaryGroups, this.context)}
<editor-icon-button
class="image-toolbar-button more"
aria-label="More"
.tooltip=${'More'}
.tooltipOffset=${4}
.showTooltip=${!this._moreMenuOpen}
.iconSize=${'20px'}
@click=${() => this._toggleMoreMenu()}
>
${MoreVerticalIcon()}
</editor-icon-button>
</editor-toolbar>
`;
}
@query('editor-icon-button.more')
private accessor _moreButton!: EditorIconButton;
@state()
private accessor _moreMenuOpen = false;
@property({ attribute: false })
accessor context!: ImageToolbarContext;
@property({ attribute: false })
accessor moreGroups!: MenuItemGroup<ImageToolbarContext>[];
@property({ attribute: false })
accessor onActiveStatusChange: (active: boolean) => void = noop;
@property({ attribute: false })
accessor primaryGroups!: MenuItemGroup<ImageToolbarContext>[];
}

View File

@@ -1,144 +0,0 @@
import {
CaptionIcon,
CopyIcon,
DeleteIcon,
DownloadIcon,
} from '@blocksuite/affine-components/icons';
import type { MenuItemGroup } from '@blocksuite/affine-components/toolbar';
import { BookmarkIcon, DuplicateIcon } from '@blocksuite/icons/lit';
import { html } from 'lit';
import { ifDefined } from 'lit/directives/if-defined.js';
import type { ImageToolbarContext } from './context.js';
import { duplicate } from './utils.js';
export const PRIMARY_GROUPS: MenuItemGroup<ImageToolbarContext>[] = [
{
type: 'primary',
items: [
{
type: 'download',
label: 'Download',
icon: DownloadIcon,
generate: ({ blockComponent }) => {
return {
action: () => {
blockComponent.download();
},
render: item => html`
<editor-icon-button
class="image-toolbar-button download"
aria-label=${ifDefined(item.label)}
.tooltip=${item.label}
.tooltipOffset=${4}
@click=${(e: MouseEvent) => {
e.stopPropagation();
item.action();
}}
>
${item.icon}
</editor-icon-button>
`,
};
},
},
{
type: 'caption',
label: 'Caption',
icon: CaptionIcon,
when: ({ doc }) => !doc.readonly,
generate: ({ blockComponent }) => {
return {
action: () => {
blockComponent.captionEditor?.show();
},
render: item => html`
<editor-icon-button
class="image-toolbar-button caption"
aria-label=${ifDefined(item.label)}
.tooltip=${item.label}
.tooltipOffset=${4}
@click=${(e: MouseEvent) => {
e.stopPropagation();
item.action();
}}
>
${item.icon}
</editor-icon-button>
`,
};
},
},
],
},
];
// Clipboard Group
export const clipboardGroup: MenuItemGroup<ImageToolbarContext> = {
type: 'clipboard',
items: [
{
type: 'copy',
label: 'Copy',
icon: CopyIcon,
action: ({ blockComponent, close }) => {
blockComponent.copy();
close();
},
},
{
type: 'duplicate',
label: 'Duplicate',
icon: DuplicateIcon(),
when: ({ doc }) => !doc.readonly,
action: ({ blockComponent, abortController }) => {
duplicate(blockComponent, abortController);
},
},
],
};
// Conversions Group
export const conversionsGroup: MenuItemGroup<ImageToolbarContext> = {
type: 'conversions',
items: [
{
label: 'Turn into card view',
type: 'turn-into-card-view',
icon: BookmarkIcon(),
when: ({ doc, blockComponent }) => {
const supportAttachment =
doc.schema.flavourSchemaMap.has('affine:attachment');
const readonly = doc.readonly;
return supportAttachment && !readonly && !!blockComponent.blob;
},
action: ({ blockComponent, close }) => {
blockComponent.convertToCardView();
close();
},
},
],
};
// Delete Group
export const deleteGroup: MenuItemGroup<ImageToolbarContext> = {
type: 'delete',
items: [
{
type: 'delete',
label: 'Delete',
icon: DeleteIcon,
when: ({ doc }) => !doc.readonly,
action: ({ doc, blockComponent, close }) => {
doc.deleteBlock(blockComponent.model);
close();
},
},
],
};
export const MORE_GROUPS: MenuItemGroup<ImageToolbarContext>[] = [
clipboardGroup,
conversionsGroup,
deleteGroup,
];

View File

@@ -1,43 +0,0 @@
import type { ImageBlockComponent } from '@blocksuite/affine-block-image';
import { MenuContext } from '@blocksuite/affine-components/toolbar';
export class ImageToolbarContext extends MenuContext {
override close = () => {
this.abortController.abort();
};
get doc() {
return this.blockComponent.doc;
}
get host() {
return this.blockComponent.host;
}
get selectedBlockModels() {
return [this.blockComponent.model];
}
get std() {
return this.blockComponent.std;
}
constructor(
public blockComponent: ImageBlockComponent,
public abortController: AbortController
) {
super();
}
isEmpty() {
return false;
}
isMultiple() {
return false;
}
isSingle() {
return true;
}
}

View File

@@ -1,173 +0,0 @@
import type { ImageBlockComponent } from '@blocksuite/affine-block-image';
import { HoverController } from '@blocksuite/affine-components/hover';
import type {
AdvancedMenuItem,
MenuItemGroup,
} from '@blocksuite/affine-components/toolbar';
import {
cloneGroups,
getMoreMenuConfig,
} from '@blocksuite/affine-components/toolbar';
import type { ImageBlockModel } from '@blocksuite/affine-model';
import { PAGE_HEADER_HEIGHT } from '@blocksuite/affine-shared/consts';
import {
BlockSelection,
TextSelection,
WidgetComponent,
} from '@blocksuite/std';
import { limitShift, shift } from '@floating-ui/dom';
import { html } from 'lit';
import { MORE_GROUPS, PRIMARY_GROUPS } from './config.js';
import { ImageToolbarContext } from './context.js';
export const AFFINE_IMAGE_TOOLBAR_WIDGET = 'affine-image-toolbar-widget';
export class AffineImageToolbarWidget extends WidgetComponent<
ImageBlockModel,
ImageBlockComponent
> {
private _hoverController: HoverController | null = null;
private _isActivated = false;
private readonly _setHoverController = () => {
this._hoverController = null;
this._hoverController = new HoverController(
this,
({ abortController }) => {
const imageBlock = this.block;
if (!imageBlock) {
return null;
}
const selection = this.host.selection;
const textSelection = selection.find(TextSelection);
if (
!!textSelection &&
(!!textSelection.to || !!textSelection.from.length)
) {
return null;
}
const blockSelections = selection.filter(BlockSelection);
if (
blockSelections.length > 1 ||
(blockSelections.length === 1 &&
blockSelections[0].blockId !== imageBlock.blockId)
) {
return null;
}
const imageContainer =
imageBlock.resizableImg ?? imageBlock.fallbackCard;
if (!imageContainer) {
return null;
}
const context = new ImageToolbarContext(imageBlock, abortController);
return {
template: html`<affine-image-toolbar
.context=${context}
.primaryGroups=${this.primaryGroups}
.moreGroups=${this.moreGroups}
.onActiveStatusChange=${(active: boolean) => {
this._isActivated = active;
if (!active && !this._hoverController?.isHovering) {
this._hoverController?.abort();
}
}}
></affine-image-toolbar>`,
container: this.block,
// stacking-context(editor-host)
portalStyles: {
zIndex: 'var(--affine-z-index-popover)',
},
computePosition: {
referenceElement: imageContainer,
placement: 'right-start',
middleware: [
shift({
crossAxis: true,
padding: {
top: PAGE_HEADER_HEIGHT + 12,
bottom: 12,
right: 12,
},
limiter: limitShift(),
}),
],
autoUpdate: true,
},
};
},
{ allowMultiple: true }
);
const imageBlock = this.block;
if (!imageBlock) {
return;
}
this._hoverController.setReference(imageBlock);
this._hoverController.onAbort = () => {
// If the more menu is opened, don't close it.
if (this._isActivated) return;
this._hoverController?.abort();
return;
};
};
addMoreItems = (
items: AdvancedMenuItem<ImageToolbarContext>[],
index?: number,
type?: string
) => {
let group;
if (type) {
group = this.moreGroups.find(g => g.type === type);
}
if (!group) {
group = this.moreGroups[0];
}
if (index === undefined) {
group.items.push(...items);
return this;
}
group.items.splice(index, 0, ...items);
return this;
};
addPrimaryItems = (
items: AdvancedMenuItem<ImageToolbarContext>[],
index?: number
) => {
if (index === undefined) {
this.primaryGroups[0].items.push(...items);
return this;
}
this.primaryGroups[0].items.splice(index, 0, ...items);
return this;
};
/*
* Caches the more menu items.
* Currently only supports configuring more menu.
*/
moreGroups: MenuItemGroup<ImageToolbarContext>[] = cloneGroups(MORE_GROUPS);
primaryGroups: MenuItemGroup<ImageToolbarContext>[] =
cloneGroups(PRIMARY_GROUPS);
override firstUpdated() {
if (this.doc.getParent(this.model.id)?.flavour === 'affine:surface') {
return;
}
this.moreGroups = getMoreMenuConfig(this.std).configure(this.moreGroups);
this._setHoverController();
}
}

View File

@@ -1,24 +0,0 @@
import { css } from 'lit';
export const styles = css`
:host {
position: absolute;
top: 0;
right: 0;
z-index: var(--affine-z-index-popover);
}
.affine-image-toolbar-container {
height: 24px;
gap: 4px;
padding: 4px;
margin: 0;
}
.image-toolbar-button {
color: var(--affine-icon-color);
background-color: var(--affine-background-primary-color);
box-shadow: var(--affine-shadow-1);
border-radius: 4px;
}
`;

View File

@@ -1,56 +0,0 @@
import type { ImageBlockComponent } from '@blocksuite/affine-block-image';
import {
getBlockProps,
isInsidePageEditor,
} from '@blocksuite/affine-shared/utils';
import { BlockSelection } from '@blocksuite/std';
export function duplicate(
block: ImageBlockComponent,
abortController?: AbortController
) {
const model = block.model;
const blockProps = getBlockProps(model);
const {
width: _width,
height: _height,
xywh: _xywh,
rotate: _rotate,
zIndex: _zIndex,
...duplicateProps
} = blockProps;
const { doc } = model;
const parent = doc.getParent(model);
if (!parent) {
console.error(`Parent not found for block(${model.flavour}) ${model.id}`);
return;
}
const index = parent?.children.indexOf(model);
const duplicateId = doc.addBlock(
model.flavour,
duplicateProps,
parent,
index + 1
);
abortController?.abort();
const editorHost = block.host;
editorHost.updateComplete
.then(() => {
const { selection } = editorHost;
selection.setGroup('note', [
selection.create(BlockSelection, {
blockId: duplicateId,
}),
]);
if (isInsidePageEditor(editorHost)) {
const duplicateElement = editorHost.view.getBlock(duplicateId);
if (duplicateElement) {
duplicateElement.scrollIntoView(true);
}
}
})
.catch(console.error);
}

View File

@@ -1,54 +0,0 @@
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./dist",
"tsBuildInfoFile": "./dist/tsconfig.tsbuildinfo"
},
"include": ["./src"],
"references": [
{ "path": "../block-attachment" },
{ "path": "../block-bookmark" },
{ "path": "../block-data-view" },
{ "path": "../block-database" },
{ "path": "../block-edgeless-text" },
{ "path": "../block-embed" },
{ "path": "../block-frame" },
{ "path": "../block-image" },
{ "path": "../block-latex" },
{ "path": "../block-list" },
{ "path": "../block-note" },
{ "path": "../block-paragraph" },
{ "path": "../block-surface" },
{ "path": "../block-surface-ref" },
{ "path": "../block-table" },
{ "path": "../../components" },
{ "path": "../../fragments/fragment-doc-title" },
{ "path": "../../gfx/brush" },
{ "path": "../../gfx/connector" },
{ "path": "../../gfx/group" },
{ "path": "../../gfx/mindmap" },
{ "path": "../../gfx/note" },
{ "path": "../../gfx/shape" },
{ "path": "../../gfx/text" },
{ "path": "../../inlines/latex" },
{ "path": "../../inlines/link" },
{ "path": "../../inlines/preset" },
{ "path": "../../inlines/reference" },
{ "path": "../../model" },
{ "path": "../../rich-text" },
{ "path": "../../shared" },
{ "path": "../../widgets/widget-drag-handle" },
{ "path": "../../widgets/widget-edgeless-auto-connect" },
{ "path": "../../widgets/widget-edgeless-toolbar" },
{ "path": "../../widgets/widget-frame-title" },
{ "path": "../../widgets/widget-remote-selection" },
{ "path": "../../widgets/widget-scroll-anchoring" },
{ "path": "../../widgets/widget-slash-menu" },
{ "path": "../../widgets/widget-toolbar" },
{ "path": "../../data-view" },
{ "path": "../../../framework/global" },
{ "path": "../../../framework/std" },
{ "path": "../../../framework/store" }
]
}

View File

@@ -1,15 +0,0 @@
import type { SurfaceRefBlockModel } from '@blocksuite/affine-model';
import { BlockComponent } from '@blocksuite/std';
import { nothing } from 'lit';
export class EdgelessSurfaceRefBlockComponent extends BlockComponent<SurfaceRefBlockModel> {
override render() {
return nothing;
}
}
declare global {
interface HTMLElementTagNameMap {
'affine-edgeless-surface-ref': EdgelessSurfaceRefBlockComponent;
}
}

View File

@@ -1,4 +0,0 @@
export {
EdgelessSurfaceBlockAdapterExtensions,
SurfaceBlockAdapterExtensions,
} from './extension.js';

View File

@@ -1,15 +0,0 @@
import { brushToMarkdownAdapterMatcher } from './brush.js';
import { connectorToMarkdownAdapterMatcher } from './connector.js';
import { groupToMarkdownAdapterMatcher } from './group.js';
import { mindmapToMarkdownAdapterMatcher } from './mindmap.js';
import { shapeToMarkdownAdapterMatcher } from './shape.js';
import { textToMarkdownAdapterMatcher } from './text.js';
export const elementToMarkdownAdapterMatchers = [
groupToMarkdownAdapterMatcher,
shapeToMarkdownAdapterMatcher,
connectorToMarkdownAdapterMatcher,
brushToMarkdownAdapterMatcher,
textToMarkdownAdapterMatcher,
mindmapToMarkdownAdapterMatcher,
];

View File

@@ -1,15 +0,0 @@
import { brushToPlainTextAdapterMatcher } from './brush.js';
import { connectorToPlainTextAdapterMatcher } from './connector.js';
import { groupToPlainTextAdapterMatcher } from './group.js';
import { mindmapToPlainTextAdapterMatcher } from './mindmap.js';
import { shapeToPlainTextAdapterMatcher } from './shape.js';
import { textToPlainTextAdapterMatcher } from './text.js';
export const elementToPlainTextAdapterMatchers = [
groupToPlainTextAdapterMatcher,
shapeToPlainTextAdapterMatcher,
connectorToPlainTextAdapterMatcher,
brushToPlainTextAdapterMatcher,
textToPlainTextAdapterMatcher,
mindmapToPlainTextAdapterMatcher,
];

View File

@@ -1,162 +0,0 @@
import type { DeltaInsert } from '@blocksuite/store';
import type { MindMapTreeNode } from '../types/mindmap.js';
import { buildMindMapTree } from './mindmap.js';
export function getShapeType(elementModel: Record<string, unknown>): string {
let shapeType = '';
if (elementModel.type !== 'shape') {
return shapeType;
}
if (
'shapeType' in elementModel &&
typeof elementModel.shapeType === 'string'
) {
shapeType = elementModel.shapeType;
}
return shapeType;
}
export function getShapeText(elementModel: Record<string, unknown>): string {
let text = '';
if (elementModel.type !== 'shape') {
return text;
}
if (
'text' in elementModel &&
typeof elementModel.text === 'object' &&
elementModel.text
) {
let delta: DeltaInsert[] = [];
if ('delta' in elementModel.text) {
delta = elementModel.text.delta as DeltaInsert[];
}
text = delta.map(d => d.insert).join('');
}
return text;
}
export function getConnectorText(
elementModel: Record<string, unknown>
): string {
let text = '';
if (elementModel.type !== 'connector') {
return text;
}
if (
'text' in elementModel &&
typeof elementModel.text === 'object' &&
elementModel.text
) {
let delta: DeltaInsert[] = [];
if ('delta' in elementModel.text) {
delta = elementModel.text.delta as DeltaInsert[];
}
text = delta.map(d => d.insert).join('');
}
return text;
}
export function getGroupTitle(elementModel: Record<string, unknown>): string {
let title = '';
if (elementModel.type !== 'group') {
return title;
}
if (
'title' in elementModel &&
typeof elementModel.title === 'object' &&
elementModel.title
) {
let delta: DeltaInsert[] = [];
if ('delta' in elementModel.title) {
delta = elementModel.title.delta as DeltaInsert[];
}
title = delta.map(d => d.insert).join('');
}
return title;
}
export function getTextElementText(
elementModel: Record<string, unknown>
): string {
let text = '';
if (elementModel.type !== 'text') {
return text;
}
if (
'text' in elementModel &&
typeof elementModel.text === 'object' &&
elementModel.text
) {
let delta: DeltaInsert[] = [];
if ('delta' in elementModel.text) {
delta = elementModel.text.delta as DeltaInsert[];
}
text = delta.map(d => d.insert).join('');
}
return text;
}
/**
* traverse the mindMapTree and construct the content string
* like:
* - Root
* - Child 1
* - Child 1.1
* - Child 1.2
* - Child 2
* - Child 2.1
* - Child 2.2
* - Child 3
* - Child 3.1
* - Child 3.2
* @param elementModel - the mindmap element model
* @param elements - the elements map
* @returns the mindmap tree text
*/
export function getMindMapTreeText(
elementModel: Record<string, unknown>,
elements: Record<string, Record<string, unknown>>,
options: {
prefix: string;
repeat: number;
} = {
prefix: ' ',
repeat: 2,
}
): string {
let mindMapContent = '';
if (elementModel.type !== 'mindmap') {
return mindMapContent;
}
const mindMapTree = buildMindMapTree(elementModel);
if (!mindMapTree) {
return mindMapContent;
}
let layer = 0;
const traverseMindMapTree = (
node: MindMapTreeNode,
prefix: string,
repeat: number
) => {
const shapeElement = elements[node.id as string];
const shapeText = getShapeText(shapeElement);
if (shapeElement) {
mindMapContent += `${prefix.repeat(layer * repeat)}- ${shapeText}\n`;
}
node.children.forEach(child => {
layer++;
traverseMindMapTree(child, prefix, repeat);
layer--;
});
};
traverseMindMapTree(mindMapTree, options.prefix, options.repeat);
return mindMapContent;
}

View File

@@ -1,34 +0,0 @@
import type { IBound } from '@blocksuite/global/gfx';
import type { GfxPrimitiveElementModel } from '@blocksuite/std/gfx';
import type { RoughCanvas } from '../../index.js';
import type { CanvasRenderer } from '../canvas-renderer.js';
import { brush } from './brush/index.js';
import { connector } from './connector/index.js';
import { group } from './group/index.js';
import { highlighter } from './highlighter/index.js';
import { mindmap } from './mindmap.js';
import { shape } from './shape/index.js';
import { text } from './text/index.js';
export { normalizeShapeBound } from './shape/utils.js';
export type ElementRenderer<
T extends GfxPrimitiveElementModel = GfxPrimitiveElementModel,
> = (
model: T,
ctx: CanvasRenderingContext2D,
matrix: DOMMatrix,
renderer: CanvasRenderer,
rc: RoughCanvas,
viewportBound: IBound
) => void;
export const elementRenderers = {
brush,
highlighter,
connector,
group,
shape,
text,
mindmap,
} as Record<string, ElementRenderer<any>>;

View File

@@ -1,37 +0,0 @@
import { BlockService } from '@blocksuite/std';
import { GfxControllerIdentifier } from '@blocksuite/std/gfx';
import { type SurfaceBlockModel, SurfaceBlockSchema } from './surface-model.js';
import { getSurfaceBlock } from './utils/get-surface-block.js';
export class SurfaceBlockService extends BlockService {
static override readonly flavour = SurfaceBlockSchema.model.flavour;
surface!: SurfaceBlockModel;
get layer() {
return this.std.get(GfxControllerIdentifier).layer;
}
override mounted(): void {
super.mounted();
const surface = getSurfaceBlock(this.doc);
// FIXME: BS-2271
this.surface = surface!;
if (!this.surface) {
const disposable = this.doc.slots.blockUpdated.subscribe(payload => {
if (payload.flavour === 'affine:surface') {
disposable.unsubscribe();
const surface = this.doc.getModelById(
payload.id
) as SurfaceBlockModel | null;
if (!surface) return;
this.surface = surface;
}
});
}
}
}

View File

@@ -17,7 +17,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/affine-widget-slash-menu": "workspace:*",
"@blocksuite/global": "workspace:*",
"@blocksuite/icons": "^2.2.8",
"@blocksuite/icons": "^2.2.10",
"@blocksuite/std": "workspace:*",
"@blocksuite/store": "workspace:*",
"@lit/context": "^1.1.2",
@@ -39,5 +39,5 @@
"!src/__tests__",
"!dist/__tests__"
],
"version": "0.20.0"
"version": "0.21.0"
}

View File

@@ -0,0 +1,61 @@
import {
type InsertedLinkType,
insertEmbedIframeWithUrlCommand,
insertEmbedLinkedDocCommand,
type LinkableFlavour,
} from '@blocksuite/affine-block-embed';
import { QuickSearchProvider } from '@blocksuite/affine-shared/services';
import type { Command } from '@blocksuite/std';
import { insertBookmarkCommand } from './insert-bookmark';
export const insertLinkByQuickSearchCommand: Command<
{},
{ insertedLinkType: Promise<InsertedLinkType> }
> = (ctx, next) => {
const { std } = ctx;
const quickSearchService = std.getOptional(QuickSearchProvider);
if (!quickSearchService) {
next();
return;
}
const insertedLinkType: Promise<InsertedLinkType> = quickSearchService
.openQuickSearch()
.then(result => {
if (!result) return null;
// add linked doc
if ('docId' in result) {
std.command.exec(insertEmbedLinkedDocCommand, {
docId: result.docId,
params: result.params,
});
return {
flavour: 'affine:embed-linked-doc',
};
}
// add normal link;
if ('externalUrl' in result) {
// try to insert embed iframe block first
const [success, { flavour }] = std.command
.chain()
.try(chain => [
chain.pipe(insertEmbedIframeWithUrlCommand, {
url: result.externalUrl,
}),
chain.pipe(insertBookmarkCommand, { url: result.externalUrl }),
])
.run();
if (!success || !flavour) return null;
return {
flavour: flavour as LinkableFlavour,
};
}
return null;
});
next({ insertedLinkType });
};

View File

@@ -2,7 +2,7 @@ import { getEmbedCardIcons } from '@blocksuite/affine-block-embed';
import { WebIcon16 } from '@blocksuite/affine-components/icons';
import { ThemeProvider } from '@blocksuite/affine-shared/services';
import { getHostName } from '@blocksuite/affine-shared/utils';
import { WithDisposable } from '@blocksuite/global/lit';
import { SignalWatcher, WithDisposable } from '@blocksuite/global/lit';
import { OpenInNewIcon } from '@blocksuite/icons/lit';
import { BlockSelection, ShadowlessElement } from '@blocksuite/std';
import { html } from 'lit';
@@ -12,7 +12,9 @@ import { classMap } from 'lit/directives/class-map.js';
import type { BookmarkBlockComponent } from '../bookmark-block.js';
import { styles } from '../styles.js';
export class BookmarkCard extends WithDisposable(ShadowlessElement) {
export class BookmarkCard extends SignalWatcher(
WithDisposable(ShadowlessElement)
) {
static override styles = styles;
private _handleClick(event: MouseEvent) {
@@ -125,11 +127,11 @@ export class BookmarkCard extends WithDisposable(ShadowlessElement) {
<div class="affine-bookmark-content-description">
${descriptionText}
</div>
<div
class="affine-bookmark-content-url-wrapper"
@click=${this.bookmark.open}
>
<div class="affine-bookmark-content-url">
<div class="affine-bookmark-content-url-wrapper">
<div
class="affine-bookmark-content-url"
@click=${this.bookmark.open}
>
<span>${getHostName(url)}</span>
<div class="affine-bookmark-content-url-icon">
${OpenInNewIcon({ width: '12', height: '12' })}

View File

@@ -0,0 +1,29 @@
import { EdgelessClipboardConfig } from '@blocksuite/affine-block-surface';
import { type BlockSnapshot } from '@blocksuite/store';
export class EdgelessClipboardBookmarkConfig extends EdgelessClipboardConfig {
static override readonly key = 'affine:bookmark';
override createBlock(bookmark: BlockSnapshot): string | null {
if (!this.surface) return null;
const { xywh, style, url, caption, description, icon, image, title } =
bookmark.props;
const bookmarkId = this.crud.addBlock(
'affine:bookmark',
{
xywh,
style,
url,
caption,
description,
icon,
image,
title,
},
this.surface.model.id
);
return bookmarkId;
}
}

View File

@@ -4,3 +4,4 @@ export * from './bookmark-spec';
export * from './commands';
export * from './components';
export { BookmarkSlashMenuConfigIdentifier } from './configs/slash-menu';
export * from './edgeless-clipboard-config';

View File

@@ -26,7 +26,6 @@ export const styles = css`
.affine-bookmark-content {
width: calc(100% - 204px);
height: 100%;
display: flex;
flex-direction: column;
align-self: stretch;

View File

@@ -7,12 +7,12 @@
},
"include": ["./src"],
"references": [
{ "path": "../block-embed" },
{ "path": "../block-surface" },
{ "path": "../embed" },
{ "path": "../surface" },
{ "path": "../../components" },
{ "path": "../../model" },
{ "path": "../../shared" },
{ "path": "../../widgets/widget-slash-menu" },
{ "path": "../../widgets/slash-menu" },
{ "path": "../../../framework/global" },
{ "path": "../../../framework/std" },
{ "path": "../../../framework/store" }

View File

@@ -17,7 +17,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/affine-widget-slash-menu": "workspace:*",
"@blocksuite/global": "workspace:*",
"@blocksuite/icons": "^2.2.8",
"@blocksuite/icons": "^2.2.10",
"@blocksuite/std": "workspace:*",
"@blocksuite/store": "workspace:*",
"@emoji-mart/data": "^1.2.1",
@@ -42,5 +42,5 @@
"!src/__tests__",
"!dist/__tests__"
],
"version": "0.20.0"
"version": "0.21.0"
}

View File

@@ -2,7 +2,7 @@ import { CaptionedBlockComponent } from '@blocksuite/affine-components/caption';
import { createLitPortal } from '@blocksuite/affine-components/portal';
import { DefaultInlineManagerExtension } from '@blocksuite/affine-inline-preset';
import { type CalloutBlockModel } from '@blocksuite/affine-model';
import { NOTE_SELECTOR } from '@blocksuite/affine-shared/consts';
import { EDGELESS_TOP_CONTENTEDITABLE_SELECTOR } from '@blocksuite/affine-shared/consts';
import {
DocModeProvider,
ThemeProvider,
@@ -95,7 +95,9 @@ export class CalloutBlockComponent extends CaptionedBlockComponent<CalloutBlockM
override get topContenteditableElement() {
if (this.std.get(DocModeProvider).getEditorMode() === 'edgeless') {
return this.closest<BlockComponent>(NOTE_SELECTOR);
return this.closest<BlockComponent>(
EDGELESS_TOP_CONTENTEDITABLE_SELECTOR
);
}
return this.rootComponent;
}

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