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

🦸 Improving CKEditor 5 installation methods #15502

Open
Witoso opened this issue Dec 11, 2023 · 39 comments
Open

🦸 Improving CKEditor 5 installation methods #15502

Witoso opened this issue Dec 11, 2023 · 39 comments
Labels
support:2 An issue reported by a commercially licensed client. type:improvement This issue reports a possible enhancement of an existing feature.

Comments

@Witoso
Copy link
Member

Witoso commented Dec 11, 2023

Imagine you are setting up this cool editor for your app. You copied snippets from the docs, installed the packages, and quickly embedded the editor in your app. Everything works, you can type, and play with it. But now you start thinking about your specific use case. There’s just this one plugin that you want to add. You do it… and all hell breaks loose 🔥🔥🔥 Wall of errors, misleading docs. “I copied it straight from the docs! What’s wrong?! 😖 ” bangs in your head.

This is just one scenario of misleading onboarding to CKEditor 5. Which, you ask? The one where you extend a predefined build with additional plugins. 😮‍💨

Over the years, we learned a lot about the issues that you are facing. We resolved some and worked around some others, but the core issues remained there. We feel that it's now the right time to get to the root of it. 💪

For the past few months, we have researched the topic even further, focusing on these key issues:

  • We have several methods of installation. Each has its specific quirks that make using the documentation difficult.
  • The source packages that we release to npm need a specific setup, like webpack scripts, or a Vite plugin.
  • Certain popular environments require various workarounds to set up CKEditor 5 (e.g. server-side rendered (SSR) applications like Next.js, Nuxt.js, or SvelteKit).

The ultimate goal is to make setting up of CKEditor a pleasure, not a nightmare. It should feel like adding another library to your application — nothing more, nothing less. And we came up with a plan for how to do that.

Now, we need your help!

Share your experiences, ask us questions, correct our assumptions, and show your unique use cases. Finally, let us know if you like the proposed direction. 🙏

The RFC with the details is in the first comment below. Join us on this exciting ride!🎢

@Witoso Witoso added the type:improvement This issue reports a possible enhancement of an existing feature. label Dec 11, 2023
@filipsobol
Copy link
Member

filipsobol commented Dec 11, 2023

As we explained in the first comment, our current setup methods are not optimal. In this RFC, we will dive deeper and expand on our thought process and proposal.

Problems 😓

WYSIWYG editors are one of the most complex frontend projects and this affects current CKEditor 5 installation methods. Moreover, we have added some complexity due to the lack of standardization in the JavaScript ecosystem when we created this project, browser limitations, and most importantly, technical debt.

We feel it is time to remove some of that complexity.

The build step

Currently, the editor code requires a special build step to resolve non-standard CSS and SVG imports and to automatically add required theme styles and translations. Also, the editor itself does not allow dynamic plugin registration.

The consequence of these two technical limitations is that we ended up with multiple distribution options, each serving a different need:

  1. Distribution of pre-built editors with a fixed set of plugins, but without the ability for you to add more of them.
  2. Distribution of complete webpack and Vite setups with CKEditor-specific plugins needed to build the editor that allow you to select the plugins you need and remove everything else from the bundle.
  3. Distribution of DLLs that are pre-built and give you full control over what is included, but depend on the webpack-specific plugin and logic.

In other words, you either have control over the editor bundle or the developer tools you use. This is certainly not typical for a modern library, as you should have control over both.

Deviation from standards and best practices

There are a few areas where we deviate from standards and best practices:

  • Although we use the ESM system, our packages are not shipped as valid ESM packages. This causes problems in Vite.
  • Our code contains side effects and calls browser-specific globals even before the .create() method is called. This causes issues in server-side rendered applications.
  • The JavaScript bundles include inlined CSS. You get everything in one import, but:
    • They cause errors in server-side rendered applications because there is no global document object needed to inject the CSS into the DOM.
    • They make it difficult to style the editor, which is limited to using CSS variables.
    • They impact performance by forcing browsers to do extra work compared to using plain CSS.
    • They prevent parallelization of downloads.
  • Icons can only be changed using the webpack plugin.
  • Translations use the global object. You do not have to register them in the editor configuration, but:
    • They cause errors in server-side rendered applications because there is no access to the global window object.
    • They cause side effects.
    • They pollute the global scope.

Note

We do not plan to support server-side rendering of CKEditor 5 itself. We only want to fix errors thrown by the CKEditor code when other applications render on the server side.

Minor annoyances

There are other smaller issues, like:

  • The ckeditor-duplicated-modules error caused by mistakenly installing plugins in different versions.
  • Difficulty creating universal copy-and-paste code snippets in the documentation that would cover all possible setups.

Goals 🎯

Once we identified the problems, we started looking at how the latest standards and best practices could help us solve them. This also included researching how other popular and modern JavaScript libraries are built and shipped, and what are some of the pain points for their authors and users. This helped us define our goals.

Improve the developer experience

Developer experience is difficult to measure, but you know when a library is doing it right. We currently lack good developer experience when it comes to the editor setup, but we feel like we know what the right direction is to significantly improve it:

  • Be more explicit and avoid magic and side effects. Nothing should happen without the developer's knowledge because things that happen magically are confusing.
  • Adhere to standards because they are a safer bet than custom solutions. They can help avoid unexpected problems with new tools introduced in the future. Standards are also well known to most developers.
  • Distribute ready-to-use code that does not require custom processing, runs directly in the browser, and works the same regardless of the setup (npm or CDN).

Stick with the standards

CKEditor should stand out for its great and unique features, not for its funky installation methods. With this in mind:

  • The distributed JavaScript should:
    • Be distributed as a valid ESM.
    • Be standard JavaScript that does not require CKEditor-specific plugins, so it runs in any project and works with any bundler.
    • Not contain SVG imports, but have them converted to strings.
    • Have no side effects, nor access any browser-specific globals (like document or window) before the .create() method is called to avoid problems when using the editor in server-side rendered applications.
  • The distributed CSS should be:
    • Standard CSS that does not require processing with PostCSS.
    • Distributed separately from JavaScript to allow parallel downloading and easy overriding.
  • The SVG icons should be easy to change using the editor configuration.
  • The translations should not create a global object and pollute the scope. They should be passed to the editor configuration.
  • The ckeditor5 package should act as a central point for developers and export everything from all open-source packages to:
    • Reduce the number of dependencies that need to be synchronized to avoid the ckeditor-duplicated-modules error.
    • Eliminate the need to install new packages when extending the editor with new plugins.
    • Hide implementation details and a huge package ecosystem.
    • Aggregate CSS and translations to avoid having to install them separately for each plugin.
    • Improve the CDN loading performance, as one large download is faster than many smaller ones, even when using HTTP/2.

Future 🚀

The goals described above will allow us to reduce the number of installation methods to just two: npm and CDN. This is what the CKEditor setup will likely look like in both methods after the changes.

npm setup

Below is the minimal setup you will need to create the editor in a regular JavaScript or TypeScript project. There are a few things to note about this example:

  • All plugins are imported from the ckeditor5 package.
  • Translations are explicitly added to the editor configuration object.
  • Styles are separated from the JavaScript bundle and explicitly imported.
  • No special setup is required. You can run this code in any frontend metaframework or build it with any bundler without any CKEditor-specific plugins.
import { ClassicEditor, Essentials, Paragraph } from 'ckeditor5';
import translations from 'ckeditor5/translations/pl.js';

import 'ckeditor5/styles.css';

await ClassicEditor.create( document.querySelector( '#editor' ), {
  plugins: [
    Essentials,
    Paragraph,
  ],
  toolbar: {
    items: [ 'undo', 'redo' ]
  },
  translations
} );

CDN setup

Below is the same setup using the CDN solution. Same as above, in this setup:

  • All plugins are imported from a single URL.
  • Translations are explicitly added to the editor configuration object.
  • Styles are separated from the JavaScript bundle and added explicitly.

This setup uses importmaps. This allows you to use the same import paths inside the <script> tag as in the npm setup.

<link rel="stylesheet" href="<CDN_LINK>/ckeditor5/dist/styles.css">

<script type="importmap">
{
  "imports": {
    "ckeditor5": "<CDN_LINK>/ckeditor5/dist/index.min.js",
    "ckeditor5/": "<CDN_LINK>/ckeditor5/dist/"
  }
}
</script>
<script type="module">
import { ClassicEditor, Essentials, Paragraph } from 'ckeditor5';
import translations from 'ckeditor5/translations/pl.js';

await ClassicEditor.create( document.querySelector( '#editor' ), {
  plugins: [
    Essentials,
    Paragraph,
  ],
  toolbar: {
    items: [ 'undo', 'redo' ]
  },
  translations
} );
</script>

Easier icons overriding

To simplify overriding the editor icons, we will introduce a new icons configuration option. It takes an object where the key is the icon identifier and the value is the stringified SVG.

await ClassicEditor.create( document.querySelector( '#editor' ), {
  // Other options
+  icons: {
+    bold: '<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">...</svg>'
+  }
} );

No more CKEditor-specific setups

Once the code we distribute no longer requires custom processors, you can remove CKEditor-specific plugins from your webpack or Vite setup. If you already have a JavaScript or TypeScript project, you can remove the dedicated CKEditor setup and import the editor directly inside your project.

Vite

-import { createRequire } from 'node:module';
-const require = createRequire( import.meta.url );

import { defineConfig } from 'vite';
-import ckeditor5 from '@ckeditor/vite-plugin-ckeditor5';

export default defineConfig( {
    plugins: [
-        ckeditor5( { theme: require.resolve( '@ckeditor/ckeditor5-theme-lark' ) } )
    ]
} );

webpack

- const { bundler, styles } = require( '@ckeditor/ckeditor5-dev-utils' );
- const { CKEditorTranslationsPlugin } = require( '@ckeditor/ckeditor5-dev-translations' );

module.exports = {
  // Some configuration options are skipped for readability.

  plugins: [
-    new CKEditorTranslationsPlugin( {
-      language: 'en',
-      additionalLanguages: 'all'
-    } ),
-    new webpack.BannerPlugin( {
-      banner: bundler.getLicenseBanner(),
-      raw: true
-    } )
  ],

  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
-          {
-            loader: 'postcss-loader',
-            options: {
-              postcssOptions: styles.getPostCssConfig( {
-                themeImporter: {
-                  themePath: require.resolve( '@ckeditor/ckeditor5-theme-lark' )
-                },
-                minify: true
-              } )
-            }
-          }
        ]
      }
    ]
  }
};

Fewer dependencies

Because the ckeditor5 package contains all open-source packages, you can remove all other packages from your dependencies. We will also distribute a similar package for our commercial plugins.

"dependencies": {
-  "@ckeditor/ckeditor5-editor-classic": "42.0.0",
-  "@ckeditor/ckeditor5-essentials": "42.0.0",
-  "@ckeditor/ckeditor5-highlight": "42.0.0",
-  "@ckeditor/ckeditor5-list": "42.0.0",
-  "@ckeditor/ckeditor5-paragraph": "42.0.0",
-  "@ckeditor/ckeditor5-table": "42.0.0",
-  "@ckeditor/ckeditor5-theme-lark": "42.0.0",
   "ckeditor5": "42.0.0"
}

DLLs and predefined builds

Until now, predefined builds and DLLs were a good choice for those who wanted to avoid the build step. The main difference between them is that predefined builds do not give you any control over the included plugins, while DLLs do.

Since the new setup methods no longer require a build step while still giving you full control over the plugins used, there will be no need to use predefined builds and DLLs. We plan to slowly deprecate them.

You can find more details in the RFC dedicated to DLLs.

Initial delivery plan

At the time of writing this RFC, we have already passed the proof-of-concept stage with promising results. We have also begun the process of rewriting and restructuring our documentation.

Unfortunately, we have found that it is not possible to introduce new setup methods without introducing some breaking changes. We have tried to minimize the impact on existing projects by phasing them in so that the effort required does not block or discourage you from upgrading.

This project is expected to be delivered in the first and second quarters of 2024.

Phase 1. Foundation

In the first phase, we will introduce breaking changes necessary to ship the new installation methods. These changes will allow us to continue supporting projects created using the old methods. In it, we will:

There may be other breaking changes in this release unrelated to this RFC.

Phase 2. Release

In second phase we will introduce the new setup methods. They will be opt-in and the old ones will continue to work, but we are still discussing for how long. However, from then on, we will start promoting the new methods as defaults. We will also work with package authors to help them migrate their plugins.

Breaking changes in this release only apply to projects that upgrade to the new setup methods.

In this release, we will:

  • Export the editor core and all open-source packages from the ckeditor5 package.
  • Extract styles from JavaScript bundles into separate CSS files.
  • Change the way translations are generated. They will need to be passed to the editor configuration instead of relying on the global object.
  • Allow overriding icons using the editor configuration.

Phase 3. Elevation

In the last phase, we will continue to improve the developer experience by addressing issues with using the editor in server-side rendered applications, improving error handling, and potentially upgrading released code to ES2022 to improve performance and readability.

"In the meantime"

We are also very excited about a companion project that will simplify the installation and setup process even more. It will remain a secret for now 🤫.

Probable migration paths 🛣️

Your migration path will depend on your current setup and whether you use the CDN or npm as the new method. In the migration paths described below, we have made assumptions about which version you are more likely to use.

The migration paths may change slightly before the final release.

CDN

Currently, our CDN only distributes predefined builds with a known list of plugins. After the changes, we will distribute the ckeditor5 package containing all the open-source plugins, so you have full control over which ones you use, as well as loaded styles, and translations.

Predefined builds have a known set of plugins, so with the release, we will provide code you can copy and paste in place of the old setup. There will thus be no extra work on your end.

Some of you may wonder how bundling all the packages together will affect the size of the distributed file. The good news is that it will not change much. The predefined builds already include the editor's core and the heaviest plugins. We estimate that the new approach will increase the download size by about 20%, although the exact number is not yet known. However, we are considering a way to generate a personalized CDN URL with only the code you need and everything else removed.

Predefined builds

As with the CDN, the predefined builds have a known list of plugins, so with the release, we will provide code you can copy and paste in place of the old setup. There will thus be no extra work on your end.

However, if you are using a frontend metaframework (like Next.js, Nuxt, SvelteKit) or bundler (like webpack, Rollup, Vite), then unlike the CDN, it should remove all unused code, likely resulting in a smaller bundle compared to the current predefined builds.

Customized builds / integrating from source / online builder

Custom builds no longer require a separate webpack or Vite setup. If you want to continue using them, you can. The CKEditor-specific plugins will no longer be needed.

However, if you would like to remove this setup, and you are already using a frontend metaframework (like Next.js, Nuxt, SvelteKit) or bundler (like webpack, Rollup, Vite), you can import the CKEditor code directly into your project.

When it comes to the editor code, you will need to:

  • Remove all CKEditor dependencies except for the ckeditor5 package.
  • Import all plugins from ckeditor5 instead of individual packages.
  • Add the CSS import.

We will provide code examples to help you migrate, but the exact configuration will depend on the plugins you use.

DLLs

The most notable difference between the new installation methods and DLLs is that the new approach will not expose the CKEditor5 global object.

Other than that, as shown in the "Future" section, you will also need to:

  • Import plugin and editor classes from the ckeditor5 package instead of relying on the CKEditor5 global object.
  • Add the CSS import.

We will provide code examples to help you migrate, but the exact configuration will depend on the plugins you use.

You can find more details in the RFC dedicated to DLLs.

Plugin authors

For those of you using the package generator to create custom plugins, we will introduce a new command that will build the package for the new format. The command will output a dist folder containing a JavaScript bundle, and optionally a separate CSS and global-free translation files.

You will need to decide if you want to support both the old and new setup methods or just the new one. Based on this, the old setup may still work, but the setup method for the new build will be similar to what we showed in the "Future" section, and will require you to:

  • Register a plugin itself (no change here).
  • Import CSS styles if your plugin has custom styles.
  • Add translations to the editor configuration if your plugin includes them.
+ import { MyPlugin } from '<path_to_plugin>';
+ import MyTranslations from '<path_to_plugin>/translations/<lang_code>.js';

+import '<path_to_plugin>/styles.css';

await ClassicEditor.create( document.querySelector( '#editor' ), {
  plugins: [
    MyPlugin
  ],
  translations: [
+    MyTranslations,
    // Other translations.
  ]
} );
</script>

Feedback 💬

We've done our best to thoroughly examine the existing problems, consider dozens of integration scenarios that we know of, research how other libraries and components have approached the problems, and finally how we can apply the modern standards to our specific needs. However, we may have missed something, and that is where we need your feedback.

Let us know if you like the proposed changes, if you have questions or doubts, or just react with 👍 or 👎 below the RFC so we know if we are on the right track.

We'll adjust the RFC in response to your comments or as the project evolves. To keep everyone up to date, we will add a new comment below whenever we make changes.

@filipsobol
Copy link
Member

We understand that theory can make some concepts difficult to understand, and some of you may want to try out the new installation methods right away. That's why we've prepared a small demo that shows how the new installation method works with Vite and Webpack, but you can also run it in your setup. For more information, check out this repository, but please note that this demo is limited and by no means production-ready.

@Witoso Witoso pinned this issue Dec 11, 2023
@Reinmar Reinmar changed the title 🦸 Improving CKEditor 5 installation methods 🦸 [RFC] Improving CKEditor 5 installation methods Dec 11, 2023
@Witoso
Copy link
Member Author

Witoso commented Dec 12, 2023

Happy to tag, and invite users that over past years contributed to the development through issues, comments, and feedback: @huzedong2015 @mmichaelis @dtdesign @slotterbackW @lauriii @wimleers @star-szr @Inviz @Kocal @urbanspr1nter

@Kocal
Copy link
Contributor

Kocal commented Dec 12, 2023

Hi 👋🏻

I skimmed through all of this and saw some interesting things, I'll read better later after work :)

@dtdesign
Copy link

I really appreciate the vast amount of thoughts you put into this to address some existing pain points. 👍

The icons are a real pain point because it is common for sites to use an existing icon set and although I do like most of the editor icons, sometimes it makes more sense to swap them out for a unified appearance. Replacing icons with a HTML string is a great idea because it is dead simple and flexible at the same time, for example we use a custom web component <fa-icon> to embed icons.

I’m also glad to see that you are taking steps to extract the CSS from the bundle. During a public beta test I did notice that the style tags caused a significant slow-down because it would trigger style calculations plus having to start the browser’s CSS parser a bazillion times isn’t cheap. However, that is already possible today with the MiniCssExtractPlugin that exports the CSS into a single file: https://github.com/WoltLab/editor/blob/4890e96907757b66c2ea29dfdb4f92fc6692d79d/webpack.config.js (LGPL v2.1, feel free to steal).

