Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HMR not working with multiple entries #2792

Closed
1 of 2 tasks
slightlyfaulty opened this issue Oct 22, 2020 · 58 comments
Closed
1 of 2 tasks

HMR not working with multiple entries #2792

slightlyfaulty opened this issue Oct 22, 2020 · 58 comments

Comments

@slightlyfaulty
Copy link

  • Operating System: Linux
  • Node Version: 14.14.0
  • NPM Version: 6.14.7
  • webpack Version: 5.2.0
  • webpack-dev-server Version: 3.11.0
  • Browser: Google Chrome
  • This is a bug
  • This is a modification request

Code

https://github.com/slightlyfaulty/webpack-hmr-multi-entry-repro

// webpack.config.js
...
entry: {
  first: ['./src/first.js', './src/first.css'],
  second: ['./src/second.js', './src/second.css'],
},
...

Expected Behavior

After starting the dev server, hot module replacement should work for all JS and CSS files from all webpack entries.

Actual Behavior

Hot module replacement doesn't work for all entries. Only files from the second entry are hot reloaded when changed. Files from the first entry do not get hot reloaded when changed.

For Bugs; How can we reproduce the behavior?

  1. Clone repro then yarn && yarn start
  2. Open http://localhost:8080/
  3. Change src/first.js and src/first.css - notice they are not hot reloaded
  4. Change src/second.js and src/second.css - notice they are hot reloaded
@alexander-akait alexander-akait transferred this issue from webpack/webpack-dev-server Oct 22, 2020
@slightlyfaulty
Copy link
Author

Upon further testing, it seems that HMR only works for the last loaded JS bundle on the page. HMR will not work for any JS bundle loaded before it. The order of the entries in webpack.config.js does not matter.

@alexander-akait alexander-akait transferred this issue from webpack/webpack-cli Oct 26, 2020
@MohsenElgendy
Copy link

@slightlyfaulty setting optimization.runtimeChunk: "single" fixed the problem for me.

@slightlyfaulty
Copy link
Author

Thanks for the tip @MohsenElgendy, but it's still not really ideal as you need to then load the runtime chunk alongside your other bundles. Webpack 4 handled embedding the runtime in multiple bundles at the same time no problem.

@waldronmatt
Copy link

I can also confirm optimization.runtimeChunk: "single" fixed the problem for me handling multiple bundles.

webpack.dev.config

module.exports = () => {
  const config = {
    mode: 'development',
    // Map your compiled code back to your original source code.
    devtool: 'inline-source-map',
    target: 'web',
    output: {
      filename: '[name].js',
      // specify chunck path for code splitted files
      chunkFilename: '[name].js',
    },
    devServer: {
      historyApiFallback: true,
      contentBase: path.resolve(__dirname, '../dist'),
      publicPath: '/',
      open: true,
      compress: true,
      hot: true,
      port: 8080,
    },
    plugins: [
      new ESLintPlugin({
        extensions: ['js', 'ts'],
      }),
      new StylelintPlugin(),
      new webpack.HotModuleReplacementPlugin(),
    ],
    optimization: {
      // don't minimize so we can debug
      minimize: false,
      /*
        The value 'single' instead creates a runtime file to be shared for all generated chunks.
        https://github.com/webpack/webpack-dev-server/issues/2792
      */
      runtimeChunk: "single",
    },
  };
  return merge(common('development'), config);
};

webpack.common.js

