diff --git a/.github/workflows/build-and-tests.yml b/.github/workflows/build-and-tests.yml
index 992ec9eff..ef724b308 100644
--- a/.github/workflows/build-and-tests.yml
+++ b/.github/workflows/build-and-tests.yml
@@ -51,7 +51,7 @@ jobs:
- name: Lint
run: npm run ci:lint
- name: Vulnerabilities
- run: npm audit
+ run: npm audit --audit-level moderate
- name: Optional Dependencies
run: npm run test:package
- name: Generated Code
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1de4b3bf8..968c5076d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,49 @@
# rollup changelog
+## 4.43.0
+
+_2025-06-11_
+
+### Features
+
+- Provide new `fs` option and `this.fs` API to replace file system (#5944)
+
+### Pull Requests
+
+- [#5944](https://github.com/rollup/rollup/pull/5944): feat(options): Add an option for overriding the file system module in the JS API (@EggDice, @lukastaegert)
+
+## 4.42.0
+
+_2025-06-06_
+
+### Features
+
+- Add option to allow the input to be located in the output in watch mode (#5966)
+
+### Pull Requests
+
+- [#5966](https://github.com/rollup/rollup/pull/5966): feat: watch mode add `allowInputInsideOutputPath` option (@btea, @lukastaegert)
+
+## 4.41.2
+
+_2025-06-06_
+
+### Bug Fixes
+
+- Detect named export usages in dynamic imports with `then` and non-arrow function expressions (#5977)
+- Do not replace usages of constant variables with their values for readability (#5968)
+
+### Pull Requests
+
+- [#5968](https://github.com/rollup/rollup/pull/5968): fix: preserve constant identifiers in unary expressions instead of magic numbers (@OmkarJ13, @lukastaegert)
+- [#5969](https://github.com/rollup/rollup/pull/5969): chore(deps): update dependency yargs-parser to v22 (@renovate[bot], @lukastaegert)
+- [#5970](https://github.com/rollup/rollup/pull/5970): chore(deps): lock file maintenance minor/patch updates (@renovate[bot])
+- [#5971](https://github.com/rollup/rollup/pull/5971): chore(deps): lock file maintenance (@renovate[bot])
+- [#5976](https://github.com/rollup/rollup/pull/5976): Update README.md (@ftlno, @lukastaegert)
+- [#5977](https://github.com/rollup/rollup/pull/5977): fix: consider function expression in thenable when tree-shaking dynamic imports (@TrickyPi)
+- [#5981](https://github.com/rollup/rollup/pull/5981): fix(deps): lock file maintenance minor/patch updates (@renovate[bot])
+- [#5982](https://github.com/rollup/rollup/pull/5982): Debug/fix watch pipeline (@lukastaegert)
+
## 4.41.1
_2025-05-24_
diff --git a/README.md b/README.md
index 52866181f..74b74b6b6 100644
--- a/README.md
+++ b/README.md
@@ -66,7 +66,7 @@ Support this project by becoming a sponsor. Your logo will show up here with a l
## 特别赞助
-
+
TNG 自 2017 年以来一直在支持 [Lukas Taegert-Atkinson](https://github.com/lukastaegert) 在 Rollup 上的工作。
diff --git a/browser/package.json b/browser/package.json
index 6d6934fe0..d21e7e229 100644
--- a/browser/package.json
+++ b/browser/package.json
@@ -1,6 +1,6 @@
{
"name": "@rollup/browser",
- "version": "4.41.1",
+ "version": "4.43.0",
"description": "Next-generation ES module bundler browser build",
"main": "dist/rollup.browser.js",
"module": "dist/es/rollup.browser.js",
diff --git a/browser/src/fs.ts b/browser/src/fs.ts
index 290663f74..0dff3bf6c 100644
--- a/browser/src/fs.ts
+++ b/browser/src/fs.ts
@@ -1,5 +1,20 @@
+import type { RollupFsModule } from '../../src/rollup/types';
import { throwNoFileSystem } from './error';
+import type * as FsType from './fs.ts';
+// Ensure this satisfies the RollupFsModule API, will be removed by tree-shaking
+const _typeTest = null as unknown as typeof FsType satisfies RollupFsModule;
+
+export const appendFile = throwNoFileSystem('fs.appendFile');
+export const copyFile = throwNoFileSystem('fs.copyFile');
export const mkdir = throwNoFileSystem('fs.mkdir');
+export const mkdtemp = throwNoFileSystem('fs.mkdtemp');
+export const readdir = throwNoFileSystem('fs.readdir');
export const readFile = throwNoFileSystem('fs.readFile');
+export const realpath = throwNoFileSystem('fs.realpath');
+export const rename = throwNoFileSystem('fs.rename');
+export const rmdir = throwNoFileSystem('fs.rmdir');
+export const stat = throwNoFileSystem('fs.stat');
+export const lstat = throwNoFileSystem('fs.lstat');
+export const unlink = throwNoFileSystem('fs.unlink');
export const writeFile = throwNoFileSystem('fs.writeFile');
diff --git a/browser/src/resolveId.ts b/browser/src/resolveId.ts
deleted file mode 100644
index fb0d23378..000000000
--- a/browser/src/resolveId.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import type { ModuleLoaderResolveId } from '../../src/ModuleLoader';
-import type { CustomPluginOptions, Plugin, ResolveIdResult } from '../../src/rollup/types';
-import type { PluginDriver } from '../../src/utils/PluginDriver';
-import { resolveIdViaPlugins } from '../../src/utils/resolveIdViaPlugins';
-import { throwNoFileSystem } from './error';
-
-export async function resolveId(
- source: string,
- importer: string | undefined,
- _preserveSymlinks: boolean,
- pluginDriver: PluginDriver,
- moduleLoaderResolveId: ModuleLoaderResolveId,
- skip: readonly { importer: string | undefined; plugin: Plugin; source: string }[] | null,
- customOptions: CustomPluginOptions | undefined,
- isEntry: boolean,
- assertions: Record
-): Promise {
- const pluginResult = await resolveIdViaPlugins(
- source,
- importer,
- pluginDriver,
- moduleLoaderResolveId,
- skip,
- customOptions,
- isEntry,
- assertions
- );
- if (pluginResult == null) {
- return throwNoFileSystem('path.resolve')();
- }
- return pluginResult[0];
-}
diff --git a/build-plugins/replace-browser-modules.ts b/build-plugins/replace-browser-modules.ts
index f1cecf2d1..84a59f85a 100644
--- a/build-plugins/replace-browser-modules.ts
+++ b/build-plugins/replace-browser-modules.ts
@@ -5,15 +5,7 @@ import type { Plugin } from 'vite';
const resolve = (path: string) => fileURLToPath(new URL(`../${path}`, import.meta.url));
-const JS_REPLACED_MODULES = [
- 'fs',
- 'hookActions',
- 'path',
- 'performance',
- 'process',
- 'resolveId',
- 'initWasm'
-];
+const JS_REPLACED_MODULES = ['fs', 'hookActions', 'path', 'performance', 'process', 'initWasm'];
type ModulesMap = [string, string][];
diff --git a/cli/help.md b/cli/help.md
index 7a49dd45d..8c5560d02 100644
--- a/cli/help.md
+++ b/cli/help.md
@@ -90,6 +90,8 @@ Basic options:
--no-treeshake.unknownGlobalSideEffects Assume unknown globals do not throw
--validate Validate output
--waitForBundleInput Wait for bundle input files
+--watch.allowInputInsideOutputPath Whether the input path is allowed to be a
+ subpath of the output path
--watch.buildDelay Throttle watch rebuilds
--no-watch.clearScreen Do not clear the screen when rebuilding
--watch.exclude Exclude files from being watched
diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts
index ebbf95b67..277a32dbd 100644
--- a/docs/.vitepress/config.ts
+++ b/docs/.vitepress/config.ts
@@ -117,6 +117,10 @@ export default defineConfig({
link: '/es-module-syntax/',
text: 'ES 模块语法'
},
+ {
+ link: '/browser/',
+ text: '在浏览器中运行 Rollup'
+ },
{
link: '/faqs/',
text: '常见问题'
diff --git a/docs/browser/index.md b/docs/browser/index.md
new file mode 100755
index 000000000..d1d9f5e05
--- /dev/null
+++ b/docs/browser/index.md
@@ -0,0 +1,134 @@
+---
+title: 在浏览器中运行 Rollup
+---
+
+# {{ $frontmatter.title }}
+
+[[toc]]
+
+## 浏览器构建 {#the-browser-build}
+
+虽然常规的 Rollup 构建依赖于一些 NodeJS 内置库,但也有一个仅使用浏览器 API 的浏览器构建可用。可以通过以下方式安装:
+
+```shell
+npm install @rollup/browser
+```
+
+在你的脚本中,可以通过以下方式导入:
+
+```js
+import { rollup } from '@rollup/browser';
+```
+
+或者,你也可以从 CDN 导入,例如对于 ESM 构建:
+
+```js
+import * as rollup from 'https://unpkg.com/@rollup/browser/dist/es/rollup.browser.js';
+```
+
+对于 UMD 构建:
+
+```html
+
+```
+
+这将创建一个全局变量 `window.rollup`。请注意,在每种情况下,你需要确保 `@rollup/browser` 包中的 `dist/bindings_wasm_bg.wasm` 文件与浏览器构建一起提供。
+
+由于浏览器构建无法访问文件系统,你需要提供一个 [内存文件系统](#using-an-in-memory-file-system) 通过 [`fs`](../configuration-options/index.md#fs) 选项,或者你需要提供 [插件](#using-plugins-to-resolve-and-load-modules) 来解析和加载所有你想要打包的模块。
+
+## 使用内存文件系统 {#using-an-in-memory-file-system}
+
+Rollup 允许你提供一个内存文件系统实现,该实现需要实现 NodeJS `fs` API 的至少一个子集,参见 [`fs`](../configuration-options/index.md#fs) 选项。这使得浏览器构建的行为非常类似于 NodeJS 构建,甚至允许你使用某些依赖于文件系统的插件,前提是它们只能通过 [`this.fs`](../plugin-development/index.md#this-fs) 插件上下文属性访问它。下面是一个使用 [`memfs`](https://www.npmjs.com/package/memfs) 的示例:
+
+```js twoslash
+/** @type {import('rollup')} */
+var rollup;
+// ---cut---
+import { rollup } from '@rollup/browser';
+import { Volume } from 'memfs';
+
+const vol = Volume.fromJSON({
+ '/main.js': "import foo from 'foo.js'; console.log(foo);",
+ '/foo.js': 'export default 42;'
+});
+
+rollup
+ .rollup({
+ input: '/main.js',
+ fs: vol.promises
+ })
+ .then(bundle => bundle.generate({ format: 'es' }))
+ .then(({ output }) => console.log(output[0].code));
+```
+
+## 使用插件解析和加载模块 {#using-plugins-to-resolve-and-load-modules}
+
+你也可以通过插件解析和加载所有模块。下面是一个示例:
+
+```js twoslash
+/** @type {import('rollup')} */
+var rollup;
+// ---cut---
+const modules = {
+ 'main.js': "import foo from 'foo.js'; console.log(foo);",
+ 'foo.js': 'export default 42;'
+};
+
+rollup
+ .rollup({
+ input: 'main.js',
+ plugins: [
+ {
+ name: 'loader',
+ resolveId(source) {
+ if (modules.hasOwnProperty(source)) {
+ return source;
+ }
+ },
+ load(id) {
+ if (modules.hasOwnProperty(id)) {
+ return modules[id];
+ }
+ }
+ }
+ ]
+ })
+ .then(bundle => bundle.generate({ format: 'es' }))
+ .then(({ output }) => console.log(output[0].code));
+```
+
+这个示例只支持两个导入,`"main.js"` 和 `"foo.js"`,并且不支持相对导入。下面是一个使用绝对 URL 作为入口文件并支持相对导入的示例。在这种情况下,我们只是重新打包 Rollup 本身,但它可以用于任何其他暴露 ES 模块的 URL:
+
+```js twoslash
+/** @type {import('rollup')} */
+var rollup;
+// ---cut---
+rollup
+ .rollup({
+ input: 'https://unpkg.com/rollup/dist/es/rollup.js',
+ plugins: [
+ {
+ name: 'url-resolver',
+ resolveId(source, importer) {
+ if (source[0] !== '.') {
+ try {
+ new URL(source);
+ // If it is a valid URL, return it
+ return source;
+ } catch {
+ // Otherwise make it external
+ return { id: source, external: true };
+ }
+ }
+ return new URL(source, importer).href;
+ },
+ async load(id) {
+ const response = await fetch(id);
+ return response.text();
+ }
+ }
+ ]
+ })
+ .then(bundle => bundle.generate({ format: 'es' }))
+ .then(({ output }) => console.log(output));
+```
diff --git a/docs/command-line-interface/index.md b/docs/command-line-interface/index.md
index 569b454b1..2373a0b5c 100755
--- a/docs/command-line-interface/index.md
+++ b/docs/command-line-interface/index.md
@@ -139,7 +139,8 @@ export default {
clearScreen,
exclude,
include,
- skipWrite
+ skipWrite,
+ allowInputInsideOutputPath
}
};
```
@@ -459,6 +460,7 @@ export default {
--no-treeshake.unknownGlobalSideEffects 假设未知的全局变量不会抛出异常
--validate 验证输出
--waitForBundleInput 等待打包输入文件
+--watch.allowInputInsideOutputPath 输入路径是否允许是输出路径的子路径
--watch.buildDelay 节流观察重建
--no-watch.clearScreen 重建时不要清除屏幕
--watch.exclude 排除要观察的文件
diff --git a/docs/configuration-options/index.md b/docs/configuration-options/index.md
index b83e9aef4..b894a0782 100755
--- a/docs/configuration-options/index.md
+++ b/docs/configuration-options/index.md
@@ -2851,7 +2851,108 @@ const element = angular.element;
对于每个键的值,是一个数组,其中,第一个数值表示经过的时间,第二个数值表示内存消耗的变化,第三个数值表示此步骤完成后的总内存消耗。这些步骤的顺序是通过 `Object.keys` 确定的。顶层的键以 `#` 开头,包含嵌套步骤的耗时,例如,在上面例子中,耗时 698ms 的 `# BUILD` 步骤包含了耗时 539ms 的 `## parse modules` 步骤。
-## 观察选项 {#watch}
+### fs
+
+| | |
+| -----: | :----------------------------------------------- |
+| 类型: | `RollupFsModule` |
+| 默认: | NodeJS 中为 `node:fs.promises`,浏览器中无默认值 |
+
+如果想要使用自定义的文件系统模块,可以将此选项设置为一个实现了与 `RollupFsModule` 接口相同 API 的对象。这在想要使用不同的文件系统实现(如 [`memfs`](https://www.npmjs.com/package/memfs))、想要测试模拟文件系统,或者使用 Rollup 的 [浏览器构建](../browser/index.md) 时非常有用。
+
+```typescript
+interface RollupFsModule {
+ appendFile(
+ path: string,
+ data: string | Uint8Array,
+ options?: {
+ encoding?: BufferEncoding | null;
+ mode?: string | number;
+ flag?: string | number;
+ }
+ ): Promise;
+
+ copyFile(
+ source: string,
+ destination: string,
+ mode?: string | number
+ ): Promise;
+
+ mkdir(
+ path: string,
+ options?: { recursive?: boolean; mode?: string | number }
+ ): Promise;
+
+ mkdtemp(prefix: string): Promise;
+
+ readdir(
+ path: string,
+ options?: { withFileTypes?: boolean }
+ ): Promise<(string | RollupDirectoryEntry)[]>;
+
+ readFile(
+ path: string,
+ options?: {
+ encoding?: BufferEncoding | null;
+ flag?: string | number;
+ signal?: AbortSignal;
+ }
+ ): Promise;
+
+ realpath(path: string): Promise;
+
+ rename(oldPath: string, newPath: string): Promise;
+
+ rmdir(path: string, options?: { recursive?: boolean }): Promise;
+
+ stat(path: string): Promise;
+
+ lstat(path: string): Promise;
+
+ unlink(path: string): Promise;
+
+ writeFile(
+ path: string,
+ data: string | ArrayBuffer | ArrayBufferView,
+ options?: {
+ encoding?: BufferEncoding | null;
+ mode?: string | number;
+ flag?: string | number;
+ }
+ ): Promise;
+}
+
+type BufferEncoding =
+ | 'ascii'
+ | 'utf8'
+ | 'utf16le'
+ | 'ucs2'
+ | 'base64'
+ | 'base64url'
+ | 'latin1'
+ | 'binary'
+ | 'hex';
+
+export interface RollupDirectoryEntry {
+ isFile(): boolean;
+ isDirectory(): boolean;
+ isSymbolicLink(): boolean;
+ name: string;
+}
+
+interface RollupFileStats {
+ isFile(): boolean;
+ isDirectory(): boolean;
+ isSymbolicLink(): boolean;
+ size: number;
+ mtime: Date;
+ ctime: Date;
+ atime: Date;
+ birthtime: Date;
+}
+```
+
+## watch
| | |
| -----: | :------------------------ |
@@ -2860,6 +2961,7 @@ const element = angular.element;
```typescript
interface WatcherOptions {
+ allowInputInsideOutputPath?: boolean;
buildDelay?: number;
chokidar?: ChokidarOptions;
clearScreen?: boolean;
@@ -2892,7 +2994,17 @@ export default [
这些选项仅在使用 `--watch` 标志或使用 `rollup.watch` 运行 Rollup 时生效。
-### watch.buildDelay {#watch-builddelay}
+### watch.allowInputInsideOutputPath
+
+| | |
+| --: | :-- |
+| 类型: | `boolean` |
+| CLI: | `--watch.allowInputInsideOutputPath`/`--no-watch.allowInputInsideOutputPath` |
+| 默认: | `false` |
+
+该选项用于决定输入路径是否允许是输出路径的子路径。
+
+### watch.buildDelay
| | |
| -----: | :---------------------------- |
diff --git a/docs/faqs/index.md b/docs/faqs/index.md
index b9ada7a7c..164448897 100755
--- a/docs/faqs/index.md
+++ b/docs/faqs/index.md
@@ -106,102 +106,6 @@ console.log('main');
Rollup 已经被许多主要的 JavaScript 库使用,并且也可以用于构建绝大多数应用程序。但是,如果你想在旧版浏览器中使用代码拆分或动态导入,则需要使用额外的运行时来处理加载丢失的块。我们建议使用 [SystemJS 构建产物作为生产环境](https://github.com/systemjs/systemjs#browser-production),因为它与 Rollup 的系统格式输出很好地集成,并且能够正确处理所有 ES 模块实时绑定和重新导出边缘情况。或者,也可以使用 AMD 加载器。
-## 我如何在浏览器中运行 Rollup? {#how-do-i-run-rollup-itself-in-a-browser}
-
-虽然常规的 Rollup 构建依赖于一些 NodeJS 特性,但还有一个仅使用浏览器 API 的浏览器版本可用。你可以通过以下方式安装它:
-
-```shell
-npm install @rollup/browser
-```
-
-在你的脚本代码中,这样导入:
-
-```js
-import { rollup } from '@rollup/browser';
-```
-
-另外,你也可以从 CDN 导入,例如导入 ESM 格式产物:
-
-```js
-import * as rollup from 'https://unpkg.com/@rollup/browser/dist/es/rollup.browser.js';
-```
-
-而对于 UMD 格式产物:
-
-```html
-
-```
-
-这将创建一个全局变量 `window.rollup`。由于浏览器构建无法访问文件系统,因此你需要提供解析和加载要捆绑的所有模块的插件。以下是一个虚构的示例:
-
-```js twoslash
-/** @type {import('rollup')} */
-var rollup;
-// ---cut---
-const modules = {
- 'main.js': "import foo from 'foo.js'; console.log(foo);",
- 'foo.js': 'export default 42;'
-};
-
-rollup
- .rollup({
- input: 'main.js',
- plugins: [
- {
- name: 'loader',
- resolveId(source) {
- if (modules.hasOwnProperty(source)) {
- return source;
- }
- },
- load(id) {
- if (modules.hasOwnProperty(id)) {
- return modules[id];
- }
- }
- }
- ]
- })
- .then(bundle => bundle.generate({ format: 'es' }))
- .then(({ output }) => console.log(output[0].code));
-```
-
-此示例仅支持两个导入,`"main.js"` 和 `"foo.js"`,不支持相对导入。以下是另一个示例,它使用绝对 URL 作为入口点,并支持相对导入。在这种情况下,我们只是重新打包 Rollup 本身,但它可以用于任何其他公开 ES 模块的 URL:
-
-```js twoslash
-/** @type {import('rollup')} */
-var rollup;
-// ---cut---
-rollup
- .rollup({
- input: 'https://unpkg.com/rollup/dist/es/rollup.js',
- plugins: [
- {
- name: 'url-resolver',
- resolveId(source, importer) {
- if (source[0] !== '.') {
- try {
- new URL(source);
- // If it is a valid URL, return it
- return source;
- } catch {
- // Otherwise make it external
- return { id: source, external: true };
- }
- }
- return new URL(source, importer).href;
- },
- async load(id) {
- const response = await fetch(id);
- return response.text();
- }
- }
- ]
- })
- .then(bundle => bundle.generate({ format: 'es' }))
- .then(({ output }) => console.log(output));
-```
-
-## Rollup logo 是谁制作的?太可爱了! {#who-made-the-rollup-logo-its-lovely}
+## Who made the Rollup logo? It's lovely.
[Julian Lloyd](https://github.com/jlmakes)!
diff --git a/docs/guide/en/slugs-and-pages-by-legacy-slugs.json b/docs/guide/en/slugs-and-pages-by-legacy-slugs.json
index 2381c75f8..927da056d 100644
--- a/docs/guide/en/slugs-and-pages-by-legacy-slugs.json
+++ b/docs/guide/en/slugs-and-pages-by-legacy-slugs.json
@@ -1 +1 @@
-{"--bundleconfigascjs":["command-line-interface","bundleconfigascjs"],"--configplugin-plugin":["command-line-interface","configplugin-plugin"],"--environment-values":["command-line-interface","environment-values"],"--failafterwarnings":["command-line-interface","failafterwarnings"],"--no-stdin":["command-line-interface","no-stdin"],"--silent":["command-line-interface","silent"],"--stdinext":["command-line-interface","stdinext"],"--waitforbundleinput":["command-line-interface","waitforbundleinput"],"-h--help":["command-line-interface","h-help"],"-v--version":["command-line-interface","v-version"],"-w--watch":["command-line-interface","w-watch"],"augmentchunkhash":["plugin-development","augmentchunkhash"],"babel":["tools","babel"],"banner":["plugin-development","banner"],"big-list-of-options":["configuration-options",""],"buildend":["plugin-development","buildend"],"buildstart":["plugin-development","buildstart"],"cache":["configuration-options","cache"],"closebundle":["plugin-development","closebundle"],"closewatcher":["plugin-development","closewatcher"],"command-line-reference":["command-line-interface",""],"context":["configuration-options","context"],"deno":["tools","deno"],"error-emfile-too-many-open-files":["troubleshooting","error-emfile-too-many-open-files"],"error-javascript-heap-out-of-memory":["troubleshooting","error:-javascript-heap-out-of-memory"],"error-name-is-not-exported-by-module":["troubleshooting","error-name-is-not-exported-by-module"],"error-node-tried-to-load-your-configuration-file-as-commonjs-even-though-it-is-likely-an-es-module":["troubleshooting","error-node-tried-to-load-your-configuration-file-as-commonjs-even-though-it-is-likely-an-es-module"],"error-this-is-undefined":["troubleshooting","error-this-is-undefined"],"es-module-syntax":["es-module-syntax",""],"eval2--eval":["troubleshooting","eval2-eval"],"experimentalcacheexpiry":["configuration-options","experimentalcacheexpiry"],"external":["configuration-options","external"],"faqs":["faqs",""],"footer":["plugin-development","footer"],"generatebundle":["plugin-development","generatebundle"],"gulp":["tools","gulp"],"input":["configuration-options","input"],"intro":["plugin-development","intro"],"introduction":["introduction",""],"javascript-api":["javascript-api",""],"load":["plugin-development","load"],"makeabsoluteexternalsrelative":["configuration-options","makeabsoluteexternalsrelative"],"maxparallelfileops":["configuration-options","maxparallelfileops"],"migration":["migration",""],"modulecontext":["configuration-options","modulecontext"],"moduleparsed":["plugin-development","moduleparsed"],"name":["plugin-development","name"],"new-function":["troubleshooting","new-function"],"onwarn":["configuration-options","onwarn"],"options":["plugin-development","options"],"outputamd":["configuration-options","output-amd"],"outputassetfilenames":["configuration-options","output-assetfilenames"],"outputbanneroutputfooter":["configuration-options","output-banner-output-footer"],"outputchunkfilenames":["configuration-options","output-chunkfilenames"],"outputcompact":["configuration-options","output-compact"],"outputdir":["configuration-options","output-dir"],"outputdynamicimportincjs":["configuration-options","output-dynamicimportincjs"],"outputentryfilenames":["configuration-options","output-entryfilenames"],"outputesmodule":["configuration-options","output-esmodule"],"outputexports":["configuration-options","output-exports"],"outputextend":["configuration-options","output-extend"],"outputexternalimportassertions":["configuration-options","output-externalimportassertions"],"outputexternallivebindings":["configuration-options","output-externallivebindings"],"outputfile":["configuration-options","output-file"],"outputformat":["configuration-options","output-format"],"outputfreeze":["configuration-options","output-freeze"],"outputgeneratedcode":["configuration-options","output-generatedcode"],"outputglobals":["configuration-options","output-globals"],"outputhoisttransitiveimports":["configuration-options","output-hoisttransitiveimports"],"outputindent":["configuration-options","output-indent"],"outputinlinedynamicimports":["configuration-options","output-inlinedynamicimports"],"outputinterop":["configuration-options","output-interop"],"outputintrooutputoutro":["configuration-options","output-intro-output-outro"],"outputmanualchunks":["configuration-options","output-manualchunks"],"outputminifyinternalexports":["configuration-options","output-minifyinternalexports"],"outputname":["configuration-options","output-name"],"outputnoconflict":["configuration-options","output-noconflict"],"outputoptions":["plugin-development","outputoptions"],"outputpaths":["configuration-options","output-paths"],"outputplugins":["configuration-options","output-plugins"],"outputpreservemodules":["configuration-options","output-preservemodules"],"outputpreservemodulesroot":["configuration-options","output-preservemodulesroot"],"outputsanitizefilename":["configuration-options","output-sanitizefilename"],"outputsourcemap":["configuration-options","output-sourcemap"],"outputsourcemapbaseurl":["configuration-options","output-sourcemapbaseurl"],"outputsourcemapexcludesources":["configuration-options","output-sourcemapexcludesources"],"outputsourcemapfile":["configuration-options","output-sourcemapfile"],"outputsourcemappathtransform":["configuration-options","output-sourcemappathtransform"],"outputstrict":["configuration-options","output-strict"],"outputsystemnullsetters":["configuration-options","output-systemnullsetters"],"outputvalidate":["configuration-options","output-validate"],"outro":["plugin-development","outro"],"perf":["configuration-options","perf"],"plugin-development":["plugin-development",""],"plugins":["configuration-options","plugins"],"preserveentrysignatures":["configuration-options","preserveentrysignatures"],"preservesymlinks":["configuration-options","preservesymlinks"],"renderchunk":["plugin-development","renderchunk"],"renderdynamicimport":["plugin-development","renderdynamicimport"],"rendererror":["plugin-development","rendererror"],"renderstart":["plugin-development","renderstart"],"resolvedynamicimport":["plugin-development","resolvedynamicimport"],"resolvefileurl":["plugin-development","resolvefileurl"],"resolveid":["plugin-development","resolveid"],"resolveimportmeta":["plugin-development","resolveimportmeta"],"rollupplugin-commonjs":["tools","rollupplugin-commonjs"],"rollupplugin-node-resolve":["tools","rollupplugin-node-resolve"],"rolluprollup":["javascript-api","rollup-rollup"],"rollupwatch":["javascript-api","rollup-watch"],"shimmissingexports":["configuration-options","shimmissingexports"],"shouldtransformcachedmodule":["plugin-development","shouldtransformcachedmodule"],"strictdeprecations":["configuration-options","strictdeprecations"],"thisaddwatchfile":["plugin-development","this-addwatchfile"],"thisemitfile":["plugin-development","this-emitfile"],"thiserror":["plugin-development","this-error"],"thisgetcombinedsourcemap":["plugin-development","this-getcombinedsourcemap"],"thisgetfilename":["plugin-development","this-getfilename"],"thisgetmoduleids":["plugin-development","this-getmoduleids"],"thisgetmoduleinfo":["plugin-development","this-getmoduleinfo"],"thisgetwatchfiles":["plugin-development","this-getwatchfiles"],"thisload":["plugin-development","this-load"],"thismeta":["plugin-development","this-meta"],"thisparse":["plugin-development","this-parse"],"thisresolve":["plugin-development","this-resolve"],"thissetassetsource":["plugin-development","this-setassetsource"],"thiswarn":["plugin-development","this-warn"],"tools":["tools",""],"transform":["plugin-development","transform"],"treeshake":["configuration-options","treeshake"],"troubleshooting":["troubleshooting",""],"tutorial":["tutorial",""],"warning-sourcemap-is-likely-to-be-incorrect":["troubleshooting","warning-sourcemap-is-likely-to-be-incorrect"],"warning-treating-module-as-external-dependency":["troubleshooting","warning-treating-module-as-external-dependency"],"watchbuilddelay":["configuration-options","watch-builddelay"],"watchchange":["plugin-development","watchchange"],"watchchokidar":["configuration-options","watch-chokidar"],"watchclearscreen":["configuration-options","watch-clearscreen"],"watchexclude":["configuration-options","watch-exclude"],"watchinclude":["configuration-options","watch-include"],"watchoptions":["javascript-api","watchoptions"],"watchskipwrite":["configuration-options","watch-skipwrite"],"writebundle":["plugin-development","writebundle"]}
\ No newline at end of file
+{"--bundleconfigascjs":["command-line-interface","bundleconfigascjs"],"--configplugin-plugin":["command-line-interface","configplugin-plugin"],"--environment-values":["command-line-interface","environment-values"],"--failafterwarnings":["command-line-interface","failafterwarnings"],"--no-stdin":["command-line-interface","no-stdin"],"--silent":["command-line-interface","silent"],"--stdinext":["command-line-interface","stdinext"],"--waitforbundleinput":["command-line-interface","waitforbundleinput"],"-h--help":["command-line-interface","h-help"],"-v--version":["command-line-interface","v-version"],"-w--watch":["command-line-interface","w-watch"],"augmentchunkhash":["plugin-development","augmentchunkhash"],"babel":["tools","babel"],"banner":["plugin-development","banner"],"big-list-of-options":["configuration-options",""],"buildend":["plugin-development","buildend"],"buildstart":["plugin-development","buildstart"],"cache":["configuration-options","cache"],"closebundle":["plugin-development","closebundle"],"closewatcher":["plugin-development","closewatcher"],"command-line-reference":["command-line-interface",""],"context":["configuration-options","context"],"deno":["tools","deno"],"error-emfile-too-many-open-files":["troubleshooting","error-emfile-too-many-open-files"],"error-javascript-heap-out-of-memory":["troubleshooting","error:-javascript-heap-out-of-memory"],"error-name-is-not-exported-by-module":["troubleshooting","error-name-is-not-exported-by-module"],"error-node-tried-to-load-your-configuration-file-as-commonjs-even-though-it-is-likely-an-es-module":["troubleshooting","error-node-tried-to-load-your-configuration-file-as-commonjs-even-though-it-is-likely-an-es-module"],"error-this-is-undefined":["troubleshooting","error-this-is-undefined"],"es-module-syntax":["es-module-syntax",""],"eval2--eval":["troubleshooting","eval2-eval"],"experimentalcacheexpiry":["configuration-options","experimentalcacheexpiry"],"external":["configuration-options","external"],"faqs":["faqs",""],"footer":["plugin-development","footer"],"generatebundle":["plugin-development","generatebundle"],"gulp":["tools","gulp"],"input":["configuration-options","input"],"intro":["plugin-development","intro"],"introduction":["introduction",""],"javascript-api":["javascript-api",""],"load":["plugin-development","load"],"makeabsoluteexternalsrelative":["configuration-options","makeabsoluteexternalsrelative"],"maxparallelfileops":["configuration-options","maxparallelfileops"],"migration":["migration",""],"modulecontext":["configuration-options","modulecontext"],"moduleparsed":["plugin-development","moduleparsed"],"name":["plugin-development","name"],"new-function":["troubleshooting","new-function"],"onwarn":["configuration-options","onwarn"],"options":["plugin-development","options"],"outputamd":["configuration-options","output-amd"],"outputassetfilenames":["configuration-options","output-assetfilenames"],"outputbanneroutputfooter":["configuration-options","output-banner-output-footer"],"outputchunkfilenames":["configuration-options","output-chunkfilenames"],"outputcompact":["configuration-options","output-compact"],"outputdir":["configuration-options","output-dir"],"outputdynamicimportincjs":["configuration-options","output-dynamicimportincjs"],"outputentryfilenames":["configuration-options","output-entryfilenames"],"outputesmodule":["configuration-options","output-esmodule"],"outputexports":["configuration-options","output-exports"],"outputextend":["configuration-options","output-extend"],"outputexternalimportassertions":["configuration-options","output-externalimportassertions"],"outputexternallivebindings":["configuration-options","output-externallivebindings"],"outputfile":["configuration-options","output-file"],"outputformat":["configuration-options","output-format"],"outputfreeze":["configuration-options","output-freeze"],"outputgeneratedcode":["configuration-options","output-generatedcode"],"outputglobals":["configuration-options","output-globals"],"outputhoisttransitiveimports":["configuration-options","output-hoisttransitiveimports"],"outputindent":["configuration-options","output-indent"],"outputinlinedynamicimports":["configuration-options","output-inlinedynamicimports"],"outputinterop":["configuration-options","output-interop"],"outputintrooutputoutro":["configuration-options","output-intro-output-outro"],"outputmanualchunks":["configuration-options","output-manualchunks"],"outputminifyinternalexports":["configuration-options","output-minifyinternalexports"],"outputname":["configuration-options","output-name"],"outputnoconflict":["configuration-options","output-noconflict"],"outputoptions":["plugin-development","outputoptions"],"outputpaths":["configuration-options","output-paths"],"outputplugins":["configuration-options","output-plugins"],"outputpreservemodules":["configuration-options","output-preservemodules"],"outputpreservemodulesroot":["configuration-options","output-preservemodulesroot"],"outputsanitizefilename":["configuration-options","output-sanitizefilename"],"outputsourcemap":["configuration-options","output-sourcemap"],"outputsourcemapbaseurl":["configuration-options","output-sourcemapbaseurl"],"outputsourcemapexcludesources":["configuration-options","output-sourcemapexcludesources"],"outputsourcemapfile":["configuration-options","output-sourcemapfile"],"outputsourcemappathtransform":["configuration-options","output-sourcemappathtransform"],"outputstrict":["configuration-options","output-strict"],"outputsystemnullsetters":["configuration-options","output-systemnullsetters"],"outputvalidate":["configuration-options","output-validate"],"outro":["plugin-development","outro"],"perf":["configuration-options","perf"],"plugin-development":["plugin-development",""],"plugins":["configuration-options","plugins"],"preserveentrysignatures":["configuration-options","preserveentrysignatures"],"preservesymlinks":["configuration-options","preservesymlinks"],"renderchunk":["plugin-development","renderchunk"],"renderdynamicimport":["plugin-development","renderdynamicimport"],"rendererror":["plugin-development","rendererror"],"renderstart":["plugin-development","renderstart"],"resolvedynamicimport":["plugin-development","resolvedynamicimport"],"resolvefileurl":["plugin-development","resolvefileurl"],"resolveid":["plugin-development","resolveid"],"resolveimportmeta":["plugin-development","resolveimportmeta"],"rollupplugin-commonjs":["tools","rollupplugin-commonjs"],"rollupplugin-node-resolve":["tools","rollupplugin-node-resolve"],"rolluprollup":["javascript-api","rollup-rollup"],"rollupwatch":["javascript-api","rollup-watch"],"shimmissingexports":["configuration-options","shimmissingexports"],"shouldtransformcachedmodule":["plugin-development","shouldtransformcachedmodule"],"strictdeprecations":["configuration-options","strictdeprecations"],"thisaddwatchfile":["plugin-development","this-addwatchfile"],"thisemitfile":["plugin-development","this-emitfile"],"thiserror":["plugin-development","this-error"],"thisgetcombinedsourcemap":["plugin-development","this-getcombinedsourcemap"],"thisgetfilename":["plugin-development","this-getfilename"],"thisgetmoduleids":["plugin-development","this-getmoduleids"],"thisgetmoduleinfo":["plugin-development","this-getmoduleinfo"],"thisgetwatchfiles":["plugin-development","this-getwatchfiles"],"thisload":["plugin-development","this-load"],"thismeta":["plugin-development","this-meta"],"thisparse":["plugin-development","this-parse"],"thisresolve":["plugin-development","this-resolve"],"thissetassetsource":["plugin-development","this-setassetsource"],"thiswarn":["plugin-development","this-warn"],"tools":["tools",""],"transform":["plugin-development","transform"],"treeshake":["configuration-options","treeshake"],"troubleshooting":["troubleshooting",""],"tutorial":["tutorial",""],"warning-sourcemap-is-likely-to-be-incorrect":["troubleshooting","warning-sourcemap-is-likely-to-be-incorrect"],"warning-treating-module-as-external-dependency":["troubleshooting","warning-treating-module-as-external-dependency"],"watch-options":["configuration-options","watch"],"watchbuilddelay":["configuration-options","watch-builddelay"],"watchchange":["plugin-development","watchchange"],"watchchokidar":["configuration-options","watch-chokidar"],"watchclearscreen":["configuration-options","watch-clearscreen"],"watchexclude":["configuration-options","watch-exclude"],"watchinclude":["configuration-options","watch-include"],"watchoptions":["javascript-api","watchoptions"],"watchskipwrite":["configuration-options","watch-skipwrite"],"who-made-the-rollup-logo-its-lovely":["faqs","who-made-the-rollup-logo-it-s-lovely"],"writebundle":["plugin-development","writebundle"]}
\ No newline at end of file
diff --git a/docs/javascript-api/index.md b/docs/javascript-api/index.md
index 94441d9e6..b030ebc8c 100755
--- a/docs/javascript-api/index.md
+++ b/docs/javascript-api/index.md
@@ -167,7 +167,8 @@ const inputOptions = {
// 实验性
experimentalCacheExpiry,
experimentalLogSideEffects,
- perf
+ perf,
+ fs
};
```
@@ -320,6 +321,7 @@ const watchOptions = {
...inputOptions,
output: [outputOptions],
watch: {
+ allowInputInsideOutputPath,
buildDelay,
chokidar,
clearScreen,
diff --git a/docs/plugin-development/index.md b/docs/plugin-development/index.md
index f5962df8b..05ac021b4 100644
--- a/docs/plugin-development/index.md
+++ b/docs/plugin-development/index.md
@@ -1596,6 +1596,14 @@ function myPlugin() {
当在 `transform` 钩子中使用时,当前模块的 `id` 也将被添加,并且可以提供一个 `position`。这是一个字符索引或文件位置,它将用于增强日志,包括 `pos`,`loc`(一个标准的 `{ file, line, column }` 对象)和 `frame`(显示位置的代码片段)。
+### this.fs
+
+| | |
+| -----: | :--------------- |
+| 类型: | `RollupFsModule` |
+
+提供对文件系统的抽象访问。有关 `RollupFsModule` 类型的信息,请参阅 [`fs` 选项](../configuration-options/index.md#fs) 的文档。如果插件使用此选项而不是直接导入 `node:fs`,则它们可以在提供内存文件系统的浏览器构建中使用。
+
### this.getCombinedSourcemap
| | |
diff --git a/package-lock.json b/package-lock.json
index aee11d6d1..e82217701 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "rollup",
- "version": "4.41.1",
+ "version": "4.43.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "rollup",
- "version": "4.41.1",
+ "version": "4.43.0",
"license": "MIT",
"dependencies": {
"@types/estree": "1.0.7"
@@ -17,11 +17,11 @@
"devDependencies": {
"@codemirror/commands": "^6.8.1",
"@codemirror/lang-javascript": "^6.2.4",
- "@codemirror/language": "^6.11.0",
+ "@codemirror/language": "^6.11.1",
"@codemirror/search": "^6.5.11",
"@codemirror/state": "^6.5.2",
- "@codemirror/view": "^6.36.8",
- "@eslint/js": "^9.27.0",
+ "@codemirror/view": "^6.37.1",
+ "@eslint/js": "^9.28.0",
"@inquirer/prompts": "^7.5.3",
"@jridgewell/sourcemap-codec": "^1.5.0",
"@mermaid-js/mermaid-cli": "^11.4.2",
@@ -37,7 +37,7 @@
"@rollup/pluginutils": "^5.1.4",
"@shikijs/vitepress-twoslash": "^3.4.2",
"@types/mocha": "^10.0.10",
- "@types/node": "^18.19.103",
+ "@types/node": "^18.19.110",
"@types/picomatch": "^4.0.0",
"@types/semver": "^7.7.0",
"@types/yargs-parser": "^21.0.3",
@@ -54,9 +54,9 @@
"date-time": "^4.0.0",
"es5-shim": "^4.6.7",
"es6-shim": "^0.35.8",
- "eslint": "^9.27.0",
+ "eslint": "^9.28.0",
"eslint-config-prettier": "^10.1.5",
- "eslint-plugin-prettier": "^5.4.0",
+ "eslint-plugin-prettier": "^5.4.1",
"eslint-plugin-unicorn": "^59.0.1",
"eslint-plugin-vue": "^10.1.0",
"fixturify": "^3.0.0",
@@ -66,9 +66,10 @@
"globals": "^16.2.0",
"husky": "^9.1.7",
"is-reference": "^3.0.3",
- "lint-staged": "^16.0.0",
+ "lint-staged": "^16.1.0",
"locate-character": "^3.0.0",
"magic-string": "^0.30.17",
+ "memfs": "^4.17.0",
"mocha": "^11.5.0",
"nodemon": "^3.1.10",
"nyc": "^17.1.0",
@@ -89,13 +90,13 @@
"source-map": "^0.7.4",
"source-map-support": "^0.5.21",
"systemjs": "^6.15.1",
- "terser": "^5.39.2",
+ "terser": "^5.40.0",
"tslib": "^2.8.1",
"typescript": "^5.8.3",
- "typescript-eslint": "^8.32.1",
+ "typescript-eslint": "^8.33.1",
"vite": "^6.3.5",
"vitepress": "^1.6.3",
- "vue": "^3.5.15",
+ "vue": "^3.5.16",
"vue-tsc": "^2.2.10",
"wasm-pack": "^0.13.1",
"yargs-parser": "^21.1.1"
@@ -158,41 +159,41 @@
}
},
"node_modules/@algolia/client-abtesting": {
- "version": "5.25.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.25.0.tgz",
- "integrity": "sha512-1pfQulNUYNf1Tk/svbfjfkLBS36zsuph6m+B6gDkPEivFmso/XnRgwDvjAx80WNtiHnmeNjIXdF7Gos8+OLHqQ==",
+ "version": "5.27.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.27.0.tgz",
+ "integrity": "sha512-SITU5umoknxETtw67TxJu9njyMkWiH8pM+Bvw4dzfuIrIAT6Y1rmwV4y0A0didWoT+6xVuammIykbtBMolBcmg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.25.0",
- "@algolia/requester-browser-xhr": "5.25.0",
- "@algolia/requester-fetch": "5.25.0",
- "@algolia/requester-node-http": "5.25.0"
+ "@algolia/client-common": "5.27.0",
+ "@algolia/requester-browser-xhr": "5.27.0",
+ "@algolia/requester-fetch": "5.27.0",
+ "@algolia/requester-node-http": "5.27.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/client-analytics": {
- "version": "5.25.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.25.0.tgz",
- "integrity": "sha512-AFbG6VDJX/o2vDd9hqncj1B6B4Tulk61mY0pzTtzKClyTDlNP0xaUiEKhl6E7KO9I/x0FJF5tDCm0Hn6v5x18A==",
+ "version": "5.27.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.27.0.tgz",
+ "integrity": "sha512-go1b9qIZK5vYEQ7jD2bsfhhhVsoh9cFxQ5xF8TzTsg2WOCZR3O92oXCkq15SOK0ngJfqDU6a/k0oZ4KuEnih1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.25.0",
- "@algolia/requester-browser-xhr": "5.25.0",
- "@algolia/requester-fetch": "5.25.0",
- "@algolia/requester-node-http": "5.25.0"
+ "@algolia/client-common": "5.27.0",
+ "@algolia/requester-browser-xhr": "5.27.0",
+ "@algolia/requester-fetch": "5.27.0",
+ "@algolia/requester-node-http": "5.27.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/client-common": {
- "version": "5.25.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.25.0.tgz",
- "integrity": "sha512-il1zS/+Rc6la6RaCdSZ2YbJnkQC6W1wiBO8+SH+DE6CPMWBU6iDVzH0sCKSAtMWl9WBxoN6MhNjGBnCv9Yy2bA==",
+ "version": "5.27.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.27.0.tgz",
+ "integrity": "sha512-tnFOzdNuMzsz93kOClj3fKfuYoF3oYaEB5bggULSj075GJ7HUNedBEm7a6ScrjtnOaOtipbnT7veUpHA4o4wEQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -200,151 +201,151 @@
}
},
"node_modules/@algolia/client-insights": {
- "version": "5.25.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.25.0.tgz",
- "integrity": "sha512-blbjrUH1siZNfyCGeq0iLQu00w3a4fBXm0WRIM0V8alcAPo7rWjLbMJMrfBtzL9X5ic6wgxVpDADXduGtdrnkw==",
+ "version": "5.27.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.27.0.tgz",
+ "integrity": "sha512-y1qgw39qZijjQBXrqZTiwK1cWgWGRiLpJNWBv9w36nVMKfl9kInrfsYmdBAfmlhVgF/+Woe0y1jQ7pa4HyShAw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.25.0",
- "@algolia/requester-browser-xhr": "5.25.0",
- "@algolia/requester-fetch": "5.25.0",
- "@algolia/requester-node-http": "5.25.0"
+ "@algolia/client-common": "5.27.0",
+ "@algolia/requester-browser-xhr": "5.27.0",
+ "@algolia/requester-fetch": "5.27.0",
+ "@algolia/requester-node-http": "5.27.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/client-personalization": {
- "version": "5.25.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.25.0.tgz",
- "integrity": "sha512-aywoEuu1NxChBcHZ1pWaat0Plw7A8jDMwjgRJ00Mcl7wGlwuPt5dJ/LTNcg3McsEUbs2MBNmw0ignXBw9Tbgow==",
+ "version": "5.27.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.27.0.tgz",
+ "integrity": "sha512-XluG9qPZKEbiLoIfXTKbABsWDNOMPx0t6T2ImJTTeuX+U/zBdmfcqqgcgkqXp+vbXof/XX/4of9Eqo1JaqEmKw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.25.0",
- "@algolia/requester-browser-xhr": "5.25.0",
- "@algolia/requester-fetch": "5.25.0",
- "@algolia/requester-node-http": "5.25.0"
+ "@algolia/client-common": "5.27.0",
+ "@algolia/requester-browser-xhr": "5.27.0",
+ "@algolia/requester-fetch": "5.27.0",
+ "@algolia/requester-node-http": "5.27.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/client-query-suggestions": {
- "version": "5.25.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.25.0.tgz",
- "integrity": "sha512-a/W2z6XWKjKjIW1QQQV8PTTj1TXtaKx79uR3NGBdBdGvVdt24KzGAaN7sCr5oP8DW4D3cJt44wp2OY/fZcPAVA==",
+ "version": "5.27.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.27.0.tgz",
+ "integrity": "sha512-V8/To+SsAl2sdw2AAjeLJuCW1L+xpz+LAGerJK7HKqHzE5yQhWmIWZTzqYQcojkii4iBMYn0y3+uReWqT8XVSQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.25.0",
- "@algolia/requester-browser-xhr": "5.25.0",
- "@algolia/requester-fetch": "5.25.0",
- "@algolia/requester-node-http": "5.25.0"
+ "@algolia/client-common": "5.27.0",
+ "@algolia/requester-browser-xhr": "5.27.0",
+ "@algolia/requester-fetch": "5.27.0",
+ "@algolia/requester-node-http": "5.27.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/client-search": {
- "version": "5.25.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.25.0.tgz",
- "integrity": "sha512-9rUYcMIBOrCtYiLX49djyzxqdK9Dya/6Z/8sebPn94BekT+KLOpaZCuc6s0Fpfq7nx5J6YY5LIVFQrtioK9u0g==",
+ "version": "5.27.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.27.0.tgz",
+ "integrity": "sha512-EJJ7WmvmUXZdchueKFCK8UZFyLqy4Hz64snNp0cTc7c0MKaSeDGYEDxVsIJKp15r7ORaoGxSyS4y6BGZMXYuCg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.25.0",
- "@algolia/requester-browser-xhr": "5.25.0",
- "@algolia/requester-fetch": "5.25.0",
- "@algolia/requester-node-http": "5.25.0"
+ "@algolia/client-common": "5.27.0",
+ "@algolia/requester-browser-xhr": "5.27.0",
+ "@algolia/requester-fetch": "5.27.0",
+ "@algolia/requester-node-http": "5.27.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/ingestion": {
- "version": "1.25.0",
- "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.25.0.tgz",
- "integrity": "sha512-jJeH/Hk+k17Vkokf02lkfYE4A+EJX+UgnMhTLR/Mb+d1ya5WhE+po8p5a/Nxb6lo9OLCRl6w3Hmk1TX1e9gVbQ==",
+ "version": "1.27.0",
+ "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.27.0.tgz",
+ "integrity": "sha512-xNCyWeqpmEo4EdmpG57Fs1fJIQcPwt5NnJ6MBdXnUdMVXF4f5PHgza+HQWQQcYpCsune96jfmR0v7us6gRIlCw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.25.0",
- "@algolia/requester-browser-xhr": "5.25.0",
- "@algolia/requester-fetch": "5.25.0",
- "@algolia/requester-node-http": "5.25.0"
+ "@algolia/client-common": "5.27.0",
+ "@algolia/requester-browser-xhr": "5.27.0",
+ "@algolia/requester-fetch": "5.27.0",
+ "@algolia/requester-node-http": "5.27.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/monitoring": {
- "version": "1.25.0",
- "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.25.0.tgz",
- "integrity": "sha512-Ls3i1AehJ0C6xaHe7kK9vPmzImOn5zBg7Kzj8tRYIcmCWVyuuFwCIsbuIIz/qzUf1FPSWmw0TZrGeTumk2fqXg==",
+ "version": "1.27.0",
+ "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.27.0.tgz",
+ "integrity": "sha512-P0NDiEFyt9UYQLBI0IQocIT7xHpjMpoFN3UDeerbztlkH9HdqT0GGh1SHYmNWpbMWIGWhSJTtz6kSIWvFu4+pw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.25.0",
- "@algolia/requester-browser-xhr": "5.25.0",
- "@algolia/requester-fetch": "5.25.0",
- "@algolia/requester-node-http": "5.25.0"
+ "@algolia/client-common": "5.27.0",
+ "@algolia/requester-browser-xhr": "5.27.0",
+ "@algolia/requester-fetch": "5.27.0",
+ "@algolia/requester-node-http": "5.27.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/recommend": {
- "version": "5.25.0",
- "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.25.0.tgz",
- "integrity": "sha512-79sMdHpiRLXVxSjgw7Pt4R1aNUHxFLHiaTDnN2MQjHwJ1+o3wSseb55T9VXU4kqy3m7TUme3pyRhLk5ip/S4Mw==",
+ "version": "5.27.0",
+ "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.27.0.tgz",
+ "integrity": "sha512-cqfTMF1d1cc7hg0vITNAFxJZas7MJ4Obc36WwkKpY23NOtGb+4tH9X7UKlQa2PmTgbXIANoJ/DAQTeiVlD2I4Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.25.0",
- "@algolia/requester-browser-xhr": "5.25.0",
- "@algolia/requester-fetch": "5.25.0",
- "@algolia/requester-node-http": "5.25.0"
+ "@algolia/client-common": "5.27.0",
+ "@algolia/requester-browser-xhr": "5.27.0",
+ "@algolia/requester-fetch": "5.27.0",
+ "@algolia/requester-node-http": "5.27.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/requester-browser-xhr": {
- "version": "5.25.0",
- "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.25.0.tgz",
- "integrity": "sha512-JLaF23p1SOPBmfEqozUAgKHQrGl3z/Z5RHbggBu6s07QqXXcazEsub5VLonCxGVqTv6a61AAPr8J1G5HgGGjEw==",
+ "version": "5.27.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.27.0.tgz",
+ "integrity": "sha512-ErenYTcXl16wYXtf0pxLl9KLVxIztuehqXHfW9nNsD8mz9OX42HbXuPzT7y6JcPiWJpc/UU/LY5wBTB65vsEUg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.25.0"
+ "@algolia/client-common": "5.27.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/requester-fetch": {
- "version": "5.25.0",
- "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.25.0.tgz",
- "integrity": "sha512-rtzXwqzFi1edkOF6sXxq+HhmRKDy7tz84u0o5t1fXwz0cwx+cjpmxu/6OQKTdOJFS92JUYHsG51Iunie7xbqfQ==",
+ "version": "5.27.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.27.0.tgz",
+ "integrity": "sha512-CNOvmXsVi+IvT7z1d+6X7FveVkgEQwTNgipjQCHTIbF9KSMfZR7tUsJC+NpELrm10ALdOMauah84ybs9rw1cKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.25.0"
+ "@algolia/client-common": "5.27.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/requester-node-http": {
- "version": "5.25.0",
- "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.25.0.tgz",
- "integrity": "sha512-ZO0UKvDyEFvyeJQX0gmZDQEvhLZ2X10K+ps6hViMo1HgE2V8em00SwNsQ+7E/52a+YiBkVWX61pJJJE44juDMQ==",
+ "version": "5.27.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.27.0.tgz",
+ "integrity": "sha512-Nx9EdLYZDsaYFTthqmc0XcVvsx6jqeEX8fNiYOB5i2HboQwl8pJPj1jFhGqoGd0KG7KFR+sdPO5/e0EDDAru2Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.25.0"
+ "@algolia/client-common": "5.27.0"
},
"engines": {
"node": ">= 14.0.0"
@@ -417,9 +418,9 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.3.tgz",
- "integrity": "sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==",
+ "version": "7.27.5",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz",
+ "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -427,9 +428,9 @@
}
},
"node_modules/@babel/core": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.3.tgz",
- "integrity": "sha512-hyrN8ivxfvJ4i0fIJuV4EOlV0WDMz5Ui4StRTgVaAvWeiRCilXgwVvxJKtFQ3TKtHgJscB2YiXKGNJuVwhQMtA==",
+ "version": "7.27.4",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz",
+ "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -438,10 +439,10 @@
"@babel/generator": "^7.27.3",
"@babel/helper-compilation-targets": "^7.27.2",
"@babel/helper-module-transforms": "^7.27.3",
- "@babel/helpers": "^7.27.3",
- "@babel/parser": "^7.27.3",
+ "@babel/helpers": "^7.27.4",
+ "@babel/parser": "^7.27.4",
"@babel/template": "^7.27.2",
- "@babel/traverse": "^7.27.3",
+ "@babel/traverse": "^7.27.4",
"@babel/types": "^7.27.3",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
@@ -465,13 +466,13 @@
"license": "MIT"
},
"node_modules/@babel/generator": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.3.tgz",
- "integrity": "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==",
+ "version": "7.27.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz",
+ "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.27.3",
+ "@babel/parser": "^7.27.5",
"@babel/types": "^7.27.3",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
@@ -561,23 +562,23 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.3.tgz",
- "integrity": "sha512-h/eKy9agOya1IGuLaZ9tEUgz+uIRXcbtOhRtUyyMf8JFmn1iT13vnl/IGVWSkdOCG/pC57U4S1jnAabAavTMwg==",
+ "version": "7.27.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz",
+ "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.27.2",
- "@babel/types": "^7.27.3"
+ "@babel/types": "^7.27.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.3.tgz",
- "integrity": "sha512-xyYxRj6+tLNDTWi0KCBcZ9V7yg3/lwL9DWh9Uwh/RIVlIfFidggcgxKX3GCXwCiswwcGRawBKbEg2LG/Y8eJhw==",
+ "version": "7.27.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz",
+ "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -606,15 +607,15 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.3.tgz",
- "integrity": "sha512-lId/IfN/Ye1CIu8xG7oKBHXd2iNb2aW1ilPszzGcJug6M8RCKfVNcYhpI5+bMvFYjK7lXIM0R+a+6r8xhHp2FQ==",
+ "version": "7.27.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz",
+ "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.27.3",
- "@babel/parser": "^7.27.3",
+ "@babel/parser": "^7.27.4",
"@babel/template": "^7.27.2",
"@babel/types": "^7.27.3",
"debug": "^4.3.1",
@@ -635,9 +636,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz",
- "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==",
+ "version": "7.27.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz",
+ "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -742,9 +743,9 @@
}
},
"node_modules/@codemirror/language": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.0.tgz",
- "integrity": "sha512-A7+f++LodNNc1wGgoRDTt78cOwWm9KVezApgjOMp1W4hM0898nsqBXwF+sbePE7ZRcjN7Sa1Z5m2oN27XkmEjQ==",
+ "version": "6.11.1",
+ "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.1.tgz",
+ "integrity": "sha512-5kS1U7emOGV84vxC+ruBty5sUgcD0te6dyupyRVG2zaSjhTDM73LhVKUtVwiqSe6QwmEoA4SCiU8AKPFyumAWQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -791,13 +792,14 @@
}
},
"node_modules/@codemirror/view": {
- "version": "6.37.0",
- "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.37.0.tgz",
- "integrity": "sha512-ghHIeRGfWB8h9Tc3sMdr7D5zp4sZvlCzG36Xjdh2ymmfAwvSaCJAAsL3HLyLEnHcE953+5Uox1bx5OS+YCW/7Q==",
+ "version": "6.37.1",
+ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.37.1.tgz",
+ "integrity": "sha512-Qy4CAUwngy/VQkEz0XzMKVRcckQuqLYWKqVpDDDghBe5FSXSqfVrJn49nw3ePZHxRUz4nRmb05Lgi+9csWo4eg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@codemirror/state": "^6.5.0",
+ "crelt": "^1.0.6",
"style-mod": "^4.1.0",
"w3c-keyname": "^2.2.4"
}
@@ -1506,9 +1508,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.27.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz",
- "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==",
+ "version": "9.28.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz",
+ "integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1543,9 +1545,9 @@
}
},
"node_modules/@floating-ui/core": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.0.tgz",
- "integrity": "sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==",
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.1.tgz",
+ "integrity": "sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1553,13 +1555,13 @@
}
},
"node_modules/@floating-ui/dom": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.0.tgz",
- "integrity": "sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==",
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.1.tgz",
+ "integrity": "sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@floating-ui/core": "^1.7.0",
+ "@floating-ui/core": "^1.7.1",
"@floating-ui/utils": "^0.2.9"
}
},
@@ -1721,9 +1723,9 @@
}
},
"node_modules/@iconify-json/simple-icons": {
- "version": "1.2.36",
- "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.36.tgz",
- "integrity": "sha512-ZMpVdoW/7hhbt2aHVSvudjH8eSVNNjKkAAjwAQHgiuPUiIfbvNakVin+H9uhUz4N9TbDT/nanzV/4Slb+6dDXw==",
+ "version": "1.2.37",
+ "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.37.tgz",
+ "integrity": "sha512-jZwTBznpYVDYKWyAuRpepPpCiHScVrX6f8WRX8ReX6pdii99LYVHwJywKcH2excWQrWmBomC9nkxGlEKzXZ/wQ==",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
@@ -2341,6 +2343,63 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@jsonjoy.com/base64": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz",
+ "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/json-pack": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.2.0.tgz",
+ "integrity": "sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jsonjoy.com/base64": "^1.1.1",
+ "@jsonjoy.com/util": "^1.1.2",
+ "hyperdyperid": "^1.2.0",
+ "thingies": "^1.20.0"
+ },
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/util": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.6.0.tgz",
+ "integrity": "sha512-sw/RMbehRhN68WRtcKCpQOPfnH6lLP4GJfqzi3iYej8tnzpZUDr6UkZYJjcjjC0FWEJOJbyM3PTIwxucUmDG2A==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
"node_modules/@lezer/common": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz",
@@ -2500,9 +2559,9 @@
}
},
"node_modules/@pkgr/core": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz",
- "integrity": "sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==",
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.7.tgz",
+ "integrity": "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3036,59 +3095,59 @@
]
},
"node_modules/@shikijs/core": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.4.2.tgz",
- "integrity": "sha512-AG8vnSi1W2pbgR2B911EfGqtLE9c4hQBYkv/x7Z+Kt0VxhgQKcW7UNDVYsu9YxwV6u+OJrvdJrMq6DNWoBjihQ==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.6.0.tgz",
+ "integrity": "sha512-9By7Xb3olEX0o6UeJyPLI1PE1scC4d3wcVepvtv2xbuN9/IThYN4Wcwh24rcFeASzPam11MCq8yQpwwzCgSBRw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.4.2",
+ "@shikijs/types": "3.6.0",
"@shikijs/vscode-textmate": "^10.0.2",
"@types/hast": "^3.0.4",
"hast-util-to-html": "^9.0.5"
}
},
"node_modules/@shikijs/engine-javascript": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.4.2.tgz",
- "integrity": "sha512-1/adJbSMBOkpScCE/SB6XkjJU17ANln3Wky7lOmrnpl+zBdQ1qXUJg2GXTYVHRq+2j3hd1DesmElTXYDgtfSOQ==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.6.0.tgz",
+ "integrity": "sha512-7YnLhZG/TU05IHMG14QaLvTW/9WiK8SEYafceccHUSXs2Qr5vJibUwsDfXDLmRi0zHdzsxrGKpSX6hnqe0k8nA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.4.2",
+ "@shikijs/types": "3.6.0",
"@shikijs/vscode-textmate": "^10.0.2",
"oniguruma-to-es": "^4.3.3"
}
},
"node_modules/@shikijs/engine-oniguruma": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.4.2.tgz",
- "integrity": "sha512-zcZKMnNndgRa3ORja6Iemsr3DrLtkX3cAF7lTJkdMB6v9alhlBsX9uNiCpqofNrXOvpA3h6lHcLJxgCIhVOU5Q==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.6.0.tgz",
+ "integrity": "sha512-nmOhIZ9yT3Grd+2plmW/d8+vZ2pcQmo/UnVwXMUXAKTXdi+LK0S08Ancrz5tQQPkxvjBalpMW2aKvwXfelauvA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.4.2",
+ "@shikijs/types": "3.6.0",
"@shikijs/vscode-textmate": "^10.0.2"
}
},
"node_modules/@shikijs/langs": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.4.2.tgz",
- "integrity": "sha512-H6azIAM+OXD98yztIfs/KH5H4PU39t+SREhmM8LaNXyUrqj2mx+zVkr8MWYqjceSjDw9I1jawm1WdFqU806rMA==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.6.0.tgz",
+ "integrity": "sha512-IdZkQJaLBu1LCYCwkr30hNuSDfllOT8RWYVZK1tD2J03DkiagYKRxj/pDSl8Didml3xxuyzUjgtioInwEQM/TA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.4.2"
+ "@shikijs/types": "3.6.0"
}
},
"node_modules/@shikijs/themes": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.4.2.tgz",
- "integrity": "sha512-qAEuAQh+brd8Jyej2UDDf+b4V2g1Rm8aBIdvt32XhDPrHvDkEnpb7Kzc9hSuHUxz0Iuflmq7elaDuQAP9bHIhg==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.6.0.tgz",
+ "integrity": "sha512-Fq2j4nWr1DF4drvmhqKq8x5vVQ27VncF8XZMBuHuQMZvUSS3NBgpqfwz/FoGe36+W6PvniZ1yDlg2d4kmYDU6w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.4.2"
+ "@shikijs/types": "3.6.0"
}
},
"node_modules/@shikijs/transformers": {
@@ -3164,14 +3223,14 @@
}
},
"node_modules/@shikijs/twoslash": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-3.4.2.tgz",
- "integrity": "sha512-zRNPmi2lA8o+k7UQfmbPwH2jPvfW9OrgpsO4OUOM+8QTxrepFU9TNF8vNcxZEW5cbishQkJrV19cI9Zk3cb5aQ==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-3.6.0.tgz",
+ "integrity": "sha512-AxRxLWtmrVftwxN/2hSL6Hym+bannS+zuUEXpbNuo6BpG4jHTM0KEkICEH3B3Gm5ZNzGdI74NdDiAqAZ6WPJuQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@shikijs/core": "3.4.2",
- "@shikijs/types": "3.4.2",
+ "@shikijs/core": "3.6.0",
+ "@shikijs/types": "3.6.0",
"twoslash": "^0.3.1"
},
"peerDependencies": {
@@ -3179,9 +3238,9 @@
}
},
"node_modules/@shikijs/types": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.4.2.tgz",
- "integrity": "sha512-zHC1l7L+eQlDXLnxvM9R91Efh2V4+rN3oMVS2swCBssbj2U/FBwybD1eeLaq8yl/iwT+zih8iUbTBCgGZOYlVg==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.6.0.tgz",
+ "integrity": "sha512-cLWFiToxYu0aAzJqhXTQsFiJRTFDAGl93IrMSBNaGSzs7ixkLfdG6pH11HipuWFGW5vyx4X47W8HDQ7eSrmBUg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3190,9 +3249,9 @@
}
},
"node_modules/@shikijs/vitepress-twoslash": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@shikijs/vitepress-twoslash/-/vitepress-twoslash-3.4.2.tgz",
- "integrity": "sha512-irVhypyX0vs79S00buqBGYeBJnBtBV50nqppPcKz3TiGlaWxH3BqcCLbJ6cl39N1hxzzuI51SVQv21SbjfsCBA==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/vitepress-twoslash/-/vitepress-twoslash-3.6.0.tgz",
+ "integrity": "sha512-pUoRj98UDV41CxfxPysrBryc1/1WdUL93ogcD/s156i4XcujnCfJJc+y5vR3W5Nc1R31VUacwWsI8HhaRRS/uA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3201,10 +3260,10 @@
"mdast-util-from-markdown": "^2.0.2",
"mdast-util-gfm": "^3.1.0",
"mdast-util-to-hast": "^13.2.0",
- "shiki": "3.4.2",
+ "shiki": "3.6.0",
"twoslash": "^0.3.1",
"twoslash-vue": "^0.3.1",
- "vue": "^3.5.14"
+ "vue": "^3.5.16"
}
},
"node_modules/@shikijs/vscode-textmate": {
@@ -3686,9 +3745,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "18.19.107",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.107.tgz",
- "integrity": "sha512-uvHN/vnsPj8hJWaqXUjT59LKYh0RlZXsdYa4CGz4R9aFGePPsUPN0xlHrDzOset937H2TunFJ8SwPCX69y9qhA==",
+ "version": "18.19.111",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.111.tgz",
+ "integrity": "sha512-90sGdgA+QLJr1F9X79tQuEut0gEYIfkX9pydI4XGRgvFo9g2JWswefI+WUSUHPYVBHYSEfTEqBxA5hQvAZB3Mw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3779,17 +3838,17 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.0.tgz",
- "integrity": "sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ==",
+ "version": "8.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.0.tgz",
+ "integrity": "sha512-QXwAlHlbcAwNlEEMKQS2RCgJsgXrTJdjXT08xEgbPFa2yYQgVjBymxP5DrfrE7X7iodSzd9qBUHUycdyVJTW1w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.33.0",
- "@typescript-eslint/type-utils": "8.33.0",
- "@typescript-eslint/utils": "8.33.0",
- "@typescript-eslint/visitor-keys": "8.33.0",
+ "@typescript-eslint/scope-manager": "8.34.0",
+ "@typescript-eslint/type-utils": "8.34.0",
+ "@typescript-eslint/utils": "8.34.0",
+ "@typescript-eslint/visitor-keys": "8.34.0",
"graphemer": "^1.4.0",
"ignore": "^7.0.0",
"natural-compare": "^1.4.0",
@@ -3803,15 +3862,15 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.33.0",
+ "@typescript-eslint/parser": "^8.34.0",
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <5.9.0"
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz",
- "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3819,16 +3878,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.0.tgz",
- "integrity": "sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==",
+ "version": "8.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.0.tgz",
+ "integrity": "sha512-vxXJV1hVFx3IXz/oy2sICsJukaBrtDEQSBiV48/YIV5KWjX1dO+bcIr/kCPrW6weKXvsaGKFNlwH0v2eYdRRbA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.33.0",
- "@typescript-eslint/types": "8.33.0",
- "@typescript-eslint/typescript-estree": "8.33.0",
- "@typescript-eslint/visitor-keys": "8.33.0",
+ "@typescript-eslint/scope-manager": "8.34.0",
+ "@typescript-eslint/types": "8.34.0",
+ "@typescript-eslint/typescript-estree": "8.34.0",
+ "@typescript-eslint/visitor-keys": "8.34.0",
"debug": "^4.3.4"
},
"engines": {
@@ -3844,14 +3903,14 @@
}
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.0.tgz",
- "integrity": "sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==",
+ "version": "8.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.0.tgz",
+ "integrity": "sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.33.0",
- "@typescript-eslint/types": "^8.33.0",
+ "@typescript-eslint/tsconfig-utils": "^8.34.0",
+ "@typescript-eslint/types": "^8.34.0",
"debug": "^4.3.4"
},
"engines": {
@@ -3860,17 +3919,20 @@
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <5.9.0"
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.0.tgz",
- "integrity": "sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==",
+ "version": "8.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.0.tgz",
+ "integrity": "sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.33.0",
- "@typescript-eslint/visitor-keys": "8.33.0"
+ "@typescript-eslint/types": "8.34.0",
+ "@typescript-eslint/visitor-keys": "8.34.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3881,9 +3943,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.0.tgz",
- "integrity": "sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==",
+ "version": "8.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.0.tgz",
+ "integrity": "sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3898,14 +3960,14 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.0.tgz",
- "integrity": "sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ==",
+ "version": "8.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.0.tgz",
+ "integrity": "sha512-n7zSmOcUVhcRYC75W2pnPpbO1iwhJY3NLoHEtbJwJSNlVAZuwqu05zY3f3s2SDWWDSo9FdN5szqc73DCtDObAg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/typescript-estree": "8.33.0",
- "@typescript-eslint/utils": "8.33.0",
+ "@typescript-eslint/typescript-estree": "8.34.0",
+ "@typescript-eslint/utils": "8.34.0",
"debug": "^4.3.4",
"ts-api-utils": "^2.1.0"
},
@@ -3922,9 +3984,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.0.tgz",
- "integrity": "sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==",
+ "version": "8.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.0.tgz",
+ "integrity": "sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3936,16 +3998,16 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.0.tgz",
- "integrity": "sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==",
+ "version": "8.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.0.tgz",
+ "integrity": "sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.33.0",
- "@typescript-eslint/tsconfig-utils": "8.33.0",
- "@typescript-eslint/types": "8.33.0",
- "@typescript-eslint/visitor-keys": "8.33.0",
+ "@typescript-eslint/project-service": "8.34.0",
+ "@typescript-eslint/tsconfig-utils": "8.34.0",
+ "@typescript-eslint/types": "8.34.0",
+ "@typescript-eslint/visitor-keys": "8.34.0",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
@@ -3965,16 +4027,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.0.tgz",
- "integrity": "sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==",
+ "version": "8.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.0.tgz",
+ "integrity": "sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.7.0",
- "@typescript-eslint/scope-manager": "8.33.0",
- "@typescript-eslint/types": "8.33.0",
- "@typescript-eslint/typescript-estree": "8.33.0"
+ "@typescript-eslint/scope-manager": "8.34.0",
+ "@typescript-eslint/types": "8.34.0",
+ "@typescript-eslint/typescript-estree": "8.34.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3989,13 +4051,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.0.tgz",
- "integrity": "sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==",
+ "version": "8.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.0.tgz",
+ "integrity": "sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.33.0",
+ "@typescript-eslint/types": "8.34.0",
"eslint-visitor-keys": "^4.2.0"
},
"engines": {
@@ -4618,25 +4680,25 @@
}
},
"node_modules/algoliasearch": {
- "version": "5.25.0",
- "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.25.0.tgz",
- "integrity": "sha512-n73BVorL4HIwKlfJKb4SEzAYkR3Buwfwbh+MYxg2mloFph2fFGV58E90QTzdbfzWrLn4HE5Czx/WTjI8fcHaMg==",
+ "version": "5.27.0",
+ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.27.0.tgz",
+ "integrity": "sha512-2PvAgvxxJzA3+dB+ERfS2JPdvUsxNf89Cc2GF5iCcFupTULOwmbfinvqrC4Qj9nHJJDNf494NqEN/1f9177ZTQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@algolia/client-abtesting": "5.25.0",
- "@algolia/client-analytics": "5.25.0",
- "@algolia/client-common": "5.25.0",
- "@algolia/client-insights": "5.25.0",
- "@algolia/client-personalization": "5.25.0",
- "@algolia/client-query-suggestions": "5.25.0",
- "@algolia/client-search": "5.25.0",
- "@algolia/ingestion": "1.25.0",
- "@algolia/monitoring": "1.25.0",
- "@algolia/recommend": "5.25.0",
- "@algolia/requester-browser-xhr": "5.25.0",
- "@algolia/requester-fetch": "5.25.0",
- "@algolia/requester-node-http": "5.25.0"
+ "@algolia/client-abtesting": "5.27.0",
+ "@algolia/client-analytics": "5.27.0",
+ "@algolia/client-common": "5.27.0",
+ "@algolia/client-insights": "5.27.0",
+ "@algolia/client-personalization": "5.27.0",
+ "@algolia/client-query-suggestions": "5.27.0",
+ "@algolia/client-search": "5.27.0",
+ "@algolia/ingestion": "1.27.0",
+ "@algolia/monitoring": "1.27.0",
+ "@algolia/recommend": "5.27.0",
+ "@algolia/requester-browser-xhr": "5.27.0",
+ "@algolia/requester-fetch": "5.27.0",
+ "@algolia/requester-node-http": "5.27.0"
},
"engines": {
"node": ">= 14.0.0"
@@ -5309,9 +5371,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001720",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz",
- "integrity": "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==",
+ "version": "1.0.30001721",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz",
+ "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==",
"dev": true,
"funding": [
{
@@ -6839,9 +6901,9 @@
"license": "MIT"
},
"node_modules/electron-to-chromium": {
- "version": "1.5.161",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.161.tgz",
- "integrity": "sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==",
+ "version": "1.5.165",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.165.tgz",
+ "integrity": "sha512-naiMx1Z6Nb2TxPU6fiFrUrDTjyPMLdTtaOd2oLmG8zVSg2hCWGkhPyxwk+qRmZ1ytwVqUv0u7ZcDA5+ALhaUtw==",
"dev": true,
"license": "ISC"
},
@@ -7114,9 +7176,9 @@
}
},
"node_modules/eslint": {
- "version": "9.27.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz",
- "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==",
+ "version": "9.28.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.28.0.tgz",
+ "integrity": "sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7126,7 +7188,7 @@
"@eslint/config-helpers": "^0.2.1",
"@eslint/core": "^0.14.0",
"@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.27.0",
+ "@eslint/js": "9.28.0",
"@eslint/plugin-kit": "^0.3.1",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
@@ -7191,14 +7253,14 @@
}
},
"node_modules/eslint-plugin-prettier": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.0.tgz",
- "integrity": "sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==",
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.1.tgz",
+ "integrity": "sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==",
"dev": true,
"license": "MIT",
"dependencies": {
"prettier-linter-helpers": "^1.0.0",
- "synckit": "^0.11.0"
+ "synckit": "^0.11.7"
},
"engines": {
"node": "^14.18.0 || >=16.0.0"
@@ -8012,15 +8074,16 @@
}
},
"node_modules/form-data": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
- "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz",
+ "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==",
"dev": true,
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.2",
"mime-types": "^2.1.12"
},
"engines": {
@@ -8568,6 +8631,16 @@
"url": "https://github.com/sponsors/typicode"
}
},
+ "node_modules/hyperdyperid": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz",
+ "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.18"
+ }
+ },
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -10026,6 +10099,26 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/memfs": {
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.17.2.tgz",
+ "integrity": "sha512-NgYhCOWgovOXSzvYgUW0LQ7Qy72rWQMGGFJDoWg4G30RHd3z77VbYdtJ4fembJXBy8pMIUA31XNAupobOQlwdg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jsonjoy.com/json-pack": "^1.0.3",
+ "@jsonjoy.com/util": "^1.3.0",
+ "tree-dump": "^1.0.1",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ }
+ },
"node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -10744,9 +10837,9 @@
}
},
"node_modules/mocha": {
- "version": "11.5.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.5.0.tgz",
- "integrity": "sha512-VKDjhy6LMTKm0WgNEdlY77YVsD49LZnPSXJAaPNL9NRYQADxvORsyG1DIQY6v53BKTnlNbEE2MbVCDbnxr4K3w==",
+ "version": "11.6.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.6.0.tgz",
+ "integrity": "sha512-i0JVb+OUBqw63X/1pC3jCyJsqYisgxySBbsQa8TKvefpA1oEnw7JXxXnftfMHRsw7bEEVGRtVlHcDYXBa7FzVw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10766,7 +10859,7 @@
"serialize-javascript": "^6.0.2",
"strip-json-comments": "^3.1.1",
"supports-color": "^8.1.1",
- "workerpool": "^6.5.1",
+ "workerpool": "^9.2.0",
"yargs": "^17.7.2",
"yargs-parser": "^21.1.1",
"yargs-unparser": "^2.0.0"
@@ -11760,9 +11853,9 @@
}
},
"node_modules/pinia": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.2.tgz",
- "integrity": "sha512-sH2JK3wNY809JOeiiURUR0wehJ9/gd9qFN2Y828jCbxEzKEmEt0pzCXwqiSTfuRsK9vQsOflSdnbdBOGrhtn+g==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz",
+ "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13061,9 +13154,9 @@
}
},
"node_modules/shell-quote": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz",
- "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==",
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
+ "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -13093,18 +13186,18 @@
}
},
"node_modules/shiki": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.4.2.tgz",
- "integrity": "sha512-wuxzZzQG8kvZndD7nustrNFIKYJ1jJoWIPaBpVe2+KHSvtzMi4SBjOxrigs8qeqce/l3U0cwiC+VAkLKSunHQQ==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.6.0.tgz",
+ "integrity": "sha512-tKn/Y0MGBTffQoklaATXmTqDU02zx8NYBGQ+F6gy87/YjKbizcLd+Cybh/0ZtOBX9r1NEnAy/GTRDKtOsc1L9w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@shikijs/core": "3.4.2",
- "@shikijs/engine-javascript": "3.4.2",
- "@shikijs/engine-oniguruma": "3.4.2",
- "@shikijs/langs": "3.4.2",
- "@shikijs/themes": "3.4.2",
- "@shikijs/types": "3.4.2",
+ "@shikijs/core": "3.6.0",
+ "@shikijs/engine-javascript": "3.6.0",
+ "@shikijs/engine-oniguruma": "3.6.0",
+ "@shikijs/langs": "3.6.0",
+ "@shikijs/themes": "3.6.0",
+ "@shikijs/types": "3.6.0",
"@shikijs/vscode-textmate": "^10.0.2",
"@types/hast": "^3.0.4"
}
@@ -13441,9 +13534,9 @@
"peer": true
},
"node_modules/streamx": {
- "version": "2.22.0",
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz",
- "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==",
+ "version": "2.22.1",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.1.tgz",
+ "integrity": "sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -13733,9 +13826,9 @@
}
},
"node_modules/synckit": {
- "version": "0.11.7",
- "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.7.tgz",
- "integrity": "sha512-/5aUeiRPqmY0CRTJ+iVWfOOMHWTDh8JAIuNF1A6nZ2/RdCNWwKaUrO5Qw5ephLK6dYa7NclYBI0ahdgUECvdhA==",
+ "version": "0.11.8",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.8.tgz",
+ "integrity": "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13878,9 +13971,9 @@
"license": "ISC"
},
"node_modules/terser": {
- "version": "5.40.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.40.0.tgz",
- "integrity": "sha512-cfeKl/jjwSR5ar7d0FGmave9hFGJT8obyo0z+CrQOylLDbk7X81nPU6vq9VORa5jU30SkDnT2FXjLbR8HLP+xA==",
+ "version": "5.41.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.41.0.tgz",
+ "integrity": "sha512-H406eLPXpZbAX14+B8psIuvIr8+3c+2hkuYzpMkoE0ij+NdsVATbA78vb8neA/eqrj7rywa2pIkdmWRsXW6wmw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -13998,6 +14091,19 @@
"node": ">=0.8"
}
},
+ "node_modules/thingies": {
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz",
+ "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==",
+ "dev": true,
+ "license": "Unlicense",
+ "engines": {
+ "node": ">=10.18"
+ },
+ "peerDependencies": {
+ "tslib": "^2"
+ }
+ },
"node_modules/thread-stream": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz",
@@ -14096,6 +14202,23 @@
"nodetouch": "bin/nodetouch.js"
}
},
+ "node_modules/tree-dump": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.3.tgz",
+ "integrity": "sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
"node_modules/tree-kill": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
@@ -14294,15 +14417,15 @@
}
},
"node_modules/typescript-eslint": {
- "version": "8.33.0",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.0.tgz",
- "integrity": "sha512-5YmNhF24ylCsvdNW2oJwMzTbaeO4bg90KeGtMjUw0AGtHksgEPLRTUil+coHwCfiu4QjVJFnjp94DmU6zV7DhQ==",
+ "version": "8.34.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.34.0.tgz",
+ "integrity": "sha512-MRpfN7uYjTrTGigFCt8sRyNqJFhjN0WwZecldaqhWm+wy0gaRt8Edb/3cuUy0zdq2opJWT6iXINKAtewnDOltQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "8.33.0",
- "@typescript-eslint/parser": "8.33.0",
- "@typescript-eslint/utils": "8.33.0"
+ "@typescript-eslint/eslint-plugin": "8.34.0",
+ "@typescript-eslint/parser": "8.34.0",
+ "@typescript-eslint/utils": "8.34.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -15006,9 +15129,9 @@
}
},
"node_modules/vscode-css-languageservice": {
- "version": "6.3.5",
- "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.5.tgz",
- "integrity": "sha512-ehEIMXYPYEz/5Svi2raL9OKLpBt5dSAdoCFoLpo0TVFKrVpDemyuQwS3c3D552z/qQCg3pMp8oOLMObY6M3ajQ==",
+ "version": "6.3.6",
+ "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.6.tgz",
+ "integrity": "sha512-fU4h8mT3KlvfRcbF74v/M+Gzbligav6QMx4AD/7CbclWPYOpGb9kgIswfpZVJbIcOEJJACI9iYizkNwdiAqlHw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -15019,9 +15142,9 @@
}
},
"node_modules/vscode-html-languageservice": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.4.0.tgz",
- "integrity": "sha512-9/cbc90BSYCghmHI7/VbWettHZdC7WYpz2g5gBK6UDUI1MkZbM773Q12uAYJx9jzAiNHPpyo6KzcwmcnugncAQ==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.5.0.tgz",
+ "integrity": "sha512-No6Er2P2L8IsXDnUFlp0bP4f2sdkJv+zJLZYFhtEQIp+2xNfxY8WYkhSxLJ/7bZhuV/aU55lmGSSHBVxSGer3Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -15032,9 +15155,9 @@
}
},
"node_modules/vscode-json-languageservice": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.5.0.tgz",
- "integrity": "sha512-JchBzp8ArzhCVpRS/LT4wzEEvwHXIUEdZD064cGTI4RVs34rNCZXPUguIYSfGBcHH1GV79ufPcfy3Pd8+ukbKw==",
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.6.0.tgz",
+ "integrity": "sha512-w1dv0nEoFxaNDq0PlYleYnlM4sFYXtFNZxaGGYy9nsCidXqHMh4RFHqld6XkFOhxs7hRBpK1QuXlH9OFDkTyfg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -15304,9 +15427,9 @@
}
},
"node_modules/workerpool": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
- "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
+ "version": "9.3.2",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.2.tgz",
+ "integrity": "sha512-Xz4Nm9c+LiBHhDR5bDLnNzmj6+5F+cyEAWPMkbs2awq/dYazR/efelZzUAjB/y3kNHL+uzkHvxVVpaOfGCPV7A==",
"dev": true,
"license": "Apache-2.0"
},
diff --git a/package.json b/package.json
index 1346a35e7..1cc4dd08e 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "rollup",
- "version": "4.41.1",
+ "version": "4.43.0",
"description": "Next-generation ES module bundler",
"main": "dist/rollup.js",
"module": "dist/es/rollup.js",
@@ -119,11 +119,11 @@
"devDependencies": {
"@codemirror/commands": "^6.8.1",
"@codemirror/lang-javascript": "^6.2.4",
- "@codemirror/language": "^6.11.0",
+ "@codemirror/language": "^6.11.1",
"@codemirror/search": "^6.5.11",
"@codemirror/state": "^6.5.2",
- "@codemirror/view": "^6.36.8",
- "@eslint/js": "^9.27.0",
+ "@codemirror/view": "^6.37.1",
+ "@eslint/js": "^9.28.0",
"@inquirer/prompts": "^7.5.3",
"@jridgewell/sourcemap-codec": "^1.5.0",
"@mermaid-js/mermaid-cli": "^11.4.2",
@@ -139,7 +139,7 @@
"@rollup/pluginutils": "^5.1.4",
"@shikijs/vitepress-twoslash": "^3.4.2",
"@types/mocha": "^10.0.10",
- "@types/node": "^18.19.103",
+ "@types/node": "^18.19.110",
"@types/picomatch": "^4.0.0",
"@types/semver": "^7.7.0",
"@types/yargs-parser": "^21.0.3",
@@ -156,9 +156,9 @@
"date-time": "^4.0.0",
"es5-shim": "^4.6.7",
"es6-shim": "^0.35.8",
- "eslint": "^9.27.0",
+ "eslint": "^9.28.0",
"eslint-config-prettier": "^10.1.5",
- "eslint-plugin-prettier": "^5.4.0",
+ "eslint-plugin-prettier": "^5.4.1",
"eslint-plugin-unicorn": "^59.0.1",
"eslint-plugin-vue": "^10.1.0",
"fixturify": "^3.0.0",
@@ -168,9 +168,10 @@
"globals": "^16.2.0",
"husky": "^9.1.7",
"is-reference": "^3.0.3",
- "lint-staged": "^16.0.0",
+ "lint-staged": "^16.1.0",
"locate-character": "^3.0.0",
"magic-string": "^0.30.17",
+ "memfs": "^4.17.0",
"mocha": "^11.5.0",
"nodemon": "^3.1.10",
"nyc": "^17.1.0",
@@ -191,13 +192,13 @@
"source-map": "^0.7.4",
"source-map-support": "^0.5.21",
"systemjs": "^6.15.1",
- "terser": "^5.39.2",
+ "terser": "^5.40.0",
"tslib": "^2.8.1",
"typescript": "^5.8.3",
- "typescript-eslint": "^8.32.1",
+ "typescript-eslint": "^8.33.1",
"vite": "^6.3.5",
"vitepress": "^1.6.3",
- "vue": "^3.5.15",
+ "vue": "^3.5.16",
"vue-tsc": "^2.2.10",
"wasm-pack": "^0.13.1",
"yargs-parser": "^21.1.1"
diff --git a/rust/Cargo.lock b/rust/Cargo.lock
index e168a0b64..5c262fbce 100644
--- a/rust/Cargo.lock
+++ b/rust/Cargo.lock
@@ -149,9 +149,9 @@ dependencies = [
[[package]]
name = "bumpalo"
-version = "3.17.0"
+version = "3.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
+checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee"
dependencies = [
"allocator-api2",
]
@@ -167,9 +167,9 @@ dependencies = [
[[package]]
name = "cc"
-version = "1.2.24"
+version = "1.2.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16595d3be041c03b09d08d0858631facccee9221e579704070e6e9e4915d3bc7"
+checksum = "d0fc897dc1e865cc67c0e05a836d9d3f1df3cbe442aa4a9473b18e12624a4951"
dependencies = [
"shlex",
]
@@ -348,9 +348,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]]
name = "hermit-abi"
-version = "0.3.9"
+version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
+checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08"
[[package]]
name = "hstr"
@@ -596,9 +596,9 @@ dependencies = [
[[package]]
name = "napi-build"
-version = "2.2.0"
+version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03acbfa4f156a32188bfa09b86dc11a431b5725253fc1fc6f6df5bed273382c4"
+checksum = "44e0e3177307063d3e7e55b7dd7b648cca9d7f46daa35422c0d98cc2bf48c2c1"
[[package]]
name = "napi-derive"
@@ -675,9 +675,9 @@ dependencies = [
[[package]]
name = "num_cpus"
-version = "1.16.0"
+version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b"
dependencies = [
"hermit-abi",
"libc",
@@ -1053,9 +1053,9 @@ dependencies = [
[[package]]
name = "sourcemap"
-version = "9.2.1"
+version = "9.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bdee719193ae5c919a3ee43f64c2c0dd87f9b9a451d67918a2a5ec2e3c70561c"
+checksum = "e22afbcb92ce02d23815b9795523c005cb9d3c214f8b7a66318541c240ea7935"
dependencies = [
"base64-simd",
"bitvec",
@@ -1134,9 +1134,9 @@ dependencies = [
[[package]]
name = "swc_common"
-version = "11.0.0"
+version = "11.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "209e700a12f0fccd72db3bac7a751e631ef777d543c9e86247e9366b11e30a27"
+checksum = "44c332906667b0fa98622f19a19e43afa5aa63b652813f80645dd0f33eca1fbb"
dependencies = [
"anyhow",
"ast_node",
@@ -1163,9 +1163,9 @@ dependencies = [
[[package]]
name = "swc_compiler_base"
-version = "22.0.0"
+version = "22.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3aef98ee955eac3339cb3a8152c64746196bd14919b41afdf2cc410c06e6cfee"
+checksum = "3993329d52eab041a7123fc25c76a54ead1488cb24114b5c7b56f0d1f9d2a210"
dependencies = [
"anyhow",
"base64",
@@ -1277,9 +1277,9 @@ dependencies = [
[[package]]
name = "swc_ecma_lexer"
-version = "14.0.3"
+version = "14.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b232a4ba5106d7bfa4da9cb4a22c3f3fdac64d656cf45c60a349f8ded133462"
+checksum = "bb339d30ba6ee93da5d5638982faaa79586cd429fe331648abf42afa0eb0a7b5"
dependencies = [
"arrayvec",
"bitflags",
@@ -1302,9 +1302,9 @@ dependencies = [
[[package]]
name = "swc_ecma_minifier"
-version = "20.0.3"
+version = "20.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c43654113e9a75edf05fbe2c66b5232e149f563c97bef58ff1a896daa288092"
+checksum = "cf26b860e6a0e23807c70b03175d0e09082cfe256130c4759fdf9372020d3a3f"
dependencies = [
"arrayvec",
"bitflags",
@@ -1340,9 +1340,9 @@ dependencies = [
[[package]]
name = "swc_ecma_parser"
-version = "14.0.1"
+version = "14.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b59cd2d4c1989c38eae5cd5888f3a3120ecbe2e53b939e586d340b12de7c1e2"
+checksum = "60e07e6ecd47f748988902976d09c4022b1147772f88ad8a95852a20722ac7dc"
dependencies = [
"arrayvec",
"bitflags",
@@ -1366,9 +1366,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_base"
-version = "15.1.0"
+version = "15.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bb01eeec1de9e2cfd089e3afcf3db60df10c812f97a42d953d094eba32e9d26f"
+checksum = "49c0a76bff24b9fa13d5451e7a664d18158849c45434d863e0553e29fb31170b"
dependencies = [
"better_scoped_tls",
"bitflags",
@@ -1444,9 +1444,9 @@ dependencies = [
[[package]]
name = "swc_ecma_utils"
-version = "15.0.1"
+version = "15.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "199e2f048c1998d550ebe5296e0876a3e5b2f963d75a925c2208466071edb9d8"
+checksum = "7d2c29dbfc54e02c14975aff9d2c75ae6fff0808d860d9971a493d37870e282f"
dependencies = [
"indexmap",
"num_cpus",
diff --git a/rust/parse_ast/Cargo.toml b/rust/parse_ast/Cargo.toml
index 937800751..d596201f1 100644
--- a/rust/parse_ast/Cargo.toml
+++ b/rust/parse_ast/Cargo.toml
@@ -10,7 +10,7 @@ anyhow = "1.0.98"
swc_atoms = "5.0.0"
swc_compiler_base = "22.0.0"
swc_config = "3.0.0"
-swc_common = { version = "11.0.0", features = ["parking_lot"] }
+swc_common = { version = "11.0.3", features = ["parking_lot"] }
swc_ecma_ast = "11.0.0"
-swc_ecma_parser = "14.0.0"
-parking_lot = "0.12.3"
+swc_ecma_parser = "14.0.1"
+parking_lot = "0.12.4"
diff --git a/scripts/prepare-release.js b/scripts/prepare-release.js
index f7696ab4f..b879fce10 100755
--- a/scripts/prepare-release.js
+++ b/scripts/prepare-release.js
@@ -193,7 +193,7 @@ function getDummyLogSection(headline, pr) {
*/
async function installDependenciesAndLint() {
await runWithEcho('npm', ['ci', '--ignore-scripts']);
- await runWithEcho('npm', ['audit']);
+ await runWithEcho('npm', ['audit', '--audit-level', 'moderate']);
await runWithEcho('npm', ['run', 'ci:lint']);
}
diff --git a/src/ModuleLoader.ts b/src/ModuleLoader.ts
index 210c1148b..b1aea19e9 100644
--- a/src/ModuleLoader.ts
+++ b/src/ModuleLoader.ts
@@ -15,9 +15,7 @@ import type {
ResolvedId,
ResolveIdResult
} from './rollup/types';
-import type { PluginDriver } from './utils/PluginDriver';
import { EMPTY_OBJECT } from './utils/blank';
-import { readFile } from './utils/fs';
import { LOGLEVEL_WARN } from './utils/logging';
import {
error,
@@ -39,6 +37,7 @@ import {
getAttributesFromImportExpression
} from './utils/parseImportAttributes';
import { isAbsolute, isRelative, resolve } from './utils/path';
+import type { PluginDriver } from './utils/PluginDriver';
import relativeId from './utils/relativeId';
import { resolveId } from './utils/resolveId';
import stripBom from './utils/stripBom';
@@ -228,7 +227,8 @@ export class ModuleLoader {
skip,
customOptions,
typeof isEntry === 'boolean' ? isEntry : !importer,
- attributes
+ attributes,
+ this.options.fs
),
importer,
source
@@ -282,7 +282,7 @@ export class ModuleLoader {
const content = await this.pluginDriver.hookFirst('load', [id]);
if (content !== null) return content;
this.graph.watchFiles[id] = true;
- return await readFile(id, 'utf8');
+ return (await this.options.fs.readFile(id, { encoding: 'utf8' })) as string;
});
} catch (error_: any) {
let message = `Could not load ${id}`;
@@ -674,7 +674,8 @@ export class ModuleLoader {
null,
EMPTY_OBJECT,
true,
- EMPTY_OBJECT
+ EMPTY_OBJECT,
+ this.options.fs
);
if (resolveIdResult == null) {
return error(
diff --git a/src/ast/nodes/UnaryExpression.ts b/src/ast/nodes/UnaryExpression.ts
index 555f39f4a..4f22084c1 100644
--- a/src/ast/nodes/UnaryExpression.ts
+++ b/src/ast/nodes/UnaryExpression.ts
@@ -114,9 +114,13 @@ export default class UnaryExpression extends NodeBase {
): void {
if (!this.deoptimized) this.applyDeoptimizations();
this.included = true;
+ // Check if the argument is an identifier that should be preserved as a reference for readability
+ const shouldPreserveArgument =
+ this.argument instanceof Identifier && this.argument.variable?.included;
if (
typeof this.getRenderedLiteralValue(includeChildrenRecursively) === 'symbol' ||
- this.argument.shouldBeIncluded(context)
+ this.argument.shouldBeIncluded(context) ||
+ shouldPreserveArgument
) {
this.argument.include(context, includeChildrenRecursively);
this.renderedLiteralValue = UnknownValue;
diff --git a/src/ast/utils/identifyNode.ts b/src/ast/utils/identifyNode.ts
index 1090a27b6..e07c8c3f0 100644
--- a/src/ast/utils/identifyNode.ts
+++ b/src/ast/utils/identifyNode.ts
@@ -1,6 +1,7 @@
import type ArrowFunctionExpression from '../nodes/ArrowFunctionExpression';
import type AwaitExpression from '../nodes/AwaitExpression';
import type CallExpression from '../nodes/CallExpression';
+import type FunctionExpression from '../nodes/FunctionExpression';
import type Identifier from '../nodes/Identifier';
import type ImportExpression from '../nodes/ImportExpression';
import type MemberExpression from '../nodes/MemberExpression';
@@ -22,6 +23,10 @@ export function isArrowFunctionExpressionNode(node: unknown): node is ArrowFunct
return node instanceof NodeBase && node.type === nodeType.ArrowFunctionExpression;
}
+export function isFunctionExpressionNode(node: unknown): node is FunctionExpression {
+ return node instanceof NodeBase && node.type === nodeType.FunctionExpression;
+}
+
export function isCallExpressionNode(node: unknown): node is CallExpression {
return node instanceof NodeBase && node.type === nodeType.CallExpression;
}
diff --git a/src/ast/variables/LocalVariable.ts b/src/ast/variables/LocalVariable.ts
index 331f1199a..ed7438793 100644
--- a/src/ast/variables/LocalVariable.ts
+++ b/src/ast/variables/LocalVariable.ts
@@ -25,6 +25,7 @@ import type { VariableKind } from '../nodes/shared/VariableKinds';
import {
isArrowFunctionExpressionNode,
isCallExpressionNode,
+ isFunctionExpressionNode,
isIdentifierNode,
isImportExpressionNode,
isMemberExpressionNode
@@ -237,7 +238,8 @@ export default class LocalVariable extends Variable {
*/
if (
this.kind === 'parameter' &&
- isArrowFunctionExpressionNode(declaration.parent) &&
+ (isArrowFunctionExpressionNode(declaration.parent) ||
+ isFunctionExpressionNode(declaration.parent)) &&
isCallExpressionNode(declaration.parent.parent) &&
isMemberExpressionNode(declaration.parent.parent.callee) &&
isIdentifierNode(declaration.parent.parent.callee.property) &&
diff --git a/src/rollup/rollup.ts b/src/rollup/rollup.ts
index f60fd5b4f..8a8bd7622 100644
--- a/src/rollup/rollup.ts
+++ b/src/rollup/rollup.ts
@@ -1,7 +1,6 @@
import { version as rollupVersion } from 'package.json';
import Bundle from '../Bundle';
import Graph from '../Graph';
-import { mkdir, writeFile } from '../utils/fs';
import { catchUnfinishedHookActions } from '../utils/hookActions';
import initWasm from '../utils/initWasm';
import { getLogger } from '../utils/logger';
@@ -215,7 +214,7 @@ async function handleGenerateWrite(
}
await Promise.all(
Object.values(generated).map(chunk =>
- graph.fileOperationQueue.run(() => writeOutputFile(chunk, outputOptions))
+ graph.fileOperationQueue.run(() => writeOutputFile(chunk, outputOptions, inputOptions))
)
);
await outputPluginDriver.hookParallel('writeBundle', [outputOptions, generated]);
@@ -310,7 +309,8 @@ function getSortingFileType(file: OutputAsset | OutputChunk): SortingFileType {
async function writeOutputFile(
outputFile: OutputAsset | OutputChunk,
- outputOptions: NormalizedOutputOptions
+ outputOptions: NormalizedOutputOptions,
+ { fs: { mkdir, writeFile } }: NormalizedInputOptions
): Promise {
const fileName = resolve(outputOptions.dir || dirname(outputOptions.file!), outputFile.fileName);
diff --git a/src/rollup/types.d.ts b/src/rollup/types.d.ts
index 42c9bb3c1..566c67117 100644
--- a/src/rollup/types.d.ts
+++ b/src/rollup/types.d.ts
@@ -244,6 +244,7 @@ export interface PluginContext extends MinimalPluginContext {
debug: LoggingFunction;
emitFile: EmitFile;
error: (error: RollupError | string) => never;
+ fs: RollupFsModule;
getFileName: (fileReferenceId: string) => string;
getModuleIds: () => IterableIterator;
getModuleInfo: GetModuleInfo;
@@ -671,6 +672,7 @@ export interface InputOptions {
experimentalCacheExpiry?: number;
experimentalLogSideEffects?: boolean;
external?: ExternalOption;
+ fs?: RollupFsModule;
input?: InputOption;
jsx?: false | JsxPreset | JsxOptions;
logLevel?: LogLevelOption;
@@ -699,6 +701,7 @@ export interface NormalizedInputOptions {
experimentalCacheExpiry: number;
experimentalLogSideEffects: boolean;
external: IsExternal;
+ fs: RollupFsModule;
input: string[] | Record;
jsx: false | NormalizedJsxOptions;
logLevel: LogLevelOption;
@@ -1009,6 +1012,7 @@ export interface ChokidarOptions {
export type RollupWatchHooks = 'onError' | 'onStart' | 'onBundleStart' | 'onBundleEnd' | 'onEnd';
export interface WatcherOptions {
+ allowInputInsideOutputPath?: boolean;
buildDelay?: number;
chokidar?: ChokidarOptions;
clearScreen?: boolean;
@@ -1102,3 +1106,76 @@ export function defineConfig(optionsFunction: RollupOptionsFunction): RollupOpti
export type RollupOptionsFunction = (
commandLineArguments: Record
) => MaybePromise;
+
+export interface RollupFsModule {
+ appendFile(
+ path: string,
+ data: string | Uint8Array,
+ options?: { encoding?: BufferEncoding | null; mode?: string | number; flag?: string | number }
+ ): Promise;
+
+ copyFile(source: string, destination: string, mode?: string | number): Promise;
+
+ mkdir(path: string, options?: { recursive?: boolean; mode?: string | number }): Promise;
+
+ mkdtemp(prefix: string): Promise;
+
+ readdir(path: string, options?: { withFileTypes?: false }): Promise;
+ readdir(path: string, options?: { withFileTypes: true }): Promise;
+
+ readFile(
+ path: string,
+ options?: { encoding?: null; flag?: string | number; signal?: AbortSignal }
+ ): Promise;
+ readFile(
+ path: string,
+ options?: { encoding: BufferEncoding; flag?: string | number; signal?: AbortSignal }
+ ): Promise;
+
+ realpath(path: string): Promise;
+
+ rename(oldPath: string, newPath: string): Promise;
+
+ rmdir(path: string, options?: { recursive?: boolean }): Promise;
+
+ stat(path: string): Promise;
+
+ lstat(path: string): Promise;
+
+ unlink(path: string): Promise;
+
+ writeFile(
+ path: string,
+ data: string | Uint8Array,
+ options?: { encoding?: BufferEncoding | null; mode?: string | number; flag?: string | number }
+ ): Promise;
+}
+
+export type BufferEncoding =
+ | 'ascii'
+ | 'utf8'
+ | 'utf16le'
+ | 'ucs2'
+ | 'base64'
+ | 'base64url'
+ | 'latin1'
+ | 'binary'
+ | 'hex';
+
+export interface RollupDirectoryEntry {
+ isFile(): boolean;
+ isDirectory(): boolean;
+ isSymbolicLink(): boolean;
+ name: string;
+}
+
+export interface RollupFileStats {
+ isFile(): boolean;
+ isDirectory(): boolean;
+ isSymbolicLink(): boolean;
+ size: number;
+ mtime: Date;
+ ctime: Date;
+ atime: Date;
+ birthtime: Date;
+}
diff --git a/src/utils/PluginContext.ts b/src/utils/PluginContext.ts
index 7f038fd23..7590b89bf 100644
--- a/src/utils/PluginContext.ts
+++ b/src/utils/PluginContext.ts
@@ -61,6 +61,7 @@ export function getPluginContext(
error(error_): never {
return error(logPluginError(normalizeLog(error_), plugin.name));
},
+ fs: options.fs,
getFileName: fileEmitter.getFileName,
getModuleIds: () => graph.modulesById.keys(),
getModuleInfo: graph.getModuleInfo,
diff --git a/src/utils/logs.ts b/src/utils/logs.ts
index 7c09d04a1..e40f097d3 100644
--- a/src/utils/logs.ts
+++ b/src/utils/logs.ts
@@ -911,7 +911,7 @@ export function logRedeclarationError(name: string): RollupLog {
export function logReservedNamespace(namespace: string): RollupLog {
return {
code: RESERVED_NAMESPACE,
- message: `You have overided reserved namespace "${namespace}"`
+ message: `You have overridden reserved namespace "${namespace}"`
};
}
diff --git a/src/utils/options/mergeOptions.ts b/src/utils/options/mergeOptions.ts
index c427babcb..89beea517 100644
--- a/src/utils/options/mergeOptions.ts
+++ b/src/utils/options/mergeOptions.ts
@@ -69,7 +69,7 @@ export async function mergeOptions(
warnUnknownOptions(
command,
[
- ...Object.keys(inputOptions),
+ ...Object.keys(inputOptions).filter(option => option !== 'fs'),
...Object.keys(outputOptions[0]).filter(
option => option !== 'sourcemapIgnoreList' && option !== 'sourcemapPathTransform'
),
@@ -135,6 +135,7 @@ function mergeInputOptions(
experimentalCacheExpiry: getOption('experimentalCacheExpiry'),
experimentalLogSideEffects: getOption('experimentalLogSideEffects'),
external: getExternal(config, overrides),
+ fs: getOption('fs'),
input: getOption('input') || [],
jsx: getObjectOption(
config,
diff --git a/src/utils/options/normalizeInputOptions.ts b/src/utils/options/normalizeInputOptions.ts
index 85127200c..9446c5d2f 100644
--- a/src/utils/options/normalizeInputOptions.ts
+++ b/src/utils/options/normalizeInputOptions.ts
@@ -3,10 +3,12 @@ import type {
InputOptions,
ModuleSideEffectsOption,
NormalizedInputOptions,
- RollupBuild
+ RollupBuild,
+ RollupFsModule
} from '../../rollup/types';
import { EMPTY_ARRAY } from '../blank';
import { ensureArray } from '../ensureArray';
+import * as fs from '../fs';
import { getLogger } from '../logger';
import { LOGLEVEL_INFO } from '../logging';
import { error, logInvalidOption } from '../logs';
@@ -50,6 +52,7 @@ export async function normalizeInputOptions(
experimentalCacheExpiry: config.experimentalCacheExpiry ?? 10,
experimentalLogSideEffects: config.experimentalLogSideEffects || false,
external: getIdMatcher(config.external),
+ fs: config.fs ?? (fs as RollupFsModule),
input: getInput(config),
jsx: getJsx(config),
logLevel,
diff --git a/src/utils/resolveId.ts b/src/utils/resolveId.ts
index 812f2e901..766da800c 100644
--- a/src/utils/resolveId.ts
+++ b/src/utils/resolveId.ts
@@ -1,8 +1,7 @@
import type { ModuleLoaderResolveId } from '../ModuleLoader';
-import type { CustomPluginOptions, Plugin, ResolveIdResult } from '../rollup/types';
-import type { PluginDriver } from './PluginDriver';
-import { lstat, readdir, realpath } from './fs';
+import type { CustomPluginOptions, Plugin, ResolveIdResult, RollupFsModule } from '../rollup/types';
import { basename, dirname, isAbsolute, resolve } from './path';
+import type { PluginDriver } from './PluginDriver';
import { resolveIdViaPlugins } from './resolveIdViaPlugins';
export async function resolveId(
@@ -14,7 +13,8 @@ export async function resolveId(
skip: readonly { importer: string | undefined; plugin: Plugin; source: string }[] | null,
customOptions: CustomPluginOptions | undefined,
isEntry: boolean,
- attributes: Record
+ attributes: Record,
+ fs: RollupFsModule
): Promise {
const pluginResult = await resolveIdViaPlugins(
source,
@@ -54,30 +54,36 @@ export async function resolveId(
// See https://nodejs.org/api/path.html#path_path_resolve_paths
return addJsExtensionIfNecessary(
importer ? resolve(dirname(importer), source) : resolve(source),
- preserveSymlinks
+ preserveSymlinks,
+ fs
);
}
async function addJsExtensionIfNecessary(
file: string,
- preserveSymlinks: boolean
+ preserveSymlinks: boolean,
+ fs: RollupFsModule
): Promise {
return (
- (await findFile(file, preserveSymlinks)) ??
- (await findFile(file + '.mjs', preserveSymlinks)) ??
- (await findFile(file + '.js', preserveSymlinks))
+ (await findFile(file, preserveSymlinks, fs)) ??
+ (await findFile(file + '.mjs', preserveSymlinks, fs)) ??
+ (await findFile(file + '.js', preserveSymlinks, fs))
);
}
-async function findFile(file: string, preserveSymlinks: boolean): Promise {
+async function findFile(
+ file: string,
+ preserveSymlinks: boolean,
+ fs: RollupFsModule
+): Promise {
try {
- const stats = await lstat(file);
+ const stats = await fs.lstat(file);
if (!preserveSymlinks && stats.isSymbolicLink())
- return await findFile(await realpath(file), preserveSymlinks);
+ return await findFile(await fs.realpath(file), preserveSymlinks, fs);
if ((preserveSymlinks && stats.isSymbolicLink()) || stats.isFile()) {
// check case
const name = basename(file);
- const files = await readdir(dirname(file));
+ const files = await fs.readdir(dirname(file));
if (files.includes(name)) return file;
}
diff --git a/src/watch/watch-proxy.ts b/src/watch/watch-proxy.ts
index 2d02ebede..f2c0d10a5 100644
--- a/src/watch/watch-proxy.ts
+++ b/src/watch/watch-proxy.ts
@@ -9,8 +9,8 @@ import { ensureArray } from '../utils/ensureArray';
import { error, logInvalidOption } from '../utils/logs';
import { mergeOptions } from '../utils/options/mergeOptions';
import { URL_WATCH } from '../utils/urls';
-import { WatchEmitter } from './WatchEmitter';
import { loadFsEvents } from './fsevents-importer';
+import { WatchEmitter } from './WatchEmitter';
export default function watch(configs: RollupOptions[] | RollupOptions): RollupWatcher {
const emitter = new WatchEmitter() as RollupWatcher;
@@ -22,7 +22,7 @@ export default function watch(configs: RollupOptions[] | RollupOptions): RollupW
return emitter;
}
-function withTrailingSlash(path: string): string {
+function ensureTrailingSlash(path: string): string {
if (path[path.length - 1] !== '/') {
return `${path}/`;
}
@@ -31,25 +31,26 @@ function withTrailingSlash(path: string): string {
function checkWatchConfig(config: MergedRollupOptions[]): void {
for (const item of config) {
+ if (typeof item.watch !== 'boolean' && item.watch?.allowInputInsideOutputPath) {
+ break;
+ }
if (item.input && item.output) {
const input = typeof item.input === 'string' ? ensureArray(item.input) : item.input;
- const output = ensureArray(item.output);
+ const outputs = ensureArray(item.output);
for (const index in input) {
- const inputPath = input[index as keyof typeof input] as string;
- const subPath = output.find(o => {
- if (!o.dir || typeof inputPath !== 'string') {
- return false;
- }
- const _outPath = withTrailingSlash(o.dir);
- const _inputPath = withTrailingSlash(inputPath);
- return _inputPath.startsWith(_outPath);
- });
- if (subPath) {
+ const inputPath = input[index as keyof typeof input];
+ if (typeof inputPath !== 'string') {
+ continue;
+ }
+ const outputWithInputAsSubPath = outputs.find(
+ ({ dir }) => dir && ensureTrailingSlash(inputPath).startsWith(ensureTrailingSlash(dir))
+ );
+ if (outputWithInputAsSubPath) {
error(
logInvalidOption(
'watch',
URL_WATCH,
- `the input "${inputPath}" is a subpath of the output "${subPath.dir}"`
+ `the input "${inputPath}" is a subpath of the output "${outputWithInputAsSubPath.dir}"`
)
);
}
diff --git a/test/browser/samples/missing-default-fs/_config.js b/test/browser/samples/missing-default-fs/_config.js
new file mode 100644
index 000000000..2a9277fe0
--- /dev/null
+++ b/test/browser/samples/missing-default-fs/_config.js
@@ -0,0 +1,23 @@
+module.exports = defineTest({
+ description: 'fails when accessing fs from a browser without supplying it via option',
+ options: {
+ plugins: {
+ name: 'test',
+ resolveId(source) {
+ return source;
+ },
+ load(id) {
+ return this.fs.readFile(id, { encoding: 'utf8' });
+ }
+ }
+ },
+ error: {
+ code: 'PLUGIN_ERROR',
+ hook: 'load',
+ message:
+ 'Could not load main: Cannot access the file system (via "fs.readFile") when using the browser build of Rollup. Make sure you supply a plugin with custom resolveId and load hooks to Rollup.',
+ plugin: 'test',
+ pluginCode: 'NO_FS_IN_BROWSER',
+ url: 'https://rollupjs.org/plugin-development/#a-simple-example'
+ }
+});
diff --git a/test/browser/samples/missing-dependency-resolution/_config.js b/test/browser/samples/missing-dependency-resolution/_config.js
index a683f11c2..671cebb52 100644
--- a/test/browser/samples/missing-dependency-resolution/_config.js
+++ b/test/browser/samples/missing-dependency-resolution/_config.js
@@ -1,17 +1,36 @@
const { loader } = require('../../../testHelpers.js');
+const assert = require('node:assert/strict');
+
+const logs = [];
module.exports = defineTest({
- description: 'fails if a dependency cannot be resolved',
+ description: 'warns if a dependency cannot be resolved',
options: {
- plugins: loader({
- main: `import {foo} from 'dep';
+ onLog(level, log) {
+ logs.push({ level, log });
+ },
+ plugins: [
+ loader({
+ main: `import {foo} from 'dep';
console.log(foo);`
- })
- },
- error: {
- code: 'NO_FS_IN_BROWSER',
- message:
- 'Cannot access the file system (via "path.resolve") when using the browser build of Rollup. Make sure you supply a plugin with custom resolveId and load hooks to Rollup.',
- url: 'https://rollupjs.org/plugin-development/#a-simple-example'
+ }),
+ {
+ buildEnd() {
+ assert.deepEqual(logs, [
+ {
+ level: 'warn',
+ log: {
+ code: 'UNRESOLVED_IMPORT',
+ exporter: 'dep',
+ id: 'main',
+ message:
+ '"dep" is imported by "main", but could not be resolved – treating it as an external dependency.',
+ url: 'https://rollupjs.org/troubleshooting/#warning-treating-module-as-external-dependency'
+ }
+ }
+ ]);
+ }
+ }
+ ]
}
});
diff --git a/test/browser/samples/missing-dependency-resolution/_expected/main.js b/test/browser/samples/missing-dependency-resolution/_expected/main.js
new file mode 100644
index 000000000..37f4a46d1
--- /dev/null
+++ b/test/browser/samples/missing-dependency-resolution/_expected/main.js
@@ -0,0 +1,3 @@
+import { foo } from 'dep';
+
+console.log(foo);
diff --git a/test/browser/samples/missing-entry-resolution/_config.js b/test/browser/samples/missing-entry-resolution/_config.js
index f122cdb59..e41dbc216 100644
--- a/test/browser/samples/missing-entry-resolution/_config.js
+++ b/test/browser/samples/missing-entry-resolution/_config.js
@@ -1,9 +1,7 @@
module.exports = defineTest({
description: 'fails if an entry cannot be resolved',
error: {
- code: 'NO_FS_IN_BROWSER',
- message:
- 'Cannot access the file system (via "path.resolve") when using the browser build of Rollup. Make sure you supply a plugin with custom resolveId and load hooks to Rollup.',
- url: 'https://rollupjs.org/plugin-development/#a-simple-example'
+ code: 'UNRESOLVED_ENTRY',
+ message: 'Could not resolve entry module "main".'
}
});
diff --git a/test/browser/samples/provide-fs/_config.js b/test/browser/samples/provide-fs/_config.js
new file mode 100644
index 000000000..a053d83a8
--- /dev/null
+++ b/test/browser/samples/provide-fs/_config.js
@@ -0,0 +1,12 @@
+const { Volume } = require('memfs');
+
+const vol = Volume.fromJSON({
+ main: "console.log('Hello, Rollup!');"
+});
+
+module.exports = defineTest({
+ description: 'allows to provide an in-memory fs via option',
+ options: {
+ fs: vol.promises
+ }
+});
diff --git a/test/browser/samples/provide-fs/_expected/main.js b/test/browser/samples/provide-fs/_expected/main.js
new file mode 100644
index 000000000..f5d3e627b
--- /dev/null
+++ b/test/browser/samples/provide-fs/_expected/main.js
@@ -0,0 +1 @@
+console.log('Hello, Rollup!');
diff --git a/test/chunking-form/samples/max-parallel-file-operations/_config.js b/test/chunking-form/samples/max-parallel-file-operations/_config.js
index b9d5da1de..f2cc3f557 100644
--- a/test/chunking-form/samples/max-parallel-file-operations/_config.js
+++ b/test/chunking-form/samples/max-parallel-file-operations/_config.js
@@ -10,7 +10,8 @@ module.exports = defineTest({
description: 'maxParallelFileOps limits write operations',
options: {
maxParallelFileOps: 3,
- output: { preserveModules: true }
+ output: { preserveModules: true },
+ fs
},
before() {
fs.writeFile = async (path, content) => {
diff --git a/test/cli/index.js b/test/cli/index.js
index 4ac71627c..13d0ed2bc 100644
--- a/test/cli/index.js
+++ b/test/cli/index.js
@@ -23,12 +23,13 @@ runTestSuiteWithSamples(
'cli',
path.resolve(__dirname, 'samples'),
/**
+ * @param {string} directory
* @param {import('../types').TestConfigCli} config
*/
(directory, config) => {
- (config.skip ? it.skip : config.solo ? it.only : it)(
- path.basename(directory) + ': ' + config.description,
- async () => {
+ for (let iteration = 0; iteration < (config.repeat || 1); iteration++) {
+ const description = `${path.basename(directory)}: ${config.description}${iteration > 0 ? ` (run ${iteration + 1})` : ''}`;
+ (config.skip ? it.skip : config.solo ? it.only : it)(description, async () => {
process.chdir(config.cwd || directory);
try {
await runTest(config);
@@ -39,8 +40,8 @@ runTestSuiteWithSamples(
}
throw error;
}
- }
- ).timeout(80_000);
+ }).timeout(80_000);
+ }
},
() => process.chdir(cwd)
);
@@ -106,7 +107,9 @@ async function runTest(config) {
}
}
if (childProcess.signalCode === 'SIGKILL') {
- return reject(new Error('Test aborted due to timeout.'));
+ return reject(
+ new Error(`Test aborted due to timeout.\nstdout: ${stdout}\n\nstderr: ${stderr}\n`)
+ );
}
if ('stderr' in config) {
diff --git a/test/cli/samples/watch/watch-event-hooks-error/_config.js b/test/cli/samples/watch/watch-event-hooks-error/_config.js
index 4987c8e7b..5e0a06a01 100644
--- a/test/cli/samples/watch/watch-event-hooks-error/_config.js
+++ b/test/cli/samples/watch/watch-event-hooks-error/_config.js
@@ -1,11 +1,13 @@
-const { assertIncludes } = require('../../../../testHelpers.js');
+const { assertIncludes, wait } = require('../../../../testHelpers.js');
module.exports = defineTest({
description: 'onError event hook shell commands write to stderr',
spawnScript: 'wrapper.js',
spawnArgs: ['-cw', '--watch.onError', 'echo error'],
- abortOnStderr(data) {
+ async abortOnStderr(data) {
if (data.includes('waiting for changes')) {
+ // Wait a little for the child process to complete the command
+ await wait(300);
return true;
}
},
diff --git a/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/_config.js b/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/_config.js
new file mode 100644
index 000000000..79acda4b6
--- /dev/null
+++ b/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/_config.js
@@ -0,0 +1,9 @@
+module.exports = defineTest({
+ description:
+ 'allowInputInsideOutputPath set to true, should not throw an error when input is inside output path',
+ spawnArgs: ['-cw'],
+ abortOnStderr(data) {
+ return data.includes('waiting for changes');
+ },
+ execute: true
+});
diff --git a/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/output/main.js b/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/output/main.js
new file mode 100644
index 000000000..17eee8f1f
--- /dev/null
+++ b/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/output/main.js
@@ -0,0 +1 @@
+assert.equal( 1 + 1, 2 );
diff --git a/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/output/out.js b/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/output/out.js
new file mode 100644
index 000000000..17eee8f1f
--- /dev/null
+++ b/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/output/out.js
@@ -0,0 +1 @@
+assert.equal( 1 + 1, 2 );
diff --git a/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/rollup.config.mjs b/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/rollup.config.mjs
new file mode 100644
index 000000000..51fa9da44
--- /dev/null
+++ b/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/rollup.config.mjs
@@ -0,0 +1,12 @@
+export default [
+ {
+ input: {'out': 'output/main.js'},
+ watch: {
+ allowInputInsideOutputPath: true,
+ },
+ output: {
+ dir: 'output',
+ format: 'es'
+ }
+ },
+];
diff --git a/test/form/samples/treeshake-deterministic-dynamic-import/_expected.js b/test/form/samples/treeshake-deterministic-dynamic-import/_expected.js
index 9dda828d7..9bd210cfb 100644
--- a/test/form/samples/treeshake-deterministic-dynamic-import/_expected.js
+++ b/test/form/samples/treeshake-deterministic-dynamic-import/_expected.js
@@ -29,6 +29,12 @@ async function entry() {
}
f(m);
});
+ Promise.resolve().then(function () { return sub2; }).then(function(m){
+ function f(m){
+ console.log(m.baz2);
+ }
+ f(m);
+ });
Promise.resolve().then(function () { return sub2; }).then(({ baz2 }) => baz2);
Promise.resolve().then(function () { return sub2; }).then(function({ reexported }) { });
diff --git a/test/form/samples/treeshake-deterministic-dynamic-import/main.js b/test/form/samples/treeshake-deterministic-dynamic-import/main.js
index ee9855071..67588eb10 100644
--- a/test/form/samples/treeshake-deterministic-dynamic-import/main.js
+++ b/test/form/samples/treeshake-deterministic-dynamic-import/main.js
@@ -14,6 +14,12 @@ export async function entry() {
}
f(m);
})
+ import('./sub2.js').then(function(m){
+ function f(m){
+ console.log(m.baz2)
+ }
+ f(m);
+ })
import('./sub2.js').then(({ baz2 }) => baz2)
import('./sub2.js').then(function({ reexported }) { reexported })
diff --git a/test/form/samples/unary-expressions-preserve-constants/_config.js b/test/form/samples/unary-expressions-preserve-constants/_config.js
new file mode 100644
index 000000000..da9b696b9
--- /dev/null
+++ b/test/form/samples/unary-expressions-preserve-constants/_config.js
@@ -0,0 +1,4 @@
+module.exports = defineTest({
+ description:
+ 'Preserves constant identifiers in unary expressions when constants are used elsewhere'
+});
diff --git a/test/form/samples/unary-expressions-preserve-constants/_expected.js b/test/form/samples/unary-expressions-preserve-constants/_expected.js
new file mode 100644
index 000000000..2bdd58007
--- /dev/null
+++ b/test/form/samples/unary-expressions-preserve-constants/_expected.js
@@ -0,0 +1,25 @@
+const BOB = 3;
+const ALICE = 5;
+
+function getBob() {
+ return {x: BOB, y: -BOB, z: +BOB};
+}
+
+function getAlice() {
+ console.log(ALICE);
+ return ~ALICE;
+}
+
+// Test with different operators
+function testOperators() {
+ return {
+ negate: -BOB,
+ plus: +BOB,
+ not: !BOB,
+ bitwise: ~BOB,
+ typeof: typeof BOB,
+ void: void BOB
+ };
+}
+
+export { ALICE, BOB, getAlice, getBob, testOperators };
diff --git a/test/form/samples/unary-expressions-preserve-constants/main.js b/test/form/samples/unary-expressions-preserve-constants/main.js
new file mode 100644
index 000000000..9dc8dcce3
--- /dev/null
+++ b/test/form/samples/unary-expressions-preserve-constants/main.js
@@ -0,0 +1,23 @@
+export const BOB = 3;
+export const ALICE = 5;
+
+export function getBob() {
+ return {x: BOB, y: -BOB, z: +BOB};
+}
+
+export function getAlice() {
+ console.log(ALICE);
+ return ~ALICE;
+}
+
+// Test with different operators
+export function testOperators() {
+ return {
+ negate: -BOB,
+ plus: +BOB,
+ not: !BOB,
+ bitwise: ~BOB,
+ typeof: typeof BOB,
+ void: void BOB
+ };
+}
diff --git a/test/function/samples/max-parallel-file-operations/default/_config.js b/test/function/samples/max-parallel-file-operations/default/_config.js
index cfe030764..5710cdd1a 100644
--- a/test/function/samples/max-parallel-file-operations/default/_config.js
+++ b/test/function/samples/max-parallel-file-operations/default/_config.js
@@ -8,6 +8,9 @@ let maxReads = 0;
module.exports = defineTest({
description: 'maxParallelFileOps not set',
+ options: {
+ fs
+ },
before() {
fs.readFile = async (path, options) => {
currentReads++;
diff --git a/test/function/samples/max-parallel-file-operations/error/_config.js b/test/function/samples/max-parallel-file-operations/error/_config.js
index 2ed14956e..ff46cae7b 100644
--- a/test/function/samples/max-parallel-file-operations/error/_config.js
+++ b/test/function/samples/max-parallel-file-operations/error/_config.js
@@ -10,7 +10,8 @@ module.exports = defineTest({
input: 'main',
plugins: loader({
main: `import {foo} from './dep';`
- })
+ }),
+ fs
},
before() {
fs.readFile = (path, options) => {
diff --git a/test/function/samples/max-parallel-file-operations/infinity/_config.js b/test/function/samples/max-parallel-file-operations/infinity/_config.js
index fb6b8aeb9..a672fb4ad 100644
--- a/test/function/samples/max-parallel-file-operations/infinity/_config.js
+++ b/test/function/samples/max-parallel-file-operations/infinity/_config.js
@@ -9,7 +9,8 @@ let maxReads = 0;
module.exports = defineTest({
description: 'maxParallelFileOps set to infinity',
options: {
- maxParallelFileOps: 0
+ maxParallelFileOps: 0,
+ fs
},
before() {
fs.readFile = async (path, options) => {
diff --git a/test/function/samples/max-parallel-file-operations/set/_config.js b/test/function/samples/max-parallel-file-operations/set/_config.js
index 5c631ef9c..8dfac8f3f 100644
--- a/test/function/samples/max-parallel-file-operations/set/_config.js
+++ b/test/function/samples/max-parallel-file-operations/set/_config.js
@@ -9,7 +9,8 @@ let maxReads = 0;
module.exports = defineTest({
description: 'maxParallelFileOps set to 3',
options: {
- maxParallelFileOps: 3
+ maxParallelFileOps: 3,
+ fs
},
before() {
fs.readFile = async (path, options) => {
diff --git a/test/function/samples/options-hook/_config.js b/test/function/samples/options-hook/_config.js
index ef6bdc039..ee4c6c73d 100644
--- a/test/function/samples/options-hook/_config.js
+++ b/test/function/samples/options-hook/_config.js
@@ -10,7 +10,10 @@ module.exports = defineTest({
{
name: 'test-plugin',
buildStart(options) {
- assert.deepStrictEqual(JSON.parse(JSON.stringify(options)), {
+ // The fs option is not json stringifiable
+ const { fs, ...restOptions } = options;
+ assert.ok(fs);
+ assert.deepStrictEqual(JSON.parse(JSON.stringify(restOptions)), {
context: 'undefined',
experimentalCacheExpiry: 10,
experimentalLogSideEffects: false,
diff --git a/test/misc/fs-override.js b/test/misc/fs-override.js
new file mode 100644
index 000000000..f83f91565
--- /dev/null
+++ b/test/misc/fs-override.js
@@ -0,0 +1,56 @@
+const assert = require('node:assert');
+const { Volume } = require('memfs');
+const rollup = require('../../dist/rollup');
+
+describe('fs-override', () => {
+ it('uses fs from options', async () => {
+ const vol = Volume.fromJSON(
+ {
+ '/input.js': "console.log('Hello, Rollup!');"
+ },
+ __dirname
+ );
+ const bundle = await rollup.rollup({
+ input: '/input.js',
+ fs: vol.promises
+ });
+
+ await bundle.write({
+ file: '/output.js',
+ format: 'esm'
+ });
+
+ const generatedCode = vol.readFileSync('/output.js', 'utf8');
+ assert.strictEqual(generatedCode.trim(), "console.log('Hello, Rollup!');");
+ });
+
+ it('passes fs from options to plugin context', async () => {
+ const vol = Volume.fromJSON(
+ {
+ '/input.js': "console.log('Hello, Rollup!');"
+ },
+ __dirname
+ );
+ const bundle = await rollup.rollup({
+ input: '/input.js',
+ fs: vol.promises,
+ plugins: [
+ {
+ name: 'test-plugin',
+ async transform(code, _id) {
+ assert.equal(await this.fs.readFile('/input.js'), "console.log('Hello, Rollup!');");
+ return {
+ code,
+ map: null
+ };
+ }
+ }
+ ]
+ });
+
+ await bundle.write({
+ file: '/output.js',
+ format: 'esm'
+ });
+ });
+});
diff --git a/test/misc/index.js b/test/misc/index.js
index 8950e1f05..8bc305f61 100644
--- a/test/misc/index.js
+++ b/test/misc/index.js
@@ -1,4 +1,5 @@
require('./bundle-information');
+require('./fs-override');
require('./get-log-filter');
require('./parse-ast');
require('./iife');
diff --git a/test/misc/optionList.js b/test/misc/optionList.js
index d559168cf..42ed455ab 100644
--- a/test/misc/optionList.js
+++ b/test/misc/optionList.js
@@ -1,5 +1,5 @@
exports.input =
- 'cache, context, experimentalCacheExpiry, experimentalLogSideEffects, external, input, jsx, logLevel, makeAbsoluteExternalsRelative, maxParallelFileOps, moduleContext, onLog, onwarn, perf, plugins, preserveEntrySignatures, preserveSymlinks, shimMissingExports, strictDeprecations, treeshake, watch';
+ 'cache, context, experimentalCacheExpiry, experimentalLogSideEffects, external, fs, input, jsx, logLevel, makeAbsoluteExternalsRelative, maxParallelFileOps, moduleContext, onLog, onwarn, perf, plugins, preserveEntrySignatures, preserveSymlinks, shimMissingExports, strictDeprecations, treeshake, watch';
exports.flags =
'amd, assetFileNames, banner, bundleConfigAsCjs, c, cache, chunkFileNames, compact, config, configImportAttributesKey, configPlugin, context, d, dir, dynamicImportInCjs, e, entryFileNames, environment, esModule, experimentalCacheExpiry, experimentalLogSideEffects, experimentalMinChunkSize, exports, extend, external, externalImportAssertions, externalImportAttributes, externalLiveBindings, f, failAfterWarnings, file, filterLogs, footer, forceExit, format, freeze, g, generatedCode, globals, h, hashCharacters, hoistTransitiveImports, i, importAttributesKey, indent, inlineDynamicImports, input, interop, intro, jsx, logLevel, m, makeAbsoluteExternalsRelative, manualChunks, maxParallelFileOps, minifyInternalExports, moduleContext, n, name, noConflict, o, onLog, onwarn, outro, p, paths, perf, plugin, plugins, preserveEntrySignatures, preserveModules, preserveModulesRoot, preserveSymlinks, reexportProtoFromExternal, sanitizeFileName, shimMissingExports, silent, sourcemap, sourcemapBaseUrl, sourcemapDebugIds, sourcemapExcludeSources, sourcemapFile, sourcemapFileNames, stdin, strict, strictDeprecations, systemNullSetters, treeshake, v, validate, virtualDirname, w, waitForBundleInput, watch';
exports.output =
diff --git a/test/types.d.ts b/test/types.d.ts
index be8377537..f9f2337fd 100644
--- a/test/types.d.ts
+++ b/test/types.d.ts
@@ -133,11 +133,12 @@ export interface TestConfigCli extends TestConfigBase {
* Run assertions against the exports of the bundle after executing it.
*/
exports?: (exportObject: any) => void | Promise;
+ repeat?: number;
/**
* Run assertions against the generated code when bundling to stdout.
*/
result?: (code: string) => void;
- retry?: number;
+ retry?: boolean;
/**
* Display generated output in console.
*/