While you are at it, I also added the postcss-hover-media-feature to the built step to put all :hover selectors behind @media (hover: hover). It is very well supported in both recent and somewhat dated browsers and it prevents all those hover effects from being a sticky pain on touch devices. It’s not exactly an issue with the installation method, but it sort of overlaps with the limited CSS customization options.

Lastly, the plugins are a real issue for us. Our software is designed to run on plain web hosting accounts without access to a shell or similar. That means that the customer on average has no means to compile the bundle on their own, so whatever plugins we ship are set in stone. We solved this issue by exposing the bundled classes through a custom export so that plugins for our software can dynamically define plugins for the editor by relying on all the exported classes. It’s a bit ugly but it works, however, I don’t know if this can be solved in a better way with webpack.

@Inviz
Copy link
Contributor

Inviz commented Dec 12, 2023

Looking forward for this to evolve into headless builds at some point. Ability to build without any ui plugins would be greatly appreciated.

@quicksketch
Copy link

This proposal gives me a lot of concern. The transition from CKE4 to 5 has already been extraordinarily painful. Now that CKE4 is EOL, most projects depending on CKE have made the jump. What I'm reading here is that now after finally figuring out CKE5, pretty much every plugin that extends CKE5 is going to need a substantial effort to keep working (probably forking for pre and post this change). It will depend on the migration tools/methods available, but at first blush this proposal sounds like it puts too much emphasis on a shiny, better future without enough regard to the existing projects that will be substantially disrupted.

From what I've seen in the CMS-world, the DLL builds are the only realistic compilation option currently, since any CMS with their own module/plugin system need to be able to enable CKEditor plugins without recompiling the main bundle. I'm not sure if it's implied in the RFC, but an additional goal should be:

  • Plugins can be distributed and loaded separately from the main compiled bundle, across directories and domains.

Plain vanilla JS plugins should be possible to be loaded without any compilation at all. If the CKEditor5 global is eliminated I'm concerned that won't be possible.

@urbanspr1nter
Copy link
Contributor

Happy to tag, and invite users that over past years contributed to the development through issues, comments, and feedback: @huzedong2015 @mmichaelis @dtdesign @slotterbackW @lauriii @wimleers @star-szr @Inviz @Kocal @urbanspr1nter

Thanks @Witoso - Will take a look at the end of week/weekend.

@Kocal
Copy link
Contributor

Kocal commented Dec 13, 2023

Hi again :)

I'm really happy for the CKEditor-specific setups removal, I know you did what you could, but building CKEditor 5 from source is a really big mess, specially if you want an optimized CSS file, and it's slow, surely due to the use of webpack?

Anyway, all this good news will allow me to lighten my configuration file like this 😄 :

const path = require('path');
const webpack = require('webpack');
-const { CKEditorTranslationsPlugin } = require('@ckeditor/ckeditor5-dev-translations');
-const { styles } = require('@ckeditor/ckeditor5-dev-utils');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
-const postCssContentStylesPlugin = require('./build/postcss/list-content-styles-plugin');
-const { CKEditorContentStylesPlugin } = require('./build/webpack/CKEditorContentStylesPlugin');
-const { CKEditorMinifyStylesPlugin } = require('./build/webpack/CKEditorMinifyStylesPlugin');

-/**
- * Custom Webpack configuration for CKEditor 5, as we want to keep it isolated from the rest of the application/toolchain.
- * It also extracts the content styles from the built editor CSS files, to a "content styles" CSS file.
- *
- * @see https://ckeditor.com/docs/ckeditor5/latest/installation/advanced/alternative-setups/integrating-from-source-webpack.html
- * @see https://github.com/ckeditor/ckeditor5/blob/master/scripts/docs/build-content-styles.js
- */

-const contentRules = {
-    selector: [],
-    variables: [],
-    atRules: {},
-};

-const postCssConfig = styles.getPostCssConfig({
-    themeImporter: {
-        themePath: require.resolve('@ckeditor/ckeditor5-theme-lark'),
-    },
-    minify: false,
-});
-postCssConfig.plugins.push(postCssContentStylesPlugin(contentRules));

module.exports = {
    entry: {
        'editors/default': './src/editors/default.ts',
        'editors/admin': './src/editors/admin.ts',
        'editors/front_forum': './src/editors/front_forum.ts',
        'editors/front_forum_admin': './src/editors/front_forum_admin.ts',
    },
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: '[name].js',
        library: {
            name: '[name]',
            type: 'umd',
        },
        clean: true,
    },
    devtool: false,
    resolve: {
        extensions: ['.tsx', '.ts', '.js'],
    },
    module: {
        rules: [
            {
                test: /.([cm]?ts|tsx)$/,
                loader: 'ts-loader',
            },
            {
                test: /ckeditor5-[^/\\]+[/\\]theme[/\\]icons[/\\][^/\\]+\.svg$/,
                type: 'asset/source',
            },
            {
                test: /ckeditor5-[^/\\]+[/\\]theme[/\\].+\.css$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    'css-loader',
                    {
                        loader: 'postcss-loader',
                        options: {
                            postcssOptions: {
-                                ...postCssConfig,
                                config: false,
                            },
                        },
                    },
                ],
            },
        ],
    },
    plugins: [
-        new CKEditorTranslationsPlugin({
-            // See https://ckeditor.com/docs/ckeditor5/latest/features/ui-language.html
-            language: 'fr',
-            additionalLanguages: ['en', 'de', 'it', 'es', 'pl', 'nl'],
-            buildAllTranslationsToSeparateFiles: true,
-            packageNamesPattern: /([/\\]ckeditor5-[^/\\]+[/\\])|(src\/plugins\/[^/\\]+)/,
-            sourceFilesPattern: /([/\\]ckeditor5-[^/\\]+[/\\]src)|(src\/plugins\/[^/\\]+)[/\\].+\.[jt]s$/,
-        }),
        new MiniCssExtractPlugin({
            filename: '[name].css',
        }),
        // https://github.com/TypeStrong/ts-loader#usage-with-webpack-watch
        new webpack.WatchIgnorePlugin({
            paths: [/\.js$/, /\.d\.[cm]ts$/, /\.txt$/],
        }),
-        new CKEditorContentStylesPlugin({
-            contentRules,
-        }),
-        new CKEditorMinifyStylesPlugin(),
    ],
};

However, I have a have one concern about how translations will be loaded.

In our CMS app, we have many languages and therefore as many CKEditor translations .js files. We don't load every translations at once, but only the needed one, through a dynamic import:

async function loadEditor({ editor, language }) {
    import(`../build/ckeditor/dist/translations/${language}.js`);

    // editor loading ...
}

Do you think this would be possible with the proposed solutions?
Could translations accepts a Promise? Or should I wait my translation to be loaded before creating the Editor like this? :

async function loadEditor({ editor, language }) {
    const translations = await Promise.all([
        // `build/ckeditor` is a directory dedicated to build CKEditor
        import(`../build/ckeditor/dist/translations/${language}.js`),
        
        // and what about plugins's translations?
   ]);

    return await ClassicEditor.create('...', {
        translations,   
    });
}

Thanks! :)

@Witoso
Copy link
Member Author

Witoso commented Dec 13, 2023

Thanks for the comments so far 🙏, we will craft a lengthier response a bit later, and probably add details to the RFC body.

@quicksketch, thanks for the remarks! We know that DLLs are used in Drupal ecosystems, and other CMS platforms, and our clients use them as well. We haven't decided on the moment of the DLLs deprecation, but we are preparing for a long time of supporting them.

Plain vanilla JS plugins should be possible to be loaded without any compilation at all. If the CKEditor5 global is eliminated I'm concerned that won't be possible.

This is our goal as well, the new method will not be a blocker here, details will follow :)

@quicksketch
Copy link

Thanks @Witoso. That's a big relief. I'm not a JS expert, but this statement is what had me worried:

Import plugin and editor classes from the ckeditor5 package instead of relying on the CKEditor5 global object.

AFAIK, import statements require a path structure. The DLL approach has allowed plugins to extend CKEditor without knowing anything about where other libraries are located. I'll hold my concerns until there is further clarification.

@urbanspr1nter
Copy link
Contributor

urbanspr1nter commented Dec 14, 2023

@Witoso @filipsobol

Really good stuff! I think most of these are good proposals, and coincidentally, addresses a lot of the pain points I've had in the past! 😁

Overall summary of what I would appreciate seeing:

  1. Option to not include UI components when importing packages. Right now whenever we consume a plugin, we not only get the Editing but also the UI classes within the plugin. Is there some way to avoid this? For instance, hard to take advantage of a potential smaller bundle size as we cannot shake this off on import.
  2. Embedding SVG icons and CSS into the build is unnecessary - I really appreciate seeing the recognition in this concern. Again, another win on loading perf for integrators who need to have a small bundle size.
  3. Most importantly, I would like to see documentation which directly reflects how we should really build from source. I've been successful at this in the past, but there are some gotchas that I keep forgetting to help with updating the documentation with.

As you can probably notice, my main concern has always been the bundling of some of the UI elements as opposed to the process in creating the build, but off the top of my head:

I would like to have some clear way to avoid the dreaded duplicated-modules error. For us, we have a strange way of building the source, but it makes it hard to pull down other handy classes and utils and utilize (impossible really)

@filipsobol
Copy link
Member

@dtdesign

While you are at it, I also added the postcss-hover-media-feature to the built step to put all :hover selectors behind @media (hover: hover). It is very well supported
in both recent and somewhat dated browsers and it prevents all those
hover effects from being a sticky pain on touch devices.

Thank you, we will investigate how @media (hover: hover) can improve the mobile experience.

Lastly, the plugins are a real issue for us. Our software is designed to
run on plain web hosting accounts without access to a shell or similar.
That means that the customer on average has no means to compile the
bundle on their own, so whatever plugins we ship are set in stone. We
solved this issue by exposing the bundled classes through a custom export
so that plugins for our software can dynamically define plugins for the
editor by relying on all the exported classes. It’s a bit ugly but it
works, however, I don’t know if this can be solved in a better way with
webpack.

Although we will be encouraging the use of the ckeditor5 package, you can still import from individual plugins. When you're ready to migrate to the new installation method, you'll need to append all imports with /dist/index.js (e.g. @ckeditor/ckeditor5-alignment/dist/index.js) and import CSS styles and translations as shown in the RFC. This is a good way if you want to migrate, but also want to minimize changes in your project.

However, our new CDN build may be ideal for your use case because it does not require compiling or bundling. As shown in the RFC, you'll be able to access all plugins and the editor core from one file thanks to importmaps. This means that unless you need to use TypeScript, you can skip the build step for custom plugins and run them directly in the browser. I've updated our demo repository to show this in action. In the new "browser demo", we create an editor with the most basic plugins and register a custom plugin that runs directly in the browser without any processing.