module.exports = (env) => {
  const isProduction = env === 'production';

  ...

  return {
    target: 'web',
    entry: {
      main: [
        './src/js/index.js',
        './src/ts/index.ts',
      ],
      // webpack code splitting example file
      examples: [
        './src/js/examples.js',
      ],
    },
    output: {
      path: path.join(__dirname, '../dist'),
      publicPath: '/',
    },

  ...

};

@uxsoft
Copy link

uxsoft commented Nov 20, 2020

Same issue here, setting optimization.runtimeChunk: "single" fixed the problem for me as well, but I would consider this a workaround for a bug that should be fixed anyway. This certainly worked before.

@alexander-akait
Copy link
Member

I think it fixed in v4 branch, you can try it

@slightlyfaulty
Copy link
Author

@evilebottnawi Can't test properly because it seems writeToDisk has been removed in v4 for some reason?

Initial compilation also takes much longer than the regular build time now. Over 6 seconds compared to <2 seconds for regular build. On v3 it only takes about 2.2 seconds for the initial dev server compilation.

@alexander-akait
Copy link
Member

It was not removed, it was moved to dev: { writeToDisk: true }

@alexander-akait
Copy link
Member

alexander-akait commented Nov 25, 2020

There is no changes between v3 and v4 in perf

@slightlyfaulty
Copy link
Author

It was not removed, it was moved to dev: { writeToDisk: true }

Aha.. that's working now, but can confirm this bug is still present. Only the last loaded bundle in the document hot reloads properly. Bundles from other entries do not hot reload at all.

Also had to explicitly disable liveReload, otherwise it live reloaded the page after every change, even though hot is enabled.

There is no changes between v3 and v4 in perf

Evidence would suggest otherwise sir. Will open an issue after release of v4 if it persists.

@alexander-akait
Copy link
Member

@slightlyfaulty Please create reproducible test repo, it should work

@slightlyfaulty
Copy link
Author

@alexander-akait Sure. https://github.com/slightlyfaulty/webpack-hmr-multi-entry-repro

  1. yarn && yarn start - Open http://localhost:8080/
  2. Change src/first.js and src/first.css - notice they are not hot reloaded, and there are some errors in the browser console
  3. Change src/third.js and src/third.css - notice they are hot reloaded correctly, because they're loaded last in the page

@onetrev
Copy link

onetrev commented Dec 6, 2020

Is there a reason to avoid multiple entry points / bundles, because I'm surprised that not a ton of people are also reporting this bug? I know I need to have them. One example is I need certain things loaded in my site header and the rest at the end of the body.

One thing to note / add to the error report from @slightlyfaulty, I noticed all the console messages come in as warnings not errors, even though indeed HMR spews out a tons of warning messages like so:

[HMR] Update failed: Loading hot update chunk site_header failed.
(missing: https://localhost:3018/dist/site_header.3fb54bab211f3a92bb04.hot-update.js)
loadUpdateChunk/<@https://localhost:3018/dist/site_header.bundle.js:10391:26

@andywang646691

This comment has been minimized.

1 similar comment
@wangmeijian

This comment has been minimized.

@Connum
Copy link

Connum commented Jan 4, 2021

Any news on this? I don't want to have to downgrade several packages to get it to work, and this is really slowing down development...

@pixelhuh
Copy link

Exactly the same problem and same warnings as @onetrev on webpack 5.9.18
On 4.46 HMR for multiple entries works fine.

@koen-dev
Copy link

I also encountered this issue with multiple entries. However setting optimization.runtimeChunk: "single" didn't work. I'm using multiple HtmlWebpackPlugins to serve the entries as solo applications. What is the best step for now? Move back to [email protected]?

@ghost
Copy link

ghost commented Mar 3, 2021

Also encountered this issue. Setting optimization.runtimeChunk: "single" is not working for me. I need to output my code as library. Using [email protected] and [email protected]. Current working solution is to set hot: false and do a full page reload for every change.

@alexander-akait
Copy link
Member

Please test https://github.com/webpack/webpack-dev-server/releases/tag/v4.0.0-beta.1, we will speed up releases, to be stable at the end of month

@slightlyfaulty
Copy link
Author

@alexander-akait Nope no change to the issue.

#2792 (comment)

@alexander-akait
Copy link
Member

@slightlyfaulty Found solution:

<script type="text/javascript" src="dist/runtime.js"></script>
<script type="text/javascript" src="dist/first.js"></script>
<script type="text/javascript" src="dist/second.js"></script>
<script type="text/javascript" src="dist/third.js"></script>
optimization: {
  runtimeChunk: 'single'
},

@slightlyfaulty
Copy link
Author

slightlyfaulty commented Mar 25, 2021

@alexander-akait That solution has already been posted before.

It's more of a workaround than a solution though don't you think? Since it worked fine in Webpack 4 without needing to generate and load a runtime bundle.

@alexander-akait
Copy link
Member

@slightlyfaulty Here are multi entries on one page... so we have multiple __webpack_require__ with HMR, each __webpack_require__ known only about own modules and HMR status, when we get update we will run multiple of them, so you can see [HMR] Update failed: ChunkLoadError: Loading hot update chunk first failed. and [HMR] Update failed: ChunkLoadError: Loading hot update chunk second failed.

@alexander-akait
Copy link
Member

Give me time to look at this deeply, but I don't think bug in webpack-dev-server, I think it is bug with webpack here

@slightlyfaulty
Copy link
Author

Give me time to look at this deeply, but I don't think bug in webpack-dev-server, I think it is bug with webpack here

@alexander-akait No problem. All I know is it worked fine with the Webpack 4 stack, so it's a regression one way or another.

@alexander-akait
Copy link
Member

alexander-akait commented Mar 25, 2021

@slightlyfaulty Maybe it is limitation, I want to get answer from @sokra, in this case we should share ./node_modules/dev-server/client/default/index.js and ./node_modules/webpack/hot/dev-server.js and runtime code between entry points, i.e. create shared/runtime chunk(s), but without optimization.runtimeChunk, webpack doesn't do it, If we initially knew how you would use them (for example from index.html) we will apply runtimeChunk optimization by default.

https://webpack.js.org/configuration/optimization/#optimizationruntimechunk

We have warning about it:

Warning
Imported modules are initialized for each runtime chunk separately, so if you include multiple entry points on a page, beware of this behavior. You will probably want to set it to single or use another configuration that allows you to only have one runtime instance.

@stevematney
Copy link

I was able to get multiple entries working with a very hacky solution involving hijacking self["webpackHotUpdate"] with a window Proxy, utilizing a Service Worker, and which relies on another plugin that wraps the built entry bundle in a self-calling function for isolation.

It was... a lot, but eventually I got everything working smoothly. It doesn't always guarantee the updates get to the correct place if two modules are updated at the same time that have the same ID across bundles, but contain different code. This seems like a very rare case, and for our purposes, this solution is working well enough (though it's quite complex).

@ayroblu
Copy link

ayroblu commented Feb 6, 2022

Hi, just wanted to follow up with whether there's an alternative solution to the runtimeChunk solution? I found that using that with monaco-editor causes it to fail to load results.
In the meantime I can set hot: false. And the main difference is that I no longer have css hot reloading.

Edit: actually I found that if I use monaco-editor-weback-plugin I don't need to do anything special, amazing

@chenwenqin
Copy link

image

[email protected]

only in production mode, but not in development mode, whether it is enabled or not optimization option。

My project only one entry.

@alexander-akait
Copy link
Member

@chenwenqin Can you provide reproducible example?

@khelkun
Copy link

khelkun commented Mar 4, 2022

@alexander-akait

You can't use multiple entries on the same page, please use #2792 (comment)

Indeed it works but if I well understand, you need to include the runtimeChunk aka runtime.js before the others entry chunks.

Considering my app is actually a library used by others applications, this solution forces all dependent apps to include this new runtime.js before my library entries.

Would there be a way to embed this runtimeChunk in the chunk of the first entry of my library?

@slightlyfaulty
Copy link
Author

@khelkun I recently discovered that if you use the dependOn option for an entry, then it will use the runtime that's embedded in the entry it depends on.

In this case you don't need to use runtimeChunk: 'single' anymore, as long as the dependOn entry is always loaded first.

@shalkauskas
Copy link

@slightlyfaulty thank you, worked great with webpack 5!

@bradyclifford
Copy link

@slightlyfaulty you wouldn't happen to have an example you could share with the dependOn working for you?

@slightlyfaulty
Copy link
Author

@bradyclifford I've pretty much just got my entry points listed like the examples in the docs. Nothing special.

https://webpack.js.org/concepts/entry-points/#entrydescription-object

@thebat93
Copy link

I'm having a problem with HMR when Webpack has multiple entries and one of them is a service worker.

If I use runtimeChunk: 'single' hot reloading works as intended. But none of service worker's hooks runs.

I found this solution. With this service worker's hooks run, but this breaks hot reloading. When I try to update the app code I get warnings and nothing gets updated:
[HMR] Update failed: ReferenceError: document is not defined
[HMR] Update failed: ChunkLoadError: Loading hot update chunk runtime-app failed.

Has anyone faced this problem? I'm using Webpack 5 with the following options:

entry: {
  app: ['/index.tsx'],
  'service-worker': '/service-worker.js',
},
output: {
  filename: pathData => {
    if (pathData?.chunk?.name === 'service-worker') {
      return '[name].js';
    }
    return '[name].[contenthash].bundle.js';
  },
},
optimization: {
    runtimeChunk: {
      name: (entrypoint) => {
        if (entrypoint.name.startsWith("service-worker")) {
          return null;
        }
        return `runtime-${entrypoint.name}`;
      },
    },
    splitChunks: {
      chunks(chunk) {
        return chunk.name !== "service-worker";
      },
      cacheGroups: {
        default: false,
        vendors: false,
        framework: {},
        lib: {},
        commons: {},
        shared: {},
        styles: {}
      },
      maxInitialRequests: 25,
      minSize: 20000
    },
},

@thebat93
Copy link

Here is a minimal test repo with the issue: https://github.com/thebat93/sw-webpack-hmr
I mentioned solutions that I tried in webpack config file.

@develobora
Copy link

Not working for me also with multiple entries. "webpack": "^5.53.0", "webpack-dev-server": "^4.7.4".

@alexcloudstar
Copy link

alexcloudstar commented Jul 11, 2023

@slightlyfaulty Found solution:

<script type="text/javascript" src="dist/runtime.js"></script>
<script type="text/javascript" src="dist/first.js"></script>
<script type="text/javascript" src="dist/second.js"></script>
<script type="text/javascript" src="dist/third.js"></script>
optimization: {
  runtimeChunk: 'single'
},

Thank you! is working perfectly fine.

Here is a part of my package.json (i'm doing micro-frontends btw I don't know if is matter or not because I do have the same packages installed)

"scripts": {
    "start": "webpack serve --config config/webpack.dev.js",
    "build": "webpack --config config/webpack.prod.js"
  },

devDeps:

"babel-loader": "^9.1.3",
"webpack": "^5.88.1",
"webpack-cli": "^5.1.4",
"webpack-dev-server": "^4.15.1",
"webpack-merge": "^5.9.0"
"babel-loader": "^9.1.3",
"html-webpack-plugin": "^5.5.3",
"typescript": "^5.1.6",
"@babel/core": "^7.22.8",
"@babel/plugin-transform-runtime": "^7.22.7",
"@babel/preset-env": "^7.22.7",
"@babel/preset-react": "^7.22.5",

@slightlyfaulty
Copy link
Author

Closing this. In Webpack 5 optimization.runtimeChunk: "single" and/or dependOn/runtime should be used appropriately to control where the runtime is embedded. Otherwise each entry contains a runtime resulting in this issue.

Brooooooklyn pushed a commit to toeverything/AFFiNE that referenced this issue Nov 21, 2023
I suspect HMR does not working properly on dev because we have multiple entries.
One relative issue: webpack/webpack-dev-server#2792

I think we do not need multiple entries for polyfills & plugins after all. They could be in the same chunk, and could be later optimized through splitChunks option.

`ses.ts` is changed to `ses-lockdown.ts` because `ses.ts` does not pass circular dependency check by madge. I haven't looked through the real root cause though. See pahen/madge#355
Brooooooklyn pushed a commit to toeverything/AFFiNE that referenced this issue Nov 21, 2023
I suspect HMR does not working properly on dev because we have multiple entries.
One relative issue: webpack/webpack-dev-server#2792

I think we do not need multiple entries for polyfills & plugins after all. They could be in the same chunk, and could be later optimized through splitChunks option.

`ses.ts` is changed to `ses-lockdown.ts` because `ses.ts` does not pass circular dependency check by madge. I haven't looked through the real root cause though. See pahen/madge#355
pengx17 added a commit to toeverything/AFFiNE that referenced this issue Nov 21, 2023
I suspect HMR does not working properly on dev because we have multiple entries.
One relative issue: webpack/webpack-dev-server#2792

I think we do not need multiple entries for polyfills & plugins after all. They could be in the same chunk, and could be later optimized through splitChunks option.

`ses.ts` is changed to `ses-lockdown.ts` because `ses.ts` does not pass circular dependency check by madge. I haven't looked through the real root cause though. See pahen/madge#355
Brooooooklyn pushed a commit to toeverything/AFFiNE that referenced this issue Nov 21, 2023
I suspect HMR does not working properly on dev because we have multiple entries.
One relative issue: webpack/webpack-dev-server#2792

I think we do not need multiple entries for polyfills & plugins after all. They could be in the same chunk, and could be later optimized through splitChunks option.

`ses.ts` is changed to `ses-lockdown.ts` because `ses.ts` does not pass circular dependency check by madge. I haven't looked through the real root cause though. See pahen/madge#355
adeelahmad added a commit to adeelahmad/AFFiNE that referenced this issue Nov 30, 2023
* fix: prettier issue

* feat(core): confirm before cancel in billing page (#4749)

* feat: bump up blob size limit temporarily (#4747)

* ci: bump cloudflare/wrangler-action from 3.3.1 to 3.3.2 (#4717)

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: upgrade to [email protected]

* fix: error handle in payment resolver (#4754)

* fix: remove awareness state before window unload (#4752)

* feat(server): add data migration system

* chore: bump the all-cargo-dependencies group with 1 update

Bumps the all-cargo-dependencies group with 1 update: [serde](https://github.com/serde-rs/serde).

- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.189...v1.0.190)

---
updated-dependencies:
- dependency-name: serde
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-cargo-dependencies
...

Signed-off-by: dependabot[bot] <[email protected]>

* feat: add idempotent request support for payment apis (#4753)

* fix(server): wrong prod data migration scripts filter

* feat(collections): completion i18n

* feat(i18n): add new key for billing

* fix(core): description field in html template

* ci: reduce deployment events on pull requests

* chore(server): add stripe env

* v0.10.0-canary.4

* feat(core): support fuzzy highlighting (#4765)

* fix(core): selectAtom crash on isEqual (#4780)

* v0.10.0-canary.5

* fix: idempotencyKey used (#4774)

* v0.10.0-canary.6

* fix(core): adjust setting-modal layout to center tip (#4776)

* fix(core): possible crash issues (#4783)

* feat(core): payment billing loading (#4763)

* fix(electron): update app icons (#4789)

Co-authored-by: Joooye_34 <[email protected]>

* feat(core): billing history pagination (#4787)

* fix: request prevented when re-downgrade subscribe (#4786)

* feat(core): support subscribe plan after login (#4788)

* fix(component): adjust autofill style (#4773)

* v0.10.0-canary.8

* ci: dynamic setup server deploy environment by release tag (#4790)

* ci: fix wrangler deploy (#4803)

* fix(core): text color of search input, style for the multi-select tag, date-picker autofocus issue (#4799)

* fix(core): billing cancel confirm dialog (#4795)

* v0.10.0-canary.9

* docs: change yarn version in BUILDING.md (#4811)

* fix(core): fix block suite edit mode switch shortcut (#4813)

* fix(core): currentUser undefined when all workspaces deleted (#4812)

* fix(core): adjust payment related text (#4797)

* feat(server): sync data with ack (#4791)

* chore: bump blocksuite (#4801)

* fix(workspace): remove awareness states cache

* fix(server): page variant may exist

* feat(core): remove `mode` and `pages` field from Collection (#4817)

* feat(core): add jump to block for cmdk (#4802)

* fix(server): do not return subscription if not active (#4820)

* refactor(component): virtual rendering page list (#4775)

Co-authored-by: Joooye_34 <[email protected]>

* fix(component): flex setting-modal header & footer (#4818)

* v0.10.0-canary.10

* fix(server): only treat active subscription as existing (#4826)

* fix(core): remove responsive editor width (#4821)

* chore(i18n): add new key for empty trash page (#4829)

* fix(core): implement pricing plans scroll area with radix (#4824)

* perf(core): load all pages after 10s (#4834)

* fix(core): payment UI fix (#4839)

* feat(core): payment plans error boundary (#4744)

* chore: bump the all-cargo-dependencies group with 1 update (#4841)

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* refactor(server): separate page visibility from workspace permission (#4836)

* chore(i18n): adjust text (#4832)

* feat(core): temporary expansion files are limited to 100M (#4833)

* feat(core): adjust filter logic (#4831)

* v0.10.0-canary.11

* fix(core): adapt blob in sqlite for svg type (#4845)

* fix(core): adjust discount display (#4847)

* fix(server): failed to share again if disable once (#4844)

* fix(server): avoid server overloading by too many updates (#4846)

* fix(electron): add search to proxied url (#4852)

* v0.10.0-canary.12

* feat(core): implement parts of workspace upgrade design (#4850)

* v0.10.0-canary.13

* docs: update behind-the-code.md (#4849)

* docs: update CONTRIBUTING.md (#4848)

* fix(server): avoid saving invalid data (#4859)

* chore(server): decrease amount of batch updates merging (#4860)

* fix(server): wrong data migration (#4855)

* fix(core): improve the UX for edit collection (#4827)

Co-authored-by: Peng Xiao <[email protected]>

* fix(core): duplicate registration in edgeless (#4864)

* chore: fix code style issues (#4857)

* chore: bump blocksuite version (#4862)

* v0.10.0-canary.14

* ci: add oxlint (#4867)

* chore: update changelog url (#4868)

* fix(core): collections data migration without blocking data reads (#4866)

* ci: use resolutions to resolve building error in mac-os (#4878)

* chore: update delete icon (#4871)

* chore(component): bump bs (#4880)

* fix(component): dragged component disappear when dragging (#4870)

* fix(core): visit /signin pay when already logged and subscribed (#4882)

Co-authored-by: Peng Xiao <[email protected]>

* fix(server): token set with id instead of email (#4883)

* fix(hooks): missing page preview and references (#4863)

* feat(core): unify all new created page IDs to nanoid (#4884)

* perf(server): avoid auto select blob data when upsert (#4891)

* feat(core): support signup set password before goto stripe payment url (#4892)

* ci: disable postinstall on macOS build (#4885)

* fix(core): select all in page list group header does not need to enable selection (#4869)

* chore: disable outline, copilot and hello world plugin (#4894)

* v0.10.0-canary.15

* ci: adjust the beta cluster configuration

* chore: add performance logger

* fix(server): earlyAccessPreview env override (#4898)

* fix(core): disable sync doc/blob on start (#4897)

* v0.10.0-canary.16

* chore(server): bump octobase versions (#4893)

Co-authored-by: DarkSky <[email protected]>

* fix(hooks): push success toast after save (#4830)

* feat(core): auto select block when jump to block (#4858)

Co-authored-by: Peng Xiao <[email protected]>

* feat(core): add global loading state (#4840)

* v0.10.0

* chore: bump blocksuite (#4901)

* fix(core): svg blob syncing issue (#4886)

* chore: bump theme (#4904)

Co-authored-by: 李华桥 <[email protected]>

* fix(core): change server url of stable to insider (#4902)

* ci(core): eslint errors for core (#4662)

* fix(core): change server url of stable to insider

* fix(electron): dev reload (#4911)

* fix(server): increase server acceptable websocket payload size

* chore: cleanup deployment

* fix: get page preview based on block order (#4888)

Co-authored-by: Peng Xiao <[email protected]>

* chore: bump the all-cargo-dependencies group with 5 updates (#4918)

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(storybook): page tags display (#4924)

* fix(server): wrap updates applying in a transaction (#4922)

* fix(infra): compatibility fix for space prefix (#4912)

It seems there are some cases that [this upstream PR](https://github.com/toeverything/blocksuite/pull/4747) will cause data loss.

Because of some historical reasons, the page id could be different with its doc id.
It might be caused by subdoc migration in the following (not 100% sure if all white screen issue is caused by it) https://github.com/toeverything/AFFiNE/blob/0714c12703ff8840acc180633e5489c755ddfba3/packages/common/infra/src/blocksuite/index.ts#L538-L540

In version 0.10, page id in spaces no longer has prefix "space:"
The data flow for fetching a doc's updates is:
- page id in `meta.pages` -> find `${page-id}` in `doc.spaces` -> `doc` -> `doc.guid`
if `doc` is not found in `doc.spaces`, a new doc will be created and its `doc.guid` is the same with its pageId
- because of guid logic change, the doc that previously prefixed with `space:` will not be found in `doc.spaces`
- when fetching the rows of this doc using the doc id === page id,
  it will return EMPTY since there is no updates associated with the page id

The provided fix in the PR will patch the `spaces` field of the root doc so that after 0.10 the page doc can still be found in the `spaces` map. It shall apply to both of the idb & sqlite datasources.

Special thanks to @lawvs 's db file for investigation!

* test(e2e): add subdoc migration test (#4921)

test(e2e): add subdoc migration test

fix: remove .only

* fix(core): change server url of stable to insider (#4902) (#4926)

* ci: disable postinstall in nightly desktop build (#4930)

Should be part of https://github.com/toeverything/AFFiNE/pull/4885

* fix: change password token check (#4934) (#4932)

* perf(component): use png instead of svg for rendering noise svg (#4935)

* fix(infra): workspace migration without blockVersions (#4936)

* ci: only disable postinstall on macOS in nightly desktop build (#4938)

* chore: change default branch to canary (#4948)

* feat(core): support share edgeless mode (#4856)

Close #3287

<!--
copilot:all
-->
### <samp>🤖 Generated by Copilot at d3fdf86</samp>

### Summary
📄🚀🔗

<!--
1.  📄 - This emoji represents the page and edgeless modes of sharing a page, as well as the GraphQL operations and types related to public pages.
2.  🚀 - This emoji represents the functionality of publishing and revoking public pages, as well as the confirmation modal and the notifications for the user.
3.  🔗 - This emoji represents the sharing URL and the query parameter for the share mode, as well as the hooks and functions that generate and use the URL.
-->
This pull request adds a feature to the frontend component of AFFiNE that allows the user to share a page in either `page` or `edgeless` mode, which affects the appearance and functionality of the page. It also adds the necessary GraphQL operations, types, and schema to support this feature in the backend, and updates the tests and the storybook stories accordingly.

*  Modify the `useIsSharedPage` hook to accept an optional `shareMode` argument and use the `getWorkspacePublicPagesQuery`, `publishPageMutation`, and `revokePublicPageMutation` from `@affine/graphql`

* fix(infra): page id compat fix for page ids in workspace.meta (#4950)

since we strip `page:` in keys of workspacedoc.spaces, we should also strip the prefix in meta.pages as well.

* ci: prevent error if rust build is cached by nx (#4951)

If Rust build was cached by nx, only the output file will be presented. The chmod command will be failed in this case like: https://github.com/toeverything/AFFiNE/actions/runs/6874496337/job/18697360212

* chore: bump blocksuite (#4958)

* fix(server): all viewers can share public link (#4968)

* refactor: new provider (#4900)

* feat(i18n): update translation (#4923)

* chore: add devcontainer config (#4974)

Co-authored-by: Reese <[email protected]>

* fix(component): stack notification cards expand animation (#4962)

* style(core): update pro plan card style (#4960)

* fix(core): adjust cmdk list scroll padding block (#4972)

* feat(core): keep the latest toast showing when multiple call (#4961)

* fix(core): escape cmdk value (#4947)

Co-authored-by: LongYinan <[email protected]>

* refactor(core): remove all MUI related components and utilities (#4941)

* fix(core): handle the getSession network error properly (#4909)

If network offline or API error happens, the `session` returned by the `useSession` hook will be null, so we can't assume it is not null.

There should be following changes:
1. create a page in ErrorBoundary to let the user refetch the session.
2. The `SessionProvider` stop to pull the new session once the session is null, we need to figure out a way to pull the new session when the network is back or the user click the refetch button.

* build: remove useless source-map-loader to speedup webpack (#4910)

* fix(core): blob key issue for cloud blob provider (#4907)

There are some resources that only exists on `/static`. Current prefix check is incorrect since it could start with `/static`

* chore: bump the all-cargo-dependencies group with 1 update (#4997)

Bumps the all-cargo-dependencies group with 1 update: [uuid](https://github.com/uuid-rs/uuid).

<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/uuid-rs/uuid/releases">uuid's releases</a>.</em></p>
<blockquote>
<h2>1.6.0</h2>
<h2>What's Changed</h2>
<ul>
<li>doc: fix links in v6 module by <a href="https://github.com/metalalive"><code>@​metalalive</code></a> in <a href="https://github.com/uuid-rs/uuid/pull/714">uuid-rs/uuid#714</a></li>
<li>Stabilize UUIDv6-v8 support by <a href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a href="https://github.com/uuid-rs/uuid/pull/718">uuid-rs/uuid#718</a></li>
<li>Prepare for 1.6.0 release by <a href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a href="https://github.com/uuid-rs/uuid/pull/719">uuid-rs/uuid#719</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/metalalive"><code>@​metalalive</code></a> made their first contribution in <a href="https://github.com/uuid-rs/uuid/pull/714">uuid-rs/uuid#714</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/uuid-rs/uuid/compare/1.5.0...1.6.0">https://github.com/uuid-rs/uuid/compare/1.5.0...1.6.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/uuid-rs/uuid/commit/4609e617941e320211f582f0d4749f37b30a262f"><code>4609e61</code></a> Merge pull request <a href="https://github.com/uuid-rs/uuid/issues/719">#719</a> from uuid-rs/cargo/1.6.0</li>
<li><a href="https://github.com/uuid-rs/uuid/commit/24330666ec7d4f2199818d6fc5635f5ab57dcc73"><code>2433066</code></a> prepare for 1.6.0 release</li>
<li><a href="https://github.com/uuid-rs/uuid/commit/9787ea1d0b3175a70d4f09cce3da12e28689c6cc"><code>9787ea1</code></a> Merge pull request <a href="https://github.com/uuid-rs/uuid/issues/718">#718</a> from uuid-rs/feat/stabilize-v6-plus</li>
<li><a href="https://github.com/uuid-rs/uuid/commit/90b0bc0a1c46b7d6970e1d3f89636a47eefeda24"><code>90b0bc0</code></a> Merge pull request <a href="https://github.com/uuid-rs/uuid/issues/714">#714</a> from metalalive/doc/fix-v6-links</li>
<li><a href="https://github.com/uuid-rs/uuid/commit/1eebe7d29938d5f1bfb970e0d46046becf7c91f2"><code>1eebe7d</code></a> bump msrv to 1.60.0</li>
<li><a href="https://github.com/uuid-rs/uuid/commit/6bade3ae597ae18b53b7e480d9a0d510799cab0f"><code>6bade3a</code></a> just test lib with miri</li>
<li><a href="https://github.com/uuid-rs/uuid/commit/3df0aaa80dabbf0ded541557d69b3d4b9e652425"><code>3df0aaa</code></a> stabilize UUIDv6-v8 support</li>
<li><a href="https://github.com/uuid-rs/uuid/commit/003dc57994d03dfbd275eaafa87e2624237944bd"><code>003dc57</code></a> doc: fix links to timestamp module</li>
<li>See full diff in <a href="https://github.com/uuid-rs/uuid/compare/1.5.0...1.6.0">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=uuid&package-manager=cargo&previous-version=1.5.0&new-version=1.6.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions


</details>

* fix(core): rerender (#4988)

* fix(core): make e2e more stable (#4987)

* feat(workspace): more status for SyncPeer (#4983)

* feat(workspace): more status for SyncEngine (#4984)

* fix(core): merge updates before push to storage (#4986)

* c0.11.0-canary.0

* v0.10.3-canary.0

* fix(core): cmdk crash when entering double quotes (#5008)

Due to a bug in the upstream repository, a temporary fix was implemented until the issue in the upstream repository is resolved.
https://github.com/pacocoursey/cmdk/issues/189

* chore: faster lint-staged (#5013)

Co-authored-by: EYHN <[email protected]>

* fix: invisible button should not be interactive (#5017)

* fix(core): hmr issue on dev (#5006)

I suspect HMR does not working properly on dev because we have multiple entries.
One relative issue: https://github.com/webpack/webpack-dev-server/issues/2792/

I think we do not need multiple entries for polyfills & plugins after all. They could be in the same chunk, and could be later optimized through splitChunks option.

`ses.ts` is changed to `ses-lockdown.ts` because `ses.ts` does not pass circular dependency check by madge. I haven't looked through the real root cause though. See https://github.com/pahen/madge/issues/355

* build(electron): asar (#4965)

Due to restrictions on how Electron package works, the `node_modules` should not be hoisted and not to use s/h-links at all. This is why we need to have two separate installs for electron and non-electron packages in the build.

Tested via the following script

```bash
#!/bin/bash

echo "step 1: clean up"
find . -name "node_modules" -prune -exec rm -rf '{}' +
# git clean -dfX
build_type=canary

echo "step 2: install web dependencies"
# firstly, build web static
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 SENTRYCLI_SKIP_DOWNLOAD=1 PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 HUSKY=1 yarn

echo "step 3: generate assets"
BUILD_TYPE="$build_type" yarn workspace @affine/electron generate-assets

# cleanup node_modules
find . -name "node_modules" -prune -exec rm -rf '{}' +

echo "step 4: install electron dependencies"
# install electron deps
yarn config set nmHoistingLimits workspaces
yarn config set enableScripts false
yarn config set nmMode classic
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 HUSKY=0 yarn workspaces focus @affine/electron @affine/monorepo

echo "step 5: build native"
# build native
yarn workspace @affine/native build
yarn workspace @affine/storage build

echo "step 6: build electron"
# build electron
yarn workspace @affine/electron build

echo "step 7: package electron"
# package
SKIP_GENERATE_ASSETS=1 BUILD_TYPE="$build_type" HOIST_NODE_MODULES=1 yarn workspace @affine/electron package
```

* fix(core): add error boundary for workspace layout (#5014)

https://github.com/toeverything/AFFiNE/assets/3468483/d478bf4f-2be3-4d7d-8d94-aa95c1f74c8e

* feat(server): add doc history support (#4970)

* chore(server): remove deprecated redis manager (#4971)

* feat(server): add cache module (#4973)

* feat(server): reduce duplidated merge with cache (#4975)

* feat(server): event on snapshot upserted (#5002)

* feat(server): impl doc history (#5004)

* chore: bump blocksuite (#5026)

* chore: bump blocksuite (#5030)

* fix(core): fix page loading shimmer (#5027)

* fix(workspace): fast check svg buffer (#5032)

* fix(core): should not reset page preset on rerender (#5034)

Should not reset editor preset when re-render.

See https://github.com/toeverything/blocksuite/blob/ce7ac88fc750fb465a6b4227b8f93eafe8e894fc/packages/editor/src/components/editor-container.ts#L197. If these props changes, it will trigger some unexpected side effects.

* fix(server): use iso date string as history query input (#5035)

* refactor(core): use manual upgrade to replace auto migration when web setup (#5022)

1. Split logic in `packages/common/infra/src/blocksuite/index.ts` to multiple single files
2. Move migration logic from setup to upgrade module, to prevent auto migration problems and loading problem

* feat: upgrade dependencies and lockfile (#5016)

- Close https://github.com/toeverything/AFFiNE/security/dependabot/47

* feat(core): add download app button to web (#5023)

* chore: v0.10.3-canary.1

* fix(electron): clone db file when enable cloud for desktop (#5028)

At the moment on desktop the user's local blob data will be lost after enable cloud.
This is because blob data is only synced from old idb to new idb, but not sync into sqlitedb.

This pr will simply clone the db file for desktop app. It should also speed up the time when enabling cloud for a large local workspace.

* fix(server): check state changes before saving history record (#5038)

* refactor(workspace): blob sync (#5037)

This pr implements a blob engine.
It exposes a single `BlobStorage` to the `blocksuite`, and in it we sync blobs between multiple storages.

The implement still have few issues, but we can merge this pr first and fix them in future.

* BlobEngine currently **do nothing when delete**, because synchronization logic conflicts with deletion logic.
* BlobEngine sync between storages by querying the blob list at regular intervals. This will **cause many queries**, we can avoid this in the future by subscribing to remote changes.

* v0.10.3-canary.2

* chore(core): update react-resizable-panels (#5041)

`react-resizable-panels` will throw some errors sometime when showing history modal dialog.
I haven't checked the root cause, but upgrade it to the latest will get rid of the error.

* fix(electron): appimage forge builder (#5043)

* chore: bump icons version (#5042)

* ci: fix storybook publish problem (#5047)

* chore: adjust the request memory size and replica count (#5046)

* fix(server): never throw in websocket gateways (#5050)

* refactor(server): standarderlize metrics and trace with OTEL (#5054)

you can now export span to Zipkin and metrics to Prometheus when developing locally
follow the docs of OTEL: https://opentelemetry.io/docs/instrumentation/js/exporters/

<img width="2357" alt="image" src="https://github.com/toeverything/AFFiNE/assets/8281226/ec615e1f-3e91-43f7-9111-d7d2629e9679">

* fix(server): add guid compatibility of :space:page variant (#5062)

* feat: optional payment for server (#5055)

* feat: optional payment for frontend (#5056)

* feat(core): simple recovery history ui poc (#5033)

Simple recovery history UI poc.
What's missing
- [x] e2e

All biz logic should be done, excluding complete ui details.
- [ ] offline prompt
- [ ] history timeline
- [ ] page ui

https://github.com/toeverything/AFFiNE/assets/584378/fc3f6a48-ff7f-4265-b9f5-9c0087cb2635

* chore: bump blocksuite (#5051)

https://github.com/toeverything/blocksuite/pull/5337

* test(core): simple recovery ui e2e (#5059)

* feat(server): add soft deleted flag to optimized blob table (#5058)

requires https://github.com/toeverything/OctoBase/pull/561

* chore: bump the all-cargo-dependencies group with 5 updates (#5068)

[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️

Rebasing might not happen immediately, so don't worry if this takes some time.

Note: if you make any changes to this PR yourself, they will take precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps the all-cargo-dependencies group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [napi](https://github.com/napi-rs/napi-rs) | `2.14.0` | `2.14.1` |
| [napi-derive](https://github.com/napi-rs/napi-rs) | `2.14.1` | `2.14.2` |
| [serde](https://github.com/serde-rs/serde) | `1.0.192` | `1.0.193` |
| [sqlx](https://github.com/launchbadge/sqlx) | `0.7.2` | `0.7.3` |
| [uuid](https://github.com/uuid-rs/uuid) | `1.6.0` | `1.6.1` |

Updates `napi` from 2.14.0 to 2.14.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/napi-rs/napi-rs/releases">napi's releases</a>.</em></p>
<blockquote>
<h2><code>@​napi-rs/cli</code><a href="https://github.com/2"><code>@​2</code></a>.14.1</h2>
<h2>What's Changed</h2>
<ul>
<li>[Fix] Quote toml path by <a href="https://github.com/TheBrenny"><code>@​TheBrenny</code></a> in <a href="https://github.com/napi-rs/napi-rs/pull/1410">napi-rs/napi-rs#1410</a></li>
<li>chore(cli): update CI template by <a href="https://github.com/Brooooooklyn"><code>@​Brooooooklyn</code></a> in <a href="https://github.com/napi-rs/napi-rs/pull/1416">napi-rs/napi-rs#1416</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/TheBrenny"><code>@​TheBrenny</code></a> made their first contribution in <a href="https://github.com/napi-rs/napi-rs/pull/1410">napi-rs/napi-rs#1410</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/napi-rs/napi-rs/compare/[email protected]...@napi-rs/[email protected]">https://github.com/napi-rs/napi-rs/compare/[email protected]...<code>@​napi-rs/cli</code><code>@​2.14.1</code></a></p>
<h2>[email protected]</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(napi-derive): async task void output type by <a href="https://github.com/Brooooooklyn"><code>@​Brooooooklyn</code></a> in <a href="https://github.com/napi-rs/napi-rs/pull/1795">napi-rs/napi-rs#1795</a></li>
<li>fix(napi-derive): async task optional output type by <a href="https://github.com/Brooooooklyn"><code>@​Brooooooklyn</code></a> in <a href="https://github.com/napi-rs/napi-rs/pull/1796">napi-rs/napi-rs#1796</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/napi-rs/napi-rs/compare/[email protected]@2.14.1">https://github.com/napi-rs/napi-rs/compare/[email protected]@2.14.1</a></p>
<h2>[email protected]</h2>
<h2>What's Changed</h2>
<ul>
<li>style(napi): clippy fix by <a href="https://github.com/Brooooooklyn"><code>@​Brooooooklyn</code></a> in <a href="https://github.com/napi-rs/napi-rs/pull/1815">napi-rs/napi-rs#1815</a></li>
<li>fix(napi): cargo doc build by <a href="https://github.com/Brooooooklyn"><code>@​Brooooooklyn</code></a> in <a href="https://github.com/napi-rs/napi-rs/pull/1819">napi-rs/napi-rs#1819</a></li>
<li>fix(napi): compile error for wasm32-unknown-unknown target by <a href="https://github.com/Brooooooklyn"><code>@​Brooooooklyn</code></a> in <a href="https://github.com/napi-rs/napi-rs/pull/1822">napi-rs/napi-rs#1822</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/napi-rs/napi-rs/compare/[email protected]@2.14.1">https://github.com/napi-rs/napi-rs/compare/[email protected]@2.14.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/napi-rs/napi-rs/commit/6a4f4f173db28cf6bab15f193927fe99d3505da8"><code>6a4f4f1</code></a> chore(release): publish</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/e4ac44e5602dcb46fba092edfbfc3f8124e600d3"><code>e4ac44e</code></a> Release independent packages</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/8a9c42a9859f0730719c1d526752b25821305e30"><code>8a9c42a</code></a> fix(napi): compile error for wasm32-unknown-unknown target</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/7dced934a71797bd9159c3c91f8a3964cb4abd27"><code>7dced93</code></a> fix(napi): cargo doc build</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/751312cec9481ef9c60d079ceef6e41aa83d503f"><code>751312c</code></a> test: add test file name into error message (<a href="https://github.com/napi-rs/napi-rs/issues/1821">#1821</a>)</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/7c3f8b514ef1f15e1e38489b77ae34858b9b85fd"><code>7c3f8b5</code></a> fix(napi-derive): compile warning (<a href="https://github.com/napi-rs/napi-rs/issues/1820">#1820</a>)</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/8c911b5d34018a4dff985b7db41f558b22370bcf"><code>8c911b5</code></a> chore: upgrade emnapi dependencies (<a href="https://github.com/napi-rs/napi-rs/issues/1817">#1817</a>)</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/76dcf833dabb38892357748a7f69fb9a96b67009"><code>76dcf83</code></a> chore(deps): update dependency emnapi to v0.44.0 (<a href="https://github.com/napi-rs/napi-rs/issues/1805">#1805</a>)</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/6df0ca112e41cb1ed0ee76a446fa7e5f358dfaeb"><code>6df0ca1</code></a> chore: 🤖 align wasi template to nodejs demo (<a href="https://github.com/napi-rs/napi-rs/issues/1814">#1814</a>)</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/c321071c8902005f7d5295c2995ad03fa25fc395"><code>c321071</code></a> chore(deps): update dependency <code>@​emnapi/runtime</code> to v0.44.0 (<a href="https://github.com/napi-rs/napi-rs/issues/1804">#1804</a>)</li>
<li>Additional commits viewable in <a href="https://github.com/napi-rs/napi-rs/compare/[email protected]@2.14.1">compare view</a></li>
</ul>
</details>
<br />

Updates `napi-derive` from 2.14.1 to 2.14.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/napi-rs/napi-rs/releases">napi-derive's releases</a>.</em></p>
<blockquote>
<h2>[email protected]</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(napi-derive): compile warning by <a href="https://github.com/Brooooooklyn"><code>@​Brooooooklyn</code></a> in <a href="https://github.com/napi-rs/napi-rs/pull/1820">napi-rs/napi-rs#1820</a></li>
<li>fix(napi): compile error for wasm32-unknown-unknown target by <a href="https://github.com/Brooooooklyn"><code>@​Brooooooklyn</code></a> in <a href="https://github.com/napi-rs/napi-rs/pull/1822">napi-rs/napi-rs#1822</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/napi-rs/napi-rs/compare/[email protected]@2.14.2">https://github.com/napi-rs/napi-rs/compare/[email protected]@2.14.2</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/napi-rs/napi-rs/commit/6a4f4f173db28cf6bab15f193927fe99d3505da8"><code>6a4f4f1</code></a> chore(release): publish</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/e4ac44e5602dcb46fba092edfbfc3f8124e600d3"><code>e4ac44e</code></a> Release independent packages</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/8a9c42a9859f0730719c1d526752b25821305e30"><code>8a9c42a</code></a> fix(napi): compile error for wasm32-unknown-unknown target</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/7dced934a71797bd9159c3c91f8a3964cb4abd27"><code>7dced93</code></a> fix(napi): cargo doc build</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/751312cec9481ef9c60d079ceef6e41aa83d503f"><code>751312c</code></a> test: add test file name into error message (<a href="https://github.com/napi-rs/napi-rs/issues/1821">#1821</a>)</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/7c3f8b514ef1f15e1e38489b77ae34858b9b85fd"><code>7c3f8b5</code></a> fix(napi-derive): compile warning (<a href="https://github.com/napi-rs/napi-rs/issues/1820">#1820</a>)</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/8c911b5d34018a4dff985b7db41f558b22370bcf"><code>8c911b5</code></a> chore: upgrade emnapi dependencies (<a href="https://github.com/napi-rs/napi-rs/issues/1817">#1817</a>)</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/76dcf833dabb38892357748a7f69fb9a96b67009"><code>76dcf83</code></a> chore(deps): update dependency emnapi to v0.44.0 (<a href="https://github.com/napi-rs/napi-rs/issues/1805">#1805</a>)</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/6df0ca112e41cb1ed0ee76a446fa7e5f358dfaeb"><code>6df0ca1</code></a> chore: 🤖 align wasi template to nodejs demo (<a href="https://github.com/napi-rs/napi-rs/issues/1814">#1814</a>)</li>
<li><a href="https://github.com/napi-rs/napi-rs/commit/c321071c8902005f7d5295c2995ad03fa25fc395"><code>c321071</code></a> chore(deps): update dependency <code>@​emnapi/runtime</code> to v0.44.0 (<a href="https://github.com/napi-rs/napi-rs/issues/1804">#1804</a>)</li>
<li>Additional commits viewable in <a href="https://github.com/napi-rs/napi-rs/compare/[email protected]@2.14.2">compare view</a></li>
</ul>
</details>
<br />

Updates `serde` from 1.0.192 to 1.0.193
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/serde-rs/serde/releases">serde's releases</a>.</em></p>
<blockquote>
<h2>v1.0.193</h2>
<ul>
<li>Fix field names used for the deserialization of <code>RangeFrom</code> and <code>RangeTo</code> (<a href="https://github.com/serde-rs/serde/issues/2653">#2653</a>, <a href="https://github.com/serde-rs/serde/issues/2654">#2654</a>, <a href="https://github.com/serde-rs/serde/issues/2655">#2655</a>, thanks <a href="https://github.com/emilbonnek"><code>@​emilbonnek</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/serde-rs/serde/commit/44613c7d0190dbb5ecd2d5ec19c636f45b7488cc"><code>44613c7</code></a> Release 1.0.193</li>
<li><a href="https://github.com/serde-rs/serde/commit/c706281df3c8d50dba1763f19c856df2746eba6c"><code>c706281</code></a> Merge pull request <a href="https://github.com/serde-rs/serde/issues/2655">#2655</a> from dtolnay/rangestartend</li>
<li><a href="https://github.com/serde-rs/serde/commit/65d75b8fe3105f00ab2e01537d568d4587167582"><code>65d75b8</code></a> Add RangeFrom and RangeTo tests</li>
<li><a href="https://github.com/serde-rs/serde/commit/332b0cba40bcbcc7a6b23a9706277c54791a9856"><code>332b0cb</code></a> Merge pull request <a href="https://github.com/serde-rs/serde/issues/2654">#2654</a> from dtolnay/rangestartend</li>
<li><a href="https://github.com/serde-rs/serde/commit/8c4af412969086bc8f54fdc2a079d373632e0a03"><code>8c4af41</code></a> Fix more RangeFrom / RangeEnd mixups</li>
<li><a href="https://github.com/serde-rs/serde/commit/24a78f071b22ae491eec4127be696ac255b9b5d3"><code>24a78f0</code></a> Merge pull request <a href="https://github.com/serde-rs/serde/issues/2653">#2653</a> from emilbonnek/fix/range-to-from-de-mixup</li>
<li><a href="https://github.com/serde-rs/serde/commit/c91c33436d7aaef7472ebc18b734ddc9b5bd11fa"><code>c91c334</code></a> Fix Range{From,To} deserialize mixup</li>
<li><a href="https://github.com/serde-rs/serde/commit/2083f43a287cac8302009fda5bbe41518dd83209"><code>2083f43</code></a> Update ui test suite to nightly-2023-11-19</li>
<li>See full diff in <a href="https://github.com/serde-rs/serde/compare/v1.0.192...v1.0.193">compare view</a></li>
</ul>
</details>
<br />

Updates `sqlx` from 0.7.2 to 0.7.3
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/launchbadge/sqlx/blob/main/CHANGELOG.md">sqlx's changelog</a>.</em></p>
<blockquote>
<h2>0.7.3 - 2023-11-22</h2>
<p>38 pull requests were merged this release cycle.</p>
<h3>Added</h3>
<ul>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2478">#2478</a>]: feat(citext): support postgres citext [[<a href="https://github.com/hgranthorner"><code>@​hgranthorner</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2545">#2545</a>]: Add <code>fixtures_path</code> in sqlx::test args [[<a href="https://github.com/ripa1995"><code>@​ripa1995</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2665">#2665</a>]: feat(mysql): support packet splitting [[<a href="https://github.com/tk2217"><code>@​tk2217</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2752">#2752</a>]: Enhancement <a href="https://github.com/launchbadge/sqlx/issues/2747">#2747</a> Provide <code>fn PgConnectOptions::get_host(&amp;self)</code> [[<a href="https://github.com/boris-lok"><code>@​boris-lok</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2769">#2769</a>]: Customize the macro error message based on the metadata [[<a href="https://github.com/Nemo157"><code>@​Nemo157</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2793">#2793</a>]: derived Hash trait for PgInterval [[<a href="https://github.com/yasamoka"><code>@​yasamoka</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2801">#2801</a>]: derive FromRow: sqlx(default) for all fields [[<a href="https://github.com/grgi"><code>@​grgi</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2827">#2827</a>]: Add impl <code>FromRow</code> for the unit type [[<a href="https://github.com/nanoqsh"><code>@​nanoqsh</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2871">#2871</a>]: Add <code>MySqlConnectOptions::get_database()</code>  [[<a href="https://github.com/shiftrightonce"><code>@​shiftrightonce</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2873">#2873</a>]: Sqlx Cli: Added force flag to drop database for postgres [[<a href="https://github.com/Vrajs16"><code>@​Vrajs16</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2894">#2894</a>]: feat: <code>Text</code> adapter [[<a href="https://github.com/abonander"><code>@​abonander</code></a>]]</li>
</ul>
<h3>Changed</h3>
<ul>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2701">#2701</a>]: Remove documentation on offline feature [[<a href="https://github.com/Baptistemontan"><code>@​Baptistemontan</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2713">#2713</a>]: Add additional info regarding using Transaction and PoolConnection as… [[<a href="https://github.com/satwanjyu"><code>@​satwanjyu</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2770">#2770</a>]: Update README.md [[<a href="https://github.com/snspinn"><code>@​snspinn</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2797">#2797</a>]: doc(mysql): document behavior regarding <code>BOOLEAN</code> and the query macros [[<a href="https://github.com/abonander"><code>@​abonander</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2803">#2803</a>]: Don't use separate temp dir for query jsons (2)  [[<a href="https://github.com/mattfbacon"><code>@​mattfbacon</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2819">#2819</a>]: postgres begin cancel safe [[<a href="https://github.com/conradludgate"><code>@​conradludgate</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2832">#2832</a>]: Update extra_float_digits default to 2 instead of 3 [[<a href="https://github.com/brianheineman"><code>@​brianheineman</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2865">#2865</a>]: Update Faq - Bulk upsert with optional fields  [[<a href="https://github.com/Vrajs16"><code>@​Vrajs16</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2880">#2880</a>]: feat: use specific message for slow query logs [[<a href="https://github.com/abonander"><code>@​abonander</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2882">#2882</a>]: Do not require db url for prepare [[<a href="https://github.com/tamasfe"><code>@​tamasfe</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2890">#2890</a>]: doc(sqlite): cover lack of <code>NUMERIC</code> support [[<a href="https://github.com/abonander"><code>@​abonander</code></a>]]</li>
<li>[No PR]: Upgraded <code>libsqlite3-sys</code> to 0.27.0
<ul>
<li>Note: linkage to <code>libsqlite3-sys</code> is considered semver-exempt;
see the release notes for 0.7.0 below for details.</li>
</ul>
</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2640">#2640</a>]: fix: sqlx::macro db cleanup race condition by adding a margin to current timestamp [[<a href="https://github.com/fhsgoncalves"><code>@​fhsgoncalves</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2655">#2655</a>]: [fix] Urlencode when passing filenames to sqlite3 [[<a href="https://github.com/uttarayan21"><code>@​uttarayan21</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2684">#2684</a>]: Make PgListener recover from UnexpectedEof [[<a href="https://github.com/hamiltop"><code>@​hamiltop</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2688">#2688</a>]: fix: Make rust_decimal and bigdecimal decoding more lenient [[<a href="https://github.com/cameronbraid"><code>@​cameronbraid</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2754">#2754</a>]: Is tests/x.py maintained? And I tried fix it. [[<a href="https://github.com/qwerty2501"><code>@​qwerty2501</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2784">#2784</a>]: fix: decode postgres time without subsecond [[<a href="https://github.com/granddaifuku"><code>@​granddaifuku</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2806">#2806</a>]: Depend on version of async-std with non-private spawn-blocking [[<a href="https://github.com/A248"><code>@​A248</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2820">#2820</a>]: fix: correct decoding of <code>rust_decimal::Decimal</code> for high-precision values [[<a href="https://github.com/abonander"><code>@​abonander</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2822">#2822</a>]: issue <a href="https://github.com/launchbadge/sqlx/issues/2821">#2821</a> Update error handling logic when opening a TCP connection [[<a href="https://github.com/anupj"><code>@​anupj</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2826">#2826</a>]: chore: bump some sqlx-core dependencies [[<a href="https://github.com/djc"><code>@​djc</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2838">#2838</a>]: Fixes rust_decimal scale for Postgres [[<a href="https://github.com/jkleinknox"><code>@​jkleinknox</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2847">#2847</a>]: Fix comment in <code>sqlx migrate add</code> help text [[<a href="https://github.com/cryeprecision"><code>@​cryeprecision</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2850">#2850</a>]: fix(core): avoid unncessary wakeups in <code>try_stream!()</code> [[<a href="https://github.com/abonander"><code>@​abonander</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2856">#2856</a>]: Prevent warnings running <code>cargo build</code> [[<a href="https://github.com/nyurik"><code>@​nyurik</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2864">#2864</a>]: fix(sqlite): use <code>AtomicUsize</code> for thread IDs [[<a href="https://github.com/abonander"><code>@​abonander</code></a>]]</li>
<li>[<a href="https://github.com/launchbadge/sqlx/issues/2892">#2892</a>]: Fixed force dropping bug [[<a href="https://github.com/Vrajs16"><code>@​Vrajs16</code></a>]]</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a href="https://github.com/launchbadge/sqlx/commits/v0.7.3">compare view</a></li>
</ul>
</details>
<br />

Updates `uuid` from 1.6.0 to 1.6.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/uuid-rs/uuid/releases">uuid's releases</a>.</em></p>
<blockquote>
<h2>1.6.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Fix uuid macro in consts by <a href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a href="https://github.com/uuid-rs/uuid/pull/721">uuid-rs/uuid#721</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/uuid-rs/uuid/compare/1.6.0...1.6.1">https://github.com/uuid-rs/uuid/compare/1.6.0...1.6.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/uuid-rs/uuid/commit/c8891073248ddc7faa8c53ac9ceb629a341c7b9b"><code>c889107</code></a> Merge pull request <a href="https://github.com/uuid-rs/uuid/issues/721">#721</a> from uuid-rs/fix/uuid-macro</li>
<li><a href="https://github.com/uuid-rs/uuid/commit/f3f74961c4a8628eb4247c56f93645bb42ee0d31"><code>f3f7496</code></a> fix uuid macro in consts</li>
<li>See full diff in <a href="https://github.com/uuid-rs/uuid/compare/1.6.0...1.6.1">compare view</a></li>
</ul>
</details>
<br />

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions

</details>

* docs: issue triaging document (#5071)

I would like to sort out our process for handling github issues. When we receive a issue, we should first triage it.

This PR contains the document about issue triaging.

reference:
[YouTrack issue states used in .NET tools team and their description](https://rider-support.jetbrains.com/hc/en-us/articles/360021572199-YouTrack-issue-states-used-in-NET-tools-team-and-their-description)
[vscode Issues Triaging](https://github.com/microsoft/vscode/wiki/Issues-Triaging)

* fix(electron): electron dev startup on win (#5031)

* fix(component): rework tags list collapsing (#5072)

Before:

![CleanShot 2023-11-27 at [email protected]](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/2ac2b8e3-6c30-41f7-a9b2-7a9c81b250fa.png)

After:
![CleanShot 2023-11-27 at [email protected]](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/12eac806-e641-45be-9215-d166f8733db9.png)

* fix(server): wrong OTEL config (#5084)

* fix(core): nx cache configuration (#5065)

* ci: always perform fresh build in deployment job (#5066)

* fix(core): should not refetch avatar when url does not change (#5070)

blob resources are in fact immutable. We do not need to refetch it by swr policies (mount/visibilitychange/etc)

* style: add no-self-compare rule (#5092)

* feat(component): default collapse and float sidebar on mobile (#5077)

work for #4843

https://github.com/toeverything/AFFiNE/assets/102217452/c658dbab-4db8-4065-a3a6-3e20274b6cb9

* feat(core): show searched result with results group and add duplicate commands (#5073)

[TOV-65](https://linear.app/affine-design/issue/TOV-65/should-show-searched-result-without-categories)

https://github.com/toeverything/AFFiNE/assets/102217452/50fba70b-7efa-4e47-ba8a-de21e400166c

* chore: upgrade typescript-eslint (#5110)

* fix: resolve cycle imports and prevent it by oxlint (#5103)

* fix: add eqeqeq lint rule (#5106)

* fix: add prefer-dom-node-dataset rule (#5107)

* fix: add prefer-dom-node-append rule (#5108)

* fix: add prefer-array-some rule (#5109)

* fix: add no-useless-promise-resolve-reject rule (#5111)

* fix: add prefer-dom-node-remove rule (#5112)

* fix: add prefer-date-now rule (#5113)

* fix: add no-typeof-undefined rule (#5114)

* fix: add new-for-builtins rule (#5116)

* fix: add no-new-array rule (#5117)

* fix: add prefer-blob-reading-methods rule (#5118)

* fix: add require-array-sort-compare rule (#5119)

* fix: add unified-signatures rule (#5120)

* fix: add prefer-for-of rule (#5121)

* fix: add prefer-readonly rule (#5122)

* refactor(server): simplify metrics creation and usage (#5115)

* ci: pr title lint job does not need to install all dependencies (#5124)

* ci: upgrade setup-node action (#5125)

* chore: add lint-staged command to pre-commit file (#5126)

* chore: remove useless circular command (#5127)

* chore: add rust-toolchain file (#5129)

* chore(native): fix useless import (#5130)

* feat(core): add manual check for updates (#4957)

work for #4523

add `appBuildType` to `runtimeConfig`
add `useAppUpdater` to manage client updates

<!--
copilot:summary
-->
### <samp>🤖[[deprecated]](https://githubnext.com/copilot-for-prs-sunset) Generated by Copilot at cdd012c</samp>

This pull request refactors and enhances the update functionality for the frontend. It introduces a new custom hook `useAppUpdater` that simplifies the update logic and state management, and uses it in various components and commands. It also adds more options and feedback for the user to control and monitor the update process, such as manual download, auto-check, and auto-download toggles, and update status and progress indicators. It also updates the `AboutAffine` component to show the app icon, version, and build type. It also adds new translations, dependencies, types, and schemas related to the update functionality.

<img width="1073" alt="image" src="https://github.com/toeverything/AFFiNE/assets/102217452/16ae7a6a-0035-4e57-902b-6b8f63169501">

* fix(core): language display names (#5123)

* fix(core): adjust ui styles (#5094)

* ci: remove publish job (#5135)

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: fourdim <[email protected]>
Co-authored-by: Cats Juice <[email protected]>
Co-authored-by: DarkSky <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: LongYinan <[email protected]>
Co-authored-by: Flrande <[email protected]>
Co-authored-by: forehalo <[email protected]>
Co-authored-by: zzj3720 <[email protected]>
Co-authored-by: JimmFly <[email protected]>
Co-authored-by: Joooye_34 <[email protected]>
Co-authored-by: JimmFly <[email protected]>
Co-authored-by: Peng Xiao <[email protected]>
Co-authored-by: EYHN <[email protected]>
Co-authored-by: Hongtao Lye <[email protected]>
Co-authored-by: singhjatin297 <[email protected]>
Co-authored-by: DarkSky <[email protected]>
Co-authored-by: Yifeng Wang <[email protected]>
Co-authored-by: Whitewater <[email protected]>
Co-authored-by: Reese <[email protected]>
Co-authored-by: EYHN <[email protected]>
Co-authored-by: Peng Xiao <[email protected]>
Co-authored-by: LongYinan <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests