Compare commits

...

319 Commits

Author SHA1 Message Date
liuyi
171a974904 fix(server): use timestamp with timezone (#7847) 2024-08-13 15:32:24 +08:00
forehalo
0ec1995add fix(admin): organize admin panel (#7840) 2024-08-13 14:51:54 +08:00
JimmFly
6dea831d8a fix(admin): handle error login status (#7646)
Fix unhandled error login status, modify style

https://github.com/user-attachments/assets/0b40807d-e17a-4d23-a168-4894adfa5998
2024-08-13 14:51:54 +08:00
JimmFly
b214003968 feat(admin): add prompt management page (#7611)
close AF-907

Supports online modification of prompt, but does not support custom ai key yet

![CleanShot 2024-07-29 at 22 12 39@2x](https://github.com/user-attachments/assets/c67ad0d0-3e5b-44ff-b7db-d07dd11c19e2)
2024-08-13 14:51:54 +08:00
JimmFly
bf6e36de37 feat(admin): add server runtime config settings (#7618) 2024-08-13 14:51:31 +08:00
JimmFly
7f7c0519a0 feat(admin): add config page to admin (#7619) 2024-08-13 14:38:39 +08:00
liuyi
83a9beed83 fix(electron): app got deleted when auto update on windows (#7820) 2024-08-13 14:26:26 +08:00
EYHN
1db6b9fe3b refactor(infra): remove setimmediate (#7821) 2024-08-13 14:25:33 +08:00
JimmFly
ccf225c8f9 feat(admin): add self-host setup and user management page (#7537) 2024-08-13 06:11:03 +00:00
Lye Hongtao
dc519348c5 feat: bump bs (#7836) 2024-08-13 14:05:49 +08:00
renovate
10f4eaf2bd chore: bump up vitest-mock-extended version to v2 (#7584)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [vitest-mock-extended](https://togithub.com/eratio08/vitest-mock-extended) | [`^1.3.1` -> `^2.0.0`](https://renovatebot.com/diffs/npm/vitest-mock-extended/1.3.2/2.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vitest-mock-extended/2.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest-mock-extended/2.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest-mock-extended/1.3.2/2.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest-mock-extended/1.3.2/2.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>eratio08/vitest-mock-extended (vitest-mock-extended)</summary>

### [`v2.0.0`](https://togithub.com/eratio08/vitest-mock-extended/releases/tag/v2.0.0)

[Compare Source](https://togithub.com/eratio08/vitest-mock-extended/compare/v1.3.2...v2.0.0)

##### chore

-   Adjust package version to 2.0 ([b867078](b86707812b))

##### BREAKING CHANGES

-   Require at least vitest 2.0 as peer dependency

</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://www.mend.io/free-developer-tools/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzguMCIsInVwZGF0ZWRJblZlciI6IjM4LjIwLjEiLCJ0YXJnZXRCcmFuY2giOiJjYW5hcnkiLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19-->
2024-08-13 04:03:07 +00:00
renovate
d365494fef chore: bump up vite-plugin-dts version to v4 (#7762)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [vite-plugin-dts](https://togithub.com/qmhc/vite-plugin-dts) | [`3.9.1` -> `4.0.2`](https://renovatebot.com/diffs/npm/vite-plugin-dts/3.9.1/4.0.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vite-plugin-dts/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vite-plugin-dts/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vite-plugin-dts/3.9.1/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vite-plugin-dts/3.9.1/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>qmhc/vite-plugin-dts (vite-plugin-dts)</summary>

### [`v4.0.2`](https://togithub.com/qmhc/vite-plugin-dts/blob/HEAD/CHANGELOG.md#402-2024-08-09)

[Compare Source](https://togithub.com/qmhc/vite-plugin-dts/compare/v4.0.1...v4.0.2)

##### Bug Fixes

-   ensure inserted index file be a module ([f93e98c](f93e98cd84)), closes [#&#8203;365](https://togithub.com/qmhc/vite-plugin-dts/issues/365)

### [`v4.0.1`](https://togithub.com/qmhc/vite-plugin-dts/blob/HEAD/CHANGELOG.md#401-2024-08-07)

[Compare Source](https://togithub.com/qmhc/vite-plugin-dts/compare/v4.0.0...v4.0.1)

##### Bug Fixes

-   correctly match normal export ([589901f](589901fead)), closes [#&#8203;362](https://togithub.com/qmhc/vite-plugin-dts/issues/362)

### [`v4.0.0`](https://togithub.com/qmhc/vite-plugin-dts/blob/HEAD/CHANGELOG.md#400-2024-08-06)

[Compare Source](https://togithub.com/qmhc/vite-plugin-dts/compare/v3.9.1...v4.0.0)

##### Bug Fixes

-   remove global types for vue declaration files ([e873107](e8731077f3)), closes [#&#8203;354](https://togithub.com/qmhc/vite-plugin-dts/issues/354)
-   resolve module preserve to esnext for rollup ([710400a](710400a276)), closes [#&#8203;358](https://togithub.com/qmhc/vite-plugin-dts/issues/358)
-   sync diff line to mappings after transform ([cd5ba32](cd5ba32148)), closes [#&#8203;356](https://togithub.com/qmhc/vite-plugin-dts/issues/356)
-   typescript lib path resolution for rollup in monorepo ([#&#8203;360](https://togithub.com/qmhc/vite-plugin-dts/issues/360)) ([da4af65](da4af6542e))

</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://www.mend.io/free-developer-tools/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xOC4xNyIsInVwZGF0ZWRJblZlciI6IjM4LjIwLjEiLCJ0YXJnZXRCcmFuY2giOiJjYW5hcnkiLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19-->
2024-08-13 03:48:23 +00:00
forehalo
69c64b2fc2 fix(core): checkout event (#7844) 2024-08-13 03:35:38 +00:00
forehalo
dc41ffbe2f chore(core): enable mixpanel ignore_dnt flag (#7841) 2024-08-13 03:35:37 +00:00
JimmFly
9037e6695e feat(core): add configuration for experimental features (#7699)
close AF-1218 AF-1219

Added configuration for experimental features

Example:
```
const blocksuiteFeatureFlags = {
  ...
  enable_expand_database_block: {
    displayName: 'Enable Expand Database Block',
    description: 'Allows expanding database blocks for better view and management.',
    feedbackType: 'discord',
    displayChannel: ['stable', 'beta', 'canary', 'internal'],
    restrictedPlatform: 'client'
  },
    enable_ai_onboarding: {
    displayName: 'AI Onboarding',
    description: 'Enables AI onboarding.',
    displayChannel: [],
    defaultState: true,
  },
  ...
}

```

![CleanShot 2024-08-02 at 12 26 36@2x](https://github.com/user-attachments/assets/98b1e8e7-cd8b-4309-8063-323b2f3b5a94)
2024-08-13 02:26:05 +00:00
CatsJuice
6228b27271 feat(core): new theme editor poc (#7810) 2024-08-12 04:12:51 +00:00
CatsJuice
75e02bb088 feat(core): rewrite page-mode-switch with RadioGroup, bind hotkey with cmdk (#7758)
close AF-1170

- bump `@toeverything/theme`
- refactor page-mode-switch
  - use global `<RadioGroup />`
  - reuse for doc history
  - remove `styled` usage
  - bind hotkey via cmdk
- Update `<RadioGroup />` color scheme with latest design system
- Update right sidebar header tab style
- Update tooltip with shortcut for app nav button
2024-08-12 03:56:56 +00:00
hwangdev97
4ac9bd7790 feat(i18n): fix i18n en-Us & en json english style (#7834) 2024-08-12 03:19:13 +00:00
pengx17
a6169ab26a fix: do not use globalShortcut for tab switching (#7827)
fix #7826
2024-08-11 07:56:47 +00:00
pengx17
d82f4b5461 fix: center peek responsiveness update (#7814)
fix PD-1407
2024-08-09 11:48:50 +00:00
EYHN
a579cc7716 fix(core): better search result (#7819) 2024-08-09 10:37:27 +00:00
EYHN
b993ab04df fix(core): some doc missing in search result (#7818) 2024-08-09 10:37:24 +00:00
forehalo
eef9afd3ed chore: bump base version to 0.16.0 2024-08-09 18:30:07 +08:00
Cats Juice
06d5d9719c fix(core): wrong color of ai-subscribe button (#7816) 2024-08-09 09:44:09 +00:00
Cats Juice
f8e51112aa fix(core): sidebar renaming menu pos (#7798) 2024-08-09 17:06:55 +08:00
Cats Juice
e8d5692062 fix(core): sidebar unauthorized user avatar should center vertically (#7812) 2024-08-09 16:52:29 +08:00
EYHN
d2b0ee40a8 fix(core): disable blocksuite indexer (#7813) 2024-08-09 08:24:44 +00:00
EYHN
3ad5170b71 fix(core): hidden open in split view in browser (#7811) 2024-08-09 07:50:07 +00:00
pengx17
8209e84842 chore(electron): disable parallel execution of electron tests (#7789) 2024-08-09 07:33:16 +00:00
pengx17
fc19180451 fix(electron): missing collection name in tab header (#7807)
fix AF-1177
2024-08-09 07:02:38 +00:00
pengx17
009b5353b1 fix(electron): shell should import renderer css in dev (#7805) 2024-08-09 07:02:34 +00:00
EYHN
4beedaa22c fix(core): delete from folder not work (#7806) 2024-08-09 06:49:20 +00:00
CatsJuice
26fd9a4a1c feat(component): add autoFocusConfirmButton for confirm-modal (#7801)
close #5813

<div class='graphite__hidden'>
          <div>🎥 Video uploaded on Graphite:</div>
            <a href="https://app.graphite.dev/media/video/LakojjjzZNf6ogjOVwKE/aff35b76-9f73-4d15-b2cb-c25b03e2e2c3.mp4">
              <img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/LakojjjzZNf6ogjOVwKE/aff35b76-9f73-4d15-b2cb-c25b03e2e2c3.mp4">
            </a>
          </div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/LakojjjzZNf6ogjOVwKE/aff35b76-9f73-4d15-b2cb-c25b03e2e2c3.mp4">CleanShot 2024-08-09 at 11.25.46.mp4</video>
2024-08-09 05:50:22 +00:00
EYHN
b2c00a2618 fix(core): typo in migration text (#7804) 2024-08-09 05:23:52 +00:00
JimmFly
85637156f6 chore: adjust i18n (#7800) 2024-08-09 04:10:18 +00:00
EYHN
c006f3f0af fix(core): reduce indexer performance impact (#7803) 2024-08-09 11:57:06 +08:00
EYHN
7efc87b6d3 chore(core): adjust migration text (#7802) 2024-08-09 11:50:52 +08:00
Tasnim Tantawi
450106ea54 feat(i18n): add Arabic (#7795) 2024-08-09 10:08:52 +08:00
EYHN
ffc12176c9 fix(electron): fix electron global state sync (#7793) 2024-08-08 12:02:10 +00:00
L-Sun
3d4fbcaebc fix(core): can not get chrome version in desktop mode in iOS (#7791) 2024-08-08 18:37:25 +08:00
pengx17
8db37e9bbf feat: cmd click support for journal sidebar (#7792)
fix AF-1214

The titles are also corrected:
![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/b7cd888f-b080-4800-a868-c37cbb0b9cbb.png)
2024-08-08 10:22:11 +00:00
pengx17
7fca13076a feat: mid click links to open in new tab (#7784)
fix AF-1200
2024-08-08 09:43:35 +00:00
EYHN
fd6e198295 chore: bump blocksuite (#7788) 2024-08-08 09:27:44 +00:00
pengx17
b71945c29f chore: tracking events for app tabs header (#7778)
fix AF-1194
2024-08-08 09:14:47 +00:00
EYHN
6ef5675be1 feat(core): better search result (#7787) 2024-08-08 08:56:55 +00:00
EYHN
c7aabd3a8d feat(core): highlight doc title in search result (#7786) 2024-08-08 08:56:51 +00:00
CatsJuice
03fd23de39 fix(core): cloud s subscription resume button's content is blank (#7783) 2024-08-08 08:43:05 +00:00
forehalo
f2eafc374c feat(server): authenticate user before ws connected (#7777) 2024-08-08 08:30:56 +00:00
EYHN
83244f0201 fix(core): trash doc in search result (#7785) 2024-08-08 08:17:48 +00:00
pengx17
f62d30527b fix: onboarding stage not shown (#7782)
fix AF-1199
2024-08-08 03:58:11 +00:00
donteatfriedrice
025abc6169 fix: ai chat block center peek animation (#7781) 2024-08-08 02:17:06 +00:00
L-Sun
58b43582e1 chore: bump blocksuite (#7779)
## Features
- https://github.com/toeverything/BlockSuite/pull/7870 @L-Sun

## Bugfix
- https://github.com/toeverything/BlockSuite/pull/7856 @Flrande
- https://github.com/toeverything/BlockSuite/pull/7868 @doouding
- https://github.com/toeverything/BlockSuite/pull/7869 @Flrande
- https://github.com/toeverything/BlockSuite/pull/7866 @doouding
- https://github.com/toeverything/BlockSuite/pull/7867 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7872 @L-Sun
- https://github.com/toeverything/BlockSuite/pull/7873 @doouding
- https://github.com/toeverything/BlockSuite/pull/7871 @fundon

## Misc
- https://github.com/toeverything/BlockSuite/pull/7874 @Saul-Mirone
2024-08-07 13:45:40 +00:00
L-Sun
ff68efb206 chore: bump blocksuite (#7776)
## Features
- https://github.com/toeverything/BlockSuite/pull/7859 @akumatus
- https://github.com/toeverything/BlockSuite/pull/7855 @darkskygit
- https://github.com/toeverything/BlockSuite/pull/7858 @donteatfriedrice

## Bugfix
- https://github.com/toeverything/BlockSuite/pull/7843 @doouding
- https://github.com/toeverything/BlockSuite/pull/7863 @L-Sun
- https://github.com/toeverything/BlockSuite/pull/7865 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7860 @doouding
- https://github.com/toeverything/BlockSuite/pull/7857 @fundon

## Refactor
- https://github.com/toeverything/BlockSuite/pull/7862 @L-Sun

## Misc
- https://github.com/toeverything/BlockSuite/pull/7833 @L-Sun
- https://github.com/toeverything/BlockSuite/pull/7864 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7861 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7849 @Saul-Mirone
2024-08-07 09:45:09 +00:00
CatsJuice
c8f4766ceb fix(component): center button's icon vertically (#7775)
close AF-1211
2024-08-07 09:31:23 +00:00
EYHN
d968cfe425 fix(infra): better search result (#7774) 2024-08-07 09:16:43 +00:00
Ikko Eltociear Ashimine
2f0e39b702 fix(core): update en.json (#7765) 2024-08-07 17:16:14 +08:00
JimmFly
4e03edba44 feat(i18n): add Spanish(Argentina) and Urdu (#7771)
Support for various languages has been updated, and `Spanish (Argentina)` and `Urdu` have been added. Many thanks to the community contributors for their ongoing translation efforts.
2024-08-07 08:57:23 +00:00
pengx17
00ee2a8852 fix(electron): always show traffic light for mac (#7773)
fix AF-1209, fix PD-1550
2024-08-07 08:44:35 +00:00
CatsJuice
75a308ac79 fix(core): optimize explorer's dnd behaviors (#7769)
close AF-1198, AF-1169, AF-1204, AF-1167, AF-1168

- **fix**: empty favorite cannot be dropped(AF-1198)
- **fix**: folder close animation has a unexpected delay
- **fix**: mount explorer's DropEffect to body to avoid clipping(AF-1169)
- **feat**: drop on empty organize to create folder and put item into it(AF-1204)
- **feat**: only show explorer section's action when hovered(AF-1168)
- **feat**: animate folder icon when opened(AF-1167)
- **chore**: extract dnd related `dropEffect`, `canDrop` functions outside component
2024-08-07 08:29:19 +00:00
donteatfriedrice
f35dc744dd fix: render ai chat block in embed doc and surface ref (#7747)
[BS-1017](https://linear.app/affine-design/issue/BS-1017/含有chat-block的页面被embed时,embed预览不会渲染chatblock)

related: https://github.com/toeverything/blocksuite/pull/7845
2024-08-07 06:55:51 +00:00
pengx17
ae9381c36d feat: allow opening new tab for some navigation buttons (#7764)
fix AF-1010
2024-08-07 06:43:10 +00:00
donteatfriedrice
e1087a0c7b fix: remove chat block button flag (#7767) 2024-08-07 06:31:04 +00:00
JimmFly
eb01e76426 feat(core): add track events for cmdk (#7668) 2024-08-07 05:52:42 +00:00
JimmFly
67dce9c97a feat(core): add track events for page info (#7667) 2024-08-07 05:52:41 +00:00
JimmFly
7edd78884e feat(core): add track events for page option (#7664) 2024-08-07 05:52:41 +00:00
JimmFly
74025fc85e feat(core): add track events for editor header (#7661)
close AF-1054
2024-08-07 05:52:40 +00:00
pengx17
b5e543c406 feat(electron): mouse middle click to close tab (#7759)
fix AF-1200
2024-08-07 05:19:45 +00:00
donteatfriedrice
352ceca94b fix: chat action button style (#7766)
[PD-1547](https://linear.app/affine-design/issue/PD-1547/ui-bug-chat-block-面板生成结果的-action-按钮的高度不对)
2024-08-07 04:59:26 +00:00
akumatus
f3855c57b4 fix: can not create a new edgeless doc with "@" on edgeless (#7772)
Close issue [BS-935](https://linear.app/affine-design/issue/BS-935).
2024-08-07 04:46:13 +00:00
L-Sun
f6279ee47f chore(core): remove outline viewer feature flag (#7770) 2024-08-07 03:46:15 +00:00
EYHN
aee24ffb31 fix(core): migration favorite appear again (#7768) 2024-08-07 03:31:06 +00:00
EYHN
96fed60655 chore: bump blocksuite (#7751)
## Features
- https://github.com/toeverything/BlockSuite/pull/7850 @donteatfriedrice
- https://github.com/toeverything/BlockSuite/pull/7848 @L-Sun

## Bugfix
- https://github.com/toeverything/BlockSuite/pull/7853 @doouding
- https://github.com/toeverything/BlockSuite/pull/7838 @fundon
- https://github.com/toeverything/BlockSuite/pull/7851 @donteatfriedrice

## Refactor

## Misc
2024-08-07 02:52:44 +00:00
EYHN
dd74cfea14 chore(core): remove old favorite (#7743)
closes AF-1203
2024-08-07 02:19:53 +00:00
pengx17
c2cf331ff7 fix(electron): fix tab view blink issue on open new tab (#7748)
fix AF-1197
2024-08-06 15:57:40 +00:00
darkskygit
744cc542de feat: handle copilot error (#7760)
fix BS-729 CLOUD-32 PD-1529
2024-08-06 11:19:35 +00:00
fundon
601f5fef95 chore(core): theme v1.0.2 (#7746) 2024-08-06 10:54:09 +00:00
darkskygit
14669b9ced feat: improve continue to chat compatibility (#7757)
fix AF-1152
2024-08-06 09:15:42 +00:00
darkskygit
5872b884a5 fix: increase image limit of copilot (#7756)
fix AF-1080 AF-1154
2024-08-06 09:15:40 +00:00
liuyi
d0f1bb24fd chore(core): replace with new track impl (#7735) 2024-08-06 09:15:15 +00:00
renovate[bot]
7373e174db chore: bump up fast-xml-parser version to v4.4.1 [SECURITY] (#7752)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-06 16:54:24 +08:00
forehalo
cc09085dc2 feat(core): make event track great again (#7695)
![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/5c0ymolP9B7QStCsS1RP/6a3941d9-4409-4eda-987b-88ae41bd72d4.png)

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/5c0ymolP9B7QStCsS1RP/3e9cedec-5457-4e7a-9125-63aab7247cd2.png)
2024-08-06 08:39:29 +00:00
darkskygit
f93743dae6 fix: reset height after send (#7755)
fix PD-1427
2024-08-06 08:25:28 +00:00
darkskygit
de7933c1dd fix: dont limit text block height in chat panel (#7754)
fix PD-1368
2024-08-06 08:25:27 +00:00
pengx17
ca7c221d23 fix(electron): onboarding not shown (#7753)
fix AF-1199
2024-08-06 07:54:32 +00:00
EYHN
873e6faef2 chore: bump @blocksuite/icons (#7749) 2024-08-06 05:32:19 +00:00
CatsJuice
5938d8b259 feat(core): add tooltip and toast for organize operations (#7725)
close AF-1138, AF-1139, AF-1165
2024-08-06 02:07:10 +00:00
EYHN
cd4e462d8c fix(core): transform workspace db when enable cloud (#7744) 2024-08-05 15:17:19 +00:00
pengx17
a03831f2a2 fix(electron): whitescreen issue (#7742)
1. non-blurred mode whitescreen issue
2. should not close tab with cmd+w for pinned tabs
2024-08-05 14:09:22 +00:00
pengx17
0d7de67e01 refactor(electron): reduce the number of listeners for ipc (#7740)
previously there are quite a lot of api/events handlers registered on ipcMain/ipcRenderer. After this PR, the number should be significantly reduced, which will benefit performance.
2024-08-05 13:33:31 +00:00
darkskygit
0acc1bd9e8 chore: cleanup outdated model & upgrade model (#7739) 2024-08-05 10:13:33 +00:00
EYHN
e6e9f7d4c7 feat(core): enable feature flag for release (#7738) 2024-08-05 09:53:11 +00:00
pengx17
9f57ed5e84 fix(electron): find in page input border blink issue (#7737) 2024-08-05 09:27:21 +00:00
JimmFly
9cc976ce2e fix(core): canvas text adapts to input scrolling (#7733)
close PD-1539
Fixed the problem that the input text in find in page cannot be scrolled correctly.
2024-08-05 09:27:18 +00:00
CatsJuice
6d253c0600 fix(core): add favorite folder in menu, adjust empty-page new page button (#7730)
close AF-1150, AF-1128, AF-1131
- Replace favorite migration related copy
- Adjust empty page's "New Page" button
  ![CleanShot 2024-08-05 at 15.16.06@2x.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/LakojjjzZNf6ogjOVwKE/1cf7d75a-a33a-4eec-9dc1-87d50d9526f1.png)
- Add toggle favorite to folder menu
  ![CleanShot 2024-08-05 at 15.17.50@2x.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/LakojjjzZNf6ogjOVwKE/af6116b5-47d1-49a6-9660-41c0d7cd8fd3.png)
- Adjust `Button`
  - add `withoutHover` state
  - remove cursor: not-allowed when disabled
2024-08-05 09:15:17 +00:00
darkskygit
73a6723d15 fix: use correct user id in forked session (#7710) 2024-08-05 09:03:11 +00:00
pengx17
5050418c1a fix(electron): app ghosting issue when quickly opening new tabs (#7736)
fix PD-1519
2024-08-05 08:51:11 +00:00
pengx17
5ab1210c9c fix(electron): drop indicator position (#7734) 2024-08-05 08:03:13 +00:00
pengx17
51848ff6c3 fix(electron): allow close pinned tab (#7732) 2024-08-05 08:03:12 +00:00
pengx17
5f52547d9e fix(electron): tab title/icon default state (#7731) 2024-08-05 07:39:51 +00:00
pengx17
561fa46232 fix(electron): add i18n setup for shell (#7728)
![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/1ef2a050-c372-4b8f-8bf0-b1e557e11f29.png)
2024-08-05 06:52:14 +00:00
renovate[bot]
7a66212568 chore: bump up oxlint version to v0.7.0 (#7727) 2024-08-05 14:46:59 +08:00
pengx17
51ca7657d8 feat(electron): new tab/split view entries (#7708)
fix AF-1146
2024-08-05 05:37:50 +00:00
L-Sun
bd31c8388c fix(core): update outline viewer style (#7641)
## What changes
- Update responsive style and fix some bug of outline viewer (https://github.com/toeverything/blocksuite/pull/7759)
- Change left and right padding of full-width editor from `15px` to `72px`
- Hide outline viewer when side outline panel is opened ([BS-987](https://linear.app/affine-design/issue/BS-987/逻辑-bug-toc-入口和-toc-侧边栏共存))
- Add entries of outline panel and frame panel in more menu of detail page header ( [BS-996](https://linear.app/affine-design/issue/BS-996/page-mode-下的-page-option-缺少-view-table-of-contents-的入口) , [BS-1006](https://linear.app/affine-design/issue/BS-1006/edgeless-mode-的-page-options-里缺少-view-all-frames))
- Add outline viewer to dock peek preview ( [BS-995](https://linear.app/affine-design/issue/BS-995/center-peek-里缺少-quick-toc-的入口) )
- Add more e2e tests for outline viewer
2024-08-05 03:57:48 +00:00
L-Sun
545bd032a7 fix(core): app height exceeds viewport of mobile (#7706)
TL;DR
use `100dvh` instead of `100vh`.

https://stackoverflow.com/a/72245072

PS: The `100dvh` is tested in Firefox in macOS

## Before
iPad
<img src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyRfgiN4RuBxJfrza3SG/c81548ed-7ca0-4f88-af7c-cce498958a28.png" width="250">

Phone
<img src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyRfgiN4RuBxJfrza3SG/4559554d-6f3f-445f-82c1-39a0dc2eb664.png" width="250">

## After
iPad
<img src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyRfgiN4RuBxJfrza3SG/51fe97f9-f488-432c-9866-20524efd08de.png" width="250">

Phone
<img src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyRfgiN4RuBxJfrza3SG/a05cce56-38a5-47df-a0c6-f757d94ef6b8.png" width="250">
2024-08-05 03:42:15 +00:00
pengx17
e3878ae8bf build(electron): nightly build issue for windows (#7649)
ref https://github.com/toeverything/AFFiNE/actions/runs/10156494874/job/28085093900
2024-08-05 03:28:02 +00:00
pengx17
c0c5c83dad fix(electron): should activate the target tab when closing other tabs (#7704)
fix PD-1520
2024-08-05 03:11:55 +00:00
pengx17
cbdcfdc2d8 fix(electron): duplicate tab views issue (#7703)
fix PD-1523
2024-08-05 03:11:52 +00:00
pengx17
741ff2379e fix(electron): reload view in tab context menu issue (#7702)
fix PD-1524
2024-08-05 03:11:50 +00:00
pengx17
9307acf0de fix(core): ctrl/cmd + click on add page button opens in new tab (#7701)
fix PD-1521
2024-08-05 03:11:47 +00:00
pengx17
0468355593 test(electron): adjust expect timeout for CI (#7707) 2024-08-05 03:11:44 +00:00
CatsJuice
249f3471c9 feat(component): shortcut style for tooltip (#7721)
![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/LakojjjzZNf6ogjOVwKE/2e68337c-91f1-4ea7-8426-7fb33be02081.png)

- New `shortcut` prop for `<Tooltip />`
  - single key
      ```tsx
      <Tooltip shortcut="T" />
      ```
  - multiple
      ```tsx
      <Tooltip shortcut={["⌘",  "K"]} />
      ```
- Round tooltip's arrow
- Use new design system colors
- Replace some usage
  - App sidebar switch
  - Editor mode switch
  - New tab (new)
2024-08-05 02:57:24 +00:00
CatsJuice
3d855647c7 refactor(component): refactor the implementation of Button and IconButton (#7716)
## Button
- Remove props withoutHoverStyle
   refactor hover impl with independent layer, so that hover-color won't affect the background even if is overridden outside
- Update `type` (renamed to `variant`):
  - remove `processing` and `warning`
  - rename `default` with `secondary`
- Remove `shape` props
- Remove `icon` and `iconPosition`, replaced with `prefix: ReactNode` and `suffix: ReactNode`
- Integrate tooltip for more convenient usage
- New Storybook document
- Focus style

## IconButton
- A Wrapper base on `<Button />`
- Override Button size and variant
  - size: `'12' | '14' | '16' | '20' | '24' | number`
     These presets size are referenced from the design system.
  - variant:  `'plain' | 'solid' | 'danger' | 'custom'`
- Inset icon via Button 's prefix

## Fix
- fix some button related issues
- close AF-1159, AF-1160, AF-1161, AF-1162, AF-1163, AF-1158, AF-1157

## Storybook

![CleanShot 2024-08-03 at 14.57.20@2x.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/LakojjjzZNf6ogjOVwKE/f5a76110-35d0-4082-a940-efc12bed87b0.png)
2024-08-05 02:57:23 +00:00
donteatfriedrice
10deed94e3 fix: center peek message role (#7723) 2024-08-05 02:43:58 +00:00
EYHN
f108b95704 feat(core): tuning for better search (#7713) 2024-08-05 02:29:50 +00:00
EYHN
ad26102815 fix(core): fix scroll block into view (#7712) 2024-08-05 02:29:49 +00:00
EYHN
05448f50af fix(core): wrong display of 404 page (#7711) 2024-08-02 10:40:58 +00:00
EYHN
e54be7dc02 feat(core): loading ui for favorite and organize (#7700) 2024-08-02 07:17:01 +00:00
donteatfriedrice
94c5effdd5 fix: should save chat to block when doc mode (#7697)
[BS-1033](https://linear.app/affine-design/issue/BS-1033/在page模式下尝试存chat-block,被告知失败,预期是切换到白板模式直接操作成功)
2024-08-02 13:14:15 +08:00
donteatfriedrice
62fc7e2f4d fix: support chat in different doc (#7693)
fix:
[BS-990](https://linear.app/affine-design/issue/BS-990/避免centerpeek中发起的会话,等待ai返回时,页面失去响应)
[BS-1005](https://linear.app/affine-design/issue/BS-1005/chat-block无法被copy-paste到别的文档中,duplicate全篇文档后,可以center-peek)
2024-08-02 13:14:15 +08:00
donteatfriedrice
f7798a00c1 feat: patch edgeless clipboard to support cuntom block copy paste (#7689)
fix: [BS-1005](https://linear.app/affine-design/issue/BS-1005/chat-block无法被copy-paste到别的文档中,duplicate全篇文档后,可以center-peek)

related: https://github.com/toeverything/blocksuite/pull/7797
2024-08-02 13:14:14 +08:00
pengx17
854718db0e test(electron): enable trace file for desktop tests (#7692)
<div class='graphite__hidden'>
          <div>🎥 Video uploaded on Graphite:</div>
            <a href="https://app.graphite.dev/media/video/T2klNLEk0wxLh4NRDzhk/e8d87ee7-cea6-4188-80a7-1a64f6c74eca.webm">
              <img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/T2klNLEk0wxLh4NRDzhk/e8d87ee7-cea6-4188-80a7-1a64f6c74eca.webm">
            </a>
          </div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/e8d87ee7-cea6-4188-80a7-1a64f6c74eca.webm">e02e866a6496b210b8883798d82783d8.webm</video>

one failed run but no valuable result
2024-08-02 04:07:33 +00:00
donteatfriedrice
2cfe9e8b9e feat: bump blocksuite (#7698)
## Features
- https://github.com/toeverything/BlockSuite/pull/7801 @akumatus

## Bugfix
- https://github.com/toeverything/BlockSuite/pull/7811 @donteatfriedrice
- https://github.com/toeverything/BlockSuite/pull/7808 @doouding
- https://github.com/toeverything/BlockSuite/pull/7813 @L-Sun
- https://github.com/toeverything/BlockSuite/pull/7803 @fundon
- https://github.com/toeverything/BlockSuite/pull/7809 @Flrande

## Refactor

## Misc
- https://github.com/toeverything/BlockSuite/pull/7815 @doodlewind
2024-08-02 03:20:08 +00:00
pengx17
bfff10e25e feat(electron): app tabs dnd (#7684)
<div class='graphite__hidden'>
          <div>🎥 Video uploaded on Graphite:</div>
            <a href="https://app.graphite.dev/media/video/T2klNLEk0wxLh4NRDzhk/cd84e155-9f2e-4d12-a933-8673eb6bc6cb.mp4">
              <img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/T2klNLEk0wxLh4NRDzhk/cd84e155-9f2e-4d12-a933-8673eb6bc6cb.mp4">
            </a>
          </div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/cd84e155-9f2e-4d12-a933-8673eb6bc6cb.mp4">Kapture 2024-07-31 at 19.39.30.mp4</video>

fix AF-1149
fix PD-1513
fix PD-1515
2024-08-02 02:02:03 +00:00
L-Sun
4719ffadc6 chore: bump blocksuite (#7696)
## Features
- https://github.com/toeverything/BlockSuite/pull/7807 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7786 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7797 @donteatfriedrice

## Bugfix
- https://github.com/toeverything/BlockSuite/pull/7814 @fundon
- https://github.com/toeverything/BlockSuite/pull/7812 @L-Sun
- https://github.com/toeverything/BlockSuite/pull/7792 @fundon
- https://github.com/toeverything/BlockSuite/pull/7788 @fundon
- https://github.com/toeverything/BlockSuite/pull/7805 @doouding
- https://github.com/toeverything/BlockSuite/pull/7810 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7802 @L-Sun
- https://github.com/toeverything/BlockSuite/pull/7804 @L-Sun
- https://github.com/toeverything/BlockSuite/pull/7799 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7753 @CatsJuice
- https://github.com/toeverything/BlockSuite/pull/7798 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7796 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7793 @doouding
- https://github.com/toeverything/BlockSuite/pull/7795 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7791 @fundon
- https://github.com/toeverything/BlockSuite/pull/7747 @doouding
- https://github.com/toeverything/BlockSuite/pull/7785 @fundon
- https://github.com/toeverything/BlockSuite/pull/7784 @akumatus

## Misc
- https://github.com/toeverything/BlockSuite/pull/7800 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7790 @fourdim
2024-08-02 01:29:10 +00:00
pengx17
07409b8a91 refactor(electron): tab title/icon update logic (#7675)
fix AF-1122
fix AF-1136
2024-08-01 16:43:18 +00:00
CatsJuice
e60b2d64e5 fix(core): new no children status for explorer (#7686)
close AF-1140
2024-08-01 09:41:13 +00:00
CatsJuice
8816d2a639 feat(core): adjust explorer section style, persist collapsable state (#7679)
close AF-1124,AF-1129,AF-1134,AF-1144
2024-08-01 09:41:09 +00:00
EYHN
553fbed60f feat(core): add globalcontext info to mixpanel track (#7681) 2024-08-01 09:29:31 +00:00
EYHN
bb767a6cdc fix(component): modal overlap issue (#7691) 2024-08-01 08:03:21 +00:00
L-Sun
33fc00f8c7 chore(core): set read-only mode on mobile device (#7651)
Close [BS-795](https://linear.app/affine-design/issue/BS-795/affine-mobile-设置只读模式)

- Set read-only mode on mobile device
- Add mobile only support read-only warning toast
- remove `user-select: none` so that user can select text in read-only mode
2024-08-01 05:22:50 +00:00
donteatfriedrice
3a0241340c fix: optimize ai chat block position calculation (#7683)
[BS-977](https://linear.app/affine-design/issue/BS-977/新生成的分支chat-block应该采用类似mindmap新节点的的定位方式,避免互相遮盖)
2024-08-01 01:37:23 +00:00
L-Sun
2093685385 chore: bump blocksuite (#7680) 2024-07-31 21:57:51 +08:00
pengx17
10e78d617e build(electron): re-enable windows signing (#7682)
ref https://github.com/toeverything/AFFiNE/pull/7645
2024-07-31 10:00:19 +00:00
darkskygit
49529b7e63 fix: make chat button click event work fine (#7658)
fix PD-1504
2024-07-31 09:24:54 +00:00
fundon
48e17fad02 feat(core): experience function color picker (#7677) 2024-07-31 09:07:29 +00:00
forehalo
4ec89ebd69 chore(server): standardize server db names and columns (#7674) 2024-07-31 07:59:23 +00:00
forehalo
c6d4985cba fix: wrong public path for stable env (#7676) 2024-07-31 07:19:32 +00:00
pengx17
280e24934a fix(electron): window theme issue after exiting presentation (#7671) 2024-07-31 07:03:32 +00:00
pengx17
6b8f99c013 fix: using width atom for syncing app headers position (#7666)
may use global state to replace these sidebar state atoms

fix AF-1109
2024-07-31 07:03:30 +00:00
pengx17
812fdd27b5 fix: tab label overflow style when there is only one tab (#7665)
before
![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/d610e543-db1d-4671-a9f4-a31480f26dd7.png)

after
![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/ab1c53b7-8cdd-443b-9371-fdf9bb6c85ae.png)
2024-07-31 07:03:28 +00:00
donteatfriedrice
e1e1b29afb fix: cannot clean chat panel histories (#7673) 2024-07-31 04:14:06 +00:00
donteatfriedrice
52a95af828 fix: ai chat block added later should be with higher index (#7660)
[BS-1000](https://linear.app/affine-design/issue/BS-1000/更好地处理新增内容的层级)
2024-07-31 03:16:34 +00:00
CatsJuice
ede576061d fix(core): adjust sidebar explorer empty status (#7657)
Close AF-1126,AF-1132
2024-07-31 02:41:53 +00:00
CatsJuice
083123cdfb fix(component): adjust renaming style (#7654) 2024-07-31 02:26:34 +00:00
CatsJuice
12a2f929f8 fix(component): stop renaming modal propagation & input auto focus (#7653)
close AF-1125
2024-07-31 02:26:30 +00:00
CatsJuice
c1b26473a9 chore(core): update sidebar all-docs icon (#7626)
close AF-1079
2024-07-31 02:13:02 +00:00
Saul-Mirone
c7217ed443 chore: bump blocksuite 240730 (#7662)
## Features
- https://github.com/toeverything/BlockSuite/pull/7761 @fourdim
- https://github.com/toeverything/BlockSuite/pull/7755 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7598 @Flrande

## Bugfix
- https://github.com/toeverything/BlockSuite/pull/7769 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7766 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7767 @akumatus
- https://github.com/toeverything/BlockSuite/pull/7726 @siyou
- https://github.com/toeverything/BlockSuite/pull/7765 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7763 @fourdim
- https://github.com/toeverything/BlockSuite/pull/7764 @fourdim
- https://github.com/toeverything/BlockSuite/pull/7760 @fourdim
- https://github.com/toeverything/BlockSuite/pull/7742 @fundon
- https://github.com/toeverything/BlockSuite/pull/7754 @fundon
- https://github.com/toeverything/BlockSuite/pull/7756 @donteatfriedrice
- https://github.com/toeverything/BlockSuite/pull/7752 @zzj3720

## Refactor
- https://github.com/toeverything/BlockSuite/pull/7758 @doodlewind
- https://github.com/toeverything/BlockSuite/pull/7750 @doodlewind
- https://github.com/toeverything/BlockSuite/pull/7746 @fundon

## Misc
- https://github.com/toeverything/BlockSuite/pull/7744 @Saul-Mirone
2024-07-31 01:38:53 +00:00
pengx17
cd823fe118 fix(electron): app flicker issue (#7663)
fix AF-1117
2024-07-30 14:19:10 +00:00
EYHN
b343f975fb feat(core): add track events for sidebar (#7659) 2024-07-30 13:22:22 +00:00
EYHN
ab92efcfc0 feat(core): improve mixpanel (#7652)
move @affine/core/utils/mixpanel -> @affine/core/mixpanel

now you can debug mixpanel on browser devtool

![CleanShot 2024-07-30 at 17.32.48@2x.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/g3jz87HxbjOJpXV3FPT7/083c1286-39fd-4569-b4d2-e6e84cf2e797.png)
2024-07-30 13:22:17 +00:00
pengx17
ea7066d02c fix: icon color active style (#7656)
fix PD-1500
2024-07-30 11:51:17 +00:00
pengx17
d80c80ecdd fix: remove shadow for bordered main container (#7655)
fix PD-1498
2024-07-30 11:38:23 +00:00
EYHN
482b5da02f fix(core): fix layout overflow (#7647) 2024-07-30 07:03:07 +00:00
liuyi
fcf0ecbaa2 feat(server): runtime service config (#7644) 2024-07-30 14:58:24 +08:00
liuyi
67248316bd fix(core): scrolling break client style in bordered container (#7650) 2024-07-30 14:57:02 +08:00
liuyi
dd47c14c65 fix(core): wrong padding position when ai panel is active (#7648) 2024-07-30 13:47:17 +08:00
pengx17
63e8729da4 build(electron): skip signing for windows (#7645)
fix AF-1133
2024-07-30 04:56:47 +00:00
renovate
d769c8bb87 chore: bump up rustc version to v1.80.0 (#7628)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [rustc](https://togithub.com/rust-lang/rust) | minor | `1.79.0` -> `1.80.0` |

---

### Release Notes

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

### [`v1.80.0`](https://togithub.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1800-2024-07-25)

[Compare Source](https://togithub.com/rust-lang/rust/compare/1.79.0...1.80.0)

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

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

## Language

-   [Document maximum allocation size](https://togithub.com/rust-lang/rust/pull/116675/)
-   [Allow zero-byte offsets and ZST read/writes on arbitrary pointers](https://togithub.com/rust-lang/rust/pull/117329/)
-   [Support C23's variadics without a named parameter](https://togithub.com/rust-lang/rust/pull/124048/)
-   [Stabilize `exclusive_range_pattern` feature](https://togithub.com/rust-lang/rust/pull/124459/)
-   [Guarantee layout and ABI of `Result` in some scenarios](https://togithub.com/rust-lang/rust/pull/124870)

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

## Compiler

-   [Update cc crate to v1.0.97 allowing additional spectre mitigations on MSVC targets](https://togithub.com/rust-lang/rust/pull/124892/)
-   [Allow field reordering on types marked `repr(packed(1))`](https://togithub.com/rust-lang/rust/pull/125360/)
-   [Add a lint against never type fallback affecting unsafe code](https://togithub.com/rust-lang/rust/pull/123939/)
-   [Disallow cast with trailing braced macro in let-else](https://togithub.com/rust-lang/rust/pull/125049/)
-   [Expand `for_loops_over_fallibles` lint to lint on fallibles behind references.](https://togithub.com/rust-lang/rust/pull/125156/)
-   [self-contained linker: retry linking without `-fuse-ld=lld` on CCs that don't support it](https://togithub.com/rust-lang/rust/pull/125417/)
-   [Do not parse CVarArgs (`...`) as a type in trait bounds](https://togithub.com/rust-lang/rust/pull/125863/)
-   Improvements to LLDB formatting [#&#8203;124458](https://togithub.com/rust-lang/rust/pull/124458) [#&#8203;124500](https://togithub.com/rust-lang/rust/pull/124500)
-   [For the wasm32-wasip2 target default to PIC and do not use `-fuse-ld=lld`](https://togithub.com/rust-lang/rust/pull/124858/)
-   [Add x86\_64-unknown-linux-none as a tier 3 target](https://togithub.com/rust-lang/rust/pull/125023/)
-   [Lint on `foo.into_iter()` resolving to `&Box<[T]>: IntoIterator`](https://togithub.com/rust-lang/rust/pull/124097/)

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

## Libraries

-   [Add `size_of` and `size_of_val` and `align_of` and `align_of_val` to the prelude](https://togithub.com/rust-lang/rust/pull/123168/)
-   [Abort a process when FD ownership is violated](https://togithub.com/rust-lang/rust/pull/124210/)
-   [io::Write::write_fmt: panic if the formatter fails when the stream does not fail](https://togithub.com/rust-lang/rust/pull/125012/)
-   [Panic if `PathBuf::set_extension` would add a path separator](https://togithub.com/rust-lang/rust/pull/125070/)
-   [Add assert_unsafe_precondition to unchecked\_{add,sub,neg,mul,shl,shr} methods](https://togithub.com/rust-lang/rust/pull/121571/)
-   [Update `c_char` on AIX to use the correct type](https://togithub.com/rust-lang/rust/pull/122986/)
-   [`offset_of!` no longer returns a temporary](https://togithub.com/rust-lang/rust/pull/124484/)
-   [Handle sigma in `str.to_lowercase` correctly](https://togithub.com/rust-lang/rust/pull/124773/)
-   [Raise `DEFAULT_MIN_STACK_SIZE` to at least 64KiB](https://togithub.com/rust-lang/rust/pull/126059/)

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

## Stabilized APIs

-   [`impl Default for Rc<CStr>`](https://doc.rust-lang.org/beta/alloc/rc/struct.Rc.html#impl-Default-for-Rc%3CCStr%3E)
-   [`impl Default for Rc<str>`](https://doc.rust-lang.org/beta/alloc/rc/struct.Rc.html#impl-Default-for-Rc%3Cstr%3E)
-   [`impl Default for Rc<[T]>`](https://doc.rust-lang.org/beta/alloc/rc/struct.Rc.html#impl-Default-for-Rc%3C%5BT%5D%3E)
-   [`impl Default for Arc<str>`](https://doc.rust-lang.org/beta/alloc/sync/struct.Arc.html#impl-Default-for-Arc%3Cstr%3E)
-   [`impl Default for Arc<CStr>`](https://doc.rust-lang.org/beta/alloc/sync/struct.Arc.html#impl-Default-for-Arc%3CCStr%3E)
-   [`impl Default for Arc<[T]>`](https://doc.rust-lang.org/beta/alloc/sync/struct.Arc.html#impl-Default-for-Arc%3C%5BT%5D%3E)
-   [`impl IntoIterator for Box<[T]>`](https://doc.rust-lang.org/beta/alloc/boxed/struct.Box.html#impl-IntoIterator-for-Box%3C%5BI%5D,+A%3E)
-   [`impl FromIterator<String> for Box<str>`](https://doc.rust-lang.org/beta/alloc/boxed/struct.Box.html#impl-FromIterator%3CString%3E-for-Box%3Cstr%3E)
-   [`impl FromIterator<char> for Box<str>`](https://doc.rust-lang.org/beta/alloc/boxed/struct.Box.html#impl-FromIterator%3Cchar%3E-for-Box%3Cstr%3E)
-   [`LazyCell`](https://doc.rust-lang.org/beta/core/cell/struct.LazyCell.html)
-   [`LazyLock`](https://doc.rust-lang.org/beta/std/sync/struct.LazyLock.html)
-   [`Duration::div_duration_f32`](https://doc.rust-lang.org/beta/std/time/struct.Duration.html#method.div_duration_f32)
-   [`Duration::div_duration_f64`](https://doc.rust-lang.org/beta/std/time/struct.Duration.html#method.div_duration_f64)
-   [`Option::take_if`](https://doc.rust-lang.org/beta/std/option/enum.Option.html#method.take_if)
-   [`Seek::seek_relative`](https://doc.rust-lang.org/beta/std/io/trait.Seek.html#method.seek_relative)
-   [`BinaryHeap::as_slice`](https://doc.rust-lang.org/beta/std/collections/struct.BinaryHeap.html#method.as_slice)
-   [`NonNull::offset`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.offset)
-   [`NonNull::byte_offset`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.byte_offset)
-   [`NonNull::add`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.add)
-   [`NonNull::byte_add`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.byte_add)
-   [`NonNull::sub`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.sub)
-   [`NonNull::byte_sub`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.byte_sub)
-   [`NonNull::offset_from`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.offset_from)
-   [`NonNull::byte_offset_from`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.byte_offset_from)
-   [`NonNull::read`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.read)
-   [`NonNull::read_volatile`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.read_volatile)
-   [`NonNull::read_unaligned`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.read_unaligned)
-   [`NonNull::write`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.write)
-   [`NonNull::write_volatile`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.write_volatile)
-   [`NonNull::write_unaligned`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.write_unaligned)
-   [`NonNull::write_bytes`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.write_bytes)
-   [`NonNull::copy_to`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.copy_to)
-   [`NonNull::copy_to_nonoverlapping`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.copy_to_nonoverlapping)
-   [`NonNull::copy_from`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.copy_from)
-   [`NonNull::copy_from_nonoverlapping`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.copy_from_nonoverlapping)
-   [`NonNull::replace`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.replace)
-   [`NonNull::swap`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.swap)
-   [`NonNull::drop_in_place`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.drop_in_place)
-   [`NonNull::align_offset`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.align_offset)
-   [`<[T]>::split_at_checked`](https://doc.rust-lang.org/beta/std/primitive.slice.html#method.split_at_checked)
-   [`<[T]>::split_at_mut_checked`](https://doc.rust-lang.org/beta/std/primitive.slice.html#method.split_at_mut_checked)
-   [`str::split_at_checked`](https://doc.rust-lang.org/beta/std/primitive.str.html#method.split_at_checked)
-   [`str::split_at_mut_checked`](https://doc.rust-lang.org/beta/std/primitive.str.html#method.split_at_mut_checked)
-   [`str::trim_ascii`](https://doc.rust-lang.org/beta/std/primitive.str.html#method.trim_ascii)
-   [`str::trim_ascii_start`](https://doc.rust-lang.org/beta/std/primitive.str.html#method.trim_ascii_start)
-   [`str::trim_ascii_end`](https://doc.rust-lang.org/beta/std/primitive.str.html#method.trim_ascii_end)
-   [`<[u8]>::trim_ascii`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.trim_ascii)
-   [`<[u8]>::trim_ascii_start`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.trim_ascii_start)
-   [`<[u8]>::trim_ascii_end`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.trim_ascii_end)
-   [`Ipv4Addr::BITS`](https://doc.rust-lang.org/beta/core/net/struct.Ipv4Addr.html#associatedconstant.BITS)
-   [`Ipv4Addr::to_bits`](https://doc.rust-lang.org/beta/core/net/struct.Ipv4Addr.html#method.to_bits)
-   [`Ipv4Addr::from_bits`](https://doc.rust-lang.org/beta/core/net/struct.Ipv4Addr.html#method.from_bits)
-   [`Ipv6Addr::BITS`](https://doc.rust-lang.org/beta/core/net/struct.Ipv6Addr.html#associatedconstant.BITS)
-   [`Ipv6Addr::to_bits`](https://doc.rust-lang.org/beta/core/net/struct.Ipv6Addr.html#method.to_bits)
-   [`Ipv6Addr::from_bits`](https://doc.rust-lang.org/beta/core/net/struct.Ipv6Addr.html#method.from_bits)
-   [`Vec::<[T; N]>::into_flattened`](https://doc.rust-lang.org/beta/alloc/vec/struct.Vec.html#method.into_flattened)
-   [`<[[T; N]]>::as_flattened`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.as_flattened)
-   [`<[[T; N]]>::as_flattened_mut`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.as_flattened_mut)

These APIs are now stable in const contexts:

-   [`<[T]>::last_chunk`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.last_chunk)
-   [`BinaryHeap::new`](https://doc.rust-lang.org/beta/std/collections/struct.BinaryHeap.html#method.new)

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

## Cargo

-   [Stabilize `-Zcheck-cfg` as always enabled](https://togithub.com/rust-lang/cargo/pull/13571/)
-   [Warn, rather than fail publish, if a target is excluded](https://togithub.com/rust-lang/cargo/pull/13713/)
-   [Add special `check-cfg` lint config for the `unexpected_cfgs` lint](https://togithub.com/rust-lang/cargo/pull/13913/)
-   [Stabilize `cargo update --precise <yanked>`](https://togithub.com/rust-lang/cargo/pull/13974/)
-   [Don't change file permissions on `Cargo.toml` when using `cargo add`](https://togithub.com/rust-lang/cargo/pull/13898/)
-   [Support using `cargo fix` on IPv6-only networks](https://togithub.com/rust-lang/cargo/pull/13907/)

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

## Rustdoc

-   [Allow searching for references](https://togithub.com/rust-lang/rust/pull/124148/)
-   [Stabilize `custom_code_classes_in_docs` feature](https://togithub.com/rust-lang/rust/pull/124577/)
-   [fix: In cross-crate scenarios show enum variants on type aliases of enums](https://togithub.com/rust-lang/rust/pull/125300/)

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

## Compatibility Notes

-   [rustfmt estimates line lengths differently when using non-ascii characters](https://togithub.com/rust-lang/rustfmt/issues/6203)
-   [Type aliases are now handled correctly in orphan check](https://togithub.com/rust-lang/rust/pull/117164/)
-   [Allow instructing rustdoc to read from stdin via `-`](https://togithub.com/rust-lang/rust/pull/124611/)
-   [`std::env::{set_var, remove_var}` can no longer be converted to safe function pointers and no longer implement the `Fn` family of traits](https://togithub.com/rust-lang/rust/pull/124636)
-   [Warn (or error) when `Self` constructor from outer item is referenced in inner nested item](https://togithub.com/rust-lang/rust/pull/124187/)
-   [Turn `indirect_structural_match` and `pointer_structural_match` lints into hard errors](https://togithub.com/rust-lang/rust/pull/124661/)
-   [Make `where_clause_object_safety` lint a regular object safety violation](https://togithub.com/rust-lang/rust/pull/125380/)
-   [Turn `proc_macro_back_compat` lint into a hard error.](https://togithub.com/rust-lang/rust/pull/125596/)
-   [Detect unused structs even when implementing private traits](https://togithub.com/rust-lang/rust/pull/122382/)
-   [`std::sync::ReentrantLockGuard<T>` is no longer `Sync` if `T: !Sync`](https://togithub.com/rust-lang/rust/pull/125527) which means [`std::io::StdoutLock` and `std::io::StderrLock` are no longer Sync](https://togithub.com/rust-lang/rust/issues/127340)

<a id="1.80-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.

-   Misc improvements to size of generated html by rustdoc e.g. [#&#8203;124738](https://togithub.com/rust-lang/rust/pull/124738/) and [#&#8203;123734](https://togithub.com/rust-lang/rust/pull/123734/)
-   [MSVC targets no longer depend on libc](https://togithub.com/rust-lang/rust/pull/124050/)

</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://www.mend.io/free-developer-tools/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40NDAuNyIsInVwZGF0ZWRJblZlciI6IjM3LjQ0MC43IiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2024-07-30 04:42:06 +00:00
Brooooooklyn
f052547b78 ci: attest provenance (#7609) 2024-07-30 04:24:16 +00:00
pengx17
4a2d400087 chore(electron): remove unused ipc code (#7636)
fix AF-1120
2024-07-30 04:12:06 +00:00
pengx17
157cc97a65 test(electron): add test cases for electron tabs (#7635)
fix AF-1000
2024-07-29 11:05:24 +00:00
pengx17
1efc1d0f5b feat(electron): multi tabs support (#7440)
use https://www.electronjs.org/docs/latest/api/web-contents-view to serve different tab views
added tabs view manager in electron to handle multi-view actions and events.

fix AF-1111
fix AF-999
fix PD-1459
fix AF-964
PD-1458
2024-07-29 11:05:22 +00:00
L-Sun
622715d2f3 feat(core): outline viewer (quick toc) (#7614)
Close: [BS-949](https://linear.app/affine-design/issue/BS-949/outline-viewer-加入到affine)

Details  are in this PR: https://github.com/toeverything/blocksuite/pull/7704
2024-07-29 10:19:57 +00:00
EYHN
1b4d65fd64 fix(core): optimize sidebar tag performance (#7633) 2024-07-29 09:57:40 +00:00
EYHN
a0cbf05da8 fix(core): sidebar renaming bug (#7632) 2024-07-29 09:57:37 +00:00
EYHN
0472ffe569 feat(core): support sidebar collapse (#7630) 2024-07-29 09:57:33 +00:00
donteatfriedrice
c5cf8480fc feat: add event tracker for ai chat block (#7637)
[BS-940](https://linear.app/affine-design/issue/BS-940/ai-chat-block-相关埋点)

related: https://github.com/toeverything/blocksuite/pull/7733
2024-07-29 09:42:29 +00:00
donteatfriedrice
ab11f09b83 feat: bump blocksuite (#7634)
## Features
- https://github.com/toeverything/BlockSuite/pull/7704 @L-Sun
- https://github.com/toeverything/BlockSuite/pull/7733 @donteatfriedrice
- https://github.com/toeverything/BlockSuite/pull/7585 @fundon

## Bugfix
- https://github.com/toeverything/BlockSuite/pull/7749 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7745 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7737 @fundon
- https://github.com/toeverything/BlockSuite/pull/7734 @fundon
- https://github.com/toeverything/BlockSuite/pull/7735 @L-Sun
- https://github.com/toeverything/BlockSuite/pull/7730 @fourdim
- https://github.com/toeverything/BlockSuite/pull/7718 @fourdim
- https://github.com/toeverything/BlockSuite/pull/7723 @Flrande

## Refactor
- https://github.com/toeverything/BlockSuite/pull/7738 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7731 @fourdim
- https://github.com/toeverything/BlockSuite/pull/7732 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7724 @doouding
- https://github.com/toeverything/BlockSuite/pull/7725 @doodlewind

## Misc
- https://github.com/toeverything/BlockSuite/pull/7748 @doodlewind
- https://github.com/toeverything/BlockSuite/pull/7721 @fundon
- https://github.com/toeverything/BlockSuite/pull/7729 @fundon
- https://github.com/toeverything/BlockSuite/pull/7728 @L-Sun
- https://github.com/toeverything/BlockSuite/pull/7595 @fundon
2024-07-29 08:42:22 +00:00
CatsJuice
5c62a2b2f5 feat(core): add doc/tag/collection to folders via menu (#7631)
close AF-993,AF-995,AF-997,AF-998
2024-07-29 07:30:20 +00:00
CatsJuice
b9c0119d2c fix(core): adjust believer card dark mode style (#7623) 2024-07-29 07:15:17 +00:00
CatsJuice
214f5fa94d fix(core): sidebar node content should ellipsis when overflowed (#7627) 2024-07-29 06:59:16 +00:00
EYHN
e6f0847ec3 fix(core): make indexer faster (#7629) 2024-07-29 06:43:13 +00:00
renovate
94a55cde62 chore: bump up @blocksuite/icons version to v2.1.61 (#7541)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@blocksuite/icons](https://togithub.com/toeverything/icons) | [`2.1.60` -> `2.1.61`](https://renovatebot.com/diffs/npm/@blocksuite%2ficons/2.1.60/2.1.61) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@blocksuite%2ficons/2.1.61?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@blocksuite%2ficons/2.1.61?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@blocksuite%2ficons/2.1.60/2.1.61?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@blocksuite%2ficons/2.1.60/2.1.61?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@blocksuite/icons](https://togithub.com/toeverything/icons) | [`2.1.59` -> `2.1.61`](https://renovatebot.com/diffs/npm/@blocksuite%2ficons/2.1.59/2.1.61) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@blocksuite%2ficons/2.1.61?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@blocksuite%2ficons/2.1.61?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@blocksuite%2ficons/2.1.59/2.1.61?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@blocksuite%2ficons/2.1.59/2.1.61?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>toeverything/icons (@&#8203;blocksuite/icons)</summary>

### [`v2.1.61`](aba7bbbbc1...280d3edea6)

[Compare Source](aba7bbbbc1...280d3edea6)

</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://www.mend.io/free-developer-tools/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzEuNCIsInVwZGF0ZWRJblZlciI6IjM3LjQ0MC43IiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2024-07-29 03:20:32 +00:00
donteatfriedrice
1575472a3f feat: support chatting in center peek (#7601) 2024-07-26 09:36:26 +00:00
EYHN
6bc5337307 refactor(core): adjust modal animation (#7606)
<div class='graphite__hidden'>
          <div>🎥 Video uploaded on Graphite:</div>
            <a href="https://app.graphite.dev/media/video/g3jz87HxbjOJpXV3FPT7/529d6c3f-4b23-43ac-84cc-171713d3dc72.mp4">
              <img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/g3jz87HxbjOJpXV3FPT7/529d6c3f-4b23-43ac-84cc-171713d3dc72.mp4">
            </a>
          </div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/g3jz87HxbjOJpXV3FPT7/529d6c3f-4b23-43ac-84cc-171713d3dc72.mp4">CleanShot 2024-07-25 at 20.04.01.mp4</video>

When a modal is closed, sometimes its components are completely unmounted from the component tree, making it difficult to animate. This pr defining a custom element as the container of ReactDOM.portal, rewriting the `removeChild` function, and use `startViewTransition` when ReactDOM calls it to implement the animation.

# Save Input

Some inputs use blur event to save data, but when they are unmounted, blur event will not be triggered at all. This pr changes blur event to native addEventListener, which will be called after the DOM element is unmounted, so as to save data in time.
2024-07-26 08:39:34 +00:00
EYHN
3eb09cde5e feat(core): new favorite (#7590) 2024-07-26 08:15:32 +00:00
darkskygit
5207e7abfc fix: repeated slides (#7612)
fix AF-1104
2024-07-26 07:59:06 +00:00
Brooooooklyn
fcc42104fa build: make nightly version shorter (#7613)
Ref: https://github.com/toeverything/AFFiNE/actions/runs/10091231369
2024-07-26 07:45:23 +00:00
Cats Juice
c63d007571 feat(core): add doc/collection/tag select hook (#7593) 2024-07-26 15:44:56 +08:00
fundon
2a2a19fec7 chore(component): add a danger hover style for buttons (#7600)
Like other delete buttons.

https://github.com/user-attachments/assets/85d1c3cb-bd17-4904-b671-c04c76bfd00b
2024-07-26 07:30:10 +00:00
renovate
1306a3be61 chore: bump up all non-major dependencies (#7517)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type | Update |
|---|---|---|---|---|---|---|---|
| [@apollo/server](https://togithub.com/apollographql/apollo-server) ([source](https://togithub.com/apollographql/apollo-server/tree/HEAD/packages/server)) | [`4.10.4` -> `4.10.5`](https://renovatebot.com/diffs/npm/@apollo%2fserver/4.10.4/4.10.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@apollo%2fserver/4.10.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@apollo%2fserver/4.10.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@apollo%2fserver/4.10.4/4.10.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@apollo%2fserver/4.10.4/4.10.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@aws-sdk/client-s3](https://togithub.com/aws/aws-sdk-js-v3/tree/main/clients/client-s3) ([source](https://togithub.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3)) | [`3.614.0` -> `3.620.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fclient-s3/3.614.0/3.620.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fclient-s3/3.620.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fclient-s3/3.620.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fclient-s3/3.614.0/3.620.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fclient-s3/3.614.0/3.620.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@aws-sdk/client-s3](https://togithub.com/aws/aws-sdk-js-v3/tree/main/clients/client-s3) ([source](https://togithub.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3)) | [`3.614.0` -> `3.620.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fclient-s3/3.614.0/3.620.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fclient-s3/3.620.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fclient-s3/3.620.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fclient-s3/3.614.0/3.620.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fclient-s3/3.614.0/3.620.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@emotion/cache](https://togithub.com/emotion-js/emotion/tree/main#readme) ([source](https://togithub.com/emotion-js/emotion)) | [`11.11.0` -> `11.13.1`](https://renovatebot.com/diffs/npm/@emotion%2fcache/11.11.0/11.13.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@emotion%2fcache/11.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@emotion%2fcache/11.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@emotion%2fcache/11.11.0/11.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@emotion%2fcache/11.11.0/11.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@emotion/react](https://togithub.com/emotion-js/emotion/tree/main#readme) ([source](https://togithub.com/emotion-js/emotion)) | [`11.11.4` -> `11.13.0`](https://renovatebot.com/diffs/npm/@emotion%2freact/11.11.4/11.13.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@emotion%2freact/11.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@emotion%2freact/11.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@emotion%2freact/11.11.4/11.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@emotion%2freact/11.11.4/11.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@emotion/react](https://togithub.com/emotion-js/emotion/tree/main#readme) ([source](https://togithub.com/emotion-js/emotion)) | [`11.11.4` -> `11.13.0`](https://renovatebot.com/diffs/npm/@emotion%2freact/11.11.4/11.13.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@emotion%2freact/11.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@emotion%2freact/11.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@emotion%2freact/11.11.4/11.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@emotion%2freact/11.11.4/11.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@emotion/styled](https://togithub.com/emotion-js/emotion/tree/main#readme) ([source](https://togithub.com/emotion-js/emotion)) | [`11.11.5` -> `11.13.0`](https://renovatebot.com/diffs/npm/@emotion%2fstyled/11.11.5/11.13.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@emotion%2fstyled/11.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@emotion%2fstyled/11.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@emotion%2fstyled/11.11.5/11.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@emotion%2fstyled/11.11.5/11.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@floating-ui/dom](https://floating-ui.com) ([source](https://togithub.com/floating-ui/floating-ui/tree/HEAD/packages/dom)) | [`1.6.7` -> `1.6.8`](https://renovatebot.com/diffs/npm/@floating-ui%2fdom/1.6.7/1.6.8) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@floating-ui%2fdom/1.6.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@floating-ui%2fdom/1.6.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@floating-ui%2fdom/1.6.7/1.6.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@floating-ui%2fdom/1.6.7/1.6.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@napi-rs/cli](https://togithub.com/napi-rs/napi-rs) | [`3.0.0-alpha.60` -> `3.0.0-alpha.62`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.0.0-alpha.60/3.0.0-alpha.62) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fcli/3.0.0-alpha.62?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@napi-rs%2fcli/3.0.0-alpha.62?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@napi-rs%2fcli/3.0.0-alpha.60/3.0.0-alpha.62?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@napi-rs%2fcli/3.0.0-alpha.60/3.0.0-alpha.62?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@napi-rs/simple-git](https://togithub.com/Brooooooklyn/simple-git) | [`0.1.16` -> `0.1.17`](https://renovatebot.com/diffs/npm/@napi-rs%2fsimple-git/0.1.16/0.1.17) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fsimple-git/0.1.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@napi-rs%2fsimple-git/0.1.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@napi-rs%2fsimple-git/0.1.16/0.1.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@napi-rs%2fsimple-git/0.1.16/0.1.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@napi-rs/simple-git](https://togithub.com/Brooooooklyn/simple-git) | [`0.1.16` -> `0.1.17`](https://renovatebot.com/diffs/npm/@napi-rs%2fsimple-git/0.1.16/0.1.17) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fsimple-git/0.1.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@napi-rs%2fsimple-git/0.1.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@napi-rs%2fsimple-git/0.1.16/0.1.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@napi-rs%2fsimple-git/0.1.16/0.1.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@nx/vite](https://nx.dev) ([source](https://togithub.com/nrwl/nx/tree/HEAD/packages/vite)) | [`19.4.3` -> `19.5.3`](https://renovatebot.com/diffs/npm/@nx%2fvite/19.4.3/19.5.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nx%2fvite/19.5.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nx%2fvite/19.5.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nx%2fvite/19.4.3/19.5.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nx%2fvite/19.4.3/19.5.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@playwright/test](https://playwright.dev) ([source](https://togithub.com/microsoft/playwright)) | [`=1.44.1` -> `=1.45.3`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.44.1/1.45.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.45.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@playwright%2ftest/1.45.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@playwright%2ftest/1.44.1/1.45.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.44.1/1.45.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@prisma/client](https://www.prisma.io) ([source](https://togithub.com/prisma/prisma/tree/HEAD/packages/client)) | [`5.16.2` -> `5.17.0`](https://renovatebot.com/diffs/npm/@prisma%2fclient/5.16.2/5.17.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@prisma%2fclient/5.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@prisma%2fclient/5.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@prisma%2fclient/5.16.2/5.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@prisma%2fclient/5.16.2/5.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@prisma/instrumentation](https://www.prisma.io) ([source](https://togithub.com/prisma/prisma/tree/HEAD/packages/instrumentation)) | [`5.16.2` -> `5.17.0`](https://renovatebot.com/diffs/npm/@prisma%2finstrumentation/5.16.2/5.17.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@prisma%2finstrumentation/5.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@prisma%2finstrumentation/5.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@prisma%2finstrumentation/5.16.2/5.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@prisma%2finstrumentation/5.16.2/5.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@sentry/react](https://togithub.com/getsentry/sentry-javascript/tree/master/packages/react) ([source](https://togithub.com/getsentry/sentry-javascript)) | [`8.17.0` -> `8.20.0`](https://renovatebot.com/diffs/npm/@sentry%2freact/8.17.0/8.20.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2freact/8.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2freact/8.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2freact/8.17.0/8.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2freact/8.17.0/8.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@sentry/react](https://togithub.com/getsentry/sentry-javascript/tree/master/packages/react) ([source](https://togithub.com/getsentry/sentry-javascript)) | [`8.17.0` -> `8.20.0`](https://renovatebot.com/diffs/npm/@sentry%2freact/8.17.0/8.20.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2freact/8.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2freact/8.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2freact/8.17.0/8.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2freact/8.17.0/8.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@swc/core](https://swc.rs) ([source](https://togithub.com/swc-project/swc)) | [`1.6.13` -> `1.7.2`](https://renovatebot.com/diffs/npm/@swc%2fcore/1.6.13/1.7.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@swc%2fcore/1.7.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@swc%2fcore/1.7.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@swc%2fcore/1.6.13/1.7.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@swc%2fcore/1.6.13/1.7.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@toeverything/theme](https://togithub.com/toeverything/design) | [`1.0.0` -> `1.0.1`](https://renovatebot.com/diffs/npm/@toeverything%2ftheme/1.0.0/1.0.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@toeverything%2ftheme/1.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@toeverything%2ftheme/1.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@toeverything%2ftheme/1.0.0/1.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@toeverything%2ftheme/1.0.0/1.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@types/eslint](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/eslint) ([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/eslint)) | [`8.56.10` -> `8.56.11`](https://renovatebot.com/diffs/npm/@types%2feslint/8.56.10/8.56.11) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2feslint/8.56.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2feslint/8.56.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2feslint/8.56.10/8.56.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2feslint/8.56.10/8.56.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@types/node](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`20.14.10` -> `20.14.12`](https://renovatebot.com/diffs/npm/@types%2fnode/20.14.10/20.14.12) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/20.14.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/20.14.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/20.14.10/20.14.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/20.14.10/20.14.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [dayjs](https://day.js.org) ([source](https://togithub.com/iamkun/dayjs)) | [`1.11.11` -> `1.11.12`](https://renovatebot.com/diffs/npm/dayjs/1.11.11/1.11.12) | [![age](https://developer.mend.io/api/mc/badges/age/npm/dayjs/1.11.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/dayjs/1.11.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/dayjs/1.11.11/1.11.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/dayjs/1.11.11/1.11.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [electron](https://togithub.com/electron/electron) | [`~30.2.0` -> `~30.3.0`](https://renovatebot.com/diffs/npm/electron/30.2.0/30.3.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/electron/30.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/electron/30.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/electron/30.2.0/30.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/electron/30.2.0/30.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [electron-log](https://togithub.com/megahertz/electron-log) | [`5.1.5` -> `5.1.7`](https://renovatebot.com/diffs/npm/electron-log/5.1.5/5.1.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/electron-log/5.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/electron-log/5.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/electron-log/5.1.5/5.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/electron-log/5.1.5/5.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [embla-carousel-react](https://www.embla-carousel.com) ([source](https://togithub.com/davidjerleke/embla-carousel)) | [`8.1.6` -> `8.1.7`](https://renovatebot.com/diffs/npm/embla-carousel-react/8.1.6/8.1.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/embla-carousel-react/8.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/embla-carousel-react/8.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/embla-carousel-react/8.1.6/8.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/embla-carousel-react/8.1.6/8.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [file-type](https://togithub.com/sindresorhus/file-type) | [`19.1.1` -> `19.3.0`](https://renovatebot.com/diffs/npm/file-type/19.1.1/19.3.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/file-type/19.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/file-type/19.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/file-type/19.1.1/19.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/file-type/19.1.1/19.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [html-validate](https://html-validate.org) ([source](https://gitlab.com/html-validate/html-validate)) | [`8.20.1` -> `8.21.0`](https://renovatebot.com/diffs/npm/html-validate/8.20.1/8.21.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/html-validate/8.21.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/html-validate/8.21.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/html-validate/8.20.1/8.21.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/html-validate/8.20.1/8.21.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [husky](https://togithub.com/typicode/husky) | [`9.0.11` -> `9.1.2`](https://renovatebot.com/diffs/npm/husky/9.0.11/9.1.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/husky/9.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/husky/9.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/husky/9.0.11/9.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/husky/9.0.11/9.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [i18next](https://www.i18next.com) ([source](https://togithub.com/i18next/i18next)) | [`23.12.1` -> `23.12.2`](https://renovatebot.com/diffs/npm/i18next/23.12.1/23.12.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/i18next/23.12.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/i18next/23.12.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/i18next/23.12.1/23.12.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/i18next/23.12.1/23.12.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [jotai](https://togithub.com/pmndrs/jotai) | [`2.9.0` -> `2.9.1`](https://renovatebot.com/diffs/npm/jotai/2.9.0/2.9.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/jotai/2.9.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jotai/2.9.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jotai/2.9.0/2.9.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jotai/2.9.0/2.9.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [jotai](https://togithub.com/pmndrs/jotai) | [`2.9.0` -> `2.9.1`](https://renovatebot.com/diffs/npm/jotai/2.9.0/2.9.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/jotai/2.9.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jotai/2.9.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jotai/2.9.0/2.9.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jotai/2.9.0/2.9.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [lucide-react](https://lucide.dev) ([source](https://togithub.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react)) | [`^0.408.0` -> `^0.416.0`](https://renovatebot.com/diffs/npm/lucide-react/0.408.0/0.416.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lucide-react/0.416.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lucide-react/0.416.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lucide-react/0.408.0/0.416.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lucide-react/0.408.0/0.416.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [mixpanel-browser](https://togithub.com/mixpanel/mixpanel-js) | [`2.53.0` -> `2.54.0`](https://renovatebot.com/diffs/npm/mixpanel-browser/2.53.0/2.54.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/mixpanel-browser/2.54.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/mixpanel-browser/2.54.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/mixpanel-browser/2.53.0/2.54.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/mixpanel-browser/2.53.0/2.54.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [msw](https://mswjs.io) ([source](https://togithub.com/mswjs/msw)) | [`2.3.1` -> `2.3.4`](https://renovatebot.com/diffs/npm/msw/2.3.1/2.3.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/msw/2.3.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/msw/2.3.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/msw/2.3.1/2.3.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/msw/2.3.1/2.3.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [napi](https://togithub.com/napi-rs/napi-rs) | `3.0.0-alpha.7` -> `3.0.0-alpha.8` | [![age](https://developer.mend.io/api/mc/badges/age/crate/napi/3.0.0-alpha.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi/3.0.0-alpha.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi/3.0.0-alpha.7/3.0.0-alpha.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi/3.0.0-alpha.7/3.0.0-alpha.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [napi-derive](https://togithub.com/napi-rs/napi-rs) | `3.0.0-alpha.6` -> `3.0.0-alpha.7` | [![age](https://developer.mend.io/api/mc/badges/age/crate/napi-derive/3.0.0-alpha.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi-derive/3.0.0-alpha.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi-derive/3.0.0-alpha.6/3.0.0-alpha.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi-derive/3.0.0-alpha.6/3.0.0-alpha.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [node](https://nodejs.org) ([source](https://togithub.com/nodejs/node)) | `20.15.1` -> `20.16.0` | [![age](https://developer.mend.io/api/mc/badges/age/node-version/node/v20.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/node-version/node/v20.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/node-version/node/v20.15.1/v20.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/node-version/node/v20.15.1/v20.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |  | minor |
| [nx](https://nx.dev) ([source](https://togithub.com/nrwl/nx/tree/HEAD/packages/nx)) | [`19.4.3` -> `19.5.3`](https://renovatebot.com/diffs/npm/nx/19.4.3/19.5.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/nx/19.5.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/nx/19.5.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/nx/19.4.3/19.5.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/nx/19.4.3/19.5.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [openai](https://togithub.com/openai/openai-node) | [`4.52.7` -> `4.53.1`](https://renovatebot.com/diffs/npm/openai/4.52.7/4.53.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/openai/4.53.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/openai/4.53.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/openai/4.52.7/4.53.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/openai/4.52.7/4.53.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| openresty/openresty | `1.25.3.1-0-buster` -> `1.25.3.2-0-buster` | [![age](https://developer.mend.io/api/mc/badges/age/docker/openresty%2fopenresty/1.25.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/docker/openresty%2fopenresty/1.25.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/docker/openresty%2fopenresty/1.25.3.1/1.25.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/openresty%2fopenresty/1.25.3.1/1.25.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | final | patch |
| [playwright](https://playwright.dev) ([source](https://togithub.com/microsoft/playwright)) | [`=1.44.1` -> `=1.45.3`](https://renovatebot.com/diffs/npm/playwright/1.44.1/1.45.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/playwright/1.45.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/playwright/1.45.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/playwright/1.44.1/1.45.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/playwright/1.44.1/1.45.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [postcss](https://postcss.org/) ([source](https://togithub.com/postcss/postcss)) | [`8.4.39` -> `8.4.40`](https://renovatebot.com/diffs/npm/postcss/8.4.39/8.4.40) | [![age](https://developer.mend.io/api/mc/badges/age/npm/postcss/8.4.40?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/postcss/8.4.40?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/postcss/8.4.39/8.4.40?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/postcss/8.4.39/8.4.40?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [prisma](https://www.prisma.io) ([source](https://togithub.com/prisma/prisma/tree/HEAD/packages/cli)) | [`5.16.2` -> `5.17.0`](https://renovatebot.com/diffs/npm/prisma/5.16.2/5.17.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/prisma/5.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/prisma/5.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/prisma/5.16.2/5.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prisma/5.16.2/5.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [react-resizable-panels](https://togithub.com/bvaughn/react-resizable-panels) | [`2.0.20` -> `2.0.22`](https://renovatebot.com/diffs/npm/react-resizable-panels/2.0.20/2.0.22) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-resizable-panels/2.0.22?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-resizable-panels/2.0.22?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-resizable-panels/2.0.20/2.0.22?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-resizable-panels/2.0.20/2.0.22?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [react-router-dom](https://togithub.com/remix-run/react-router) ([source](https://togithub.com/remix-run/react-router/tree/HEAD/packages/react-router-dom)) | [`6.24.1` -> `6.25.1`](https://renovatebot.com/diffs/npm/react-router-dom/6.24.1/6.25.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-router-dom/6.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-router-dom/6.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-router-dom/6.24.1/6.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-router-dom/6.24.1/6.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [react-router-dom](https://togithub.com/remix-run/react-router) ([source](https://togithub.com/remix-run/react-router/tree/HEAD/packages/react-router-dom)) | [`6.24.1` -> `6.25.1`](https://renovatebot.com/diffs/npm/react-router-dom/6.24.1/6.25.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-router-dom/6.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-router-dom/6.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-router-dom/6.24.1/6.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-router-dom/6.24.1/6.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [react-virtuoso](https://virtuoso.dev/) ([source](https://togithub.com/petyosi/react-virtuoso)) | [`4.7.12` -> `4.7.13`](https://renovatebot.com/diffs/npm/react-virtuoso/4.7.12/4.7.13) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-virtuoso/4.7.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-virtuoso/4.7.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-virtuoso/4.7.12/4.7.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-virtuoso/4.7.12/4.7.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [semver](https://togithub.com/npm/node-semver) | [`7.6.2` -> `7.6.3`](https://renovatebot.com/diffs/npm/semver/7.6.2/7.6.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/semver/7.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/semver/7.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/semver/7.6.2/7.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/semver/7.6.2/7.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [semver](https://togithub.com/npm/node-semver) | [`7.6.2` -> `7.6.3`](https://renovatebot.com/diffs/npm/semver/7.6.2/7.6.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/semver/7.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/semver/7.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/semver/7.6.2/7.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/semver/7.6.2/7.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [sqlx](https://togithub.com/launchbadge/sqlx) | `0.7` -> `0.8` | [![age](https://developer.mend.io/api/mc/badges/age/crate/sqlx/0.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/sqlx/0.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/sqlx/0.7.4/0.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/sqlx/0.7.4/0.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | minor |
| [stripe](https://togithub.com/stripe/stripe-node) | [`16.2.0` -> `16.5.0`](https://renovatebot.com/diffs/npm/stripe/16.2.0/16.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/stripe/16.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/stripe/16.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/stripe/16.2.0/16.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/stripe/16.2.0/16.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [tailwindcss](https://tailwindcss.com) ([source](https://togithub.com/tailwindlabs/tailwindcss)) | [`3.4.5` -> `3.4.7`](https://renovatebot.com/diffs/npm/tailwindcss/3.4.5/3.4.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/tailwindcss/3.4.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tailwindcss/3.4.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tailwindcss/3.4.5/3.4.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tailwindcss/3.4.5/3.4.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [tokio](https://tokio.rs) ([source](https://togithub.com/tokio-rs/tokio)) | `1.38.0` -> `1.39.1` | [![age](https://developer.mend.io/api/mc/badges/age/crate/tokio/1.39.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/tokio/1.39.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/tokio/1.38.0/1.39.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/tokio/1.38.0/1.39.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dev-dependencies | minor |
| [tokio](https://tokio.rs) ([source](https://togithub.com/tokio-rs/tokio)) | `1.38.0` -> `1.39.1` | [![age](https://developer.mend.io/api/mc/badges/age/crate/tokio/1.39.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/tokio/1.39.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/tokio/1.38.0/1.39.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/tokio/1.38.0/1.39.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | minor |
| [typedoc](https://typedoc.org) ([source](https://togithub.com/TypeStrong/TypeDoc)) | [`0.26.4` -> `0.26.5`](https://renovatebot.com/diffs/npm/typedoc/0.26.4/0.26.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/typedoc/0.26.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/typedoc/0.26.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/typedoc/0.26.4/0.26.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typedoc/0.26.4/0.26.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [typescript](https://www.typescriptlang.org/) ([source](https://togithub.com/Microsoft/TypeScript)) | [`5.5.3` -> `5.5.4`](https://renovatebot.com/diffs/npm/typescript/5.5.3/5.5.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/typescript/5.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/typescript/5.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/typescript/5.5.3/5.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript/5.5.3/5.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [typescript](https://www.typescriptlang.org/) ([source](https://togithub.com/Microsoft/TypeScript)) | [`5.5.3` -> `5.5.4`](https://renovatebot.com/diffs/npm/typescript/5.5.3/5.5.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/typescript/5.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/typescript/5.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/typescript/5.5.3/5.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript/5.5.3/5.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [undici](https://undici.nodejs.org) ([source](https://togithub.com/nodejs/undici)) | [`6.19.2` -> `6.19.4`](https://renovatebot.com/diffs/npm/undici/6.19.2/6.19.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/undici/6.19.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/undici/6.19.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/undici/6.19.2/6.19.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/undici/6.19.2/6.19.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [undici](https://undici.nodejs.org) ([source](https://togithub.com/nodejs/undici)) | [`6.19.2` -> `6.19.4`](https://renovatebot.com/diffs/npm/undici/6.19.2/6.19.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/undici/6.19.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/undici/6.19.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/undici/6.19.2/6.19.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/undici/6.19.2/6.19.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [vite](https://vitejs.dev) ([source](https://togithub.com/vitejs/vite/tree/HEAD/packages/vite)) | [`5.3.3` -> `5.3.5`](https://renovatebot.com/diffs/npm/vite/5.3.3/5.3.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vite/5.3.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vite/5.3.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vite/5.3.3/5.3.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vite/5.3.3/5.3.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [wrangler](https://togithub.com/cloudflare/workers-sdk) ([source](https://togithub.com/cloudflare/workers-sdk/tree/HEAD/packages/wrangler)) | [`3.64.0` -> `3.67.0`](https://renovatebot.com/diffs/npm/wrangler/3.64.0/3.67.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/wrangler/3.67.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/wrangler/3.67.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/wrangler/3.64.0/3.67.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/wrangler/3.64.0/3.67.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |

---

### Release Notes

<details>
<summary>apollographql/apollo-server (@&#8203;apollo/server)</summary>

### [`v4.10.5`](https://togithub.com/apollographql/apollo-server/blob/HEAD/packages/server/CHANGELOG.md#4105)

[Compare Source](https://togithub.com/apollographql/apollo-server/compare/@apollo/server@4.10.4...@apollo/server@4.10.5)

##### Patch Changes

-   [#&#8203;7821](https://togithub.com/apollographql/apollo-server/pull/7821) [`b2e15e7`](b2e15e7db6) Thanks [@&#8203;renovate](https://togithub.com/apps/renovate)! - Non-major dependency updates

-   [#&#8203;7900](https://togithub.com/apollographql/apollo-server/pull/7900) [`86d7111`](86d711133f) Thanks [@&#8203;trevor-scheer](https://togithub.com/trevor-scheer)! - Inline a small dependency that was causing build issues for ESM projects

</details>

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

### [`v3.620.0`](https://togithub.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#36200-2024-07-25)

[Compare Source](https://togithub.com/aws/aws-sdk-js-v3/compare/v3.617.0...v3.620.0)

**Note:** Version bump only for package [@&#8203;aws-sdk/client-s3](https://togithub.com/aws-sdk/client-s3)

### [`v3.617.0`](https://togithub.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#36170-2024-07-22)

[Compare Source](https://togithub.com/aws/aws-sdk-js-v3/compare/v3.616.0...v3.617.0)

**Note:** Version bump only for package [@&#8203;aws-sdk/client-s3](https://togithub.com/aws-sdk/client-s3)

### [`v3.616.0`](https://togithub.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#36160-2024-07-18)

[Compare Source](https://togithub.com/aws/aws-sdk-js-v3/compare/v3.614.0...v3.616.0)

**Note:** Version bump only for package [@&#8203;aws-sdk/client-s3](https://togithub.com/aws-sdk/client-s3)

</details>

<details>
<summary>emotion-js/emotion (@&#8203;emotion/cache)</summary>

### [`v11.13.1`](https://togithub.com/emotion-js/emotion/releases/tag/%40emotion/cache%4011.13.1)

[Compare Source](https://togithub.com/emotion-js/emotion/compare/@emotion/cache@11.13.0...@emotion/cache@11.13.1)

##### Patch Changes

-   [#&#8203;3219](https://togithub.com/emotion-js/emotion/pull/3219) [`c72d279`](c72d2798fe) Thanks [@&#8203;Andarist](https://togithub.com/Andarist)! - Removed incorrect tripleslash directive referencing node types

### [`v11.13.0`](https://togithub.com/emotion-js/emotion/compare/@emotion/jest@11.11.0...70ad1d33892091e9bc478792fa7da662ed63476a)

[Compare Source](https://togithub.com/emotion-js/emotion/compare/@emotion/cache@11.12.0...@emotion/cache@11.13.0)

### [`v11.12.0`](https://togithub.com/emotion-js/emotion/compare/@emotion/babel-preset-css-prop@11.11.0...d57cfcb6daf48fc5458f91b4db2e072fbc2863e4)

[Compare Source](https://togithub.com/emotion-js/emotion/compare/@emotion/cache@11.11.0...@emotion/cache@11.12.0)

</details>

<details>
<summary>floating-ui/floating-ui (@&#8203;floating-ui/dom)</summary>

### [`v1.6.8`](https://togithub.com/floating-ui/floating-ui/blob/HEAD/packages/dom/CHANGELOG.md#168)

[Compare Source](https://togithub.com/floating-ui/floating-ui/compare/@floating-ui/dom@1.6.7...@floating-ui/dom@1.6.8)

##### Patch Changes

-   Update dependencies: `@floating-ui/utils@0.2.5`

</details>

<details>
<summary>napi-rs/napi-rs (@&#8203;napi-rs/cli)</summary>

### [`v3.0.0-alpha.62`](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.61...@napi-rs/cli@3.0.0-alpha.62)

[Compare Source](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.61...@napi-rs/cli@3.0.0-alpha.62)

### [`v3.0.0-alpha.61`](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.60...@napi-rs/cli@3.0.0-alpha.61)

[Compare Source](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.60...@napi-rs/cli@3.0.0-alpha.61)

</details>

<details>
<summary>Brooooooklyn/simple-git (@&#8203;napi-rs/simple-git)</summary>

### [`v0.1.17`](https://togithub.com/Brooooooklyn/simple-git/releases/tag/v0.1.17)

[Compare Source](https://togithub.com/Brooooooklyn/simple-git/compare/v0.1.16...v0.1.17)

##### What's Changed

-   chore(deps): update yarn to v4.1.0 by [@&#8203;renovate](https://togithub.com/renovate) in [https://github.com/Brooooooklyn/simple-git/pull/37](https://togithub.com/Brooooooklyn/simple-git/pull/37)
-   chore(deps): lock file maintenance by [@&#8203;renovate](https://togithub.com/renovate) in [https://github.com/Brooooooklyn/simple-git/pull/38](https://togithub.com/Brooooooklyn/simple-git/pull/38)
-   chore(deps): lock file maintenance by [@&#8203;renovate](https://togithub.com/renovate) in [https://github.com/Brooooooklyn/simple-git/pull/39](https://togithub.com/Brooooooklyn/simple-git/pull/39)
-   feat: impl tags features by [@&#8203;Brooooooklyn](https://togithub.com/Brooooooklyn) in [https://github.com/Brooooooklyn/simple-git/pull/40](https://togithub.com/Brooooooklyn/simple-git/pull/40)
-   fix: impl Send for GitDateTask by [@&#8203;Brooooooklyn](https://togithub.com/Brooooooklyn) in [https://github.com/Brooooooklyn/simple-git/pull/43](https://togithub.com/Brooooooklyn/simple-git/pull/43)
-   chore(deps): update yarn to v4.1.1 by [@&#8203;renovate](https://togithub.com/renovate) in [https://github.com/Brooooooklyn/simple-git/pull/42](https://togithub.com/Brooooooklyn/simple-git/pull/42)
-   chore(deps): lock file maintenance by [@&#8203;renovate](https://togithub.com/renovate) in [https://github.com/Brooooooklyn/simple-git/pull/41](https://togithub.com/Brooooooklyn/simple-git/pull/41)
-   chore(deps): lock file maintenance by [@&#8203;renovate](https://togithub.com/renovate) in [https://github.com/Brooooooklyn/simple-git/pull/44](https://togithub.com/Brooooooklyn/simple-git/pull/44)
-   chore(deps): lock file maintenance by [@&#8203;renovate](https://togithub.com/renovate) in [https://github.com/Brooooooklyn/simple-git/pull/45](https://togithub.com/Brooooooklyn/simple-git/pull/45)
-   chore: upgrade deps by [@&#8203;Brooooooklyn](https://togithub.com/Brooooooklyn) in [https://github.com/Brooooooklyn/simple-git/pull/46](https://togithub.com/Brooooooklyn/simple-git/pull/46)
-   chore(deps): update yarn to v4.2.1 by [@&#8203;renovate](https://togithub.com/renovate) in [https://github.com/Brooooooklyn/simple-git/pull/47](https://togithub.com/Brooooooklyn/simple-git/pull/47)
-   chore: remove npm dirs by [@&#8203;Brooooooklyn](https://togithub.com/Brooooooklyn) in [https://github.com/Brooooooklyn/simple-git/pull/48](https://togithub.com/Brooooooklyn/simple-git/pull/48)
-   chore(deps): update yarn to v4.2.2 by [@&#8203;renovate](https://togithub.com/renovate) in [https://github.com/Brooooooklyn/simple-git/pull/49](https://togithub.com/Brooooooklyn/simple-git/pull/49)
-   chore(deps): lock file maintenance by [@&#8203;renovate](https://togithub.com/renovate) in [https://github.com/Brooooooklyn/simple-git/pull/50](https://togithub.com/Brooooooklyn/simple-git/pull/50)
-   chore(deps): update yarn to v4.3.0 by [@&#8203;renovate](https://togithub.com/renovate) in [https://github.com/Brooooooklyn/simple-git/pull/51](https://togithub.com/Brooooooklyn/simple-git/pull/51)
-   chore(deps): update yarn to v4.3.1 by [@&#8203;renovate](https://togithub.com/renovate) in [https://github.com/Brooooooklyn/simple-git/pull/53](https://togithub.com/Brooooooklyn/simple-git/pull/53)
-   chore: update git2 by [@&#8203;Brooooooklyn](https://togithub.com/Brooooooklyn) in [https://github.com/Brooooooklyn/simple-git/pull/54](https://togithub.com/Brooooooklyn/simple-git/pull/54)
-   chore(deps): lock file maintenance by [@&#8203;renovate](https://togithub.com/renovate) in [https://github.com/Brooooooklyn/simple-git/pull/55](https://togithub.com/Brooooooklyn/simple-git/pull/55)
-   build: support powerpc64le-unknown-linux-gnu and s390x-unknown-linux-gnu by [@&#8203;Brooooooklyn](https://togithub.com/Brooooooklyn) in [https://github.com/Brooooooklyn/simple-git/pull/56](https://togithub.com/Brooooooklyn/simple-git/pull/56)

**Full Changelog**: https://github.com/Brooooooklyn/simple-git/compare/v0.1.16...v0.1.17

</details>

<details>
<summary>nrwl/nx (@&#8203;nx/vite)</summary>

### [`v19.5.3`](https://togithub.com/nrwl/nx/releases/tag/19.5.3)

[Compare Source](https://togithub.com/nrwl/nx/compare/19.5.2...19.5.3)

#### 19.5.3 (2024-07-24)

##### 🚀 Features

-   **core:** error when running atomized tasks outside of DTE ([#&#8203;26898](https://togithub.com/nrwl/nx/pull/26898))
-   **core:** update pnpm/action-setup to v4 in ci-workflow generator ([#&#8203;26838](https://togithub.com/nrwl/nx/pull/26838))
-   **js:** add scopes option for verdaccio ([#&#8203;26918](https://togithub.com/nrwl/nx/pull/26918))
-   **misc:** prioritize github onboarding flow ([#&#8203;27085](https://togithub.com/nrwl/nx/pull/27085))
-   **misc:** only create one commit with cloud onboard URL on cnw ([#&#8203;27093](https://togithub.com/nrwl/nx/pull/27093))
-   **module-federation:** improve console output for remote build errors ([#&#8203;26711](https://togithub.com/nrwl/nx/pull/26711))
-   **module-federation:** support setremotedefinition api ([#&#8203;27051](https://togithub.com/nrwl/nx/pull/27051))
-   **nx-dev:** Migrate careers from nx.app ([#&#8203;27020](https://togithub.com/nrwl/nx/pull/27020))
-   **nx-dev:** reprioritize customer logos on landing page ([#&#8203;27061](https://togithub.com/nrwl/nx/pull/27061))

##### 🩹 Fixes

-   **angular:** remove unnecessary esbuild peer dependency ([#&#8203;27046](https://togithub.com/nrwl/nx/pull/27046))
-   **bundling:** prevent exports overwrite with esbuild ([#&#8203;27047](https://togithub.com/nrwl/nx/pull/27047))
-   **bundling:** get workspace package prefix length correctly [#&#8203;20817](https://togithub.com/nrwl/nx/issues/20817) ([#&#8203;27092](https://togithub.com/nrwl/nx/pull/27092), [#&#8203;20817](https://togithub.com/nrwl/nx/issues/20817))
-   **core:** fix watch daemon error ([#&#8203;27067](https://togithub.com/nrwl/nx/pull/27067))
-   **core:** ensure output paths returned are unique ([#&#8203;18207](https://togithub.com/nrwl/nx/pull/18207))
-   **core:** use argument length that match the actual
2024-07-26 07:13:05 +00:00
darkskygit
3f0e4c04d7 feat: refector prompt refresh (#7605) 2024-07-26 04:51:07 +00:00
EYHN
54da85ec62 feat(core): init organize (#7456) 2024-07-26 04:35:32 +00:00
akumatus
b26b0c3a22 fix: journal doc title in at menu (#7608)
Fix issue [BS-900](https://linear.app/affine-design/issue/BS-900).

### What Changed?
- Add i18n for journal doc title and empty doc title.
2024-07-26 04:21:03 +00:00
darkskygit
470262d400 feat: migrate fal workflow to server (#7581) 2024-07-26 04:04:39 +00:00
CatsJuice
cb0d91facd feat(core): support lifetime subscription from external link (#7585)
close AF-1101
2024-07-26 03:49:17 +00:00
CatsJuice
0617061c5b fix(core): do not clip center-peek controls to make it appear more quickly (#7572)
fix AF-1084

![CleanShot 2024-07-23 at 11.11.03.gif](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/LakojjjzZNf6ogjOVwKE/91d593b6-c400-4602-9eab-abb9c0b0f63b.gif)
2024-07-26 03:35:00 +00:00
CatsJuice
8646221ee8 feat(infra): add ability to mount nodes to nearest FrameworkScope root (#7551)
![CleanShot 2024-07-19 at 12.52.08.gif](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/LakojjjzZNf6ogjOVwKE/dc5b8dc6-b7b2-4db2-83d5-7601c3f966d8.gif)
2024-07-26 03:19:27 +00:00
CatsJuice
22c36102b9 feat(core): move sidebar new page button beside quick-search (#7578)
close AF-1078
2024-07-26 03:04:10 +00:00
CatsJuice
a714961b20 feat(core): adjust subscription related mixpanel (#7536) 2024-07-26 02:49:15 +00:00
EYHN
549e7befed fix(core): stuck when quick switch doc mode (#7599) 2024-07-25 12:21:21 +00:00
CatsJuice
11a2dc7d7f feat(core): bump theme (#7587)
close AF-1108
2024-07-25 08:00:55 +00:00
L-Sun
662a3d4b76 refactor(core): use lit customelement decorator (#7560)
Close: [BS-585](https://linear.app/affine-design/issue/BS-585/更新affine侧lit自定义yuan素的写法)

### What changes:
- using `@customElement(xxx)` instead of `window.customElements.define(xxx)`
- remove `registerOutlinePanelComponents` and `registerFramePanelComponents`, Related PR https://github.com/toeverything/blocksuite/pull/7700
2024-07-25 07:45:41 +00:00
donteatfriedrice
dd6901fe15 feat: bump blocksuite (#7603)
## Features
- https://github.com/toeverything/BlockSuite/pull/7717 @L-Sun
- https://github.com/toeverything/BlockSuite/pull/7691 @L-Sun

## Bugfix
- https://github.com/toeverything/BlockSuite/pull/7720 @akumatus
- https://github.com/toeverything/BlockSuite/pull/7719 @doouding

## Refactor
- https://github.com/toeverything/BlockSuite/pull/7703 @donteatfriedrice
- https://github.com/toeverything/BlockSuite/pull/7694 @doouding
- https://github.com/toeverything/BlockSuite/pull/7700 @L-Sun
- https://github.com/toeverything/BlockSuite/pull/7716 @doodlewind

## Misc
2024-07-25 07:26:40 +00:00
forehalo
2b42f84815 ci: wrong installer version used (#7602) 2024-07-25 06:29:22 +00:00
Brooooooklyn
8f60626291 chore: custom telemetry endpoint (#7596) 2024-07-25 03:17:32 +00:00
akumatus
1871c15cd0 feat: custom the items of linked menu by configuration (#7554)
Close issue [BS-719](https://linear.app/affine-design/issue/BS-719) and [BS-791](https://linear.app/affine-design/issue/BS-791).
Related PR in [BlockSuite](https://github.com/toeverything/blocksuite/pull/7693).

### What Changed?
- Support config in BlockSpec
-  AFFiNE’s Custom @Menu
   - ignore docs in trash
   - ignore unedited journal
   - customized journal icon

![截屏2024-07-19 16.03.55.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/cdf6f198-8288-4152-8893-65f17bc9983c.png)

### What's next?
- getMenus returns an observable array
- Add commands field to BlockSpec and encapsulated insertLinkedNode into a command
2024-07-24 17:10:37 +00:00
LongYinan
20c4224e2d build: fix undefined entry point (#7594) 2024-07-24 18:23:09 +08:00
forehalo
25b74467ce fix(server): create dev user (#7592) 2024-07-24 10:01:53 +00:00
donteatfriedrice
9d446469f8 feat: support save chat to block (#7481) 2024-07-24 09:46:36 +00:00
EYHN
98281a6394 refactor(component): adjust confirm modal api (#7589) 2024-07-24 08:18:33 +00:00
EYHN
6ca7c41861 fix(component): button icon color (#7588) 2024-07-24 08:03:02 +00:00
CatsJuice
b1380ce81f feat(core): adjust left-sidebar min-width to 248px (#7575)
close AF-1094
2024-07-24 02:43:25 +00:00
CatsJuice
091f5eec01 fix(core): remove hover state for ai-usage block in sidebar avtar menu (#7573)
fix AF-1059
2024-07-24 02:27:04 +00:00
akumatus
f89945e730 chore: bump blocksuite (#7579)
## Features
- https://github.com/toeverything/BlockSuite/pull/7693 @akumatus

## Bugfix
- https://github.com/toeverything/BlockSuite/pull/7713 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7710 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7709 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7707 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7689 @fourdim
- https://github.com/toeverything/BlockSuite/pull/7699 @Saul-Mirone

## Refactor
- https://github.com/toeverything/BlockSuite/pull/7715 @doodlewind
- https://github.com/toeverything/BlockSuite/pull/7714 @doodlewind
- https://github.com/toeverything/BlockSuite/pull/7705 @doodlewind

## Misc
- https://github.com/toeverything/BlockSuite/pull/7712 @doodlewind
- https://github.com/toeverything/BlockSuite/pull/7711 @doodlewind
- https://github.com/toeverything/BlockSuite/pull/7706 @doodlewind
- https://github.com/toeverything/BlockSuite/pull/7592 @doouding
2024-07-23 15:24:57 +00:00
darkskygit
0dbed968a0 chore: add env for desktop test (#7582) 2024-07-23 15:10:08 +00:00
CatsJuice
b0ad36425d fix(core): beliver plan should not show cancel subscription (#7576)
fix AF-1097
2024-07-23 10:54:22 +00:00
forehalo
dddbfe6473 feat(server): setup api for selfhost deployment (#7569) 2024-07-23 10:39:34 +00:00
forehalo
14fbeb7879 fix(server): should clean bill date if lifetime subscription (#7577) 2024-07-23 08:19:28 +00:00
Brooooooklyn
dc7eeedb24 ci: set the sentry release name as version number (#7574) 2024-07-23 08:05:05 +00:00
Cats Juice
d7cc546f58 fix(core): correct believer plan copy (#7571) 2024-07-23 10:11:07 +08:00
darkskygit
386d766597 fix: forked session query condition (#7568) 2024-07-22 12:28:05 +00:00
darkskygit
7d7399a9eb chore: update name in one shot (#7567) 2024-07-22 11:03:41 +00:00
JimmFly
55db9f9719 feat(component): add animations to modal (#7474)
Add opening and closing animations to modal.

The usage of conditional rendering as shown below is not recommended:
```
open ? (
      <Modal
        open={open}
        ...
      />
    ) : null,
```

When the modal is closed, it gets removed from the DOM instantly without running any exit animations that might be defined in the Modal component.
2024-07-22 03:22:42 +00:00
JimmFly
e3c3d1ac69 fix(core): values in edit not saved when closing info modal (#7465)
Before the modification, when the modal is closed, if a value is being edited, the input's on blur event cannot be triggered to automatically save.

https://github.com/toeverything/AFFiNE/assets/102217452/60235cec-0022-4c4d-b213-28f2331a0c5b
2024-07-22 03:22:40 +00:00
Saul-Mirone
bd0279730c chore: bump blocksuite canary (#7558)
## Features

## Bugfix

## Refactor
- https://github.com/toeverything/BlockSuite/pull/7697 @Saul-Mirone

## Misc
2024-07-20 09:14:16 +00:00
Saul-Mirone
988f3a39f8 chore: bump blocksuite again (#7557)
## Features

## Bugfix
- https://github.com/toeverything/BlockSuite/pull/7686 @Flrande
- https://github.com/toeverything/BlockSuite/pull/7692 @Saul-Mirone

## Refactor

## Misc
2024-07-19 15:37:10 +00:00
JimmFly
f65380f847 feat(templates): add arrows stickers (#7518)
Add the arrow SVGs from [handy-arrows](https://github.com/Eronred/handy-arrows) to the template.
Thanks to [handy-arrows](https://github.com/Eronred/handy-arrows) for these beautiful SVGs.
2024-07-19 06:25:30 +00:00
donteatfriedrice
a62b7f0024 fix: chat panel ai onboarding title wrap (#7552)
[BS-896](https://linear.app/affine-design/issue/BS-896/ai-chat-onboarding-ui-折行-bug)
2024-07-19 05:55:21 +00:00
JimmFly
4512a1a91d fix(core): cmdk unexpected highlighting style (#7538)
close PD-1428

https://github.com/user-attachments/assets/6bb02547-6030-474d-ada0-c5a49be309d6
2024-07-19 05:38:33 +00:00
JimmFly
af7d44164c fix(core): bi-directional links responsive style (#7540)
close AF-1077
2024-07-19 05:22:34 +00:00
Saul-Mirone
6dbcb62da7 chore: bump blocksuite (#7546)
## Features
- https://github.com/toeverything/BlockSuite/pull/7659 @donteatfriedrice

## Bugfix
- https://github.com/toeverything/BlockSuite/pull/7682 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7641 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7685 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7680 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7679 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7676 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7675 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7670 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7672 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7668 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7664 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7665 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7662 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7658 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7654 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7648 @undefined
- https://github.com/toeverything/BlockSuite/pull/7653 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7651 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7647 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7671 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7656 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7643 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7666 @doodlewind
- https://github.com/toeverything/BlockSuite/pull/7645 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7637 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7639 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7636 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7633 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7630 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7629 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7627 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7625 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7623 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7599 @L-Sun
- https://github.com/toeverything/BlockSuite/pull/7621 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7619 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7614 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7613 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7611 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7609 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7594 @fundon
- https://github.com/toeverything/BlockSuite/pull/7593 @fundon

## Refactor
- https://github.com/toeverything/BlockSuite/pull/7634 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7616 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7617 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7603 @Saul-Mirone

## Misc
- https://github.com/toeverything/BlockSuite/pull/7604 @Saul-Mirone

## Features

## Bugfix
- https://github.com/toeverything/BlockSuite/pull/7688 @fourdim
- https://github.com/toeverything/BlockSuite/pull/7690 @Saul-Mirone

## Refactor

## Misc
2024-07-19 05:06:26 +00:00
CatsJuice
239de4c283 feat(core): reuse select-page for edit collection pages-mode (#7548) 2024-07-19 04:47:48 +00:00
liuyi
544236f1a0 fix: separate public domain for beta assets (#7550) 2024-07-19 12:45:26 +08:00
darkskygit
145872b9f4 chore: refresh unnamed user (#7544) 2024-07-19 04:01:39 +00:00
forehalo
90c00b6db9 Revert "fix(server): wrong usage of optl (#6714)"
This reverts commit 4868f6e611.
2024-07-19 11:31:01 +08:00
darkskygit
585003640f feat: improve workflow performance (#7539) 2024-07-18 10:37:27 +00:00
liuyi
9440dc8dd5 fix: separate beta and stable assets (#7543) 2024-07-18 10:32:40 +00:00
EYHN
9fe77baf05 feat(infra): better orm (#7502) 2024-07-18 10:14:12 +00:00
forehalo
133888d760 fix(core): remove useless logic of use favorite (#7533)
closes https://github.com/toeverything/AFFiNE/issues/7534
2024-07-18 08:08:24 +00:00
L-Sun
9160469a18 fix(core): can not preview image in shared page (#7466)
FIx BS-798
2024-07-18 06:33:52 +00:00
renovate
71ddb1f841 chore: bump up oxlint version to v0.6.1 (#7528)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

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

---

### Release Notes

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

### [`v0.6.1`](4f26e51b74...697c0efdef)

[Compare Source](4f26e51b74...697c0efdef)

</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 has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzEuNCIsInVwZGF0ZWRJblZlciI6IjM3LjQzMS40IiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2024-07-18 04:34:20 +00:00
CatsJuice
4f718cffbf feat(core): subscribe changed notification and typeform link (#7522) 2024-07-18 04:20:21 +00:00
CatsJuice
b9d84fe007 fix(core): select page modal's list is not visiable (#7531)
fix AF-1076

![CleanShot 2024-07-18 at 10.18.41.gif](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/LakojjjzZNf6ogjOVwKE/9bff1f9e-f752-4cb2-87ad-0da62d69effa.gif)
2024-07-18 04:06:02 +00:00
renovate
ad970837ec chore: bump up @blocksuite/icons version to v2.1.59 (#7525)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@blocksuite/icons](https://togithub.com/toeverything/icons) | [`2.1.58` -> `2.1.59`](https://renovatebot.com/diffs/npm/@blocksuite%2ficons/2.1.58/2.1.59) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@blocksuite%2ficons/2.1.59?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@blocksuite%2ficons/2.1.59?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@blocksuite%2ficons/2.1.58/2.1.59?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@blocksuite%2ficons/2.1.58/2.1.59?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>toeverything/icons (@&#8203;blocksuite/icons)</summary>

### [`v2.1.59`](961ed351ea...e3b1e36db1)

[Compare Source](961ed351ea...e3b1e36db1)

</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 has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzEuNCIsInVwZGF0ZWRJblZlciI6IjM3LjQzMS40IiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2024-07-18 03:44:56 +00:00
Peng Xiao
d168128174 fix(core): workaround for center peek styles (#7532) 2024-07-18 11:43:42 +08:00
renovate
2919d4912c chore: bump up react-i18next version to v15 (#7529)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [react-i18next](https://togithub.com/i18next/react-i18next) | [`^14.1.0` -> `^15.0.0`](https://renovatebot.com/diffs/npm/react-i18next/14.1.3/15.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-i18next/15.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-i18next/15.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-i18next/14.1.3/15.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-i18next/14.1.3/15.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>i18next/react-i18next (react-i18next)</summary>

### [`v15.0.0`](https://togithub.com/i18next/react-i18next/blob/HEAD/CHANGELOG.md#1500)

[Compare Source](https://togithub.com/i18next/react-i18next/compare/v14.1.3...v15.0.0)

-   use optional chaining, nullish coalescing and nullish coalescing assignment [1774](https://togithub.com/i18next/react-i18next/pull/1774)
-   Build config and optimizations [1769](https://togithub.com/i18next/react-i18next/pull/1769)
-   some dependency updates [1768](https://togithub.com/i18next/react-i18next/pull/1768)
-   use modern hasLoadedNamespace code (now requires at least i18next > v19.4.5 (introduced in june 2020))

</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 has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzEuNCIsInVwZGF0ZWRJblZlciI6IjM3LjQzMS40IiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2024-07-18 03:09:34 +00:00
DarkSky
dcb9d75db7 feat: allow sort and filter forked session (#7519) 2024-07-18 11:08:47 +08:00
Chen
ccac7a883c feat: bump blocksuite (#7526) 2024-07-17 18:30:46 +08:00
Cats Juice
ade8db2aec fix(core): adjust app-sidebar z-index (#7523) 2024-07-17 18:10:08 +08:00
Cats Juice
07d4c476c2 fix(core): right-sidebar header radio-group's indicator is missing (#7524) 2024-07-17 18:09:48 +08:00
Cats Juice
db3533724b fix(core): resolve unexpected forwardRef warning (#7527) 2024-07-17 18:08:59 +08:00
forehalo
4868f6e611 fix(server): wrong usage of optl (#6714) 2024-07-17 08:17:14 +00:00
CatsJuice
08a0572d4e fix(core): update pricing pages (#7521) 2024-07-17 08:01:13 +00:00
renovate
e97ac11d0f chore: bump up oxlint version to v0.6.0 (#7438)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

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

---

### Release Notes

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

### [`v0.6.0`](https://togithub.com/oxc-project/oxc/blob/HEAD/npm/oxlint/CHANGELOG.md#060---2024-07-11)

[Compare Source](0c7f3eecc6...4f26e51b74)

##### Features

-   [`cc58614`](https://togithub.com/oxc-project/oxc/commit/cc58614) linter: Better schemas for allow/warn/deny ([#&#8203;4150](https://togithub.com/oxc-project/oxc/issues/4150)) (DonIsaac)

### [`v0.5.3`](https://togithub.com/oxc-project/oxc/releases/tag/oxlint_v0.5.3): oxlint v0.5.3

[Compare Source](b66ad0b675...0c7f3eecc6)

#### \[0.5.3] - 2024-07-07

##### Features

-   [`1681b11`](https://togithub.com/oxc-project/oxc/commit/1681b11) linter: Eslint-plugin-jest/consistent-test-it ([#&#8203;4053](https://togithub.com/oxc-project/oxc/issues/4053)) (cinchen)
-   [`6876490`](https://togithub.com/oxc-project/oxc/commit/6876490) linter: Add rule no-undefined ([#&#8203;4041](https://togithub.com/oxc-project/oxc/issues/4041)) (jordan boyer)
-   [`bf04dee`](https://togithub.com/oxc-project/oxc/commit/bf04dee) linter: Implement unicorn/no-negation-in-equality-check ([#&#8203;4034](https://togithub.com/oxc-project/oxc/issues/4034)) (Nissim Chekroun)
-   [`aa45604`](https://togithub.com/oxc-project/oxc/commit/aa45604) linter/eslint: Implement no-multi-str ([#&#8203;4038](https://togithub.com/oxc-project/oxc/issues/4038)) (Jelle van der Waa)

##### Bug Fixes

-   [`7b2dc3b`](https://togithub.com/oxc-project/oxc/commit/7b2dc3b) linter: Fix panic in import/namespace ([#&#8203;4080](https://togithub.com/oxc-project/oxc/issues/4080)) (Boshen)

</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 has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjEuOSIsInVwZGF0ZWRJblZlciI6IjM3LjQyNS4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2024-07-16 08:40:16 +00:00
renovate
7f9d321d9c chore: bump up glob version to v11 (#7451)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [glob](https://togithub.com/isaacs/node-glob) | [`^10.3.12` -> `^11.0.0`](https://renovatebot.com/diffs/npm/glob/10.4.3/11.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/glob/11.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/glob/11.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/glob/10.4.3/11.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/glob/10.4.3/11.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>isaacs/node-glob (glob)</summary>

### [`v11.0.0`](https://togithub.com/isaacs/node-glob/compare/v10.4.4...561601d9d14935970ea78b0c1ca3a25addbf5379)

[Compare Source](https://togithub.com/isaacs/node-glob/compare/v10.4.5...v11.0.0)

### [`v10.4.5`](https://togithub.com/isaacs/node-glob/compare/v10.4.4...v10.4.5)

[Compare Source](https://togithub.com/isaacs/node-glob/compare/v10.4.4...v10.4.5)

### [`v10.4.4`](https://togithub.com/isaacs/node-glob/compare/v10.4.3...v10.4.4)

[Compare Source](https://togithub.com/isaacs/node-glob/compare/v10.4.3...v10.4.4)

</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 has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjUuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQyNS4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2024-07-16 08:24:01 +00:00
renovate
85a02b74f9 chore: bump up all non-major dependencies (#7508)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type | Update |
|---|---|---|---|---|---|---|---|
| [@aws-sdk/client-s3](https://togithub.com/aws/aws-sdk-js-v3/tree/main/clients/client-s3) ([source](https://togithub.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3)) | [`3.609.0` -> `3.614.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fclient-s3/3.609.0/3.614.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fclient-s3/3.614.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fclient-s3/3.614.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fclient-s3/3.609.0/3.614.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fclient-s3/3.609.0/3.614.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@fal-ai/serverless-client](https://togithub.com/fal-ai/fal-js) ([source](https://togithub.com/fal-ai/fal-js/tree/HEAD/libs/client)) | [`^0.12.0` -> `^0.13.0`](https://renovatebot.com/diffs/npm/@fal-ai%2fserverless-client/0.12.0/0.13.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@fal-ai%2fserverless-client/0.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@fal-ai%2fserverless-client/0.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@fal-ai%2fserverless-client/0.12.0/0.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@fal-ai%2fserverless-client/0.12.0/0.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@google-cloud/opentelemetry-cloud-monitoring-exporter](https://togithub.com/GoogleCloudPlatform/opentelemetry-operations-js) | [`^0.18.0` -> `^0.19.0`](https://renovatebot.com/diffs/npm/@google-cloud%2fopentelemetry-cloud-monitoring-exporter/0.18.0/0.19.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@google-cloud%2fopentelemetry-cloud-monitoring-exporter/0.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@google-cloud%2fopentelemetry-cloud-monitoring-exporter/0.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@google-cloud%2fopentelemetry-cloud-monitoring-exporter/0.18.0/0.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@google-cloud%2fopentelemetry-cloud-monitoring-exporter/0.18.0/0.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@napi-rs/cli](https://togithub.com/napi-rs/napi-rs) | [`3.0.0-alpha.56` -> `3.0.0-alpha.60`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.0.0-alpha.56/3.0.0-alpha.60) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fcli/3.0.0-alpha.60?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@napi-rs%2fcli/3.0.0-alpha.60?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@napi-rs%2fcli/3.0.0-alpha.56/3.0.0-alpha.60?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@napi-rs%2fcli/3.0.0-alpha.56/3.0.0-alpha.60?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@nx/vite](https://nx.dev) ([source](https://togithub.com/nrwl/nx/tree/HEAD/packages/vite)) | [`19.4.1` -> `19.4.3`](https://renovatebot.com/diffs/npm/@nx%2fvite/19.4.1/19.4.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nx%2fvite/19.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nx%2fvite/19.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nx%2fvite/19.4.1/19.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nx%2fvite/19.4.1/19.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@playwright/test](https://playwright.dev) ([source](https://togithub.com/microsoft/playwright)) | [`=1.44.1` -> `=1.45.1`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.44.1/1.45.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@playwright%2ftest/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@playwright%2ftest/1.44.1/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.44.1/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [electron](https://togithub.com/electron/electron) | [`~30.1.0` -> `~30.2.0`](https://renovatebot.com/diffs/npm/electron/30.1.2/30.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/electron/30.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/electron/30.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/electron/30.1.2/30.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/electron/30.1.2/30.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [jotai-scope](https://togithub.com/jotaijs/jotai-scope) | [`^0.6.0` -> `^0.7.0`](https://renovatebot.com/diffs/npm/jotai-scope/0.6.0/0.7.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/jotai-scope/0.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jotai-scope/0.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jotai-scope/0.6.0/0.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jotai-scope/0.6.0/0.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [lucide-react](https://lucide.dev) ([source](https://togithub.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react)) | [`^0.400.0` -> `^0.408.0`](https://renovatebot.com/diffs/npm/lucide-react/0.400.0/0.408.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lucide-react/0.408.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lucide-react/0.408.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lucide-react/0.400.0/0.408.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lucide-react/0.400.0/0.408.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [napi](https://togithub.com/napi-rs/napi-rs) | `3.0.0-alpha.5` -> `3.0.0-alpha.7` | [![age](https://developer.mend.io/api/mc/badges/age/crate/napi/3.0.0-alpha.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi/3.0.0-alpha.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi/3.0.0-alpha.5/3.0.0-alpha.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi/3.0.0-alpha.5/3.0.0-alpha.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [napi-derive](https://togithub.com/napi-rs/napi-rs) | `3.0.0-alpha.4` -> `3.0.0-alpha.6` | [![age](https://developer.mend.io/api/mc/badges/age/crate/napi-derive/3.0.0-alpha.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi-derive/3.0.0-alpha.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi-derive/3.0.0-alpha.4/3.0.0-alpha.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi-derive/3.0.0-alpha.4/3.0.0-alpha.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [node](https://nodejs.org) ([source](https://togithub.com/nodejs/node)) | `20.15.0` -> `20.15.1` | [![age](https://developer.mend.io/api/mc/badges/age/node-version/node/v20.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/node-version/node/v20.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/node-version/node/v20.15.0/v20.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/node-version/node/v20.15.0/v20.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |  | patch |
| [playwright](https://playwright.dev) ([source](https://togithub.com/microsoft/playwright)) | [`=1.44.1` -> `=1.45.1`](https://renovatebot.com/diffs/npm/playwright/1.44.1/1.45.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/playwright/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/playwright/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/playwright/1.44.1/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/playwright/1.44.1/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [react-i18next](https://togithub.com/i18next/react-i18next) | [`14.1.2` -> `14.1.3`](https://renovatebot.com/diffs/npm/react-i18next/14.1.2/14.1.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-i18next/14.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-i18next/14.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-i18next/14.1.2/14.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-i18next/14.1.2/14.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [serde](https://serde.rs) ([source](https://togithub.com/serde-rs/serde)) | `1.0.203` -> `1.0.204` | [![age](https://developer.mend.io/api/mc/badges/age/crate/serde/1.0.204?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/serde/1.0.204?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/serde/1.0.203/1.0.204?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/serde/1.0.203/1.0.204?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [storybook-dark-mode](https://togithub.com/hipstersmoothie/storybook-dark-mode) | [`4.0.1` -> `4.0.2`](https://renovatebot.com/diffs/npm/storybook-dark-mode/4.0.1/4.0.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/storybook-dark-mode/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/storybook-dark-mode/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/storybook-dark-mode/4.0.1/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/storybook-dark-mode/4.0.1/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [tailwindcss](https://tailwindcss.com) ([source](https://togithub.com/tailwindlabs/tailwindcss)) | [`3.4.4` -> `3.4.5`](https://renovatebot.com/diffs/npm/tailwindcss/3.4.4/3.4.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/tailwindcss/3.4.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tailwindcss/3.4.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tailwindcss/3.4.4/3.4.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tailwindcss/3.4.4/3.4.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [uuid](https://togithub.com/uuid-rs/uuid) | `1.9.1` -> `1.10.0` | [![age](https://developer.mend.io/api/mc/badges/age/crate/uuid/1.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/uuid/1.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/uuid/1.9.1/1.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/uuid/1.9.1/1.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | minor |
| [vitest-fetch-mock](https://togithub.com/IanVS/vitest-fetch-mock) | [`^0.2.2` -> `^0.3.0`](https://renovatebot.com/diffs/npm/vitest-fetch-mock/0.2.2/0.3.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vitest-fetch-mock/0.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest-fetch-mock/0.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest-fetch-mock/0.2.2/0.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest-fetch-mock/0.2.2/0.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [vitest-mock-extended](https://togithub.com/eratio08/vitest-mock-extended) | [`1.3.1` -> `1.3.2`](https://renovatebot.com/diffs/npm/vitest-mock-extended/1.3.1/1.3.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vitest-mock-extended/1.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest-mock-extended/1.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest-mock-extended/1.3.1/1.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest-mock-extended/1.3.1/1.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |

---

### Release Notes

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

### [`v3.614.0`](https://togithub.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#36140-2024-07-10)

[Compare Source](https://togithub.com/aws/aws-sdk-js-v3/compare/v3.613.0...v3.614.0)

**Note:** Version bump only for package [@&#8203;aws-sdk/client-s3](https://togithub.com/aws-sdk/client-s3)

### [`v3.613.0`](https://togithub.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#36130-2024-07-09)

[Compare Source](https://togithub.com/aws/aws-sdk-js-v3/compare/v3.609.0...v3.613.0)

**Note:** Version bump only for package [@&#8203;aws-sdk/client-s3](https://togithub.com/aws-sdk/client-s3)

</details>

<details>
<summary>fal-ai/fal-js (@&#8203;fal-ai/serverless-client)</summary>

### [`v0.13.0`](4ea43b4cea...cf300e9cc0)

[Compare Source](4ea43b4cea...cf300e9cc0)

</details>

<details>
<summary>GoogleCloudPlatform/opentelemetry-operations-js (@&#8203;google-cloud/opentelemetry-cloud-monitoring-exporter)</summary>

### [`v0.19.0`](https://togithub.com/GoogleCloudPlatform/opentelemetry-operations-js/compare/@google-cloud/opentelemetry-cloud-monitoring-exporter@0.18.0...@google-cloud/opentelemetry-cloud-monitoring-exporter@0.19.0)

[Compare Source](https://togithub.com/GoogleCloudPlatform/opentelemetry-operations-js/compare/@google-cloud/opentelemetry-cloud-monitoring-exporter@0.18.0...@google-cloud/opentelemetry-cloud-monitoring-exporter@0.19.0)

</details>

<details>
<summary>napi-rs/napi-rs (@&#8203;napi-rs/cli)</summary>

### [`v3.0.0-alpha.60`](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.59...@napi-rs/cli@3.0.0-alpha.60)

[Compare Source](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.59...@napi-rs/cli@3.0.0-alpha.60)

### [`v3.0.0-alpha.59`](https://togithub.com/napi-rs/napi-rs/releases/tag/%40napi-rs/cli%403.0.0-alpha.59)

[Compare Source](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.58...@napi-rs/cli@3.0.0-alpha.59)

##### Bug Fixes

-   **cli:** bundle lodash-es in cjs output ([#&#8203;2189](https://togithub.com/napi-rs/napi-rs/issues/2189)) ([e860822](e8608228b8))
-   **cli:** worker files format ([#&#8203;2186](https://togithub.com/napi-rs/napi-rs/issues/2186)) ([13c1838](13c18388f5))

### [`v3.0.0-alpha.58`](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.57...@napi-rs/cli@3.0.0-alpha.58)

[Compare Source](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.57...@napi-rs/cli@3.0.0-alpha.58)

### [`v3.0.0-alpha.57`](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.56...@napi-rs/cli@3.0.0-alpha.57)

[Compare Source](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.56...@napi-rs/cli@3.0.0-alpha.57)

</details>

<details>
<summary>nrwl/nx (@&#8203;nx/vite)</summary>

### [`v19.4.3`](https://togithub.com/nrwl/nx/releases/tag/19.4.3)

[Compare Source](https://togithub.com/nrwl/nx/compare/19.4.2...19.4.3)

##### 19.4.3 (2024-07-12)

##### 🚀 Features

-   **core:** avoid forking process for nx:noop ([#&#8203;26869](https://togithub.com/nrwl/nx/pull/26869))
-   **js:** add createNodesV2 for typescript plugin ([#&#8203;26788](https://togithub.com/nrwl/nx/pull/26788))
-   **nx-dev:** add customers & company pages ([#&#8203;26813](https://togithub.com/nrwl/nx/pull/26813))
-   **nx-dev:** Add more OSS logos ([#&#8203;26922](https://togithub.com/nrwl/nx/pull/26922))

##### 🩹 Fixes

-   **core:** load isolated plugins in parallel ([#&#8203;26874](https://togithub.com/nrwl/nx/pull/26874))
-   **core:** report should work if project graph errors ([#&#8203;26858](https://togithub.com/nrwl/nx/pull/26858))
-   **misc:** properly set the value of the bitbucket option for ci work… ([#&#8203;26890](https://togithub.com/nrwl/nx/pull/26890))
-   **misc:** add more ab testing for setting up ci and nx cloud ([#&#8203;26907](https://togithub.com/nrwl/nx/pull/26907))
-   **vite:** Only attempt to amend test object if one exists ([#&#8203;26822](https://togithub.com/nrwl/nx/pull/26822))
-   **vue:** bump vue-tsc version to 2.x.x ([#&#8203;26867](https://togithub.com/nrwl/nx/pull/26867))

##### ❤️  Thank You

-   Craigory Coppola [@&#8203;AgentEnder](https://togithub.com/AgentEnder)
-   Jason Jean [@&#8203;FrozenPandaz](https://togithub.com/FrozenPandaz)
-   Jasper McCulloch
-   Leosvel Pérez Espinosa [@&#8203;leosvelperez](https://togithub.com/leosvelperez)
-   Nicholas Cunningham [@&#8203;ndcunningham](https://togithub.com/ndcunningham)

### [`v19.4.2`](https://togithub.com/nrwl/nx/releases/tag/19.4.2)

[Compare Source](https://togithub.com/nrwl/nx/compare/19.4.1...19.4.2)

##### 19.4.2 (2024-07-08)

##### 🚀 Features

-   **core:** add support for wildcards in dependsOn ([#&#8203;19611](https://togithub.com/nrwl/nx/pull/19611))
-   **linter:** support `eslint.config.cjs` and `*.cjs` extension with flat config ([#&#8203;26637](https://togithub.com/nrwl/nx/pull/26637))

##### 🩹 Fixes

-   **core:** ensure better create nodes error messaging ([#&#8203;26811](https://togithub.com/nrwl/nx/pull/26811))
-   **misc:** adjust nx cloud ab test ([#&#8203;26866](https://togithub.com/nrwl/nx/pull/26866))

##### ❤️  Thank You

-   Ben Snyder
-   Craigory Coppola [@&#8203;AgentEnder](https://togithub.com/AgentEnder)
-   Jason Jean [@&#8203;FrozenPandaz](https://togithub.com/FrozenPandaz)
-   Pavlo [@&#8203;fxposter](https://togithub.com/fxposter)

</details>

<details>
<summary>microsoft/playwright (@&#8203;playwright/test)</summary>

### [`v1.45.1`](https://togithub.com/microsoft/playwright/compare/v1.45.0...e8989f83d9801cdaadc3803b5341c601c9593947)

[Compare Source](https://togithub.com/microsoft/playwright/compare/v1.45.0...v1.45.1)

### [`v1.45.0`](https://togithub.com/microsoft/playwright/compare/v1.44.1...4f3f6eecae490af444dd9298c9eaeb0c596915b7)

[Compare Source](https://togithub.com/microsoft/playwright/compare/v1.44.1...v1.45.0)

</details>

<details>
<summary>electron/electron (electron)</summary>

### [`v30.2.0`](https://togithub.com/electron/electron/releases/tag/v30.2.0): electron v30.2.0

[Compare Source](https://togithub.com/electron/electron/compare/v30.1.2...v30.2.0)

### Release Notes for v30.2.0

#### Features

-   Enabled the Windows Control Overlay API on Linux. [#&#8203;42683](https://togithub.com/electron/electron/pull/42683) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42682), [32](https://togithub.com/electron/electron/pull/42681))</span>
-   Expose `systemPreferences` to `utilityProcess`. [#&#8203;42600](https://togithub.com/electron/electron/pull/42600) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42598), [32](https://togithub.com/electron/electron/pull/42599))</span>

#### Fixes

-   Fixed a focus issue when calling `BrowserWindow.setTopBrowserView`. [#&#8203;42735](https://togithub.com/electron/electron/pull/42735) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42734), [32](https://togithub.com/electron/electron/pull/42733))</span>
-   Fixed an issue where `fetch`-dependent interfaces could be missing in Web Workers with `nodeIntegrationInWorker` enabled. [#&#8203;42596](https://togithub.com/electron/electron/pull/42596) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42597), [32](https://togithub.com/electron/electron/pull/42595))</span>
-   Fixed an issue where `navigator.mediaDevices.enumerateDevices`  could return broken results in some cases after calling `session.setPermissionCheckHandler`. [#&#8203;42807](https://togithub.com/electron/electron/pull/42807) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42809), [32](https://togithub.com/electron/electron/pull/42808))</span>
-   Fixed an issue where control could fail to return properly after saving a dialog using showOpenDialogSync on Linux. [#&#8203;42676](https://togithub.com/electron/electron/pull/42676) <span style="font-size:small;">(Also in [29](https://togithub.com/electron/electron/pull/42679), [31](https://togithub.com/electron/electron/pull/42678), [32](https://togithub.com/electron/electron/pull/42677))</span>
-   Fixed an issue where the user-specified default path did not work in some circumstances when using Linux dialogs. [#&#8203;42687](https://togithub.com/electron/electron/pull/42687) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42685), [32](https://togithub.com/electron/electron/pull/42680))</span>
-   Fixed potentially incorrect exit code in UtilityProcess. [#&#8203;42395](https://togithub.com/electron/electron/pull/42395) <span style="font-size:small;">(Also in [29](https://togithub.com/electron/electron/pull/42396), [31](https://togithub.com/electron/electron/pull/42397))</span>

#### Other Changes

-   Security: backported fix for CVE-2024-5493. [#&#8203;42590](https://togithub.com/electron/electron/pull/42590)
-   Security: backported fix for CVE-2024-5831.
    -   Security: backported fix for CVE-2024-5832. [#&#8203;42602](https://togithub.com/electron/electron/pull/42602)
-   Security: backported fix for CVE-2024-6100.
    -   Security: backported fix for CVE-2024-6101.
    -   Security: backported fix for CVE-2024-6103. [#&#8203;42617](https://togithub.com/electron/electron/pull/42617)
-   Security: backported fix for CVE-2024-6291.
    -   Security: backported fix for CVE-2024-6293.
    -   Security: backported fix for CVE-2024-6290.
    -   Security: backported fix for CVE-2024-6292.
    -   Security: backported fix for chromium:346197738. [#&#8203;42693](https://togithub.com/electron/electron/pull/42693)
-   Updated Node.js to v20.15.0. [#&#8203;42613](https://togithub.com/electron/electron/pull/42613)

</details>

<details>
<summary>jotaijs/jotai-scope (jotai-scope)</summary>

### [`v0.7.0`](https://togithub.com/jotaijs/jotai-scope/compare/v0.6.0...v0.7.0)

[Compare Source](https://togithub.com/jotaijs/jotai-scope/compare/v0.6.0...v0.7.0)

</details>

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

### [`v0.408.0`](https://togithub.com/lucide-icons/lucide/releases/tag/0.408.0): New icons 0.408.0

[Compare Source](https://togithub.com/lucide-icons/lucide/compare/0.407.0...0.408.0)

#### New icons 🎨

-   `monitor-cog` ([#&#8203;2310](https://togithub.com/lucide-icons/lucide/issues/2310)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)

#### Modified Icons 🔨

-   `church` ([#&#8203;2273](https://togithub.com/lucide-icons/lucide/issues/2273)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `delete` ([#&#8203;2279](https://togithub.com/lucide-icons/lucide/issues/2279)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `drafting-compass` ([#&#8203;2266](https://togithub.com/lucide-icons/lucide/issues/2266)) by [@&#8203;jguddas](https://togithub.com/jguddas)

### [`v0.407.0`](https://togithub.com/lucide-icons/lucide/releases/tag/0.407.0): New icons 0.407.0

[Compare Source](https://togithub.com/lucide-icons/lucide/compare/0.406.0...0.407.0)

#### New icons 🎨

-   `type-outline` ([#&#8203;2206](https://togithub.com/lucide-icons/lucide/issues/2206)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)

### [`v0.406.0`](https://togithub.com/lucide-icons/lucide/releases/tag/0.406.0): New icons 0.406.0

[Compare Source](https://togithub.com/lucide-icons/lucide/compare/0.405.0...0.406.0)

#### New icons 🎨

-   `calendar-arrow-down` ([#&#8203;2307](https://togithub.com/lucide-icons/lucide/issues/2307)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)
-   `calendar-arrow-up` ([#&#8203;2307](https://togithub.com/lucide-icons/lucide/issues/2307)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)
-   `clock-arrow-down` ([#&#8203;2307](https://togithub.com/lucide-icons/lucide/issues/2307)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)
-   `clock-arrow-up` ([#&#8203;2307](https://togithub.com/lucide-icons/lucide/issues/2307)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)

### [`v0.405.0`](https://togithub.com/lucide-icons/lucide/releases/tag/0.405.0): New icons 0.405.0

[Compare Source](https://togithub.com/lucide-icons/lucide/compare/0.404.0...0.405.0)

#### New icons 🎨

-   `user-pen` ([#&#8203;2303](https://togithub.com/lucide-icons/lucide/issues/2303)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)
-   `user-round-pen` ([#&#8203;2303](https://togithub.com/lucide-icons/lucide/issues/2303)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)

### [`v0.404.0`](https://togithub.com/lucide-icons/lucide/releases/tag/0.404.0): New icons 0.404.0

[Compare Source](https://togithub.com/lucide-icons/lucide/compare/0.403.0...0.404.0)

#### New icons 🎨

-   `folder-code` ([#&#8203;2276](https://togithub.com/lucide-icons/lucide/issues/2276)) by [@&#8203;jguddas](https://togithub.com/jguddas)

### [`v0.403.0`](https://togithub.com/lucide-icons/lucide/releases/tag/0.403.0): New icons 0.403.0

[Compare Source](https://togithub.com/lucide-icons/lucide/compare/0.402.0...0.403.0)

#### New icons 🎨

-   `list-check` ([#&#8203;2291](https://togithub.com/lucide-icons/lucide/issues/2291)) by [@&#8203;guanboo-yang](https://togithub.com/guanboo-yang)

### [`v0.402.0`](https://togithub.com/lucide-icons/lucide/releases/tag/0.402.0): New icons 0.402.0

[Compare Source](https://togithub.com/lucide-icons/lucide/compare/0.401.0...0.402.0)

#### New icons 🎨

-   `wifi-high` ([#&#8203;2157](https://togithub.com/lucide-icons/lucide/issues/2157)) by [@&#8203;VirtCode](https://togithub.com/VirtCode)
-   `wifi-low` ([#&#8203;2157](https://togithub.com/lucide-icons/lucide/issues/2157)) by [@&#8203;VirtCode](https://togithub.com/VirtCode)
-   `wifi-zero` ([#&#8203;2157](https://togithub.com/lucide-icons/lucide/issues/2157)) by [@&#8203;VirtCode](https://togithub.com/VirtCode)

### [`v0.401.0`](https://togithub.com/lucide-icons/lucide/releases/tag/0.401.0): New icons 0.401.0

[Compare Source](https://togithub.com/lucide-icons/lucide/compare/0.400.0...0.401.0)

#### New icons 🎨

-   `scan-qr-code` ([#&#8203;2247](https://togithub.com/lucide-icons/lucide/issues/2247)) by [@&#8203;vexkiddy](https://togithub.com/vexkiddy)

#### Modified Icons 🔨

-   `book-a` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-audio` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-check` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-copy` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-dashed` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-down` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-headphones` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-heart` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-image` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-key` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-lock` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-marked` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-minus` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-plus` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-text` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-type` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-up-2` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-up` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-user` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-x` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `circle-power` ([#&#8203;2285](https://togithub.com/lucide-icons/lucide/issues/2285)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `key-round` ([#&#8203;2278](https://togithub.com/lucide-icons/lucide/issues/2278)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `octagon-alert` ([#&#8203;2280](https://togithub.com/lucide-icons/lucide/issues/2280)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `octagon-pause` ([#&#8203;2280](https://togithub.com/lucide-icons/lucide/issues/2280)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `octagon-x` ([#&#8203;2280](https://togithub.com/lucide-icons/lucide/issues/2280)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `octagon` ([#&#8203;2280](https://togithub.com/lucide-icons/lucide/issues/2280)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `signature` ([#&#8203;2293](https://togithub.com/lucide-icons/lucide/issues/2293)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)
-   `square-power` ([#&#8203;2285](https://togithub.com/lucide-icons/lucide/issues/2285)) by [@&#8203;jguddas](https://togithub.com/jguddas)

</details>

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

### [`v20.15.1`](https://togithub.com/nodejs/node/compare/v20.15.0...v20.15.1)

[Compare Source](https://togithub.com/nodejs/node/compare/v20.15.0...v20.15.1)

</details>

<details>
<summary>i18next/react-i18next (react-i18next)</summary>

### [`v14.1.3`](https://togithub.com/i18next/react-i18next/blob/HEAD/CHANGELOG.md#1413)

[Compare Source](https://togithub.com/i18next/react-i18next/compare/v14.1.2...v14.1.3)

-   create a isObject helper function [1766](https://togithub.com/i18next/react-i18next/pull/1766)
-   optimize nodesToString [1765](https://togithub.com/i18next/react-i18next/pull/1765)
-   Simplifies hasValidReactChildren [1764](https://togithub.com/i18next/react-i18next/pull/1764)
-   create a isString helper to avoid code duplication [1763](https://togithub.com/i18next/react-i18next/pull/1763)
-   use arrow functions where possible [1762](https://togithub.com/i18next/react-i18next/pull/1762)
-   use the commented out async code [1761](https://togithub.com/i18next/react-i18next/pull/1761)

</details>

<details>
<summary>serde-rs/serde (serde)</summary>

### [`v1.0.204`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.204)

[Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.203...v1.0.204)

-   Apply #\[diagnostic::on_unimplemented] attribute on Rust 1.78+ to suggest adding serde derive or enabling a "serde" feature flag in dependencies ([#&#8203;2767](https://togithub.com/serde-rs/serde/issues/2767), thanks [@&#8203;weiznich](https://togithub.com/weiznich))

</details>

<details>
<summary>hipstersmoothie/storybook-dark-mode (storybook-dark-mode)</summary>

### [`v4.0.2`](https://togithub.com/hipstersmoothie/storybook-dark-mode/blob/HEAD/CHANGELOG.md#v402-Wed-Jun-19-2024)

[Compare Source](https://togithub.com/hipstersmoothie/storybook-dark-mode/compare/v4.0.1...v4.0.2)

##### 🐛 Bug Fix

-   Fix for the "Storybook preview hooks can only be called inside decorators and story functions." error [#&#8203;279](https://togithub.com/hipstersmoothie/storybook-dark-mode/pull/279) ([@&#8203;adam-golab](https://togithub.com/adam-golab))

##### Authors: 1

-   Adam Gołąb ([@&#8203;adam-golab](https://togithub.com/adam-golab))

***

</details>

<details>
<summary>tailwindlabs/tailwindcss (tailwindcss)</summary>

### [`v3.4.5`](https://togithub.com/tailwindlabs/tailwindcss/compare/v3.4.4...a0dbb3d87664521af8a422df5c179d9572a4698c)

[Compare Source](https://togithub.com/tailwindlabs/tailwindcss/compare/v3.4.4...v3.4.5)

</details>

<details>
<summary>uuid-rs/uuid (uuid)</summary>

### [`v1.10.0`](https://togithub.com/uuid-rs/uuid/releases/tag/1.10.0)

[Compare Source](https://togithub.com/uuid-rs/uuid/compare/1.9.1...1.10.0)

##### Deprecations

This release deprecates and renames the following functions:

-   `Builder::from_rfc4122_timestamp` -> `Builder::from_gregorian_timestamp`
-   `Builder::from_sorted_rfc4122_timestamp` -> `Builder::from_sorted_gregorian_timestamp`
-   `Timestamp::from_rfc4122` -> `Timestamp::from_gregorian`
-   `Timestamp::to_rfc4122` -> `Timestamp::to_gregorian`

##### What's Changed

-   Use const identifier in uuid macro by [@&#8203;Vrajs16](https://togithub.com/Vrajs16) in [https://github.com/uuid-rs/uuid/pull/764](https://togithub.com/uuid-rs/uuid/pull/764)
-   Rename most methods referring to RFC4122 by [@&#8203;Mikopet](https://togithub.com/Mikopet) / [@&#8203;KodrAus](https://togithub.com/KodrAus) in [https://github.com/uuid-rs/uuid/pull/765](https://togithub.com/uuid-rs/uuid/pull/765)
-   prepare for 1.10.0 release by [@&#8203;KodrAus](https://togithub.com/KodrAus) in [https://github.com/uuid-rs/uuid/pull/766](https://togithub.com/uuid-rs/uuid/pull/766)

##### New Contributors

-   [@&#8203;Vrajs16](https://togithub.com/Vrajs16) made their first contribution in [https://github.com/uuid-rs/uuid/pull/764](https://togithub.com/uuid-rs/uuid/pull/764)

**Full Changelog**: https://github.com/uuid-rs/uuid/compare/1.9.1...1.10.0

</details>

<details>
<summary>IanVS/vitest-fetch-mock (vitest-fetch-mock)</summary>

### [`v0.3.0`](https://togithub.com/IanVS/vitest-fetch-mock/releases/tag/v0.3.0)

[Compare Source](https://togithub.com/IanVS/vitest-fetch-mock/compare/v0.2.2...v0.3.0)

#### Breaking changes

-   Support Vitest 2
-   Require Node 18 and above

#### Fixes

-   Better TypeScript support

#### PRs:

-   Update to vitest 2 by [@&#8203;birtles](https://togithub.com/birtles) in [https://github.com/IanVS/vitest-fetch-mock/pull/18](https://togithub.com/IanVS/vitest-fetch-mock/pull/18)
-   Update dependencies by [@&#8203;IanVS](https://togithub.com/IanVS) in [https://github.com/IanVS/vitest-fetch-mock/pull/20](https://togithub.com/IanVS/vitest-fetch-mock/pull/20)
-   Update node versions tested in CI by [@&#8203;IanVS](https://togithub.com/IanVS) in [https://github.com/IanVS/vitest-fetch-mock/pull/19](https://togithub.com/IanVS/vitest-fetch-mock/pull/19)
-   Fix: move index.d.ts alongside index.js main entry by [@&#8203;drwpow](https://togithub.com/drwpow) in [https://github.com/IanVS/vitest-fetch-mock/pull/11](https://togithub.com/IanVS/vitest-fetch-mock/pull/11)

#### New Contributors

-   [@&#8203;birtles](https://togithub.com/birtles) made their first contribution in [https://github.com/IanVS/vitest-fetch-mock/pull/18](https://togithub.com/IanVS/vitest-fetch-mock/pull/18)
-   [@&#8203;drwpow](https://togithub.com/drwpow) made their first contribution in [https://github.com/IanVS/vitest-fetch-mock/pull/11](https://togithub.com/IanVS/vitest-fetch-mock/pull/11)

**Full Changelog**: https://github.com/IanVS/vitest-fetch-mock/compare/v0.2.2...v0.3.0

</details>

<details>
<summary>eratio08/vitest-mock-extended (vitest-mock-extended)</summary>

### [`v1.3.2`](https://togithub.com/eratio08/vitest-mock-extended/releases/tag/v1.3.2)

[Compare Source](https://togithub.com/eratio08/vitest-mock-extended/compare/v1.3.1...v1.3.2)

##### Bug Fixes

-   Resolve issues with Vitest 2.0 Mock Type changes ([b1d2b89](b1d2b893dd))
-   `vitest-mock-extended` now requires `vitest` `2.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.

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

---

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

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzEuNCIsInVwZGF0ZWRJblZlciI6IjM3LjQzMS40IiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2024-07-16 07:29:08 +00:00
donteatfriedrice
53eb4aca8d feat: add notification when chat panel action success (#7490)
[BS-318](https://linear.app/affine-design/issue/BS-318/右侧边栏-ai-title-位置不统一)
[BS-418](https://linear.app/affine-design/issue/BS-418/chat-panel-response-成功后,添加-toast)
2024-07-16 06:15:40 +00:00
forehalo
b15294d80c chore(server): add mail metrics (#7514) 2024-07-16 03:22:47 +00:00
renovate
3590b53f40 chore: bump up all non-major dependencies (#7506)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type | Update |
|---|---|---|---|---|---|---|---|
| [@aws-sdk/client-s3](https://togithub.com/aws/aws-sdk-js-v3/tree/main/clients/client-s3) ([source](https://togithub.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3)) | [`3.609.0` -> `3.614.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fclient-s3/3.609.0/3.614.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fclient-s3/3.614.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fclient-s3/3.614.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fclient-s3/3.609.0/3.614.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fclient-s3/3.609.0/3.614.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@fal-ai/serverless-client](https://togithub.com/fal-ai/fal-js) ([source](https://togithub.com/fal-ai/fal-js/tree/HEAD/libs/client)) | [`^0.12.0` -> `^0.13.0`](https://renovatebot.com/diffs/npm/@fal-ai%2fserverless-client/0.12.0/0.13.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@fal-ai%2fserverless-client/0.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@fal-ai%2fserverless-client/0.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@fal-ai%2fserverless-client/0.12.0/0.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@fal-ai%2fserverless-client/0.12.0/0.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@google-cloud/opentelemetry-cloud-monitoring-exporter](https://togithub.com/GoogleCloudPlatform/opentelemetry-operations-js) | [`^0.18.0` -> `^0.19.0`](https://renovatebot.com/diffs/npm/@google-cloud%2fopentelemetry-cloud-monitoring-exporter/0.18.0/0.19.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@google-cloud%2fopentelemetry-cloud-monitoring-exporter/0.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@google-cloud%2fopentelemetry-cloud-monitoring-exporter/0.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@google-cloud%2fopentelemetry-cloud-monitoring-exporter/0.18.0/0.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@google-cloud%2fopentelemetry-cloud-monitoring-exporter/0.18.0/0.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@napi-rs/cli](https://togithub.com/napi-rs/napi-rs) | [`3.0.0-alpha.56` -> `3.0.0-alpha.58`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.0.0-alpha.56/3.0.0-alpha.58) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fcli/3.0.0-alpha.58?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@napi-rs%2fcli/3.0.0-alpha.58?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@napi-rs%2fcli/3.0.0-alpha.56/3.0.0-alpha.58?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@napi-rs%2fcli/3.0.0-alpha.56/3.0.0-alpha.58?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@nx/vite](https://nx.dev) ([source](https://togithub.com/nrwl/nx/tree/HEAD/packages/vite)) | [`19.4.1` -> `19.4.3`](https://renovatebot.com/diffs/npm/@nx%2fvite/19.4.1/19.4.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nx%2fvite/19.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nx%2fvite/19.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nx%2fvite/19.4.1/19.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nx%2fvite/19.4.1/19.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@playwright/test](https://playwright.dev) ([source](https://togithub.com/microsoft/playwright)) | [`=1.44.1` -> `=1.45.1`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.44.1/1.45.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@playwright%2ftest/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@playwright%2ftest/1.44.1/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.44.1/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@storybook/test-runner](https://togithub.com/storybookjs/test-runner) | [`0.19.0` -> `0.19.1`](https://renovatebot.com/diffs/npm/@storybook%2ftest-runner/0.19.0/0.19.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2ftest-runner/0.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2ftest-runner/0.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2ftest-runner/0.19.0/0.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2ftest-runner/0.19.0/0.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [electron](https://togithub.com/electron/electron) | [`~30.1.0` -> `~30.2.0`](https://renovatebot.com/diffs/npm/electron/30.1.2/30.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/electron/30.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/electron/30.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/electron/30.1.2/30.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/electron/30.1.2/30.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [jotai-scope](https://togithub.com/jotaijs/jotai-scope) | [`^0.6.0` -> `^0.7.0`](https://renovatebot.com/diffs/npm/jotai-scope/0.6.0/0.7.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/jotai-scope/0.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jotai-scope/0.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jotai-scope/0.6.0/0.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jotai-scope/0.6.0/0.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [lucide-react](https://lucide.dev) ([source](https://togithub.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react)) | [`^0.400.0` -> `^0.408.0`](https://renovatebot.com/diffs/npm/lucide-react/0.400.0/0.408.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lucide-react/0.408.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lucide-react/0.408.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lucide-react/0.400.0/0.408.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lucide-react/0.400.0/0.408.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [napi](https://togithub.com/napi-rs/napi-rs) | `3.0.0-alpha.5` -> `3.0.0-alpha.7` | [![age](https://developer.mend.io/api/mc/badges/age/crate/napi/3.0.0-alpha.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi/3.0.0-alpha.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi/3.0.0-alpha.5/3.0.0-alpha.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi/3.0.0-alpha.5/3.0.0-alpha.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [napi-derive](https://togithub.com/napi-rs/napi-rs) | `3.0.0-alpha.4` -> `3.0.0-alpha.5` | [![age](https://developer.mend.io/api/mc/badges/age/crate/napi-derive/3.0.0-alpha.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi-derive/3.0.0-alpha.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi-derive/3.0.0-alpha.4/3.0.0-alpha.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi-derive/3.0.0-alpha.4/3.0.0-alpha.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [node](https://nodejs.org) ([source](https://togithub.com/nodejs/node)) | `20.15.0` -> `20.15.1` | [![age](https://developer.mend.io/api/mc/badges/age/node-version/node/v20.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/node-version/node/v20.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/node-version/node/v20.15.0/v20.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/node-version/node/v20.15.0/v20.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |  | patch |
| [playwright](https://playwright.dev) ([source](https://togithub.com/microsoft/playwright)) | [`=1.44.1` -> `=1.45.1`](https://renovatebot.com/diffs/npm/playwright/1.44.1/1.45.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/playwright/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/playwright/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/playwright/1.44.1/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/playwright/1.44.1/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [serde](https://serde.rs) ([source](https://togithub.com/serde-rs/serde)) | `1.0.203` -> `1.0.204` | [![age](https://developer.mend.io/api/mc/badges/age/crate/serde/1.0.204?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/serde/1.0.204?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/serde/1.0.203/1.0.204?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/serde/1.0.203/1.0.204?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [storybook-dark-mode](https://togithub.com/hipstersmoothie/storybook-dark-mode) | [`4.0.1` -> `4.0.2`](https://renovatebot.com/diffs/npm/storybook-dark-mode/4.0.1/4.0.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/storybook-dark-mode/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/storybook-dark-mode/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/storybook-dark-mode/4.0.1/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/storybook-dark-mode/4.0.1/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [uuid](https://togithub.com/uuid-rs/uuid) | `1.9.1` -> `1.10.0` | [![age](https://developer.mend.io/api/mc/badges/age/crate/uuid/1.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/uuid/1.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/uuid/1.9.1/1.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/uuid/1.9.1/1.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | minor |
| [vitest-fetch-mock](https://togithub.com/IanVS/vitest-fetch-mock) | [`^0.2.2` -> `^0.3.0`](https://renovatebot.com/diffs/npm/vitest-fetch-mock/0.2.2/0.3.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vitest-fetch-mock/0.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest-fetch-mock/0.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest-fetch-mock/0.2.2/0.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest-fetch-mock/0.2.2/0.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |

---

### Release Notes

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

### [`v3.614.0`](https://togithub.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#36140-2024-07-10)

[Compare Source](https://togithub.com/aws/aws-sdk-js-v3/compare/v3.613.0...v3.614.0)

**Note:** Version bump only for package [@&#8203;aws-sdk/client-s3](https://togithub.com/aws-sdk/client-s3)

### [`v3.613.0`](https://togithub.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#36130-2024-07-09)

[Compare Source](https://togithub.com/aws/aws-sdk-js-v3/compare/v3.609.0...v3.613.0)

**Note:** Version bump only for package [@&#8203;aws-sdk/client-s3](https://togithub.com/aws-sdk/client-s3)

</details>

<details>
<summary>fal-ai/fal-js (@&#8203;fal-ai/serverless-client)</summary>

### [`v0.13.0`](4ea43b4cea...cf300e9cc0)

[Compare Source](4ea43b4cea...cf300e9cc0)

</details>

<details>
<summary>GoogleCloudPlatform/opentelemetry-operations-js (@&#8203;google-cloud/opentelemetry-cloud-monitoring-exporter)</summary>

### [`v0.19.0`](https://togithub.com/GoogleCloudPlatform/opentelemetry-operations-js/compare/@google-cloud/opentelemetry-cloud-monitoring-exporter@0.18.0...@google-cloud/opentelemetry-cloud-monitoring-exporter@0.19.0)

[Compare Source](https://togithub.com/GoogleCloudPlatform/opentelemetry-operations-js/compare/@google-cloud/opentelemetry-cloud-monitoring-exporter@0.18.0...@google-cloud/opentelemetry-cloud-monitoring-exporter@0.19.0)

</details>

<details>
<summary>napi-rs/napi-rs (@&#8203;napi-rs/cli)</summary>

### [`v3.0.0-alpha.58`](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.57...@napi-rs/cli@3.0.0-alpha.58)

[Compare Source](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.57...@napi-rs/cli@3.0.0-alpha.58)

### [`v3.0.0-alpha.57`](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.56...@napi-rs/cli@3.0.0-alpha.57)

[Compare Source](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.56...@napi-rs/cli@3.0.0-alpha.57)

</details>

<details>
<summary>nrwl/nx (@&#8203;nx/vite)</summary>

### [`v19.4.3`](https://togithub.com/nrwl/nx/releases/tag/19.4.3)

[Compare Source](https://togithub.com/nrwl/nx/compare/19.4.2...19.4.3)

#### 19.4.3 (2024-07-12)

##### 🚀 Features

-   **core:** avoid forking process for nx:noop ([#&#8203;26869](https://togithub.com/nrwl/nx/pull/26869))
-   **js:** add createNodesV2 for typescript plugin ([#&#8203;26788](https://togithub.com/nrwl/nx/pull/26788))
-   **nx-dev:** add customers & company pages ([#&#8203;26813](https://togithub.com/nrwl/nx/pull/26813))
-   **nx-dev:** Add more OSS logos ([#&#8203;26922](https://togithub.com/nrwl/nx/pull/26922))

##### 🩹 Fixes

-   **core:** load isolated plugins in parallel ([#&#8203;26874](https://togithub.com/nrwl/nx/pull/26874))
-   **core:** report should work if project graph errors ([#&#8203;26858](https://togithub.com/nrwl/nx/pull/26858))
-   **misc:** properly set the value of the bitbucket option for ci work… ([#&#8203;26890](https://togithub.com/nrwl/nx/pull/26890))
-   **misc:** add more ab testing for setting up ci and nx cloud ([#&#8203;26907](https://togithub.com/nrwl/nx/pull/26907))
-   **vite:** Only attempt to amend test object if one exists ([#&#8203;26822](https://togithub.com/nrwl/nx/pull/26822))
-   **vue:** bump vue-tsc version to 2.x.x ([#&#8203;26867](https://togithub.com/nrwl/nx/pull/26867))

##### ❤️  Thank You

-   Craigory Coppola [@&#8203;AgentEnder](https://togithub.com/AgentEnder)
-   Jason Jean [@&#8203;FrozenPandaz](https://togithub.com/FrozenPandaz)
-   Jasper McCulloch
-   Leosvel Pérez Espinosa [@&#8203;leosvelperez](https://togithub.com/leosvelperez)
-   Nicholas Cunningham [@&#8203;ndcunningham](https://togithub.com/ndcunningham)

### [`v19.4.2`](https://togithub.com/nrwl/nx/releases/tag/19.4.2)

[Compare Source](https://togithub.com/nrwl/nx/compare/19.4.1...19.4.2)

#### 19.4.2 (2024-07-08)

##### 🚀 Features

-   **core:** add support for wildcards in dependsOn ([#&#8203;19611](https://togithub.com/nrwl/nx/pull/19611))
-   **linter:** support `eslint.config.cjs` and `*.cjs` extension with flat config ([#&#8203;26637](https://togithub.com/nrwl/nx/pull/26637))

##### 🩹 Fixes

-   **core:** ensure better create nodes error messaging ([#&#8203;26811](https://togithub.com/nrwl/nx/pull/26811))
-   **misc:** adjust nx cloud ab test ([#&#8203;26866](https://togithub.com/nrwl/nx/pull/26866))

##### ❤️  Thank You

-   Ben Snyder
-   Craigory Coppola [@&#8203;AgentEnder](https://togithub.com/AgentEnder)
-   Jason Jean [@&#8203;FrozenPandaz](https://togithub.com/FrozenPandaz)
-   Pavlo [@&#8203;fxposter](https://togithub.com/fxposter)

</details>

<details>
<summary>microsoft/playwright (@&#8203;playwright/test)</summary>

### [`v1.45.1`](https://togithub.com/microsoft/playwright/compare/v1.45.0...e8989f83d9801cdaadc3803b5341c601c9593947)

[Compare Source](https://togithub.com/microsoft/playwright/compare/v1.45.0...v1.45.1)

### [`v1.45.0`](https://togithub.com/microsoft/playwright/compare/v1.44.1...4f3f6eecae490af444dd9298c9eaeb0c596915b7)

[Compare Source](https://togithub.com/microsoft/playwright/compare/v1.44.1...v1.45.0)

</details>

<details>
<summary>storybookjs/test-runner (@&#8203;storybook/test-runner)</summary>

### [`v0.19.1`](https://togithub.com/storybookjs/test-runner/releases/tag/v0.19.1)

[Compare Source](https://togithub.com/storybookjs/test-runner/compare/v0.19.0...v0.19.1)

##### 🐛 Bug Fix

-   Release 0.19.1 [#&#8203;493](https://togithub.com/storybookjs/test-runner/pull/493) ([@&#8203;paulgv](https://togithub.com/paulgv) [@&#8203;yannbf](https://togithub.com/yannbf))
-   fix(deps): upgrade `@storybook/csf` to v0.1.11 [#&#8203;491](https://togithub.com/storybookjs/test-runner/pull/491) ([@&#8203;paulgv](https://togithub.com/paulgv))

##### Authors: 2

-   Paul Gascou-Vaillancourt ([@&#8203;paulgv](https://togithub.com/paulgv))
-   Yann Braga ([@&#8203;yannbf](https://togithub.com/yannbf))

</details>

<details>
<summary>electron/electron (electron)</summary>

### [`v30.2.0`](https://togithub.com/electron/electron/releases/tag/v30.2.0): electron v30.2.0

[Compare Source](https://togithub.com/electron/electron/compare/v30.1.2...v30.2.0)

##### Release Notes for v30.2.0

##### Features

-   Enabled the Windows Control Overlay API on Linux. [#&#8203;42683](https://togithub.com/electron/electron/pull/42683) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42682), [32](https://togithub.com/electron/electron/pull/42681))</span>
-   Expose `systemPreferences` to `utilityProcess`. [#&#8203;42600](https://togithub.com/electron/electron/pull/42600) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42598), [32](https://togithub.com/electron/electron/pull/42599))</span>

##### Fixes

-   Fixed a focus issue when calling `BrowserWindow.setTopBrowserView`. [#&#8203;42735](https://togithub.com/electron/electron/pull/42735) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42734), [32](https://togithub.com/electron/electron/pull/42733))</span>
-   Fixed an issue where `fetch`-dependent interfaces could be missing in Web Workers with `nodeIntegrationInWorker` enabled. [#&#8203;42596](https://togithub.com/electron/electron/pull/42596) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42597), [32](https://togithub.com/electron/electron/pull/42595))</span>
-   Fixed an issue where `navigator.mediaDevices.enumerateDevices`  could return broken results in some cases after calling `session.setPermissionCheckHandler`. [#&#8203;42807](https://togithub.com/electron/electron/pull/42807) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42809), [32](https://togithub.com/electron/electron/pull/42808))</span>
-   Fixed an issue where control could fail to return properly after saving a dialog using showOpenDialogSync on Linux. [#&#8203;42676](https://togithub.com/electron/electron/pull/42676) <span style="font-size:small;">(Also in [29](https://togithub.com/electron/electron/pull/42679), [31](https://togithub.com/electron/electron/pull/42678), [32](https://togithub.com/electron/electron/pull/42677))</span>
-   Fixed an issue where the user-specified default path did not work in some circumstances when using Linux dialogs. [#&#8203;42687](https://togithub.com/electron/electron/pull/42687) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42685), [32](https://togithub.com/electron/electron/pull/42680))</span>
-   Fixed potentially incorrect exit code in UtilityProcess. [#&#8203;42395](https://togithub.com/electron/electron/pull/42395) <span style="font-size:small;">(Also in [29](https://togithub.com/electron/electron/pull/42396), [31](https://togithub.com/electron/electron/pull/42397))</span>

##### Other Changes

-   Security: backported fix for CVE-2024-5493. [#&#8203;42590](https://togithub.com/electron/electron/pull/42590)
-   Security: backported fix for CVE-2024-5831.
    -   Security: backported fix for CVE-2024-5832. [#&#8203;42602](https://togithub.com/electron/electron/pull/42602)
-   Security: backported fix for CVE-2024-6100.
    -   Security: backported fix for CVE-2024-6101.
    -   Security: backported fix for CVE-2024-6103. [#&#8203;42617](https://togithub.com/electron/electron/pull/42617)
-   Security: backported fix for CVE-2024-6291.
    -   Security: backported fix for CVE-2024-6293.
    -   Security: backported fix for CVE-2024-6290.
    -   Security: backported fix for CVE-2024-6292.
    -   Security: backported fix for chromium:346197738. [#&#8203;42693](https://togithub.com/electron/electron/pull/42693)
-   Updated Node.js to v20.15.0. [#&#8203;42613](https://togithub.com/electron/electron/pull/42613)

</details>

<details>
<summary>jotaijs/jotai-scope (jotai-scope)</summary>

### [`v0.7.0`](https://togithub.com/jotaijs/jotai-scope/compare/v0.6.0...v0.7.0)

[Compare Source](https://togithub.com/jotaijs/jotai-scope/compare/v0.6.0...v0.7.0)

</details>

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

### [`v0.408.0`](https://togithub.com/lucide-icons/lucide/releases/tag/0.408.0): New icons 0.408.0

[Compare Source](https://togithub.com/lucide-icons/lucide/compare/0.407.0...0.408.0)

#### New icons 🎨

-   `monitor-cog` ([#&#8203;2310](https://togithub.com/lucide-icons/lucide/issues/2310)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)

#### Modified Icons 🔨

-   `church` ([#&#8203;2273](https://togithub.com/lucide-icons/lucide/issues/2273)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `delete` ([#&#8203;2279](https://togithub.com/lucide-icons/lucide/issues/2279)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `drafting-compass` ([#&#8203;2266](https://togithub.com/lucide-icons/lucide/issues/2266)) by [@&#8203;jguddas](https://togithub.com/jguddas)

### [`v0.407.0`](https://togithub.com/lucide-icons/lucide/releases/tag/0.407.0): New icons 0.407.0

[Compare Source](https://togithub.com/lucide-icons/lucide/compare/0.406.0...0.407.0)

#### New icons 🎨

-   `type-outline` ([#&#8203;2206](https://togithub.com/lucide-icons/lucide/issues/2206)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)

### [`v0.406.0`](https://togithub.com/lucide-icons/lucide/releases/tag/0.406.0): New icons 0.406.0

[Compare Source](https://togithub.com/lucide-icons/lucide/compare/0.405.0...0.406.0)

#### New icons 🎨

-   `calendar-arrow-down` ([#&#8203;2307](https://togithub.com/lucide-icons/lucide/issues/2307)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)
-   `calendar-arrow-up` ([#&#8203;2307](https://togithub.com/lucide-icons/lucide/issues/2307)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)
-   `clock-arrow-down` ([#&#8203;2307](https://togithub.com/lucide-icons/lucide/issues/2307)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)
-   `clock-arrow-up` ([#&#8203;2307](https://togithub.com/lucide-icons/lucide/issues/2307)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)

### [`v0.405.0`](https://togithub.com/lucide-icons/lucide/releases/tag/0.405.0): New icons 0.405.0

[Compare Source](https://togithub.com/lucide-icons/lucide/compare/0.404.0...0.405.0)

#### New icons 🎨

-   `user-pen` ([#&#8203;2303](https://togithub.com/lucide-icons/lucide/issues/2303)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)
-   `user-round-pen` ([#&#8203;2303](https://togithub.com/lucide-icons/lucide/issues/2303)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)

### [`v0.404.0`](https://togithub.com/lucide-icons/lucide/releases/tag/0.404.0): New icons 0.404.0

[Compare Source](https://togithub.com/lucide-icons/lucide/compare/0.403.0...0.404.0)

#### New icons 🎨

-   `folder-code` ([#&#8203;2276](https://togithub.com/lucide-icons/lucide/issues/2276)) by [@&#8203;jguddas](https://togithub.com/jguddas)

### [`v0.403.0`](https://togithub.com/lucide-icons/lucide/releases/tag/0.403.0): New icons 0.403.0

[Compare Source](https://togithub.com/lucide-icons/lucide/compare/0.402.0...0.403.0)

#### New icons 🎨

-   `list-check` ([#&#8203;2291](https://togithub.com/lucide-icons/lucide/issues/2291)) by [@&#8203;guanboo-yang](https://togithub.com/guanboo-yang)

### [`v0.402.0`](https://togithub.com/lucide-icons/lucide/releases/tag/0.402.0): New icons 0.402.0

[Compare Source](https://togithub.com/lucide-icons/lucide/compare/0.401.0...0.402.0)

#### New icons 🎨

-   `wifi-high` ([#&#8203;2157](https://togithub.com/lucide-icons/lucide/issues/2157)) by [@&#8203;VirtCode](https://togithub.com/VirtCode)
-   `wifi-low` ([#&#8203;2157](https://togithub.com/lucide-icons/lucide/issues/2157)) by [@&#8203;VirtCode](https://togithub.com/VirtCode)
-   `wifi-zero` ([#&#8203;2157](https://togithub.com/lucide-icons/lucide/issues/2157)) by [@&#8203;VirtCode](https://togithub.com/VirtCode)

### [`v0.401.0`](https://togithub.com/lucide-icons/lucide/releases/tag/0.401.0): New icons 0.401.0

[Compare Source](https://togithub.com/lucide-icons/lucide/compare/0.400.0...0.401.0)

#### New icons 🎨

-   `scan-qr-code` ([#&#8203;2247](https://togithub.com/lucide-icons/lucide/issues/2247)) by [@&#8203;vexkiddy](https://togithub.com/vexkiddy)

#### Modified Icons 🔨

-   `book-a` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-audio` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-check` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-copy` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-dashed` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-down` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-headphones` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-heart` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-image` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-key` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-lock` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-marked` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-minus` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-plus` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-text` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-type` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-up-2` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-up` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-user` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book-x` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `book` ([#&#8203;2274](https://togithub.com/lucide-icons/lucide/issues/2274)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `circle-power` ([#&#8203;2285](https://togithub.com/lucide-icons/lucide/issues/2285)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `key-round` ([#&#8203;2278](https://togithub.com/lucide-icons/lucide/issues/2278)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `octagon-alert` ([#&#8203;2280](https://togithub.com/lucide-icons/lucide/issues/2280)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `octagon-pause` ([#&#8203;2280](https://togithub.com/lucide-icons/lucide/issues/2280)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `octagon-x` ([#&#8203;2280](https://togithub.com/lucide-icons/lucide/issues/2280)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `octagon` ([#&#8203;2280](https://togithub.com/lucide-icons/lucide/issues/2280)) by [@&#8203;jguddas](https://togithub.com/jguddas)
-   `signature` ([#&#8203;2293](https://togithub.com/lucide-icons/lucide/issues/2293)) by [@&#8203;karsa-mistmere](https://togithub.com/karsa-mistmere)
-   `square-power` ([#&#8203;2285](https://togithub.com/lucide-icons/lucide/issues/2285)) by [@&#8203;jguddas](https://togithub.com/jguddas)

</details>

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

### [`v20.15.1`](https://togithub.com/nodejs/node/compare/v20.15.0...v20.15.1)

[Compare Source](https://togithub.com/nodejs/node/compare/v20.15.0...v20.15.1)

</details>

<details>
<summary>serde-rs/serde (serde)</summary>

### [`v1.0.204`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.204)

[Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.203...v1.0.204)

-   Apply #\[diagnostic::on_unimplemented] attribute on Rust 1.78+ to suggest adding serde derive or enabling a "serde" feature flag in dependencies ([#&#8203;2767](https://togithub.com/serde-rs/serde/issues/2767), thanks [@&#8203;weiznich](https://togithub.com/weiznich))

</details>

<details>
<summary>hipstersmoothie/storybook-dark-mode (storybook-dark-mode)</summary>

### [`v4.0.2`](https://togithub.com/hipstersmoothie/storybook-dark-mode/blob/HEAD/CHANGELOG.md#v402-Wed-Jun-19-2024)

[Compare Source](https://togithub.com/hipstersmoothie/storybook-dark-mode/compare/v4.0.1...v4.0.2)

##### 🐛 Bug Fix

-   Fix for the "Storybook preview hooks can only be called inside decorators and story functions." error [#&#8203;279](https://togithub.com/hipstersmoothie/storybook-dark-mode/pull/279) ([@&#8203;adam-golab](https://togithub.com/adam-golab))

##### Authors: 1

-   Adam Gołąb ([@&#8203;adam-golab](https://togithub.com/adam-golab))

***

</details>

<details>
<summary>uuid-rs/uuid (uuid)</summary>

### [`v1.10.0`](https://togithub.com/uuid-rs/uuid/releases/tag/1.10.0)

[Compare Source](https://togithub.com/uuid-rs/uuid/compare/1.9.1...1.10.0)

##### Deprecations

This release deprecates and renames the following functions:

-   `Builder::from_rfc4122_timestamp` -> `Builder::from_gregorian_timestamp`
-   `Builder::from_sorted_rfc4122_timestamp` -> `Builder::from_sorted_gregorian_timestamp`
-   `Timestamp::from_rfc4122` -> `Timestamp::from_gregorian`
-   `Timestamp::to_rfc4122` -> `Timestamp::to_gregorian`

##### What's Changed

-   Use const identifier in uuid macro by [@&#8203;Vrajs16](https://togithub.com/Vrajs16) in [https://github.com/uuid-rs/uuid/pull/764](https://togithub.com/uuid-rs/uuid/pull/764)
-   Rename most methods referring to RFC4122 by [@&#8203;Mikopet](https://togithub.com/Mikopet) / [@&#8203;KodrAus](https://togithub.com/KodrAus) in [https://github.com/uuid-rs/uuid/pull/765](https://togithub.com/uuid-rs/uuid/pull/765)
-   prepare for 1.10.0 release by [@&#8203;KodrAus](https://togithub.com/KodrAus) in [https://github.com/uuid-rs/uuid/pull/766](https://togithub.com/uuid-rs/uuid/pull/766)

##### New Contributors

-   [@&#8203;Vrajs16](https://togithub.com/Vrajs16) made their first contribution in [https://github.com/uuid-rs/uuid/pull/764](https://togithub.com/uuid-rs/uuid/pull/764)

**Full Changelog**: https://github.com/uuid-rs/uuid/compare/1.9.1...1.10.0

</details>

<details>
<summary>IanVS/vitest-fetch-mock (vitest-fetch-mock)</summary>

### [`v0.3.0`](https://togithub.com/IanVS/vitest-fetch-mock/releases/tag/v0.3.0)

[Compare Source](https://togithub.com/IanVS/vitest-fetch-mock/compare/v0.2.2...v0.3.0)

#### Breaking changes

-   Support Vitest 2
-   Require Node 18 and above

#### Fixes

-   Better TypeScript support

#### PRs:

-   Update to vitest 2 by [@&#8203;birtles](https://togithub.com/birtles) in [https://github.com/IanVS/vitest-fetch-mock/pull/18](https://togithub.com/IanVS/vitest-fetch-mock/pull/18)
-   Update dependencies by [@&#8203;IanVS](https://togithub.com/IanVS) in [https://github.com/IanVS/vitest-fetch-mock/pull/20](https://togithub.com/IanVS/vitest-fetch-mock/pull/20)
-   Update node versions tested in CI by [@&#8203;IanVS](https://togithub.com/IanVS) in [https://github.com/IanVS/vitest-fetch-mock/pull/19](https://togithub.com/IanVS/vitest-fetch-mock/pull/19)
-   Fix: move index.d.ts alongside index.js main entry by [@&#8203;drwpow](https://togithub.com/drwpow) in [https://github.com/IanVS/vitest-fetch-mock/pull/11](https://togithub.com/IanVS/vitest-fetch-mock/pull/11)

#### New Contributors

-   [@&#8203;birtles](https://togithub.com/birtles) made their first contribution in [https://github.com/IanVS/vitest-fetch-mock/pull/18](https://togithub.com/IanVS/vitest-fetch-mock/pull/18)
-   [@&#8203;drwpow](https://togithub.com/drwpow) made their first contribution in [https://github.com/IanVS/vitest-fetch-mock/pull/11](https://togithub.com/IanVS/vitest-fetch-mock/pull/11)

**Full Changelog**: https://github.com/IanVS/vitest-fetch-mock/compare/v0.2.2...v0.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.

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

---

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

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzEuNCIsInVwZGF0ZWRJblZlciI6IjM3LjQzMS40IiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2024-07-15 15:22:52 +00:00
DarkSky
1f50c1b890 fix: handle gql error correctly (#7507) 2024-07-15 09:24:43 +00:00
renovate
b50c57a3fa chore: bump up all non-major dependencies (#7433)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type | Update |
|---|---|---|---|---|---|---|---|
| [@aws-sdk/client-s3](https://togithub.com/aws/aws-sdk-js-v3/tree/main/clients/client-s3) ([source](https://togithub.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3)) | [`3.609.0` -> `3.614.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fclient-s3/3.609.0/3.614.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fclient-s3/3.614.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fclient-s3/3.614.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fclient-s3/3.609.0/3.614.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fclient-s3/3.609.0/3.614.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@aws-sdk/client-s3](https://togithub.com/aws/aws-sdk-js-v3/tree/main/clients/client-s3) ([source](https://togithub.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3)) | [`3.609.0` -> `3.614.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fclient-s3/3.609.0/3.614.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fclient-s3/3.614.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fclient-s3/3.614.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fclient-s3/3.609.0/3.614.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fclient-s3/3.609.0/3.614.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@fal-ai/serverless-client](https://togithub.com/fal-ai/fal-js) ([source](https://togithub.com/fal-ai/fal-js/tree/HEAD/libs/client)) | [`^0.12.0` -> `^0.13.0`](https://renovatebot.com/diffs/npm/@fal-ai%2fserverless-client/0.12.0/0.13.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@fal-ai%2fserverless-client/0.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@fal-ai%2fserverless-client/0.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@fal-ai%2fserverless-client/0.12.0/0.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@fal-ai%2fserverless-client/0.12.0/0.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@google-cloud/opentelemetry-cloud-monitoring-exporter](https://togithub.com/GoogleCloudPlatform/opentelemetry-operations-js) | [`^0.18.0` -> `^0.19.0`](https://renovatebot.com/diffs/npm/@google-cloud%2fopentelemetry-cloud-monitoring-exporter/0.18.0/0.19.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@google-cloud%2fopentelemetry-cloud-monitoring-exporter/0.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@google-cloud%2fopentelemetry-cloud-monitoring-exporter/0.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@google-cloud%2fopentelemetry-cloud-monitoring-exporter/0.18.0/0.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@google-cloud%2fopentelemetry-cloud-monitoring-exporter/0.18.0/0.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@google-cloud/opentelemetry-cloud-trace-exporter](https://togithub.com/GoogleCloudPlatform/opentelemetry-operations-js) | [`2.2.0` -> `2.3.0`](https://renovatebot.com/diffs/npm/@google-cloud%2fopentelemetry-cloud-trace-exporter/2.2.0/2.3.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@google-cloud%2fopentelemetry-cloud-trace-exporter/2.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@google-cloud%2fopentelemetry-cloud-trace-exporter/2.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@google-cloud%2fopentelemetry-cloud-trace-exporter/2.2.0/2.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@google-cloud%2fopentelemetry-cloud-trace-exporter/2.2.0/2.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@google-cloud/opentelemetry-resource-util](https://togithub.com/GoogleCloudPlatform/opentelemetry-operations-js) | [`2.2.0` -> `2.3.0`](https://renovatebot.com/diffs/npm/@google-cloud%2fopentelemetry-resource-util/2.2.0/2.3.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@google-cloud%2fopentelemetry-resource-util/2.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@google-cloud%2fopentelemetry-resource-util/2.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@google-cloud%2fopentelemetry-resource-util/2.2.0/2.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@google-cloud%2fopentelemetry-resource-util/2.2.0/2.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@marsidev/react-turnstile](https://togithub.com/marsidev/react-turnstile) | [`0.7.1` -> `0.7.2`](https://renovatebot.com/diffs/npm/@marsidev%2freact-turnstile/0.7.1/0.7.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@marsidev%2freact-turnstile/0.7.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@marsidev%2freact-turnstile/0.7.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@marsidev%2freact-turnstile/0.7.1/0.7.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@marsidev%2freact-turnstile/0.7.1/0.7.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@napi-rs/cli](https://togithub.com/napi-rs/napi-rs) | [`3.0.0-alpha.56` -> `3.0.0-alpha.58`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.0.0-alpha.56/3.0.0-alpha.58) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fcli/3.0.0-alpha.58?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@napi-rs%2fcli/3.0.0-alpha.58?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@napi-rs%2fcli/3.0.0-alpha.56/3.0.0-alpha.58?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@napi-rs%2fcli/3.0.0-alpha.56/3.0.0-alpha.58?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@nx/vite](https://nx.dev) ([source](https://togithub.com/nrwl/nx/tree/HEAD/packages/vite)) | [`19.4.1` -> `19.4.3`](https://renovatebot.com/diffs/npm/@nx%2fvite/19.4.1/19.4.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nx%2fvite/19.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nx%2fvite/19.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nx%2fvite/19.4.1/19.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nx%2fvite/19.4.1/19.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@playwright/test](https://playwright.dev) ([source](https://togithub.com/microsoft/playwright)) | [`=1.44.1` -> `=1.45.1`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.44.1/1.45.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@playwright%2ftest/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@playwright%2ftest/1.44.1/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.44.1/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@prisma/client](https://www.prisma.io) ([source](https://togithub.com/prisma/prisma/tree/HEAD/packages/client)) | [`5.16.1` -> `5.16.2`](https://renovatebot.com/diffs/npm/@prisma%2fclient/5.16.1/5.16.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@prisma%2fclient/5.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@prisma%2fclient/5.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@prisma%2fclient/5.16.1/5.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@prisma%2fclient/5.16.1/5.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@prisma/instrumentation](https://www.prisma.io) ([source](https://togithub.com/prisma/prisma/tree/HEAD/packages/instrumentation)) | [`5.16.1` -> `5.16.2`](https://renovatebot.com/diffs/npm/@prisma%2finstrumentation/5.16.1/5.16.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@prisma%2finstrumentation/5.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@prisma%2finstrumentation/5.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@prisma%2finstrumentation/5.16.1/5.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@prisma%2finstrumentation/5.16.1/5.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@sentry/esbuild-plugin](https://togithub.com/getsentry/sentry-javascript-bundler-plugins/tree/main/packages/esbuild-plugin) ([source](https://togithub.com/getsentry/sentry-javascript-bundler-plugins)) | [`2.20.1` -> `2.21.1`](https://renovatebot.com/diffs/npm/@sentry%2fesbuild-plugin/2.20.1/2.21.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2fesbuild-plugin/2.21.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2fesbuild-plugin/2.21.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2fesbuild-plugin/2.20.1/2.21.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2fesbuild-plugin/2.20.1/2.21.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@sentry/react](https://togithub.com/getsentry/sentry-javascript/tree/master/packages/react) ([source](https://togithub.com/getsentry/sentry-javascript)) | [`8.15.0` -> `8.17.0`](https://renovatebot.com/diffs/npm/@sentry%2freact/8.15.0/8.17.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2freact/8.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2freact/8.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2freact/8.15.0/8.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2freact/8.15.0/8.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@sentry/react](https://togithub.com/getsentry/sentry-javascript/tree/master/packages/react) ([source](https://togithub.com/getsentry/sentry-javascript)) | [`8.15.0` -> `8.17.0`](https://renovatebot.com/diffs/npm/@sentry%2freact/8.15.0/8.17.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2freact/8.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2freact/8.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2freact/8.15.0/8.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2freact/8.15.0/8.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@sentry/webpack-plugin](https://togithub.com/getsentry/sentry-javascript-bundler-plugins/tree/main/packages/webpack-plugin) ([source](https://togithub.com/getsentry/sentry-javascript-bundler-plugins)) | [`2.20.1` -> `2.21.1`](https://renovatebot.com/diffs/npm/@sentry%2fwebpack-plugin/2.20.1/2.21.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2fwebpack-plugin/2.21.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2fwebpack-plugin/2.21.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2fwebpack-plugin/2.20.1/2.21.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2fwebpack-plugin/2.20.1/2.21.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@swc/core](https://swc.rs) ([source](https://togithub.com/swc-project/swc)) | [`1.6.7` -> `1.6.13`](https://renovatebot.com/diffs/npm/@swc%2fcore/1.6.7/1.6.13) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@swc%2fcore/1.6.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@swc%2fcore/1.6.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@swc%2fcore/1.6.7/1.6.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@swc%2fcore/1.6.7/1.6.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@types/mixpanel-browser](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/mixpanel-browser) ([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/mixpanel-browser)) | [`2.49.0` -> `2.49.1`](https://renovatebot.com/diffs/npm/@types%2fmixpanel-browser/2.49.0/2.49.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fmixpanel-browser/2.49.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fmixpanel-browser/2.49.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fmixpanel-browser/2.49.0/2.49.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fmixpanel-browser/2.49.0/2.49.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@types/ws](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ws) ([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ws)) | [`8.5.10` -> `8.5.11`](https://renovatebot.com/diffs/npm/@types%2fws/8.5.10/8.5.11) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fws/8.5.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fws/8.5.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fws/8.5.10/8.5.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fws/8.5.10/8.5.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [electron](https://togithub.com/electron/electron) | [`~30.1.0` -> `~30.2.0`](https://renovatebot.com/diffs/npm/electron/30.1.2/30.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/electron/30.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/electron/30.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/electron/30.1.2/30.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/electron/30.1.2/30.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [file-type](https://togithub.com/sindresorhus/file-type) | [`19.1.0` -> `19.1.1`](https://renovatebot.com/diffs/npm/file-type/19.1.0/19.1.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/file-type/19.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/file-type/19.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/file-type/19.1.0/19.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/file-type/19.1.0/19.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [foxact](https://foxact.skk.moe) ([source](https://togithub.com/SukkaW/foxact)) | [`0.2.35` -> `0.2.36`](https://renovatebot.com/diffs/npm/foxact/0.2.35/0.2.36) | [![age](https://developer.mend.io/api/mc/badges/age/npm/foxact/0.2.36?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/foxact/0.2.36?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/foxact/0.2.35/0.2.36?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/foxact/0.2.35/0.2.36?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [glob](https://togithub.com/isaacs/node-glob) | [`10.4.3` -> `10.4.5`](https://renovatebot.com/diffs/npm/glob/10.4.3/10.4.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/glob/10.4.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/glob/10.4.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/glob/10.4.3/10.4.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/glob/10.4.3/10.4.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [i18next](https://www.i18next.com) ([source](https://togithub.com/i18next/i18next)) | [`23.11.5` -> `23.12.1`](https://renovatebot.com/diffs/npm/i18next/23.11.5/23.12.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/i18next/23.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/i18next/23.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/i18next/23.11.5/23.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/i18next/23.11.5/23.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [jotai](https://togithub.com/pmndrs/jotai) | [`2.8.4` -> `2.9.0`](https://renovatebot.com/diffs/npm/jotai/2.8.4/2.9.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/jotai/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jotai/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jotai/2.8.4/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jotai/2.8.4/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [jotai](https://togithub.com/pmndrs/jotai) | [`2.8.4` -> `2.9.0`](https://renovatebot.com/diffs/npm/jotai/2.8.4/2.9.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/jotai/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jotai/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jotai/2.8.4/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jotai/2.8.4/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [jotai-scope](https://togithub.com/jotaijs/jotai-scope) | [`^0.6.0` -> `^0.7.0`](https://renovatebot.com/diffs/npm/jotai-scope/0.6.0/0.7.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/jotai-scope/0.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jotai-scope/0.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jotai-scope/0.6.0/0.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jotai-scope/0.6.0/0.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [lucide-react](https://lucide.dev) ([source](https://togithub.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react)) | [`^0.400.0` -> `^0.408.0`](https://renovatebot.com/diffs/npm/lucide-react/0.400.0/0.408.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lucide-react/0.408.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lucide-react/0.408.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lucide-react/0.400.0/0.408.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lucide-react/0.400.0/0.408.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [napi](https://togithub.com/napi-rs/napi-rs) | `3.0.0-alpha.5` -> `3.0.0-alpha.7` | [![age](https://developer.mend.io/api/mc/badges/age/crate/napi/3.0.0-alpha.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi/3.0.0-alpha.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi/3.0.0-alpha.5/3.0.0-alpha.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi/3.0.0-alpha.5/3.0.0-alpha.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [napi-derive](https://togithub.com/napi-rs/napi-rs) | `3.0.0-alpha.4` -> `3.0.0-alpha.5` | [![age](https://developer.mend.io/api/mc/badges/age/crate/napi-derive/3.0.0-alpha.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi-derive/3.0.0-alpha.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi-derive/3.0.0-alpha.4/3.0.0-alpha.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi-derive/3.0.0-alpha.4/3.0.0-alpha.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [node](https://nodejs.org) ([source](https://togithub.com/nodejs/node)) | `20.15.0` -> `20.15.1` | [![age](https://developer.mend.io/api/mc/badges/age/node-version/node/v20.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/node-version/node/v20.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/node-version/node/v20.15.0/v20.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/node-version/node/v20.15.0/v20.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |  | patch |
| [nx](https://nx.dev) ([source](https://togithub.com/nrwl/nx/tree/HEAD/packages/nx)) | [`19.4.1` -> `19.4.3`](https://renovatebot.com/diffs/npm/nx/19.4.1/19.4.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/nx/19.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/nx/19.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/nx/19.4.1/19.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/nx/19.4.1/19.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [openai](https://togithub.com/openai/openai-node) | [`4.52.3` -> `4.52.7`](https://renovatebot.com/diffs/npm/openai/4.52.3/4.52.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/openai/4.52.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/openai/4.52.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/openai/4.52.3/4.52.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/openai/4.52.3/4.52.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [playwright](https://playwright.dev) ([source](https://togithub.com/microsoft/playwright)) | [`=1.44.1` -> `=1.45.1`](https://renovatebot.com/diffs/npm/playwright/1.44.1/1.45.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/playwright/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/playwright/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/playwright/1.44.1/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/playwright/1.44.1/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [prettier](https://prettier.io) ([source](https://togithub.com/prettier/prettier)) | [`3.3.2` -> `3.3.3`](https://renovatebot.com/diffs/npm/prettier/3.3.2/3.3.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/prettier/3.3.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/prettier/3.3.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/prettier/3.3.2/3.3.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prettier/3.3.2/3.3.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [prisma](https://www.prisma.io) ([source](https://togithub.com/prisma/prisma/tree/HEAD/packages/cli)) | [`5.16.1` -> `5.16.2`](https://renovatebot.com/diffs/npm/prisma/5.16.1/5.16.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/prisma/5.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/prisma/5.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/prisma/5.16.1/5.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prisma/5.16.1/5.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [react-virtuoso](https://virtuoso.dev/) ([source](https://togithub.com/petyosi/react-virtuoso)) | [`4.7.11` -> `4.7.12`](https://renovatebot.com/diffs/npm/react-virtuoso/4.7.11/4.7.12) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-virtuoso/4.7.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-virtuoso/4.7.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-virtuoso/4.7.11/4.7.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-virtuoso/4.7.11/4.7.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [serde](https://serde.rs) ([source](https://togithub.com/serde-rs/serde)) | `1.0.203` -> `1.0.204` | [![age](https://developer.mend.io/api/mc/badges/age/crate/serde/1.0.204?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/serde/1.0.204?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/serde/1.0.203/1.0.204?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/serde/1.0.203/1.0.204?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [storybook-dark-mode](https://togithub.com/hipstersmoothie/storybook-dark-mode) | [`4.0.1` -> `4.0.2`](https://renovatebot.com/diffs/npm/storybook-dark-mode/4.0.1/4.0.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/storybook-dark-mode/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/storybook-dark-mode/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/storybook-dark-mode/4.0.1/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/storybook-dark-mode/4.0.1/4.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [tailwind-merge](https://togithub.com/dcastil/tailwind-merge) | [`2.3.0` -> `2.4.0`](https://renovatebot.com/diffs/npm/tailwind-merge/2.3.0/2.4.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/tailwind-merge/2.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tailwind-merge/2.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tailwind-merge/2.3.0/2.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tailwind-merge/2.3.0/2.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [typedoc](https://typedoc.org) ([source](https://togithub.com/TypeStrong/TypeDoc)) | [`0.26.3` -> `0.26.4`](https://renovatebot.com/diffs/npm/typedoc/0.26.3/0.26.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/typedoc/0.26.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/typedoc/0.26.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/typedoc/0.26.3/0.26.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typedoc/0.26.3/0.26.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [uuid](https://togithub.com/uuid-rs/uuid) | `1.9.1` -> `1.10.0` | [![age](https://developer.mend.io/api/mc/badges/age/crate/uuid/1.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/uuid/1.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/uuid/1.9.1/1.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/uuid/1.9.1/1.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | minor |
| [vitest-fetch-mock](https://togithub.com/IanVS/vitest-fetch-mock) | [`^0.2.2` -> `^0.3.0`](https://renovatebot.com/diffs/npm/vitest-fetch-mock/0.2.2/0.3.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vitest-fetch-mock/0.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest-fetch-mock/0.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest-fetch-mock/0.2.2/0.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest-fetch-mock/0.2.2/0.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [webpack](https://togithub.com/webpack/webpack) | [`5.92.1` -> `5.93.0`](https://renovatebot.com/diffs/npm/webpack/5.92.1/5.93.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/webpack/5.93.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/webpack/5.93.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/webpack/5.92.1/5.93.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/webpack/5.92.1/5.93.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [wrangler](https://togithub.com/cloudflare/workers-sdk) ([source](https://togithub.com/cloudflare/workers-sdk/tree/HEAD/packages/wrangler)) | [`3.63.1` -> `3.64.0`](https://renovatebot.com/diffs/npm/wrangler/3.63.1/3.64.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/wrangler/3.64.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/wrangler/3.64.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/wrangler/3.63.1/3.64.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/wrangler/3.63.1/3.64.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |

---

### Release Notes

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

### [`v3.614.0`](https://togithub.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#36140-2024-07-10)

[Compare Source](https://togithub.com/aws/aws-sdk-js-v3/compare/v3.613.0...v3.614.0)

**Note:** Version bump only for package [@&#8203;aws-sdk/client-s3](https://togithub.com/aws-sdk/client-s3)

### [`v3.613.0`](https://togithub.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#36130-2024-07-09)

[Compare Source](https://togithub.com/aws/aws-sdk-js-v3/compare/v3.609.0...v3.613.0)

**Note:** Version bump only for package [@&#8203;aws-sdk/client-s3](https://togithub.com/aws-sdk/client-s3)

</details>

<details>
<summary>fal-ai/fal-js (@&#8203;fal-ai/serverless-client)</summary>

### [`v0.13.0`](4ea43b4cea...cf300e9cc0)

[Compare Source](4ea43b4cea...cf300e9cc0)

</details>

<details>
<summary>GoogleCloudPlatform/opentelemetry-operations-js (@&#8203;google-cloud/opentelemetry-cloud-monitoring-exporter)</summary>

### [`v0.19.0`](https://togithub.com/GoogleCloudPlatform/opentelemetry-operations-js/compare/@google-cloud/opentelemetry-cloud-monitoring-exporter@0.18.0...@google-cloud/opentelemetry-cloud-monitoring-exporter@0.19.0)

[Compare Source](https://togithub.com/GoogleCloudPlatform/opentelemetry-operations-js/compare/@google-cloud/opentelemetry-cloud-monitoring-exporter@0.18.0...@google-cloud/opentelemetry-cloud-monitoring-exporter@0.19.0)

</details>

<details>
<summary>marsidev/react-turnstile (@&#8203;marsidev/react-turnstile)</summary>

### [`v0.7.2`](https://togithub.com/marsidev/react-turnstile/releases/tag/v0.7.2)

[Compare Source](https://togithub.com/marsidev/react-turnstile/compare/v0.7.1...v0.7.2)

#####    🐞 Bug Fixes

-   Resetting widgets solved ref back to false on widget unmount  -  by [@&#8203;kkatsi](https://togithub.com/kkatsi) [<samp>(77f36)</samp>](https://togithub.com/marsidev/react-turnstile/commit/77f3686)

#####     [View changes on GitHub](https://togithub.com/marsidev/react-turnstile/compare/v0.7.1...v0.7.2)

</details>

<details>
<summary>napi-rs/napi-rs (@&#8203;napi-rs/cli)</summary>

### [`v3.0.0-alpha.58`](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.57...@napi-rs/cli@3.0.0-alpha.58)

[Compare Source](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.57...@napi-rs/cli@3.0.0-alpha.58)

### [`v3.0.0-alpha.57`](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.56...@napi-rs/cli@3.0.0-alpha.57)

[Compare Source](https://togithub.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.56...@napi-rs/cli@3.0.0-alpha.57)

</details>

<details>
<summary>nrwl/nx (@&#8203;nx/vite)</summary>

### [`v19.4.3`](https://togithub.com/nrwl/nx/releases/tag/19.4.3)

[Compare Source](https://togithub.com/nrwl/nx/compare/19.4.2...19.4.3)

#### 19.4.3 (2024-07-12)

##### 🚀 Features

-   **core:** avoid forking process for nx:noop ([#&#8203;26869](https://togithub.com/nrwl/nx/pull/26869))
-   **js:** add createNodesV2 for typescript plugin ([#&#8203;26788](https://togithub.com/nrwl/nx/pull/26788))
-   **nx-dev:** add customers & company pages ([#&#8203;26813](https://togithub.com/nrwl/nx/pull/26813))
-   **nx-dev:** Add more OSS logos ([#&#8203;26922](https://togithub.com/nrwl/nx/pull/26922))

##### 🩹 Fixes

-   **core:** load isolated plugins in parallel ([#&#8203;26874](https://togithub.com/nrwl/nx/pull/26874))
-   **core:** report should work if project graph errors ([#&#8203;26858](https://togithub.com/nrwl/nx/pull/26858))
-   **misc:** properly set the value of the bitbucket option for ci work… ([#&#8203;26890](https://togithub.com/nrwl/nx/pull/26890))
-   **misc:** add more ab testing for setting up ci and nx cloud ([#&#8203;26907](https://togithub.com/nrwl/nx/pull/26907))
-   **vite:** Only attempt to amend test object if one exists ([#&#8203;26822](https://togithub.com/nrwl/nx/pull/26822))
-   **vue:** bump vue-tsc version to 2.x.x ([#&#8203;26867](https://togithub.com/nrwl/nx/pull/26867))

##### ❤️  Thank You

-   Craigory Coppola [@&#8203;AgentEnder](https://togithub.com/AgentEnder)
-   Jason Jean [@&#8203;FrozenPandaz](https://togithub.com/FrozenPandaz)
-   Jasper McCulloch
-   Leosvel Pérez Espinosa [@&#8203;leosvelperez](https://togithub.com/leosvelperez)
-   Nicholas Cunningham [@&#8203;ndcunningham](https://togithub.com/ndcunningham)

### [`v19.4.2`](https://togithub.com/nrwl/nx/releases/tag/19.4.2)

[Compare Source](https://togithub.com/nrwl/nx/compare/19.4.1...19.4.2)

#### 19.4.2 (2024-07-08)

##### 🚀 Features

-   **core:** add support for wildcards in dependsOn ([#&#8203;19611](https://togithub.com/nrwl/nx/pull/19611))
-   **linter:** support `eslint.config.cjs` and `*.cjs` extension with flat config ([#&#8203;26637](https://togithub.com/nrwl/nx/pull/26637))

##### 🩹 Fixes

-   **core:** ensure better create nodes error messaging ([#&#8203;26811](https://togithub.com/nrwl/nx/pull/26811))
-   **misc:** adjust nx cloud ab test ([#&#8203;26866](https://togithub.com/nrwl/nx/pull/26866))

##### ❤️  Thank You

-   Ben Snyder
-   Craigory Coppola [@&#8203;AgentEnder](https://togithub.com/AgentEnder)
-   Jason Jean [@&#8203;FrozenPandaz](https://togithub.com/FrozenPandaz)
-   Pavlo [@&#8203;fxposter](https://togithub.com/fxposter)

</details>

<details>
<summary>microsoft/playwright (@&#8203;playwright/test)</summary>

### [`v1.45.1`](https://togithub.com/microsoft/playwright/compare/v1.45.0...e8989f83d9801cdaadc3803b5341c601c9593947)

[Compare Source](https://togithub.com/microsoft/playwright/compare/v1.45.0...v1.45.1)

### [`v1.45.0`](https://togithub.com/microsoft/playwright/compare/v1.44.1...4f3f6eecae490af444dd9298c9eaeb0c596915b7)

[Compare Source](https://togithub.com/microsoft/playwright/compare/v1.44.1...v1.45.0)

</details>

<details>
<summary>prisma/prisma (@&#8203;prisma/client)</summary>

### [`v5.16.2`](https://togithub.com/prisma/prisma/releases/tag/5.16.2)

[Compare Source](https://togithub.com/prisma/prisma/compare/5.16.1...5.16.2)

Today, we are issuing the 5.16.2 patch release to fix an issue in Prisma client.

#### Fix in Prisma Client

-   [nextjs app deployed to vercel edge can't import prisma WASM modul ](https://togithub.com/prisma/prisma/issues/24673)

</details>

<details>
<summary>getsentry/sentry-javascript-bundler-plugins (@&#8203;sentry/esbuild-plugin)</summary>

### [`v2.21.1`](https://togithub.com/getsentry/sentry-javascript-bundler-plugins/blob/HEAD/CHANGELOG.md#2211)

[Compare Source](https://togithub.com/getsentry/sentry-javascript-bundler-plugins/compare/2.21.0...2.21.1)

-   fix: Do not delete files before all upload tasks executed ([#&#8203;572](https://togithub.com/getsentry/sentry-javascript-bundler-plugins/issues/572))

Work in this release contributed by [@&#8203;tyouzu1](https://togithub.com/tyouzu1). Thank you for your contribution!

### [`v2.21.0`](https://togithub.com/getsentry/sentry-javascript-bundler-plugins/blob/HEAD/CHANGELOG.md#2210)

[Compare Source](https://togithub.com/getsentry/sentry-javascript-bundler-plugins/compare/2.20.1...2.21.0)

-   fix: Use `sequential` and `post` order for vite artifact deletion ([#&#8203;568](https://togithub.com/getsentry/sentry-javascript-bundler-plugins/issues/568))
-   feat: Add option to disable sourcemaps ([#&#8203;561](https://togithub.com/getsentry/sentry-javascript-bundler-plugins/issues/561))

Work in this release contributed by [@&#8203;tyouzu1](https://togithub.com/tyouzu1). Thank you for your contribution!

</details>

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

### [`v8.17.0`](https://togithub.com/getsentry/sentry-javascript/blob/HEAD/CHANGELOG.md#8170)

[Compare Source](https://togithub.com/getsentry/sentry-javascript/compare/8.16.0...8.17.0)

-   feat: Upgrade OTEL deps ([#&#8203;12809](https://togithub.com/getsentry/sentry-javascript/issues/12809))
-   fix(nuxt): Add module to build:transpile script ([#&#8203;12843](https://togithub.com/getsentry/sentry-javascript/issues/12843))
-   fix(browser): Allow SDK initialization in NW.js apps ([#&#8203;12846](https://togithub.com/getsentry/sentry-javascript/issues/12846))

### [`v8.16.0`](https://togithub.com/getsentry/sentry-javascript/blob/HEAD/CHANGELOG.md#8160)

[Compare Source](https://togithub.com/getsentry/sentry-javascript/compare/8.15.0...8.16.0)

##### Important Changes

-   **feat(nextjs): Use spans generated by Next.js for App Router ([#&#8203;12729](https://togithub.com/getsentry/sentry-javascript/issues/12729))**

Previously, the `@sentry/nextjs` SDK automatically recorded spans in the form of transactions for each of your top-level
server components (pages, layouts, ...). This approach had a few drawbacks, the main ones being that traces didn't have
a root span, and more importantly, if you had data stream to the client, its duration was not captured because the
server component spans had finished before the data could finish streaming.

With this release, we will capture the duration of App Router requests in their entirety as a single transaction with
server component spans being descendants of that transaction. This means you will get more data that is also more
accurate. Note that this does not apply to the Edge runtime. For the Edge runtime, the SDK will emit transactions as it
has before.

Generally speaking, this change means that you will see less *transactions* and more *spans* in Sentry. You will no
longer receive server component transactions like `Page Server Component (/path/to/route)` (unless using the Edge
runtime), and you will instead receive transactions for your App Router SSR requests that look like
`GET /path/to/route`.

If you are on Sentry SaaS, this may have an effect on your quota consumption: Less transactions, more spans.

-   **- feat(nestjs): Add nest cron monitoring support ([#&#8203;12781](https://togithub.com/getsentry/sentry-javascript/issues/12781))**

The `@sentry/nestjs` SDK now includes a `@SentryCron` decorator that can be used to augment the native NestJS `@Cron`
decorator to send check-ins to Sentry before and after each cron job run:

```typescript
import { Cron } from '@&#8203;nestjs/schedule';
import { SentryCron, MonitorConfig } from '@&#8203;sentry/nestjs';
import type { MonitorConfig } from '@&#8203;sentry/types';

const monitorConfig: MonitorConfig = {
  schedule: {
    type: 'crontab',
    value: '* * * * *',
  },
  checkinMargin: 2, // In minutes. Optional.
  maxRuntime: 10, // In minutes. Optional.
  timezone: 'America/Los_Angeles', // Optional.
};

export class MyCronService {
  @&#8203;Cron('* * * * *')
  @&#8203;SentryCron('my-monitor-slug', monitorConfig)
  handleCron() {
    // Your cron job logic here
  }
}
```

##### Other Changes

-   feat(node): Allow to pass instrumentation config to `httpIntegration` ([#&#8203;12761](https://togithub.com/getsentry/sentry-javascript/issues/12761))
-   feat(nuxt): Add server error hook ([#&#8203;12796](https://togithub.com/getsentry/sentry-javascript/issues/12796))
-   feat(nuxt): Inject sentry config with Nuxt `addPluginTemplate` ([#&#8203;12760](https://togithub.com/getsentry/sentry-javascript/issues/12760))
-   fix: Apply stack frame metadata before event processors ([#&#8203;12799](https://togithub.com/getsentry/sentry-javascript/issues/12799))
-   fix(feedback): Add missing `h` import in `ScreenshotEditor` ([#&#8203;12784](https://togithub.com/getsentry/sentry-javascript/issues/12784))
-   fix(node): Ensure `autoSessionTracking` is enabled by default ([#&#8203;12790](https://togithub.com/getsentry/sentry-javascript/issues/12790))
-   ref(feedback): Let CropCorner inherit the existing h prop ([#&#8203;12814](https://togithub.com/getsentry/sentry-javascript/issues/12814))
-   ref(otel): Ensure we never swallow args for ContextManager ([#&#8203;12798](https://togithub.com/getsentry/sentry-javascript/issues/12798))

</details>

<details>
<summary>swc-project/swc (@&#8203;swc/core)</summary>

### [`v1.6.13`](https://togithub.com/swc-project/swc/blob/HEAD/CHANGELOG.md#1613---2024-07-06)

[Compare Source](https://togithub.com/swc-project/swc/compare/v1.6.12...v1.6.13)

##### Bug Fixes

-   **(es/parser)** Revert [#&#8203;9141](https://togithub.com/swc-project/swc/issues/9141) ([#&#8203;9171](https://togithub.com/swc-project/swc/issues/9171)) ([8b66d5e](8b66d5e89b))

-   **(es/testing)** Fix `PluginCommentProxy` ([#&#8203;9170](https://togithub.com/swc-project/swc/issues/9170)) ([d86ca2d](d86ca2d49e))

##### Features

-   **(es/typescript)** Improve fast TS strip ([#&#8203;9166](https://togithub.com/swc-project/swc/issues/9166)) ([ee8dc28](ee8dc28d4d))

-   **(es/typescript)** Improve fast TS strip ([#&#8203;9167](https://togithub.com/swc-project/swc/issues/9167)) ([98af589](98af5890da))

##### Testing

-   **(es/minfiier)** Improve comment testing ([#&#8203;9164](https://togithub.com/swc-project/swc/issues/9164)) ([f90574d](f90574d045))

### [`v1.6.12`](https://togithub.com/swc-project/swc/blob/HEAD/CHANGELOG.md#1612---2024-07-06)

[Compare Source](https://togithub.com/swc-project/swc/compare/v1.6.7...v1.6.12)

##### Bug Fixes

-   **(ci)** Restore disabled CI checks ([#&#8203;9002](https://togithub.com/swc-project/swc/issues/9002)) ([cdfd4c8](cdfd4c85e4))

-   **(es/decorators)** Fix bugs of `2022-03` implementation ([#&#8203;9145](https://togithub.com/swc-project/swc/issues/9145)) ([8a3ae44](8a3ae44370))

-   **(es/loader)** Exclude `.json` from default extension list ([#&#8203;9134](https://togithub.com/swc-project/swc/issues/9134)) ([e94e5e7](e94e5e70c3))

-   **(es/minifier)** Fix `undefined` judgement ([#&#8203;9146](https://togithub.com/swc-project/swc/issues/9146)) ([1a739b7](1a739b7928))

-   **(es/renamer)** Fix renaming of default-exported declarations ([#&#8203;9135](https://togithub.com/swc-project/swc/issues/9135)) ([45f671d](45f671d8d8))

-   **(es/renamer)** Remove `FastJsWord` ([#&#8203;9136](https://togithub.com/swc-project/swc/issues/9136)) ([42b4caf](42b4caf573))

-   **(es/typescript)** Fix tricky cases in TS fast strip ([#&#8203;9159](https://togithub.com/swc-project/swc/issues/9159)) ([2bc51b8](2bc51b8ab2))

-   **(es/typescript)** Fix replacement logic of fast TS strip ([#&#8203;9163](https://togithub.com/swc-project/swc/issues/9163)) ([c5acafe](c5acafe386))

##### Features

-   **(bindings/ts)** Add transform/strip-only mode ([#&#8203;9138](https://togithub.com/swc-project/swc/issues/9138)) ([a08bb46](a08bb46ebd))

-   **(es/testing)** Improve comment testing story ([#&#8203;9150](https://togithub.com/swc-project/swc/issues/9150)) ([3638e97](3638e97c80))

-   **(es/typescript)** Add `swc_fast_ts_strip` ([#&#8203;9143](https://togithub.com/swc-project/swc/issues/9143)) ([b129343](b129343c94))

-   **(es/typescript)** Improve fast TS stripper ([#&#8203;9152](https://togithub.com/swc-project/swc/issues/9152)) ([9fca4ab](9fca4ab555))

-   **(es/typescript)** Improve fast TS stripper ([#&#8203;9153](https://togithub.com/swc-project/swc/issues/9153)) ([732d748](732d748d4e))

-   **(es/typescript)** Improve fast TS strip ([#&#8203;9154](https://togithub.com/swc-project/swc/issues/9154)) ([05c7210](05c721030a))

##### Performance

-   **(es)** Reduce allocations for dynamic stacks ([#&#8203;9133](https://togithub.com/swc-project/swc/issues/9133)) ([648830a](648830a9a9))

##### Refactor

-   **(bindings/ts)** Inline Wasm file into `wasm.js` ([#&#8203;9139](https://togithub.com/swc-project/swc/issues/9139)) ([307b6f2](307b6f27a6))

-   **(es/parser)** Improve readability ([#&#8203;9141](https://togithub.com/swc-project/swc/issues/9141)) ([9d9fe66](9d9fe6625b))

</details>

<details>
<summary>electron/electron (electron)</summary>

### [`v30.2.0`](https://togithub.com/electron/electron/releases/tag/v30.2.0): electron v30.2.0

[Compare Source](https://togithub.com/electron/electron/compare/v30.1.2...v30.2.0)

##### Release Notes for v30.2.0

##### Features

-   Enabled the Windows Control Overlay API on Linux. [#&#8203;42683](https://togithub.com/electron/electron/pull/42683) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42682), [32](https://togithub.com/electron/electron/pull/42681))</span>
-   Expose `systemPreferences` to `utilityProcess`. [#&#8203;42600](https://togithub.com/electron/electron/pull/42600) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42598), [32](https://togithub.com/electron/electron/pull/42599))</span>

##### Fixes

-   Fixed a focus issue when calling `BrowserWindow.setTopBrowserView`. [#&#8203;42735](https://togithub.com/electron/electron/pull/42735) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42734), [32](https://togithub.com/electron/electron/pull/42733))</span>
-   Fixed an issue where `fetch`-dependent interfaces could be missing in Web Workers with `nodeIntegrationInWorker` enabled. [#&#8203;42596](https://togithub.com/electron/electron/pull/42596) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42597), [32](https://togithub.com/electron/electron/pull/42595))</span>
-   Fixed an issue where `navigator.mediaDevices.enumerateDevices`  could return broken results in some cases after calling `session.setPermissionCheckHandler`. [#&#8203;42807](https://togithub.com/electron/electron/pull/42807) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42809), [32](https://togithub.com/electron/electron/pull/42808))</span>
-   Fixed an issue where control could fail to return properly after saving a dialog using showOpenDialogSync on Linux. [#&#8203;42676](https://togithub.com/electron/electron/pull/42676) <span style="font-size:small;">(Also in [29](https://togithub.com/electron/electron/pull/42679), [31](https://togithub.com/electron/electron/pull/42678), [32](https://togithub.com/electron/electron/pull/42677))</span>
-   Fixed an issue where the user-specified default path did not work in some circumstances when using Linux dialogs. [#&#8203;42687](https://togithub.com/electron/electron/pull/42687) <span style="font-size:small;">(Also in [31](https://togithub.com/electron/electron/pull/42685), [32](https://togithub.com/electron/electron/pull/42680))</span>
-   Fixed potentially incorrect exit code in UtilityProcess. [#&#8203;42395](https://togithub.com/electron/electron/pull/42395) <span style="font-size:small;">(Also in [29](https://togithub.com/electron/electron/pull/42396), [31](https://togithub.com/electron/electron/pull/42397))</span>

##### Other Changes

-   Security: backported fix for CVE-2024-5493. [#&#8203;42590](https://togithub.com/electron/electron/pull/42590)
-   Security: backported fix for CVE-2024-5831.
    -   Security: backported fix for CVE-2024-5832. [#&#8203;42602](https://togithub.com/electron/electron/pull/42602)
-   Security: backported fix for CVE-2024-6100.
    -   Security: backported fix for CVE-2024-6101.
    -   Security: backported fix for CVE-2024-6103. [#&#8203;42617](https://togithub.com/electron/electron/pull/42617)
-   Security: backported fix for CVE-2024-6291.
    -   Security: backported fix for CVE-2024-6293.
    -   Security: backported fix for CVE-2024-6290.
    -   Security: backported fix for CVE-2024-6292.
    -   Security: backported fix for chromium:346197738. [#&#8203;42693](https://togithub.com/electron/electron/pull/42693)
-   Updated Node.js to v20.15.0. [#&#8203;42613](https://togithub.com/electron/electron/pull/42613)

</details>

<details>
<summary>si

</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://togithub.com/renovatebot/renovate/discussions) if that's undesired.

---

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

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjEuOSIsInVwZGF0ZWRJblZlciI6IjM3LjQzMS40IiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2024-07-15 08:20:22 +00:00
EYHN
063c206289 chore: bump blocksuite (#7489) 2024-07-15 07:58:26 +00:00
CatsJuice
242c41b440 feat(core): adjust center peek animation (#7393) 2024-07-15 06:36:24 +00:00
CatsJuice
7082f7ea7a fix(core): share-button's label of shared page should be 'shared' (#7486)
close #7427
2024-07-15 06:21:22 +00:00
pengx17
15042394be chore: expose FrameworkEvent (#7500)
fix the following ts error

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/3ba44c29-50e9-4830-9c6e-19bf44b661f3.png)
2024-07-15 05:29:53 +00:00
darkskygit
e4b816f153 feat: add ping for event source (#7493) 2024-07-15 04:16:22 +00:00
EYHN
7103b2e594 feat(component): new dnd api (#7467) 2024-07-15 04:00:42 +00:00
EYHN
dca88e24fe feat(electron): shared storage (#7492) 2024-07-15 03:21:08 +00:00
EYHN
0f1409756e refactor(infra): memento use undefined (#7491) 2024-07-15 02:48:20 +00:00
lawvs
2f784ae539 fix: switch to file-type v19.1.0 (#7459)
The official `file-type` package has replaced the usage of node:buffer with Uint8Array. This change allows it to run safely in the browser now.

Related to https://github.com/sindresorhus/file-type/issues/578
2024-07-12 10:27:49 +00:00
donteatfriedrice
5ede985a3a fix: increase image action time out (#7487)
Increase image action timeout from 50000ms to 120000ms.
2024-07-12 06:36:30 +00:00
forehalo
024e5500f6 feat(infra): improve orm (#7475) 2024-07-12 04:25:59 +00:00
EYHN
5dd7382693 refactor(core): workbench (#7355)
Merge the right sidebar logic into the workbench. this can simplify our logic.

Previously we had 3 modules

* workbench
* right-sidebar (Control sidebar open&close)
* multi-tab-sidebar (Control tabs)

Now everything is managed in Workbench.

# Behavioral changes

The sidebar button is always visible and can be opened at any time.
If there is no content to display,  will be `No Selection`

![CleanShot 2024-06-28 at 14.00.41.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/g3jz87HxbjOJpXV3FPT7/d74b3a60-2299-452e-877e-188186fe5ee5.png)

Elements in the sidebar can now be defined as`unmountOnInactive=false`. Inactive sidebars are marked with `display: none` but not unmount, so the `ChatPanel` can always remain in the DOM and user input will be retained even if the sidebar is closed.
2024-07-12 04:11:05 +00:00
darkskygit
5f16cb400d hotfix: adapt new fal response (#7480) 2024-07-12 03:22:04 +00:00
darkskygit
4591b3391e chore: fix redirect for static files (#7473) 2024-07-11 08:25:33 +00:00
EYHN
c2f93f9512 fix(infra): failed to get status when database not ready (#7470) 2024-07-11 06:40:35 +00:00
CatsJuice
c850dbb2b7 refactor(core): optimize abstraction of sidebar doc tree structure (#7455) 2024-07-11 06:24:45 +00:00
pengx17
7a35b78772 fix: telemetry property names (#7468) 2024-07-11 02:35:39 +00:00
forehalo
2f441d9335 chore: clean up runtime flags and envs (#7454) 2024-07-11 02:05:31 +00:00
darkskygit
0739e10683 feat: adapt workflow for ppt & minimap (#7464) 2024-07-10 10:13:17 +00:00
Cats Juice
22187f964a fix(core): impl ai-island animation via css transform (#7458) 2024-07-09 16:17:55 +08:00
doouding
cf7b026832 feat: bump bs (#7430)
## Features

## Bugfix
- https://github.com/toeverything/BlockSuite/pull/7499 @doouding
- https://github.com/toeverything/BlockSuite/pull/7491 @golok727

## Refactor

## Misc
- https://github.com/toeverything/BlockSuite/pull/7454 @CatsJuice
2024-07-09 07:56:16 +00:00
JimmFly
e6818b4f14 feat(core): add doc info modal (#7409)
close AF-1038
close AF-1039
close AF-1040
close AF-1046

A popup window has been added to facilitate viewing of this doc's info in edgeless mode and other modes.

https://github.com/toeverything/AFFiNE/assets/102217452/d7f94cb6-7e32-4ce7-8ff4-8aba1309b331
2024-07-09 07:05:20 +00:00
EYHN
aab9925aa1 feat(core): adjust search strategy (#7447) 2024-07-09 04:27:34 +00:00
pengx17
86218d87c2 chore: revert back electron to v30 (#7453) 2024-07-09 03:50:13 +00:00
forehalo
de4084495b chore(graphql): generate new schema 2024-07-08 17:21:21 +08:00
CatsJuice
13a2562282 feat(core): believer subscription UI (#7431)
feat(core): switch ai and cloud plans position

feat(core): impl lifetime subscription ui

feat(core): adapt ui for lifetime status

feat(core): add believer card in billing page
2024-07-08 08:31:22 +00:00
darkskygit
556956ced2 feat: update ppt prompt (#7446) 2024-07-08 08:11:31 +00:00
darkskygit
bf6c9a5955 feat: add prompt level config (#7445) 2024-07-08 08:11:22 +00:00
forehalo
9ef8829ef1 feat(server): add lifetime plan flag (#7443) 2024-07-08 07:41:30 +00:00
forehalo
de91027852 feat(server): support lifetime subscription (#7405)
closes CLOUD-48

- [x] lifetime subscription quota
- [ ] tests
2024-07-08 07:41:26 +00:00
forehalo
7235779b02 fix(core): use uint53 as yjs client id (#7444) 2024-07-08 07:24:32 +00:00
LongYinan
ba356f4412 fix(native): async fn compile error (#7435) 2024-07-08 15:04:37 +08:00
renovate
602d932065 chore: bump up all non-major dependencies (#7308)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type | Update |
|---|---|---|---|---|---|---|---|
| [@aws-sdk/client-s3](https://togithub.com/aws/aws-sdk-js-v3/tree/main/clients/client-s3) ([source](https://togithub.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3)) | [`3.592.0` -> `3.609.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fclient-s3/3.592.0/3.609.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fclient-s3/3.609.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fclient-s3/3.609.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fclient-s3/3.592.0/3.609.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fclient-s3/3.592.0/3.609.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@aws-sdk/client-s3](https://togithub.com/aws/aws-sdk-js-v3/tree/main/clients/client-s3) ([source](https://togithub.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3)) | [`3.600.0` -> `3.609.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fclient-s3/3.600.0/3.609.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fclient-s3/3.609.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fclient-s3/3.609.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fclient-s3/3.600.0/3.609.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fclient-s3/3.600.0/3.609.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@fal-ai/serverless-client](https://togithub.com/fal-ai/fal-js) ([source](https://togithub.com/fal-ai/fal-js/tree/HEAD/libs/client)) | [`^0.10.2` -> `^0.12.0`](https://renovatebot.com/diffs/npm/@fal-ai%2fserverless-client/0.10.4/0.12.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@fal-ai%2fserverless-client/0.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@fal-ai%2fserverless-client/0.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@fal-ai%2fserverless-client/0.10.4/0.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@fal-ai%2fserverless-client/0.10.4/0.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@floating-ui/dom](https://floating-ui.com) ([source](https://togithub.com/floating-ui/floating-ui/tree/HEAD/packages/dom)) | [`1.6.5` -> `1.6.7`](https://renovatebot.com/diffs/npm/@floating-ui%2fdom/1.6.5/1.6.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@floating-ui%2fdom/1.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@floating-ui%2fdom/1.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@floating-ui%2fdom/1.6.5/1.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@floating-ui%2fdom/1.6.5/1.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@graphql-codegen/typescript](https://togithub.com/dotansimha/graphql-code-generator) ([source](https://togithub.com/dotansimha/graphql-code-generator/tree/HEAD/packages/plugins/typescript/typescript)) | [`4.0.7` -> `4.0.9`](https://renovatebot.com/diffs/npm/@graphql-codegen%2ftypescript/4.0.7/4.0.9) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@graphql-codegen%2ftypescript/4.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@graphql-codegen%2ftypescript/4.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@graphql-codegen%2ftypescript/4.0.7/4.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@graphql-codegen%2ftypescript/4.0.7/4.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@graphql-codegen/typescript-operations](https://togithub.com/dotansimha/graphql-code-generator) ([source](https://togithub.com/dotansimha/graphql-code-generator/tree/HEAD/packages/plugins/typescript/operations)) | [`4.2.1` -> `4.2.3`](https://renovatebot.com/diffs/npm/@graphql-codegen%2ftypescript-operations/4.2.1/4.2.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@graphql-codegen%2ftypescript-operations/4.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@graphql-codegen%2ftypescript-operations/4.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@graphql-codegen%2ftypescript-operations/4.2.1/4.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@graphql-codegen%2ftypescript-operations/4.2.1/4.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@hookform/resolvers](https://react-hook-form.com) ([source](https://togithub.com/react-hook-form/resolvers)) | [`3.6.0` -> `3.9.0`](https://renovatebot.com/diffs/npm/@hookform%2fresolvers/3.6.0/3.9.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@hookform%2fresolvers/3.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@hookform%2fresolvers/3.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@hookform%2fresolvers/3.6.0/3.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@hookform%2fresolvers/3.6.0/3.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@napi-rs/cli](https://togithub.com/napi-rs/napi-rs) | [`3.0.0-alpha.55` -> `3.0.0-alpha.56`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.0.0-alpha.55/3.0.0-alpha.56) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fcli/3.0.0-alpha.56?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@napi-rs%2fcli/3.0.0-alpha.56?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@napi-rs%2fcli/3.0.0-alpha.55/3.0.0-alpha.56?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@napi-rs%2fcli/3.0.0-alpha.55/3.0.0-alpha.56?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@nestjs/apollo](https://togithub.com/nestjs/graphql) | [`12.1.0` -> `12.2.0`](https://renovatebot.com/diffs/npm/@nestjs%2fapollo/12.1.0/12.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fapollo/12.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fapollo/12.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fapollo/12.1.0/12.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fapollo/12.1.0/12.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@nestjs/common](https://nestjs.com) ([source](https://togithub.com/nestjs/nest/tree/HEAD/packages/common)) | [`10.3.9` -> `10.3.10`](https://renovatebot.com/diffs/npm/@nestjs%2fcommon/10.3.9/10.3.10) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fcommon/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fcommon/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fcommon/10.3.9/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fcommon/10.3.9/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@nestjs/core](https://nestjs.com) ([source](https://togithub.com/nestjs/nest/tree/HEAD/packages/core)) | [`10.3.9` -> `10.3.10`](https://renovatebot.com/diffs/npm/@nestjs%2fcore/10.3.9/10.3.10) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fcore/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fcore/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fcore/10.3.9/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fcore/10.3.9/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@nestjs/graphql](https://togithub.com/nestjs/graphql) | [`12.1.1` -> `12.2.0`](https://renovatebot.com/diffs/npm/@nestjs%2fgraphql/12.1.1/12.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fgraphql/12.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fgraphql/12.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fgraphql/12.1.1/12.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fgraphql/12.1.1/12.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@nestjs/platform-express](https://nestjs.com) ([source](https://togithub.com/nestjs/nest/tree/HEAD/packages/platform-express)) | [`10.3.9` -> `10.3.10`](https://renovatebot.com/diffs/npm/@nestjs%2fplatform-express/10.3.9/10.3.10) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fplatform-express/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fplatform-express/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fplatform-express/10.3.9/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fplatform-express/10.3.9/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@nestjs/platform-socket.io](https://nestjs.com) ([source](https://togithub.com/nestjs/nest/tree/HEAD/packages/platform-socket.io)) | [`10.3.9` -> `10.3.10`](https://renovatebot.com/diffs/npm/@nestjs%2fplatform-socket.io/10.3.9/10.3.10) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fplatform-socket.io/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fplatform-socket.io/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fplatform-socket.io/10.3.9/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fplatform-socket.io/10.3.9/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@nestjs/schedule](https://togithub.com/nestjs/schedule) | [`4.0.2` -> `4.1.0`](https://renovatebot.com/diffs/npm/@nestjs%2fschedule/4.0.2/4.1.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fschedule/4.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fschedule/4.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fschedule/4.0.2/4.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fschedule/4.0.2/4.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@nestjs/testing](https://nestjs.com) ([source](https://togithub.com/nestjs/nest/tree/HEAD/packages/testing)) | [`10.3.9` -> `10.3.10`](https://renovatebot.com/diffs/npm/@nestjs%2ftesting/10.3.9/10.3.10) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2ftesting/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2ftesting/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2ftesting/10.3.9/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2ftesting/10.3.9/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@nestjs/throttler](https://togithub.com/nestjs/throttler) | [`5.1.2` -> `5.2.0`](https://renovatebot.com/diffs/npm/@nestjs%2fthrottler/5.1.2/5.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fthrottler/5.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fthrottler/5.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fthrottler/5.1.2/5.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fthrottler/5.1.2/5.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@nestjs/websockets](https://togithub.com/nestjs/nest) ([source](https://togithub.com/nestjs/nest/tree/HEAD/packages/websockets)) | [`10.3.9` -> `10.3.10`](https://renovatebot.com/diffs/npm/@nestjs%2fwebsockets/10.3.9/10.3.10) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fwebsockets/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fwebsockets/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fwebsockets/10.3.9/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fwebsockets/10.3.9/10.3.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@nx/vite](https://nx.dev) ([source](https://togithub.com/nrwl/nx/tree/HEAD/packages/vite)) | [`19.2.3` -> `19.4.1`](https://renovatebot.com/diffs/npm/@nx%2fvite/19.2.3/19.4.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nx%2fvite/19.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nx%2fvite/19.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nx%2fvite/19.2.3/19.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nx%2fvite/19.2.3/19.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@opentelemetry/host-metrics](https://togithub.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/opentelemetry-host-metrics#readme) ([source](https://togithub.com/open-telemetry/opentelemetry-js-contrib)) | [`0.35.2` -> `0.35.3`](https://renovatebot.com/diffs/npm/@opentelemetry%2fhost-metrics/0.35.2/0.35.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2fhost-metrics/0.35.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2fhost-metrics/0.35.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2fhost-metrics/0.35.2/0.35.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2fhost-metrics/0.35.2/0.35.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@opentelemetry/instrumentation-graphql](https://togithub.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-graphql#readme) ([source](https://togithub.com/open-telemetry/opentelemetry-js-contrib)) | [`^0.41.0` -> `^0.42.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation-graphql/0.41.0/0.42.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation-graphql/0.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation-graphql/0.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation-graphql/0.41.0/0.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation-graphql/0.41.0/0.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@opentelemetry/instrumentation-ioredis](https://togithub.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-ioredis#readme) ([source](https://togithub.com/open-telemetry/opentelemetry-js-contrib)) | [`^0.41.0` -> `^0.42.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation-ioredis/0.41.0/0.42.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation-ioredis/0.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation-ioredis/0.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation-ioredis/0.41.0/0.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation-ioredis/0.41.0/0.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@opentelemetry/instrumentation-nestjs-core](https://togithub.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-nestjs-core#readme) ([source](https://togithub.com/open-telemetry/opentelemetry-js-contrib)) | [`^0.38.0` -> `^0.39.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation-nestjs-core/0.38.0/0.39.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation-nestjs-core/0.39.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation-nestjs-core/0.39.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation-nestjs-core/0.38.0/0.39.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation-nestjs-core/0.38.0/0.39.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@opentelemetry/instrumentation-socket.io](https://togithub.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/instrumentation-socket.io#readme) ([source](https://togithub.com/open-telemetry/opentelemetry-js-contrib)) | [`^0.40.0` -> `^0.41.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation-socket.io/0.40.0/0.41.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation-socket.io/0.41.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation-socket.io/0.41.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation-socket.io/0.40.0/0.41.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation-socket.io/0.40.0/0.41.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@playwright/test](https://playwright.dev) ([source](https://togithub.com/microsoft/playwright)) | [`1.44.1` -> `1.45.1`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.44.1/1.45.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@playwright%2ftest/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@playwright%2ftest/1.44.1/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.44.1/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@prisma/client](https://www.prisma.io) ([source](https://togithub.com/prisma/prisma/tree/HEAD/packages/client)) | [`5.15.1` -> `5.16.1`](https://renovatebot.com/diffs/npm/@prisma%2fclient/5.15.1/5.16.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@prisma%2fclient/5.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@prisma%2fclient/5.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@prisma%2fclient/5.15.1/5.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@prisma%2fclient/5.15.1/5.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@prisma/instrumentation](https://www.prisma.io) ([source](https://togithub.com/prisma/prisma/tree/HEAD/packages/instrumentation)) | [`5.15.1` -> `5.16.1`](https://renovatebot.com/diffs/npm/@prisma%2finstrumentation/5.15.1/5.16.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@prisma%2finstrumentation/5.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@prisma%2finstrumentation/5.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@prisma%2finstrumentation/5.15.1/5.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@prisma%2finstrumentation/5.15.1/5.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@radix-ui/react-checkbox](https://radix-ui.com/primitives) ([source](https://togithub.com/radix-ui/primitives)) | [`1.1.0` -> `1.1.1`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-checkbox/1.1.0/1.1.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-checkbox/1.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-checkbox/1.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-checkbox/1.1.0/1.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-checkbox/1.1.0/1.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-tooltip](https://radix-ui.com/primitives) ([source](https://togithub.com/radix-ui/primitives)) | [`1.1.1` -> `1.1.2`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-tooltip/1.1.1/1.1.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-tooltip/1.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-tooltip/1.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-tooltip/1.1.1/1.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-tooltip/1.1.1/1.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@sentry/esbuild-plugin](https://togithub.com/getsentry/sentry-javascript-bundler-plugins/tree/main/packages/esbuild-plugin) ([source](https://togithub.com/getsentry/sentry-javascript-bundler-plugins)) | [`2.19.0` -> `2.20.1`](https://renovatebot.com/diffs/npm/@sentry%2fesbuild-plugin/2.19.0/2.20.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2fesbuild-plugin/2.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2fesbuild-plugin/2.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2fesbuild-plugin/2.19.0/2.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2fesbuild-plugin/2.19.0/2.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@sentry/react](https://togithub.com/getsentry/sentry-javascript/tree/master/packages/react) ([source](https://togithub.com/getsentry/sentry-javascript)) | [`8.11.0` -> `8.15.0`](https://renovatebot.com/diffs/npm/@sentry%2freact/8.11.0/8.15.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2freact/8.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2freact/8.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2freact/8.11.0/8.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2freact/8.11.0/8.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@sentry/react](https://togithub.com/getsentry/sentry-javascript/tree/master/packages/react) ([source](https://togithub.com/getsentry/sentry-javascript)) | [`8.11.0` -> `8.15.0`](https://renovatebot.com/diffs/npm/@sentry%2freact/8.11.0/8.15.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2freact/8.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2freact/8.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2freact/8.11.0/8.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2freact/8.11.0/8.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@sentry/webpack-plugin](https://togithub.com/getsentry/sentry-javascript-bundler-plugins/tree/main/packages/webpack-plugin) ([source](https://togithub.com/getsentry/sentry-javascript-bundler-plugins)) | [`2.19.0` -> `2.20.1`](https://renovatebot.com/diffs/npm/@sentry%2fwebpack-plugin/2.19.0/2.20.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2fwebpack-plugin/2.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2fwebpack-plugin/2.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2fwebpack-plugin/2.19.0/2.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2fwebpack-plugin/2.19.0/2.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@storybook/addon-actions](https://togithub.com/storybookjs/storybook/tree/next/code/addons/actions) ([source](https://togithub.com/storybookjs/storybook/tree/HEAD/code/addons/actions)) | [`7.6.19` -> `7.6.20`](https://renovatebot.com/diffs/npm/@storybook%2faddon-actions/7.6.19/7.6.20) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-actions/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-actions/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-actions/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-actions/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@storybook/addon-essentials](https://togithub.com/storybookjs/storybook/tree/next/code/addons/essentials) ([source](https://togithub.com/storybookjs/storybook/tree/HEAD/code/addons/essentials)) | [`7.6.19` -> `7.6.20`](https://renovatebot.com/diffs/npm/@storybook%2faddon-essentials/7.6.19/7.6.20) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-essentials/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-essentials/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-essentials/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-essentials/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@storybook/addon-interactions](https://togithub.com/storybookjs/storybook/tree/next/code/addons/interactions) ([source](https://togithub.com/storybookjs/storybook/tree/HEAD/code/addons/interactions)) | [`7.6.19` -> `7.6.20`](https://renovatebot.com/diffs/npm/@storybook%2faddon-interactions/7.6.19/7.6.20) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-interactions/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-interactions/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-interactions/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-interactions/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@storybook/addon-links](https://togithub.com/storybookjs/storybook/tree/next/code/addons/links) ([source](https://togithub.com/storybookjs/storybook/tree/HEAD/code/addons/links)) | [`7.6.19` -> `7.6.20`](https://renovatebot.com/diffs/npm/@storybook%2faddon-links/7.6.19/7.6.20) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-links/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-links/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-links/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-links/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@storybook/addon-mdx-gfm](https://togithub.com/storybookjs/storybook/tree/next/code/addons/gfm) ([source](https://togithub.com/storybookjs/storybook/tree/HEAD/code/addons/gfm)) | [`7.6.19` -> `7.6.20`](https://renovatebot.com/diffs/npm/@storybook%2faddon-mdx-gfm/7.6.19/7.6.20) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-mdx-gfm/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-mdx-gfm/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-mdx-gfm/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-mdx-gfm/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@storybook/addon-storysource](https://togithub.com/storybookjs/storybook/tree/next/code/addons/storysource) ([source](https://togithub.com/storybookjs/storybook/tree/HEAD/code/addons/storysource)) | [`7.6.19` -> `7.6.20`](https://renovatebot.com/diffs/npm/@storybook%2faddon-storysource/7.6.19/7.6.20) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-storysource/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-storysource/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-storysource/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-storysource/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@storybook/blocks](https://togithub.com/storybookjs/storybook/tree/next/code/ui/blocks) ([source](https://togithub.com/storybookjs/storybook/tree/HEAD/code/ui/blocks)) | [`7.6.19` -> `7.6.20`](https://renovatebot.com/diffs/npm/@storybook%2fblocks/7.6.19/7.6.20) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2fblocks/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2fblocks/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2fblocks/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2fblocks/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@storybook/builder-vite](https://togithub.com/storybookjs/storybook/tree/next/code/builders/builder-vite/#readme) ([source](https://togithub.com/storybookjs/storybook/tree/HEAD/code/builders/builder-vite)) | [`7.6.19` -> `7.6.20`](https://renovatebot.com/diffs/npm/@storybook%2fbuilder-vite/7.6.19/7.6.20) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2fbuilder-vite/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2fbuilder-vite/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2fbuilder-vite/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2fbuilder-vite/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@storybook/react](https://togithub.com/storybookjs/storybook/tree/next/code/renderers/react) ([source](https://togithub.com/storybookjs/storybook/tree/HEAD/code/renderers/react)) | [`7.6.19` -> `7.6.20`](https://renovatebot.com/diffs/npm/@storybook%2freact/7.6.19/7.6.20) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2freact/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2freact/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2freact/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2freact/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@storybook/react-vite](https://togithub.com/storybookjs/storybook/tree/next/code/frameworks/react-vite) ([source](https://togithub.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite)) | [`7.6.19` -> `7.6.20`](https://renovatebot.com/diffs/npm/@storybook%2freact-vite/7.6.19/7.6.20) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2freact-vite/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2freact-vite/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2freact-vite/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2freact-vite/7.6.19/7.6.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@storybook/test-runner](https://togithub.com/storybookjs/test-runner) | [`^0.18.0` -> `^0.19.0`](https://renovatebot.com/diffs/npm/@storybook%2ftest-runner/0.18.2/0.19.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2ftest-runner/0.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2ftest-runner/0.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2ftest-runner/0.18.2/0.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2ftest-runner/0.18.2/0.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@swc/core](https://swc.rs) ([source](https://togithub.com/swc-project/swc)) | [`1.6.5` -> `1.6.7`](https://renovatebot.com/diffs/npm/@swc%2fcore/1.6.5/1.6.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@swc%2fcore/1.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@swc%2fcore/1.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@swc%2fcore/1.6.5/1.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@swc%2fcore/1.6.5/1.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@types/node](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`20.14.8` -> `20.14.10`](https://renovatebot.com/diffs/npm/@types%2fnode/20.14.8/20.14.10) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/20.14.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/20.14.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/20.14.8/20.14.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/20.14.8/20.14.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@vanilla-extract/vite-plugin](https://togithub.com/vanilla-extract-css/vanilla-extract) ([source](https://togithub.com/vanilla-extract-css/vanilla-extract/tree/HEAD/packages/vite-plugin)) | [`4.0.11` -> `4.0.13`](https://renovatebot.com/diffs/npm/@vanilla-extract%2fvite-plugin/4.0.11/4.0.13) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vanilla-extract%2fvite-plugin/4.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vanilla-extract%2fvite-plugin/4.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vanilla-extract%2fvite-plugin/4.0.11/4.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vanilla-extract%2fvite-plugin/4.0.11/4.0.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@vanilla-extract/webpack-plugin](https://togithub.com/vanilla-extract-css/vanilla-extract) ([source](https://togithub.com/vanilla-extract-css/vanilla-extract/tree/HEAD/packages/webpack-plugin)) | [`2.3.10` -> `2.3.11`](https://renovatebot.com/diffs/npm/@vanilla-extract%2fwebpack-plugin/2.3.10/2.3.11) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vanilla-extract%2fwebpack-plugin/2.3.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vanilla-extract%2fwebpack-plugin/2.3.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vanilla-extract%2fwebpack-plugin/2.3.10/2.3.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vanilla-extract%2fwebpack-plugin/2.3.10/2.3.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [builder-util-runtime](https://togithub.com/electron-userland/electron-builder) ([source](https://togithub.com/electron-userland/electron-builder/tree/HEAD/packages/builder-util-runtime)) | [`9.2.5-alpha.2` -> `9.2.5-alpha.3`](https://renovatebot.com/diffs/npm/builder-util-runtime/9.2.5-alpha.2/9.2.5-alpha.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/builder-util-runtime/9.2.5-alpha.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/builder-util-runtime/9.2.5-alpha.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/builder-util-runtime/9.2.5-alpha.2/9.2.5-alpha.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/builder-util-runtime/9.2.5-alpha.2/9.2.5-alpha.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [cloudflare/wrangler-action](https://togithub.com/cloudflare/wrangler-action) | `v3.6.1` -> `v3.7.0` | [![age](https://developer.mend.io/api/mc/badges/age/github-tags/cloudflare%2fwrangler-action/v3.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/github-tags/cloudflare%2fwrangler-action/v3.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/github-tags/cloudflare%2fwrangler-action/v3.6.1/v3.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/github-tags/cloudflare%2fwrangler-action/v3.6.1/v3.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | action | minor |
| [cssnano](https://togithub.com/cssnano/cssnano) | [`7.0.3` -> `7.0.4`](https://renovatebot.com/diffs/npm/cssnano/7.0.3/7.0.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/cssnano/7.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cssnano/7.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cssnano/7.0.3/7.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cssnano/7.0.3/7.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [embla-carousel-react](https://www.embla-carousel.com) ([source](https://togithub.com/davidjerleke/embla-carousel)) | [`8.1.5` -> `8.1.6`](https://renovatebot.com/diffs/npm/embla-carousel-react/8.1.5/8.1.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/embla-carousel-react/8.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/embla-carousel-react/8.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/embla-carousel-react/8.1.5/8.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/embla-carousel-react/8.1.5/8.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [esbuild](https://togithub.com/evanw/esbuild) | [`^0.21.0` -> `^0.23.0`](https://renovatebot.com/diffs/npm/esbuild/0.21.5/0.23.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/esbuild/0.23.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/esbuild/0.23.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/esbuild/0.21.5/0.23.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/esbuild/0.21.5/0.23.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [glob](https://togithub.com/isaacs/node-glob) | [`10.4.2` -> `10.4.3`](https://renovatebot.com/diffs/npm/glob/10.4.2/10.4.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/glob/10.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/glob/10.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/glob/10.4.2/10.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/glob/10.4.2/10.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [jotai](https://togithub.com/pmndrs/jotai) | [`2.8.3` -> `2.8.4`](https://renovatebot.com/diffs/npm/jotai/2.8.3/2.8.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/jotai/2.8.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jotai/2.8.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jotai/2.8.3/2.8.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jotai/2.8.3/2.8.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [jotai](https://togithub.com/pmndrs/jotai) | [`2.8.3` -> `2.8.4`](https://renovatebot.com/diffs/npm/jotai/2.8.3/2.8.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/jotai/2.8.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jotai/2.8.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jotai/2.8.3/2.8.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jotai/2.8.3/2.8.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [lucide-react](https://lucide.dev) ([source](https://togithub.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react)) | [`^0.394.0` -> `^0.400.0`](https://renovatebot.com/diffs/npm/lucide-react/0.394.0/0.400.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lucide-react/0.400.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lucide-react/0.400.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lucide-react/0.394.0/0.400.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lucide-react/0.394.0/0.400.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [napi](https://togithub.com/napi-rs/napi-rs) | `3.0.0-alpha.2` -> `3.0.0-alpha.4` | [![age](https://developer.mend.io/api/mc/badges/age/crate/napi/3.0.0-alpha.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi/3.0.0-alpha.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi/3.0.0-alpha.2/3.0.0-alpha.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi/3.0.0-alpha.2/3.0.0-alpha.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [napi-derive](https://togithub.com/napi-rs/napi-rs) | `3.0.0-alpha.1` -> `3.0.0-alpha.3` | [![age](https://developer.mend.io/api/mc/badges/age/crate/napi-derive/3.0.0-alpha.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi-derive/3.0.0-alpha.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi-derive/3.0.0-alpha.1/3.0.0-alpha.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi-derive/3.0.0-alpha.1/3.0.0-alpha.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [nest-commander](https://nest-commander.jaymcdoniel.dev) ([source](https://togithub.com/jmcdo29/nest-commander/tree/HEAD/pacakges/nest-commander)) | [`3.13.0` -> `3.14.0`](https://renovatebot.com/diffs/npm/nest-commander/3.13.0/3.14.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/nest-commander/3.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/nest-commander/3.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/nest-commander/3.13.0/3.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/nest-commander/3.13.0/3.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [node](https://nodejs.org) ([source](https://togithub.com/nodejs/node)) | `20.14.0` -> `20.15.0` | [![age](https://developer.mend.io/api/mc/badges/age/node-version/node/v20.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/node-version/node/v20.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/node-version/node/v20.14.0/v20.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/node-version/node/v20.14.0/v20.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |  | minor |
| [nx](https://nx.dev) ([source](https://togithub.com/nrwl/nx/tree/HEAD/packages/nx)) | [`19.3.1` -> `19.4.1`](https://renovatebot.com/diffs/npm/nx/19.3.1/19.4.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/nx/19.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/nx/19.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/nx/19.3.1/19.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/nx/19.3.1/19.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [openai](https://togithub.com/openai/openai-node) | [`4.52.0` -> `4.52.3`](https://renovatebot.com/diffs/npm/openai/4.52.0/4.52.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/openai/4.52.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/openai/4.52.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/openai/4.52.0/4.52.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/openai/4.52.0/4.52.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [piscina](https://togithub.com/piscinajs/piscina) | [`4.5.1` -> `4.6.1`](https://renovatebot.com/diffs/npm/piscina/4.5.1/4.6.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/piscina/4.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/piscina/4.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/piscina/4.5.1/4.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/piscina/4.5.1/4.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [playwright](https://playwright.dev) ([source](https://togithub.com/microsoft/playwright)) | [`1.44.1` -> `1.45.1`](https://renovatebot.com/diffs/npm/playwright/1.44.1/1.45.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/playwright/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/playwright/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/playwright/1.44.1/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/playwright/1.44.1/1.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [postcss](https://postcss.org/) ([source](https://togithub.com/postcss/postcss)) | [`8.4.38` -> `8.4.39`](https://renovatebot.com/diffs/npm/postcss/8.4.38/8.4.39) | [![age](https://developer.mend.io/api/mc/badges/age/npm/postcss/8.4.39?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/postcss/8.4.39?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/postcss/8.4.38/8.4.39?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/postcss/8.4.38/8.4.39?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [prisma](https://www.prisma.io) ([source](https://togithub.com/prisma/prisma/tree/HEAD/packages/cli)) | [`5.15.1` -> `5.16.1`](https://renovatebot.com/diffs/npm/prisma/5.15.1/5.16.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/prisma/5.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/prisma/5.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/prisma/5.15.1/5.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prisma/5.15.1/5.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [prom-client](https://togithub.com/siimon/prom-client) | [`15.1.2` -> `15.1.3`](https://renovatebot.com/diffs/npm/prom-client/15.1.2/15.1.3) | [![age](https://dev
2024-07-06 08:37:27 +00:00
pengx17
8dfa601771 chore: populate page prop for mixpanel (#7425) 2024-07-05 07:45:39 +00:00
liuyi
481a2269f8 chore: bump blocksuite (#7424) 2024-07-04 15:58:11 +08:00
liuyi
555f203be6 feat(core): run indexer in worker (#7418) 2024-07-04 15:37:26 +08:00
pengx17
5c1f78afd4 fix: invalid date handling (#7422)
fix AF-1049
2024-07-04 07:11:19 +00:00
CatsJuice
d6ad7d566f chore(core): adjust ai onboarding dismiss logic, persist dialog and dismiss once closed (#7417) 2024-07-04 07:00:17 +00:00
hwangdev97
b79d13bcc8 fix: switch style: remove border and shadow (#7423)
- remove border and shadow
- fix position

before 👇
![shot-2024-07-04-11 55 38@2x](https://github.com/toeverything/AFFiNE/assets/24713927/81776294-1cb3-49a9-b6d6-bd800c91b847)

after 👇
![shot-2024-07-04-12 01 20@2x](https://github.com/toeverything/AFFiNE/assets/24713927/812d4567-9c17-4c14-af4f-6eba97f077da)
2024-07-04 04:20:47 +00:00
donteatfriedrice
a0ce75c902 fix: ai button should not display in readonly mode (#7415)
[BS-737](https://linear.app/affine-design/issue/BS-737/shared-page-也可以用-ai)
2024-07-03 07:34:07 +00:00
darkskygit
e8285289fe feat: improve histories query for forked session (#7414) 2024-07-03 04:49:19 +00:00
pengx17
cc7740d8d3 fix: some regression issues on quick search refactor (#7410)
- fix PD-1370. doc link resolve issue on pasting
- fix AF-1029
- implement doc creation in doc search

added two test cases to cover the above two issues.
2024-07-03 03:24:50 +00:00
darkskygit
61870c04d0 feat: fork session support (#7367) 2024-07-03 03:10:09 +00:00
pengx17
10df1fb4b7 fix: menu in peek view content not scrollable issue (#7412)
when using [dialog.overlay](https://github.com/radix-ui/primitives/blob/main/packages/react/dialog/src/Dialog.tsx#L203-L211
), whole app is affected by [react-scroll library](8923c513d2/src/SideEffect.tsx (L131-L134)
):

In the current implementation, only the contents in the dialog content will be scrollable and cannot be configured in current API.

This PR introduces a simple div overlay to get rid of this issue.

fix BS-696
2024-07-03 02:58:41 +00:00
zzj3720
0bc09a9333 feat(core): update blocksuite feature flag (#7408) 2024-07-03 02:47:20 +00:00
forehalo
f0d127fa29 Revert "feat(core): run indexer in worker (#7295)"
This reverts commit c62d79ab14.
2024-07-03 10:16:27 +08:00
pengx17
fc729d6a32 fix: hide find in page command in cmdk (#7413) 2024-07-02 15:48:24 +00:00
pengx17
ef7ba273ab fix: copy share link to clipboard command display issue (#7411)
fix AF-1027
2024-07-02 15:28:30 +00:00
renovate
b8b30e79e5 chore: bump up oxlint version to v0.5.2 (#7383)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

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

---

### Release Notes

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

### [`v0.5.2`](21b964b214...b66ad0b675)

[Compare Source](21b964b214...b66ad0b675)

### [`v0.5.1`](https://togithub.com/oxc-project/oxc/releases/tag/oxlint_v0.5.1): oxlint v0.5.1

[Compare Source](1d74db7774...21b964b214)

#### \[0.5.1] - 2024-06-29

##### Bug Fixes

-   [`c26975a`](https://togithub.com/oxc-project/oxc/commit/c26975a) linter: Only show the filename for max-lines ([#&#8203;3966](https://togithub.com/oxc-project/oxc/issues/3966)) (Boshen)
-   [`94329e4`](https://togithub.com/oxc-project/oxc/commit/94329e4) linter: Handle useful but empty constructors in no-useless-constructor ([#&#8203;3951](https://togithub.com/oxc-project/oxc/issues/3951)) (DonIsaac)
-   [`6498a08`](https://togithub.com/oxc-project/oxc/commit/6498a08) linter: No-useless-spread fixer with multiple spread elements ([#&#8203;3950](https://togithub.com/oxc-project/oxc/issues/3950)) (DonIsaac)

</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 has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjAuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQyMS45IiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2024-07-02 15:17:18 +00:00
pengx17
2a6ea3c9c6 feat(core): allow keyboard navigation in tags inline editor (#7378)
fix AF-966

- Allow using arrowup/down to navigate the tag list candidates; press enter to add the currently focused tag option;
- Allow using arrowleft/right to navigate the inline tag list (selected) and use backspace to delete focused tag.
2024-07-02 14:25:51 +00:00
EYHN
c62d79ab14 feat(core): run indexer in worker (#7295) 2024-07-02 09:18:08 +00:00
EYHN
27d0fc5108 refactor(core): use new backlink indexer (#7296) 2024-07-02 09:18:01 +00:00
EYHN
40e381e272 refactor(core): new quick search service (#7214) 2024-07-02 09:17:54 +00:00
EYHN
15e99c7819 feat(core): docs search service (#7213) 2024-07-02 09:17:47 +00:00
EYHN
3870801ebb feat(infra): job system (#7212) 2024-07-02 09:17:40 +00:00
DarkSky
0957c30e74 docs: Update SECURITY.md (#7406) 2024-07-02 17:13:26 +08:00
EYHN
90e4a9b181 feat: doc search infra (#7166)
detail in `packages/common/infra/src/sync/indexer/README.md`
2024-07-02 08:52:33 +00:00
renovate
1997f24414 chore: bump up webpack-merge version to v6 (#7407)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [webpack-merge](https://togithub.com/survivejs/webpack-merge) | [`^5.10.0` -> `^6.0.0`](https://renovatebot.com/diffs/npm/webpack-merge/5.10.0/6.0.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/webpack-merge/6.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/webpack-merge/6.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/webpack-merge/5.10.0/6.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/webpack-merge/5.10.0/6.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>survivejs/webpack-merge (webpack-merge)</summary>

### [`v6.0.1`](https://togithub.com/survivejs/webpack-merge/blob/HEAD/CHANGELOG.md#601--2024-07-02)

[Compare Source](https://togithub.com/survivejs/webpack-merge/compare/v6.0.0...2f610b9c2da066cc5d035ee83db84e22b7d42fb3)

-   Fix - Restore usage of `clone-deep` as there was a corner case where `structuredClone` did not work as expected. [#&#8203;214](https://togithub.com/survivejs/webpack-merge/issues/214)

### [`v6.0.0`](https://togithub.com/survivejs/webpack-merge/blob/HEAD/CHANGELOG.md#600--xxxx-xx-xx)

[Compare Source](https://togithub.com/survivejs/webpack-merge/compare/v5.10.0...v6.0.0)

-   Chore - Update internal dependencies. As a result, the package needs at least Node 18 to run.
-   Chore - Use `structuredClone` over `clone-deep` dependency since it is included to Node 18 or above. [#&#8203;214](https://togithub.com/survivejs/webpack-merge/issues/214)

</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 has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjEuMCIsInVwZGF0ZWRJblZlciI6IjM3LjQyMS4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2024-07-02 08:32:26 +00:00
EYHN
3f8fe5cfae fix(infra): override saved blocksuite feature flag (#7399) 2024-07-01 11:36:32 +00:00
Peng Xiao
8c4a42f0e6 fix: cmd-k keybinding not show when editor input is active (#7398) 2024-07-01 19:31:36 +08:00
Flrande
4d484ea814 feat: bump blocksuite (#7372) 2024-07-01 19:21:14 +08:00
EYHN
3bbb657a78 feat(core): replace ai template (#7396) 2024-07-01 10:24:54 +00:00
EYHN
39acb51d87 feat(core): adjust orm api (#7392)
Removed the `connect` and `disconnect` functions on the orm `DBAdapter`, making the ORM completely non-asynchronous.
2024-07-01 09:32:15 +00:00
KushalSharmaGit
d72dbe682c fix: ensure exact tag matching with enter key behavior refinement (#7387)
Co-authored-by: Peng Xiao <pengxiao@outlook.com>
2024-07-01 10:16:16 +08:00
EYHN
824be0d4c1 fix(core): fix viewtransition and css property missing (#7377) 2024-06-28 18:03:43 +08:00
golok727
fbf676002f fix: code block toolbar z-index issue in right sidebar (#7376)
Closes: [BS-549](https://linear.app/affine-design/issue/BS-549/code-block-%E5%9C%A8%E5%8F%B3%E4%BE%A7%E8%BE%B9%E6%A0%8F%E6%9C%89-z-index-%E9%97%AE%E9%A2%98%E8%AF%AD%E8%A8%80%E7%9A%84%E4%BF%A1%E6%81%AF%E5%87%BA%E7%8E%B0%E5%9C%A8%E4%BA%86-tab-%E4%B8%8A%E9%9D%A2),[BS-600](https://linear.app/affine-design/issue/BS-600/the-code-toolbar-remains-visible-when-it-overflows-in-the-ai-panel)
2024-06-28 07:48:50 +00:00
regischen
e877f20955 fix: add onboarding entry (#7375)
Don't know why it's missed..
https://github.com/toeverything/AFFiNE/pull/7109
2024-06-28 07:03:33 +00:00
1472 changed files with 55538 additions and 19909 deletions

View File

@@ -1,14 +1,8 @@
ENABLE_PLUGIN=
ENABLE_TEST_PROPERTIES=
ENABLE_BC_PROVIDER=
CHANGELOG_URL=
ENABLE_PRELOADING=
ENABLE_NEW_SETTING_MODAL=
ENABLE_SQLITE_PROVIDER=
ENABLE_NEW_SETTING_UNSTABLE_API=
ENABLE_NOTIFICATION_CENTER=
ENABLE_CLOUD=
ENABLE_MOVE_DATABASE=
SHOULD_REPORT_TRACE=
TRACE_REPORT_ENDPOINT=
CAPTCHA_SITE_KEY=
ENABLE_CAPTCHA=
CAPTCHA_SITE_KEY=
ENABLE_ENHANCE_SHARE_MODE=
ALLOW_LOCAL_WORKSPACE=
DEBUG_JOTAI=

View File

@@ -247,7 +247,8 @@ const config = {
'react-hooks/exhaustive-deps': [
'warn',
{
additionalHooks: 'useAsyncCallback',
additionalHooks:
'(useAsyncCallback|useCatchEventCallback|useDraggable|useDropTarget)',
},
],
},

View File

@@ -17,7 +17,7 @@ runs:
PACKAGE_VERSION=$(node -p "require('./package.json').version")
TIME_VERSION=$(date +%Y%m%d%H%M)
GIT_SHORT_HASH=$(git rev-parse --short HEAD)
APP_VERSION=$PACKAGE_VERSION-nightly-$TIME_VERSION-$GIT_SHORT_HASH
APP_VERSION=$PACKAGE_VERSION-nightly-$GIT_SHORT_HASH
fi
echo $APP_VERSION
echo "APP_VERSION=$APP_VERSION" >> "$GITHUB_OUTPUT"

View File

@@ -6,6 +6,11 @@ server {
try_files $uri/index.html $uri/ $uri /admin/index.html;
}
location ~ ^/(_plugin|assets|imgs|js|plugins|static)/ {
root /app/dist/;
try_files $uri $uri/ =404;
}
location / {
root /app/dist/;
index index.html;

View File

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

View File

@@ -3,7 +3,7 @@ name: graphql
description: AFFiNE GraphQL server
type: application
version: 0.0.0
appVersion: "0.15.0"
appVersion: "0.16.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.15.0"
appVersion: "0.16.0"
dependencies:
- name: gcloud-sql-proxy
version: 0.0.0

View File

@@ -74,4 +74,11 @@ spec:
name: affine-web
port:
number: {{ .Values.web.service.port }}
- path: /js/worker.(.+).js
pathType: ImplementationSpecific
backend:
service:
name: affine-web
port:
number: {{ .Values.web.service.port }}
{{- end }}

View File

@@ -27,7 +27,8 @@
"matchPackagePatterns": ["^@blocksuite"],
"excludePackageNames": ["@blocksuite/icons"],
"rangeStrategy": "replace",
"followTag": "canary"
"followTag": "canary",
"enabled": false
},
{
"groupName": "all non-major dependencies",

View File

@@ -58,7 +58,6 @@ jobs:
run: yarn nx build @affine/web --skip-nx-cache
env:
BUILD_TYPE: ${{ github.event.inputs.flavor }}
SHOULD_REPORT_TRACE: false
PUBLIC_PATH: '/'
SELF_HOSTED: true
MIXPANEL_TOKEN: ${{ secrets.MIXPANEL_TOKEN }}
@@ -86,7 +85,6 @@ jobs:
run: yarn nx build @affine/admin --skip-nx-cache
env:
BUILD_TYPE: ${{ github.event.inputs.flavor }}
SHOULD_REPORT_TRACE: false
PUBLIC_PATH: '/admin/'
SELF_HOSTED: true
MIXPANEL_TOKEN: ${{ secrets.MIXPANEL_TOKEN }}

View File

@@ -443,6 +443,8 @@ jobs:
${{ matrix.tests.script }}
env:
DEV_SERVER_URL: http://localhost:8080
COPILOT_OPENAI_API_KEY: 1
COPILOT_FAL_API_KEY: 1
- name: Upload test results
if: ${{ failure() }}

View File

@@ -45,11 +45,10 @@ jobs:
R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
BUILD_TYPE: ${{ github.event.inputs.flavor }}
SHOULD_REPORT_TRACE: true
TRACE_REPORT_ENDPOINT: ${{ secrets.TRACE_REPORT_ENDPOINT }}
CAPTCHA_SITE_KEY: ${{ secrets.CAPTCHA_SITE_KEY }}
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
SENTRY_PROJECT: 'affine-web'
SENTRY_RELEASE: ${{ steps.version.outputs.APP_VERSION }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
PERFSEE_TOKEN: ${{ secrets.PERFSEE_TOKEN }}
@@ -79,8 +78,6 @@ jobs:
R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
BUILD_TYPE: ${{ github.event.inputs.flavor }}
SHOULD_REPORT_TRACE: true
TRACE_REPORT_ENDPOINT: ${{ secrets.TRACE_REPORT_ENDPOINT }}
CAPTCHA_SITE_KEY: ${{ secrets.CAPTCHA_SITE_KEY }}
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
SENTRY_PROJECT: 'affine-admin'

View File

@@ -27,6 +27,8 @@ permissions:
actions: write
contents: write
security-events: write
id-token: write
attestations: write
env:
BUILD_TYPE: ${{ github.event.inputs.build-type }}
@@ -56,6 +58,7 @@ jobs:
SENTRY_PROJECT: 'affine'
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
SENTRY_RELEASE: ${{ steps.version.outputs.APP_VERSION }}
RELEASE_VERSION: ${{ steps.version.outputs.APP_VERSION }}
SKIP_NX_CACHE: 'true'
MIXPANEL_TOKEN: ${{ secrets.MIXPANEL_TOKEN }}
@@ -158,6 +161,20 @@ jobs:
mv packages/frontend/electron/out/*/make/zip/linux/x64/*.zip ./builds/affine-${{ needs.before-make.outputs.RELEASE_VERSION }}-${{ env.BUILD_TYPE }}-linux-x64.zip
mv packages/frontend/electron/out/*/make/*.AppImage ./builds/affine-${{ needs.before-make.outputs.RELEASE_VERSION }}-${{ env.BUILD_TYPE }}-linux-x64.appimage
- uses: actions/attest-build-provenance@v1
if: ${{ matrix.spec.platform == 'darwin' }}
with:
subject-path: |
./builds/affine-${{ needs.before-make.outputs.RELEASE_VERSION }}-${{ env.BUILD_TYPE }}-macos-${{ matrix.spec.arch }}.zip
./builds/affine-${{ needs.before-make.outputs.RELEASE_VERSION }}-${{ env.BUILD_TYPE }}-macos-${{ matrix.spec.arch }}.dmg
- uses: actions/attest-build-provenance@v1
if: ${{ matrix.spec.platform == 'linux' }}
with:
subject-path: |
./builds/affine-${{ needs.before-make.outputs.RELEASE_VERSION }}-${{ env.BUILD_TYPE }}-linux-x64.zip
./builds/affine-${{ needs.before-make.outputs.RELEASE_VERSION }}-${{ env.BUILD_TYPE }}-linux-x64.appimage
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
@@ -254,6 +271,9 @@ jobs:
FILES_TO_BE_SIGNED: ${{ steps.get_files_to_be_signed.outputs.FILES_TO_BE_SIGNED }}
steps:
- uses: actions/checkout@v4
- name: Setup Version
id: version
uses: ./.github/actions/setup-version
- name: Setup Node.js
timeout-minutes: 10
uses: ./.github/actions/setup-node
@@ -324,6 +344,13 @@ jobs:
mv packages/frontend/electron/out/*/make/squirrel.windows/x64/*.exe ./builds/affine-${{ needs.before-make.outputs.RELEASE_VERSION }}-${{ env.BUILD_TYPE }}-windows-x64.exe
mv packages/frontend/electron/out/*/make/nsis.windows/x64/*.exe ./builds/affine-${{ needs.before-make.outputs.RELEASE_VERSION }}-${{ env.BUILD_TYPE }}-windows-x64.nsis.exe
- uses: actions/attest-build-provenance@v1
with:
subject-path: |
./builds/affine-${{ needs.before-make.outputs.RELEASE_VERSION }}-${{ env.BUILD_TYPE }}-windows-x64.zip
./builds/affine-${{ needs.before-make.outputs.RELEASE_VERSION }}-${{ env.BUILD_TYPE }}-windows-x64.exe
./builds/affine-${{ needs.before-make.outputs.RELEASE_VERSION }}-${{ env.BUILD_TYPE }}-windows-x64.nsis.exe
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
@@ -364,7 +391,7 @@ jobs:
path: ./
- uses: actions/setup-node@v4
with:
node-version: 18
node-version: 20
- name: Generate Release yml
run: |
node ./packages/frontend/electron/scripts/generate-yml.js

View File

@@ -15,7 +15,7 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Publish
uses: cloudflare/wrangler-action@v3.6.1
uses: cloudflare/wrangler-action@v3.7.0
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
accountId: ${{ secrets.CF_ACCOUNT_ID }}

2
.nvmrc
View File

@@ -1 +1 @@
20.14.0
20.15.1

View File

@@ -0,0 +1,39 @@
diff --git a/dist/yjs.cjs b/dist/yjs.cjs
index d2dc06ae11a6eb44f8c8445d4298c0e89c3e4da2..a30ab04fa9f3b77666939caa88335c68c40f194c 100644
--- a/dist/yjs.cjs
+++ b/dist/yjs.cjs
@@ -414,7 +414,7 @@ const equalDeleteSets = (ds1, ds2) => {
*/
-const generateNewClientId = random__namespace.uint32;
+const generateNewClientId = random__namespace.uint53;
/**
* @typedef {Object} DocOpts
diff --git a/dist/yjs.mjs b/dist/yjs.mjs
index 20c9e58c32bcb6bc714200a2561fd1f542c49523..14267e5e36d9781ca3810d5b70ff8c051dac779e 100644
--- a/dist/yjs.mjs
+++ b/dist/yjs.mjs
@@ -378,7 +378,7 @@ const equalDeleteSets = (ds1, ds2) => {
*/
-const generateNewClientId = random.uint32;
+const generateNewClientId = random.uint53;
/**
* @typedef {Object} DocOpts
diff --git a/src/utils/Doc.js b/src/utils/Doc.js
index 62643617c86e57c64dd9babdb792fa8888357ec0..4df5048ab12af1ae0f1154da67f06dce1fda7b49 100644
--- a/src/utils/Doc.js
+++ b/src/utils/Doc.js
@@ -20,7 +20,7 @@ import * as map from 'lib0/map'
import * as array from 'lib0/array'
import * as promise from 'lib0/promise'
-export const generateNewClientId = random.uint32
+export const generateNewClientId = random.uint53
/**
* @typedef {Object} DocOpts

29
Cargo.lock generated
View File

@@ -993,14 +993,15 @@ dependencies = [
[[package]]
name = "napi"
version = "3.0.0-alpha.2"
version = "3.0.0-alpha.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99d38fbf4cbfd7d2785d153f4dcce374d515d3dabd688504dd9093f8135829d0"
checksum = "4ec04344cc540f5897e97c9821ab99e7eb276b4dca6f3e6e441dfa72e5bcde70"
dependencies = [
"anyhow",
"bitflags 2.5.0",
"chrono",
"ctor",
"napi-build",
"napi-sys",
"once_cell",
"serde",
@@ -1015,9 +1016,9 @@ checksum = "e1c0f5d67ee408a4685b61f5ab7e58605c8ae3f2b4189f0127d804ff13d5560a"
[[package]]
name = "napi-derive"
version = "3.0.0-alpha.1"
version = "3.0.0-alpha.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c230c813bfd4d6c7aafead3c075b37f0cf7fecb38be8f4cf5cfcee0b2c273ad0"
checksum = "1c6240c4ddca592cde608bbfa26e2af397c3596e413a0c65c9bbcb65c2f1e485"
dependencies = [
"cfg-if",
"convert_case",
@@ -1029,9 +1030,9 @@ dependencies = [
[[package]]
name = "napi-derive-backend"
version = "2.0.0-alpha.1"
version = "2.0.0-alpha.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4370cc24c2e58d0f3393527b282eb00f1158b304248f549e1ec81bd2927db5fe"
checksum = "b32dcc50065508fe2f387076c17adbdf10e038d1c080d48b10196813d94ac6a8"
dependencies = [
"convert_case",
"once_cell",
@@ -1535,18 +1536,18 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
[[package]]
name = "serde"
version = "1.0.203"
version = "1.0.204"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094"
checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.203"
version = "1.0.204"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba"
checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222"
dependencies = [
"proc-macro2",
"quote",
@@ -1555,9 +1556,9 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.117"
version = "1.0.120"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3"
checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5"
dependencies = [
"itoa",
"ryu",
@@ -2178,9 +2179,9 @@ checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
[[package]]
name = "uuid"
version = "1.9.0"
version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ea73390fe27785838dcbf75b91b1d84799e28f1ce71e6f372a5dc2200c80de5"
checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314"
dependencies = [
"getrandom",
"rand",

View File

@@ -23,7 +23,7 @@
<div align="center">
<a href="https://affine.pro">Home Page</a> |
<a href="https://discord.com/invite/yz6tGVsf5p">Discord</a> |
<a href="https://discord.gg/whd5mjYqVw">Discord</a> |
<a href="https://app.affine.pro">Live Demo</a> |
<a href="https://affine.pro/blog/">Blog</a> |
<a href="https://docs.affine.pro/docs/">Documentation</a>

View File

@@ -6,8 +6,8 @@ We recommend users to always use the latest major version. Security updates will
| Version | Supported |
| --------------- | ------------------ |
| 0.14.x (stable) | :white_check_mark: |
| < 0.14.x | :x: |
| 0.15.x (stable) | :white_check_mark: |
| < 0.15.x | :x: |
## Reporting a Vulnerability

View File

@@ -9,7 +9,7 @@
"devDependencies": {
"nodemon": "^3.1.0",
"serve": "^14.2.1",
"typedoc": "^0.25.13"
"typedoc": "^0.26.0"
},
"nodemonConfig": {
"watch": [
@@ -19,5 +19,5 @@
],
"ext": "ts,md,json"
},
"version": "0.15.0"
"version": "0.16.0"
}

View File

@@ -1,6 +1,6 @@
{
"name": "@affine/monorepo",
"version": "0.15.0",
"version": "0.16.0",
"private": true,
"author": "toeverything",
"license": "MIT",
@@ -59,8 +59,8 @@
"@faker-js/faker": "^8.4.1",
"@istanbuljs/schema": "^0.1.3",
"@magic-works/i18n-codegen": "^0.6.0",
"@nx/vite": "19.2.3",
"@playwright/test": "^1.44.0",
"@nx/vite": "^19.5.3",
"@playwright/test": "=1.44.1",
"@taplo/cli": "^0.7.0",
"@testing-library/react": "^16.0.0",
"@toeverything/infra": "workspace:*",
@@ -75,7 +75,7 @@
"@vitest/coverage-istanbul": "1.6.0",
"@vitest/ui": "1.6.0",
"cross-env": "^7.0.3",
"electron": "^30.1.1",
"electron": "~30.2.0",
"eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-import-x": "^0.5.0",
@@ -95,7 +95,7 @@
"nanoid": "^5.0.7",
"nx": "^19.0.0",
"nyc": "^17.0.0",
"oxlint": "0.5.0",
"oxlint": "0.7.0",
"prettier": "^3.2.5",
"semver": "^7.6.0",
"serve": "^14.2.1",
@@ -107,8 +107,8 @@
"vite-plugin-istanbul": "^6.0.0",
"vite-plugin-static-copy": "^1.0.2",
"vitest": "1.6.0",
"vitest-fetch-mock": "^0.2.2",
"vitest-mock-extended": "^1.3.1"
"vitest-fetch-mock": "^0.3.0",
"vitest-mock-extended": "^2.0.0"
},
"packageManager": "yarn@4.3.1",
"resolutions": {

View File

@@ -1,20 +1,20 @@
/* auto-generated by NAPI-RS */
/* eslint-disable */
export class Tokenizer {
export declare class Tokenizer {
count(content: string, allowedSpecial?: Array<string> | undefined | null): number
}
export function fromModelName(modelName: string): Tokenizer | null
export declare function fromModelName(modelName: string): Tokenizer | null
export function getMime(input: Uint8Array): string
export declare function getMime(input: Uint8Array): string
/**
* Merge updates in form like `Y.applyUpdate(doc, update)` way and return the
* result binary.
*/
export function mergeUpdatesInApplyWay(updates: Array<Buffer>): Buffer
export declare function mergeUpdatesInApplyWay(updates: Array<Buffer>): Buffer
export function mintChallengeResponse(resource: string, bits?: number | undefined | null): Promise<string>
export declare function mintChallengeResponse(resource: string, bits?: number | undefined | null): Promise<string>
export function verifyChallengeResponse(response: string, bits: number, resource: string): Promise<boolean>
export declare function verifyChallengeResponse(response: string, bits: number, resource: string): Promise<boolean>

View File

@@ -1,6 +1,6 @@
{
"name": "@affine/server-native",
"version": "0.15.0",
"version": "0.16.0",
"engines": {
"node": ">= 10.16.0 < 11 || >= 11.8.0"
},
@@ -33,12 +33,12 @@
"build:debug": "napi build"
},
"devDependencies": {
"@napi-rs/cli": "3.0.0-alpha.55",
"@napi-rs/cli": "3.0.0-alpha.60",
"lib0": "^0.2.93",
"nx": "^19.0.0",
"nx-cloud": "^19.0.0",
"tiktoken": "^1.0.15",
"tinybench": "^2.8.0",
"yjs": "^13.6.14"
"yjs": "patch:yjs@npm%3A13.6.18#~/.yarn/patches/yjs-npm-13.6.18-ad0d5f7c43.patch"
}
}

View File

@@ -0,0 +1,3 @@
-- AlterTable
ALTER TABLE "user_subscriptions" ALTER COLUMN "stripe_subscription_id" DROP NOT NULL,
ALTER COLUMN "end" DROP NOT NULL;

View File

@@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "ai_sessions_metadata" ADD COLUMN "parent_session_id" VARCHAR(36);

View File

@@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "ai_prompts_metadata" ADD COLUMN "config" JSON;

View File

@@ -0,0 +1,146 @@
-- AlterTable
ALTER TABLE "_data_migrations" ALTER COLUMN "id" SET DATA TYPE VARCHAR,
ALTER COLUMN "started_at" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "finished_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "ai_prompts_messages" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "ai_prompts_metadata" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "ai_sessions_messages" ALTER COLUMN "id" SET DATA TYPE VARCHAR,
ALTER COLUMN "session_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "updated_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "ai_sessions_metadata" ALTER COLUMN "id" SET DATA TYPE VARCHAR,
ALTER COLUMN "user_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "workspace_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "doc_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "deleted_at" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "parent_session_id" SET DATA TYPE VARCHAR;
-- AlterTable
ALTER TABLE "app_runtime_settings" ALTER COLUMN "updated_at" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "deleted_at" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "last_updated_by" SET DATA TYPE VARCHAR;
-- AlterTable
ALTER TABLE "features" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "multiple_users_sessions" ALTER COLUMN "id" SET DATA TYPE VARCHAR,
ALTER COLUMN "expires_at" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "snapshot_histories"
ALTER COLUMN "workspace_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "guid" SET DATA TYPE VARCHAR,
ALTER COLUMN "timestamp" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "expired_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "snapshots" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "updated_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "updates" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "user_connected_accounts" ALTER COLUMN "id" SET DATA TYPE VARCHAR,
ALTER COLUMN "user_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "expires_at" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "updated_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "user_features" ALTER COLUMN "user_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "expired_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "user_invoices" ALTER COLUMN "user_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "updated_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "user_sessions" ALTER COLUMN "id" SET DATA TYPE VARCHAR,
ALTER COLUMN "session_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "user_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "expires_at" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "user_stripe_customers" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "user_subscriptions" ALTER COLUMN "user_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "start" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "end" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "next_bill_at" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "canceled_at" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "trial_start" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "trial_end" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "updated_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "users" ALTER COLUMN "name" SET DATA TYPE VARCHAR,
ALTER COLUMN "email" SET DATA TYPE VARCHAR,
ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "verification_tokens" ALTER COLUMN "token" SET DATA TYPE VARCHAR,
ALTER COLUMN "expiresAt" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "workspace_features" ALTER COLUMN "workspace_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3),
ALTER COLUMN "expired_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "workspace_page_user_permissions"
ALTER COLUMN "id" SET DATA TYPE VARCHAR,
ALTER COLUMN "workspace_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "page_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "user_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "workspace_pages" ALTER COLUMN "workspace_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "page_id" SET DATA TYPE VARCHAR;
-- AlterTable
ALTER TABLE "workspace_user_permissions" ALTER COLUMN "id" SET DATA TYPE VARCHAR,
ALTER COLUMN "workspace_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "user_id" SET DATA TYPE VARCHAR,
ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3);
-- AlterTable
ALTER TABLE "workspaces" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMP(3);
-- DropTable
DROP TABLE "accounts";
-- DropTable
DROP TABLE "blobs";
-- DropTable
DROP TABLE "new_features_waiting_list";
-- DropTable
DROP TABLE "optimized_blobs";
-- DropTable
DROP TABLE "sessions";
-- DropTable
DROP TABLE "user_workspace_permissions";
-- DropTable
DROP TABLE "verificationtokens";

View File

@@ -0,0 +1,95 @@
/*
Warnings:
- The primary key for the `snapshot_histories` table will be changed. If it partially fails, the table could be left without primary key constraint.
*/
-- AlterTable
ALTER TABLE "_data_migrations" ALTER COLUMN "started_at" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "finished_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "ai_prompts_messages" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "ai_prompts_metadata" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "ai_sessions_messages" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "updated_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "ai_sessions_metadata" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "deleted_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "app_runtime_settings" ALTER COLUMN "updated_at" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "deleted_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "features" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "multiple_users_sessions" ALTER COLUMN "expires_at" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "snapshot_histories" ALTER COLUMN "timestamp" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "expired_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "snapshots" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "updated_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "updates" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "user_connected_accounts" ALTER COLUMN "expires_at" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "updated_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "user_features" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "expired_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "user_invoices" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "updated_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "user_sessions" ALTER COLUMN "expires_at" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "user_stripe_customers" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "user_subscriptions" ALTER COLUMN "start" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "end" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "next_bill_at" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "canceled_at" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "trial_start" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "trial_end" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "updated_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "users" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "email_verified" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "verification_tokens" ALTER COLUMN "expiresAt" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "workspace_features" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3),
ALTER COLUMN "expired_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "workspace_page_user_permissions" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "workspace_user_permissions" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3);
-- AlterTable
ALTER TABLE "workspaces" ALTER COLUMN "created_at" SET DATA TYPE TIMESTAMPTZ(3);

View File

@@ -1,7 +1,7 @@
{
"name": "@affine/server",
"private": true,
"version": "0.15.0",
"version": "0.16.0",
"description": "Affine Node.js server",
"type": "module",
"bin": {
@@ -20,9 +20,9 @@
},
"dependencies": {
"@apollo/server": "^4.10.2",
"@aws-sdk/client-s3": "^3.552.0",
"@fal-ai/serverless-client": "^0.10.2",
"@google-cloud/opentelemetry-cloud-monitoring-exporter": "^0.18.0",
"@aws-sdk/client-s3": "^3.620.0",
"@fal-ai/serverless-client": "^0.13.0",
"@google-cloud/opentelemetry-cloud-monitoring-exporter": "^0.19.0",
"@google-cloud/opentelemetry-cloud-trace-exporter": "^2.2.0",
"@google-cloud/opentelemetry-resource-util": "^2.2.0",
"@keyv/redis": "^2.8.4",
@@ -35,7 +35,7 @@
"@nestjs/platform-socket.io": "^10.3.7",
"@nestjs/schedule": "^4.0.1",
"@nestjs/serve-static": "^4.0.2",
"@nestjs/throttler": "5.1.2",
"@nestjs/throttler": "5.2.0",
"@nestjs/websockets": "^10.3.7",
"@node-rs/argon2": "^1.8.0",
"@node-rs/crc32": "^1.10.0",
@@ -46,11 +46,11 @@
"@opentelemetry/exporter-zipkin": "^1.25.0",
"@opentelemetry/host-metrics": "^0.35.2",
"@opentelemetry/instrumentation": "^0.52.0",
"@opentelemetry/instrumentation-graphql": "^0.41.0",
"@opentelemetry/instrumentation-graphql": "^0.42.0",
"@opentelemetry/instrumentation-http": "^0.52.0",
"@opentelemetry/instrumentation-ioredis": "^0.41.0",
"@opentelemetry/instrumentation-nestjs-core": "^0.38.0",
"@opentelemetry/instrumentation-socket.io": "^0.40.0",
"@opentelemetry/instrumentation-ioredis": "^0.42.0",
"@opentelemetry/instrumentation-nestjs-core": "^0.39.0",
"@opentelemetry/instrumentation-socket.io": "^0.41.0",
"@opentelemetry/resources": "^1.25.0",
"@opentelemetry/sdk-metrics": "^1.25.0",
"@opentelemetry/sdk-node": "^0.52.0",
@@ -95,7 +95,7 @@
"ts-node": "^10.9.2",
"typescript": "^5.4.5",
"ws": "^8.16.0",
"yjs": "^13.6.14",
"yjs": "patch:yjs@npm%3A13.6.18#~/.yarn/patches/yjs-npm-13.6.18-ad0d5f7c43.patch",
"zod": "^3.22.4"
},
"devDependencies": {

View File

@@ -11,18 +11,18 @@ datasource db {
model User {
id String @id @default(uuid()) @db.VarChar
name String
email String @unique
emailVerifiedAt DateTime? @map("email_verified")
name String @db.VarChar
email String @unique @db.VarChar
emailVerifiedAt DateTime? @map("email_verified") @db.Timestamptz(3)
avatarUrl String? @map("avatar_url") @db.VarChar
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
/// Not available if user signed up through OAuth providers
password String? @db.VarChar
/// Indicate whether the user finished the signup progress.
/// for example, the value will be false if user never registered and invited into a workspace by others.
registered Boolean @default(true)
features UserFeatures[]
features UserFeature[]
customer UserStripeCustomer?
subscriptions UserSubscription[]
invoices UserInvoice[]
@@ -38,16 +38,16 @@ model User {
}
model ConnectedAccount {
id String @id @default(uuid()) @db.VarChar(36)
userId String @map("user_id") @db.VarChar(36)
id String @id @default(uuid()) @db.VarChar
userId String @map("user_id") @db.VarChar
provider String @db.VarChar
providerAccountId String @map("provider_account_id") @db.VarChar
scope String? @db.Text
accessToken String? @map("access_token") @db.Text
refreshToken String? @map("refresh_token") @db.Text
expiresAt DateTime? @map("expires_at") @db.Timestamptz(6)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(6)
expiresAt DateTime? @map("expires_at") @db.Timestamptz(3)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(3)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@ -57,9 +57,9 @@ model ConnectedAccount {
}
model Session {
id String @id @default(uuid()) @db.VarChar(36)
expiresAt DateTime? @map("expires_at") @db.Timestamptz(6)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
id String @id @default(uuid()) @db.VarChar
expiresAt DateTime? @map("expires_at") @db.Timestamptz(3)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
userSessions UserSession[]
@@ -67,11 +67,11 @@ model Session {
}
model UserSession {
id String @id @default(uuid()) @db.VarChar(36)
sessionId String @map("session_id") @db.VarChar(36)
userId String @map("user_id") @db.VarChar(36)
expiresAt DateTime? @map("expires_at") @db.Timestamptz(6)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
id String @id @default(uuid()) @db.VarChar
sessionId String @map("session_id") @db.VarChar
userId String @map("user_id") @db.VarChar
expiresAt DateTime? @map("expires_at") @db.Timestamptz(3)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
session Session @relation(fields: [sessionId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@ -81,10 +81,10 @@ model UserSession {
}
model VerificationToken {
token String @db.VarChar(36)
token String @db.VarChar
type Int @db.SmallInt
credential String? @db.Text
expiresAt DateTime @db.Timestamptz(6)
expiresAt DateTime @db.Timestamptz(3)
@@unique([type, token])
@@map("verification_tokens")
@@ -93,12 +93,12 @@ model VerificationToken {
model Workspace {
id String @id @default(uuid()) @db.VarChar
public Boolean
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
pages WorkspacePage[]
permissions WorkspaceUserPermission[]
pagePermissions WorkspacePageUserPermission[]
features WorkspaceFeatures[]
features WorkspaceFeature[]
@@map("workspaces")
}
@@ -109,8 +109,8 @@ model Workspace {
// Only the ones that have ever changed will have records here,
// and for others we will make sure it's has a default value return in our bussiness logic.
model WorkspacePage {
workspaceId String @map("workspace_id") @db.VarChar(36)
pageId String @map("page_id") @db.VarChar(36)
workspaceId String @map("workspace_id") @db.VarChar
pageId String @map("page_id") @db.VarChar
public Boolean @default(false)
// Page/Edgeless
mode Int @default(0) @db.SmallInt
@@ -121,31 +121,15 @@ model WorkspacePage {
@@map("workspace_pages")
}
// @deprecated, use WorkspaceUserPermission
model DeprecatedUserWorkspacePermission {
model WorkspaceUserPermission {
id String @id @default(uuid()) @db.VarChar
workspaceId String @map("workspace_id") @db.VarChar
subPageId String? @map("sub_page_id") @db.VarChar
userId String? @map("entity_id") @db.VarChar
/// Read/Write/Admin/Owner
type Int @db.SmallInt
/// Whether the permission invitation is accepted by the user
accepted Boolean @default(false)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
@@unique([workspaceId, subPageId, userId])
@@map("user_workspace_permissions")
}
model WorkspaceUserPermission {
id String @id @default(uuid()) @db.VarChar(36)
workspaceId String @map("workspace_id") @db.VarChar(36)
userId String @map("user_id") @db.VarChar(36)
userId String @map("user_id") @db.VarChar
// Read/Write
type Int @db.SmallInt
/// Whether the permission invitation is accepted by the user
accepted Boolean @default(false)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
@@ -155,15 +139,15 @@ model WorkspaceUserPermission {
}
model WorkspacePageUserPermission {
id String @id @default(uuid()) @db.VarChar(36)
workspaceId String @map("workspace_id") @db.VarChar(36)
pageId String @map("page_id") @db.VarChar(36)
userId String @map("user_id") @db.VarChar(36)
id String @id @default(uuid()) @db.VarChar
workspaceId String @map("workspace_id") @db.VarChar
pageId String @map("page_id") @db.VarChar
userId String @map("user_id") @db.VarChar
// Read/Write
type Int @db.SmallInt
/// Whether the permission invitation is accepted by the user
accepted Boolean @default(false)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
@@ -176,9 +160,9 @@ model WorkspacePageUserPermission {
// for example:
// - early access is a feature that allow some users to access the insider version
// - pro plan is a quota that allow some users access to more resources after they pay
model UserFeatures {
model UserFeature {
id Int @id @default(autoincrement())
userId String @map("user_id") @db.VarChar(36)
userId String @map("user_id") @db.VarChar
featureId Int @map("feature_id") @db.Integer
// we will record the reason why the feature is enabled/disabled
@@ -186,16 +170,16 @@ model UserFeatures {
// - pro_plan_v1: "user buy the pro plan"
reason String @db.VarChar
// record the quota enabled time
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
// record the quota expired time, pay plan is a subscription, so it will expired
expiredAt DateTime? @map("expired_at") @db.Timestamptz(6)
expiredAt DateTime? @map("expired_at") @db.Timestamptz(3)
// whether the feature is activated
// for example:
// - if we switch the user to another plan, we will set the old plan to deactivated, but dont delete it
activated Boolean @default(false)
feature Features @relation(fields: [featureId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
feature Feature @relation(fields: [featureId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@index([userId])
@@map("user_features")
@@ -204,9 +188,9 @@ model UserFeatures {
// feature gates is a way to enable/disable features for a workspace
// for example:
// - copilet is a feature that allow some users in a workspace to access the copilet feature
model WorkspaceFeatures {
model WorkspaceFeature {
id Int @id @default(autoincrement())
workspaceId String @map("workspace_id") @db.VarChar(36)
workspaceId String @map("workspace_id") @db.VarChar
featureId Int @map("feature_id") @db.Integer
// we will record the reason why the feature is enabled/disabled
@@ -214,21 +198,21 @@ model WorkspaceFeatures {
// - copilet_v1: "owner buy the copilet feature package"
reason String @db.VarChar
// record the feature enabled time
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
// record the quota expired time, pay plan is a subscription, so it will expired
expiredAt DateTime? @map("expired_at") @db.Timestamptz(6)
expiredAt DateTime? @map("expired_at") @db.Timestamptz(3)
// whether the feature is activated
// for example:
// - if owner unsubscribe a feature package, we will set the feature to deactivated, but dont delete it
activated Boolean @default(false)
feature Features @relation(fields: [featureId], references: [id], onDelete: Cascade)
feature Feature @relation(fields: [featureId], references: [id], onDelete: Cascade)
workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
@@map("workspace_features")
}
model Features {
model Feature {
id Int @id @default(autoincrement())
feature String @db.VarChar
version Int @default(0) @db.Integer
@@ -236,82 +220,15 @@ model Features {
type Int @db.Integer
// configs, define by feature conntroller
configs Json @db.Json
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
UserFeatureGates UserFeatures[]
WorkspaceFeatures WorkspaceFeatures[]
UserFeatureGates UserFeature[]
WorkspaceFeatures WorkspaceFeature[]
@@unique([feature, version])
@@map("features")
}
model DeprecatedNextAuthAccount {
id String @id @default(cuid())
userId String @map("user_id")
type String
provider String
providerAccountId String @map("provider_account_id")
refresh_token String? @db.Text
access_token String? @db.Text
expires_at Int?
token_type String?
scope String?
id_token String? @db.Text
session_state String?
@@unique([provider, providerAccountId])
@@map("accounts")
}
model DeprecatedNextAuthSession {
id String @id @default(cuid())
sessionToken String @unique @map("session_token")
userId String @map("user_id")
expires DateTime
@@map("sessions")
}
model DeprecatedNextAuthVerificationToken {
identifier String
token String @unique
expires DateTime
@@unique([identifier, token])
@@map("verificationtokens")
}
// deprecated, use [ObjectStorage]
model Blob {
id Int @id @default(autoincrement()) @db.Integer
hash String @db.VarChar
workspaceId String @map("workspace_id") @db.VarChar
blob Bytes @db.ByteA
length BigInt
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
// not for keeping, but for snapshot history
deletedAt DateTime? @map("deleted_at") @db.Timestamptz(6)
@@unique([workspaceId, hash])
@@map("blobs")
}
// deprecated, use [ObjectStorage]
model OptimizedBlob {
id Int @id @default(autoincrement()) @db.Integer
hash String @db.VarChar
workspaceId String @map("workspace_id") @db.VarChar
params String @db.VarChar
blob Bytes @db.ByteA
length BigInt
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
// not for keeping, but for snapshot history
deletedAt DateTime? @map("deleted_at") @db.Timestamptz(6)
@@unique([workspaceId, hash, params])
@@map("optimized_blobs")
}
// the latest snapshot of each doc that we've seen
// Snapshot + Updates are the latest state of the doc
model Snapshot {
@@ -320,10 +237,10 @@ model Snapshot {
blob Bytes @db.ByteA
seq Int @default(0) @db.Integer
state Bytes? @db.ByteA
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
// the `updated_at` field will not record the time of record changed,
// but the created time of last seen update that has been merged into snapshot.
updatedAt DateTime @map("updated_at") @db.Timestamptz(6)
updatedAt DateTime @map("updated_at") @db.Timestamptz(3)
@@id([id, workspaceId])
@@map("snapshots")
@@ -334,37 +251,28 @@ model Update {
id String @map("guid") @db.VarChar
seq Int @db.Integer
blob Bytes @db.ByteA
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
@@id([workspaceId, id, seq])
@@map("updates")
}
model SnapshotHistory {
workspaceId String @map("workspace_id") @db.VarChar(36)
id String @map("guid") @db.VarChar(36)
timestamp DateTime @db.Timestamptz(6)
workspaceId String @map("workspace_id") @db.VarChar
id String @map("guid") @db.VarChar
timestamp DateTime @db.Timestamptz(3)
blob Bytes @db.ByteA
state Bytes? @db.ByteA
expiredAt DateTime @map("expired_at") @db.Timestamptz(6)
expiredAt DateTime @map("expired_at") @db.Timestamptz(3)
@@id([workspaceId, id, timestamp])
@@map("snapshot_histories")
}
model NewFeaturesWaitingList {
id String @id @default(uuid()) @db.VarChar
email String @unique
type Int @db.SmallInt
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
@@map("new_features_waiting_list")
}
model UserStripeCustomer {
userId String @id @map("user_id") @db.VarChar
stripeCustomerId String @unique @map("stripe_customer_id") @db.VarChar
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@ -373,30 +281,30 @@ model UserStripeCustomer {
model UserSubscription {
id Int @id @default(autoincrement()) @db.Integer
userId String @map("user_id") @db.VarChar(36)
userId String @map("user_id") @db.VarChar
plan String @db.VarChar(20)
// yearly/monthly
recurring String @db.VarChar(20)
// subscription.id
stripeSubscriptionId String @unique @map("stripe_subscription_id")
// subscription.id, null for linefetime payment
stripeSubscriptionId String? @unique @map("stripe_subscription_id")
// subscription.status, active/past_due/canceled/unpaid...
status String @db.VarChar(20)
// subscription.current_period_start
start DateTime @map("start") @db.Timestamptz(6)
// subscription.current_period_end
end DateTime @map("end") @db.Timestamptz(6)
start DateTime @map("start") @db.Timestamptz(3)
// subscription.current_period_end, null for lifetime payment
end DateTime? @map("end") @db.Timestamptz(3)
// subscription.billing_cycle_anchor
nextBillAt DateTime? @map("next_bill_at") @db.Timestamptz(6)
nextBillAt DateTime? @map("next_bill_at") @db.Timestamptz(3)
// subscription.canceled_at
canceledAt DateTime? @map("canceled_at") @db.Timestamptz(6)
canceledAt DateTime? @map("canceled_at") @db.Timestamptz(3)
// subscription.trial_start
trialStart DateTime? @map("trial_start") @db.Timestamptz(6)
trialStart DateTime? @map("trial_start") @db.Timestamptz(3)
// subscription.trial_end
trialEnd DateTime? @map("trial_end") @db.Timestamptz(6)
trialEnd DateTime? @map("trial_end") @db.Timestamptz(3)
stripeScheduleId String? @map("stripe_schedule_id") @db.VarChar
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(6)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(3)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([userId, plan])
@@ -405,7 +313,7 @@ model UserSubscription {
model UserInvoice {
id Int @id @default(autoincrement()) @db.Integer
userId String @map("user_id") @db.VarChar(36)
userId String @map("user_id") @db.VarChar
stripeInvoiceId String @unique @map("stripe_invoice_id")
currency String @db.VarChar(3)
// CNY 12.50 stored as 1250
@@ -413,8 +321,8 @@ model UserInvoice {
status String @db.VarChar(20)
plan String @db.VarChar(20)
recurring String @db.VarChar(20)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(6)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(3)
// billing reason
reason String @db.VarChar
lastPaymentError String? @map("last_payment_error") @db.Text
@@ -442,7 +350,7 @@ model AiPromptMessage {
content String @db.Text
attachments Json? @db.Json
params Json? @db.Json
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
prompt AiPrompt @relation(fields: [promptId], references: [id], onDelete: Cascade)
@@ -457,7 +365,8 @@ model AiPrompt {
// it is only used in the frontend and does not affect the backend
action String? @db.VarChar
model String @db.VarChar
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
config Json? @db.Json
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
messages AiPromptMessage[]
sessions AiSession[]
@@ -466,14 +375,14 @@ model AiPrompt {
}
model AiSessionMessage {
id String @id @default(uuid()) @db.VarChar(36)
sessionId String @map("session_id") @db.VarChar(36)
id String @id @default(uuid()) @db.VarChar
sessionId String @map("session_id") @db.VarChar
role AiPromptRole
content String @db.Text
attachments Json? @db.Json
params Json? @db.Json
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(6)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(3)
session AiSession @relation(fields: [sessionId], references: [id], onDelete: Cascade)
@@ -481,15 +390,17 @@ model AiSessionMessage {
}
model AiSession {
id String @id @default(uuid()) @db.VarChar(36)
userId String @map("user_id") @db.VarChar(36)
workspaceId String @map("workspace_id") @db.VarChar(36)
docId String @map("doc_id") @db.VarChar(36)
promptName String @map("prompt_name") @db.VarChar(32)
messageCost Int @default(0)
tokenCost Int @default(0)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
deletedAt DateTime? @map("deleted_at") @db.Timestamptz(6)
id String @id @default(uuid()) @db.VarChar
userId String @map("user_id") @db.VarChar
workspaceId String @map("workspace_id") @db.VarChar
docId String @map("doc_id") @db.VarChar
promptName String @map("prompt_name") @db.VarChar(32)
// the session id of the parent session if this session is a forked session
parentSessionId String? @map("parent_session_id") @db.VarChar
messageCost Int @default(0)
tokenCost Int @default(0)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
deletedAt DateTime? @map("deleted_at") @db.Timestamptz(3)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
prompt AiPrompt @relation(fields: [promptName], references: [name], onDelete: Cascade)
@@ -499,10 +410,10 @@ model AiSession {
}
model DataMigration {
id String @id @default(uuid()) @db.VarChar(36)
id String @id @default(uuid()) @db.VarChar
name String @db.VarChar
startedAt DateTime @default(now()) @map("started_at") @db.Timestamptz(6)
finishedAt DateTime? @map("finished_at") @db.Timestamptz(6)
startedAt DateTime @default(now()) @map("started_at") @db.Timestamptz(3)
finishedAt DateTime? @map("finished_at") @db.Timestamptz(3)
@@map("_data_migrations")
}
@@ -522,9 +433,9 @@ model RuntimeConfig {
key String @db.VarChar
value Json @db.Json
description String @db.Text
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(6)
deletedAt DateTime? @map("deleted_at") @db.Timestamptz(6)
lastUpdatedBy String? @map("last_updated_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(3)
deletedAt DateTime? @map("deleted_at") @db.Timestamptz(3)
lastUpdatedBy String? @map("last_updated_by") @db.VarChar
lastUpdatedByUser User? @relation(fields: [lastUpdatedBy], references: [id])

View File

@@ -16,6 +16,7 @@ import { ADD_ENABLED_FEATURES, ServerConfigModule } from './core/config';
import { DocModule } from './core/doc';
import { FeatureModule } from './core/features';
import { QuotaModule } from './core/quota';
import { CustomSetupModule } from './core/setup';
import { StorageModule } from './core/storage';
import { SyncModule } from './core/sync';
import { UserModule } from './core/user';
@@ -151,14 +152,16 @@ function buildAppModule() {
factor
// common fundamental modules
.use(...FunctionalityModules)
.useIf(config => config.flavor.sync, WebSocketModule)
// auth
.use(AuthModule)
.use(UserModule, AuthModule)
// business modules
.use(DocModule)
// sync server only
.useIf(config => config.flavor.sync, WebSocketModule, SyncModule)
.useIf(config => config.flavor.sync, SyncModule)
// graphql server only
.useIf(
@@ -166,7 +169,6 @@ function buildAppModule() {
ServerConfigModule,
GqlModule,
StorageModule,
UserModule,
WorkspaceModule,
FeatureModule,
QuotaModule
@@ -175,13 +177,11 @@ function buildAppModule() {
// self hosted server only
.useIf(
config => config.isSelfhosted,
CustomSetupModule,
ServeStaticModule.forRoot({
rootPath: join('/app', 'static'),
exclude: ['/admin*'],
})
)
.useIf(
config => config.isSelfhosted,
}),
ServeStaticModule.forRoot({
rootPath: join('/app', 'static', 'admin'),
serveRoot: '/admin',

View File

@@ -29,7 +29,7 @@ export async function createApp() {
graphqlUploadExpress({
// TODO(@darkskygit): dynamic limit by quota maybe?
maxFileSize: 100 * 1024 * 1024,
maxFiles: 5,
maxFiles: 32,
})
);

View File

@@ -12,6 +12,7 @@ AFFiNE.ENV_MAP = {
MAILER_PASSWORD: 'mailer.auth.pass',
MAILER_SENDER: 'mailer.from.address',
MAILER_SECURE: ['mailer.secure', 'boolean'],
DATABASE_URL: 'database.datasourceUrl',
OAUTH_GOOGLE_CLIENT_ID: 'plugins.oauth.providers.google.clientId',
OAUTH_GOOGLE_CLIENT_SECRET: 'plugins.oauth.providers.google.clientSecret',
OAUTH_GITHUB_CLIENT_ID: 'plugins.oauth.providers.github.clientId',

View File

@@ -1,6 +1,6 @@
import type { ExecutionContext } from '@nestjs/common';
import { createParamDecorator } from '@nestjs/common';
import { User } from '@prisma/client';
import { User, UserSession } from '@prisma/client';
import { getRequestResponseFromContext } from '../../fundamentals';
@@ -53,3 +53,5 @@ export interface CurrentUser
hasPassword: boolean | null;
emailVerified: boolean;
}
export { type UserSession };

View File

@@ -1,15 +1,22 @@
import type {
CanActivate,
ExecutionContext,
FactoryProvider,
OnModuleInit,
} from '@nestjs/common';
import { Injectable, SetMetadata, UseGuards } from '@nestjs/common';
import { ModuleRef, Reflector } from '@nestjs/core';
import type { Request } from 'express';
import {
AuthenticationRequired,
Config,
getRequestResponseFromContext,
mapAnyError,
parseCookies,
} from '../../fundamentals';
import { WEBSOCKET_OPTIONS } from '../../fundamentals/websocket';
import { CurrentUser, UserSession } from './current-user';
import { AuthService, parseAuthUserSeqNum } from './service';
function extractTokenFromHeader(authorization: string) {
@@ -38,37 +45,9 @@ export class AuthGuard implements CanActivate, OnModuleInit {
async canActivate(context: ExecutionContext) {
const { req, res } = getRequestResponseFromContext(context);
// check cookie
let sessionToken: string | undefined =
req.cookies[AuthService.sessionCookieName];
if (!sessionToken && req.headers.authorization) {
sessionToken = extractTokenFromHeader(req.headers.authorization);
}
if (sessionToken) {
const userSeq = parseAuthUserSeqNum(
req.headers[AuthService.authUserSeqHeaderName]
);
const { user, expiresAt } = await this.auth.getUser(
sessionToken,
userSeq
);
if (res && user && expiresAt) {
await this.auth.refreshUserSessionIfNeeded(
req,
res,
sessionToken,
user.id,
expiresAt
);
}
if (user) {
req.sid = sessionToken;
req.user = user;
}
const userSession = await this.signIn(req);
if (res && userSession && userSession.session.expiresAt) {
await this.auth.refreshUserSessionIfNeeded(req, res, userSession.session);
}
// api is public
@@ -84,9 +63,44 @@ export class AuthGuard implements CanActivate, OnModuleInit {
if (!req.user) {
throw new AuthenticationRequired();
}
return true;
}
async signIn(
req: Request
): Promise<{ user: CurrentUser; session: UserSession } | null> {
if (req.user && req.session) {
return {
user: req.user,
session: req.session,
};
}
parseCookies(req);
let sessionToken: string | undefined =
req.cookies[AuthService.sessionCookieName];
if (!sessionToken && req.headers.authorization) {
sessionToken = extractTokenFromHeader(req.headers.authorization);
}
if (sessionToken) {
const userSeq = parseAuthUserSeqNum(
req.headers[AuthService.authUserSeqHeaderName]
);
const userSession = await this.auth.getUserSession(sessionToken, userSeq);
if (userSession) {
req.session = userSession.session;
req.user = userSession.user;
}
return userSession;
}
return null;
}
}
/**
@@ -111,3 +125,35 @@ export const Auth = () => {
// api is public accessible
export const Public = () => SetMetadata(PUBLIC_ENTRYPOINT_SYMBOL, true);
export const AuthWebsocketOptionsProvider: FactoryProvider = {
provide: WEBSOCKET_OPTIONS,
useFactory: (config: Config, guard: AuthGuard) => {
return {
...config.websocket,
allowRequest: async (
req: any,
pass: (err: string | null | undefined, success: boolean) => void
) => {
if (!config.websocket.requireAuthentication) {
return pass(null, true);
}
try {
const authentication = await guard.signIn(req);
if (authentication) {
return pass(null, true);
} else {
return pass('unauthenticated', false);
}
} catch (e) {
const error = mapAnyError(e);
error.log('Websocket');
return pass('unauthenticated', false);
}
},
};
},
inject: [Config, AuthGuard],
};

View File

@@ -6,15 +6,21 @@ import { FeatureModule } from '../features';
import { QuotaModule } from '../quota';
import { UserModule } from '../user';
import { AuthController } from './controller';
import { AuthGuard } from './guard';
import { AuthGuard, AuthWebsocketOptionsProvider } from './guard';
import { AuthResolver } from './resolver';
import { AuthService } from './service';
import { TokenService, TokenType } from './token';
@Module({
imports: [FeatureModule, UserModule, QuotaModule],
providers: [AuthService, AuthResolver, TokenService, AuthGuard],
exports: [AuthService, AuthGuard],
providers: [
AuthService,
AuthResolver,
TokenService,
AuthGuard,
AuthWebsocketOptionsProvider,
],
exports: [AuthService, AuthGuard, AuthWebsocketOptionsProvider],
controllers: [AuthController],
})
export class AuthModule {}

View File

@@ -21,6 +21,7 @@ import {
Throttle,
URLHelper,
} from '../../fundamentals';
import { Admin } from '../common';
import { UserService } from '../user';
import { UserType } from '../user/types';
import { validators } from '../utils/validators';
@@ -291,4 +292,19 @@ export class AuthResolver {
return emailVerifiedAt !== null;
}
@Admin()
@Mutation(() => String, {
description: 'Create change password url',
})
async createChangePasswordUrl(
@Args('userId') userId: string,
@Args('callbackUrl') callbackUrl: string
): Promise<string> {
const token = await this.token.createToken(
TokenType.ChangePassword,
userId
);
return this.url.link(callbackUrl, { token });
}
}

View File

@@ -1,18 +1,11 @@
import { Injectable, OnApplicationBootstrap } from '@nestjs/common';
import { Cron, CronExpression } from '@nestjs/schedule';
import type { User } from '@prisma/client';
import type { User, UserSession } from '@prisma/client';
import { PrismaClient } from '@prisma/client';
import type { CookieOptions, Request, Response } from 'express';
import { assign, omit } from 'lodash-es';
import { assign, pick } from 'lodash-es';
import {
Config,
CryptoHelper,
EmailAlreadyUsed,
MailService,
WrongSignInCredentials,
WrongSignInMethod,
} from '../../fundamentals';
import { Config, EmailAlreadyUsed, MailService } from '../../fundamentals';
import { FeatureManagementService } from '../features/management';
import { QuotaService } from '../quota/service';
import { QuotaType } from '../quota/types';
@@ -48,13 +41,11 @@ export function sessionUser(
'id' | 'email' | 'avatarUrl' | 'name' | 'emailVerifiedAt'
> & { password?: string | null }
): CurrentUser {
return assign(
omit(user, 'password', 'registered', 'emailVerifiedAt', 'createdAt'),
{
hasPassword: user.password !== null,
emailVerified: user.emailVerifiedAt !== null,
}
);
// use pick to avoid unexpected fields
return assign(pick(user, 'id', 'email', 'avatarUrl', 'name'), {
hasPassword: user.password !== null,
emailVerified: user.emailVerifiedAt !== null,
});
}
@Injectable()
@@ -74,20 +65,19 @@ export class AuthService implements OnApplicationBootstrap {
private readonly mailer: MailService,
private readonly feature: FeatureManagementService,
private readonly quota: QuotaService,
private readonly user: UserService,
private readonly crypto: CryptoHelper
private readonly user: UserService
) {}
async onApplicationBootstrap() {
if (this.config.node.dev) {
try {
const [email, name, pwd] = ['dev@affine.pro', 'Dev User', 'dev'];
const [email, name, password] = ['dev@affine.pro', 'Dev User', 'dev'];
let devUser = await this.user.findUserByEmail(email);
if (!devUser) {
devUser = await this.user.createUser({
devUser = await this.user.createUser_without_verification({
email,
name,
password: await this.crypto.encryptPassword(pwd),
password,
});
}
await this.quota.switchUserQuota(devUser.id, QuotaType.ProPlanV1);
@@ -114,61 +104,42 @@ export class AuthService implements OnApplicationBootstrap {
throw new EmailAlreadyUsed();
}
const hashedPassword = await this.crypto.encryptPassword(password);
return this.user
.createUser({
name,
email,
password: hashedPassword,
password,
})
.then(sessionUser);
}
async signIn(email: string, password: string) {
const user = await this.user.findUserWithHashedPasswordByEmail(email);
if (!user) {
throw new WrongSignInCredentials();
}
if (!user.password) {
throw new WrongSignInMethod();
}
const passwordMatches = await this.crypto.verifyPassword(
password,
user.password
);
if (!passwordMatches) {
throw new WrongSignInCredentials();
}
const user = await this.user.signIn(email, password);
return sessionUser(user);
}
async getUser(
async getUserSession(
token: string,
seq = 0
): Promise<{ user: CurrentUser | null; expiresAt: Date | null }> {
): Promise<{ user: CurrentUser; session: UserSession } | null> {
const session = await this.getSession(token);
// no such session
if (!session) {
return { user: null, expiresAt: null };
return null;
}
const userSession = session.userSessions.at(seq);
// no such user session
if (!userSession) {
return { user: null, expiresAt: null };
return null;
}
// user session expired
if (userSession.expiresAt && userSession.expiresAt <= new Date()) {
return { user: null, expiresAt: null };
return null;
}
const user = await this.db.user.findUnique({
@@ -176,10 +147,10 @@ export class AuthService implements OnApplicationBootstrap {
});
if (!user) {
return { user: null, expiresAt: null };
return null;
}
return { user: sessionUser(user), expiresAt: userSession.expiresAt };
return { user: sessionUser(user), session: userSession };
}
async getUserList(token: string) {
@@ -278,12 +249,13 @@ export class AuthService implements OnApplicationBootstrap {
async refreshUserSessionIfNeeded(
_req: Request,
res: Response,
sessionId: string,
userId: string,
expiresAt: Date,
session: UserSession,
ttr = this.config.auth.session.ttr
): Promise<boolean> {
if (expiresAt && expiresAt.getTime() - Date.now() > ttr * 1000) {
if (
session.expiresAt &&
session.expiresAt.getTime() - Date.now() > ttr * 1000
) {
// no need to refresh
return false;
}
@@ -294,17 +266,14 @@ export class AuthService implements OnApplicationBootstrap {
await this.db.userSession.update({
where: {
sessionId_userId: {
sessionId,
userId,
},
id: session.id,
},
data: {
expiresAt: newExpiresAt,
},
});
res.cookie(AuthService.sessionCookieName, sessionId, {
res.cookie(AuthService.sessionCookieName, session.sessionId, {
expires: newExpiresAt,
...this.cookieOptions,
});
@@ -382,8 +351,7 @@ export class AuthService implements OnApplicationBootstrap {
id: string,
newPassword: string
): Promise<Omit<User, 'password'>> {
const hashedPassword = await this.crypto.encryptPassword(newPassword);
return this.user.updateUser(id, { password: hashedPassword });
return this.user.updateUser(id, { password: newPassword });
}
async changeEmail(

View File

@@ -2,11 +2,19 @@ import './config';
import { Module } from '@nestjs/common';
import { ServerConfigResolver, ServerRuntimeConfigResolver } from './resolver';
import {
ServerConfigResolver,
ServerRuntimeConfigResolver,
ServerServiceConfigResolver,
} from './resolver';
@Module({
providers: [ServerConfigResolver, ServerRuntimeConfigResolver],
providers: [
ServerConfigResolver,
ServerRuntimeConfigResolver,
ServerServiceConfigResolver,
],
})
export class ServerConfigModule {}
export { ADD_ENABLED_FEATURES, ServerConfigType } from './resolver';
export { ADD_ENABLED_FEATURES } from './server-feature';
export { ServerFeature } from './types';

View File

@@ -9,27 +9,17 @@ import {
ResolveField,
Resolver,
} from '@nestjs/graphql';
import { RuntimeConfig, RuntimeConfigType } from '@prisma/client';
import { PrismaClient, RuntimeConfig, RuntimeConfigType } from '@prisma/client';
import { GraphQLJSON, GraphQLJSONObject } from 'graphql-scalars';
import { Config, DeploymentType, URLHelper } from '../../fundamentals';
import { Config, URLHelper } from '../../fundamentals';
import { Public } from '../auth';
import { Admin } from '../common';
import { FeatureType } from '../features';
import { AvailableUserFeatureConfig } from '../features/resolver';
import { ServerFlags } from './config';
import { ServerFeature } from './types';
const ENABLED_FEATURES: Set<ServerFeature> = new Set();
export function ADD_ENABLED_FEATURES(feature: ServerFeature) {
ENABLED_FEATURES.add(feature);
}
registerEnumType(ServerFeature, {
name: 'ServerFeature',
});
registerEnumType(DeploymentType, {
name: 'ServerDeploymentType',
});
import { ENABLED_FEATURES } from './server-feature';
import { ServerConfigType } from './types';
@ObjectType()
export class PasswordLimitsType {
@@ -45,36 +35,6 @@ export class CredentialsRequirementType {
password!: PasswordLimitsType;
}
@ObjectType()
export class ServerConfigType {
@Field({
description:
'server identical name could be shown as badge on user interface',
})
name!: string;
@Field({ description: 'server version' })
version!: string;
@Field({ description: 'server base url' })
baseUrl!: string;
@Field(() => DeploymentType, { description: 'server type' })
type!: DeploymentType;
/**
* @deprecated
*/
@Field({ description: 'server flavor', deprecationReason: 'use `features`' })
flavor!: string;
@Field(() => [ServerFeature], { description: 'enabled server features' })
features!: ServerFeature[];
@Field({ description: 'enable telemetry' })
enableTelemetry!: boolean;
}
registerEnumType(RuntimeConfigType, {
name: 'RuntimeConfigType',
});
@@ -115,7 +75,8 @@ export class ServerFlagsType implements ServerFlags {
export class ServerConfigResolver {
constructor(
private readonly config: Config,
private readonly url: URLHelper
private readonly url: URLHelper,
private readonly db: PrismaClient
) {}
@Public()
@@ -165,13 +126,65 @@ export class ServerConfigResolver {
return flags;
}, {} as ServerFlagsType);
}
@ResolveField(() => Boolean, {
description: 'whether server has been initialized',
})
async initialized() {
return (await this.db.user.count()) > 0;
}
}
@Resolver(() => ServerConfigType)
export class ServerFeatureConfigResolver extends AvailableUserFeatureConfig {
constructor(config: Config) {
super(config);
}
@ResolveField(() => [FeatureType], {
description: 'Features for user that can be configured',
})
override availableUserFeatures() {
return super.availableUserFeatures();
}
}
@ObjectType()
class ServerServiceConfig {
@Field()
name!: string;
@Field(() => GraphQLJSONObject)
config!: any;
}
interface ServerServeConfig {
https: boolean;
host: string;
port: number;
externalUrl: string;
}
interface ServerMailerConfig {
host?: string | null;
port?: number | null;
secure?: boolean | null;
service?: string | null;
sender?: string | null;
}
interface ServerDatabaseConfig {
host: string;
port: number;
user?: string | null;
database: string;
}
@Admin()
@Resolver(() => ServerRuntimeConfigType)
export class ServerRuntimeConfigResolver {
constructor(private readonly config: Config) {}
@Admin()
@Query(() => [ServerRuntimeConfigType], {
description: 'get all server runtime configurable settings',
})
@@ -179,7 +192,6 @@ export class ServerRuntimeConfigResolver {
return this.config.runtime.list();
}
@Admin()
@Mutation(() => ServerRuntimeConfigType, {
description: 'update server runtime configurable setting',
})
@@ -190,7 +202,6 @@ export class ServerRuntimeConfigResolver {
return await this.config.runtime.set(id as any, value);
}
@Admin()
@Mutation(() => [ServerRuntimeConfigType], {
description: 'update multiple server runtime configurable settings',
})
@@ -205,3 +216,57 @@ export class ServerRuntimeConfigResolver {
return results;
}
}
@Admin()
@Resolver(() => ServerServiceConfig)
export class ServerServiceConfigResolver {
constructor(private readonly config: Config) {}
@Query(() => [ServerServiceConfig])
serverServiceConfigs() {
return [
{
name: 'server',
config: this.serve(),
},
{
name: 'mailer',
config: this.mail(),
},
{
name: 'database',
config: this.database(),
},
];
}
serve(): ServerServeConfig {
return this.config.server;
}
mail(): ServerMailerConfig {
const sender =
typeof this.config.mailer.from === 'string'
? this.config.mailer.from
: this.config.mailer.from?.address;
return {
host: this.config.mailer.host,
port: this.config.mailer.port,
secure: this.config.mailer.secure,
service: this.config.mailer.service,
sender,
};
}
database(): ServerDatabaseConfig {
const url = new URL(this.config.database.datasourceUrl);
return {
host: url.hostname,
port: Number(url.port),
user: url.username,
database: url.pathname.slice(1) ?? url.username,
};
}
}

View File

@@ -0,0 +1,7 @@
import { ServerFeature } from './types';
export const ENABLED_FEATURES: Set<ServerFeature> = new Set();
export function ADD_ENABLED_FEATURES(feature: ServerFeature) {
ENABLED_FEATURES.add(feature);
}
export { ServerFeature };

View File

@@ -1,5 +1,47 @@
import { Field, ObjectType, registerEnumType } from '@nestjs/graphql';
import { DeploymentType } from '../../fundamentals';
export enum ServerFeature {
Copilot = 'copilot',
Payment = 'payment',
OAuth = 'oauth',
}
registerEnumType(ServerFeature, {
name: 'ServerFeature',
});
registerEnumType(DeploymentType, {
name: 'ServerDeploymentType',
});
@ObjectType()
export class ServerConfigType {
@Field({
description:
'server identical name could be shown as badge on user interface',
})
name!: string;
@Field({ description: 'server version' })
version!: string;
@Field({ description: 'server base url' })
baseUrl!: string;
@Field(() => DeploymentType, { description: 'server type' })
type!: DeploymentType;
/**
* @deprecated
*/
@Field({ description: 'server flavor', deprecationReason: 'use `features`' })
flavor!: string;
@Field(() => [ServerFeature], { description: 'enabled server features' })
features!: ServerFeature[];
@Field({ description: 'enable telemetry' })
enableTelemetry!: boolean;
}

View File

@@ -32,7 +32,7 @@ export async function getFeature(prisma: PrismaTransaction, featureId: number) {
return cachedFeature;
}
const feature = await prisma.features.findFirst({
const feature = await prisma.feature.findFirst({
where: {
id: featureId,
},

View File

@@ -2,7 +2,10 @@ import { Module } from '@nestjs/common';
import { UserModule } from '../user';
import { EarlyAccessType, FeatureManagementService } from './management';
import { FeatureManagementResolver } from './resolver';
import {
AdminFeatureManagementResolver,
FeatureManagementResolver,
} from './resolver';
import { FeatureService } from './service';
/**
@@ -17,6 +20,7 @@ import { FeatureService } from './service';
FeatureService,
FeatureManagementService,
FeatureManagementResolver,
AdminFeatureManagementResolver,
],
exports: [FeatureService, FeatureManagementService],
})

View File

@@ -1,6 +1,6 @@
import { Injectable, Logger } from '@nestjs/common';
import { Config } from '../../fundamentals';
import { Config, type EventPayload, OnEvent } from '../../fundamentals';
import { UserService } from '../user/service';
import { FeatureService } from './service';
import { FeatureType } from './types';
@@ -167,4 +167,9 @@ export class FeatureManagementService {
async listFeatureWorkspaces(feature: FeatureType) {
return this.feature.listFeatureWorkspaces(feature);
}
@OnEvent('user.admin.created')
async onAdminUserCreated({ id }: EventPayload<'user.admin.created'>) {
await this.addAdmin(id);
}
}

View File

@@ -1,21 +1,18 @@
import {
Args,
Context,
Int,
Mutation,
Parent,
Query,
registerEnumType,
ResolveField,
Resolver,
} from '@nestjs/graphql';
import { difference } from 'lodash-es';
import { UserNotFound } from '../../fundamentals';
import { sessionUser } from '../auth/service';
import { Config } from '../../fundamentals';
import { Admin } from '../common';
import { UserService } from '../user/service';
import { UserType } from '../user/types';
import { EarlyAccessType, FeatureManagementService } from './management';
import { FeatureService } from './service';
import { FeatureType } from './types';
registerEnumType(EarlyAccessType, {
@@ -24,10 +21,7 @@ registerEnumType(EarlyAccessType, {
@Resolver(() => UserType)
export class FeatureManagementResolver {
constructor(
private readonly users: UserService,
private readonly feature: FeatureManagementService
) {}
constructor(private readonly feature: FeatureManagementService) {}
@ResolveField(() => [FeatureType], {
name: 'features',
@@ -36,57 +30,48 @@ export class FeatureManagementResolver {
async userFeatures(@Parent() user: UserType) {
return this.feature.getActivatedUserFeatures(user.id);
}
}
@Admin()
@Mutation(() => Int)
async addToEarlyAccess(
@Args('email') email: string,
@Args({ name: 'type', type: () => EarlyAccessType }) type: EarlyAccessType
): Promise<number> {
const user = await this.users.findUserByEmail(email);
if (user) {
return this.feature.addEarlyAccess(user.id, type);
} else {
const user = await this.users.createAnonymousUser(email, {
registered: false,
});
return this.feature.addEarlyAccess(user.id, type);
}
}
export class AvailableUserFeatureConfig {
constructor(private readonly config: Config) {}
@Admin()
@Mutation(() => Int)
async removeEarlyAccess(@Args('email') email: string): Promise<number> {
const user = await this.users.findUserByEmail(email);
if (!user) {
throw new UserNotFound();
}
return this.feature.removeEarlyAccess(user.id);
}
@Admin()
@Query(() => [UserType])
async earlyAccessUsers(
@Context() ctx: { isAdminQuery: boolean }
): Promise<UserType[]> {
// allow query other user's subscription
ctx.isAdminQuery = true;
return this.feature.listEarlyAccess().then(users => {
return users.map(sessionUser);
});
}
@Admin()
@Mutation(() => Boolean)
async addAdminister(@Args('email') email: string): Promise<boolean> {
const user = await this.users.findUserByEmail(email);
if (!user) {
throw new UserNotFound();
}
await this.feature.addAdmin(user.id);
return true;
async availableUserFeatures() {
return this.config.isSelfhosted
? [FeatureType.Admin]
: [FeatureType.EarlyAccess, FeatureType.AIEarlyAccess, FeatureType.Admin];
}
}
@Admin()
@Resolver(() => Boolean)
export class AdminFeatureManagementResolver extends AvailableUserFeatureConfig {
constructor(
config: Config,
private readonly feature: FeatureService
) {
super(config);
}
@Mutation(() => [FeatureType], {
description: 'update user enabled feature',
})
async updateUserFeatures(
@Args('id') id: string,
@Args({ name: 'features', type: () => [FeatureType] })
features: FeatureType[]
) {
const configurableFeatures = await this.availableUserFeatures();
const removed = difference(configurableFeatures, features);
await Promise.all(
features.map(feature =>
this.feature.addUserFeature(id, feature, 'admin panel')
)
);
await Promise.all(
removed.map(feature => this.feature.removeUserFeature(id, feature))
);
return features;
}
}

View File

@@ -1,6 +1,7 @@
import { Injectable } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
import { CannotDeleteAllAdminAccount } from '../../fundamentals';
import { WorkspaceType } from '../workspaces/types';
import { FeatureConfigType, getFeature } from './feature';
import { FeatureKind, FeatureType } from './types';
@@ -10,7 +11,7 @@ export class FeatureService {
constructor(private readonly prisma: PrismaClient) {}
async getFeature<F extends FeatureType>(feature: F) {
const data = await this.prisma.features.findFirst({
const data = await this.prisma.feature.findFirst({
where: {
feature,
type: FeatureKind.Feature,
@@ -36,7 +37,7 @@ export class FeatureService {
expiredAt?: Date | string
) {
return this.prisma.$transaction(async tx => {
const latestFlag = await tx.userFeatures.findFirst({
const latestFlag = await tx.userFeature.findFirst({
where: {
userId,
feature: {
@@ -53,7 +54,7 @@ export class FeatureService {
if (latestFlag) {
return latestFlag.id;
} else {
const featureId = await tx.features
const featureId = await tx.feature
.findFirst({
where: { feature, type: FeatureKind.Feature },
orderBy: { version: 'desc' },
@@ -65,7 +66,7 @@ export class FeatureService {
throw new Error(`Feature ${feature} not found`);
}
return tx.userFeatures
return tx.userFeature
.create({
data: {
reason,
@@ -81,7 +82,10 @@ export class FeatureService {
}
async removeUserFeature(userId: string, feature: FeatureType) {
return this.prisma.userFeatures
if (feature === FeatureType.Admin) {
await this.ensureNotLastAdmin(userId);
}
return this.prisma.userFeature
.updateMany({
where: {
userId,
@@ -98,13 +102,27 @@ export class FeatureService {
.then(r => r.count);
}
async ensureNotLastAdmin(userId: string) {
const count = await this.prisma.userFeature.count({
where: {
userId: { not: userId },
feature: { feature: FeatureType.Admin, type: FeatureKind.Feature },
activated: true,
},
});
if (count === 0) {
throw new CannotDeleteAllAdminAccount();
}
}
/**
* get user's features, will included inactivated features
* @param userId user id
* @returns list of features
*/
async getUserFeatures(userId: string) {
const features = await this.prisma.userFeatures.findMany({
const features = await this.prisma.userFeature.findMany({
where: {
userId,
feature: { type: FeatureKind.Feature },
@@ -129,7 +147,7 @@ export class FeatureService {
}
async getActivatedUserFeatures(userId: string) {
const features = await this.prisma.userFeatures.findMany({
const features = await this.prisma.userFeature.findMany({
where: {
userId,
feature: { type: FeatureKind.Feature },
@@ -156,7 +174,7 @@ export class FeatureService {
}
async listFeatureUsers(feature: FeatureType) {
return this.prisma.userFeatures
return this.prisma.userFeature
.findMany({
where: {
activated: true,
@@ -182,7 +200,7 @@ export class FeatureService {
}
async hasUserFeature(userId: string, feature: FeatureType) {
return this.prisma.userFeatures
return this.prisma.userFeature
.count({
where: {
userId,
@@ -206,7 +224,7 @@ export class FeatureService {
expiredAt?: Date | string
) {
return this.prisma.$transaction(async tx => {
const latestFlag = await tx.workspaceFeatures.findFirst({
const latestFlag = await tx.workspaceFeature.findFirst({
where: {
workspaceId,
feature: {
@@ -223,7 +241,7 @@ export class FeatureService {
return latestFlag.id;
} else {
// use latest version of feature
const featureId = await tx.features
const featureId = await tx.feature
.findFirst({
where: { feature, type: FeatureKind.Feature },
select: { id: true },
@@ -235,7 +253,7 @@ export class FeatureService {
throw new Error(`Feature ${feature} not found`);
}
return tx.workspaceFeatures
return tx.workspaceFeature
.create({
data: {
reason,
@@ -251,7 +269,7 @@ export class FeatureService {
}
async removeWorkspaceFeature(workspaceId: string, feature: FeatureType) {
return this.prisma.workspaceFeatures
return this.prisma.workspaceFeature
.updateMany({
where: {
workspaceId,
@@ -274,7 +292,7 @@ export class FeatureService {
* @returns list of features
*/
async getWorkspaceFeatures(workspaceId: string) {
const features = await this.prisma.workspaceFeatures.findMany({
const features = await this.prisma.workspaceFeature.findMany({
where: {
workspace: { id: workspaceId },
feature: {
@@ -301,7 +319,7 @@ export class FeatureService {
}
async listFeatureWorkspaces(feature: FeatureType): Promise<WorkspaceType[]> {
return this.prisma.workspaceFeatures
return this.prisma.workspaceFeature
.findMany({
where: {
activated: true,
@@ -324,7 +342,7 @@ export class FeatureService {
}
async hasWorkspaceFeature(workspaceId: string, feature: FeatureType) {
return this.prisma.workspaceFeatures
return this.prisma.workspaceFeature
.count({
where: {
workspaceId,

View File

@@ -13,7 +13,7 @@ export class QuotaConfig {
return cachedQuota;
}
const quota = await tx.features.findFirst({
const quota = await tx.feature.findFirst({
where: {
id: featureId,
},

View File

@@ -155,6 +155,25 @@ export const Quotas: Quota[] = [
copilotActionLimit: 10,
},
},
{
feature: QuotaType.LifetimeProPlanV1,
type: FeatureKind.Quota,
version: 1,
configs: {
// quota name
name: 'Lifetime Pro',
// single blob limit 100MB
blobLimit: 100 * OneMB,
// total blob limit 1TB
storageQuota: 1024 * OneGB,
// history period of validity 30 days
historyPeriod: 30 * OneDay,
// member limit 10
memberLimit: 10,
// copilot action limit 10
copilotActionLimit: 10,
},
},
];
export function getLatestQuota(type: QuotaType) {
@@ -165,6 +184,7 @@ export function getLatestQuota(type: QuotaType) {
export const FreePlan = getLatestQuota(QuotaType.FreePlanV1);
export const ProPlan = getLatestQuota(QuotaType.ProPlanV1);
export const LifetimeProPlan = getLatestQuota(QuotaType.LifetimeProPlanV1);
export const Quota_FreePlanV1_1 = {
feature: Quotas[5].feature,

View File

@@ -3,7 +3,6 @@ import { PrismaClient } from '@prisma/client';
import type { EventPayload } from '../../fundamentals';
import { OnEvent, PrismaTransaction } from '../../fundamentals';
import { SubscriptionPlan } from '../../plugins/payment/types';
import { FeatureManagementService } from '../features/management';
import { FeatureKind } from '../features/types';
import { QuotaConfig } from './quota';
@@ -18,7 +17,7 @@ export class QuotaService {
// get activated user quota
async getUserQuota(userId: string) {
const quota = await this.prisma.userFeatures.findFirst({
const quota = await this.prisma.userFeature.findFirst({
where: {
userId,
feature: {
@@ -45,7 +44,7 @@ export class QuotaService {
// get user all quota records
async getUserQuotas(userId: string) {
const quotas = await this.prisma.userFeatures.findMany({
const quotas = await this.prisma.userFeature.findMany({
where: {
userId,
feature: {
@@ -59,6 +58,9 @@ export class QuotaService {
expiredAt: true,
featureId: true,
},
orderBy: {
id: 'asc',
},
});
const configs = await Promise.all(
quotas.map(async quota => {
@@ -93,7 +95,7 @@ export class QuotaService {
return;
}
const featureId = await tx.features
const featureId = await tx.feature
.findFirst({
where: { feature: quota, type: FeatureKind.Quota },
select: { id: true },
@@ -106,7 +108,7 @@ export class QuotaService {
}
// we will deactivate all exists quota for this user
await tx.userFeatures.updateMany({
await tx.userFeature.updateMany({
where: {
id: undefined,
userId,
@@ -119,7 +121,7 @@ export class QuotaService {
},
});
await tx.userFeatures.create({
await tx.userFeature.create({
data: {
userId,
featureId,
@@ -134,7 +136,7 @@ export class QuotaService {
async hasQuota(userId: string, quota: QuotaType, tx?: PrismaTransaction) {
const executor = tx ?? this.prisma;
return executor.userFeatures
return executor.userFeature
.count({
where: {
userId,
@@ -152,15 +154,18 @@ export class QuotaService {
async onSubscriptionUpdated({
userId,
plan,
recurring,
}: EventPayload<'user.subscription.activated'>) {
switch (plan) {
case SubscriptionPlan.AI:
case 'ai':
await this.feature.addCopilot(userId, 'subscription activated');
break;
case SubscriptionPlan.Pro:
case 'pro':
await this.switchUserQuota(
userId,
QuotaType.ProPlanV1,
recurring === 'lifetime'
? QuotaType.LifetimeProPlanV1
: QuotaType.ProPlanV1,
'subscription activated'
);
break;
@@ -175,16 +180,22 @@ export class QuotaService {
plan,
}: EventPayload<'user.subscription.canceled'>) {
switch (plan) {
case SubscriptionPlan.AI:
case 'ai':
await this.feature.removeCopilot(userId);
break;
case SubscriptionPlan.Pro:
await this.switchUserQuota(
userId,
QuotaType.FreePlanV1,
'subscription canceled'
);
case 'pro': {
// edge case: when user switch from recurring Pro plan to `Lifetime` plan,
// a subscription canceled event will be triggered because `Lifetime` plan is not subscription based
const quota = await this.getUserQuota(userId);
if (quota.feature.name !== QuotaType.LifetimeProPlanV1) {
await this.switchUserQuota(
userId,
QuotaType.FreePlanV1,
'subscription canceled'
);
}
break;
}
default:
break;
}

View File

@@ -17,6 +17,7 @@ import { ByteUnit, OneDay, OneKB } from './constant';
export enum QuotaType {
FreePlanV1 = 'free_plan_v1',
ProPlanV1 = 'pro_plan_v1',
LifetimeProPlanV1 = 'lifetime_pro_plan_v1',
// only for test, smaller quota
RestrictedPlanV1 = 'restricted_plan_v1',
}
@@ -25,6 +26,7 @@ const quotaPlan = z.object({
feature: z.enum([
QuotaType.FreePlanV1,
QuotaType.ProPlanV1,
QuotaType.LifetimeProPlanV1,
QuotaType.RestrictedPlanV1,
]),
configs: z.object({

View File

@@ -0,0 +1,66 @@
import { Body, Controller, Post, Req, Res } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
import type { Request, Response } from 'express';
import {
ActionForbidden,
EventEmitter,
InternalServerError,
MutexService,
PasswordRequired,
} from '../../fundamentals';
import { AuthService, Public } from '../auth';
import { UserService } from '../user/service';
interface CreateUserInput {
email: string;
password: string;
}
@Controller('/api/setup')
export class CustomSetupController {
constructor(
private readonly db: PrismaClient,
private readonly user: UserService,
private readonly auth: AuthService,
private readonly event: EventEmitter,
private readonly mutex: MutexService
) {}
@Public()
@Post('/create-admin-user')
async createAdmin(
@Req() req: Request,
@Res() res: Response,
@Body() input: CreateUserInput
) {
if (!input.password) {
throw new PasswordRequired();
}
await using lock = await this.mutex.lock('createFirstAdmin');
if (!lock) {
throw new InternalServerError();
}
if ((await this.db.user.count()) > 0) {
throw new ActionForbidden('First user already created');
}
const user = await this.user.createUser({
email: input.email,
password: input.password,
registered: true,
});
try {
await this.event.emitAsync('user.admin.created', user);
await this.auth.setCookie(req, res, user);
res.send({ id: user.id, email: user.email, name: user.name });
} catch (e) {
await this.user.deleteUser(user.id);
throw e;
}
}
}

View File

@@ -0,0 +1,11 @@
import { Module } from '@nestjs/common';
import { AuthModule } from '../auth';
import { UserModule } from '../user';
import { CustomSetupController } from './controller';
@Module({
imports: [AuthModule, UserModule],
controllers: [CustomSetupController],
})
export class CustomSetupModule {}

View File

@@ -50,12 +50,7 @@ function Awareness(workspaceId: string): `${string}:awareness` {
return `${workspaceId}:awareness`;
}
@WebSocketGateway({
cors: !AFFiNE.node.prod,
transports: ['websocket'],
// see: https://socket.io/docs/v4/server-options/#maxhttpbuffersize
maxHttpBufferSize: 1e8, // 100 MB
})
@WebSocketGateway()
export class EventsGateway implements OnGatewayConnection, OnGatewayDisconnect {
protected logger = new Logger(EventsGateway.name);
private connectionCount = 0;

View File

@@ -13,8 +13,7 @@ import GraphQLUpload from 'graphql-upload/GraphQLUpload.mjs';
import { isNil, omitBy } from 'lodash-es';
import {
Config,
CryptoHelper,
CannotDeleteOwnAccount,
type FileUpload,
Throttle,
UserNotFound,
@@ -28,6 +27,7 @@ import { validators } from '../utils/validators';
import { UserService } from './service';
import {
DeleteAccount,
ManageUserInput,
RemoveAvatar,
UpdateUserInput,
UserOrLimitedUser,
@@ -167,9 +167,6 @@ class CreateUserInput {
@Field(() => String, { nullable: true })
name!: string | null;
@Field(() => String, { nullable: true })
password!: string | null;
}
@Admin()
@@ -177,11 +174,16 @@ class CreateUserInput {
export class UserManagementResolver {
constructor(
private readonly db: PrismaClient,
private readonly user: UserService,
private readonly crypto: CryptoHelper,
private readonly config: Config
private readonly user: UserService
) {}
@Query(() => Int, {
description: 'Get users count',
})
async usersCount(): Promise<number> {
return this.db.user.count();
}
@Query(() => [UserType], {
description: 'List registered users',
})
@@ -216,28 +218,34 @@ export class UserManagementResolver {
return sessionUser(user);
}
@Query(() => UserType, {
name: 'userByEmail',
description: 'Get user by email for admin',
nullable: true,
})
async getUserByEmail(@Args('email') email: string) {
const user = await this.db.user.findUnique({
select: { ...this.user.defaultUserSelect, password: true },
where: {
email,
},
});
if (!user) {
return null;
}
return sessionUser(user);
}
@Mutation(() => UserType, {
description: 'Create a new user',
})
async createUser(
@Args({ name: 'input', type: () => CreateUserInput }) input: CreateUserInput
) {
validators.assertValidEmail(input.email);
if (input.password) {
const config = await this.config.runtime.fetchAll({
'auth/password.max': true,
'auth/password.min': true,
});
validators.assertValidPassword(input.password, {
max: config['auth/password.max'],
min: config['auth/password.min'],
});
}
const { id } = await this.user.createAnonymousUser(input.email, {
password: input.password
? await this.crypto.encryptPassword(input.password)
: undefined,
const { id } = await this.user.createUser({
email: input.email,
registered: true,
});
@@ -248,8 +256,42 @@ export class UserManagementResolver {
@Mutation(() => DeleteAccount, {
description: 'Delete a user account',
})
async deleteUser(@Args('id') id: string): Promise<DeleteAccount> {
async deleteUser(
@CurrentUser() user: CurrentUser,
@Args('id') id: string
): Promise<DeleteAccount> {
if (user.id === id) {
throw new CannotDeleteOwnAccount();
}
await this.user.deleteUser(id);
return { success: true };
}
@Mutation(() => UserType, {
description: 'Update a user',
})
async updateUser(
@Args('id') id: string,
@Args('input') input: ManageUserInput
): Promise<UserType> {
const user = await this.db.user.findUnique({
where: { id },
});
if (!user) {
throw new UserNotFound();
}
input = omitBy(input, isNil);
if (Object.keys(input).length === 0) {
return sessionUser(user);
}
return sessionUser(
await this.user.updateUser(user.id, {
email: input.email,
name: input.name,
})
);
}
}

View File

@@ -3,12 +3,18 @@ import { Prisma, PrismaClient } from '@prisma/client';
import {
Config,
CryptoHelper,
EmailAlreadyUsed,
EventEmitter,
type EventPayload,
OnEvent,
WrongSignInCredentials,
WrongSignInMethod,
} from '../../fundamentals';
import { Quota_FreePlanV1_1 } from '../quota/schema';
import { validators } from '../utils/validators';
type CreateUserInput = Omit<Prisma.UserCreateInput, 'name'> & { name?: string };
@Injectable()
export class UserService {
@@ -26,6 +32,7 @@ export class UserService {
constructor(
private readonly config: Config,
private readonly crypto: CryptoHelper,
private readonly prisma: PrismaClient,
private readonly emitter: EventEmitter
) {}
@@ -35,7 +42,7 @@ export class UserService {
name: 'Unnamed',
features: {
create: {
reason: 'created by invite sign up',
reason: 'sign up',
activated: true,
feature: {
connect: {
@@ -47,7 +54,37 @@ export class UserService {
};
}
async createUser(data: Prisma.UserCreateInput) {
async createUser(data: CreateUserInput) {
validators.assertValidEmail(data.email);
const user = await this.findUserByEmail(data.email);
if (user) {
throw new EmailAlreadyUsed();
}
if (data.password) {
const config = await this.config.runtime.fetchAll({
'auth/password.max': true,
'auth/password.min': true,
});
validators.assertValidPassword(data.password, {
max: config['auth/password.max'],
min: config['auth/password.min'],
});
}
return this.createUser_without_verification(data);
}
async createUser_without_verification(data: CreateUserInput) {
if (data.password) {
data.password = await this.crypto.encryptPassword(data.password);
}
if (!data.name) {
data.name = data.email.split('@')[0];
}
return this.prisma.user.create({
select: this.defaultUserSelect,
data: {
@@ -57,23 +94,6 @@ export class UserService {
});
}
async createAnonymousUser(
email: string,
data?: Partial<Prisma.UserCreateInput>
) {
const user = await this.findUserByEmail(email);
if (user) {
throw new EmailAlreadyUsed();
}
return this.createUser({
email,
name: email.split('@')[0],
...data,
});
}
async findUserById(id: string) {
return this.prisma.user
.findUnique({
@@ -86,6 +106,7 @@ export class UserService {
}
async findUserByEmail(email: string) {
validators.assertValidEmail(email);
return this.prisma.user.findFirst({
where: {
email: {
@@ -101,6 +122,7 @@ export class UserService {
* supposed to be used only for `Credential SignIn`
*/
async findUserWithHashedPasswordByEmail(email: string) {
validators.assertValidEmail(email);
return this.prisma.user.findFirst({
where: {
email: {
@@ -111,15 +133,27 @@ export class UserService {
});
}
async findOrCreateUser(
email: string,
data?: Partial<Prisma.UserCreateInput>
) {
const user = await this.findUserByEmail(email);
if (user) {
return user;
async signIn(email: string, password: string) {
const user = await this.findUserWithHashedPasswordByEmail(email);
if (!user) {
throw new WrongSignInCredentials();
}
return this.createAnonymousUser(email, data);
if (!user.password) {
throw new WrongSignInMethod();
}
const passwordMatches = await this.crypto.verifyPassword(
password,
user.password
);
if (!passwordMatches) {
throw new WrongSignInCredentials();
}
return user;
}
async fulfillUser(
@@ -160,9 +194,38 @@ export class UserService {
async updateUser(
id: string,
data: Prisma.UserUpdateInput,
data: Omit<Partial<Prisma.UserCreateInput>, 'id'>,
select: Prisma.UserSelect = this.defaultUserSelect
) {
if (data.password) {
const config = await this.config.runtime.fetchAll({
'auth/password.max': true,
'auth/password.min': true,
});
validators.assertValidPassword(data.password, {
max: config['auth/password.max'],
min: config['auth/password.min'],
});
data.password = await this.crypto.encryptPassword(data.password);
}
if (data.email) {
validators.assertValidEmail(data.email);
const emailTaken = await this.prisma.user.count({
where: {
email: data.email,
id: {
not: id,
},
},
});
if (emailTaken) {
throw new EmailAlreadyUsed();
}
}
const user = await this.prisma.user.update({ where: { id }, data, select });
this.emitter.emit('user.updated', user);

View File

@@ -7,6 +7,7 @@ import {
} from '@nestjs/graphql';
import type { User } from '@prisma/client';
import type { Payload } from '../../fundamentals/event/def';
import { CurrentUser } from '../auth/current-user';
@ObjectType()
@@ -81,3 +82,20 @@ export class UpdateUserInput implements Partial<User> {
@Field({ description: 'User name', nullable: true })
name?: string;
}
@InputType()
export class ManageUserInput {
@Field({ description: 'User email', nullable: true })
email?: string;
@Field({ description: 'User name', nullable: true })
name?: string;
}
declare module '../../fundamentals/event/def' {
interface UserEvents {
admin: {
created: Payload<{ id: string }>;
};
}
}

View File

@@ -342,7 +342,8 @@ export class WorkspaceResolver {
// only invite if the user is not already in the workspace
if (originRecord) return originRecord.id;
} else {
target = await this.users.createAnonymousUser(email, {
target = await this.users.createUser({
email,
registered: false,
});
}

View File

@@ -2,7 +2,7 @@ import { PrismaClient } from '@prisma/client';
import { Features } from '../../core/features';
import { Quotas } from '../../core/quota/schema';
import { migrateNewFeatureTable, upsertFeature } from './utils/user-features';
import { upsertFeature } from './utils/user-features';
export class UserFeaturesInit1698652531198 {
// do the migration
@@ -11,7 +11,6 @@ export class UserFeaturesInit1698652531198 {
for (const feature of Features) {
await upsertFeature(db, feature);
}
await migrateNewFeatureTable(db);
for (const quota of Quotas) {
await upsertFeature(db, quota);

View File

@@ -1,94 +0,0 @@
import { PrismaClient } from '@prisma/client';
export class PagePermission1699005339766 {
// do the migration
static async up(db: PrismaClient) {
let turn = 0;
let lastTurnCount = 50;
const done = new Set<string>();
while (lastTurnCount === 50) {
const workspaces = await db.workspace.findMany({
skip: turn * 50,
take: 50,
orderBy: {
createdAt: 'asc',
},
});
lastTurnCount = workspaces.length;
for (const workspace of workspaces) {
if (done.has(workspace.id)) {
continue;
}
const oldPermissions =
await db.deprecatedUserWorkspacePermission.findMany({
where: {
workspaceId: workspace.id,
},
});
for (const oldPermission of oldPermissions) {
// mark subpage public
if (oldPermission.subPageId) {
const existed = await db.workspacePage.findUnique({
where: {
workspaceId_pageId: {
workspaceId: oldPermission.workspaceId,
pageId: oldPermission.subPageId,
},
},
});
if (!existed) {
await db.workspacePage.create({
select: null,
data: {
workspaceId: oldPermission.workspaceId,
pageId: oldPermission.subPageId,
public: true,
},
});
}
} else if (oldPermission.userId) {
// workspace user permission
const existed = await db.workspaceUserPermission.findUnique({
where: {
id: oldPermission.id,
},
});
if (!existed) {
await db.workspaceUserPermission
.create({
select: null,
data: {
// this id is used at invite email, should keep
id: oldPermission.id,
workspaceId: oldPermission.workspaceId,
userId: oldPermission.userId,
type: oldPermission.type,
accepted: oldPermission.accepted,
},
})
.catch(() => {
// duplicated
});
}
} else {
// ignore wrong data
}
}
done.add(workspace.id);
}
turn++;
}
}
// revert the migration
static async down(db: PrismaClient) {
await db.workspaceUserPermission.deleteMany({});
await db.workspacePageUserPermission.deleteMany({});
}
}

View File

@@ -5,7 +5,7 @@ export class OldUserFeature1702620653283 {
// do the migration
static async up(db: PrismaClient) {
await db.$transaction(async tx => {
const latestFreePlan = await tx.features.findFirstOrThrow({
const latestFreePlan = await tx.feature.findFirstOrThrow({
where: { feature: QuotaType.FreePlanV1 },
orderBy: { version: 'desc' },
select: { id: true },
@@ -17,7 +17,7 @@ export class OldUserFeature1702620653283 {
select: { id: true },
});
await tx.userFeatures.createMany({
await tx.userFeature.createMany({
data: userIds.map(({ id: userId }) => ({
userId,
featureId: latestFreePlan.id,
@@ -31,6 +31,6 @@ export class OldUserFeature1702620653283 {
// revert the migration
// WARN: this will drop all user features
static async down(db: PrismaClient) {
await db.userFeatures.deleteMany({});
await db.userFeature.deleteMany({});
}
}

View File

@@ -9,9 +9,6 @@ export class UnamedAccount1703756315970 {
const users = await db.$queryRaw<
User[]
>`SELECT * FROM users WHERE name ~ E'^[\\s\\u2000-\\u200F]*$';`;
console.log(
`renaming ${users.map(({ email }) => email).join('|')} users`
);
await Promise.all(
users.map(({ id, email }) =>

View File

@@ -1,38 +0,0 @@
import { ModuleRef } from '@nestjs/core';
import { PrismaClient } from '@prisma/client';
import { WorkspaceBlobStorage } from '../../core/storage';
export class WorkspaceBlobs1703828796699 {
// do the migration
static async up(db: PrismaClient, injector: ModuleRef) {
const blobStorage = injector.get(WorkspaceBlobStorage, { strict: false });
let hasMore = true;
let turn = 0;
const eachTurnCount = 50;
while (hasMore) {
const blobs = await db.blob.findMany({
skip: turn * eachTurnCount,
take: eachTurnCount,
orderBy: {
createdAt: 'asc',
},
});
hasMore = blobs.length === eachTurnCount;
turn += 1;
await Promise.all(
blobs.map(async ({ workspaceId, hash, blob }) =>
blobStorage.put(workspaceId, hash, blob)
)
);
}
}
// revert the migration
static async down(_db: PrismaClient) {
// old data kept, no need to downgrade the migration
}
}

View File

@@ -1,39 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { loop } from './utils/loop';
export class Oauth1710319359062 {
// do the migration
static async up(db: PrismaClient) {
await loop(async (skip, take) => {
const oldRecords = await db.deprecatedNextAuthAccount.findMany({
skip,
take,
orderBy: {
providerAccountId: 'asc',
},
});
await db.connectedAccount.createMany({
data: oldRecords.map(record => ({
userId: record.userId,
provider: record.provider,
scope: record.scope,
providerAccountId: record.providerAccountId,
accessToken: record.access_token,
refreshToken: record.refresh_token,
expiresAt: record.expires_at
? new Date(record.expires_at * 1000)
: null,
})),
});
return oldRecords.length;
}, 10);
}
// revert the migration
static async down(db: PrismaClient) {
await db.connectedAccount.deleteMany({});
}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class Prompts1712068777394 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class RefreshPrompt1713185798895 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class UpdatePrompt1713522040090 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class UpdatePrompts1713777617122 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class UpdatePrompt1713864641056 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class UpdatePrompts1714021969665 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class UpdatePrompts1714386922280 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class UpdatePrompts1714454280973 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class UpdatePrompts1714982671938 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class UpdatePrompts1714992100105 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class UpdatePrompts1714998654392 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class AddMakeItRealWithTextPrompt1715149980782 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,22 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class UpdatePrompts1715672224087 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(db: PrismaClient) {
await db.aiPrompt.updateMany({
where: {
model: 'gpt-4o',
},
data: {
model: 'gpt-4-vision-preview',
},
});
}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class UpdatePrompts1715936358947 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class UpdatePrompts1716451792364 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class UpdatePrompts1716800288136 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class UpdatePrompts1716882419364 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class UpdatePrompts1717139930406 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class UpdatePrompts1717140940966 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -1,13 +0,0 @@
import { PrismaClient } from '@prisma/client';
import { refreshPrompts } from './utils/prompts';
export class UpdatePrompts1717490700326 {
// do the migration
static async up(db: PrismaClient) {
await refreshPrompts(db);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -0,0 +1,14 @@
import { PrismaClient } from '@prisma/client';
import { QuotaType } from '../../core/quota';
import { upsertLatestQuotaVersion } from './utils/user-quotas';
export class LifetimeProQuota1719917815802 {
// do the migration
static async up(db: PrismaClient) {
await upsertLatestQuotaVersion(db, QuotaType.LifetimeProPlanV1);
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -0,0 +1,15 @@
import { PrismaClient } from '@prisma/client';
export class RefreshUnnamedUser1721299086340 {
// do the migration
static async up(db: PrismaClient) {
await db.$executeRaw`
UPDATE users
SET name = split_part(email, '@', 1)
WHERE name = 'Unnamed' AND position('@' in email) > 0;
`;
}
// revert the migration
static async down(_db: PrismaClient) {}
}

View File

@@ -2,33 +2,14 @@ import { ModuleRef } from '@nestjs/core';
import { PrismaClient } from '@prisma/client';
import { FeatureManagementService } from '../../core/features';
import { UserService } from '../../core/user';
import { Config, CryptoHelper } from '../../fundamentals';
import { Config } from '../../fundamentals';
export class SelfHostAdmin1 {
// do the migration
static async up(db: PrismaClient, ref: ModuleRef) {
const config = ref.get(Config, { strict: false });
if (config.isSelfhosted) {
const crypto = ref.get(CryptoHelper, { strict: false });
const user = ref.get(UserService, { strict: false });
const feature = ref.get(FeatureManagementService, { strict: false });
if (
!process.env.AFFINE_ADMIN_EMAIL ||
!process.env.AFFINE_ADMIN_PASSWORD
) {
throw new Error(
'You have to set AFFINE_ADMIN_EMAIL and AFFINE_ADMIN_PASSWORD environment variables to generate the initial user for self-hosted AFFiNE Server.'
);
}
await user.findOrCreateUser(process.env.AFFINE_ADMIN_EMAIL, {
name: 'AFFINE First User',
emailVerifiedAt: new Date(),
password: await crypto.encryptPassword(
process.env.AFFINE_ADMIN_PASSWORD
),
});
const firstUser = await db.user.findFirst({
orderBy: {

View File

@@ -1,11 +1,6 @@
import { Prisma, PrismaClient } from '@prisma/client';
import {
CommonFeature,
FeatureKind,
Features,
FeatureType,
} from '../../../core/features';
import { CommonFeature, Features, FeatureType } from '../../../core/features';
// upgrade features from lower version to higher version
export async function upsertFeature(
@@ -13,7 +8,7 @@ export async function upsertFeature(
feature: CommonFeature
): Promise<void> {
const hasEqualOrGreaterVersion =
(await db.features.count({
(await db.feature.count({
where: {
feature: feature.feature,
version: {
@@ -23,7 +18,7 @@ export async function upsertFeature(
})) > 0;
// will not update exists version
if (!hasEqualOrGreaterVersion) {
await db.features.create({
await db.feature.create({
data: {
feature: feature.feature,
type: feature.type,
@@ -43,66 +38,3 @@ export async function upsertLatestFeatureVersion(
const latestFeature = feature[0];
await upsertFeature(db, latestFeature);
}
export async function migrateNewFeatureTable(prisma: PrismaClient) {
const waitingList = await prisma.newFeaturesWaitingList.findMany();
const latestEarlyAccessFeatureId = await prisma.features
.findFirst({
where: { feature: FeatureType.EarlyAccess, type: FeatureKind.Feature },
select: { id: true },
orderBy: { version: 'desc' },
})
.then(r => r?.id);
if (!latestEarlyAccessFeatureId) {
throw new Error('Feature EarlyAccess not found');
}
for (const oldUser of waitingList) {
const user = await prisma.user.findFirst({
where: {
email: oldUser.email,
},
});
if (user) {
const hasEarlyAccess = await prisma.userFeatures.count({
where: {
userId: user.id,
feature: {
feature: FeatureType.EarlyAccess,
},
activated: true,
},
});
if (hasEarlyAccess === 0) {
await prisma.$transaction(async tx => {
const latestFlag = await tx.userFeatures.findFirst({
where: {
userId: user.id,
feature: {
feature: FeatureType.EarlyAccess,
type: FeatureKind.Feature,
},
activated: true,
},
orderBy: {
createdAt: 'desc',
},
});
if (latestFlag) {
return latestFlag.id;
} else {
return tx.userFeatures
.create({
data: {
reason: 'Early access user',
activated: true,
userId: user.id,
featureId: latestEarlyAccessFeatureId,
},
})
.then(r => r.id);
}
});
}
}
}
}

View File

@@ -15,7 +15,7 @@ export async function upgradeQuotaVersion(
// migrate all users that using old quota to new quota
await db.$transaction(
async tx => {
const latestQuotaVersion = await tx.features.findFirstOrThrow({
const latestQuotaVersion = await tx.feature.findFirstOrThrow({
where: { feature: quota.feature },
orderBy: { version: 'desc' },
select: { id: true },
@@ -39,7 +39,7 @@ export async function upgradeQuotaVersion(
});
// deactivate all old quota for the user
await tx.userFeatures.updateMany({
await tx.userFeature.updateMany({
where: {
id: undefined,
userId: {
@@ -55,7 +55,7 @@ export async function upgradeQuotaVersion(
},
});
await tx.userFeatures.createMany({
await tx.userFeature.createMany({
data: userIds.map(({ id: userId }) => ({
userId,
featureId: latestQuotaVersion.id,

View File

@@ -3,7 +3,7 @@ import {
Inject,
Injectable,
Logger,
OnApplicationBootstrap,
OnModuleInit,
} from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
import { difference, keyBy } from 'lodash-es';
@@ -45,7 +45,7 @@ function validateConfigType<K extends keyof FlattenedAppRuntimeConfig>(
* })
*/
@Injectable()
export class Runtime implements OnApplicationBootstrap {
export class Runtime implements OnModuleInit {
private readonly logger = new Logger('App:RuntimeConfig');
constructor(
@@ -54,7 +54,7 @@ export class Runtime implements OnApplicationBootstrap {
@Inject(forwardRef(() => Cache)) private readonly cache: Cache
) {}
async onApplicationBootstrap() {
async onModuleInit() {
await this.upgradeDB();
}

View File

@@ -63,7 +63,7 @@ export class UserFriendlyError extends Error {
// disallow message override for `internal_server_error`
// to avoid leak internal information to user
let msg =
name === 'internal_server_error' ? defaultMsg : message ?? defaultMsg;
name === 'internal_server_error' ? defaultMsg : (message ?? defaultMsg);
if (typeof msg === 'function') {
msg = msg(args);
@@ -95,7 +95,7 @@ export class UserFriendlyError extends Error {
new Logger(context).error(
'Internal server error',
this.cause ? (this.cause as any).stack ?? this.cause : this.stack
this.cause ? ((this.cause as any).stack ?? this.cause) : this.stack
);
}
}
@@ -254,6 +254,10 @@ export const USER_FRIENDLY_ERRORS = {
message: ({ min, max }) =>
`Password must be between ${min} and ${max} characters`,
},
password_required: {
type: 'invalid_input',
message: 'Password is required.',
},
wrong_sign_in_method: {
type: 'invalid_input',
message:
@@ -408,6 +412,10 @@ export const USER_FRIENDLY_ERRORS = {
args: { plan: 'string', recurring: 'string' },
message: 'You are trying to access a unknown subscription plan.',
},
cant_update_lifetime_subscription: {
type: 'action_forbidden',
message: 'You cannot update a lifetime subscription.',
},
// Copilot errors
copilot_session_not_found: {
@@ -440,7 +448,8 @@ export const USER_FRIENDLY_ERRORS = {
},
copilot_message_not_found: {
type: 'resource_not_found',
message: `Copilot message not found.`,
args: { messageId: 'string' },
message: ({ messageId }) => `Copilot message ${messageId} not found.`,
},
copilot_prompt_not_found: {
type: 'resource_not_found',
@@ -455,7 +464,7 @@ export const USER_FRIENDLY_ERRORS = {
type: 'internal_server_error',
args: { provider: 'string', kind: 'string', message: 'string' },
message: ({ provider, kind, message }) =>
`Provider ${provider} failed with ${kind} error: ${message || 'unknown'}.`,
`Provider ${provider} failed with ${kind} error: ${message || 'unknown'}`,
},
// Quota & Limit errors
@@ -489,4 +498,12 @@ export const USER_FRIENDLY_ERRORS = {
type: 'internal_server_error',
message: 'Mailer service is not configured.',
},
cannot_delete_all_admin_account: {
type: 'action_forbidden',
message: 'Cannot delete all admin accounts.',
},
cannot_delete_own_account: {
type: 'action_forbidden',
message: 'Cannot delete own account.',
},
} satisfies Record<string, UserFriendlyErrorOptions>;

View File

@@ -101,6 +101,12 @@ export class InvalidPasswordLength extends UserFriendlyError {
}
}
export class PasswordRequired extends UserFriendlyError {
constructor(message?: string) {
super('invalid_input', 'password_required', message);
}
}
export class WrongSignInMethod extends UserFriendlyError {
constructor(message?: string) {
super('invalid_input', 'wrong_sign_in_method', message);
@@ -350,6 +356,12 @@ export class SubscriptionPlanNotFound extends UserFriendlyError {
}
}
export class CantUpdateLifetimeSubscription extends UserFriendlyError {
constructor(message?: string) {
super('action_forbidden', 'cant_update_lifetime_subscription', message);
}
}
export class CopilotSessionNotFound extends UserFriendlyError {
constructor(message?: string) {
super('resource_not_found', 'copilot_session_not_found', message);
@@ -391,10 +403,14 @@ export class CopilotActionTaken extends UserFriendlyError {
super('action_forbidden', 'copilot_action_taken', message);
}
}
@ObjectType()
class CopilotMessageNotFoundDataType {
@Field() messageId!: string
}
export class CopilotMessageNotFound extends UserFriendlyError {
constructor(message?: string) {
super('resource_not_found', 'copilot_message_not_found', message);
constructor(args: CopilotMessageNotFoundDataType, message?: string | ((args: CopilotMessageNotFoundDataType) => string)) {
super('resource_not_found', 'copilot_message_not_found', message, args);
}
}
@ObjectType()
@@ -471,6 +487,18 @@ export class MailerServiceIsNotConfigured extends UserFriendlyError {
super('internal_server_error', 'mailer_service_is_not_configured', message);
}
}
export class CannotDeleteAllAdminAccount extends UserFriendlyError {
constructor(message?: string) {
super('action_forbidden', 'cannot_delete_all_admin_account', message);
}
}
export class CannotDeleteOwnAccount extends UserFriendlyError {
constructor(message?: string) {
super('action_forbidden', 'cannot_delete_own_account', message);
}
}
export enum ErrorNames {
INTERNAL_SERVER_ERROR,
TOO_MANY_REQUEST,
@@ -486,6 +514,7 @@ export enum ErrorNames {
OAUTH_ACCOUNT_ALREADY_CONNECTED,
INVALID_EMAIL,
INVALID_PASSWORD_LENGTH,
PASSWORD_REQUIRED,
WRONG_SIGN_IN_METHOD,
EARLY_ACCESS_REQUIRED,
SIGN_UP_FORBIDDEN,
@@ -517,6 +546,7 @@ export enum ErrorNames {
SAME_SUBSCRIPTION_RECURRING,
CUSTOMER_PORTAL_CREATE_FAILED,
SUBSCRIPTION_PLAN_NOT_FOUND,
CANT_UPDATE_LIFETIME_SUBSCRIPTION,
COPILOT_SESSION_NOT_FOUND,
COPILOT_SESSION_DELETED,
NO_COPILOT_PROVIDER_AVAILABLE,
@@ -533,7 +563,9 @@ export enum ErrorNames {
COPILOT_QUOTA_EXCEEDED,
RUNTIME_CONFIG_NOT_FOUND,
INVALID_RUNTIME_CONFIG_TYPE,
MAILER_SERVICE_IS_NOT_CONFIGURED
MAILER_SERVICE_IS_NOT_CONFIGURED,
CANNOT_DELETE_ALL_ADMIN_ACCOUNT,
CANNOT_DELETE_OWN_ACCOUNT
}
registerEnumType(ErrorNames, {
name: 'ErrorNames'
@@ -542,5 +574,5 @@ registerEnumType(ErrorNames, {
export const ErrorDataUnionType = createUnionType({
name: 'ErrorDataUnion',
types: () =>
[UnknownOauthProviderDataType, MissingOauthQueryParameterDataType, InvalidPasswordLengthDataType, WorkspaceNotFoundDataType, NotInWorkspaceDataType, WorkspaceAccessDeniedDataType, WorkspaceOwnerNotFoundDataType, DocNotFoundDataType, DocAccessDeniedDataType, VersionRejectedDataType, InvalidHistoryTimestampDataType, DocHistoryNotFoundDataType, BlobNotFoundDataType, SubscriptionAlreadyExistsDataType, SubscriptionNotExistsDataType, SameSubscriptionRecurringDataType, SubscriptionPlanNotFoundDataType, CopilotPromptNotFoundDataType, CopilotProviderSideErrorDataType, RuntimeConfigNotFoundDataType, InvalidRuntimeConfigTypeDataType] as const,
[UnknownOauthProviderDataType, MissingOauthQueryParameterDataType, InvalidPasswordLengthDataType, WorkspaceNotFoundDataType, NotInWorkspaceDataType, WorkspaceAccessDeniedDataType, WorkspaceOwnerNotFoundDataType, DocNotFoundDataType, DocAccessDeniedDataType, VersionRejectedDataType, InvalidHistoryTimestampDataType, DocHistoryNotFoundDataType, BlobNotFoundDataType, SubscriptionAlreadyExistsDataType, SubscriptionNotExistsDataType, SameSubscriptionRecurringDataType, SubscriptionPlanNotFoundDataType, CopilotMessageNotFoundDataType, CopilotPromptNotFoundDataType, CopilotProviderSideErrorDataType, RuntimeConfigNotFoundDataType, InvalidRuntimeConfigTypeDataType] as const,
});

View File

@@ -36,5 +36,6 @@ export {
getRequestFromHost,
getRequestResponseFromContext,
getRequestResponseFromHost,
parseCookies,
} from './utils/request';
export type * from './utils/types';

View File

@@ -3,6 +3,7 @@ import { Inject, Injectable, Optional } from '@nestjs/common';
import { Config } from '../config';
import { MailerServiceIsNotConfigured } from '../error';
import { URLHelper } from '../helpers';
import { metrics } from '../metrics';
import type { MailerService, Options } from './mailer';
import { MAILER_SERVICE } from './mailer';
import { emailTemplate } from './template';
@@ -19,10 +20,20 @@ export class MailService {
throw new MailerServiceIsNotConfigured();
}
return this.mailer.sendMail({
from: this.config.mailer?.from,
...options,
});
metrics.mail.counter('total').add(1);
try {
const result = await this.mailer.sendMail({
from: this.config.mailer?.from,
...options,
});
metrics.mail.counter('sent').add(1);
return result;
} catch (e) {
metrics.mail.counter('error').add(1);
throw e;
}
}
hasConfigured() {

View File

@@ -148,7 +148,7 @@ export const emailTemplate = ({
</a>
</td>
<td style="padding: 0 10px">
<a href="https://discord.gg/Arn7TqJBvG" target="_blank"
<a href="https://discord.gg/whd5mjYqVw" target="_blank"
><img
src="https://cdn.affine.pro/mail/2023-8-9/Discord.png"
alt="AFFiNE discord link"

View File

@@ -35,7 +35,8 @@ export type KnownMetricScopes =
| 'auth'
| 'controllers'
| 'doc'
| 'sse';
| 'sse'
| 'mail';
const metricCreators: MetricCreators = {
counter(meter: Meter, name: string, opts?: MetricOptions) {

View File

@@ -1,10 +1,10 @@
import { randomUUID } from 'node:crypto';
import { Inject, Injectable, Logger, Scope } from '@nestjs/common';
import { ModuleRef } from '@nestjs/core';
import { CONTEXT } from '@nestjs/graphql';
import { ModuleRef, REQUEST } from '@nestjs/core';
import type { Request } from 'express';
import type { GraphqlContext } from '../graphql';
import { GraphqlContext } from '../graphql';
import { retryable } from '../utils/promise';
import { Locker } from './local-lock';
@@ -17,7 +17,7 @@ export class MutexService {
private readonly locker: Locker;
constructor(
@Inject(CONTEXT) private readonly context: GraphqlContext,
@Inject(REQUEST) private readonly request: Request | GraphqlContext,
private readonly ref: ModuleRef
) {
// nestjs will always find and injecting the locker from local module
@@ -31,11 +31,12 @@ export class MutexService {
}
protected getId() {
let id = this.context.req.headers['x-transaction-id'] as string;
const req = 'req' in this.request ? this.request.req : this.request;
let id = req.headers['x-transaction-id'] as string;
if (!id) {
id = randomUUID();
this.context.req.headers['x-transaction-id'] = id;
req.headers['x-transaction-id'] = id;
}
return id;

View File

@@ -2,8 +2,10 @@ import { ArgumentsHost, Catch, Logger } from '@nestjs/common';
import { BaseExceptionFilter } from '@nestjs/core';
import { GqlContextType } from '@nestjs/graphql';
import { ThrottlerException } from '@nestjs/throttler';
import { BaseWsExceptionFilter } from '@nestjs/websockets';
import { Response } from 'express';
import { of } from 'rxjs';
import { Socket } from 'socket.io';
import {
InternalServerError,
@@ -44,6 +46,20 @@ export class GlobalExceptionFilter extends BaseExceptionFilter {
}
}
export class GlobalWsExceptionFilter extends BaseWsExceptionFilter {
// @ts-expect-error satisfies the override
override handleError(client: Socket, exception: any): void {
const error = mapAnyError(exception);
error.log('Websocket');
metrics.socketio
.counter('unhandled_error')
.add(1, { status: error.status });
client.emit('error', {
error: toWebsocketError(error),
});
}
}
/**
* Only exists for websocket error body backward compatibility
*

View File

@@ -0,0 +1,17 @@
import type { Prisma } from '@prisma/client';
import { defineStartupConfig, ModuleConfig } from '../config';
interface PrismaStartupConfiguration extends Prisma.PrismaClientOptions {
datasourceUrl: string;
}
declare module '../config' {
interface AppConfig {
database: ModuleConfig<PrismaStartupConfiguration>;
}
}
defineStartupConfig('database', {
datasourceUrl: '',
});

View File

@@ -1,18 +1,22 @@
import './config';
import { Global, Module, Provider } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
import { Config } from '../config';
import { PrismaService } from './service';
// only `PrismaClient` can be injected
const clientProvider: Provider = {
provide: PrismaClient,
useFactory: () => {
useFactory: (config: Config) => {
if (PrismaService.INSTANCE) {
return PrismaService.INSTANCE;
}
return new PrismaService();
return new PrismaService(config.database);
},
inject: [Config],
};
@Global()

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