If you need to process your source code (e.g. because you're using TypeScript), we’ll provide the tools necessary to create CDN builds for custom plugins.

@filipsobol
Copy link
Member

@Kocal

Reducing the length of the webpack config is always nice, isn't it? 🙂

In our CMS app, we have many languages and therefore as many CKEditor translations .js files. We don't load every translations at once, but only the needed one, through a dynamic import:
[…]
Do you think this would be possible with the proposed solutions?

Dynamic import should work just the same.

Could translations accepts a Promise? Or should I wait my translation to be loaded before creating the Editor like this?

We’ll discuss this internally, but it's much more likely that you'll need to resolve the promise before creating the editor.

@filipsobol
Copy link
Member

filipsobol commented Dec 15, 2023

@urbanspr1nter

Option to not include UI components when importing packages. Right now whenever we consume a plugin, we not only get the Editing but also the UI classes within the plugin. Is there some way to avoid this? For instance, hard to take advantage of a potential smaller bundle size as we cannot shake this off on import.

It's not in the scope of this initiative, but we're aware of that limitation because it comes back like a boomerang. It’s possible it will be a follow-up after we clean up the installation methods. (cc: @Inviz)

Embedding SVG icons and CSS into the build is unnecessary - I really appreciate seeing the recognition in this concern. Again, another win on loading perf for integrators who need to have a small bundle size.

Unfortunately, SVG icons will still be part of the bundle (as inlined strings). We have looked into making them optional, but that would require introducing a breaking change to the existing installation methods, which we do not want to do, as the changes we are introducing are already major.
They may become optional in the future, but this will likely not happen as part of this initiative.

Most importantly, I would like to see documentation which directly reflects how we should really build from source. I've been successful at this in the past, but there are some gotchas that I keep forgetting to help with updating the documentation with.

We are in the process of restructuring and reworking all of our setup and installation documentation. I can already say that it will be much better.

I would like to have some clear way to avoid the dreaded duplicated-modules
error. For us, we have a strange way of building the source, but it
makes it hard to pull down other handy classes and utils and utilize
(impossible really)

With the ckeditor5 package containing everything, the duplicated-modules error will largely disappear, as you'll have one central entry point and one direct dependency instead of dozens of interdependent packages.

@filipsobol
Copy link
Member

@quicksketch

Thank you for sharing your concerns. We do our best to ensure that the changes we introduce are not disruptive to the CMS platforms and that you have reasonable migration paths.
From the beginning, we knew that because of the way DLLs work and the number of projects that depend on them, they needed to be treated differently than other installation methods. As a result, DLLs will have a longer deprecation window than other installation methods.
In addition, after discussing your concerns internally, we have decided to prepare an additional RFC specific to DLLs that will discuss our reasons for deprecating them, likely migration paths, and timelines. We will also use it to better understand how they are used by projects like yours.

What I'm reading here is that now after finally figuring out CKE5, pretty much every plugin that extends CKE5 is going to need a substantial effort to keep working (probably forking for pre and post this change).

The DLLs and the new package bundles can be generated from the same source code, so there's no need to make forks. We will add a new command to the Package generator to generate the new bundles, and the old commands will continue to work. It will be up to package developers to decide if they want to support only the new method or both. To ensure better interoperability, we’ll recommend releasing both.

From what I've seen in the CMS-world, the DLL builds are the only realistic compilation option currently, since any CMS with their own module/plugin system need to be able to enable CKEditor plugins without recompiling the main bundle.
[..]
Plain vanilla JS plugins should be possible to be loaded without any compilation at all. If the CKEditor5 global is eliminated I'm concerned that won't be possible.

Our new package bundles don’t require compilation or bundling. They also allow creating custom plugins that can be developed and used without bundling/compilation. I've updated our demo repository to show this in action. In the new "browser demo", we create an editor with the most basic plugins and register a custom plugin that runs directly in the browser without any processing.
All of this is possible without global CKEditor5 object.

@quicksketch
Copy link

quicksketch commented Dec 15, 2023

I've updated our demo repository to show this in action. In the new "browser demo", we create an editor with the most basic plugins and register a custom plugin that runs directly in the browser without any processing.
All of this is possible without global CKEditor5 object.

Thanks @filipsobol. The concept of browser importmaps is new to me but using the example repository it demonstrated clearly to me how imports can be done without using path structures within the plugin files. That would allow loading plugins across domains and directories as I was hoping for, and without compilation for the individual plugins.

In addition, after discussing your concerns internally, we have decided to prepare an additional RFC specific to DLLs that will discuss our reasons for deprecating them, likely migration paths, and timelines.

Perfect, thank you very much. The deprecation of DLLs as part of the 40.2.0 release notes without a clear replacement was alarming.

Overall, I think this new approach is much better, and it would be nice to not need special DLL distribution files. I still see the transition to be bumpy, but I'm relieved to see my primary concerns are already addressed.

pomek added a commit to ckeditor/ckeditor5-dev that referenced this issue Apr 23, 2024
Feature (build-tools): First stable release of the `@ckeditor/ckeditor5-dev-build-tools` package for building packages for new installation methods. See ckeditor/ckeditor5#15502.

Feature (dependency-checker): Take exports into account when checking for missing or unused dependencies and dev dependencies.

Fix (dependency-checker): Ignore the `dist/` directory in the dependency checker.
filipsobol added a commit that referenced this issue Apr 23, 2024
Feature: Add bundles for new installation methods. See #15502.

Fix: Change various exports of types and interfaces to type-only exports.

Fix (utils): Allow `Translations.getPluralForm` type to be `null`.
@filipsobol
Copy link
Member

filipsobol commented Apr 25, 2024

We have some exciting news to share about the progress of the new installation methods project.

After about 370 commits and weeks of testing, we are adding the new installation methods to our nightly releases. This marks the beginning of the beta phase of the project. The new builds have no known bugs and are ready for testing. You can check out the updated demo repository for examples of using the new installation methods with Vite, webpack, React or directly in the browser.

In the coming days we'll be updating our Package Generator for those of you who maintain custom CKEditor 5 plugins. This update will include our newly created tool that allows you to build CKEditor integrations for the new installation methods from source code that still uses the old installation methods. This is the same tool we use to build CKEditor 5 itself, and it's only needed for those who want to support both installation methods during the transition period (until the old installation methods are fully deprecated). Those of you who maintain custom plugins and want to switch to the new installation methods all at once do not need it. In fact, you will probably no longer need the package generator anymore and can use any bundler you want or even skip the build step altogether.

The new installation methods are not yet ready for production, but we are getting there. While there are no known issues with the new builds, we are still working on tree shaking improvements and a major overhaul of the documentation.

We expect to reach the release candidate stage in a few short weeks, where we will focus on the final touches and documentation. We will also be working on the migration guides to help you transition from the old installation methods to the new ones.

To help us get there, we encourage you to try the new installation methods and report any problems you encounter. We are aware that the demo repository doesn't cover all possible scenarios, so if you're not sure how to test new builds with your specific setup, please let us know.

github-merge-queue bot pushed a commit to coveo/ui-kit that referenced this issue May 2, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type |
Update |
|---|---|---|---|---|---|---|---|
| [@babel/core](https://babel.dev/docs/en/next/babel-core)
([source](https://togithub.com/babel/babel/tree/HEAD/packages/babel-core))
| [`7.24.4` ->
`7.24.5`](https://renovatebot.com/diffs/npm/@babel%2fcore/7.24.4/7.24.5)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fcore/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fcore/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fcore/7.24.4/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fcore/7.24.4/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| [@babel/preset-env](https://babel.dev/docs/en/next/babel-preset-env)
([source](https://togithub.com/babel/babel/tree/HEAD/packages/babel-preset-env))
| [`7.24.4` ->
`7.24.5`](https://renovatebot.com/diffs/npm/@babel%2fpreset-env/7.24.4/7.24.5)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fpreset-env/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fpreset-env/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fpreset-env/7.24.4/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fpreset-env/7.24.4/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
| [@babel/standalone](https://babel.dev/docs/en/next/babel-standalone)
([source](https://togithub.com/babel/babel/tree/HEAD/packages/babel-standalone))
| [`7.24.4` ->
`7.24.5`](https://renovatebot.com/diffs/npm/@babel%2fstandalone/7.24.4/7.24.5)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fstandalone/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fstandalone/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fstandalone/7.24.4/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fstandalone/7.24.4/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
|
[@ckeditor/jsdoc-plugins](https://togithub.com/ckeditor/ckeditor5-dev/tree/master/packages/jsdoc-plugins)
([source](https://togithub.com/ckeditor/ckeditor5-dev/tree/HEAD/packages/jsdoc-plugins))
| [`39.6.3` ->
`39.8.0`](https://renovatebot.com/diffs/npm/@ckeditor%2fjsdoc-plugins/39.6.3/39.8.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@ckeditor%2fjsdoc-plugins/39.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@ckeditor%2fjsdoc-plugins/39.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@ckeditor%2fjsdoc-plugins/39.6.3/39.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@ckeditor%2fjsdoc-plugins/39.6.3/39.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | minor |
|
[@coveo/relay-event-types](https://togithub.com/coveo/analytics_schema)
| [`7.10.2` ->
`7.10.5`](https://renovatebot.com/diffs/npm/@coveo%2frelay-event-types/7.10.2/7.10.5)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@coveo%2frelay-event-types/7.10.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@coveo%2frelay-event-types/7.10.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@coveo%2frelay-event-types/7.10.2/7.10.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@coveo%2frelay-event-types/7.10.2/7.10.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
|
[@coveo/semantic-monorepo-tools](https://togithub.com/coveo/semantic-monorepo-tools)
| [`2.4.26` ->
`2.4.30`](https://renovatebot.com/diffs/npm/@coveo%2fsemantic-monorepo-tools/2.4.26/2.4.30)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@coveo%2fsemantic-monorepo-tools/2.4.30?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@coveo%2fsemantic-monorepo-tools/2.4.30?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@coveo%2fsemantic-monorepo-tools/2.4.26/2.4.30?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@coveo%2fsemantic-monorepo-tools/2.4.26/2.4.30?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
|
[@lwc/eslint-plugin-lwc](https://togithub.com/salesforce/eslint-plugin-lwc)
| [`1.7.2` ->
`1.8.1`](https://renovatebot.com/diffs/npm/@lwc%2feslint-plugin-lwc/1.7.2/1.8.1)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@lwc%2feslint-plugin-lwc/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@lwc%2feslint-plugin-lwc/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@lwc%2feslint-plugin-lwc/1.7.2/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@lwc%2feslint-plugin-lwc/1.7.2/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | minor |
| [@npmcli/arborist](https://togithub.com/npm/cli)
([source](https://togithub.com/npm/cli/tree/HEAD/workspaces/arborist)) |
[`7.4.2` ->
`7.5.1`](https://renovatebot.com/diffs/npm/@npmcli%2farborist/7.4.2/7.5.1)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@npmcli%2farborist/7.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@npmcli%2farborist/7.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@npmcli%2farborist/7.4.2/7.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@npmcli%2farborist/7.4.2/7.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | minor |
| [@octokit/graphql-schema](https://togithub.com/octokit/graphql-schema)
| [`15.12.0` ->
`15.15.0`](https://renovatebot.com/diffs/npm/@octokit%2fgraphql-schema/15.12.0/15.15.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@octokit%2fgraphql-schema/15.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@octokit%2fgraphql-schema/15.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@octokit%2fgraphql-schema/15.12.0/15.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@octokit%2fgraphql-schema/15.12.0/15.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | minor |
|
[@types/node](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node)
([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node))
| [`20.12.7` ->
`20.12.8`](https://renovatebot.com/diffs/npm/@types%2fnode/20.12.7/20.12.8)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/20.12.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/20.12.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/20.12.7/20.12.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/20.12.7/20.12.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
|
[@types/node](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node)
([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node))
| [`20.12.7` ->
`20.12.8`](https://renovatebot.com/diffs/npm/@types%2fnode/20.12.7/20.12.8)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/20.12.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/20.12.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/20.12.7/20.12.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/20.12.7/20.12.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
|
[@typescript-eslint/eslint-plugin](https://typescript-eslint.io/packages/eslint-plugin)
([source](https://togithub.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin))
| [`7.7.1` ->
`7.8.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/7.7.1/7.8.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2feslint-plugin/7.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2feslint-plugin/7.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2feslint-plugin/7.7.1/7.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2feslint-plugin/7.7.1/7.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | minor |
|
[@typescript-eslint/parser](https://typescript-eslint.io/packages/parser)
([source](https://togithub.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser))
| [`7.7.1` ->
`7.8.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/7.7.1/7.8.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/7.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fparser/7.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fparser/7.7.1/7.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/7.7.1/7.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | minor |
| [actions/checkout](https://togithub.com/actions/checkout) | `1d96c77`
-> `0ad4b8f` | | | | | action | digest |
| [aws-sdk](https://togithub.com/aws/aws-sdk-js) | [`2.1603.0` ->
`2.1612.0`](https://renovatebot.com/diffs/npm/aws-sdk/2.1603.0/2.1612.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/aws-sdk/2.1612.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/aws-sdk/2.1612.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/aws-sdk/2.1603.0/2.1612.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/aws-sdk/2.1603.0/2.1612.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | minor |
| [cypress](https://cypress.io)
([source](https://togithub.com/cypress-io/cypress)) | [`13.8.0` ->
`13.8.1`](https://renovatebot.com/diffs/npm/cypress/13.8.0/13.8.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cypress/13.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cypress/13.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cypress/13.8.0/13.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cypress/13.8.0/13.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| [dayjs](https://day.js.org)
([source](https://togithub.com/iamkun/dayjs)) | [`1.11.10` ->
`1.11.11`](https://renovatebot.com/diffs/npm/dayjs/1.11.10/1.11.11) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/dayjs/1.11.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/dayjs/1.11.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/dayjs/1.11.10/1.11.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/dayjs/1.11.10/1.11.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
| [dompurify](https://togithub.com/cure53/DOMPurify) | [`3.1.0` ->
`3.1.2`](https://renovatebot.com/diffs/npm/dompurify/3.1.0/3.1.2) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/dompurify/3.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/dompurify/3.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/dompurify/3.1.0/3.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/dompurify/3.1.0/3.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
|
[eslint-config-next](https://nextjs.org/docs/app/building-your-application/configuring/eslint#eslint-config)
([source](https://togithub.com/vercel/next.js/tree/HEAD/packages/eslint-config-next))
| [`14.2.2` ->
`14.2.3`](https://renovatebot.com/diffs/npm/eslint-config-next/14.2.2/14.2.3)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/eslint-config-next/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint-config-next/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint-config-next/14.2.2/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint-config-next/14.2.2/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| [i18next](https://www.i18next.com)
([source](https://togithub.com/i18next/i18next)) | [`23.11.2` ->
`23.11.3`](https://renovatebot.com/diffs/npm/i18next/23.11.2/23.11.3) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/i18next/23.11.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/i18next/23.11.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/i18next/23.11.2/23.11.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/i18next/23.11.2/23.11.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
| [jsdoc](https://togithub.com/jsdoc/jsdoc) | [`4.0.2` ->
`4.0.3`](https://renovatebot.com/diffs/npm/jsdoc/4.0.2/4.0.3) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/jsdoc/4.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jsdoc/4.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jsdoc/4.0.2/4.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jsdoc/4.0.2/4.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| [next](https://nextjs.org)
([source](https://togithub.com/vercel/next.js)) | [`14.2.2` ->
`14.2.3`](https://renovatebot.com/diffs/npm/next/14.2.2/14.2.3) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/next/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/next/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/next/14.2.2/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/next/14.2.2/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
| [pino](https://getpino.io)
([source](https://togithub.com/pinojs/pino)) | [`8.20.0` ->
`8.21.0`](https://renovatebot.com/diffs/npm/pino/8.20.0/8.21.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/pino/8.21.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/pino/8.21.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/pino/8.20.0/8.21.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/pino/8.20.0/8.21.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | minor |
| [postcss-mixins](https://togithub.com/postcss/postcss-mixins) |
[`10.0.0` ->
`10.0.1`](https://renovatebot.com/diffs/npm/postcss-mixins/10.0.0/10.0.1)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/postcss-mixins/10.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/postcss-mixins/10.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/postcss-mixins/10.0.0/10.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/postcss-mixins/10.0.0/10.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| prettier-plugin-apex | [`2.1.1` ->
`2.1.3`](https://renovatebot.com/diffs/npm/prettier-plugin-apex/2.1.1/2.1.3)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/prettier-plugin-apex/2.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/prettier-plugin-apex/2.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/prettier-plugin-apex/2.1.1/2.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prettier-plugin-apex/2.1.1/2.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| [puppeteer](https://togithub.com/puppeteer/puppeteer/tree/main#readme)
([source](https://togithub.com/puppeteer/puppeteer)) | [`22.6.5` ->
`22.7.1`](https://renovatebot.com/diffs/npm/puppeteer/22.6.5/22.7.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/puppeteer/22.7.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/puppeteer/22.7.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/puppeteer/22.6.5/22.7.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/puppeteer/22.6.5/22.7.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | minor |
| [serve](https://togithub.com/vercel/serve) | [`14.2.2` ->
`14.2.3`](https://renovatebot.com/diffs/npm/serve/14.2.2/14.2.3) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/serve/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/serve/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/serve/14.2.2/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/serve/14.2.2/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| [vite](https://vitejs.dev)
([source](https://togithub.com/vitejs/vite/tree/HEAD/packages/vite)) |
[`5.2.10` ->
`5.2.11`](https://renovatebot.com/diffs/npm/vite/5.2.10/5.2.11) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/vite/5.2.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vite/5.2.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vite/5.2.10/5.2.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vite/5.2.10/5.2.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| [vue](https://togithub.com/vuejs/core/tree/main/packages/vue#readme)
([source](https://togithub.com/vuejs/core)) | [`3.4.21` ->
`3.4.26`](https://renovatebot.com/diffs/npm/vue/3.4.21/3.4.26) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/vue/3.4.26?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vue/3.4.26?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vue/3.4.21/3.4.26?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vue/3.4.21/3.4.26?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
| [vue-tsc](https://togithub.com/vuejs/language-tools)
([source](https://togithub.com/vuejs/language-tools/tree/HEAD/packages/tsc))
| [`2.0.14` ->
`2.0.16`](https://renovatebot.com/diffs/npm/vue-tsc/2.0.14/2.0.16) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/vue-tsc/2.0.16?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vue-tsc/2.0.16?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vue-tsc/2.0.14/2.0.16?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vue-tsc/2.0.14/2.0.16?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| [zone.js](https://togithub.com/angular/angular)
([source](https://togithub.com/angular/angular/tree/HEAD/packages/zone.js),
[changelog](https://togithub.com/angular/angular/blob/master/packages/zone.js/CHANGELOG.md))
| [`0.14.4` ->
`0.14.5`](https://renovatebot.com/diffs/npm/zone.js/0.14.4/0.14.5) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/zone.js/0.14.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/zone.js/0.14.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/zone.js/0.14.4/0.14.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/zone.js/0.14.4/0.14.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |

---

### Release Notes

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

###
[`v7.24.5`](https://togithub.com/babel/babel/blob/HEAD/CHANGELOG.md#v7245-2024-04-29)

[Compare
Source](https://togithub.com/babel/babel/compare/v7.24.4...v7.24.5)

##### :bug: Bug Fix

-   `babel-plugin-transform-classes`, `babel-traverse`
- [#&#8203;16377](https://togithub.com/babel/babel/pull/16377) fix:
TypeScript annotation affects output
([@&#8203;liuxingbaoyu](https://togithub.com/liuxingbaoyu))
- `babel-helpers`, `babel-plugin-proposal-explicit-resource-management`,
`babel-runtime-corejs3`
- [#&#8203;16440](https://togithub.com/babel/babel/pull/16440) Fix
suppressed error order ([@&#8203;sossost](https://togithub.com/sossost))
- [#&#8203;16408](https://togithub.com/babel/babel/pull/16408) Await
nullish async disposable
([@&#8203;JLHwung](https://togithub.com/JLHwung))

##### :nail_care: Polish

-   `babel-parser`
- [#&#8203;16407](https://togithub.com/babel/babel/pull/16407) Recover
from exported `using` declaration
([@&#8203;JLHwung](https://togithub.com/JLHwung))

##### :house: Internal

-   Other
- [#&#8203;16414](https://togithub.com/babel/babel/pull/16414) Relax
ESLint peerDependency constraint to allow v9
([@&#8203;liuxingbaoyu](https://togithub.com/liuxingbaoyu))
-   `babel-parser`
- [#&#8203;16425](https://togithub.com/babel/babel/pull/16425) Improve
`@babel/parser` AST types
([@&#8203;nicolo-ribaudo](https://togithub.com/nicolo-ribaudo))
- [#&#8203;16417](https://togithub.com/babel/babel/pull/16417) Always
pass type argument to `.startNode`
([@&#8203;nicolo-ribaudo](https://togithub.com/nicolo-ribaudo))
- `babel-helper-create-class-features-plugin`,
`babel-helper-member-expression-to-functions`,
`babel-helper-module-transforms`,
`babel-helper-split-export-declaration`, `babel-helper-wrap-function`,
`babel-helpers`,
`babel-plugin-bugfix-firefox-class-in-computed-class-key`,
`babel-plugin-proposal-explicit-resource-management`,
`babel-plugin-transform-block-scoping`,
`babel-plugin-transform-destructuring`,
`babel-plugin-transform-object-rest-spread`,
`babel-plugin-transform-optional-chaining`,
`babel-plugin-transform-parameters`,
`babel-plugin-transform-private-property-in-object`,
`babel-plugin-transform-react-jsx-self`,
`babel-plugin-transform-typeof-symbol`,
`babel-plugin-transform-typescript`, `babel-traverse`
- [#&#8203;16439](https://togithub.com/babel/babel/pull/16439) Make
`NodePath<T | U>` distributive
([@&#8203;nicolo-ribaudo](https://togithub.com/nicolo-ribaudo))
-   `babel-plugin-proposal-partial-application`, `babel-types`
- [#&#8203;16421](https://togithub.com/babel/babel/pull/16421) Remove
`JSXNamespacedName` from valid `CallExpression` args
([@&#8203;nicolo-ribaudo](https://togithub.com/nicolo-ribaudo))
-   `babel-plugin-transform-class-properties`, `babel-preset-env`
- [#&#8203;16406](https://togithub.com/babel/babel/pull/16406) Do not
load unnecessary Babel 7 syntax plugins in Babel 8
([@&#8203;nicolo-ribaudo](https://togithub.com/nicolo-ribaudo))

##### :running_woman: Performance

-   `babel-helpers`, `babel-preset-env`, `babel-runtime-corejs3`
- [#&#8203;16357](https://togithub.com/babel/babel/pull/16357)
Performance: improve `objectWithoutPropertiesLoose` on V8
([@&#8203;romgrk](https://togithub.com/romgrk))

</details>

<details>
<summary>ckeditor/ckeditor5-dev
(@&#8203;ckeditor/jsdoc-plugins)</summary>

###
[`v39.8.0`](https://togithub.com/ckeditor/ckeditor5-dev/releases/tag/v39.8.0)

[Compare
Source](https://togithub.com/ckeditor/ckeditor5-dev/compare/v39.7.0...v39.8.0)

##### Features

-
**[build-tools](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-build-tools)**:
Update translations plugin to also output UMD build.
([commit](https://togithub.com/ckeditor/ckeditor5-dev/commit/9509c2b3645faa67dda4e48a91181c45632b739c))

##### Released packages

Check out the [Versioning
policy](https://ckeditor.com/docs/ckeditor5/latest/framework/guides/support/versioning-policy.html)
guide for more information.

<details>
<summary>Released packages (summary)</summary>

Releases containing new features:

-
[@&#8203;ckeditor/ckeditor5-dev-build-tools](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-build-tools/v/39.8.0):
v39.7.0 => v39.8.0

Other releases:

-
[@&#8203;ckeditor/ckeditor5-dev-bump-year](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-bump-year/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-ci](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-ci/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-dependency-checker](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-dependency-checker/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-docs](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-docs/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-release-tools](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-release-tools/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-stale-bot](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-stale-bot/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-tests](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-tests/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-transifex](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-transifex/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-translations](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-translations/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-utils](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-utils/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-web-crawler](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-web-crawler/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/jsdoc-plugins](https://www.npmjs.com/package/@&#8203;ckeditor/jsdoc-plugins/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/typedoc-plugins](https://www.npmjs.com/package/@&#8203;ckeditor/typedoc-plugins/v/39.8.0):
v39.7.0 => v39.8.0

</details>

###
[`v39.7.0`](https://togithub.com/ckeditor/ckeditor5-dev/releases/tag/v39.7.0)

[Compare
Source](https://togithub.com/ckeditor/ckeditor5-dev/compare/v39.6.3...v39.7.0)

##### Features

-
**[build-tools](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-build-tools)**:
First stable release of the `@ckeditor/ckeditor5-dev-build-tools`
package for building packages for new installation methods. See
[ckeditor/ckeditor5#15502](https://togithub.com/ckeditor/ckeditor5/issues/15502).
([commit](https://togithub.com/ckeditor/ckeditor5-dev/commit/036f52b6c55df2dda9f7c9982e98e2cc58b1d002))
-
**[dependency-checker](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-dependency-checker)**:
Take exports into account when checking for missing or unused
dependencies and dev dependencies.
([commit](https://togithub.com/ckeditor/ckeditor5-dev/commit/036f52b6c55df2dda9f7c9982e98e2cc58b1d002))

##### Bug fixes

-
**[dependency-checker](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-dependency-checker)**:
Ignore the `dist/` directory in the dependency checker.
([commit](https://togithub.com/ckeditor/ckeditor5-dev/commit/036f52b6c55df2dda9f7c9982e98e2cc58b1d002))

##### Released packages

Check out the [Versioning
policy](https://ckeditor.com/docs/ckeditor5/latest/framework/guides/support/versioning-policy.html)
guide for more information.

<details>
<summary>Released packages (summary)</summary>

New packages:

-
[@&#8203;ckeditor/ckeditor5-dev-build-tools](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-build-tools/v/39.7.0):
v39.7.0

Releases containing new features:

-
[@&#8203;ckeditor/ckeditor5-dev-dependency-checker](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-dependency-checker/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-utils](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-utils/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/typedoc-plugins](https://www.npmjs.com/package/@&#8203;ckeditor/typedoc-plugins/v/39.7.0):
v39.6.3 => v39.7.0

Other releases:

-
[@&#8203;ckeditor/ckeditor5-dev-bump-year](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-bump-year/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-ci](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-ci/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-docs](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-docs/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-release-tools](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-release-tools/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-stale-bot](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-stale-bot/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-tests](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-tests/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-transifex](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-transifex/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-translations](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-translations/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-web-crawler](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-web-crawler/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/jsdoc-plugins](https://www.npmjs.com/package/@&#8203;ckeditor/jsdoc-plugins/v/39.7.0):
v39.6.3 => v39.7.0

</details>

</details>

<details>
<summary>coveo/analytics_schema
(@&#8203;coveo/relay-event-types)</summary>

###
[`v7.10.5`](https://togithub.com/coveo/analytics_schema/compare/9fed9fdb078f3ddb6bb98bdf0f3e5a6e1c9ce973...dbfcdc64222e83bfe3bebd6b76a420d3319d8d78)

[Compare
Source](https://togithub.com/coveo/analytics_schema/compare/9fed9fdb078f3ddb6bb98bdf0f3e5a6e1c9ce973...dbfcdc64222e83bfe3bebd6b76a420d3319d8d78)

###
[`v7.10.4`](https://togithub.com/coveo/analytics_schema/compare/210ec5c9f24698e368eaf3e8a65e07cbb2fe8201...9fed9fdb078f3ddb6bb98bdf0f3e5a6e1c9ce973)

[Compare
Source](https://togithub.com/coveo/analytics_schema/compare/210ec5c9f24698e368eaf3e8a65e07cbb2fe8201...9fed9fdb078f3ddb6bb98bdf0f3e5a6e1c9ce973)

###
[`v7.10.3`](https://togithub.com/coveo/analytics_schema/compare/4770d29d82611c5eb068113822aeb578fa3aaafe...210ec5c9f24698e368eaf3e8a65e07cbb2fe8201)

[Compare
Source](https://togithub.com/coveo/analytics_schema/compare/4770d29d82611c5eb068113822aeb578fa3aaafe...210ec5c9f24698e368eaf3e8a65e07cbb2fe8201)

</details>

<details>
<summary>coveo/semantic-monorepo-tools
(@&#8203;coveo/semantic-monorepo-tools)</summary>

###
[`v2.4.30`](https://togithub.com/coveo/semantic-monorepo-tools/blob/HEAD/CHANGELOG.md#2430-2024-04-30)

[Compare
Source](https://togithub.com/coveo/semantic-monorepo-tools/compare/v2.4.29...v2.4.30)

###
[`v2.4.29`](https://togithub.com/coveo/semantic-monorepo-tools/blob/HEAD/CHANGELOG.md#2429-2024-04-29)

[Compare
Source](https://togithub.com/coveo/semantic-monorepo-tools/compare/v2.4.28...v2.4.29)

###
[`v2.4.28`](https://togithub.com/coveo/semantic-monorepo-tools/blob/HEAD/CHANGELOG.md#2428-2024-04-26)

[Compare
Source](https://togithub.com/coveo/semantic-monorepo-tools/compare/v2.4.27...v2.4.28)

###
[`v2.4.27`](https://togithub.com/coveo/semantic-monorepo-tools/blob/HEAD/CHANGELOG.md#2427-2024-04-25)

[Compare
Source](https://togithub.com/coveo/semantic-monorepo-tools/compare/v2.4.26...v2.4.27)

</details>

<details>
<summary>salesforce/eslint-plugin-lwc
(@&#8203;lwc/eslint-plugin-lwc)</summary>

###
[`v1.8.1`](https://togithub.com/salesforce/eslint-plugin-lwc/compare/v1.8.0...v1.8.1)

[Compare
Source](https://togithub.com/salesforce/eslint-plugin-lwc/compare/v1.8.0...v1.8.1)

###
[`v1.8.0`](https://togithub.com/salesforce/eslint-plugin-lwc/releases/tag/v1.8.0)

[Compare
Source](https://togithub.com/salesforce/eslint-plugin-lwc/compare/v1.7.2...v1.8.0)

#### What's Changed

- chore: dependencies update by
[@&#8203;ravijayaramappa](https://togithub.com/ravijayaramappa) in
[https://github.com/salesforce/eslint-plugin-lwc/pull/143](https://togithub.com/salesforce/eslint-plugin-lwc/pull/143)
- chore: update non-breaking dependencies by
[@&#8203;nolanlawson](https://togithub.com/nolanlawson) in
[https://github.com/salesforce/eslint-plugin-lwc/pull/145](https://togithub.com/salesforce/eslint-plugin-lwc/pull/145)
- chore(deps): bump semver from 6.3.0 to 7.6.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/salesforce/eslint-plugin-lwc/pull/146](https://togithub.com/salesforce/eslint-plugin-lwc/pull/146)
- chore: node v20 by [@&#8203;ekashida](https://togithub.com/ekashida)
in
[https://github.com/salesforce/eslint-plugin-lwc/pull/147](https://togithub.com/salesforce/eslint-plugin-lwc/pull/147)
- feat: add valid graphql wire adapter callback parameters rule by
[@&#8203;emanchan](https://togithub.com/emanchan) in
[https://github.com/salesforce/eslint-plugin-lwc/pull/144](https://togithub.com/salesforce/eslint-plugin-lwc/pull/144)

#### New Contributors

- [@&#8203;emanchan](https://togithub.com/emanchan) made their first
contribution in
[https://github.com/salesforce/eslint-plugin-lwc/pull/144](https://togithub.com/salesforce/eslint-plugin-lwc/pull/144)

**Full Changelog**:
https://github.com/salesforce/eslint-plugin-lwc/compare/v1.7.2...v1.8.0

</details>

<details>
<summary>npm/cli (@&#8203;npmcli/arborist)</summary>

###
[`v7.5.1`](https://togithub.com/npm/cli/blob/HEAD/workspaces/arborist/CHANGELOG.md#751-2024-04-30)

[Compare Source](https://togithub.com/npm/cli/compare/v7.5.0...v7.5.1)

##### Bug Fixes

-
[`a1b95eb`](https://togithub.com/npm/cli/commit/a1b95ebeaf7bf32cf0c16605ad836e74370e2e24)
[#&#8203;7453](https://togithub.com/npm/cli/pull/7453) linting:
no-unused-vars ([@&#8203;wraithgar](https://togithub.com/wraithgar))
-
[`abcbc54`](https://togithub.com/npm/cli/commit/abcbc545ca226dfc39821200f2a0c9e122b400dd)
[#&#8203;7430](https://togithub.com/npm/cli/pull/7430) reify: cleanup of
Symbols ([#&#8203;7430](https://togithub.com/npm/cli/issues/7430))
([@&#8203;wraithgar](https://togithub.com/wraithgar))
-
[`57ebebf`](https://togithub.com/npm/cli/commit/57ebebf03d55d4eda2b6439149a97b595a191aaf)
[#&#8203;7418](https://togithub.com/npm/cli/pull/7418) update
repository.url in package.json
([#&#8203;7418](https://togithub.com/npm/cli/issues/7418))
([@&#8203;wraithgar](https://togithub.com/wraithgar))

##### Dependencies

-
[`80eec03`](https://togithub.com/npm/cli/commit/80eec03462e5747cb4434d43aff25939826b7850)
[#&#8203;7453](https://togithub.com/npm/cli/pull/7453)
`@npmcli/redact@2.0.0`
-
[`a7145d4`](https://togithub.com/npm/cli/commit/a7145d422485fcbcb9427efa775c15180c7ee1c2)
[#&#8203;7453](https://togithub.com/npm/cli/pull/7453)
`npm-registry-fetch@17.0.0`
-
[`9da5738`](https://togithub.com/npm/cli/commit/9da57388ebd5c643c2a95bbf63abc745cad45ccc)
[#&#8203;7437](https://togithub.com/npm/cli/pull/7437)
`@npmcli/run-script@8.1.0`
([#&#8203;7437](https://togithub.com/npm/cli/issues/7437))

###
[`v7.5.0`](https://togithub.com/npm/cli/blob/HEAD/workspaces/arborist/CHANGELOG.md#750-2024-04-25)

[Compare Source](https://togithub.com/npm/cli/compare/v7.4.2...v7.5.0)

##### Features

-
[`9123de4`](https://togithub.com/npm/cli/commit/9123de4d282bfd19ea17ad613f5a2acab0e0e162)
[#&#8203;7373](https://togithub.com/npm/cli/pull/7373) do all ouput over
proc-log events ([@&#8203;lukekarrys](https://togithub.com/lukekarrys))
-
[`9622597`](https://togithub.com/npm/cli/commit/9622597399ec93224fddf90a9209a98dbcfd6b2f)
[#&#8203;7339](https://togithub.com/npm/cli/pull/7339) refactor terminal
display ([#&#8203;7339](https://togithub.com/npm/cli/issues/7339))
([@&#8203;lukekarrys](https://togithub.com/lukekarrys))

##### Bug Fixes

-
[`78447d7`](https://togithub.com/npm/cli/commit/78447d7a35fab870456ba66eee408b2baddca23e)
[#&#8203;7399](https://togithub.com/npm/cli/pull/7399) prefer
fs/promises over promisify
([#&#8203;7399](https://togithub.com/npm/cli/issues/7399))
([@&#8203;lukekarrys](https://togithub.com/lukekarrys))
-
[`6512112`](https://togithub.com/npm/cli/commit/65121122d99855541f63aa787f8ee8bb4eea4a3f)
[#&#8203;7378](https://togithub.com/npm/cli/pull/7378) use proc-log for
all timers ([@&#8203;lukekarrys](https://togithub.com/lukekarrys))

##### Dependencies

-
[`36adff3`](https://togithub.com/npm/cli/commit/36adff36c41f56315fe582e1e4dda29060f7fdf7)
[#&#8203;7408](https://togithub.com/npm/cli/pull/7408) `pacote@18.0.2`
-
[`486d46c`](https://togithub.com/npm/cli/commit/486d46cd5b5678ad1ab6c23ee12cf7559477805a)
[#&#8203;7408](https://togithub.com/npm/cli/pull/7408)
`@npmcli/installed-package-contents@2.1.0`
-
[`157d0ae`](https://togithub.com/npm/cli/commit/157d0aebfe5710880d0c91bddee970316b8a6612)
[#&#8203;7408](https://togithub.com/npm/cli/pull/7408)
`@npmcli/package-json@5.1.0`
-
[`fc6e291`](https://togithub.com/npm/cli/commit/fc6e291e9c2154c2e76636cb7ebf0a17be307585)
[#&#8203;7392](https://togithub.com/npm/cli/pull/7392) `proc-log@4.2.0`
([#&#8203;7392](https://togithub.com/npm/cli/issues/7392))
-
[`38ed048`](https://togithub.com/npm/cli/commit/38ed048ac0d7a36785dbff0eeca3618cb7f084c5)
[#&#8203;7378](https://togithub.com/npm/cli/pull/7378)
`@npmcli/metavuln-calculator@7.1.0`
-
[`7678a3d`](https://togithub.com/npm/cli/commit/7678a3d92835457bb402c82e4ca7ea3fa734d23b)
[#&#8203;7378](https://togithub.com/npm/cli/pull/7378) `proc-log@4.1.0`
-
[`87f6c09`](https://togithub.com/npm/cli/commit/87f6c094ac47f4e6eb5d5d6a03a0ad97711b51e9)
[#&#8203;7373](https://togithub.com/npm/cli/pull/7373)
`@npmcli/metavuln-calculator@7.0.1`
-
[`b8f8b41`](https://togithub.com/npm/cli/commit/b8f8b414d8ad9635e3efedc6e491c8c6e3df0973)
[#&#8203;7373](https://togithub.com/npm/cli/pull/7373)
`@npmcli/run-script@8.0.0`
-
[`79f79c7`](https://togithub.com/npm/cli/commit/79f79c7460be8a74f2b77c647100bcefd89b2efa)
[#&#8203;7373](https://togithub.com/npm/cli/pull/7373) `proc-log@4.0.0`
-
[`9027266`](https://togithub.com/npm/cli/commit/90272661b16d861a5926af8ec394d32ec0f307fd)
[#&#8203;7373](https://togithub.com/npm/cli/pull/7373) `pacote@18.0.0`
-
[`ee4b3e0`](https://togithub.com/npm/cli/commit/ee4b3e0e741545045dc03741c7147560961d867d)
[#&#8203;7373](https://togithub.com/npm/cli/pull/7373)
`npm-registry-fetch@16.2.1`
-
[`ac98fd3`](https://togithub.com/npm/cli/commit/ac98fd3a8514f2552555d2b8af74a52e64888797)
[#&#8203;7373](https://togithub.com/npm/cli/pull/7373)
`npm-package-arg@11.0.2`
-
[`9351570`](https://togithub.com/npm/cli/commit/93515700efbb2147a6e929cf117da9e6e87c0aca)
[#&#8203;7373](https://togithub.com/npm/cli/pull/7373)
`@npmcli/package-json@5.0.3`

##### Chores

-
[`dd39de7`](https://togithub.com/npm/cli/commit/dd39de7d1da743cbd33b671fa96f66667109b451)
[#&#8203;7411](https://togithub.com/npm/cli/pull/7411) disable selflink
test on apple silicon
([#&#8203;7411](https://togithub.com/npm/cli/issues/7411))
([@&#8203;lukekarrys](https://togithub.com/lukekarrys))

</details>

<details>
<summary>octokit/graphql-schema
(@&#8203;octokit/graphql-schema)</summary>

###
[`v15.15.0`](https://togithub.com/octokit/graphql-schema/releases/tag/v15.15.0)

[Compare
Source](https://togithub.com/octokit/graphql-schema/compare/v15.14.0...v15.15.0)

##### Features

- `codeScanning` for repository rules
([#&#8203;940](https://togithub.com/octokit/graphql-schema/issues/940))
([df869bd](https://togithub.com/octokit/graphql-schema/commit/df869bd87a0eeb99264b6589cb46eb751a1e5dea))

###
[`v15.14.0`](https://togithub.com/octokit/graphql-schema/releases/tag/v15.14.0)

[Compare
Source](https://togithub.com/octokit/graphql-schema/compare/v15.13.0...v15.14.0)

##### Features

- `RepositoryRulesetBypassActor#deployKey`
([#&#8203;938](https://togithub.com/octokit/graphql-schema/issues/938))
([05ee809](https://togithub.com/octokit/graphql-schema/commit/05ee8098aaf15257469f14aeae22f41fac7a9638))

###
[`v15.13.0`](https://togithub.com/octokit/graphql-schema/releases/tag/v15.13.0)

[Compare
Source](https://togithub.com/octokit/graphql-schema/compare/v15.12.0...v15.13.0)

##### Features

- **repository rules:** `fileExtensionRestriction`,
`filePathRestriction`, `maxFilePathLength`, `maxFileSize`
([#&#8203;937](https://togithub.com/octokit/graphql-schema/issues/937))
([518bd2c](https://togithub.com/octokit/graphql-schema/commit/518bd2c325a3518d3f39a077fe8d076547867d17))

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/eslint-plugin)</summary>

###
[`v7.8.0`](https://togithub.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#780-2024-04-29)

[Compare
Source](https://togithub.com/typescript-eslint/typescript-eslint/compare/v7.7.1...v7.8.0)

##### 🩹 Fixes

-   **eslint-plugin:** \[no-unsafe-argument] handle  tagged templates

- **eslint-plugin:** \[prefer-optional-chain] suggests optional chaining
during strict null equality check

- **eslint-plugin:** \[consistent-type-assertions] handle tagged
templates

-   **eslint-plugin:** \[no-unsafe-return] handle union types

-   **eslint-plugin:** \[no-unused-vars] clear error report range

##### ❤️  Thank You

-   auvred
-   Josh Goldberg ✨
-   jsfm01
-   Kim Sang Du
-   YeonJuan

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

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/parser)</summary>

###
[`v7.8.0`](https://togithub.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#780-2024-04-29)

[Compare
Source](https://togithub.com/typescript-eslint/typescript-eslint/compare/v7.7.1...v7.8.0)

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

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

</details>

<details>
<summary>aws/aws-sdk-js (aws-sdk)</summary>

###
[`v2.1612.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216120)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1611.0...v2.1612.0)

- feature: DynamoDB: This release adds support to specify an optional,
maximum OnDemandThroughput for DynamoDB tables and global secondary
indexes in the CreateTable or UpdateTable APIs. You can also override
the OnDemandThroughput settings by calling the ImportTable,
RestoreFromPointInTime, or RestoreFromBackup APIs.
- feature: EC2: This release includes a new API for retrieving the
public endorsement key of the EC2 instance's Nitro Trusted Platform
Module (NitroTPM).
- feature: Personalize: This releases ability to delete users and their
data, including their metadata and interactions data, from a dataset
group.
- feature: RedshiftServerless: Update Redshift Serverless List Scheduled
Actions Output Response to include Namespace Name.

###
[`v2.1611.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216110)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1610.0...v2.1611.0)

- feature: BedrockAgent: This release adds support for using MongoDB
Atlas as a vector store when creating a knowledge base.
- feature: PersonalizeRuntime: This release adds support for a Reason
attribute for predicted items generated by User-Personalization-v2.
- feature: SESV2: Fixes ListContacts and ListImportJobs APIs to use POST
instead of GET.
-   feature: SecurityHub: Updated CreateMembers API request with limits.

###
[`v2.1610.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216100)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1609.0...v2.1610.0)

- feature: ChimeSDKVoice: Due to changes made by the Amazon Alexa
service, GetSipMediaApplicationAlexaSkillConfiguration and
PutSipMediaApplicationAlexaSkillConfiguration APIs are no longer
available for use. For more information, refer to the Alexa Smart
Properties page.
-   feature: CodeArtifact: Add support for the Ruby package format.
- feature: FMS: AWS Firewall Manager now supports the network firewall
service stream exception policy feature for accounts within your
organization.
- feature: Omics: Add support for workflow sharing and dynamic run
storage
- feature: OpenSearch: This release enables customers to create Route53
A and AAAA alias record types to point custom endpoint domain to
OpenSearch domain's dualstack search endpoint.
- feature: PinpointSMSVoiceV2: Amazon Pinpoint has added two new
features Multimedia services (MMS) and protect configurations. Use the
three new MMS APIs to send media messages to a mobile phone which
includes image, audio, text, or video files. Use the ten new protect
configurations APIs to block messages to specific countries.
-   feature: QBusiness: Updates API to latest version.
-   feature: QuickSight: New Q embedding supporting Generative Q\&A
- feature: Route53Resolver: Release of FirewallDomainRedirectionAction
parameter on the Route 53 DNS Firewall Rule. This allows customers to
configure a DNS Firewall rule to inspect all the domains in the DNS
redirection chain (default) , such as CNAME, ALIAS, DNAME, etc., or just
the first domain and trust the rest.
- feature: SageMaker: Amazon SageMaker Training now supports the use of
attribute-based access control (ABAC) roles for training job execution
roles. Amazon SageMaker Inference now supports G6 instance types.

###
[`v2.1609.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216090)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1608.0...v2.1609.0)

- feature: Amplify: Updating max results limit for listing any resources
(Job, Artifacts, Branch, BackendResources, DomainAssociation) to 50 with
the exception of list apps that where max results can be up to 100.
- feature: ConnectCases: This feature releases DeleteField,
DeletedLayout, and DeleteTemplate API's
- feature: Inspector2: Update Inspector2 to include new Agentless API
parameters.
- feature: TimestreamQuery: This change allows users to update and
describe account settings associated with their accounts.
- feature: TranscribeService: This update provides error messaging for
generative call summarization in Transcribe Call Analytics
- feature: TrustedAdvisor: This release adds the
BatchUpdateRecommendationResourceExclusion API to support batch updates
of Recommendation Resource exclusion statuses and introduces a new
exclusion status filter to the ListRecommendationResources and
ListOrganizationRecommendationResources APIs.

###
[`v2.1608.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216080)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1607.0...v2.1608.0)

- feature: CodePipeline: Add ability to manually and automatically roll
back a pipeline stage to a previously successful execution.
- feature: CognitoIdentityServiceProvider: Add LimitExceededException to
SignUp errors
- feature: ConnectCampaigns: This release adds support for specifying if
Answering Machine should wait for prompt sound.
- feature: MarketplaceEntitlementService: Releasing minor endpoint
updates.
- feature: OAM: This release introduces support for Source Accounts to
define which Metrics and Logs to share with the Monitoring Account
- feature: RDS: SupportsLimitlessDatabase field added to
describe-db-engine-versions to indicate whether the DB engine version
supports Aurora Limitless Database.
-   feature: Support: Releasing minor endpoint updates.

###
[`v2.1607.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216070)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1606.0...v2.1607.0)

- feature: AppSync: UpdateGraphQLAPI documentation update and datasource
introspection secret arn update
- feature: FMS: AWS Firewall Manager adds support for network ACL
policies to manage Amazon Virtual Private Cloud (VPC) network access
control lists (ACLs) for accounts in your organization.
- feature: IVS: Bug Fix: IVS does not support arns with the `svs` prefix
- feature: IVSRealTime: Bug Fix: IVS Real Time does not support ARNs
using the `svs` prefix.
- feature: StepFunctions: Add new ValidateStateMachineDefinition
operation, which performs syntax checking on the definition of a Amazon
States Language (ASL) state machine.

###
[`v2.1606.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216060)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1605.0...v2.1606.0)

- feature: DataSync: This change allows users to disable and enable the
schedules associated with their tasks.
- feature: EC2: Launching capability for customers to enable or disable
automatic assignment of public IPv4 addresses to their network interface
- feature: EMRcontainers: EMRonEKS Service support for
SecurityConfiguration enforcement for Spark Jobs.
-   feature: EntityResolution: Support Batch Unique IDs Deletion.
- feature: GameLift: Amazon GameLift releases container fleets support
for public preview. Deploy Linux-based containerized game server
software for hosting on Amazon GameLift.
- feature: SSM: Add SSM DescribeInstanceProperties API to public AWS
SDK.

###
[`v2.1605.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216050)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1604.0...v2.1605.0)

- feature: Bedrock: This release introduces Model Evaluation and
Guardrails for Amazon Bedrock.
- feature: BedrockAgent: Introducing the ability to create multiple data
sources per knowledge base, specify S3 buckets as data sources from
external accounts, and exposing levers to define the deletion behavior
of the underlying vector store data.
- feature: BedrockAgentRuntime: This release introduces zero-setup file
upload support for the RetrieveAndGenerate API. This allows you to chat
with your data without setting up a Knowledge Base.
- feature: BedrockRuntime: This release introduces Guardrails for Amazon
Bedrock.
- feature: CostExplorer: Added additional metadata that might be
applicable to your reservation recommendations.
- feature: EC2: This release introduces EC2 AMI Deregistration
Protection, a new AMI property that can be enabled by customers to
protect an AMI against an unintended deregistration. This release also
enables the AMI owners to view the AMI 'LastLaunchedTime' in
DescribeImages API.
- feature: WorkSpacesWeb: Added InstanceType and MaxConcurrentSessions
parameters on CreatePortal and UpdatePortal Operations as well as the
ability to read Customer Managed Key & Additional Encryption Context
parameters on supported resources (Portal, BrowserSettings,
UserSettings, IPAccessSettings)

###
[`v2.1604.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216040)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1603.0...v2.1604.0)

- feature: BedrockAgent: Releasing the support for simplified
configuration and return of control
- feature: BedrockAgentRuntime: Releasing the support for simplified
configuration and return of control
- feature: PaymentCryptography: Adding support to TR-31/TR-34 exports
for optional headers, allowing customers to add additional metadata
(such as key version and KSN) when exporting keys from the service.
- feature: Route53Profiles: Route 53 Profiles allows you to apply a
central DNS configuration across many VPCs regardless of account.
- feature: SageMaker: This release adds support for Real-Time
Collaboration and Shared Space for JupyterLab App on SageMaker Studio.
- feature: Transfer: Adding new API to support remote directory listing
using SFTP connector

</details>

<details>
<summary>cypress-io/cypress (cypress)</summary>

###
[`v13.8.1`](https://togithub.com/cypress-io/cypress/releases/tag/v13.8.1)

[Compare
Source](https://togithub.com/cypress-io/cypress/compare/v13.8.0...v13.8.1)

Changelog: https://docs.cypress.io/guides/references/changelog#13-8-1

</details>

<details>
<summary>iamkun/dayjs (dayjs)</summary>

###
[`v1.11.11`](https://togithub.com/iamkun/dayjs/releases/tag/v1.11.11)

[Compare
Source](https://togithub.com/iamkun/dayjs/compare/v1.11.10...v1.11.11)

##### Bug Fixes

- day of week type literal
([#&#8203;2630](https://togithub.com/iamkun/dayjs/issues/2630))
([f68d73e](https://togithub.com/iamkun/dayjs/commit/f68d73efe562fdedd9e288ecb0ce6565e602f507))
- improve locale "zh-hk" format and meridiem
([#&#8203;2419](https://togithub.com/iamkun/dayjs/issues/2419))
([a947a51](https://togithub.com/iamkun/dayjs/commit/a947a5171aad5695eaf593bc95fe073de0f0894a))
- Update 'da' locale to match correct first week of year
([#&#8203;2592](https://togithub.com/iamkun/dayjs/issues/2592))
([44b0936](https://togithub.com/iamkun/dayjs/commit/44b0936ad709212b63e48672d8b9c225e2c3b830))
- update locale Bulgarian monthsShort Jan
([#&#8203;2538](https://togithub.com/iamkun/dayjs/issues/2538))
([f0c9a41](https://togithub.com/iamkun/dayjs/commit/f0c9a41c6ec91528f3790e442b0c5dff15a4e640))

</details>

<details>

</details>

---

### Configuration

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

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

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

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

---

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

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/coveo/ui-kit).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMjEuMiIsInVwZGF0ZWRJblZlciI6IjM3LjMzMS4wIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
fpbrault pushed a commit to coveo/ui-kit that referenced this issue May 3, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type |
Update |
|---|---|---|---|---|---|---|---|
| [@babel/core](https://babel.dev/docs/en/next/babel-core)
([source](https://togithub.com/babel/babel/tree/HEAD/packages/babel-core))
| [`7.24.4` ->
`7.24.5`](https://renovatebot.com/diffs/npm/@babel%2fcore/7.24.4/7.24.5)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fcore/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fcore/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fcore/7.24.4/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fcore/7.24.4/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| [@babel/preset-env](https://babel.dev/docs/en/next/babel-preset-env)
([source](https://togithub.com/babel/babel/tree/HEAD/packages/babel-preset-env))
| [`7.24.4` ->
`7.24.5`](https://renovatebot.com/diffs/npm/@babel%2fpreset-env/7.24.4/7.24.5)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fpreset-env/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fpreset-env/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fpreset-env/7.24.4/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fpreset-env/7.24.4/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
| [@babel/standalone](https://babel.dev/docs/en/next/babel-standalone)
([source](https://togithub.com/babel/babel/tree/HEAD/packages/babel-standalone))
| [`7.24.4` ->
`7.24.5`](https://renovatebot.com/diffs/npm/@babel%2fstandalone/7.24.4/7.24.5)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fstandalone/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fstandalone/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fstandalone/7.24.4/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fstandalone/7.24.4/7.24.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
|
[@ckeditor/jsdoc-plugins](https://togithub.com/ckeditor/ckeditor5-dev/tree/master/packages/jsdoc-plugins)
([source](https://togithub.com/ckeditor/ckeditor5-dev/tree/HEAD/packages/jsdoc-plugins))
| [`39.6.3` ->
`39.8.0`](https://renovatebot.com/diffs/npm/@ckeditor%2fjsdoc-plugins/39.6.3/39.8.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@ckeditor%2fjsdoc-plugins/39.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@ckeditor%2fjsdoc-plugins/39.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@ckeditor%2fjsdoc-plugins/39.6.3/39.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@ckeditor%2fjsdoc-plugins/39.6.3/39.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | minor |
|
[@coveo/relay-event-types](https://togithub.com/coveo/analytics_schema)
| [`7.10.2` ->
`7.10.5`](https://renovatebot.com/diffs/npm/@coveo%2frelay-event-types/7.10.2/7.10.5)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@coveo%2frelay-event-types/7.10.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@coveo%2frelay-event-types/7.10.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@coveo%2frelay-event-types/7.10.2/7.10.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@coveo%2frelay-event-types/7.10.2/7.10.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
|
[@coveo/semantic-monorepo-tools](https://togithub.com/coveo/semantic-monorepo-tools)
| [`2.4.26` ->
`2.4.30`](https://renovatebot.com/diffs/npm/@coveo%2fsemantic-monorepo-tools/2.4.26/2.4.30)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@coveo%2fsemantic-monorepo-tools/2.4.30?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@coveo%2fsemantic-monorepo-tools/2.4.30?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@coveo%2fsemantic-monorepo-tools/2.4.26/2.4.30?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@coveo%2fsemantic-monorepo-tools/2.4.26/2.4.30?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
|
[@lwc/eslint-plugin-lwc](https://togithub.com/salesforce/eslint-plugin-lwc)
| [`1.7.2` ->
`1.8.1`](https://renovatebot.com/diffs/npm/@lwc%2feslint-plugin-lwc/1.7.2/1.8.1)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@lwc%2feslint-plugin-lwc/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@lwc%2feslint-plugin-lwc/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@lwc%2feslint-plugin-lwc/1.7.2/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@lwc%2feslint-plugin-lwc/1.7.2/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | minor |
| [@npmcli/arborist](https://togithub.com/npm/cli)
([source](https://togithub.com/npm/cli/tree/HEAD/workspaces/arborist)) |
[`7.4.2` ->
`7.5.1`](https://renovatebot.com/diffs/npm/@npmcli%2farborist/7.4.2/7.5.1)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@npmcli%2farborist/7.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@npmcli%2farborist/7.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@npmcli%2farborist/7.4.2/7.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@npmcli%2farborist/7.4.2/7.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | minor |
| [@octokit/graphql-schema](https://togithub.com/octokit/graphql-schema)
| [`15.12.0` ->
`15.15.0`](https://renovatebot.com/diffs/npm/@octokit%2fgraphql-schema/15.12.0/15.15.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@octokit%2fgraphql-schema/15.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@octokit%2fgraphql-schema/15.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@octokit%2fgraphql-schema/15.12.0/15.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@octokit%2fgraphql-schema/15.12.0/15.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | minor |
|
[@types/node](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node)
([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node))
| [`20.12.7` ->
`20.12.8`](https://renovatebot.com/diffs/npm/@types%2fnode/20.12.7/20.12.8)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/20.12.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/20.12.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/20.12.7/20.12.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/20.12.7/20.12.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
|
[@types/node](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node)
([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node))
| [`20.12.7` ->
`20.12.8`](https://renovatebot.com/diffs/npm/@types%2fnode/20.12.7/20.12.8)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/20.12.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/20.12.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/20.12.7/20.12.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/20.12.7/20.12.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
|
[@typescript-eslint/eslint-plugin](https://typescript-eslint.io/packages/eslint-plugin)
([source](https://togithub.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin))
| [`7.7.1` ->
`7.8.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/7.7.1/7.8.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2feslint-plugin/7.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2feslint-plugin/7.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2feslint-plugin/7.7.1/7.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2feslint-plugin/7.7.1/7.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | minor |
|
[@typescript-eslint/parser](https://typescript-eslint.io/packages/parser)
([source](https://togithub.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser))
| [`7.7.1` ->
`7.8.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/7.7.1/7.8.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/7.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fparser/7.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fparser/7.7.1/7.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/7.7.1/7.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | minor |
| [actions/checkout](https://togithub.com/actions/checkout) | `1d96c77`
-> `0ad4b8f` | | | | | action | digest |
| [aws-sdk](https://togithub.com/aws/aws-sdk-js) | [`2.1603.0` ->
`2.1612.0`](https://renovatebot.com/diffs/npm/aws-sdk/2.1603.0/2.1612.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/aws-sdk/2.1612.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/aws-sdk/2.1612.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/aws-sdk/2.1603.0/2.1612.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/aws-sdk/2.1603.0/2.1612.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | minor |
| [cypress](https://cypress.io)
([source](https://togithub.com/cypress-io/cypress)) | [`13.8.0` ->
`13.8.1`](https://renovatebot.com/diffs/npm/cypress/13.8.0/13.8.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cypress/13.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cypress/13.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cypress/13.8.0/13.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cypress/13.8.0/13.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| [dayjs](https://day.js.org)
([source](https://togithub.com/iamkun/dayjs)) | [`1.11.10` ->
`1.11.11`](https://renovatebot.com/diffs/npm/dayjs/1.11.10/1.11.11) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/dayjs/1.11.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/dayjs/1.11.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/dayjs/1.11.10/1.11.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/dayjs/1.11.10/1.11.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
| [dompurify](https://togithub.com/cure53/DOMPurify) | [`3.1.0` ->
`3.1.2`](https://renovatebot.com/diffs/npm/dompurify/3.1.0/3.1.2) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/dompurify/3.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/dompurify/3.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/dompurify/3.1.0/3.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/dompurify/3.1.0/3.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
|
[eslint-config-next](https://nextjs.org/docs/app/building-your-application/configuring/eslint#eslint-config)
([source](https://togithub.com/vercel/next.js/tree/HEAD/packages/eslint-config-next))
| [`14.2.2` ->
`14.2.3`](https://renovatebot.com/diffs/npm/eslint-config-next/14.2.2/14.2.3)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/eslint-config-next/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint-config-next/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint-config-next/14.2.2/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint-config-next/14.2.2/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| [i18next](https://www.i18next.com)
([source](https://togithub.com/i18next/i18next)) | [`23.11.2` ->
`23.11.3`](https://renovatebot.com/diffs/npm/i18next/23.11.2/23.11.3) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/i18next/23.11.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/i18next/23.11.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/i18next/23.11.2/23.11.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/i18next/23.11.2/23.11.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
| [jsdoc](https://togithub.com/jsdoc/jsdoc) | [`4.0.2` ->
`4.0.3`](https://renovatebot.com/diffs/npm/jsdoc/4.0.2/4.0.3) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/jsdoc/4.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jsdoc/4.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jsdoc/4.0.2/4.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jsdoc/4.0.2/4.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| [next](https://nextjs.org)
([source](https://togithub.com/vercel/next.js)) | [`14.2.2` ->
`14.2.3`](https://renovatebot.com/diffs/npm/next/14.2.2/14.2.3) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/next/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/next/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/next/14.2.2/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/next/14.2.2/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
| [pino](https://getpino.io)
([source](https://togithub.com/pinojs/pino)) | [`8.20.0` ->
`8.21.0`](https://renovatebot.com/diffs/npm/pino/8.20.0/8.21.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/pino/8.21.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/pino/8.21.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/pino/8.20.0/8.21.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/pino/8.20.0/8.21.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | minor |
| [postcss-mixins](https://togithub.com/postcss/postcss-mixins) |
[`10.0.0` ->
`10.0.1`](https://renovatebot.com/diffs/npm/postcss-mixins/10.0.0/10.0.1)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/postcss-mixins/10.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/postcss-mixins/10.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/postcss-mixins/10.0.0/10.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/postcss-mixins/10.0.0/10.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| prettier-plugin-apex | [`2.1.1` ->
`2.1.3`](https://renovatebot.com/diffs/npm/prettier-plugin-apex/2.1.1/2.1.3)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/prettier-plugin-apex/2.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/prettier-plugin-apex/2.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/prettier-plugin-apex/2.1.1/2.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prettier-plugin-apex/2.1.1/2.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| [puppeteer](https://togithub.com/puppeteer/puppeteer/tree/main#readme)
([source](https://togithub.com/puppeteer/puppeteer)) | [`22.6.5` ->
`22.7.1`](https://renovatebot.com/diffs/npm/puppeteer/22.6.5/22.7.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/puppeteer/22.7.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/puppeteer/22.7.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/puppeteer/22.6.5/22.7.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/puppeteer/22.6.5/22.7.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | minor |
| [serve](https://togithub.com/vercel/serve) | [`14.2.2` ->
`14.2.3`](https://renovatebot.com/diffs/npm/serve/14.2.2/14.2.3) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/serve/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/serve/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/serve/14.2.2/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/serve/14.2.2/14.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| [vite](https://vitejs.dev)
([source](https://togithub.com/vitejs/vite/tree/HEAD/packages/vite)) |
[`5.2.10` ->
`5.2.11`](https://renovatebot.com/diffs/npm/vite/5.2.10/5.2.11) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/vite/5.2.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vite/5.2.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vite/5.2.10/5.2.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vite/5.2.10/5.2.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| [vue](https://togithub.com/vuejs/core/tree/main/packages/vue#readme)
([source](https://togithub.com/vuejs/core)) | [`3.4.21` ->
`3.4.26`](https://renovatebot.com/diffs/npm/vue/3.4.21/3.4.26) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/vue/3.4.26?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vue/3.4.26?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vue/3.4.21/3.4.26?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vue/3.4.21/3.4.26?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
| [vue-tsc](https://togithub.com/vuejs/language-tools)
([source](https://togithub.com/vuejs/language-tools/tree/HEAD/packages/tsc))
| [`2.0.14` ->
`2.0.16`](https://renovatebot.com/diffs/npm/vue-tsc/2.0.14/2.0.16) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/vue-tsc/2.0.16?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vue-tsc/2.0.16?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vue-tsc/2.0.14/2.0.16?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vue-tsc/2.0.14/2.0.16?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| [zone.js](https://togithub.com/angular/angular)
([source](https://togithub.com/angular/angular/tree/HEAD/packages/zone.js),
[changelog](https://togithub.com/angular/angular/blob/master/packages/zone.js/CHANGELOG.md))
| [`0.14.4` ->
`0.14.5`](https://renovatebot.com/diffs/npm/zone.js/0.14.4/0.14.5) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/zone.js/0.14.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/zone.js/0.14.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/zone.js/0.14.4/0.14.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/zone.js/0.14.4/0.14.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |

---

### Release Notes

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

###
[`v7.24.5`](https://togithub.com/babel/babel/blob/HEAD/CHANGELOG.md#v7245-2024-04-29)

[Compare
Source](https://togithub.com/babel/babel/compare/v7.24.4...v7.24.5)

##### :bug: Bug Fix

-   `babel-plugin-transform-classes`, `babel-traverse`
- [#&#8203;16377](https://togithub.com/babel/babel/pull/16377) fix:
TypeScript annotation affects output
([@&#8203;liuxingbaoyu](https://togithub.com/liuxingbaoyu))
- `babel-helpers`, `babel-plugin-proposal-explicit-resource-management`,
`babel-runtime-corejs3`
- [#&#8203;16440](https://togithub.com/babel/babel/pull/16440) Fix
suppressed error order ([@&#8203;sossost](https://togithub.com/sossost))
- [#&#8203;16408](https://togithub.com/babel/babel/pull/16408) Await
nullish async disposable
([@&#8203;JLHwung](https://togithub.com/JLHwung))

##### :nail_care: Polish

-   `babel-parser`
- [#&#8203;16407](https://togithub.com/babel/babel/pull/16407) Recover
from exported `using` declaration
([@&#8203;JLHwung](https://togithub.com/JLHwung))

##### :house: Internal

-   Other
- [#&#8203;16414](https://togithub.com/babel/babel/pull/16414) Relax
ESLint peerDependency constraint to allow v9
([@&#8203;liuxingbaoyu](https://togithub.com/liuxingbaoyu))
-   `babel-parser`
- [#&#8203;16425](https://togithub.com/babel/babel/pull/16425) Improve
`@babel/parser` AST types
([@&#8203;nicolo-ribaudo](https://togithub.com/nicolo-ribaudo))
- [#&#8203;16417](https://togithub.com/babel/babel/pull/16417) Always
pass type argument to `.startNode`
([@&#8203;nicolo-ribaudo](https://togithub.com/nicolo-ribaudo))
- `babel-helper-create-class-features-plugin`,
`babel-helper-member-expression-to-functions`,
`babel-helper-module-transforms`,
`babel-helper-split-export-declaration`, `babel-helper-wrap-function`,
`babel-helpers`,
`babel-plugin-bugfix-firefox-class-in-computed-class-key`,
`babel-plugin-proposal-explicit-resource-management`,
`babel-plugin-transform-block-scoping`,
`babel-plugin-transform-destructuring`,
`babel-plugin-transform-object-rest-spread`,
`babel-plugin-transform-optional-chaining`,
`babel-plugin-transform-parameters`,
`babel-plugin-transform-private-property-in-object`,
`babel-plugin-transform-react-jsx-self`,
`babel-plugin-transform-typeof-symbol`,
`babel-plugin-transform-typescript`, `babel-traverse`
- [#&#8203;16439](https://togithub.com/babel/babel/pull/16439) Make
`NodePath<T | U>` distributive
([@&#8203;nicolo-ribaudo](https://togithub.com/nicolo-ribaudo))
-   `babel-plugin-proposal-partial-application`, `babel-types`
- [#&#8203;16421](https://togithub.com/babel/babel/pull/16421) Remove
`JSXNamespacedName` from valid `CallExpression` args
([@&#8203;nicolo-ribaudo](https://togithub.com/nicolo-ribaudo))
-   `babel-plugin-transform-class-properties`, `babel-preset-env`
- [#&#8203;16406](https://togithub.com/babel/babel/pull/16406) Do not
load unnecessary Babel 7 syntax plugins in Babel 8
([@&#8203;nicolo-ribaudo](https://togithub.com/nicolo-ribaudo))

##### :running_woman: Performance

-   `babel-helpers`, `babel-preset-env`, `babel-runtime-corejs3`
- [#&#8203;16357](https://togithub.com/babel/babel/pull/16357)
Performance: improve `objectWithoutPropertiesLoose` on V8
([@&#8203;romgrk](https://togithub.com/romgrk))

</details>

<details>
<summary>ckeditor/ckeditor5-dev
(@&#8203;ckeditor/jsdoc-plugins)</summary>

###
[`v39.8.0`](https://togithub.com/ckeditor/ckeditor5-dev/releases/tag/v39.8.0)

[Compare
Source](https://togithub.com/ckeditor/ckeditor5-dev/compare/v39.7.0...v39.8.0)

##### Features

-
**[build-tools](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-build-tools)**:
Update translations plugin to also output UMD build.
([commit](https://togithub.com/ckeditor/ckeditor5-dev/commit/9509c2b3645faa67dda4e48a91181c45632b739c))

##### Released packages

Check out the [Versioning
policy](https://ckeditor.com/docs/ckeditor5/latest/framework/guides/support/versioning-policy.html)
guide for more information.

<details>
<summary>Released packages (summary)</summary>

Releases containing new features:

-
[@&#8203;ckeditor/ckeditor5-dev-build-tools](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-build-tools/v/39.8.0):
v39.7.0 => v39.8.0

Other releases:

-
[@&#8203;ckeditor/ckeditor5-dev-bump-year](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-bump-year/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-ci](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-ci/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-dependency-checker](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-dependency-checker/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-docs](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-docs/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-release-tools](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-release-tools/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-stale-bot](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-stale-bot/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-tests](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-tests/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-transifex](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-transifex/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-translations](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-translations/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-utils](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-utils/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/ckeditor5-dev-web-crawler](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-web-crawler/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/jsdoc-plugins](https://www.npmjs.com/package/@&#8203;ckeditor/jsdoc-plugins/v/39.8.0):
v39.7.0 => v39.8.0
-
[@&#8203;ckeditor/typedoc-plugins](https://www.npmjs.com/package/@&#8203;ckeditor/typedoc-plugins/v/39.8.0):
v39.7.0 => v39.8.0

</details>

###
[`v39.7.0`](https://togithub.com/ckeditor/ckeditor5-dev/releases/tag/v39.7.0)

[Compare
Source](https://togithub.com/ckeditor/ckeditor5-dev/compare/v39.6.3...v39.7.0)

##### Features

-
**[build-tools](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-build-tools)**:
First stable release of the `@ckeditor/ckeditor5-dev-build-tools`
package for building packages for new installation methods. See
[ckeditor/ckeditor5#15502](https://togithub.com/ckeditor/ckeditor5/issues/15502).
([commit](https://togithub.com/ckeditor/ckeditor5-dev/commit/036f52b6c55df2dda9f7c9982e98e2cc58b1d002))
-
**[dependency-checker](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-dependency-checker)**:
Take exports into account when checking for missing or unused
dependencies and dev dependencies.
([commit](https://togithub.com/ckeditor/ckeditor5-dev/commit/036f52b6c55df2dda9f7c9982e98e2cc58b1d002))

##### Bug fixes

-
**[dependency-checker](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-dependency-checker)**:
Ignore the `dist/` directory in the dependency checker.
([commit](https://togithub.com/ckeditor/ckeditor5-dev/commit/036f52b6c55df2dda9f7c9982e98e2cc58b1d002))

##### Released packages

Check out the [Versioning
policy](https://ckeditor.com/docs/ckeditor5/latest/framework/guides/support/versioning-policy.html)
guide for more information.

<details>
<summary>Released packages (summary)</summary>

New packages:

-
[@&#8203;ckeditor/ckeditor5-dev-build-tools](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-build-tools/v/39.7.0):
v39.7.0

Releases containing new features:

-
[@&#8203;ckeditor/ckeditor5-dev-dependency-checker](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-dependency-checker/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-utils](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-utils/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/typedoc-plugins](https://www.npmjs.com/package/@&#8203;ckeditor/typedoc-plugins/v/39.7.0):
v39.6.3 => v39.7.0

Other releases:

-
[@&#8203;ckeditor/ckeditor5-dev-bump-year](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-bump-year/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-ci](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-ci/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-docs](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-docs/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-release-tools](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-release-tools/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-stale-bot](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-stale-bot/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-tests](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-tests/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-transifex](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-transifex/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-translations](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-translations/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/ckeditor5-dev-web-crawler](https://www.npmjs.com/package/@&#8203;ckeditor/ckeditor5-dev-web-crawler/v/39.7.0):
v39.6.3 => v39.7.0
-
[@&#8203;ckeditor/jsdoc-plugins](https://www.npmjs.com/package/@&#8203;ckeditor/jsdoc-plugins/v/39.7.0):
v39.6.3 => v39.7.0

</details>

</details>

<details>
<summary>coveo/analytics_schema
(@&#8203;coveo/relay-event-types)</summary>

###
[`v7.10.5`](https://togithub.com/coveo/analytics_schema/compare/9fed9fdb078f3ddb6bb98bdf0f3e5a6e1c9ce973...dbfcdc64222e83bfe3bebd6b76a420d3319d8d78)

[Compare
Source](https://togithub.com/coveo/analytics_schema/compare/9fed9fdb078f3ddb6bb98bdf0f3e5a6e1c9ce973...dbfcdc64222e83bfe3bebd6b76a420d3319d8d78)

###
[`v7.10.4`](https://togithub.com/coveo/analytics_schema/compare/210ec5c9f24698e368eaf3e8a65e07cbb2fe8201...9fed9fdb078f3ddb6bb98bdf0f3e5a6e1c9ce973)

[Compare
Source](https://togithub.com/coveo/analytics_schema/compare/210ec5c9f24698e368eaf3e8a65e07cbb2fe8201...9fed9fdb078f3ddb6bb98bdf0f3e5a6e1c9ce973)

###
[`v7.10.3`](https://togithub.com/coveo/analytics_schema/compare/4770d29d82611c5eb068113822aeb578fa3aaafe...210ec5c9f24698e368eaf3e8a65e07cbb2fe8201)

[Compare
Source](https://togithub.com/coveo/analytics_schema/compare/4770d29d82611c5eb068113822aeb578fa3aaafe...210ec5c9f24698e368eaf3e8a65e07cbb2fe8201)

</details>

<details>
<summary>coveo/semantic-monorepo-tools
(@&#8203;coveo/semantic-monorepo-tools)</summary>

###
[`v2.4.30`](https://togithub.com/coveo/semantic-monorepo-tools/blob/HEAD/CHANGELOG.md#2430-2024-04-30)

[Compare
Source](https://togithub.com/coveo/semantic-monorepo-tools/compare/v2.4.29...v2.4.30)

###
[`v2.4.29`](https://togithub.com/coveo/semantic-monorepo-tools/blob/HEAD/CHANGELOG.md#2429-2024-04-29)

[Compare
Source](https://togithub.com/coveo/semantic-monorepo-tools/compare/v2.4.28...v2.4.29)

###
[`v2.4.28`](https://togithub.com/coveo/semantic-monorepo-tools/blob/HEAD/CHANGELOG.md#2428-2024-04-26)

[Compare
Source](https://togithub.com/coveo/semantic-monorepo-tools/compare/v2.4.27...v2.4.28)

###
[`v2.4.27`](https://togithub.com/coveo/semantic-monorepo-tools/blob/HEAD/CHANGELOG.md#2427-2024-04-25)

[Compare
Source](https://togithub.com/coveo/semantic-monorepo-tools/compare/v2.4.26...v2.4.27)

</details>

<details>
<summary>salesforce/eslint-plugin-lwc
(@&#8203;lwc/eslint-plugin-lwc)</summary>

###
[`v1.8.1`](https://togithub.com/salesforce/eslint-plugin-lwc/compare/v1.8.0...v1.8.1)

[Compare
Source](https://togithub.com/salesforce/eslint-plugin-lwc/compare/v1.8.0...v1.8.1)

###
[`v1.8.0`](https://togithub.com/salesforce/eslint-plugin-lwc/releases/tag/v1.8.0)

[Compare
Source](https://togithub.com/salesforce/eslint-plugin-lwc/compare/v1.7.2...v1.8.0)

#### What's Changed

- chore: dependencies update by
[@&#8203;ravijayaramappa](https://togithub.com/ravijayaramappa) in
[https://github.com/salesforce/eslint-plugin-lwc/pull/143](https://togithub.com/salesforce/eslint-plugin-lwc/pull/143)
- chore: update non-breaking dependencies by
[@&#8203;nolanlawson](https://togithub.com/nolanlawson) in
[https://github.com/salesforce/eslint-plugin-lwc/pull/145](https://togithub.com/salesforce/eslint-plugin-lwc/pull/145)
- chore(deps): bump semver from 6.3.0 to 7.6.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/salesforce/eslint-plugin-lwc/pull/146](https://togithub.com/salesforce/eslint-plugin-lwc/pull/146)
- chore: node v20 by [@&#8203;ekashida](https://togithub.com/ekashida)
in
[https://github.com/salesforce/eslint-plugin-lwc/pull/147](https://togithub.com/salesforce/eslint-plugin-lwc/pull/147)
- feat: add valid graphql wire adapter callback parameters rule by
[@&#8203;emanchan](https://togithub.com/emanchan) in
[https://github.com/salesforce/eslint-plugin-lwc/pull/144](https://togithub.com/salesforce/eslint-plugin-lwc/pull/144)

#### New Contributors

- [@&#8203;emanchan](https://togithub.com/emanchan) made their first
contribution in
[https://github.com/salesforce/eslint-plugin-lwc/pull/144](https://togithub.com/salesforce/eslint-plugin-lwc/pull/144)

**Full Changelog**:
https://github.com/salesforce/eslint-plugin-lwc/compare/v1.7.2...v1.8.0

</details>

<details>
<summary>npm/cli (@&#8203;npmcli/arborist)</summary>

###
[`v7.5.1`](https://togithub.com/npm/cli/blob/HEAD/workspaces/arborist/CHANGELOG.md#751-2024-04-30)

[Compare Source](https://togithub.com/npm/cli/compare/v7.5.0...v7.5.1)

##### Bug Fixes

-
[`a1b95eb`](https://togithub.com/npm/cli/commit/a1b95ebeaf7bf32cf0c16605ad836e74370e2e24)
[#&#8203;7453](https://togithub.com/npm/cli/pull/7453) linting:
no-unused-vars ([@&#8203;wraithgar](https://togithub.com/wraithgar))
-
[`abcbc54`](https://togithub.com/npm/cli/commit/abcbc545ca226dfc39821200f2a0c9e122b400dd)
[#&#8203;7430](https://togithub.com/npm/cli/pull/7430) reify: cleanup of
Symbols ([#&#8203;7430](https://togithub.com/npm/cli/issues/7430))
([@&#8203;wraithgar](https://togithub.com/wraithgar))
-
[`57ebebf`](https://togithub.com/npm/cli/commit/57ebebf03d55d4eda2b6439149a97b595a191aaf)
[#&#8203;7418](https://togithub.com/npm/cli/pull/7418) update
repository.url in package.json
([#&#8203;7418](https://togithub.com/npm/cli/issues/7418))
([@&#8203;wraithgar](https://togithub.com/wraithgar))

##### Dependencies

-
[`80eec03`](https://togithub.com/npm/cli/commit/80eec03462e5747cb4434d43aff25939826b7850)
[#&#8203;7453](https://togithub.com/npm/cli/pull/7453)
`@npmcli/redact@2.0.0`
-
[`a7145d4`](https://togithub.com/npm/cli/commit/a7145d422485fcbcb9427efa775c15180c7ee1c2)
[#&#8203;7453](https://togithub.com/npm/cli/pull/7453)
`npm-registry-fetch@17.0.0`
-
[`9da5738`](https://togithub.com/npm/cli/commit/9da57388ebd5c643c2a95bbf63abc745cad45ccc)
[#&#8203;7437](https://togithub.com/npm/cli/pull/7437)
`@npmcli/run-script@8.1.0`
([#&#8203;7437](https://togithub.com/npm/cli/issues/7437))

###
[`v7.5.0`](https://togithub.com/npm/cli/blob/HEAD/workspaces/arborist/CHANGELOG.md#750-2024-04-25)

[Compare Source](https://togithub.com/npm/cli/compare/v7.4.2...v7.5.0)

##### Features

-
[`9123de4`](https://togithub.com/npm/cli/commit/9123de4d282bfd19ea17ad613f5a2acab0e0e162)
[#&#8203;7373](https://togithub.com/npm/cli/pull/7373) do all ouput over
proc-log events ([@&#8203;lukekarrys](https://togithub.com/lukekarrys))
-
[`9622597`](https://togithub.com/npm/cli/commit/9622597399ec93224fddf90a9209a98dbcfd6b2f)
[#&#8203;7339](https://togithub.com/npm/cli/pull/7339) refactor terminal
display ([#&#8203;7339](https://togithub.com/npm/cli/issues/7339))
([@&#8203;lukekarrys](https://togithub.com/lukekarrys))

##### Bug Fixes

-
[`78447d7`](https://togithub.com/npm/cli/commit/78447d7a35fab870456ba66eee408b2baddca23e)
[#&#8203;7399](https://togithub.com/npm/cli/pull/7399) prefer
fs/promises over promisify
([#&#8203;7399](https://togithub.com/npm/cli/issues/7399))
([@&#8203;lukekarrys](https://togithub.com/lukekarrys))
-
[`6512112`](https://togithub.com/npm/cli/commit/65121122d99855541f63aa787f8ee8bb4eea4a3f)
[#&#8203;7378](https://togithub.com/npm/cli/pull/7378) use proc-log for
all timers ([@&#8203;lukekarrys](https://togithub.com/lukekarrys))

##### Dependencies

-
[`36adff3`](https://togithub.com/npm/cli/commit/36adff36c41f56315fe582e1e4dda29060f7fdf7)
[#&#8203;7408](https://togithub.com/npm/cli/pull/7408) `pacote@18.0.2`
-
[`486d46c`](https://togithub.com/npm/cli/commit/486d46cd5b5678ad1ab6c23ee12cf7559477805a)
[#&#8203;7408](https://togithub.com/npm/cli/pull/7408)
`@npmcli/installed-package-contents@2.1.0`
-
[`157d0ae`](https://togithub.com/npm/cli/commit/157d0aebfe5710880d0c91bddee970316b8a6612)
[#&#8203;7408](https://togithub.com/npm/cli/pull/7408)
`@npmcli/package-json@5.1.0`
-
[`fc6e291`](https://togithub.com/npm/cli/commit/fc6e291e9c2154c2e76636cb7ebf0a17be307585)
[#&#8203;7392](https://togithub.com/npm/cli/pull/7392) `proc-log@4.2.0`
([#&#8203;7392](https://togithub.com/npm/cli/issues/7392))
-
[`38ed048`](https://togithub.com/npm/cli/commit/38ed048ac0d7a36785dbff0eeca3618cb7f084c5)
[#&#8203;7378](https://togithub.com/npm/cli/pull/7378)
`@npmcli/metavuln-calculator@7.1.0`
-
[`7678a3d`](https://togithub.com/npm/cli/commit/7678a3d92835457bb402c82e4ca7ea3fa734d23b)
[#&#8203;7378](https://togithub.com/npm/cli/pull/7378) `proc-log@4.1.0`
-
[`87f6c09`](https://togithub.com/npm/cli/commit/87f6c094ac47f4e6eb5d5d6a03a0ad97711b51e9)
[#&#8203;7373](https://togithub.com/npm/cli/pull/7373)
`@npmcli/metavuln-calculator@7.0.1`
-
[`b8f8b41`](https://togithub.com/npm/cli/commit/b8f8b414d8ad9635e3efedc6e491c8c6e3df0973)
[#&#8203;7373](https://togithub.com/npm/cli/pull/7373)
`@npmcli/run-script@8.0.0`
-
[`79f79c7`](https://togithub.com/npm/cli/commit/79f79c7460be8a74f2b77c647100bcefd89b2efa)
[#&#8203;7373](https://togithub.com/npm/cli/pull/7373) `proc-log@4.0.0`
-
[`9027266`](https://togithub.com/npm/cli/commit/90272661b16d861a5926af8ec394d32ec0f307fd)
[#&#8203;7373](https://togithub.com/npm/cli/pull/7373) `pacote@18.0.0`
-
[`ee4b3e0`](https://togithub.com/npm/cli/commit/ee4b3e0e741545045dc03741c7147560961d867d)
[#&#8203;7373](https://togithub.com/npm/cli/pull/7373)
`npm-registry-fetch@16.2.1`
-
[`ac98fd3`](https://togithub.com/npm/cli/commit/ac98fd3a8514f2552555d2b8af74a52e64888797)
[#&#8203;7373](https://togithub.com/npm/cli/pull/7373)
`npm-package-arg@11.0.2`
-
[`9351570`](https://togithub.com/npm/cli/commit/93515700efbb2147a6e929cf117da9e6e87c0aca)
[#&#8203;7373](https://togithub.com/npm/cli/pull/7373)
`@npmcli/package-json@5.0.3`

##### Chores

-
[`dd39de7`](https://togithub.com/npm/cli/commit/dd39de7d1da743cbd33b671fa96f66667109b451)
[#&#8203;7411](https://togithub.com/npm/cli/pull/7411) disable selflink
test on apple silicon
([#&#8203;7411](https://togithub.com/npm/cli/issues/7411))
([@&#8203;lukekarrys](https://togithub.com/lukekarrys))

</details>

<details>
<summary>octokit/graphql-schema
(@&#8203;octokit/graphql-schema)</summary>

###
[`v15.15.0`](https://togithub.com/octokit/graphql-schema/releases/tag/v15.15.0)

[Compare
Source](https://togithub.com/octokit/graphql-schema/compare/v15.14.0...v15.15.0)

##### Features

- `codeScanning` for repository rules
([#&#8203;940](https://togithub.com/octokit/graphql-schema/issues/940))
([df869bd](https://togithub.com/octokit/graphql-schema/commit/df869bd87a0eeb99264b6589cb46eb751a1e5dea))

###
[`v15.14.0`](https://togithub.com/octokit/graphql-schema/releases/tag/v15.14.0)

[Compare
Source](https://togithub.com/octokit/graphql-schema/compare/v15.13.0...v15.14.0)

##### Features

- `RepositoryRulesetBypassActor#deployKey`
([#&#8203;938](https://togithub.com/octokit/graphql-schema/issues/938))
([05ee809](https://togithub.com/octokit/graphql-schema/commit/05ee8098aaf15257469f14aeae22f41fac7a9638))

###
[`v15.13.0`](https://togithub.com/octokit/graphql-schema/releases/tag/v15.13.0)

[Compare
Source](https://togithub.com/octokit/graphql-schema/compare/v15.12.0...v15.13.0)

##### Features

- **repository rules:** `fileExtensionRestriction`,
`filePathRestriction`, `maxFilePathLength`, `maxFileSize`
([#&#8203;937](https://togithub.com/octokit/graphql-schema/issues/937))
([518bd2c](https://togithub.com/octokit/graphql-schema/commit/518bd2c325a3518d3f39a077fe8d076547867d17))

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/eslint-plugin)</summary>

###
[`v7.8.0`](https://togithub.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#780-2024-04-29)

[Compare
Source](https://togithub.com/typescript-eslint/typescript-eslint/compare/v7.7.1...v7.8.0)

##### 🩹 Fixes

-   **eslint-plugin:** \[no-unsafe-argument] handle  tagged templates

- **eslint-plugin:** \[prefer-optional-chain] suggests optional chaining
during strict null equality check

- **eslint-plugin:** \[consistent-type-assertions] handle tagged
templates

-   **eslint-plugin:** \[no-unsafe-return] handle union types

-   **eslint-plugin:** \[no-unused-vars] clear error report range

##### ❤️  Thank You

-   auvred
-   Josh Goldberg ✨
-   jsfm01
-   Kim Sang Du
-   YeonJuan

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

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/parser)</summary>

###
[`v7.8.0`](https://togithub.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#780-2024-04-29)

[Compare
Source](https://togithub.com/typescript-eslint/typescript-eslint/compare/v7.7.1...v7.8.0)

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

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

</details>

<details>
<summary>aws/aws-sdk-js (aws-sdk)</summary>

###
[`v2.1612.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216120)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1611.0...v2.1612.0)

- feature: DynamoDB: This release adds support to specify an optional,
maximum OnDemandThroughput for DynamoDB tables and global secondary
indexes in the CreateTable or UpdateTable APIs. You can also override
the OnDemandThroughput settings by calling the ImportTable,
RestoreFromPointInTime, or RestoreFromBackup APIs.
- feature: EC2: This release includes a new API for retrieving the
public endorsement key of the EC2 instance's Nitro Trusted Platform
Module (NitroTPM).
- feature: Personalize: This releases ability to delete users and their
data, including their metadata and interactions data, from a dataset
group.
- feature: RedshiftServerless: Update Redshift Serverless List Scheduled
Actions Output Response to include Namespace Name.

###
[`v2.1611.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216110)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1610.0...v2.1611.0)

- feature: BedrockAgent: This release adds support for using MongoDB
Atlas as a vector store when creating a knowledge base.
- feature: PersonalizeRuntime: This release adds support for a Reason
attribute for predicted items generated by User-Personalization-v2.
- feature: SESV2: Fixes ListContacts and ListImportJobs APIs to use POST
instead of GET.
-   feature: SecurityHub: Updated CreateMembers API request with limits.

###
[`v2.1610.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216100)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1609.0...v2.1610.0)

- feature: ChimeSDKVoice: Due to changes made by the Amazon Alexa
service, GetSipMediaApplicationAlexaSkillConfiguration and
PutSipMediaApplicationAlexaSkillConfiguration APIs are no longer
available for use. For more information, refer to the Alexa Smart
Properties page.
-   feature: CodeArtifact: Add support for the Ruby package format.
- feature: FMS: AWS Firewall Manager now supports the network firewall
service stream exception policy feature for accounts within your
organization.
- feature: Omics: Add support for workflow sharing and dynamic run
storage
- feature: OpenSearch: This release enables customers to create Route53
A and AAAA alias record types to point custom endpoint domain to
OpenSearch domain's dualstack search endpoint.
- feature: PinpointSMSVoiceV2: Amazon Pinpoint has added two new
features Multimedia services (MMS) and protect configurations. Use the
three new MMS APIs to send media messages to a mobile phone which
includes image, audio, text, or video files. Use the ten new protect
configurations APIs to block messages to specific countries.
-   feature: QBusiness: Updates API to latest version.
-   feature: QuickSight: New Q embedding supporting Generative Q\&A
- feature: Route53Resolver: Release of FirewallDomainRedirectionAction
parameter on the Route 53 DNS Firewall Rule. This allows customers to
configure a DNS Firewall rule to inspect all the domains in the DNS
redirection chain (default) , such as CNAME, ALIAS, DNAME, etc., or just
the first domain and trust the rest.
- feature: SageMaker: Amazon SageMaker Training now supports the use of
attribute-based access control (ABAC) roles for training job execution
roles. Amazon SageMaker Inference now supports G6 instance types.

###
[`v2.1609.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216090)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1608.0...v2.1609.0)

- feature: Amplify: Updating max results limit for listing any resources
(Job, Artifacts, Branch, BackendResources, DomainAssociation) to 50 with
the exception of list apps that where max results can be up to 100.
- feature: ConnectCases: This feature releases DeleteField,
DeletedLayout, and DeleteTemplate API's
- feature: Inspector2: Update Inspector2 to include new Agentless API
parameters.
- feature: TimestreamQuery: This change allows users to update and
describe account settings associated with their accounts.
- feature: TranscribeService: This update provides error messaging for
generative call summarization in Transcribe Call Analytics
- feature: TrustedAdvisor: This release adds the
BatchUpdateRecommendationResourceExclusion API to support batch updates
of Recommendation Resource exclusion statuses and introduces a new
exclusion status filter to the ListRecommendationResources and
ListOrganizationRecommendationResources APIs.

###
[`v2.1608.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216080)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1607.0...v2.1608.0)

- feature: CodePipeline: Add ability to manually and automatically roll
back a pipeline stage to a previously successful execution.
- feature: CognitoIdentityServiceProvider: Add LimitExceededException to
SignUp errors
- feature: ConnectCampaigns: This release adds support for specifying if
Answering Machine should wait for prompt sound.
- feature: MarketplaceEntitlementService: Releasing minor endpoint
updates.
- feature: OAM: This release introduces support for Source Accounts to
define which Metrics and Logs to share with the Monitoring Account
- feature: RDS: SupportsLimitlessDatabase field added to
describe-db-engine-versions to indicate whether the DB engine version
supports Aurora Limitless Database.
-   feature: Support: Releasing minor endpoint updates.

###
[`v2.1607.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216070)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1606.0...v2.1607.0)

- feature: AppSync: UpdateGraphQLAPI documentation update and datasource
introspection secret arn update
- feature: FMS: AWS Firewall Manager adds support for network ACL
policies to manage Amazon Virtual Private Cloud (VPC) network access
control lists (ACLs) for accounts in your organization.
- feature: IVS: Bug Fix: IVS does not support arns with the `svs` prefix
- feature: IVSRealTime: Bug Fix: IVS Real Time does not support ARNs
using the `svs` prefix.
- feature: StepFunctions: Add new ValidateStateMachineDefinition
operation, which performs syntax checking on the definition of a Amazon
States Language (ASL) state machine.

###
[`v2.1606.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216060)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1605.0...v2.1606.0)

- feature: DataSync: This change allows users to disable and enable the
schedules associated with their tasks.
- feature: EC2: Launching capability for customers to enable or disable
automatic assignment of public IPv4 addresses to their network interface
- feature: EMRcontainers: EMRonEKS Service support for
SecurityConfiguration enforcement for Spark Jobs.
-   feature: EntityResolution: Support Batch Unique IDs Deletion.
- feature: GameLift: Amazon GameLift releases container fleets support
for public preview. Deploy Linux-based containerized game server
software for hosting on Amazon GameLift.
- feature: SSM: Add SSM DescribeInstanceProperties API to public AWS
SDK.

###
[`v2.1605.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216050)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1604.0...v2.1605.0)

- feature: Bedrock: This release introduces Model Evaluation and
Guardrails for Amazon Bedrock.
- feature: BedrockAgent: Introducing the ability to create multiple data
sources per knowledge base, specify S3 buckets as data sources from
external accounts, and exposing levers to define the deletion behavior
of the underlying vector store data.
- feature: BedrockAgentRuntime: This release introduces zero-setup file
upload support for the RetrieveAndGenerate API. This allows you to chat
with your data without setting up a Knowledge Base.
- feature: BedrockRuntime: This release introduces Guardrails for Amazon
Bedrock.
- feature: CostExplorer: Added additional metadata that might be
applicable to your reservation recommendations.
- feature: EC2: This release introduces EC2 AMI Deregistration
Protection, a new AMI property that can be enabled by customers to
protect an AMI against an unintended deregistration. This release also
enables the AMI owners to view the AMI 'LastLaunchedTime' in
DescribeImages API.
- feature: WorkSpacesWeb: Added InstanceType and MaxConcurrentSessions
parameters on CreatePortal and UpdatePortal Operations as well as the
ability to read Customer Managed Key & Additional Encryption Context
parameters on supported resources (Portal, BrowserSettings,
UserSettings, IPAccessSettings)

###
[`v2.1604.0`](https://togithub.com/aws/aws-sdk-js/blob/HEAD/CHANGELOG.md#216040)

[Compare
Source](https://togithub.com/aws/aws-sdk-js/compare/v2.1603.0...v2.1604.0)

- feature: BedrockAgent: Releasing the support for simplified
configuration and return of control
- feature: BedrockAgentRuntime: Releasing the support for simplified
configuration and return of control
- feature: PaymentCryptography: Adding support to TR-31/TR-34 exports
for optional headers, allowing customers to add additional metadata
(such as key version and KSN) when exporting keys from the service.
- feature: Route53Profiles: Route 53 Profiles allows you to apply a
central DNS configuration across many VPCs regardless of account.
- feature: SageMaker: This release adds support for Real-Time
Collaboration and Shared Space for JupyterLab App on SageMaker Studio.
- feature: Transfer: Adding new API to support remote directory listing
using SFTP connector

</details>

<details>
<summary>cypress-io/cypress (cypress)</summary>

###
[`v13.8.1`](https://togithub.com/cypress-io/cypress/releases/tag/v13.8.1)

[Compare
Source](https://togithub.com/cypress-io/cypress/compare/v13.8.0...v13.8.1)

Changelog: https://docs.cypress.io/guides/references/changelog#13-8-1

</details>

<details>
<summary>iamkun/dayjs (dayjs)</summary>

###
[`v1.11.11`](https://togithub.com/iamkun/dayjs/releases/tag/v1.11.11)

[Compare
Source](https://togithub.com/iamkun/dayjs/compare/v1.11.10...v1.11.11)

##### Bug Fixes

- day of week type literal
([#&#8203;2630](https://togithub.com/iamkun/dayjs/issues/2630))
([f68d73e](https://togithub.com/iamkun/dayjs/commit/f68d73efe562fdedd9e288ecb0ce6565e602f507))
- improve locale "zh-hk" format and meridiem
([#&#8203;2419](https://togithub.com/iamkun/dayjs/issues/2419))
([a947a51](https://togithub.com/iamkun/dayjs/commit/a947a5171aad5695eaf593bc95fe073de0f0894a))
- Update 'da' locale to match correct first week of year
([#&#8203;2592](https://togithub.com/iamkun/dayjs/issues/2592))
([44b0936](https://togithub.com/iamkun/dayjs/commit/44b0936ad709212b63e48672d8b9c225e2c3b830))
- update locale Bulgarian monthsShort Jan
([#&#8203;2538](https://togithub.com/iamkun/dayjs/issues/2538))
([f0c9a41](https://togithub.com/iamkun/dayjs/commit/f0c9a41c6ec91528f3790e442b0c5dff15a4e640))

</details>

<details>

</details>

---

### Configuration

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

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

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

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

---

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

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/coveo/ui-kit).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMjEuMiIsInVwZGF0ZWRJblZlciI6IjM3LjMzMS4wIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@DeltekDavid
Copy link

DeltekDavid commented May 13, 2024

We are currently blocked trying to integrate CKEditor5 into a project that uses react-app-rewired. Ejecting isn't really an option for us. We get an error like

Failed to compile.

./node_modules/@ckeditor/ckeditor5-ui/theme/components/colorselector/colorselector.css (./node_modules/css-loader/dist/cjs.js??ref--6-oneOf-3-1!./node_modules/postcss-loader/src??postcss!./node_modules/@ckeditor/ckeditor5-ui/theme/components/colorselector/colorselector.css)
Module not found: Can't resolve './@ckeditor/ckeditor5-ui/theme/mixins/_dir.css' in 'C:\Repos\ourApp\node_modules\@ckeditor\ckeditor5-ui\theme\components\colorselector'

I feel like we need the right config to solve this but can't find any resources. Would these new installation methods help us work around this? Any guidance available?

Thanks :) It's frustrating because we're so close to having this component work for us. Our standalone POC worked great, but now we need to integrate. Held up at the ten-yard line...

@Witoso
Copy link
Member Author

Witoso commented May 14, 2024

I feel like we need the right config to solve this but can't find any resources. Would these new installation methods help us work around this? Any guidance available?

The new installation methods are not webpack-dependent, and use standard css import, so it looks like they may easily solve your issue. Our example repo has React+Vite example, and you can check your setup with the alpha version like 41.3.0-alpha.4.

@DeltekDavid
Copy link

Hi @Witoso , thank you for replying. We tried referencing the alpha version but got the same CSS error. Then I tried referencing the nightly build instead, like in the Demo repository. I then got a different error, which may be related to our old NodeJS version (12.22.12):

Failed to compile.

./node_modules/@ckeditor/ckeditor5-adapter-ckfinder/dist/index.js
SyntaxError: C:\Repos\specpoint_ae_client\node_modules\@ckeditor\ckeditor5-adapter-ckfinder\dist\index.js: Missing class properties transform.
   96 |     /**
   97 |          * FileLoader instance to use during the upload.
>  98 |          */ loader;
      |      ^^^^^^^
   99 |     /**
  100 |          * Upload URL.
  101 |          */ url;

I'll post an update once we've updated our Node, which will hopefully be in the next few weeks.

PS--Can I create custom plug-ins using this new install strategy (which AFAICS consists of referencing the nightly build and leaving the webpack/react-app-rewired config alone? Pretty awesome if it is that easy...)

@Witoso
Copy link
Member Author

Witoso commented May 15, 2024

Yes, the idea is that CKEditor 5 will behave as any other library, and won't be dictating how to configure your bundler setup. But still with some restrictions, for example, we will drop support for webpack 4. AFAIR we require node 18+.

@bnf
Copy link

bnf commented May 16, 2024

Hey,

In light of #16360 I'd like to share the CKeditor5 installation approach used by https://github.com/TYPO3/typo3/.
TYPO3 CMS switched to browser native ES6 modules + importmaps in 2022 and therefore decided to generate a dynamic CKEditor5 build that allows to configure which CKEditor5 module-exports (plugins) shall be loaded depending on the context where the editor is used.

Every @ckeditor5/ckeditor-* package is bundled into one file that is loadable ondemand via browser native import, e.g.: await import('@ckeditor/ckeditor5-alignment').
This is achieved by bundling the respective package files into one entrypoint file via rollup and map imports via <script type="importmap">. This works well thanks to recent refactorings that mapped all exports to the main entrypoint of the CKEditor5 scoped packages.

Example:

<script type="importmap">
  {
    "imports": {
      "lodash-es": "./assets/lodash-es.js",
      "@ckeditor/ckeditor5-alignment": "./assets/@ckeditor/ckeditor5-alignment.js",
      "@ckeditor/ckeditor5-core": "./assets/@ckeditor/ckeditor5-core.js",
      "@ckeditor/ckeditor5-editor-classic": "./assets/@ckeditor/ckeditor5-editor-classic.js"
    }
  }
</script>

<script type="module">
import { ClassicEditor } from '@ckeditor/ckeditor5-editor-classic';
import { Alignment } from '@ckeditor/ckeditor5-alignment';
ClassicEditor.create(textarea, {  plugins: [ Alignment ] });
</script>

I've created an isolated example on https://github.com/bnf/ckeditor5-importmap-demo which is easier to introspect than the entire TYPO3 integration.
Example initialization: https://github.com/bnf/ckeditor5-importmap-demo/blob/main/index.js
Demo: https://bnf.github.io/ckeditor5-importmap-demo

With this infrastructure optional plugins like "font" can be loaded via configuration and the module will only be (down)loaded if actually used. See upstream documentation on how that is used by integrators:
https://docs.typo3.org/c/typo3/cms-rte-ckeditor/main/en-us/Configuration/Examples.html#config-example-fontplugin

This dynamic loading is demonstrated in https://github.com/bnf/ckeditor5-importmap-demo/blob/main/dynamic.js#L4 (demo: https://bnf.github.io/ckeditor5-importmap-demo/dynamic.html)
That means there is no pre-build bundle/config, only dynamically composed environments.

Summary

CKEditor5 scoped packages are packaged into mini-bundles that reference other CKEditor5 packages via bare module identifiers (e.g. @ckeditor/ckeditor5-core).
See https://bnf.github.io/ckeditor5-importmap-demo/assets/@ckeditor/ckeditor5-code-block.js

Obstacles

CKEditor5 scoped packages still reference and require the (new umbrella) package ckeditor5, which we actually do not (want to) ship as it is just a wrapper and would produce uneeded roundtrips in a browser-native importmap scenario:

@ckeditor/ckeditor5-code-block
  ckedito5/src/core.js  <-- unneeded roundtrip (remember we do not bundle, but let the browser resolve dependencies via `import`)
    @ckeditor/ckeditor5-core

Therefore we rewrite the imports to use @ckeditor/ckeditor5- directly: https://github.com/bnf/ckeditor5-importmap-demo/blob/23cbd34c988943eac39e3e36050a9326569a644e/rollup.config.js#L55-L56

Outlook

It would be ideal if the bundling step would be integrated upstream in order to create these sub-bunldes during release.
BTW CodeMirror v6 uses this approach and that works very well for browser native importmap usage.
See https://github.com/codemirror/state/tree/main/src which is published as a one-file-per-package bundle in https://unpkg.com/browse/@codemirror/state@6.4.1/dist/

Thanks for listening!

@filipsobol
Copy link
Member

Thanks for sharing your feedback @bnf. I think your approach can work with New Installation Methods (NIM) with some minor modifications.

Background

Let's start with some background information.

The ckeditor5 package exposes code from all packages and plugins as a single entrypoint, but the individual packages still directly depend on each other (e.g. @ckeditor/ckeditor5-core depends on @ckeditor/ckeditor5-engine and @ckeditor/ckeditor5-utils, not on ckeditor5). This means that in NIM it's still possible to use individual packages instead of ckeditor5, but using ckeditor5 will be much more convenient for the vast majority of developers.

Furthermore, in NIM we already rewrite the imports like ckeditor5/src/core.js to @ckeditor/ckeditor5-core (during the build process, not in the source to maintain backwards compatibility).

For an example, see the nightly build of the @ckeditor/ckeditor5-table plugin here: https://cdn.jsdelivr.net/npm/@ckeditor/ckeditor5-table@nightly/dist/index.js.

Your approach

So what do you need to do to make your approach work with NIM?

First, you still need to build the packages yourself. While we provide npm, ES browser and UMD browser builds for the ckeditor5 package, we only provide npm builds for individual packages. The good news is that these packages no longer require any custom build configuration or plugins, so you are free to use any bundler (e.g. webpack, Rollup, esbuild, etc.) to bundle them however you like.

Second, to maintain backwards compatibility, the imports in NIM contain /dist/index.js (e.g. @ckeditor/ckeditor5-core/dist/index.js, @ckeditor/ckeditor5-engine/dist/index.js, etc. See the file linked above). This means that you either have to rewrite your import maps to use these paths (and also use them in your code), or you can rewrite these paths yourself during the build process (which you already do for ckeditor5/src/*) to remove /dist/index.js.

Considerations

I would like to point out that the ckeditor5 package is still the recommended way to use CKEditor 5 for most projects, and that counter-intuitively it might offer better performance, even though it contains a bunch of plugins you don't use. It of course depends on the setup, but it's generally faster to load a single large file than multiple smaller ones, even when using HTTP/2 or HTTP/3 (https://csswizardry.com/2023/10/the-three-c-concatenate-compress-cache/).

Using ckeditor5 also means less work for you, as you don't have to worry about bundling the packages yourself, dynamically updating the import maps, etc.

@bnf
Copy link

bnf commented May 17, 2024

Thanks for your fast feedback. I'm confident we'll find workaround for TYPO3, but I still think that the new CKEditor5 module structure has some flaws and therefore I'd like to share this, although I fear I'm a bit late to the party. Maybe it's still helpful.
Please don't see this as a rant or alike, I understand if this is too late or if you disagree.

I got a bit of experience with different modules from migrating a large JavaScript codebase (TYPO3) to native ES6 importmap'd modules, where I worked around issues of a lot of JavaScript projects and saw good (e.g. https://lit.dev/ and https://codemirror.net/) packages and not so good ones in terms of "vanilla" usage in browser, without the mainstream bundlers webpack or vite… (optimizing for vanilla usage in a browser often helps to find the most clean and hackfree solution that therefore even works in all environments/bundlers without additonal hacks)

The ckeditor5 package exposes code from all packages and plugins as a single entrypoint, but the individual packages still directly depend on each other (e.g. @ckeditor/ckeditor5-core depends on @ckeditor/ckeditor5-engine and @ckeditor/ckeditor5-utils, not on ckeditor5). This means that in NIM it's still possible to use individual packages instead of ckeditor5 […].

Sounds pretty nice, but the packages still require the ckeditor5 package: https://cdn.jsdelivr.net/npm/@ckeditor/ckeditor5-table@0.0.0-nightly-20240517.0/package.json
That means: Each package now pulls in all other open source packages.

Furthermore, in NIM we already rewrite the imports like ckeditor5/src/core.js to @ckeditor/ckeditor5-core (during the build process, not in the source to maintain backwards compatibility).

Preserving BC sounds promising, but I wonder what is actually preserved here. In other words: what would actually break if the imports are corrected to @ckeditor/ckeditor5-*? Bundlers would have less work to do. We’d remove some workarounds, you’d remove release-script-overhead.
Do you know of a component that actually relies on the fact that imports are done indirectly through the (new umbrella) module ckeditor5?

Side-Question

Why did you decide to create a dist/ folder that contains compiled sources while src/ also contains compiled JavaScript as well? I guess that’s for backwards compatibility as well? (maybe because of pre-v37-style import Plugin from '@ckeditor/ckeditor5-core/src/plugin'; imports? – they wouldn't break IMO)

This new folder will not actually be used by bundlers as package.json of the scoped packages still refers to src/ in main field. That means it becomes breaking as soon as you switch main to dist instead of src. That means: There is no gain from the dist folder right now (no one will use it, only those who import from ckeditor5 instead of the scoped modules – will you update all of the documentation to refer to the umbrella module instead of the scoped modules?)

Inspecting https://cdn.jsdelivr.net/npm/ckeditor5@0.0.0-nightly-20240517.0/dist/index.js I'd really recommend to use

export * from '@ckeditor/ckeditor5-core';

instead of

export * from '@ckeditor/ckeditor5-core/dist/index.js';

…for the sake of a clear and hack-free module structure. This means you'll have less "environments" because all variants use the same sources and you avoid publishing two compiled variants (src and dist).
Also folders do not become API, but you define the bare module specifier to be API and control that via package.json exports.

For an example, see the nightly build of the @ckeditor/ckeditor5-table plugin here: https://cdn.jsdelivr.net/npm/@ckeditor/ckeditor5-table@nightly/dist/index.js.

I see two issues with this code:

  • You have to apply the hack to import from a subpath @ckeditor/ckeditor-*/dist/index.js as you are using "main": "src/index.js" in package.json instead of "main": "dist/index.js".
  • The TypeScript declarations (*.d.ts files) are not replaced and still reference the ckeditor5 package. (So we’ll likely not get rid of this circular dependency :()

Please consider changing main to dist/index.js and use bare module imports (import "@ckeditor/ckeditor-core", not "@ckeditor/ckeditor-core/path/to/entrypoint.js" and remove the dependency to ckeditor5 – or maybe just keep using src/*.js).

You’re changing module structure right now and I think you’ll regret this in some months if you apply intermediate hacks and do not fully migrate to a "clean" solution.
This new structure would be actually be a good fit for the v42 release (remember: pulling in alot more dependencies due to the transitive nature of the new umbrella-and-library package ckeditor5 will raise more bug reports).

Your approach

So what do you need to do to make your approach work with NIM?

First, you still need to build the packages yourself. While we provide npm, ES browser and UMD browser builds for the ckeditor5 package.

I’d love to avoid that processing on our side, therefore I named the example of codemirror v6 which does exactly the processing we do for CKEditor on their side during publishing – and you could actually do the same. (And I really think this would actually help to get to a clean solution without hacks/workarounds)

I would like to point out that the ckeditor5 package is still the recommended way to use CKEditor 5 for most projects,

I don't really understand that. The documentation refers to scoped modules (which is good!) all over the place. Where is ckeditor5 package the recommended way currently? Or do you plan to change that?

and that counter-intuitively it might offer better performance, even though it contains a bunch of plugins you don't use. It of course depends on the setup, but it's generally faster to load a single large file than multiple smaller ones, even when using HTTP/2 or HTTP/3 (https://csswizardry.com/2023/10/the-three-c-concatenate-compress-cache/).

We strive for runtime performance, not for fast time-to-first-uncached-rendering (important for sales sites, but runtime/cached performance is more important for applications – which is what we build and where I suppose CKEditor is used in exclusively). That means low RAM usage and small cacheable resources are important and smaller bundles are key to that.
We’d therefore love to continue using scoped-module imports instead of one big monolith.

@filipsobol
Copy link
Member

This is great feedback and I agree with most of it. I also understand why parts of it might feel hacky at first glance, but nothing is done here without a reason. I'll try to explain some of the decisions we made.

Firstly, the last release did not introduce the new installation methods. The dist folder added to the bundles was, as we call it internally, a "silent release" for NIM. There's no official documentation for it, and it's not meant to be used in production yet. It's for us to test and prepare for the upcoming release.

Secondly, when we started working on NIM about 8 months ago, one of the very first decisions and requirements was to maintain backwards compatibility for some time to allow developers to migrate to the new version. The last thing we wanted was a Python 2 vs. Python 3 or AngularJS vs. Angular situation where a significant portion of projects were stuck on the old version. Even worse, we could introduce a new feature or security fix that requires a full migration to the new version.

This mindset explains some of the decisions we've made.

[...] what would actually break if the imports are corrected to @ckeditor/ckeditor5-*? Bundlers would have less work to do. We’d remove some workarounds, you’d remove release-script-overhead.
Do you know of a component that actually relies on the fact that imports are done indirectly through the (new umbrella) module ckeditor5?

In the old installation methods, we used ckeditor5/src/* packages to import code from core editor packages (core, engine, ui, etc.). This was necessary for the DLL builds to work properly.
Because we wanted to maintain backwards compatibility, we couldn't just change the imports to @ckeditor/ckeditor5-* packages in our source code. That would break the DLL builds and the projects that depend on them. However, we rewrite these imports when generating bundles for NIM.

Once we drop backwards compatibility, we'll be able to remove the ckeditor5/src/* imports and use direct imports instead.

Why did you decide to create a dist/ folder that contains compiled sources while src/ also contains compiled JavaScript as well? I guess that’s for backwards compatibility as well?

Yes, that's correct. The src folder is used to build the editor from source (using webpack or Vite). It contains code that has only been transpiled from TypeScript to JavaScript, but it's not ready to use as is because it requires plugins for parsing SVG, PostCSS, etc. The dist folder, however, contains the editor that can be used without any special setup.

This new folder will not actually be used by bundlers as package.json of the scoped packages still refers to src/ in main field. That means it becomes breaking as soon as you switch main to dist instead of src. That means: There is no gain from the dist folder right now (no one will use it, only those who import from ckeditor5 instead of the scoped modules – [...])

This is also done for the backwards compatibility. Once we drop support for the old methods, we will update the main field in the package.json files to point to the dist folder.

will you update all of the documentation to refer to the umbrella module instead of the scoped modules?
[...]
I don't really understand that. The documentation refers to scoped modules (which is good!) all over the place. Where is ckeditor5 package the recommended way currently? Or do you plan to change that?

Yes, we are in the process of rewriting large portions of the documentation to reflect the changes we've made. This is also part of our broader effort to improve the developer experience when working with CKEditor 5.

We're also working on migration guides to help developers migrate from the old version to the new one.

I’d love to avoid that processing on our side, therefore I named the example of codemirror v6 which does exactly the processing we do for CKEditor on their side during publishing – and you could actually do the same. (And I really think this would actually help to get to a clean solution without hacks/workarounds)

We'll internally discuss the possibility to publish browser builds for all individual packages, not only the ckeditor5.

@DeltekDavid
Copy link

DeltekDavid commented May 17, 2024

We're trying to integrate the nightly build into our POC. We modeled it after the Vite-React example.

The sample code worked, but when we need things like custom plug-ins and real-time collab. Do those work with NIM yet? If we need the nightly builds of those, how can we reference those? For example we need ContextBase but not sure which package to pull that from which will work with NIM and nightly ckeditor5. Since the nightly ckeditor5 supplants a bunch of the separate packages (if I'm not mistaken) I wasn't sure which packages to just change to 'nightly' and which are folded into the main ckeditor5.

Hoping that when NIM is released soon, this will be a bit easier.

Thanks!

Update: I went ahead and referenced the nightly build of anything that wasn't found in the main ckeditor5, including ckeditor5-core for ContextBase. Now I have this error:

ERROR in ./node_modules/@ckeditor/ckeditor5-core/theme/icons/object-size-custom.svg
Module build failed (from ./node_modules/@svgr/webpack/lib/index.js):
SyntaxError: unknown file: Namespace tags are not supported by default. React's JSX doesn't support namespace tags. You can set `throwIfNamespace: false` to bypass this warning.

@Witoso
Copy link
Member Author

Witoso commented May 17, 2024

When NIM is out, you only need to have ckeditor5 and ckeditor5-premium-features, and everything should be there to import from. We begin reviewing all collaboration documents and samples next week. This is a great find, and thanks for bringing it to our attention. We will start fixing this as soon as we can, and it should appear on nightly soon.

@Witoso
Copy link
Member Author

Witoso commented May 20, 2024

@DeltekDavid forgive my Friday thinking, you can simply switch ContextBase to Context from the ckeditor5, and it should work. We are rewriting the docs.

@DeltekDavid
Copy link

DeltekDavid commented May 20, 2024

Thanks @Witoso , I tried using Context instead of ContextBase and ClassicEditor instead of ClassicEditorBase. I also referenced Comments, TrackChanges, and the other premium things from ckeditor5-premium-features. Cleaned node_modules and reinstalled via yarn with just those two packages plus @ckeditor/ckeditor5-react and @ckeditor/ckeditor5-inspector. Install and compile succeeded, but when I run it crashes with:

ERROR
ckeditor-duplicated-modules
Read more: https://ckeditor.com/docs/ckeditor5/latest/support/error-codes.html#error-ckeditor-duplicated-modules
CKEditorError: ckeditor-duplicated-modules
Read more: https://ckeditor.com/docs/ckeditor5/latest/support/error-codes.html#error-ckeditor-duplicated-modules
    at ./node_modules/@ckeditor/ckeditor5-ui/node_modules/@ckeditor/ckeditor5-utils/dist/index.js (http://localhost:3000/static/js/bundle.js:1366465:9)
    at options.factory (http://localhost:3000/static/js/bundle.js:1450207:31)
    at __webpack_require__ (http://localhost:3000/static/js/bundle.js:1449606:32)
    at fn (http://localhost:3000/static/js/bundle.js:1449865:21)
    at ./node_modules/@ckeditor/ckeditor5-ui/dist/index.js (http://localhost:3000/static/js/bundle.js:1307617:97)
    at options.factory (http://localhost:3000/static/js/bundle.js:1450207:31)
    at __webpack_require__ (http://localhost:3000/static/js/bundle.js:1449606:32)
    at fn (http://localhost:3000/static/js/bundle.js:1449865:21)
    at ./node_modules/@ckeditor/ckeditor5-alignment/dist/index.js (http://localhost:3000/static/js/bundle.js:153105:94)
    at options.factory (http://localhost:3000/static/js/bundle.js:1450207:31)

@BrancuAlexandru
Copy link

This is actually really cool of you guys to do, thanks. I ran into extensibility issues this week with prebuilts, which are now entrenched into our codebase and now I have to bring up actual tehnical debt next time I talk to my superior.

@Witoso
Copy link
Member Author

Witoso commented May 21, 2024

@DeltekDavid could you create a separate issue for this? I would rather not hijack the whole thread. The last idea I have is that you're using npm and running into peerDeps problem: ckeditor5-react pulls some misaligned deps as you're using the nightly. The simple fix is to use npm install --legacy-peer-deps

@DeltekDavid
Copy link

@DeltekDavid could you create a separate issue for this? I would rather not hijack the whole thread. The last idea I have is that you're using npm and running into peerDeps problem: ckeditor5-react pulls some misaligned deps as you're using the nightly. The simple fix is to use npm install --legacy-peer-deps

Thank you @Witoso , I got the packages to install with --legacy-peer-deps. I then got a Context Watchdog error on running the app. I created a tech support ticket to not derail the thread :D Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
support:2 An issue reported by a commercially licensed client. type:improvement This issue reports a possible enhancement of an existing feature.
Projects
None yet
Development

No branches or pull requests