-
-
Notifications
You must be signed in to change notification settings - Fork 522
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
feat(core): support ESM Forge module loading #3582
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Overall, this PR seems pretty reasonable to me and the diff is pretty small minus the function renames.
11467e3
to
d78caf7
Compare
d78caf7
to
2cf6d60
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Leaving some comments but because this has been open for a while I'll push up the changes 👍
@@ -61,15 +61,15 @@ export default class PluginInterface implements IForgePluginInterface { | |||
}); | |||
|
|||
for (const plugin of this.plugins) { | |||
plugin.init(dir, forgeConfig); | |||
void plugin.then((plugin) => plugin.init(dir, forgeConfig)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is dodge and can go if we follow the above comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@MarshallOfSound Maybe it would be better to actually replace the original promises at this part in the array (and go with traditional for
loop), but still keep it all as an array? This way, if plugin.init
throws an error, it is further handled (I guess that's the only part I skipped handling).
I really liked the elegance of for await
in my solution. And I don't see much reason at await
-ing promises during the class creation, I think it's best to leave that when we actually need to depend on the promise result. IMO this over-complicates the code without much benefits (other than ending with the rejected promise immediately).
Looks like template tests are failing with the following because I can't reproduce locally either.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think I might found the cause in code of the undefined behaviour during the object creation, some code seems to be dependant on promise state yet code doesn't reflect this.
I still personally think the past implementation was slightly better as it would only make code that's actually dependant on the promise result to fail than make whole class to fail and probably mistakes like this would also be avoided, what I would change in it is to make plugin.init()
also a part of the promise that has to pass to guarantee the further code will end up with the correct plugin
objects that are fully created and initialized. Eventually I would still make plugins
a Promise
type, but rely on their completion within the create
function, so JS/TS actually forces await
in places there's some dependence on it.
@@ -61,15 +73,15 @@ export default class PluginInterface implements IForgePluginInterface { | |||
}); | |||
|
|||
for (const plugin of this.plugins) { | |||
void plugin.then((plugin) => plugin.init(dir, forgeConfig)); | |||
plugin.init(dir, forgeConfig); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I might be wrong, since I've only briefly looked at the code, but isn't this code somewhat unsafe at this point, in a way this.plugins
state is unknown (it might be still empty/uninitialized) since it doesn't rely on this._pluginPromise
completion? You probably need to init plugins as part of the promise to guarantee it will happen.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is safe theoretically because the constructor is private and the only way to make an instance is via the static create method that ensures the property is initialized.
This is a fairly standard pattern
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@MarshallOfSound oh, I apologize for misunderstanding and not being straightforward enough. What I meant is that since the constructor is still used internally to create a base class is that within this constructor there's a for
loop that seems to be executed fully synchronously, yet it depends on this.plugins
that is actually initialized asynchronously… This means, this loop won't do anything if the this.plugins
array is still empty and the async code won't execute before the synchronous (from my understanding of JS this is going to be the case almost everytime, as the next tick is considered at the end of the constructor… but I guess this might as well be undefined behaviour and possibly a mistake, at least if I understand the code correctly).
You probably want to place plugin.init
somewhere where the code is still async and this.plugins
is guaranteed to be non-empty…
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh I see, sorry reviewing diffs on my phone isn't super easy.
Yeah moving this init loop up into the promise then above should fix that. Missed that when writing this
9915270
to
dc48e4f
Compare
Is this PR complete to be merged? |
@rtritto I think so, I guess I'm awaiting more reviews / @MarshallOfSound comment on that (if he didn't noticed the changes within the PR). I personally don't think I want to change anything, unless some other dev has some idea or want to discuss some stuff here I'd say it's ready to be merged. |
This ensures calling dynamicImport will rather result in rejected promise than in unhandled exception.
Replace some require() calls with dynamicImport() to support loading makers/publishers/plugins etc. that are ESM makers
Avoid resolving path to file url in dynamicImport to support importing modules by identifiers.
Try require first, then import, to avoid .default property for CJS.
Merge error messages for imports to easier debug potential failures.
Rename require-search test to import-search and improve testing the promise rejection. Co-authored-by: Erick Zhao <erick@hotmail.ca>
This should fix regression caused by bd6ea70.
dc48e4f
to
d1c1aee
Compare
Can this PR still be merged? |
This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | Type | Update | |---|---|---|---|---|---|---|---| | [@electron-forge/cli](https://github.com/electron/forge) | [`7.4.0` -> `7.5.0`](https://renovatebot.com/diffs/npm/@electron-forge%2fcli/7.4.0/7.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@electron-forge%2fcli/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@electron-forge%2fcli/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@electron-forge%2fcli/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@electron-forge%2fcli/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [@electron-forge/core](https://github.com/electron/forge) | [`7.4.0` -> `7.5.0`](https://renovatebot.com/diffs/npm/@electron-forge%2fcore/7.4.0/7.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@electron-forge%2fcore/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@electron-forge%2fcore/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@electron-forge%2fcore/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@electron-forge%2fcore/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [@electron-forge/core-utils](https://github.com/electron/forge) | [`7.4.0` -> `7.5.0`](https://renovatebot.com/diffs/npm/@electron-forge%2fcore-utils/7.4.0/7.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@electron-forge%2fcore-utils/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@electron-forge%2fcore-utils/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@electron-forge%2fcore-utils/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@electron-forge%2fcore-utils/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [@electron-forge/maker-base](https://github.com/electron/forge) | [`7.4.0` -> `7.5.0`](https://renovatebot.com/diffs/npm/@electron-forge%2fmaker-base/7.4.0/7.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@electron-forge%2fmaker-base/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@electron-forge%2fmaker-base/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@electron-forge%2fmaker-base/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@electron-forge%2fmaker-base/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | resolutions | minor | | [@electron-forge/maker-deb](https://github.com/electron/forge) | [`7.4.0` -> `7.5.0`](https://renovatebot.com/diffs/npm/@electron-forge%2fmaker-deb/7.4.0/7.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@electron-forge%2fmaker-deb/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@electron-forge%2fmaker-deb/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@electron-forge%2fmaker-deb/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@electron-forge%2fmaker-deb/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [@electron-forge/maker-dmg](https://github.com/electron/forge) | [`7.4.0` -> `7.5.0`](https://renovatebot.com/diffs/npm/@electron-forge%2fmaker-dmg/7.4.0/7.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@electron-forge%2fmaker-dmg/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@electron-forge%2fmaker-dmg/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@electron-forge%2fmaker-dmg/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@electron-forge%2fmaker-dmg/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [@electron-forge/maker-squirrel](https://github.com/electron/forge) | [`7.4.0` -> `7.5.0`](https://renovatebot.com/diffs/npm/@electron-forge%2fmaker-squirrel/7.4.0/7.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@electron-forge%2fmaker-squirrel/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@electron-forge%2fmaker-squirrel/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@electron-forge%2fmaker-squirrel/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@electron-forge%2fmaker-squirrel/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [@electron-forge/maker-zip](https://github.com/electron/forge) | [`7.4.0` -> `7.5.0`](https://renovatebot.com/diffs/npm/@electron-forge%2fmaker-zip/7.4.0/7.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@electron-forge%2fmaker-zip/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@electron-forge%2fmaker-zip/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@electron-forge%2fmaker-zip/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@electron-forge%2fmaker-zip/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [@electron-forge/plugin-auto-unpack-natives](https://github.com/electron/forge) | [`7.4.0` -> `7.5.0`](https://renovatebot.com/diffs/npm/@electron-forge%2fplugin-auto-unpack-natives/7.4.0/7.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@electron-forge%2fplugin-auto-unpack-natives/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@electron-forge%2fplugin-auto-unpack-natives/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@electron-forge%2fplugin-auto-unpack-natives/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@electron-forge%2fplugin-auto-unpack-natives/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [@electron-forge/shared-types](https://github.com/electron/forge) | [`7.4.0` -> `7.5.0`](https://renovatebot.com/diffs/npm/@electron-forge%2fshared-types/7.4.0/7.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@electron-forge%2fshared-types/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@electron-forge%2fshared-types/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@electron-forge%2fshared-types/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@electron-forge%2fshared-types/7.4.0/7.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [@fal-ai/serverless-client](https://github.com/fal-ai/fal-js) ([source](https://github.com/fal-ai/fal-js/tree/HEAD/libs/client)) | [`0.14.2` -> `0.14.3`](https://renovatebot.com/diffs/npm/@fal-ai%2fserverless-client/0.14.2/0.14.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@fal-ai%2fserverless-client/0.14.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@fal-ai%2fserverless-client/0.14.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@fal-ai%2fserverless-client/0.14.2/0.14.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@fal-ai%2fserverless-client/0.14.2/0.14.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch | | [@playwright/test](https://playwright.dev) ([source](https://github.com/microsoft/playwright)) | [`=1.47.1` -> `=1.47.2`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.47.1/1.47.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.47.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@playwright%2ftest/1.47.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@playwright%2ftest/1.47.1/1.47.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.47.1/1.47.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [@sentry/react](https://github.com/getsentry/sentry-javascript/tree/master/packages/react) ([source](https://github.com/getsentry/sentry-javascript)) | [`8.30.0` -> `8.31.0`](https://renovatebot.com/diffs/npm/@sentry%2freact/8.30.0/8.31.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2freact/8.31.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2freact/8.31.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2freact/8.30.0/8.31.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2freact/8.30.0/8.31.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor | | [@sentry/react](https://github.com/getsentry/sentry-javascript/tree/master/packages/react) ([source](https://github.com/getsentry/sentry-javascript)) | [`8.30.0` -> `8.31.0`](https://renovatebot.com/diffs/npm/@sentry%2freact/8.30.0/8.31.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2freact/8.31.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2freact/8.31.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2freact/8.30.0/8.31.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2freact/8.30.0/8.31.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [@storybook/addon-essentials](https://github.com/storybookjs/storybook/tree/next/code/addons/essentials) ([source](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/essentials)) | [`8.3.1` -> `8.3.2`](https://renovatebot.com/diffs/npm/@storybook%2faddon-essentials/8.3.1/8.3.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-essentials/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-essentials/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-essentials/8.3.1/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-essentials/8.3.1/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [@storybook/addon-interactions](https://github.com/storybookjs/storybook/tree/next/code/addons/interactions) ([source](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/interactions)) | [`8.3.1` -> `8.3.2`](https://renovatebot.com/diffs/npm/@storybook%2faddon-interactions/8.3.1/8.3.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-interactions/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-interactions/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-interactions/8.3.1/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-interactions/8.3.1/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/next/code/addons/links) ([source](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links)) | [`8.3.1` -> `8.3.2`](https://renovatebot.com/diffs/npm/@storybook%2faddon-links/8.3.1/8.3.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-links/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-links/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-links/8.3.1/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-links/8.3.1/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [@storybook/addon-mdx-gfm](https://github.com/storybookjs/storybook/tree/next/code/addons/gfm) ([source](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/gfm)) | [`8.3.1` -> `8.3.2`](https://renovatebot.com/diffs/npm/@storybook%2faddon-mdx-gfm/8.3.1/8.3.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-mdx-gfm/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-mdx-gfm/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-mdx-gfm/8.3.1/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-mdx-gfm/8.3.1/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [@storybook/react](https://github.com/storybookjs/storybook/tree/next/code/renderers/react) ([source](https://github.com/storybookjs/storybook/tree/HEAD/code/renderers/react)) | [`8.3.1` -> `8.3.2`](https://renovatebot.com/diffs/npm/@storybook%2freact/8.3.1/8.3.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2freact/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2freact/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2freact/8.3.1/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2freact/8.3.1/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/next/code/frameworks/react-vite) ([source](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite)) | [`8.3.1` -> `8.3.2`](https://renovatebot.com/diffs/npm/@storybook%2freact-vite/8.3.1/8.3.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2freact-vite/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2freact-vite/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2freact-vite/8.3.1/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2freact-vite/8.3.1/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react) ([source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react)) | [`18.3.7` -> `18.3.8`](https://renovatebot.com/diffs/npm/@types%2freact/18.3.7/18.3.8) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact/18.3.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2freact/18.3.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2freact/18.3.7/18.3.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact/18.3.7/18.3.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [electron](https://github.com/electron/electron) | [`32.1.1` -> `32.1.2`](https://renovatebot.com/diffs/npm/electron/32.1.1/32.1.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/electron/32.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/electron/32.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/electron/32.1.1/32.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/electron/32.1.1/32.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [esbuild](https://github.com/evanw/esbuild) | [`^0.23.0` -> `^0.24.0`](https://renovatebot.com/diffs/npm/esbuild/0.23.1/0.24.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/esbuild/0.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/esbuild/0.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/esbuild/0.23.1/0.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/esbuild/0.23.1/0.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [html-validate](https://html-validate.org) ([source](https://gitlab.com/html-validate/html-validate)) | [`8.22.0` -> `8.23.0`](https://renovatebot.com/diffs/npm/html-validate/8.22.0/8.23.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/html-validate/8.23.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/html-validate/8.23.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/html-validate/8.22.0/8.23.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/html-validate/8.22.0/8.23.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor | | [jotai](https://github.com/pmndrs/jotai) | [`2.9.3` -> `2.10.0`](https://renovatebot.com/diffs/npm/jotai/2.9.3/2.10.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/jotai/2.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jotai/2.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jotai/2.9.3/2.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jotai/2.9.3/2.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor | | [keyv](https://github.com/jaredwray/keyv) | [`5.0.1` -> `5.0.3`](https://renovatebot.com/diffs/npm/keyv/5.0.1/5.0.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/keyv/5.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/keyv/5.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/keyv/5.0.1/5.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/keyv/5.0.1/5.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch | | [lucide-react](https://lucide.dev) ([source](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react)) | [`^0.441.0` -> `^0.445.0`](https://renovatebot.com/diffs/npm/lucide-react/0.441.0/0.445.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lucide-react/0.445.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lucide-react/0.445.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lucide-react/0.441.0/0.445.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lucide-react/0.441.0/0.445.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor | | [msw](https://mswjs.io) ([source](https://github.com/mswjs/msw)) | [`2.4.8` -> `2.4.9`](https://renovatebot.com/diffs/npm/msw/2.4.8/2.4.9) | [![age](https://developer.mend.io/api/mc/badges/age/npm/msw/2.4.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/msw/2.4.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/msw/2.4.8/2.4.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/msw/2.4.8/2.4.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [napi](https://github.com/napi-rs/napi-rs) | `3.0.0-alpha.9` -> `3.0.0-alpha.11` | [![age](https://developer.mend.io/api/mc/badges/age/crate/napi/3.0.0-alpha.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi/3.0.0-alpha.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi/3.0.0-alpha.9/3.0.0-alpha.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi/3.0.0-alpha.9/3.0.0-alpha.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch | | [napi-derive](https://github.com/napi-rs/napi-rs) | `3.0.0-alpha.8` -> `3.0.0-alpha.11` | [![age](https://developer.mend.io/api/mc/badges/age/crate/napi-derive/3.0.0-alpha.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi-derive/3.0.0-alpha.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi-derive/3.0.0-alpha.8/3.0.0-alpha.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi-derive/3.0.0-alpha.8/3.0.0-alpha.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch | | [nodemon](https://nodemon.io) ([source](https://github.com/remy/nodemon)) | [`3.1.5` -> `3.1.7`](https://renovatebot.com/diffs/npm/nodemon/3.1.5/3.1.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/nodemon/3.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/nodemon/3.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/nodemon/3.1.5/3.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/nodemon/3.1.5/3.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [nx](https://nx.dev) ([source](https://github.com/nrwl/nx/tree/HEAD/packages/nx)) | [`19.7.4` -> `19.8.0`](https://renovatebot.com/diffs/npm/nx/19.7.4/19.8.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/nx/19.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/nx/19.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/nx/19.7.4/19.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/nx/19.7.4/19.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [openai](https://github.com/openai/openai-node) | [`4.62.1` -> `4.63.0`](https://renovatebot.com/diffs/npm/openai/4.62.1/4.63.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/openai/4.63.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/openai/4.63.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/openai/4.62.1/4.63.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/openai/4.62.1/4.63.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor | | [playwright](https://playwright.dev) ([source](https://github.com/microsoft/playwright)) | [`=1.47.1` -> `=1.47.2`](https://renovatebot.com/diffs/npm/playwright/1.47.1/1.47.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/playwright/1.47.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/playwright/1.47.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/playwright/1.47.1/1.47.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/playwright/1.47.1/1.47.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [react-day-picker](https://daypicker.dev) ([source](https://github.com/gpbl/react-day-picker)) | [`9.1.0` -> `9.1.2`](https://renovatebot.com/diffs/npm/react-day-picker/9.1.0/9.1.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-day-picker/9.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-day-picker/9.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-day-picker/9.1.0/9.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-day-picker/9.1.0/9.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch | | [socket.io](https://github.com/socketio/socket.io/tree/main/packages/socket.io#readme) ([source](https://github.com/socketio/socket.io)) | [`4.7.5` -> `4.8.0`](https://renovatebot.com/diffs/npm/socket.io/4.7.5/4.8.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/socket.io/4.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/socket.io/4.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/socket.io/4.7.5/4.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/socket.io/4.7.5/4.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor | | [socket.io-client](https://github.com/socketio/socket.io/tree/main/packages/socket.io-client#readme) ([source](https://github.com/socketio/socket.io)) | [`4.7.5` -> `4.8.0`](https://renovatebot.com/diffs/npm/socket.io-client/4.7.5/4.8.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/socket.io-client/4.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/socket.io-client/4.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/socket.io-client/4.7.5/4.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/socket.io-client/4.7.5/4.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor | | [storybook](https://github.com/storybookjs/storybook/tree/next/code/lib/cli) ([source](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/cli)) | [`8.3.1` -> `8.3.2`](https://renovatebot.com/diffs/npm/storybook/8.3.1/8.3.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/storybook/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/storybook/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/storybook/8.3.1/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/storybook/8.3.1/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [vite](https://vitejs.dev) ([source](https://github.com/vitejs/vite/tree/HEAD/packages/vite)) | [`5.4.6` -> `5.4.7`](https://renovatebot.com/diffs/npm/vite/5.4.6/5.4.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vite/5.4.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vite/5.4.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vite/5.4.6/5.4.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vite/5.4.6/5.4.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [wrangler](https://github.com/cloudflare/workers-sdk) ([source](https://github.com/cloudflare/workers-sdk/tree/HEAD/packages/wrangler)) | [`3.78.5` -> `3.78.7`](https://renovatebot.com/diffs/npm/wrangler/3.78.5/3.78.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/wrangler/3.78.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/wrangler/3.78.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/wrangler/3.78.5/3.78.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/wrangler/3.78.5/3.78.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | --- ### Release Notes <details> <summary>electron/forge (@​electron-forge/cli)</summary> ### [`v7.5.0`](https://github.com/electron/forge/releases/tag/v7.5.0) [Compare Source](https://github.com/electron/forge/compare/v7.4.0...v7.5.0) ##### What's Changed ##### Improved ESM module support Electron Forge v7.5.0 adds support for loading Forge modules (plugins, makers, publishers etc.) that use ESM for their module format. This change allows both official Forge modules and third-party modules to use ESM syntax. ##### Change in Vite support policy v7.5.0 also makes refinements to our Vite plugin, fixing an issue that users identified as breaking between 7.2.0 and 7.3.0 ([https://github.com/electron/forge/issues/3506](https://github.com/electron/forge/issues/3506)). Users upgrading from any past version of Forge to 7.5.0 should now not experience breaking config changes. After discussion with maintainers, we've decided to retroactively mark the Vite plugin as **experimental**, as the plugin is still under active development and cannot offer the same API stability guarantees as our other existing plugins. Minor versions may include breaking changes to improve developer ergonomics or to fix bugs (especially around native Node.js modules). When these changes happen, we'll provide additional migration information in future release notes. - feat(plugin-vite): better logic by [@​caoxiemeihao](https://github.com/caoxiemeihao) in [https://github.com/electron/forge/pull/3583](https://github.com/electron/forge/pull/3583) - feat(core): support ESM Forge module loading by [@​SpacingBat3](https://github.com/SpacingBat3) in [https://github.com/electron/forge/pull/3582](https://github.com/electron/forge/pull/3582) - feat(core): adding register/unregisterForgeConfigForDirectory to utils by [@​IIIMADDINIII](https://github.com/IIIMADDINIII) in [https://github.com/electron/forge/pull/3626](https://github.com/electron/forge/pull/3626) - feat(publisher-gcs): only include provided upload options by [@​kochrt](https://github.com/kochrt) in [https://github.com/electron/forge/pull/3576](https://github.com/electron/forge/pull/3576) - feat: Adding optional metadata config to gcs publisher by [@​Tobiasartz](https://github.com/Tobiasartz) in [https://github.com/electron/forge/pull/3682](https://github.com/electron/forge/pull/3682) - feat(maker-wix): Expose the property associateExtensions by [@​fras2560](https://github.com/fras2560) in [https://github.com/electron/forge/pull/3674](https://github.com/electron/forge/pull/3674) - feat(plugin-webpack): support for dev server custom headers by [@​rahul-sachdeva22](https://github.com/rahul-sachdeva22) in [https://github.com/electron/forge/pull/3653](https://github.com/electron/forge/pull/3653) ##### Bug Fixes and Improvements - fix(cli): cli capitalisation by [@​DevanceJ](https://github.com/DevanceJ) in [https://github.com/electron/forge/pull/3539](https://github.com/electron/forge/pull/3539) - ci: don't use versionDocs option in API Documentation workflow by [@​dsanders11](https://github.com/dsanders11) in [https://github.com/electron/forge/pull/3571](https://github.com/electron/forge/pull/3571) - test(import): check if electron-quick-start packages by [@​erickzhao](https://github.com/erickzhao) in [https://github.com/electron/forge/pull/3580](https://github.com/electron/forge/pull/3580) - fix(maker-squirrel): only push `delta` artifacts if they exist on disk by [@​hipstersmoothie](https://github.com/hipstersmoothie) in [https://github.com/electron/forge/pull/3586](https://github.com/electron/forge/pull/3586) - docs: upgrade typedoc@0.25 by [@​erickzhao](https://github.com/erickzhao) in [https://github.com/electron/forge/pull/3636](https://github.com/electron/forge/pull/3636) - fix(plugin-webpack): protocol recognizes webpack's `devServer` setting by [@​Dogdriip](https://github.com/Dogdriip) in [https://github.com/electron/forge/pull/3650](https://github.com/electron/forge/pull/3650) - fix(hooks): allow mutating hooks to have a `void` return by [@​erickzhao](https://github.com/erickzhao) in [https://github.com/electron/forge/pull/3655](https://github.com/electron/forge/pull/3655) - fix: Bump [@​electron/packager](https://github.com/electron/packager) to ^18.3.5 by [@​felixrieseberg](https://github.com/felixrieseberg) in [https://github.com/electron/forge/pull/3692](https://github.com/electron/forge/pull/3692) - chore: bump electronjs/node to 2.3.0 (main) by [@​electron-roller](https://github.com/electron-roller) in [https://github.com/electron/forge/pull/3596](https://github.com/electron/forge/pull/3596) - chore(publisher-s3): update aws-sdk deps by [@​erickzhao](https://github.com/erickzhao) in [https://github.com/electron/forge/pull/3708](https://github.com/electron/forge/pull/3708) - chore: bump `asar` dep to latest by [@​erickzhao](https://github.com/erickzhao) in [https://github.com/electron/forge/pull/3592](https://github.com/electron/forge/pull/3592) - test: correctly make test-output.xml paths relative in windows by [@​yangannyx](https://github.com/yangannyx) in [https://github.com/electron/forge/pull/3620](https://github.com/electron/forge/pull/3620) - docs: mark plugin-vite as experimental by [@​VerteDinde](https://github.com/VerteDinde) in [https://github.com/electron/forge/pull/3710](https://github.com/electron/forge/pull/3710) ##### New Contributors - [@​DevanceJ](https://github.com/DevanceJ) made their first contribution in [https://github.com/electron/forge/pull/3539](https://github.com/electron/forge/pull/3539) - [@​hipstersmoothie](https://github.com/hipstersmoothie) made their first contribution in [https://github.com/electron/forge/pull/3586](https://github.com/electron/forge/pull/3586) - [@​Tobiasartz](https://github.com/Tobiasartz) made their first contribution in [https://github.com/electron/forge/pull/3682](https://github.com/electron/forge/pull/3682) - [@​rahul-sachdeva22](https://github.com/rahul-sachdeva22) made their first contribution in [https://github.com/electron/forge/pull/3653](https://github.com/electron/forge/pull/3653) - [@​fras2560](https://github.com/fras2560) made their first contribution in [https://github.com/electron/forge/pull/3674](https://github.com/electron/forge/pull/3674) - [@​IIIMADDINIII](https://github.com/IIIMADDINIII) made their first contribution in [https://github.com/electron/forge/pull/3626](https://github.com/electron/forge/pull/3626) - [@​SpacingBat3](https://github.com/SpacingBat3) made their first contribution in [https://github.com/electron/forge/pull/3582](https://github.com/electron/forge/pull/3582) - [@​kochrt](https://github.com/kochrt) made their first contribution in [https://github.com/electron/forge/pull/3576](https://github.com/electron/forge/pull/3576) **Full Changelog**: https://github.com/electron/forge/compare/v7.4.0...v7.5.0 </details> <details> <summary>fal-ai/fal-js (@​fal-ai/serverless-client)</summary> ### [`v0.14.3`](https://github.com/fal-ai/fal-js/compare/b3ab5f0e15d70d83c439f6a77bb3a5cfa7fa3271...762f28918ded71b9569d6a0d028fd5a486b5b80f) [Compare Source](https://github.com/fal-ai/fal-js/compare/b3ab5f0e15d70d83c439f6a77bb3a5cfa7fa3271...762f28918ded71b9569d6a0d028fd5a486b5b80f) </details> <details> <summary>microsoft/playwright (@​playwright/test)</summary> ### [`v1.47.2`](https://github.com/microsoft/playwright/releases/tag/v1.47.2) [Compare Source](https://github.com/microsoft/playwright/compare/v1.47.1...v1.47.2) ##### Highlights [https://github.com/microsoft/playwright/pull/32699](https://github.com/microsoft/playwright/pull/32699)- \[REGRESSION]: fix(codegen): use content_frame property in python/.NET[https://github.com/microsoft/playwright/issues/32706](https://github.com/microsoft/playwright/issues/32706)6- \[REGRESSION]: page.pause() does not pause test timeout after 1.4[https://github.com/microsoft/playwright/pull/32661](https://github.com/microsoft/playwright/pull/32661)61 - fix(trace-viewer): time delta between local and remote actions #### Browser Versions - Chromium 129.0.6668.29 - Mozilla Firefox 130.0 - WebKit 18.0 This version was also tested against the following stable channels: - Google Chrome 128 - Microsoft Edge 128 </details> <details> <summary>getsentry/sentry-javascript (@​sentry/react)</summary> ### [`v8.31.0`](https://github.com/getsentry/sentry-javascript/releases/tag/8.31.0) [Compare Source](https://github.com/getsentry/sentry-javascript/compare/8.30.0...8.31.0) ##### Important Changes - **feat(node): Add `dataloader` integration ([#​13664](https://github.com/getsentry/sentry-javascript/issues/13664))** This release adds a new integration for the [`dataloader` package](https://www.npmjs.com/package/dataloader). The Node SDK (and all SDKs that depend on it) will now automatically instrument `dataloader` instances. You can also add it manually: ```js Sentry.init({ integrations: [Sentry.dataloaderIntegration()], }); ``` ##### Other Changes - feat(browser): Add navigation `activationStart` timestamp to pageload span ([#​13658](https://github.com/getsentry/sentry-javascript/issues/13658)) - feat(gatsby): Add optional `deleteSourcemapsAfterUpload` ([#​13610](https://github.com/getsentry/sentry-javascript/issues/13610)) - feat(nextjs): Give app router prefetch requests a `http.server.prefetch` op ([#​13600](https://github.com/getsentry/sentry-javascript/issues/13600)) - feat(nextjs): Improve Next.js serverside span data quality ([#​13652](https://github.com/getsentry/sentry-javascript/issues/13652)) - feat(node): Add `disableInstrumentationWarnings` option ([#​13693](https://github.com/getsentry/sentry-javascript/issues/13693)) - feat(nuxt): Adding `experimental_basicServerTracing` option to Nuxt module ([#​13643](https://github.com/getsentry/sentry-javascript/issues/13643)) - feat(nuxt): Improve logs about adding Node option 'import' ([#​13726](https://github.com/getsentry/sentry-javascript/issues/13726)) - feat(replay): Add `onError` callback + other small improvements to debugging ([#​13721](https://github.com/getsentry/sentry-javascript/issues/13721)) - feat(replay): Add experimental option to allow for a checkout every 6 minutes ([#​13069](https://github.com/getsentry/sentry-javascript/issues/13069)) - feat(wasm): Unconditionally parse instruction addresses ([#​13655](https://github.com/getsentry/sentry-javascript/issues/13655)) - fix: Ensure all logs are wrapped with `consoleSandbox` ([#​13690](https://github.com/getsentry/sentry-javascript/issues/13690)) - fix(browser): Try multiple options for `lazyLoadIntegration` script parent element lookup ([#​13717](https://github.com/getsentry/sentry-javascript/issues/13717)) - fix(feedback): Actor color applies to feedback icon ([#​13702](https://github.com/getsentry/sentry-javascript/issues/13702)) - fix(feedback): Fix form width on mobile devices ([#​13068](https://github.com/getsentry/sentry-javascript/issues/13068)) - fix(nestjs): Preserve original function name on `SentryTraced` functions ([#​13684](https://github.com/getsentry/sentry-javascript/issues/13684)) - fix(node): Don't overwrite local variables for re-thrown errors ([#​13644](https://github.com/getsentry/sentry-javascript/issues/13644)) - fix(normalize): Treat Infinity as NaN both are non-serializable numbers ([#​13406](https://github.com/getsentry/sentry-javascript/issues/13406)) - fix(nuxt): Use correct server output file path ([#​13725](https://github.com/getsentry/sentry-javascript/issues/13725)) - fix(opentelemetry): Always use active span in `Propagator.inject` ([#​13381](https://github.com/getsentry/sentry-javascript/issues/13381)) - fix(replay): Fixes potential out-of-order segments ([#​13609](https://github.com/getsentry/sentry-javascript/issues/13609)) Work in this release was contributed by [@​KyGuy2002](https://github.com/KyGuy2002), [@​artzhookov](https://github.com/artzhookov), and [@​julianCast](https://github.com/julianCast). Thank you for your contributions! </details> <details> <summary>storybookjs/storybook (@​storybook/addon-essentials)</summary> ### [`v8.3.2`](https://github.com/storybookjs/storybook/blob/HEAD/CHANGELOG.md#832) [Compare Source](https://github.com/storybookjs/storybook/compare/v8.3.1...v8.3.2) - CLI: Fix skip-install for stable latest releases - [#​29133](https://github.com/storybookjs/storybook/pull/29133), thanks [@​valentinpalkovic](https://github.com/valentinpalkovic)! - Core: Do not add packageManager field to package.json during `storybook dev` - [#​29152](https://github.com/storybookjs/storybook/pull/29152), thanks [@​valentinpalkovic](https://github.com/valentinpalkovic)! </details> <details> <summary>electron/electron (electron)</summary> ### [`v32.1.2`](https://github.com/electron/electron/releases/tag/v32.1.2): electron v32.1.2 [Compare Source](https://github.com/electron/electron/compare/v32.1.1...v32.1.2) ### Release Notes for v32.1.2 #### Fixes - Fixed an issue where clicking the eyedropper icon did nothing instead of opening an eyedropper for color selection as expected. [#​43786](https://github.com/electron/electron/pull/43786) <span style="font-size:small;">(Also in [33](https://github.com/electron/electron/pull/43700))</span> - Third time isn't always a charm. Fixed the native macOS Screen Share picker invocation triggering a test Chromium green screen. [#​43809](https://github.com/electron/electron/pull/43809) <span style="font-size:small;">(Also in [33](https://github.com/electron/electron/pull/43810))</span> </details> <details> <summary>evanw/esbuild (esbuild)</summary> ### [`v0.24.0`](https://github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0240) [Compare Source](https://github.com/evanw/esbuild/compare/v0.23.1...v0.24.0) ***This release deliberately contains backwards-incompatible changes.*** To avoid automatically picking up releases like this, you should either be pinning the exact version of `esbuild` in your `package.json` file (recommended) or be using a version range syntax that only accepts patch upgrades such as `^0.23.0` or `~0.23.0`. See npm's documentation about [semver](https://docs.npmjs.com/cli/v6/using-npm/semver/) for more information. - Drop support for older platforms ([#​3902](https://github.com/evanw/esbuild/pull/3902)) This release drops support for the following operating system: - macOS 10.15 Catalina This is because the Go programming language dropped support for this operating system version in Go 1.23, and this release updates esbuild from Go 1.22 to Go 1.23. Go 1.23 now requires macOS 11 Big Sur or later. Note that this only affects the binary esbuild executables that are published to the esbuild npm package. It's still possible to compile esbuild's source code for these older operating systems. If you need to, you can compile esbuild for yourself using an older version of the Go compiler (before Go version 1.23). That might look something like this: git clone https://github.com/evanw/esbuild.git cd esbuild go build ./cmd/esbuild ./esbuild --version - Fix class field decorators in TypeScript if `useDefineForClassFields` is `false` ([#​3913](https://github.com/evanw/esbuild/issues/3913)) Setting the `useDefineForClassFields` flag to `false` in `tsconfig.json` means class fields use the legacy TypeScript behavior instead of the standard JavaScript behavior. Specifically they use assign semantics instead of define semantics (e.g. setters are triggered) and fields without an initializer are not initialized at all. However, when this legacy behavior is combined with standard JavaScript decorators, TypeScript switches to always initializing all fields, even those without initializers. Previously esbuild incorrectly continued to omit field initializers for this edge case. These field initializers in this case should now be emitted starting with this release. - Avoid incorrect cycle warning with `tsconfig.json` multiple inheritance ([#​3898](https://github.com/evanw/esbuild/issues/3898)) TypeScript 5.0 introduced multiple inheritance for `tsconfig.json` files where `extends` can be an array of file paths. Previously esbuild would incorrectly treat files encountered more than once when processing separate subtrees of the multiple inheritance hierarchy as an inheritance cycle. With this release, `tsconfig.json` files containing this edge case should work correctly without generating a warning. - Handle Yarn Plug'n'Play stack overflow with `tsconfig.json` ([#​3915](https://github.com/evanw/esbuild/issues/3915)) Previously a `tsconfig.json` file that `extends` another file in a package with an `exports` map could cause a stack overflow when Yarn's Plug'n'Play resolution was active. This edge case should work now starting with this release. - Work around more issues with Deno 1.31+ ([#​3917](https://github.com/evanw/esbuild/pull/3917)) This version of Deno broke the `stdin` and `stdout` properties on command objects for inherited streams, which matters when you run esbuild's Deno module as the entry point (i.e. when `import.meta.main` is `true`). Previously esbuild would crash in Deno 1.31+ if you ran esbuild like that. This should be fixed starting with this release. This fix was contributed by [@​Joshix-1](https://github.com/Joshix-1). </details> <details> <summary>html-validate/html-validate (html-validate)</summary> ### [`v8.23.0`](https://gitlab.com/html-validate/html-validate/blob/HEAD/CHANGELOG.md#8230-2024-09-22) [Compare Source](https://gitlab.com/html-validate/html-validate/compare/v8.22.0...v8.23.0) ##### Features - **deps:** support vitest v2 ([860b0c0](https://gitlab.com/html-validate/html-validate/commit/860b0c02510ef7e40cd2fd54b7f83143643b3718)) </details> <details> <summary>pmndrs/jotai (jotai)</summary> ### [`v2.10.0`](https://github.com/pmndrs/jotai/releases/tag/v2.10.0) [Compare Source](https://github.com/pmndrs/jotai/compare/v2.9.3...v2.10.0) It comes with another significant internal change to address some edge cases. Since v2.9.0, we've been working on some internal refactors to support more edge cases and clean up the code. Users are encouraged to update to the new versions eventually, but if you're satisfied with the current situation and prefer to avoid temporary instability, you can stick with v2.8.4 for now. #### What's Changed - breaking(core): avoid continuable promise in store api by [@​dai-shi](https://github.com/dai-shi) in [https://github.com/pmndrs/jotai/pull/2695](https://github.com/pmndrs/jotai/pull/2695) #### New Contributors - [@​sphinxrave](https://github.com/sphinxrave) made their first contribution in [https://github.com/pmndrs/jotai/pull/2653](https://github.com/pmndrs/jotai/pull/2653) - [@​mxthxngx](https://github.com/mxthxngx) made their first contribution in [https://github.com/pmndrs/jotai/pull/2712](https://github.com/pmndrs/jotai/pull/2712) - [@​hoangvu12](https://github.com/hoangvu12) made their first contribution in [https://github.com/pmndrs/jotai/pull/2716](https://github.com/pmndrs/jotai/pull/2716) - [@​YuHyeonWook](https://github.com/YuHyeonWook) made their first contribution in [https://github.com/pmndrs/jotai/pull/2734](https://github.com/pmndrs/jotai/pull/2734) **Full Changelog**: https://github.com/pmndrs/jotai/compare/v2.9.3...v2.10.0 </details> <details> <summary>lucide-icons/lucide (lucide-react)</summary> ### [`v0.445.0`](https://github.com/lucide-icons/lucide/releases/tag/0.445.0): New icons 0.445.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.444.0...0.445.0) #### New icons 🎨 - `briefcase-conveyor-belt` ([#​2431](https://github.com/lucide-icons/lucide/issues/2431)) by [@​jguddas](https://github.com/jguddas) - `message-square-lock` ([#​2430](https://github.com/lucide-icons/lucide/issues/2430)) by [@​jguddas](https://github.com/jguddas) ### [`v0.444.0`](https://github.com/lucide-icons/lucide/releases/tag/0.444.0): New icons 0.444.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.443.0...0.444.0) #### Modified Icons 🔨 - `loader-pinwheel` ([#​2470](https://github.com/lucide-icons/lucide/issues/2470)) by [@​jguddas](https://github.com/jguddas) ### [`v0.443.0`](https://github.com/lucide-icons/lucide/releases/tag/0.443.0): New icons 0.443.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.442.0...0.443.0) #### Modified Icons 🔨 - `circle-stop` ([#​2479](https://github.com/lucide-icons/lucide/issues/2479)) by [@​jguddas](https://github.com/jguddas) ### [`v0.442.0`](https://github.com/lucide-icons/lucide/releases/tag/0.442.0): New icons 0.442.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.441.0...0.442.0) #### Modified Icons 🔨 - `messages-square` ([#​2429](https://github.com/lucide-icons/lucide/issues/2429)) by [@​jguddas](https://github.com/jguddas) - `octagon-pause` ([#​2485](https://github.com/lucide-icons/lucide/issues/2485)) by [@​jguddas](https://github.com/jguddas) </details> <details> <summary>mswjs/msw (msw)</summary> ### [`v2.4.9`](https://github.com/mswjs/msw/releases/tag/v2.4.9) [Compare Source](https://github.com/mswjs/msw/compare/v2.4.8...v2.4.9) #### v2.4.9 (2024-09-20) ##### Bug Fixes - **ClientRequest:** support `Request` as init when recording raw headers ([#​2293](https://github.com/mswjs/msw/issues/2293)) ([`bf982ea`](https://github.com/mswjs/msw/commit/bf982eaa70ddd5d08706b8877ceb6c6c2517f660)) [@​kettanaito](https://github.com/kettanaito) </details> <details> <summary>napi-rs/napi-rs (napi)</summary> ### [`v3.0.0-alpha.11`](https://github.com/napi-rs/napi-rs/releases/tag/napi%403.0.0-alpha.11) [Compare Source](https://github.com/napi-rs/napi-rs/compare/napi@3.0.0-alpha.10...napi@3.0.0-alpha.11) #### What's Changed - refactor(napi-derive): expand order by [@​Brooooooklyn](https://github.com/Brooooooklyn) in [https://github.com/napi-rs/napi-rs/pull/2265](https://github.com/napi-rs/napi-rs/pull/2265) **Full Changelog**: https://github.com/napi-rs/napi-rs/compare/napi-derive@3.0.0-alpha.9...napi@3.0.0-alpha.11 ### [`v3.0.0-alpha.10`](https://github.com/napi-rs/napi-rs/releases/tag/napi%403.0.0-alpha.10) [Compare Source](https://github.com/napi-rs/napi-rs/compare/napi@3.0.0-alpha.9...napi@3.0.0-alpha.10) #### What's Changed - fix(napi): nullptr handling in `TypedArray`s by [@​Xanewok](https://github.com/Xanewok) in [https://github.com/napi-rs/napi-rs/pull/2258](https://github.com/napi-rs/napi-rs/pull/2258) - chore: enable corepack in Debian base Dockerfile by [@​stevefan1999-personal](https://github.com/stevefan1999-personal) in [https://github.com/napi-rs/napi-r </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://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC44MC4wIiwidXBkYXRlZEluVmVyIjoiMzguODAuMCIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
Summary
This PR focuses on bringing the initial support loading Forge modules (plugins, makers, publishers etc.) that use ESM for their module format. It should also contain some cosmetic changes like rename of
require-search
toimport-search
(to reflect it isn't around therequire
API only anymore), improvements around the helper so it won't resolve path for modules passed by their names and introduces new function,dynamicImportMaybe
, that will also try doingrequire
first and falling back to ESM when it fails (I chose torequire
first so I won't have to resolvedefault
in CJS import).The main motivation on that is to allow third-parties as well as official Forge modules to be able to effortlessly utilise the ESM syntax entirely. While this is possible for now with the Forge as well, it requires of already importing the class to the config on your own.
There are currently a few things that could be considered to be worked on in the future, but are not really necessary from what I've been testing:
Resolving directory paths for
import
in order to load them properly. This could be useful when makers are installed in unusual paths that even make Node not to be able to find modules when they are placed that way. Plus, there could be some issue with actually finding what to import given how complex it became in Node to resolve imports, plus resolving internal imports (starting in#
) would probably also have to be supported as well. It might not be worth of the efforts for now.(Maybe) dropping
dynamicImport
or making it private, since it doesn't seem to be used outside of its own module scope anymore.Improving some tests, so they have simpler logic. Currently, I focused more on preserving on the logic that tests actually uses and only changing them by making them async or use some wrapped stuff. This should make them work essentially similar way while fixing false negatives introduced by some drastic changes, like making some synchronous functions async or renaming a module.Done in 9229bff.I should also mention, the changes in this repo were tested by me (locally) with my own implementation of ESM maker.
Changes around the tests
Of course, I had to modify tests for
require-search
andpublish-spec
, due to changes in module names and switching some previously synchronous code to be async. For now, testing only the workspace@electron-forge/core
, I've seen similar number of tests failing on both official implementation and this fork, and I think they were caused because Forge expected to run tests from a root project than a workspace, as I saw those were mostly caused due to missing scripts in workspace package (so it's nothing serious). I guess it's out of the scope to fix that tho.Additional notes
I hope my commit messages as well as their classification and even this PR name fits well the policy of this project. This is my first time to contribute to Forge, so I'm definitely learning how to do stuff right while trying to avoid mistakes as much as I could 😄️.