diff --git a/.github/workflows/build-and-tests.yml b/.github/workflows/build-and-tests.yml index eec05d9b2..e01e1846a 100644 --- a/.github/workflows/build-and-tests.yml +++ b/.github/workflows/build-and-tests.yml @@ -375,7 +375,7 @@ jobs: - host: windows-latest target: x86_64-pc-windows-msvc - host: macos-latest - target: x86_64-apple-darwin + target: aarch64-apple-darwin node: - '18.0.0' - '20' diff --git a/CHANGELOG.md b/CHANGELOG.md index e58133338..d4590aede 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,28 @@ # rollup changelog +## 4.19.0 + +_2024-07-20_ + +### Features + +- Implement support for decorators (#5562) + +### Bug Fixes + +- Improve soucemap generation when tree-shaking logical expressions (#5581) + +### Pull Requests + +- [#5562](https://github.com/rollup/rollup/pull/5562): feat: implementing decorator support (@TrickyPi, @lukastaegert) +- [#5570](https://github.com/rollup/rollup/pull/5570): refactor(finalisers): condition branch (@Simon-He95, @zhangmo8) +- [#5572](https://github.com/rollup/rollup/pull/5572): Improve chunk and asset type information in docs (@lukastaegert) +- [#5573](https://github.com/rollup/rollup/pull/5573): Switch to audit resolver to ignore requirejs vulnerability (@lukastaegert) +- [#5575](https://github.com/rollup/rollup/pull/5575): chore(deps): update dependency inquirer to v10 (@renovate[bot], @lukastaegert) +- [#5576](https://github.com/rollup/rollup/pull/5576): chore(deps): lock file maintenance minor/patch updates (@renovate[bot], @lukastaegert) +- [#5580](https://github.com/rollup/rollup/pull/5580): chore(deps): lock file maintenance minor/patch updates (@renovate[bot], @lukastaegert) +- [#5581](https://github.com/rollup/rollup/pull/5581): When tree-shaking logical expression, make sure to remove all trailing white-space. (@lukastaegert) + ## 4.18.1 _2024-07-08_ diff --git a/browser/package.json b/browser/package.json index b7a27e9de..3aec63868 100644 --- a/browser/package.json +++ b/browser/package.json @@ -1,6 +1,6 @@ { "name": "@rollup/browser", - "version": "4.18.1", + "version": "4.19.0", "description": "Next-generation ES module bundler browser build", "main": "dist/rollup.browser.js", "module": "dist/es/rollup.browser.js", diff --git a/docs/configuration-options/index.md b/docs/configuration-options/index.md index 24ce1f51f..2be0e907f 100755 --- a/docs/configuration-options/index.md +++ b/docs/configuration-options/index.md @@ -566,11 +566,19 @@ export default { ### output.assetFileNames {#output-assetfilenames} -| | | -| -----: | :-------------------------------------------- | -| 类型: | `string\| ((assetInfo: AssetInfo) => string)` | -| CLI: | `--assetFileNames ` | -| 默认: | `"assets/[name]-[hash][extname]"` | +| | | +| -----: | :--------------------------------------------------- | +| 类型: | `string\| ((assetInfo: PreRenderedAsset) => string)` | +| CLI: | `--assetFileNames ` | +| 默认: | `"assets/[name]-[hash][extname]"` | + +```typescript +interface PreRenderedAsset { + name?: string; + source: string | Uint8Array; + type: 'asset'; +} +``` 该选项的值是一个匹配模式,用于自定义构建结果中的静态资源名称,或者值为一个函数,对每个资源调用以返回匹配模式。这种模式支持以下的占位符: @@ -579,18 +587,20 @@ export default { - `[hash]`:基于静态资源内容的哈希。也可以通过例如 `[hash:10]` 设置一个特定的哈希值长度。默认情况下,它会生成一个 base-64 的哈希值。如果你需要减少字符集的大小,可以查看 [`output.hashCharacters`](#output-hashcharacters)。 - `[name]`:静态资源的名称,不包含扩展名。 -正斜杠 `/` 可以用来划分文件到子目录。当值为函数时,`assetInfo` 是 [`generateBundle`](../plugin-development/index.md#generatebundle) 中没有 `fileName` 的简化版本。另见[`output.chunkFileNames`](#output-chunkfilenames),[`output.entryFileNames`](#output-entryfilenames)。 +正斜杠 `/` 可以用来划分文件到子目录。当值为函数时,`PreRenderedAsset` 是 [`generateBundle`](../plugin-development/index.md#generatebundle) 中 `OutputAsset` 类型的简化版本,它没有 `fileName`。另见 [`output.chunkFileNames`](#output-chunkfilenames),[`output.entryFileNames`](#output-entryfilenames)。 ### output.banner/output.footer {#output-banner-output-footer} -| | | -| -----: | :----------------------------------------------------------- | -| 类型: | `string \| ((chunk: ChunkInfo) => string\| Promise)` | -| CLI: | `--banner`/`--footer ` | +| | | +| --: | :-- | +| 类型: | `string \| ((chunk: RenderedChunk) => string\| Promise)` | +| CLI: | `--banner`/`--footer ` | + +查看 [`renderChunk`](../plugin-development/index.md#renderchunk) 钩子以了解 `RenderedChunk` 类型。 该选项用于在 bundle 前或后添加一个字符串。其值也可以是一个返回 `string` 的 `Promise` 异步函数(注意:`banner` 和 `footer` 选项不会破坏 sourcemaps)。 -如果该选项值为函数,参数 `chunk` 包含了额外信息,使用了与 [`generateBundle`](../plugin-development/index.md#generatebundle) 钩子相同的 `ChunkInfo` 类型,但有以下区别: +如果该选项值为函数,那么 `chunk` 就会包含一些额外的信息,通过 `RenderedChunk` 类型来表示,它是 [`generateBundle`](../plugin-development/index.md#generatebundle) 钩子中使用的 `OutputChunk` 类型的简化版本,具有以下区别: - `code` 和 `map` 没有设置,因为该 chunk 还没有被渲染。 - 所有包含哈希值的引用 chunk 文件名将包含哈希占位符。包括 `fileName`、`imports`、`importedBindings`、`dynamicImports` 和 `implicitlyLoadedBefore`。当你在该选项返回的代码中使用这样的占位符文件名或部分文件名时,Rollup 将在 `generateBundle` 之前用实际的哈希值替换掉占位符,确保哈希值反映的是最终生成的 chunk 中的实际内容,包括所有引用的文件哈希值。 @@ -616,11 +626,24 @@ export default { ### output.chunkFileNames {#output-chunkfilenames} -| | | -| -----: | :--------------------------------------------- | -| 类型: | `string \| ((chunkInfo: ChunkInfo) => string)` | -| CLI: | `--chunkFileNames ` | -| 默认: | `"[name]-[hash].js"` | +| | | +| -----: | :---------------------------------------------------- | +| 类型: | `string \| ((chunkInfo: PreRenderedChunk) => string)` | +| CLI: | `--chunkFileNames ` | +| 默认: | `"[name]-[hash].js"` | + +```typescript +interface PreRenderedChunk { + exports: string[]; + facadeModuleId: string | null; + isDynamicEntry: boolean; + isEntry: boolean; + isImplicitEntry: boolean; + moduleIds: string[]; + name: string; + type: 'chunk'; +} +``` 该选项用于对代码分割中产生的 chunk 自定义命名,其值也可以是一个函数,对每个 chunk 调用以返回匹配模式。这种模式支持以下的占位符: @@ -628,7 +651,7 @@ export default { - `[hash]`:仅基于最终生成的 chunk 内容的哈希值,其中包括 [`renderChunk`](../plugin-development/index.md#renderchunk) 中的转换部分和其依赖文件哈希值。你也可以通过例如 `[hash:10]` 设置一个特定的哈希值长度。默认情况下,它会生成一个 base-64 的哈希值。如果你需要减少字符集的大小,可以查看 [`output.hashCharacters`](#output-hashcharacters)。 - `[name]`:chunk 的名称。它可以通过 [`output.manualChunks`](#output-manualchunks) 选项显示的设置,或者通过插件调用 [`this.emitFile`](../plugin-development/index.md#this-emitfile) 设置。否则,它将会根据 chunk 的内容确定。 -正斜杠 `/` 可以用来划分文件到子目录。当值为函数时,`chunkInfo` 是 [`generateBundle`](../plugin-development/index.md#generatebundle) 的简化版本,其中不包含依赖于文件名的属性,且没有关于所渲染模块的信息,因为只有在文件名生成之后才会渲染。另见 [`output.assetFileNames`](#output-assetfilenames),[`output.entryFileNames`](#output-entryfilenames)。 +正斜杠 `/` 可以用来划分文件到子目录。当值为函数时,`PreRenderedChunk` 就是 [`generateBundle`](../plugin-development/index.md#generatebundle) 中 `OutputChunk` 类型的简化版本,它没有依赖于文件名的属性,也没有关于所渲染模块的信息,因为渲染只会在文件名生成之后进行。然而,你还是可以访问到 `moduleIds` 列表。另见 [`output.assetFileNames`](#output-assetfilenames),[`output.entryFileNames`](#output-entryfilenames)。 ### output.compact {#output-compact} @@ -692,11 +715,13 @@ Promise.resolve() ### output.entryFileNames {#output-entryfilenames} -| | | -| -----: | :--------------------------------------------- | -| 类型: | `string \| ((chunkInfo: ChunkInfo) => string)` | -| CLI: | `--entryFileNames ` | -| 默认: | `"[name].js"` | +| | | +| -----: | :---------------------------------------------------- | +| 类型: | `string \| ((chunkInfo: PreRenderedChunk) => string)` | +| CLI: | `--entryFileNames ` | +| 默认: | `"[name].js"` | + +查看 [`output.chunkFileNames`](#output-chunkfilenames) 以了解 `PreRenderedChunk` 类型。 该选项用于指定 chunks 的入口文件模式,其值也可以是一个函数,对每个入口 chunk 调用以返回匹配模式。这种模式支持以下的占位符: @@ -704,7 +729,7 @@ Promise.resolve() - `[hash]`:仅基于最终生成的入口 chunk 内容的哈希值,其中包括 [`renderChunk`](../plugin-development/index.md#renderchunk) 中的转换部分和其依赖文件哈希值。你也可以通过例如 `[hash:10]` 设置一个特定的哈希值长度。默认情况下,它会生成一个 base-64 的哈希值。如果你需要减少字符集的大小,可以查看 [`output.hashCharacters`](#output-hashcharacters)。 - `[name]`:入口文件的文件名(不包含扩展名),除非当入口文件为对象时,才用来定义不同的名称。 -正斜杠 `/` 可以用来划分文件到子目录。当值为函数时,`chunkInfo` 是 [`generateBundle`](../plugin-development/index.md#generatebundle) 的简化版本,其中不包含依赖于文件名的属性,且没有关于所渲染模块的信息,因为只有在文件名生成之后才会渲染。但是,你可以访问包含 `moduleIds` 的列表。另见 [`output.assetFileNames`](#output-assetfilenames),[`output.chunkFileNames`](#output-chunkfilenames)。 +正斜杠 `/` 可以用来划分文件到子目录。当值为函数时,`PreRenderedChunk` 就是 [`generateBundle`](../plugin-development/index.md#generatebundle) 中 `OutputChunk` 类型的简化版本,它没有依赖于文件名的属性,也没有关于所渲染模块的信息,因为渲染只会在文件名生成之后进行。然而,你还是可以访问到 `moduleIds` 列表。另见 [`output.assetFileNames`](#output-assetfilenames),[`output.chunkFileNames`](#output-chunkfilenames)。 在设置 [`output.preserveModules`](#output-preservemodules) 选项时,该模式也会生效。需要注意在这种情况下,`[name]` 将包括来自输出根路径的相对路径以及可能有原始文件的扩展名,如果它不是 `.js`、`.jsx`、`.mjs`、`.cjs`、`.ts`、`.tsx`、`.mts` 或 `.cts` 的其中之一。 @@ -1213,10 +1238,10 @@ import('external2').then(console.log); ### output.intro/output.outro {#output-intro-output-outro} -| | | -| -----: | :----------------------------------------------------------- | -| 类型: | `string \| ((chunk: ChunkInfo) => string\| Promise)` | -| CLI: | `--intro`/`--outro ` | +| | | +| --: | :-- | +| 类型: | `string \| ((chunk: RenderedChunk) => string\| Promise)` | +| CLI: | `--intro`/`--outro ` | 除了在特定格式中代码不同外,该选项功能和 [`output.banner/output.footer`](#output-banner-output-footer) 类似。 @@ -1565,10 +1590,12 @@ export default { ### output.sourcemapFileNames -| | | -| -----: | :--------------------------------------------- | -| 类型: | `string \| ((chunkInfo: ChunkInfo) => string)` | -| CLI: | `--sourcemapFileNames ` | +| | | +| -----: | :---------------------------------------------------- | +| 类型: | `string \| ((chunkInfo: PreRenderedChunk) => string)` | +| CLI: | `--sourcemapFileNames ` | + +查看 [`output.chunkFileNames`](#output-chunkfilenames) 以了解 `PreRenderedChunk` 类型。 该选项指定 sourcemap 的模式,或者是一个根据每个 sourcemap 调用以返回此类模式的函数。该模式支持以下占位符: diff --git a/docs/plugin-development/index.md b/docs/plugin-development/index.md index 7dd18371d..19c650296 100644 --- a/docs/plugin-development/index.md +++ b/docs/plugin-development/index.md @@ -835,12 +835,14 @@ flowchart TB | | | | --: | :-- | -| 类型: | `(chunkInfo: ChunkInfo) => string` | +| 类型: | `(chunkInfo: RenderedChunk) => string` | | 类别: | sync, sequential | | 上一个钩子: | [`renderChunk`](#renderchunk) | | 下一个钩子: | 如果还有其他需要处理的块,则为 [`renderChunk`](#renderchunk),否则为 [`generateBundle`](#generatebundle) | -可用于增加单个块的哈希值。为每个 Rollup 输出块调用。返回 falsy 值不会修改哈希值。Truthy 值将传递给 [`hash.update`](https://nodejs.org/dist/latest-v12.x/docs/api/crypto.html#crypto_hash_update_data_inputencoding)。`chunkInfo` 是 [`generateBundle`](#generatebundle) 中的版本的简化版本,不包括 `code` 和 `map`,并在文件名中使用哈希的占位符。 +查看 [`renderChunk`](../plugin-development/index.md#renderchunk) 钩子以了解 `RenderedChunk` 类型。 + +可用于增加单个块的哈希值。为每个 Rollup 输出块调用。返回假值不会修改哈希值。如果返回真值,就会被传递给 [`hash.update`](https://nodejs.org/dist/latest-v12.x/docs/api/crypto.html#crypto_hash_update_data_inputencoding)。`RenderedChunk` 类型是 [`generateBundle`](#generatebundle) 中 `OutputChunk` 类型的简化版本,它不包括 `code` 和 `map`,并在文件名中使用哈希的占位符。 以下插件将使用当前时间戳使块 `foo` 的哈希无效: @@ -864,7 +866,7 @@ function augmentWithDatePlugin() { | | | | --: | :-- | -| 类型: | `string \| ((chunk: ChunkInfo) => string)` | +| 类型: | `string \| ((chunk: RenderedChunk) => string)` | | 类别: | async, sequential | | 上一个钩子: | [`resolveFileUrl`](#resolvefileurl) 用于每个 `import.meta.ROLLUP_FILE_URL_referenceId` 的使用和 [`resolveImportMeta`](#resolveimportmeta) 用于当前块中所有其他 `import.meta` 访问 | | 下一个钩子: | 如果有下一个块中的动态导入表达式,则为 [`renderDynamicImport`](#renderdynamicimport),否则为第一个块的 [`renderChunk`](#renderchunk) | @@ -887,7 +889,7 @@ function augmentWithDatePlugin() { | | | | --: | :-- | -| 类型: | `string \| ((chunk: ChunkInfo) => string)` | +| 类型: | `string \| ((chunk: RenderedChunk) => string)` | | 类别: | async, sequential | | 上一个钩子: | [`resolveFileUrl`](#resolvefileurl) 用于每个 `import.meta.ROLLUP_FILE_URL_referenceId` 的使用和 [`resolveImportMeta`](#resolveimportmeta) 用于当前块中所有其他 `import.meta` 访问 | | 下一个钩子: | 如果有下一个块中的动态导入表达式,则为 [`renderDynamicImport`](#renderdynamicimport),否则为第一个块的 [`renderChunk`](#renderchunk) | @@ -959,7 +961,7 @@ interface OutputChunk { | | | | --: | :-- | -| 类型: | `string \| ((chunk: ChunkInfo) => string)` | +| 类型: | `string \| ((chunk: RenderedChunk) => string)` | | 类别: | async, sequential | | 上一个钩子: | [`resolveFileUrl`](#resolvefileurl) 用于每个 `import.meta.ROLLUP_FILE_URL_referenceId` 的使用和 [`resolveImportMeta`](#resolveimportmeta) 用于当前块中所有其他 `import.meta` 访问 | | 下一个钩子: | 如果有下一个块中的动态导入表达式,则为 [`renderDynamicImport`](#renderdynamicimport),否则为第一个块的 [`renderChunk`](#renderchunk) | @@ -981,7 +983,7 @@ interface OutputChunk { | | | | --: | :-- | -| 类型: | `string \| ((chunk: ChunkInfo) => string)` | +| 类型: | `string \| ((chunk: RenderedChunk) => string)` | | 类别: | async, sequential | | 上一个钩子: | [`resolveFileUrl`](#resolvefileurl) 用于每个 `import.meta.ROLLUP_FILE_URL_referenceId` 的使用和 [`resolveImportMeta`](#resolveimportmeta) 用于当前块中所有其他 `import.meta` 访问 | | 下一个钩子: | 如果有下一个块中的动态导入表达式,则为 [`renderDynamicImport`](#renderdynamicimport),否则为第一个块的 [`renderChunk`](#renderchunk) | @@ -1004,18 +1006,40 @@ type RenderChunkHook = ( options: NormalizedOutputOptions, meta: { chunks: Record } ) => { code: string; map?: SourceMapInput } | string | null; + +interface RenderedChunk { + dynamicImports: string[]; + exports: string[]; + facadeModuleId: string | null; + fileName: string; + implicitlyLoadedBefore: string[]; + importedBindings: { + [imported: string]: string[]; + }; + imports: string[]; + isDynamicEntry: boolean; + isEntry: boolean; + isImplicitEntry: boolean; + moduleIds: string[]; + modules: { + [id: string]: RenderedModule; + }; + name: string; + referencedFiles: string[]; + type: 'chunk'; +} ``` 可以用于转换单个块。对于每个 Rollup 输出块文件都会调用此函数。返回 `null` 将不应用任何转换。如果你在此钩子中更改了代码并希望支持源映射,则需要返回一个描述更改的`map`,请参见 [源代码转换](#source-code-transformations) 部分。 -`chunk` 包含有关块的其他信息,使用与 [`generateBundle`](#generatebundle) 钩子相同的 `ChunkInfo` 类型,但有以下区别: +`chunk` 包含有关块的其他信息,使用与 [`generateBundle`](#generatebundle) 钩子相同的 `OutputChunk` 类型,但有以下区别: - `code` 和 `map` 未设置。而是使用此钩子的 `code` 参数。 -- 所有引用的块文件名将包含哈希占位符,而不是哈希。这包括 `fileName`,`imports`,`importedBindings`,`dynamicImports`和`implicitlyLoadedBefore` 。当你在此钩子返回的代码中使用此类占位符文件名或其一部分时,Rollup 将在`generateBundle`之前将占位符替换为实际哈希,确保哈希反映了最终生成的块的实际内容,包括所有引用的文件哈希。 +- 所有引用的块文件名将包含哈希占位符,而不是哈希。这包括 `fileName`,`imports`,`importedBindings`,`dynamicImports` 和 `implicitlyLoadedBefore`。当你在此钩子返回的代码中使用此类占位符文件名或其一部分时,Rollup 将在 `generateBundle` 之前将占位符替换为实际哈希,确保哈希反映了最终生成的块的实际内容,包括所有引用的文件哈希。 -`chunk` 是可变的,此钩子中应用的更改将传播到其他插件和生成的产物中。这意味着如果你在此钩子中添加或删除导入或导出,则应更新`imports`,`importedBindings`和/或`exports`。 +`chunk` 是可变的,此钩子中应用的更改将传播到其他插件和生成的产物中。这意味着如果你在此钩子中添加或删除导入或导出,则应更新 `imports`,`importedBindings` 和/或 `exports`。 -`meta.chunks` 包含有关 Rollup 正在生成的所有块的信息,并为哈希使用占位符。这意味着你可以在此钩子中探索整个块图。 +`meta.chunks` 包含有关 Rollup 正在生成的所有块的信息,并允许你访问它们的 `RenderedChunk` 信息,这里同样用占位符替代了哈希值。这意味着你可以在此钩子中查看整个块图。 ### renderDynamicImport @@ -1201,7 +1225,7 @@ function importMetaUrlCurrentModulePlugin() { | | | | --: | :-- | -| 类型: | `(options: OutputOptions, bundle: { [fileName: string]: AssetInfo \| ChunkInfo }) => void` | +| 类型: | `(options: OutputOptions, bundle: { [fileName: string]: OutputAsset \| OutputChunk }) => void` | | 类别: | async, parallel | | 上一个钩子: | [`generateBundle`](#generatebundle) | | 下一个钩子: | 如果调用了它,则是输出生成阶段的最后一个钩子,并且如果生成了另一个输出,则可能再次跟随 [`outputOptions`](#outputoptions) | diff --git a/native.d.ts b/native.d.ts index f7ba71468..0085313ac 100644 --- a/native.d.ts +++ b/native.d.ts @@ -3,8 +3,8 @@ /* auto-generated by NAPI-RS */ -export function parse(code: string, allowReturnOutsideFunction: boolean): Buffer -export function parseAsync(code: string, allowReturnOutsideFunction: boolean, signal?: AbortSignal | undefined | null): Promise -export function xxhashBase64Url(input: Uint8Array): string -export function xxhashBase36(input: Uint8Array): string -export function xxhashBase16(input: Uint8Array): string +export declare function parse(code: string, allowReturnOutsideFunction: boolean): Buffer +export declare function parseAsync(code: string, allowReturnOutsideFunction: boolean, signal?: AbortSignal | undefined | null): Promise +export declare function xxhashBase64Url(input: Uint8Array): string +export declare function xxhashBase36(input: Uint8Array): string +export declare function xxhashBase16(input: Uint8Array): string diff --git a/package-lock.json b/package-lock.json index 52a9e8c1e..d5cbe81bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rollup", - "version": "4.18.1", + "version": "4.19.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rollup", - "version": "4.18.1", + "version": "4.19.0", "license": "MIT", "dependencies": { "@types/estree": "1.0.5" @@ -20,8 +20,8 @@ "@codemirror/language": "^6.10.2", "@codemirror/search": "^6.5.6", "@codemirror/state": "^6.4.1", - "@codemirror/view": "^6.28.3", - "@jridgewell/sourcemap-codec": "^1.4.15", + "@codemirror/view": "^6.28.4", + "@jridgewell/sourcemap-codec": "^1.5.0", "@mermaid-js/mermaid-cli": "^10.9.1", "@napi-rs/cli": "^2.18.4", "@rollup/plugin-alias": "^5.1.0", @@ -33,18 +33,18 @@ "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.6", "@rollup/pluginutils": "^5.1.0", - "@shikijs/vitepress-twoslash": "^1.10.0", + "@shikijs/vitepress-twoslash": "^1.10.3", "@types/eslint": "^8.56.10", "@types/inquirer": "^9.0.7", "@types/mocha": "^10.0.7", "@types/node": "~18.18.14", "@types/semver": "^7.5.8", "@types/yargs-parser": "^21.0.3", - "@typescript-eslint/eslint-plugin": "^7.15.0", - "@typescript-eslint/parser": "^7.15.0", + "@typescript-eslint/eslint-plugin": "^7.16.1", + "@typescript-eslint/parser": "^7.16.1", "@vue/eslint-config-prettier": "^9.0.0", "@vue/eslint-config-typescript": "^13.0.0", - "acorn": "^8.12.0", + "acorn": "^8.12.1", "acorn-import-assertions": "^1.9.0", "buble": "^0.20.0", "builtin-modules": "^4.0.0", @@ -61,28 +61,28 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-unicorn": "^54.0.0", - "eslint-plugin-vue": "^9.26.0", + "eslint-plugin-vue": "^9.27.0", "fixturify": "^3.0.0", "flru": "^1.0.2", "fs-extra": "^11.2.0", "github-api": "^3.4.0", "husky": "^9.0.11", - "inquirer": "^9.3.2", + "inquirer": "^10.0.1", "is-reference": "^3.0.2", "lint-staged": "^15.2.7", "locate-character": "^3.0.0", "magic-string": "^0.30.10", - "mocha": "^10.5.2", + "mocha": "^10.6.0", "nodemon": "^3.1.4", "npm-audit-resolver": "^3.0.0-RC.0", "nyc": "^17.0.0", "pinia": "^2.1.7", - "prettier": "^3.3.2", + "prettier": "^3.3.3", "pretty-bytes": "^6.1.1", "pretty-ms": "^9.0.0", "requirejs": "^2.3.6", - "rollup": "^4.18.0", - "rollup-plugin-license": "^3.5.1", + "rollup": "^4.18.1", + "rollup-plugin-license": "^3.5.2", "rollup-plugin-string": "^3.0.0", "semver": "^7.6.2", "shx": "^0.3.4", @@ -90,11 +90,11 @@ "source-map": "^0.7.4", "source-map-support": "^0.5.21", "systemjs": "^6.15.1", - "terser": "^5.31.1", + "terser": "^5.31.2", "tslib": "^2.6.3", "typescript": "^5.5.3", - "vite": "^5.3.2", - "vitepress": "^1.2.3", + "vite": "^5.3.4", + "vitepress": "^1.3.1", "vue": "^3.4.31", "wasm-pack": "^0.13.0", "yargs-parser": "^21.1.1" @@ -348,9 +348,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", - "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz", + "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==", "dev": true, "license": "MIT", "engines": { @@ -358,22 +358,22 @@ } }, "node_modules/@babel/core": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", - "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helpers": "^7.24.7", - "@babel/parser": "^7.24.7", + "@babel/generator": "^7.24.9", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -396,13 +396,13 @@ "license": "MIT" }, "node_modules/@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "version": "7.24.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz", + "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7", + "@babel/types": "^7.24.9", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -425,15 +425,15 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", - "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", + "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -496,9 +496,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", - "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz", + "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==", "dev": true, "license": "MIT", "dependencies": { @@ -543,9 +543,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true, "license": "MIT", "engines": { @@ -563,9 +563,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", - "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "dev": true, "license": "MIT", "engines": { @@ -573,14 +573,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", - "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", + "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/types": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -664,9 +664,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", + "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", "dev": true, "license": "MIT", "bin": { @@ -677,9 +677,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", - "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz", + "integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==", "dev": true, "license": "MIT", "dependencies": { @@ -705,20 +705,20 @@ } }, "node_modules/@babel/traverse": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", - "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", + "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", + "@babel/generator": "^7.24.8", "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-function-name": "^7.24.7", "@babel/helper-hoist-variables": "^7.24.7", "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/parser": "^7.24.8", + "@babel/types": "^7.24.8", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -737,13 +737,13 @@ } }, "node_modules/@babel/types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", + "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, @@ -853,9 +853,9 @@ "license": "MIT" }, "node_modules/@codemirror/view": { - "version": "6.28.4", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.28.4.tgz", - "integrity": "sha512-QScv95fiviSQ/CaVGflxAvvvDy/9wi0RFyDl4LkHHWiMr/UPebyuTspmYSeN5Nx6eujcPYwsQzA6ZIZucKZVHQ==", + "version": "6.28.5", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.28.5.tgz", + "integrity": "sha512-NkUtfUa1lV7Jqg5DfHE/uLl7jKyoymDkaueMQXzePYuezL7FwX3ATANy74iAGlHCGe25hBGB0R+I5dC5EZ5JBg==", "dev": true, "license": "MIT", "dependencies": { @@ -865,33 +865,33 @@ } }, "node_modules/@docsearch/css": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.6.0.tgz", - "integrity": "sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.6.1.tgz", + "integrity": "sha512-VtVb5DS+0hRIprU2CO6ZQjK2Zg4QU5HrDM1+ix6rT0umsYvFvatMAnf97NHZlVWDaaLlx7GRfR/7FikANiM2Fg==", "dev": true, "license": "MIT" }, "node_modules/@docsearch/js": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.6.0.tgz", - "integrity": "sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.6.1.tgz", + "integrity": "sha512-erI3RRZurDr1xES5hvYJ3Imp7jtrXj6f1xYIzDzxiS7nNBufYWPbJwrmMqWC5g9y165PmxEmN9pklGCdLi0Iqg==", "dev": true, "license": "MIT", "dependencies": { - "@docsearch/react": "3.6.0", + "@docsearch/react": "3.6.1", "preact": "^10.0.0" } }, "node_modules/@docsearch/react": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.6.0.tgz", - "integrity": "sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.6.1.tgz", + "integrity": "sha512-qXZkEPvybVhSXj0K7U3bXc233tk5e8PfhoZ6MhPOiik/qUQxYC+Dn9DnoS7CxHQQhHfCvTiN0eY9M12oRghEXw==", "dev": true, "license": "MIT", "dependencies": { "@algolia/autocomplete-core": "1.9.3", "@algolia/autocomplete-preset-algolia": "1.9.3", - "@docsearch/css": "3.6.0", + "@docsearch/css": "3.6.1", "algoliasearch": "^4.19.1" }, "peerDependencies": { @@ -1479,12 +1479,217 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/@inquirer/checkbox": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.4.0.tgz", + "integrity": "sha512-XHOCmntitRBD8SJcrv+6X9YakxO1wfsvezOnU5MBIXeTlSBRCVk9DOIrx6Cgi9BS3qkcy7oQb+fUGEKrP6xecQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.0.3", + "@inquirer/figures": "^1.0.4", + "@inquirer/type": "^1.5.0", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/confirm": { + "version": "3.1.15", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.15.tgz", + "integrity": "sha512-CiLGi3JmKGEsia5kYJN62yG/njHydbYIkzSBril7tCaKbsnIqxa2h/QiON9NjfwiKck/2siosz4h7lVhLFocMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.0.3", + "@inquirer/type": "^1.5.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.3.tgz", + "integrity": "sha512-p2BRZv/vMmpwlU4ZR966vKQzGVCi4VhLjVofwnFLziTQia541T7i1Ar8/LPh+LzjkXzocme+g5Io6MRtzlCcNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.4", + "@inquirer/type": "^1.5.0", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.14.11", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core/node_modules/@types/node": { + "version": "20.14.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz", + "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@inquirer/editor": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.1.15.tgz", + "integrity": "sha512-UmtZnY36rGLS/4cCzvdRmk0xxsGgH2AsF0v1SSlBZ3C5JK/Bxm2gNW8fmUVzQ5vm8kpdWASXPapbUx4iV49ScA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.0.3", + "@inquirer/type": "^1.5.0", + "external-editor": "^3.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/expand": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-2.1.15.tgz", + "integrity": "sha512-aBnnrBw9vbFJROUlDCsbq8H/plX6JHfPwLmSphxaVqOR+b1hgLdw+oRhZkpcJhG2AZOlc8IKzGdZhji93gQg4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.0.3", + "@inquirer/type": "^1.5.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@inquirer/figures": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.4.tgz", + "integrity": "sha512-R7Gsg6elpuqdn55fBH2y9oYzrU/yKrSmIsDX4ROT51vohrECFzTf2zw9BfUbOW8xjfmM2QbVoVYdTwhrtEKWSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.2.2.tgz", + "integrity": "sha512-VjkzYSVH0606nLi9HHiSb4QYs2idwRgneiMoFoTAIwQ1Qwx6OIDugOYLtLta3gP8AWZx7qUvgDtj+/SJuiiKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.0.3", + "@inquirer/type": "^1.5.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/number": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.3.tgz", - "integrity": "sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-1.0.3.tgz", + "integrity": "sha512-GLTuhuhzK/QtB7BhM2pLJGKsv366kv237iNF8hTEOx+EGmXsPNGTydAgZmcuVizEmgC9VSVh1S0memXnIUTYzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.0.3", + "@inquirer/type": "^1.5.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/password": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-2.1.15.tgz", + "integrity": "sha512-/JmiTtIcSYbZdPucEW5q2rhC71vGKPivm3LFqNDQEI6lJyffq7hlfKKFC+R1Qp19dMqkaG+O5L1XmcHpmlAUUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.0.3", + "@inquirer/type": "^1.5.0", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/prompts": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.2.0.tgz", + "integrity": "sha512-7jBWrlkvprEHEFw29zG/piw/M76c5/zYQWfi8ybHeyzcTuXkh1NjDQxLg2PiruvsIt36z1zvKM5yn7vbF0Yr/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^2.4.0", + "@inquirer/confirm": "^3.1.15", + "@inquirer/editor": "^2.1.15", + "@inquirer/expand": "^2.1.15", + "@inquirer/input": "^2.2.2", + "@inquirer/number": "^1.0.3", + "@inquirer/password": "^2.1.15", + "@inquirer/rawlist": "^2.1.15", + "@inquirer/select": "^2.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/rawlist": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.1.15.tgz", + "integrity": "sha512-zwU6aWDMyuQNiY5Z0iYXkxi7pliRFXqUmiS7vG6lAGxqcbOSptYgIxGJnd3AU4Y91N0Tbt57+koJL0S2p6vSkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.0.3", + "@inquirer/type": "^1.5.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/select": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.4.0.tgz", + "integrity": "sha512-iU1eRkHirVNs43zWk6anMIMKc7tCXlJ+I5DcpIV7JzMe+45TuPPOGGCgeGIkZ4xYJ3cXdFoh7GJpm84PNC8veg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.0.3", + "@inquirer/figures": "^1.0.4", + "@inquirer/type": "^1.5.0", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.0.tgz", + "integrity": "sha512-L/UdayX9Z1lLN+itoTKqJ/X4DX5DaWu2Sruwt4XgZzMNv32x4qllbzMX4MbJlz0yxAQtU19UvABGOjmdq1u3qA==", "dev": true, "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, "engines": { "node": ">=18" } @@ -1520,31 +1725,6 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", @@ -1743,9 +1923,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true, "license": "MIT" }, @@ -1765,6 +1945,7 @@ "resolved": "https://registry.npmjs.org/@korzio/djv-draft-04/-/djv-draft-04-2.0.1.tgz", "integrity": "sha512-MeTVcNsfCIYxK6T7jW1sroC7dBAb4IfLmQe6RoCqlxHN5NFkzNpgdnBPR+/0D2wJDUJHM9s9NQv+ouhxKjvUjg==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/@lezer/common": { @@ -1886,6 +2067,7 @@ "integrity": "sha512-P7nZG0skRVa9lH0OQmFG62CrzOySUiuPbKopjVAj3sXP0m1om9XfIvTp46h+NvlpTyd121JekiXFZj+1pnbm9g==", "deprecated": "this package has been deprecated, use `ci-info` instead", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -1963,6 +2145,38 @@ } } }, + "node_modules/@puppeteer/browsers/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@puppeteer/browsers/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@puppeteer/browsers/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@puppeteer/browsers/node_modules/yargs": { "version": "17.7.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", @@ -2205,9 +2419,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", - "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz", + "integrity": "sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==", "cpu": [ "arm" ], @@ -2219,9 +2433,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", - "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.1.tgz", + "integrity": "sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==", "cpu": [ "arm64" ], @@ -2233,9 +2447,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", - "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.1.tgz", + "integrity": "sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==", "cpu": [ "arm64" ], @@ -2247,9 +2461,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", - "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.1.tgz", + "integrity": "sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==", "cpu": [ "x64" ], @@ -2261,9 +2475,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", - "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.1.tgz", + "integrity": "sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==", "cpu": [ "arm" ], @@ -2275,9 +2489,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", - "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.1.tgz", + "integrity": "sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==", "cpu": [ "arm" ], @@ -2289,9 +2503,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", - "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.1.tgz", + "integrity": "sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==", "cpu": [ "arm64" ], @@ -2303,9 +2517,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", - "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.1.tgz", + "integrity": "sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==", "cpu": [ "arm64" ], @@ -2317,9 +2531,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", - "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.1.tgz", + "integrity": "sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==", "cpu": [ "ppc64" ], @@ -2331,9 +2545,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", - "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.1.tgz", + "integrity": "sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==", "cpu": [ "riscv64" ], @@ -2345,9 +2559,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", - "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.1.tgz", + "integrity": "sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==", "cpu": [ "s390x" ], @@ -2359,9 +2573,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", - "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.1.tgz", + "integrity": "sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==", "cpu": [ "x64" ], @@ -2373,9 +2587,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", - "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.1.tgz", + "integrity": "sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==", "cpu": [ "x64" ], @@ -2387,9 +2601,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", - "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.1.tgz", + "integrity": "sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==", "cpu": [ "arm64" ], @@ -2401,9 +2615,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", - "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.1.tgz", + "integrity": "sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==", "cpu": [ "ia32" ], @@ -2415,9 +2629,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", - "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz", + "integrity": "sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==", "cpu": [ "x64" ], @@ -2429,46 +2643,49 @@ ] }, "node_modules/@shikijs/core": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.10.1.tgz", - "integrity": "sha512-qdiJS5a/QGCff7VUFIqd0hDdWly9rDp8lhVmXVrS11aazX8LOTRLHAXkkEeONNsS43EcCd7gax9LLoOz4vlFQA==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.10.3.tgz", + "integrity": "sha512-D45PMaBaeDHxww+EkcDQtDAtzv00Gcsp72ukBtaLSmqRvh0WgGMq3Al0rl1QQBZfuneO75NXMIzEZGFitThWbg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.4" + } }, "node_modules/@shikijs/transformers": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.10.1.tgz", - "integrity": "sha512-0gLtcFyi6R6zcUkFajUEp1Qiv7lHBSFgOz4tQvS8nFsYCQSLI1/9pM+Me8jEIPXv7XLKAoUjw6InL+Sv+BHw/A==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.10.3.tgz", + "integrity": "sha512-MNjsyye2WHVdxfZUSr5frS97sLGe6G1T+1P41QjyBFJehZphMcr4aBlRLmq6OSPBslYe9byQPVvt/LJCOfxw8Q==", "dev": true, "license": "MIT", "dependencies": { - "shiki": "1.10.1" + "shiki": "1.10.3" } }, "node_modules/@shikijs/twoslash": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-1.10.1.tgz", - "integrity": "sha512-BtB7TnpZEHFAVhVU9yPLOhWznJ5NFtHX1b8AEr4UXxYBGAqsM2b0VkjAlfJ32gQxVyr121G8q4g0ZT5eV5bi9w==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-1.10.3.tgz", + "integrity": "sha512-9HlQgvy51jnO46Tcr87A7v6gxlzdKzcpYk15/CQfO48svAslOf+6QYXf0Gao3HWPywOwVj2alMAe0zQhT59y9w==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "1.10.1", + "@shikijs/core": "1.10.3", "twoslash": "^0.2.9" } }, "node_modules/@shikijs/vitepress-twoslash": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@shikijs/vitepress-twoslash/-/vitepress-twoslash-1.10.1.tgz", - "integrity": "sha512-bBFHGKMGW0ACa8jFjDK2V9sWSh6wh1R1/U5VbVUr0HBm7kLR/H0bbr9RZeD91wKZb9JI3zJRwiNrTCueLuBw8A==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@shikijs/vitepress-twoslash/-/vitepress-twoslash-1.10.3.tgz", + "integrity": "sha512-rTfayHA8J4B0z9J9XspwQRg40m0xYLzBgNRhjBWGVGgfymh3OdM0CpEsqwGEFxGgRmDRYCEpf3jqdBejWMekgQ==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/twoslash": "1.10.1", + "@shikijs/twoslash": "1.10.3", "floating-vue": "^5.2.2", "mdast-util-from-markdown": "^2.0.1", "mdast-util-gfm": "^3.0.0", "mdast-util-to-hast": "^13.2.0", - "shiki": "1.10.1", + "shiki": "1.10.3", "twoslash": "^0.2.9", "twoslash-vue": "^0.2.9", "vue": "^3.4.31" @@ -2664,6 +2881,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mute-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", + "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "18.18.14", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.14.tgz", @@ -2730,6 +2957,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/wrap-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", + "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/yargs-parser": { "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", @@ -2749,17 +2983,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.15.0.tgz", - "integrity": "sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz", + "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.15.0", - "@typescript-eslint/type-utils": "7.15.0", - "@typescript-eslint/utils": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0", + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/type-utils": "7.16.1", + "@typescript-eslint/utils": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -2783,16 +3017,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.15.0.tgz", - "integrity": "sha512-k9fYuQNnypLFcqORNClRykkGOMOj+pV6V91R4GO/l1FDGwpqmSwoOQrOHo3cGaH63e+D3ZiCAOsuS/D2c99j/A==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.1.tgz", + "integrity": "sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.15.0", - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/typescript-estree": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0", + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/typescript-estree": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "debug": "^4.3.4" }, "engines": { @@ -2812,14 +3046,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz", - "integrity": "sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", + "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0" + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2830,14 +3064,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.15.0.tgz", - "integrity": "sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz", + "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.15.0", - "@typescript-eslint/utils": "7.15.0", + "@typescript-eslint/typescript-estree": "7.16.1", + "@typescript-eslint/utils": "7.16.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -2858,9 +3092,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.15.0.tgz", - "integrity": "sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", + "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", "dev": true, "license": "MIT", "engines": { @@ -2872,14 +3106,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz", - "integrity": "sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", + "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2901,16 +3135,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.15.0.tgz", - "integrity": "sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz", + "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.15.0", - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/typescript-estree": "7.15.0" + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/typescript-estree": "7.16.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2924,13 +3158,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz", - "integrity": "sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz", + "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.15.0", + "@typescript-eslint/types": "7.16.1", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -2973,74 +3207,74 @@ } }, "node_modules/@volar/language-core": { - "version": "2.4.0-alpha.15", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.0-alpha.15.tgz", - "integrity": "sha512-mt8z4Fm2WxfQYoQHPcKVjLQV6PgPqyKLbkCVY2cr5RSaamqCHjhKEpsFX66aL4D/7oYguuaUw9Bx03Vt0TpIIA==", + "version": "2.4.0-alpha.16", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.0-alpha.16.tgz", + "integrity": "sha512-oOTnIZlx0P/idFwVw+W0NbzKDtZAQMzXSdIFfTePCKcXlb4Ys12GaGkx8NF9dsvPYV3nbv3ZsSxnkZWBmNKd7A==", "dev": true, "license": "MIT", "dependencies": { - "@volar/source-map": "2.4.0-alpha.15" + "@volar/source-map": "2.4.0-alpha.16" } }, "node_modules/@volar/source-map": { - "version": "2.4.0-alpha.15", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.0-alpha.15.tgz", - "integrity": "sha512-8Htngw5TmBY4L3ClDqBGyfLhsB8EmoEXUH1xydyEtEoK0O6NX5ur4Jw8jgvscTlwzizyl/wsN1vn0cQXVbbXYg==", + "version": "2.4.0-alpha.16", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.0-alpha.16.tgz", + "integrity": "sha512-sL9vNG7iR2hiKZor7UkD5Sufu3QCia4cbp2gX/nGRNSdaPbhOpdAoavwlBm0PrVkpiA19NZuavZoobD8krviFg==", "dev": true, "license": "MIT" }, "node_modules/@vue/compiler-core": { - "version": "3.4.31", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.31.tgz", - "integrity": "sha512-skOiodXWTV3DxfDhB4rOf3OGalpITLlgCeOwb+Y9GJpfQ8ErigdBUHomBzvG78JoVE8MJoQsb+qhZiHfKeNeEg==", + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.33.tgz", + "integrity": "sha512-MoIREbkdPQlnGfSKDMgzTqzqx5nmEjIc0ydLVYlTACGBsfvOJ4tHSbZXKVF536n6fB+0eZaGEOqsGThPpdvF5A==", "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.24.7", - "@vue/shared": "3.4.31", + "@vue/shared": "3.4.33", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.31", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.31.tgz", - "integrity": "sha512-wK424WMXsG1IGMyDGyLqB+TbmEBFM78hIsOJ9QwUVLGrcSk0ak6zYty7Pj8ftm7nEtdU/DGQxAXp0/lM/2cEpQ==", + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.33.tgz", + "integrity": "sha512-GzB8fxEHKw0gGet5BKlpfXEqoBnzSVWwMnT+dc25wE7pFEfrU/QsvjZMP9rD4iVXHBBoemTct8mN0GJEI6ZX5A==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.4.31", - "@vue/shared": "3.4.31" + "@vue/compiler-core": "3.4.33", + "@vue/shared": "3.4.33" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.4.31", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.31.tgz", - "integrity": "sha512-einJxqEw8IIJxzmnxmJBuK2usI+lJonl53foq+9etB2HAzlPjAS/wa7r0uUpXw5ByX3/0uswVSrjNb17vJm1kQ==", + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.33.tgz", + "integrity": "sha512-7rk7Vbkn21xMwIUpHQR4hCVejwE6nvhBOiDgoBcR03qvGqRKA7dCBSsHZhwhYUsmjlbJ7OtD5UFIyhP6BY+c8A==", "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.24.7", - "@vue/compiler-core": "3.4.31", - "@vue/compiler-dom": "3.4.31", - "@vue/compiler-ssr": "3.4.31", - "@vue/shared": "3.4.31", + "@vue/compiler-core": "3.4.33", + "@vue/compiler-dom": "3.4.33", + "@vue/compiler-ssr": "3.4.33", + "@vue/shared": "3.4.33", "estree-walker": "^2.0.2", "magic-string": "^0.30.10", - "postcss": "^8.4.38", + "postcss": "^8.4.39", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.4.31", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.31.tgz", - "integrity": "sha512-RtefmITAje3fJ8FSg1gwgDhdKhZVntIVbwupdyZDSifZTRMiWxWehAOTCc8/KZDnBOcYQ4/9VWxsTbd3wT0hAA==", + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.33.tgz", + "integrity": "sha512-0WveC9Ai+eT/1b6LCV5IfsufBZ0HP7pSSTdDjcuW302tTEgoBw8rHVHKPbGUtzGReUFCRXbv6zQDDgucnV2WzQ==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.4.31", - "@vue/shared": "3.4.31" + "@vue/compiler-dom": "3.4.33", + "@vue/shared": "3.4.33" } }, "node_modules/@vue/devtools-api": { @@ -3051,13 +3285,13 @@ "license": "MIT" }, "node_modules/@vue/devtools-kit": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.3.5.tgz", - "integrity": "sha512-wwfi10gJ1HMtjzcd8aIOnzBHlIRqsYDgcDyrKvkeyc0Gbcoe7UrkXRVHZUOtcxxoplHA0PwpT6wFg0uUCmi8Ww==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.3.6.tgz", + "integrity": "sha512-5Ym9V3fkJenEoptqKoo+cgY5RTVwrSssFdzRsuyIgaeiskCT+rRJeQdwoo81tyrQ1mfS7Er1rYZlSzr3Y3L/ew==", "dev": true, "license": "MIT", "dependencies": { - "@vue/devtools-shared": "^7.3.5", + "@vue/devtools-shared": "^7.3.6", "birpc": "^0.2.17", "hookable": "^5.5.3", "mitt": "^3.0.1", @@ -3074,9 +3308,9 @@ "license": "MIT" }, "node_modules/@vue/devtools-shared": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.3.5.tgz", - "integrity": "sha512-Rqii3VazmWTi67a86rYopi61n5Ved05EybJCwyrfoO9Ok3MaS/4yRFl706ouoISMlyrASJFEzM0/AiDA6w4f9A==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.3.6.tgz", + "integrity": "sha512-R/FOmdJV+hhuwcNoxp6e87RRkEeDMVhWH+nOsnHUrwjjsyeXJ2W1475Ozmw+cbZhejWQzftkHVKO28Fuo1yqCw==", "dev": true, "license": "MIT", "dependencies": { @@ -3149,57 +3383,57 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.4.31", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.31.tgz", - "integrity": "sha512-VGkTani8SOoVkZNds1PfJ/T1SlAIOf8E58PGAhIOUDYPC4GAmFA2u/E14TDAFcf3vVDKunc4QqCe/SHr8xC65Q==", + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.33.tgz", + "integrity": "sha512-B24QIelahDbyHipBgbUItQblbd4w5HpG3KccL+YkGyo3maXyS253FzcTR3pSz739OTphmzlxP7JxEMWBpewilA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/shared": "3.4.31" + "@vue/shared": "3.4.33" } }, "node_modules/@vue/runtime-core": { - "version": "3.4.31", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.31.tgz", - "integrity": "sha512-LDkztxeUPazxG/p8c5JDDKPfkCDBkkiNLVNf7XZIUnJ+66GVGkP+TIh34+8LtPisZ+HMWl2zqhIw0xN5MwU1cw==", + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.33.tgz", + "integrity": "sha512-6wavthExzT4iAxpe8q37/rDmf44nyOJGISJPxCi9YsQO+8w9v0gLCFLfH5TzD1V1AYrTAdiF4Y1cgUmP68jP6w==", "dev": true, "license": "MIT", "dependencies": { - "@vue/reactivity": "3.4.31", - "@vue/shared": "3.4.31" + "@vue/reactivity": "3.4.33", + "@vue/shared": "3.4.33" } }, "node_modules/@vue/runtime-dom": { - "version": "3.4.31", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.31.tgz", - "integrity": "sha512-2Auws3mB7+lHhTFCg8E9ZWopA6Q6L455EcU7bzcQ4x6Dn4cCPuqj6S2oBZgN2a8vJRS/LSYYxwFFq2Hlx3Fsaw==", + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.33.tgz", + "integrity": "sha512-iHsMCUSFJ+4z432Bn9kZzHX+zOXa6+iw36DaVRmKYZpPt9jW9riF32SxNwB124i61kp9+AZtheQ/mKoJLerAaQ==", "dev": true, "license": "MIT", "dependencies": { - "@vue/reactivity": "3.4.31", - "@vue/runtime-core": "3.4.31", - "@vue/shared": "3.4.31", + "@vue/reactivity": "3.4.33", + "@vue/runtime-core": "3.4.33", + "@vue/shared": "3.4.33", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.4.31", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.31.tgz", - "integrity": "sha512-D5BLbdvrlR9PE3by9GaUp1gQXlCNadIZytMIb8H2h3FMWJd4oUfkUTEH2wAr3qxoRz25uxbTcbqd3WKlm9EHQA==", + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.33.tgz", + "integrity": "sha512-jTH0d6gQcaYideFP/k0WdEu8PpRS9MF8d0b6SfZzNi+ap972pZ0TNIeTaESwdOtdY0XPVj54XEJ6K0wXxir4fw==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-ssr": "3.4.31", - "@vue/shared": "3.4.31" + "@vue/compiler-ssr": "3.4.33", + "@vue/shared": "3.4.33" }, "peerDependencies": { - "vue": "3.4.31" + "vue": "3.4.33" } }, "node_modules/@vue/shared": { - "version": "3.4.31", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.31.tgz", - "integrity": "sha512-Yp3wtJk//8cO4NItOPpi3QkLExAr/aLBGZMmTtW9WpdwBCJpRM6zj9WgWktXAl8IDIozwNMByT45JP3tO3ACWA==", + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.33.tgz", + "integrity": "sha512-aoRY0jQk3A/cuvdkodTrM4NMfxco8n55eG4H7ML/CRy7OryHfiqvug4xrCBBMbbN+dvXAetDDwZW9DXWWjBntA==", "dev": true, "license": "MIT" }, @@ -3746,6 +3980,7 @@ "resolved": "https://registry.npmjs.org/audit-resolve-core/-/audit-resolve-core-3.0.0-3.tgz", "integrity": "sha512-37Qkk1EerVIzSF824BytESWeEtUcbAmdWyTGA/MqnHgVzO+PnU9oNqOpZTMst54xLpJci70Jszq/sLogqfvHmQ==", "dev": true, + "license": "Apache 2.0", "dependencies": { "debug": "^4.3.1", "djv": "^2.1.4", @@ -3896,9 +4131,9 @@ "license": "ISC" }, "node_modules/browserslist": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", - "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", "dev": true, "funding": [ { @@ -3916,10 +4151,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001629", - "electron-to-chromium": "^1.4.796", + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.16" + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -4154,9 +4389,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001640", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", - "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", + "version": "1.0.30001642", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz", + "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==", "dev": true, "funding": [ { @@ -4471,6 +4706,38 @@ "dev": true, "license": "MIT" }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -4489,16 +4756,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -4582,6 +4839,7 @@ "engines": [ "node >= 6.0" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -4833,9 +5091,9 @@ "license": "MIT" }, "node_modules/cytoscape": { - "version": "3.30.0", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.30.0.tgz", - "integrity": "sha512-l590mjTHT6/Cbxp13dGPC2Y7VXdgc+rUeF8AnF/JPzhjNevbDJfObnJgaSjlldOgBQZbue+X6IUZ7r5GAgvauQ==", + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.30.1.tgz", + "integrity": "sha512-TRJc3HbBPkHd50u9YfJh2FxD1lDLZ+JXnJoyBn5LkncoeuT7fapO/Hq/Ed8TdFclaKshzInge2i30bg7VKeoPQ==", "dev": true, "license": "MIT", "engines": { @@ -5454,9 +5712,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.11", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", - "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==", + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", + "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==", "dev": true, "license": "MIT" }, @@ -5547,23 +5805,11 @@ "resolved": "https://registry.npmjs.org/default-shell/-/default-shell-1.0.1.tgz", "integrity": "sha512-/Os8tTMPSriNHCsVj3VLjMZblIl1sIg8EXz3qg7C5K+y9calfTA/qzlfPvCQ+LEgLWmtZ9wCnzE1w+S6TPPFyQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -5679,6 +5925,7 @@ "resolved": "https://registry.npmjs.org/djv/-/djv-2.1.4.tgz", "integrity": "sha512-giDn+BVbtLlwtkvtcsZjbjzpALHB77skiv3FIu6Wp8b5j8BunDcVJYH0cGUaexp6s0Sb7IkquXXjsLBJhXwQpA==", "dev": true, + "license": "MIT", "optionalDependencies": { "@korzio/djv-draft-04": "^2.0.1" } @@ -5697,9 +5944,9 @@ } }, "node_modules/dompurify": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.5.tgz", - "integrity": "sha512-lwG+n5h8QNpxtyrJW/gJWckL+1/DQiYMX8f7t8Z2AZTPw1esVrqjI63i7Zc2Gz0aKzLVMYC1V1PL/ky+aY/NgA==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz", + "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==", "dev": true, "license": "(MPL-2.0 OR Apache-2.0)" }, @@ -5711,9 +5958,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.4.816", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz", - "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==", + "version": "1.4.830", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.830.tgz", + "integrity": "sha512-TrPKKH20HeN0J1LHzsYLs2qwXrp8TF4nHdu4sq61ozGbzMpWhI7iIOPYPPkxeq1azMT9PZ8enPFcftbs/Npcjg==", "dev": true, "license": "ISC" }, @@ -5725,9 +5972,9 @@ "license": "EPL-2.0" }, "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, @@ -6196,14 +6443,14 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", - "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.6" + "synckit": "^0.9.1" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -6541,9 +6788,9 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7231,9 +7478,9 @@ "license": "MIT" }, "node_modules/glob": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", - "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { @@ -7247,9 +7494,6 @@ "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -7542,13 +7786,13 @@ } }, "node_modules/husky": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", - "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.1.tgz", + "integrity": "sha512-fCqlqLXcBnXa/TJXmT93/A36tJsjdJkibQ1MuIiFyCCYUlpYpIaj2mv1w+3KR6Rzu1IC3slFTje5f6DUp2A2rg==", "dev": true, "license": "MIT", "bin": { - "husky": "bin.mjs" + "husky": "bin.js" }, "engines": { "node": ">=18" @@ -7665,24 +7909,19 @@ "license": "ISC" }, "node_modules/inquirer": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.3.4.tgz", - "integrity": "sha512-Hp6meNSDzp+Oc9JNUUlYsK81dxaPrrBRa7H/s3+yebCDRJe4UNKYSkEUZoIcuKJjNipBLPKsuc7BvO6tLzo/KA==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-10.0.3.tgz", + "integrity": "sha512-/PxdZLy7YgrD5GFIBqUDy08jt73YVRzXrRJqv0Kfe4jJ2tPBhbr16r7OKkHEJ/Bd/0GgOLYSeqtQS/01YS5Pow==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/figures": "^1.0.3", + "@inquirer/prompts": "^5.2.0", + "@inquirer/type": "^1.5.0", + "@types/mute-stream": "^0.0.4", "ansi-escapes": "^4.3.2", - "cli-width": "^4.1.0", - "external-editor": "^3.1.0", - "mute-stream": "1.0.0", - "ora": "^5.4.1", + "mute-stream": "^1.0.0", "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.2" + "rxjs": "^7.8.1" }, "engines": { "node": ">=18" @@ -7833,9 +8072,9 @@ } }, "node_modules/is-core-module": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", "dev": true, "license": "MIT", "dependencies": { @@ -7916,16 +8155,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -7983,13 +8212,13 @@ } }, "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "node_modules/is-reference": { @@ -8318,17 +8547,14 @@ } }, "node_modules/jackspeak": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", - "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -8434,7 +8660,8 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsonlines/-/jsonlines-0.1.1.tgz", "integrity": "sha512-ekDrAGso79Cvf+dtm+mL8OBI2bmAOt3gssYs833De/C9NmIpWDWyUO4zPgB5x2/OhY366dkhgfPMYfwZF7yOZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/katex": { "version": "0.16.11", @@ -9272,6 +9499,7 @@ "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz", "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-obj": "^1.1" }, @@ -9279,15 +9507,6 @@ "node": ">=4" } }, - "node_modules/merge-options/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -10427,9 +10646,9 @@ } }, "node_modules/minisearch": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz", - "integrity": "sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.0.2.tgz", + "integrity": "sha512-Pf0sFXaCgRpOBDr4G8wTbVAEH9o9rvJzCMwj0TMe3L/NfUuG188xabfx6Vm3vD/Dv5L500n7JeiMB9Mq3sWMfQ==", "dev": true, "license": "MIT" }, @@ -10578,6 +10797,13 @@ "dev": true, "license": "MIT" }, + "node_modules/mocha/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, "node_modules/mocha/node_modules/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", @@ -10599,6 +10825,16 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/mocha/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/mocha/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", @@ -10619,6 +10855,21 @@ "dev": true, "license": "MIT" }, + "node_modules/mocha/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/mocha/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -10771,9 +11022,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.17.tgz", + "integrity": "sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA==", "dev": true, "license": "MIT" }, @@ -10888,6 +11139,7 @@ "resolved": "https://registry.npmjs.org/npm-audit-resolver/-/npm-audit-resolver-3.0.0-RC.0.tgz", "integrity": "sha512-UuVC7HIxGMhkGfj6IcilBO0cbAz/Y1OhRHA49g3ccpyHDy6Bpd4nkPnLe+xuyZmTgUjiac509IIN3YPVdJZ0Hw==", "dev": true, + "license": "Apache 2.0", "dependencies": { "@npmcli/ci-detect": "^3.0.2", "audit-resolve-core": "^3.0.0-3", @@ -10910,6 +11162,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -10925,6 +11178,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10941,6 +11195,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -10952,13 +11207,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/npm-audit-resolver/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11073,6 +11330,13 @@ "wrap-ansi": "^6.2.0" } }, + "node_modules/nyc/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -11123,6 +11387,16 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/nyc/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/nyc/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -11195,6 +11469,21 @@ "dev": true, "license": "ISC" }, + "node_modules/nyc/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/nyc/node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", @@ -11377,156 +11666,6 @@ "node": ">= 0.8.0" } }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ora/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ora/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -11735,14 +11874,11 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", - "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "ISC", - "engines": { - "node": "14 || >=16.14" - } + "license": "ISC" }, "node_modules/path-type": { "version": "4.0.0", @@ -11974,9 +12110,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", - "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", + "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", "dev": true, "license": "MIT", "dependencies": { @@ -12009,9 +12145,9 @@ } }, "node_modules/prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "license": "MIT", "bin": { @@ -12226,6 +12362,7 @@ "resolved": "https://registry.npmjs.org/read/-/read-2.1.0.tgz", "integrity": "sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ==", "dev": true, + "license": "ISC", "dependencies": { "mute-stream": "~1.0.0" }, @@ -12719,9 +12856,9 @@ "license": "Unlicense" }, "node_modules/rollup": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", - "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.1.tgz", + "integrity": "sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==", "dev": true, "license": "MIT", "dependencies": { @@ -12735,22 +12872,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.18.0", - "@rollup/rollup-android-arm64": "4.18.0", - "@rollup/rollup-darwin-arm64": "4.18.0", - "@rollup/rollup-darwin-x64": "4.18.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", - "@rollup/rollup-linux-arm-musleabihf": "4.18.0", - "@rollup/rollup-linux-arm64-gnu": "4.18.0", - "@rollup/rollup-linux-arm64-musl": "4.18.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", - "@rollup/rollup-linux-riscv64-gnu": "4.18.0", - "@rollup/rollup-linux-s390x-gnu": "4.18.0", - "@rollup/rollup-linux-x64-gnu": "4.18.0", - "@rollup/rollup-linux-x64-musl": "4.18.0", - "@rollup/rollup-win32-arm64-msvc": "4.18.0", - "@rollup/rollup-win32-ia32-msvc": "4.18.0", - "@rollup/rollup-win32-x64-msvc": "4.18.0", + "@rollup/rollup-android-arm-eabi": "4.18.1", + "@rollup/rollup-android-arm64": "4.18.1", + "@rollup/rollup-darwin-arm64": "4.18.1", + "@rollup/rollup-darwin-x64": "4.18.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.1", + "@rollup/rollup-linux-arm-musleabihf": "4.18.1", + "@rollup/rollup-linux-arm64-gnu": "4.18.1", + "@rollup/rollup-linux-arm64-musl": "4.18.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.1", + "@rollup/rollup-linux-riscv64-gnu": "4.18.1", + "@rollup/rollup-linux-s390x-gnu": "4.18.1", + "@rollup/rollup-linux-x64-gnu": "4.18.1", + "@rollup/rollup-linux-x64-musl": "4.18.1", + "@rollup/rollup-win32-arm64-msvc": "4.18.1", + "@rollup/rollup-win32-ia32-msvc": "4.18.1", + "@rollup/rollup-win32-x64-msvc": "4.18.1", "fsevents": "~2.3.2" } }, @@ -12964,17 +13101,17 @@ "license": "MIT" }, "node_modules/search-insights": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.14.0.tgz", - "integrity": "sha512-OLN6MsPMCghDOqlCtsIsYgtsC0pnwVTyT9Mu6A3ewOj1DxvzZF6COrn2g86E/c05xbktB0XN04m/t1Z+n+fTGw==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.15.0.tgz", + "integrity": "sha512-ch2sPCUDD4sbPQdknVl9ALSi9H7VyoeVbsxznYz6QV55jJ8CI3EtwpO1i84keN4+hF5IeHWIeGvc08530JkVXQ==", "dev": true, "license": "MIT", "peer": true }, "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "license": "ISC", "bin": { @@ -13133,13 +13270,14 @@ } }, "node_modules/shiki": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.10.1.tgz", - "integrity": "sha512-uafV7WCgN4YYrccH6yxpnps6k38sSTlFRrwc4jycWmhWxJIm9dPrk+XkY1hZ2t0I7jmacMNb15Lf2fspa/Y3lg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.10.3.tgz", + "integrity": "sha512-eneCLncGuvPdTutJuLyUGS8QNPAVFO5Trvld2wgEq1e002mwctAhJKeMGWtWVXOIEzmlcLRqcgPSorR6AVzOmQ==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "1.10.1" + "@shikijs/core": "1.10.3", + "@types/hast": "^3.0.4" } }, "node_modules/shx": { @@ -13301,6 +13439,7 @@ "resolved": "https://registry.npmjs.org/spawn-shell/-/spawn-shell-2.1.0.tgz", "integrity": "sha512-mjlYAQbZPHd4YsoHEe+i0Xbp9sJefMKN09JPp80TqrjC5NSuo+y1RG3NBireJlzl1dDV2NIkIfgS6coXtyqN/A==", "dev": true, + "license": "MIT", "dependencies": { "default-shell": "^1.0.1", "merge-options": "~1.0.1", @@ -13315,6 +13454,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^2.0.0" }, @@ -13327,6 +13467,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -13485,18 +13626,21 @@ } }, "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/string-width-cjs": { @@ -13515,6 +13659,13 @@ "node": ">=8" } }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -13525,14 +13676,33 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/string.prototype.trim": { @@ -13720,9 +13890,9 @@ } }, "node_modules/synckit": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", - "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", "dev": true, "license": "MIT", "dependencies": { @@ -13826,9 +13996,9 @@ "license": "ISC" }, "node_modules/terser": { - "version": "5.31.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", - "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -14225,7 +14395,8 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", @@ -14519,9 +14690,9 @@ } }, "node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.2.tgz", + "integrity": "sha512-zND7NlS8rJYb/sPqkb13ZvbbUoExdbi4w3SfRrMq6R3FvnLQmmfpajJNITuuYm6AZ5uao9vy4BAos3EXBPf2rg==", "dev": true, "license": "MIT", "dependencies": { @@ -14550,9 +14721,9 @@ } }, "node_modules/vite": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz", - "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.4.tgz", + "integrity": "sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==", "dev": true, "license": "MIT", "dependencies": { @@ -14606,28 +14777,28 @@ } }, "node_modules/vitepress": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.2.3.tgz", - "integrity": "sha512-GvEsrEeNLiDE1+fuwDAYJCYLNZDAna+EtnXlPajhv/MYeTjbNK6Bvyg6NoTdO1sbwuQJ0vuJR99bOlH53bo6lg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.3.1.tgz", + "integrity": "sha512-soZDpg2rRVJNIM/IYMNDPPr+zTHDA5RbLDHAxacRu+Q9iZ2GwSR0QSUlLs+aEZTkG0SOX1dc8RmUYwyuxK8dfQ==", "dev": true, "license": "MIT", "dependencies": { "@docsearch/css": "^3.6.0", "@docsearch/js": "^3.6.0", - "@shikijs/core": "^1.6.2", - "@shikijs/transformers": "^1.6.2", + "@shikijs/core": "^1.10.3", + "@shikijs/transformers": "^1.10.3", "@types/markdown-it": "^14.1.1", "@vitejs/plugin-vue": "^5.0.5", - "@vue/devtools-api": "^7.2.1", - "@vue/shared": "^3.4.27", - "@vueuse/core": "^10.10.0", - "@vueuse/integrations": "^10.10.0", + "@vue/devtools-api": "^7.3.5", + "@vue/shared": "^3.4.31", + "@vueuse/core": "^10.11.0", + "@vueuse/integrations": "^10.11.0", "focus-trap": "^7.5.4", "mark.js": "8.11.1", - "minisearch": "^6.3.0", - "shiki": "^1.6.2", - "vite": "^5.2.12", - "vue": "^3.4.27" + "minisearch": "^7.0.0", + "shiki": "^1.10.3", + "vite": "^5.3.3", + "vue": "^3.4.31" }, "bin": { "vitepress": "bin/vitepress.js" @@ -14646,27 +14817,27 @@ } }, "node_modules/vitepress/node_modules/@vue/devtools-api": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.3.5.tgz", - "integrity": "sha512-BSdBBu5hOIv+gBJC9jzYMh5bC27FQwjWLSb8fVAniqlL9gvsqvK27xTgczMf+hgctlszMYQnRm3bpY/j8vhPqw==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.3.6.tgz", + "integrity": "sha512-z6cKyxdXrIGgA++eyGBfquj6dCplRdgjt+I18fJx8hjWTXDTIyeQvryyEBMchnfZVyvUTjK3QjGjDpLCnJxPjw==", "dev": true, "license": "MIT", "dependencies": { - "@vue/devtools-kit": "^7.3.5" + "@vue/devtools-kit": "^7.3.6" } }, "node_modules/vue": { - "version": "3.4.31", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.31.tgz", - "integrity": "sha512-njqRrOy7W3YLAlVqSKpBebtZpDVg21FPoaq1I7f/+qqBThK9ChAIjkRWgeP6Eat+8C+iia4P3OYqpATP21BCoQ==", + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.33.tgz", + "integrity": "sha512-VdMCWQOummbhctl4QFMcW6eNtXHsFyDlX60O/tsSQuCcuDOnJ1qPOhhVla65Niece7xq/P2zyZReIO5mP+LGTQ==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.4.31", - "@vue/compiler-sfc": "3.4.31", - "@vue/runtime-dom": "3.4.31", - "@vue/server-renderer": "3.4.31", - "@vue/shared": "3.4.31" + "@vue/compiler-dom": "3.4.33", + "@vue/compiler-sfc": "3.4.33", + "@vue/runtime-dom": "3.4.33", + "@vue/server-renderer": "3.4.33", + "@vue/shared": "3.4.33" }, "peerDependencies": { "typescript": "*" @@ -14784,16 +14955,6 @@ "wasm-pack": "run.js" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, "node_modules/web-worker": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz", @@ -14966,6 +15127,38 @@ "dev": true, "license": "MIT" }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -15002,6 +15195,38 @@ "dev": true, "license": "MIT" }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -15162,6 +15387,48 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yargs-unparser/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", diff --git a/package.json b/package.json index 8d2b3074a..2e24cf6f2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rollup", - "version": "4.18.1", + "version": "4.19.0", "description": "Next-generation ES module bundler", "main": "dist/rollup.js", "module": "dist/es/rollup.js", @@ -121,8 +121,8 @@ "@codemirror/language": "^6.10.2", "@codemirror/search": "^6.5.6", "@codemirror/state": "^6.4.1", - "@codemirror/view": "^6.28.3", - "@jridgewell/sourcemap-codec": "^1.4.15", + "@codemirror/view": "^6.28.4", + "@jridgewell/sourcemap-codec": "^1.5.0", "@mermaid-js/mermaid-cli": "^10.9.1", "@napi-rs/cli": "^2.18.4", "@rollup/plugin-alias": "^5.1.0", @@ -134,18 +134,18 @@ "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.6", "@rollup/pluginutils": "^5.1.0", - "@shikijs/vitepress-twoslash": "^1.10.0", + "@shikijs/vitepress-twoslash": "^1.10.3", "@types/eslint": "^8.56.10", "@types/inquirer": "^9.0.7", "@types/mocha": "^10.0.7", "@types/node": "~18.18.14", "@types/semver": "^7.5.8", "@types/yargs-parser": "^21.0.3", - "@typescript-eslint/eslint-plugin": "^7.15.0", - "@typescript-eslint/parser": "^7.15.0", + "@typescript-eslint/eslint-plugin": "^7.16.1", + "@typescript-eslint/parser": "^7.16.1", "@vue/eslint-config-prettier": "^9.0.0", "@vue/eslint-config-typescript": "^13.0.0", - "acorn": "^8.12.0", + "acorn": "^8.12.1", "acorn-import-assertions": "^1.9.0", "buble": "^0.20.0", "builtin-modules": "^4.0.0", @@ -162,28 +162,28 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-unicorn": "^54.0.0", - "eslint-plugin-vue": "^9.26.0", + "eslint-plugin-vue": "^9.27.0", "fixturify": "^3.0.0", "flru": "^1.0.2", "fs-extra": "^11.2.0", "github-api": "^3.4.0", "husky": "^9.0.11", - "inquirer": "^9.3.2", + "inquirer": "^10.0.1", "is-reference": "^3.0.2", "lint-staged": "^15.2.7", "locate-character": "^3.0.0", "magic-string": "^0.30.10", - "mocha": "^10.5.2", + "mocha": "^10.6.0", "nodemon": "^3.1.4", "npm-audit-resolver": "^3.0.0-RC.0", "nyc": "^17.0.0", "pinia": "^2.1.7", - "prettier": "^3.3.2", + "prettier": "^3.3.3", "pretty-bytes": "^6.1.1", "pretty-ms": "^9.0.0", "requirejs": "^2.3.6", - "rollup": "^4.18.0", - "rollup-plugin-license": "^3.5.1", + "rollup": "^4.18.1", + "rollup-plugin-license": "^3.5.2", "rollup-plugin-string": "^3.0.0", "semver": "^7.6.2", "shx": "^0.3.4", @@ -191,11 +191,11 @@ "source-map": "^0.7.4", "source-map-support": "^0.5.21", "systemjs": "^6.15.1", - "terser": "^5.31.1", + "terser": "^5.31.2", "tslib": "^2.6.3", "typescript": "^5.5.3", - "vite": "^5.3.2", - "vitepress": "^1.2.3", + "vite": "^5.3.4", + "vitepress": "^1.3.1", "vue": "^3.4.31", "wasm-pack": "^0.13.0", "yargs-parser": "^21.1.1" @@ -203,7 +203,7 @@ "overrides": { "axios": "^1.7.2", "semver": "^7.6.2", - "ws": "^8.17.1" + "ws": "^8.18.0" }, "overrides_comments": { "ws": "mermaid requires an older 8.13.0 version via puppeteer with vulnerabilities" diff --git a/rust/Cargo.lock b/rust/Cargo.lock index c50e92e0b..fd9d81b4e 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -34,6 +34,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + [[package]] name = "anyhow" version = "1.0.86" @@ -48,14 +54,14 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "ast_node" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab31376d309dd3bfc9cfb3c11c93ce0e0741bbe0354b20e7f8c60b044730b79" +checksum = "f9184f2b369b3e8625712493c89b785881f27eedc6cde480a81883cef78868b2" dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn", + "syn 2.0.71", ] [[package]] @@ -140,12 +146,15 @@ name = "bumpalo" version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +dependencies = [ + "allocator-api2", +] [[package]] name = "cc" -version = "1.0.104" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74b6a57f98764a267ff415d50a25e6e166f3831a5071af4995296ea97d210490" +checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" [[package]] name = "cfg-if" @@ -169,7 +178,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn", + "syn 2.0.71", ] [[package]] @@ -236,13 +245,13 @@ dependencies = [ [[package]] name = "from_variant" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc9cc75639b041067353b9bce2450d6847e547276c6fbe4487d7407980e07db" +checksum = "32016f1242eb82af5474752d00fd8ebcd9004bd69b462b1c91de833972d08ed4" dependencies = [ "proc-macro2", "swc_macros_common", - "syn", + "syn 2.0.71", ] [[package]] @@ -325,7 +334,7 @@ dependencies = [ "Inflector", "proc-macro2", "quote", - "syn", + "syn 2.0.71", ] [[package]] @@ -428,23 +437,23 @@ checksum = "e1c0f5d67ee408a4685b61f5ab7e58605c8ae3f2b4189f0127d804ff13d5560a" [[package]] name = "napi-derive" -version = "2.16.8" +version = "2.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eafd2b920906ea5b1f5f1f9d1eff9cc74e4ff8124dca41b501c1413079589187" +checksum = "87c3b5d4ab13e20a4bb9d3a1e2f3d4e77eee4a205d0f810abfd226b971dc6ce5" dependencies = [ "cfg-if", "convert_case", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.71", ] [[package]] name = "napi-derive-backend" -version = "1.0.70" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b370b784440c65eb9001d839012eb912ee43e3a2d0361e2c30c13052372c39fe" +checksum = "96de436a6ab93265beef838f8333c8345438f059df6081fe0ad0b8648ee0c524" dependencies = [ "convert_case", "once_cell", @@ -452,7 +461,7 @@ dependencies = [ "quote", "regex", "semver 1.0.23", - "syn", + "syn 2.0.71", ] [[package]] @@ -609,7 +618,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn", + "syn 2.0.71", ] [[package]] @@ -645,6 +654,26 @@ dependencies = [ "cc", ] +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "quote" version = "1.0.36" @@ -683,9 +712,9 @@ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" [[package]] name = "redox_syscall" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ "bitflags", ] @@ -781,22 +810,22 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.203" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.203" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.71", ] [[package]] @@ -895,7 +924,18 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn", + "syn 2.0.71", +] + +[[package]] +name = "swc_allocator" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d080e1df9616d0371e154a5ac9640de97f9fa08486e2abf16482d97dc69017" +dependencies = [ + "bumpalo", + "ptr_meta", + "triomphe", ] [[package]] @@ -926,9 +966,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.34.3" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b0d7bcbd9faf61cec1a552cbdaec57faefbb10be7cc5f959613c6f91b5a9254" +checksum = "0df62b0d102ecd81cf9093ef48303289e9a7dae0311f8e64b5345e5fe3e48565" dependencies = [ "ahash", "ast_node", @@ -944,6 +984,7 @@ dependencies = [ "serde", "siphasher", "sourcemap", + "swc_allocator", "swc_atoms", "swc_eq_ignore_macros", "swc_visit", @@ -954,9 +995,9 @@ dependencies = [ [[package]] name = "swc_compiler_base" -version = "0.12.1" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e37fcb78ee79d792ba97b63f58869b9995b7248b46676503e0d0328d19dba2c5" +checksum = "8f50e5f1a62ab7f6cfde871252d7b35c9741de3cca01947d47f3ec4cacf4a144" dependencies = [ "anyhow", "base64", @@ -1001,14 +1042,14 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn", + "syn 2.0.71", ] [[package]] name = "swc_ecma_ast" -version = "0.115.1" +version = "0.117.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7be1306930c235435a892104c00c2b5e16231043c085d5a10bd3e7537b15659b" +checksum = "e38921b6626345e680ded83479980b74f9cebee0748dd9ffb8078375e637e5b0" dependencies = [ "bitflags", "is-macro", @@ -1024,9 +1065,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "0.151.1" +version = "0.154.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5141a8cb4eb69e090e6aea5d49061b46919be5210f3d084f9d9ad63d30f5cff" +checksum = "6ca6056bb7016fdeaee8e3d792e3242a8cfa6f2a81a2010e7f6c5cb961719a17" dependencies = [ "memchr", "num-bigint", @@ -1050,14 +1091,14 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn", + "syn 2.0.71", ] [[package]] name = "swc_ecma_minifier" -version = "0.197.2" +version = "0.200.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9852fc8849b5e0d442bd59b6054f908d03b1af4229a9adcf6aae9db2d366b7" +checksum = "a815397e95ed7b356b8ad22a8c37c234b7d75b629a36ed0d82271c9635642525" dependencies = [ "arrayvec", "indexmap", @@ -1089,9 +1130,9 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.146.8" +version = "0.148.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cb0661386d67b828093fe7e87381c0808298595ba38cd00101973e70ab66dd6" +checksum = "59627c3704453c1bcb283c51ee161a5acf9988c80f80ef0250743fede0406602" dependencies = [ "either", "new_debug_unreachable", @@ -1111,9 +1152,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.140.1" +version = "0.143.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4341c6272c4feaaf22cc8104f65ebcadac8ad2098dfacb6eb62e8c053698a40d" +checksum = "cfe85a837d11d62a9370cf0e06ac5d2afa417b1367c272930df038f29e22ff81" dependencies = [ "better_scoped_tls", "bitflags", @@ -1141,14 +1182,14 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn", + "syn 2.0.71", ] [[package]] name = "swc_ecma_transforms_optimization" -version = "0.201.2" +version = "0.204.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "724a8306e98c1b1f9640fc44c1acc0c971f6daa17651919e06b64f905d4a4564" +checksum = "aabd07c779dbad98f6b20529fd26375c69bcf1bd3c4d9bf8c897deea2b957108" dependencies = [ "dashmap", "indexmap", @@ -1170,9 +1211,9 @@ dependencies = [ [[package]] name = "swc_ecma_usage_analyzer" -version = "0.26.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146562ac3515c8de0fa9d479c43ae673cf9df9ece814f8b8130686080a7251ac" +checksum = "1b3f3791d671c6b054f43e4b372bc77e6d2d559bdafd42dbe43294c7270d2cdb" dependencies = [ "indexmap", "rustc-hash", @@ -1187,9 +1228,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.130.2" +version = "0.133.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612fea1ef92ca438eebdd60c7969e6ee6191eb2e4306018584b9e82390c5e093" +checksum = "51b1346598210788a9dd16580a74cad627726bd166157e3ff4628d8324d125b9" dependencies = [ "indexmap", "num_cpus", @@ -1206,10 +1247,11 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.101.0" +version = "0.103.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce0d997f0c9b4e181225f603d161f6757c2a97022258170982cfe005ec69ec92" +checksum = "e0045d8013d71965b7c52b28e6888cfbf54b0c40af62df8baade792c10b5dfc1" dependencies = [ + "new_debug_unreachable", "num-bigint", "swc_atoms", "swc_common", @@ -1220,20 +1262,20 @@ dependencies = [ [[package]] name = "swc_eq_ignore_macros" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "695a1d8b461033d32429b5befbf0ad4d7a2c4d6ba9cd5ba4e0645c615839e8e4" +checksum = "63db0adcff29d220c3d151c5b25c0eabe7e32dd936212b84cdaa1392e3130497" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.71", ] [[package]] name = "swc_fast_graph" -version = "0.22.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf5c1687e9858fb9de1ffa90a3e21369095406e97ace870a389320d105b0a" +checksum = "d78cdaedc56703bb852a84434aae862ead825fbcfb65e83bc53d50b91d6405b5" dependencies = [ "indexmap", "petgraph", @@ -1243,29 +1285,29 @@ dependencies = [ [[package]] name = "swc_macros_common" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91745f3561057493d2da768437c427c0e979dff7396507ae02f16c981c4a8466" +checksum = "378577b6caa62da3a206e8f91ebba501ed03b3f719c493ccc28fca8b3f1f4b6b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.71", ] [[package]] name = "swc_timer" -version = "0.22.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f2460de9f00f2af53f65b787c771a6ba90c719d600adb3c71cbb87219646ab4" +checksum = "78cf01b1f8a318614f566145b0016b2a0e84ac66d78c1374cdc3438e06c27740" dependencies = [ "tracing", ] [[package]] name = "swc_visit" -version = "0.5.14" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043d11fe683dcb934583ead49405c0896a5af5face522e4682c16971ef7871b9" +checksum = "52e2acde04c355dc8ffd62c56f263ba61a94b5c6d21ce2cdeaf857b5d74451a6" dependencies = [ "either", "swc_visit_macros", @@ -1273,22 +1315,33 @@ dependencies = [ [[package]] name = "swc_visit_macros" -version = "0.5.12" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae9ef18ff8daffa999f729db056d2821cd2f790f3a11e46422d19f46bb193e7" +checksum = "92807d840959f39c60ce8a774a3f83e8193c658068e6d270dbe0a05e40e90b41" dependencies = [ "Inflector", "proc-macro2", "quote", "swc_macros_common", - "syn", + "syn 2.0.71", ] [[package]] name = "syn" -version = "2.0.68" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "901fa70d88b9d6c98022e23b4136f9f3e54e4662c3bc1bd1d84a42a9a0f0c1e9" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" dependencies = [ "proc-macro2", "quote", @@ -1303,9 +1356,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tinyvec" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55115c6fbe2d2bef26eb09ad74bde02d8255476fc0c7b515ef09fbb35742d82" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -1335,7 +1388,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.71", ] [[package]] @@ -1377,9 +1430,9 @@ checksum = "b1b6def86329695390197b82c1e244a54a131ceb66c996f2088a3876e2ae083f" [[package]] name = "unicode-id-start" -version = "1.0.4" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02aebfa694eccbbbffdd92922c7de136b9fe764396d2f10e21bce1681477cfc1" +checksum = "bc3882f69607a2ac8cc4de3ee7993d8f68bb06f2974271195065b3bd07f2edea" [[package]] name = "unicode-ident" @@ -1421,9 +1474,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.9.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de17fd2f7da591098415cff336e12965a28061ddace43b59cb3c430179c9439" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" [[package]] name = "version_check" @@ -1458,7 +1511,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.71", "wasm-bindgen-shared", ] @@ -1480,7 +1533,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.71", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -1617,5 +1670,5 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.71", ] diff --git a/rust/bindings_napi/Cargo.toml b/rust/bindings_napi/Cargo.toml index 99ac93d37..e6811f356 100644 --- a/rust/bindings_napi/Cargo.toml +++ b/rust/bindings_napi/Cargo.toml @@ -11,7 +11,7 @@ crate-type = ["cdylib"] [dependencies] # Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix napi = { version = "2.16.8", default-features = false, features = ["napi4"] } -napi-derive = "2.16.8" +napi-derive = "2.16.9" parse_ast = { path = "../parse_ast" } xxhash = { path = "../xxhash" } diff --git a/rust/parse_ast/Cargo.toml b/rust/parse_ast/Cargo.toml index 8fa3f8735..ec2830714 100644 --- a/rust/parse_ast/Cargo.toml +++ b/rust/parse_ast/Cargo.toml @@ -8,8 +8,8 @@ edition = "2021" [dependencies] anyhow = "1.0.86" swc_atoms = "0.6.7" -swc_compiler_base = "0.12.1" -swc_common = { version = "0.34.3", features = ["ahash", "parking_lot"] } -swc_ecma_ast = "0.115.1" -swc_ecma_parser = "0.146.8" +swc_compiler_base = "0.15.0" +swc_common = { version = "0.36.1", features = ["ahash", "parking_lot"] } +swc_ecma_ast = "0.117.1" +swc_ecma_parser = "0.148.0" parking_lot = "0.12.3" diff --git a/rust/parse_ast/src/ast_nodes/decorator.rs b/rust/parse_ast/src/ast_nodes/decorator.rs new file mode 100644 index 000000000..128fb730d --- /dev/null +++ b/rust/parse_ast/src/ast_nodes/decorator.rs @@ -0,0 +1,9 @@ +use crate::convert_ast::converter::AstConverter; +use crate::store_decorator; +use swc_ecma_ast::Decorator; + +impl<'a> AstConverter<'a> { + pub fn store_decorator(&mut self, decorator: &Decorator) { + store_decorator!(self, span => decorator.span, expression=>[decorator.expr, convert_expression]); + } +} diff --git a/rust/parse_ast/src/ast_nodes/identifier.rs b/rust/parse_ast/src/ast_nodes/identifier.rs index 20cb81896..a92658dc1 100644 --- a/rust/parse_ast/src/ast_nodes/identifier.rs +++ b/rust/parse_ast/src/ast_nodes/identifier.rs @@ -1,4 +1,4 @@ -use swc_ecma_ast::{BindingIdent, Ident}; +use swc_ecma_ast::{BindingIdent, Ident, IdentName}; use crate::convert_ast::converter::ast_constants::{ IDENTIFIER_NAME_OFFSET, IDENTIFIER_RESERVED_BYTES, TYPE_IDENTIFIER, @@ -26,4 +26,11 @@ impl<'a> AstConverter<'a> { &identifier.sym, ); } + pub fn convert_identifier_name(&mut self, identifier: &IdentName) { + self.store_identifier( + identifier.span.lo.0 - 1, + identifier.span.hi.0 - 1, + &identifier.sym, + ); + } } diff --git a/rust/parse_ast/src/ast_nodes/member_expression.rs b/rust/parse_ast/src/ast_nodes/member_expression.rs index 7c660bf46..8f9ed9124 100644 --- a/rust/parse_ast/src/ast_nodes/member_expression.rs +++ b/rust/parse_ast/src/ast_nodes/member_expression.rs @@ -1,6 +1,6 @@ use swc_common::Span; use swc_ecma_ast::{ - ComputedPropName, Expr, Ident, MemberExpr, MemberProp, PrivateName, Super, SuperProp, + ComputedPropName, Expr, IdentName, MemberExpr, MemberProp, PrivateName, Super, SuperProp, SuperPropExpr, }; @@ -53,7 +53,7 @@ impl<'a> AstConverter<'a> { // property self.update_reference_position(end_position + MEMBER_EXPRESSION_PROPERTY_OFFSET); match property { - MemberOrSuperProp::Identifier(ident) => self.convert_identifier(ident), + MemberOrSuperProp::Identifier(ident) => self.convert_identifier_name(ident), MemberOrSuperProp::Computed(computed) => { self.convert_expression(&computed.expr); } @@ -99,7 +99,7 @@ impl<'a> AstConverter<'a> { } pub enum MemberOrSuperProp<'a> { - Identifier(&'a Ident), + Identifier(&'a IdentName), PrivateName(&'a PrivateName), Computed(&'a ComputedPropName), } diff --git a/rust/parse_ast/src/ast_nodes/method_definition.rs b/rust/parse_ast/src/ast_nodes/method_definition.rs index 0872b9146..e7fd91e2f 100644 --- a/rust/parse_ast/src/ast_nodes/method_definition.rs +++ b/rust/parse_ast/src/ast_nodes/method_definition.rs @@ -6,8 +6,9 @@ use swc_ecma_ast::{ use crate::convert_ast::converter::analyze_code::find_first_occurrence_outside_comment; use crate::convert_ast::converter::ast_constants::{ - METHOD_DEFINITION_KEY_OFFSET, METHOD_DEFINITION_KIND_OFFSET, METHOD_DEFINITION_RESERVED_BYTES, - METHOD_DEFINITION_VALUE_OFFSET, TYPE_FUNCTION_EXPRESSION, TYPE_METHOD_DEFINITION, + METHOD_DEFINITION_DECORATORS_OFFSET, METHOD_DEFINITION_KEY_OFFSET, METHOD_DEFINITION_KIND_OFFSET, + METHOD_DEFINITION_RESERVED_BYTES, METHOD_DEFINITION_VALUE_OFFSET, TYPE_FUNCTION_EXPRESSION, + TYPE_METHOD_DEFINITION, }; use crate::convert_ast::converter::string_constants::{ STRING_CONSTRUCTOR, STRING_GET, STRING_METHOD, STRING_SET, @@ -33,6 +34,15 @@ impl<'a> AstConverter<'a> { ); // flags store_method_definition_flags!(self, end_position, static => is_static, computed => is_computed); + // decorators + self.convert_item_list( + &function.decorators, + end_position + METHOD_DEFINITION_DECORATORS_OFFSET, + |ast_convertor, decorator| { + ast_convertor.store_decorator(decorator); + true + }, + ); // kind let kind_position = end_position + METHOD_DEFINITION_KIND_OFFSET; self.buffer[kind_position..kind_position + 4].copy_from_slice(match kind { @@ -49,7 +59,7 @@ impl<'a> AstConverter<'a> { } PropOrPrivateName::PrivateName(private_name) => { self.store_private_identifier(private_name); - private_name.id.span.hi.0 - 1 + private_name.span.hi.0 - 1 } }; // value diff --git a/rust/parse_ast/src/ast_nodes/mod.rs b/rust/parse_ast/src/ast_nodes/mod.rs index 95a81a6c6..2284cc3e0 100644 --- a/rust/parse_ast/src/ast_nodes/mod.rs +++ b/rust/parse_ast/src/ast_nodes/mod.rs @@ -16,6 +16,7 @@ pub mod class_expression; pub mod conditional_expression; pub mod continue_statement; pub mod debugger_statement; +pub mod decorator; pub mod directive; pub mod do_while_statement; pub mod empty_statement; diff --git a/rust/parse_ast/src/ast_nodes/private_identifier.rs b/rust/parse_ast/src/ast_nodes/private_identifier.rs index 0af703eb6..d1797c9a7 100644 --- a/rust/parse_ast/src/ast_nodes/private_identifier.rs +++ b/rust/parse_ast/src/ast_nodes/private_identifier.rs @@ -8,7 +8,7 @@ impl<'a> AstConverter<'a> { store_private_identifier!( self, span => &private_name.span, - name => &private_name.id.sym + name => &private_name.name ); } } diff --git a/rust/parse_ast/src/ast_nodes/property_definition.rs b/rust/parse_ast/src/ast_nodes/property_definition.rs index e98060cdf..24d8c89d3 100644 --- a/rust/parse_ast/src/ast_nodes/property_definition.rs +++ b/rust/parse_ast/src/ast_nodes/property_definition.rs @@ -1,10 +1,10 @@ use swc_common::Span; -use swc_ecma_ast::{ClassProp, Expr, PrivateProp, PropName}; +use swc_ecma_ast::{ClassProp, Decorator, Expr, PrivateProp, PropName}; use crate::ast_nodes::method_definition::PropOrPrivateName; use crate::convert_ast::converter::ast_constants::{ - PROPERTY_DEFINITION_KEY_OFFSET, PROPERTY_DEFINITION_RESERVED_BYTES, - PROPERTY_DEFINITION_VALUE_OFFSET, TYPE_PROPERTY_DEFINITION, + PROPERTY_DEFINITION_DECORATORS_OFFSET, PROPERTY_DEFINITION_KEY_OFFSET, + PROPERTY_DEFINITION_RESERVED_BYTES, PROPERTY_DEFINITION_VALUE_OFFSET, TYPE_PROPERTY_DEFINITION, }; use crate::convert_ast::converter::AstConverter; use crate::store_property_definition_flags; @@ -17,6 +17,7 @@ impl<'a> AstConverter<'a> { is_static: bool, key: PropOrPrivateName, value: &Option<&Expr>, + decorators: &[Decorator], ) { let end_position = self.add_type_and_start( &TYPE_PROPERTY_DEFINITION, @@ -24,6 +25,17 @@ impl<'a> AstConverter<'a> { PROPERTY_DEFINITION_RESERVED_BYTES, false, ); + // flags + store_property_definition_flags!(self, end_position, static => is_static, computed => is_computed); + // decorators + self.convert_item_list( + decorators, + end_position + PROPERTY_DEFINITION_DECORATORS_OFFSET, + |ast_converter, decorator| { + ast_converter.store_decorator(decorator); + true + }, + ); // key self.update_reference_position(end_position + PROPERTY_DEFINITION_KEY_OFFSET); match key { @@ -32,8 +44,6 @@ impl<'a> AstConverter<'a> { } PropOrPrivateName::PrivateName(private_name) => self.store_private_identifier(private_name), } - // flags - store_property_definition_flags!(self, end_position, static => is_static, computed => is_computed); // value if let Some(expression) = value { self.update_reference_position(end_position + PROPERTY_DEFINITION_VALUE_OFFSET); @@ -50,6 +60,7 @@ impl<'a> AstConverter<'a> { class_property.is_static, PropOrPrivateName::PropName(&class_property.key), &class_property.value.as_deref(), + &class_property.decorators, ); } @@ -60,6 +71,7 @@ impl<'a> AstConverter<'a> { private_property.is_static, PropOrPrivateName::PrivateName(&private_property.key), &private_property.value.as_deref(), + &private_property.decorators, ); } } diff --git a/rust/parse_ast/src/ast_nodes/shared/class_node.rs b/rust/parse_ast/src/ast_nodes/shared/class_node.rs index f32a039ec..67d6fa32b 100644 --- a/rust/parse_ast/src/ast_nodes/shared/class_node.rs +++ b/rust/parse_ast/src/ast_nodes/shared/class_node.rs @@ -3,8 +3,8 @@ use swc_ecma_ast::{Class, Ident}; use crate::convert_ast::converter::analyze_code::find_first_occurrence_outside_comment; use crate::convert_ast::converter::ast_constants::{ - CLASS_DECLARATION_BODY_OFFSET, CLASS_DECLARATION_ID_OFFSET, CLASS_DECLARATION_RESERVED_BYTES, - CLASS_DECLARATION_SUPER_CLASS_OFFSET, + CLASS_DECLARATION_BODY_OFFSET, CLASS_DECLARATION_DECORATORS_OFFSET, CLASS_DECLARATION_ID_OFFSET, + CLASS_DECLARATION_RESERVED_BYTES, CLASS_DECLARATION_SUPER_CLASS_OFFSET, }; use crate::convert_ast::converter::AstConverter; @@ -22,6 +22,18 @@ impl<'a> AstConverter<'a> { false, ); let mut body_start_search = class.span.lo.0 - 1; + // decorators + self.convert_item_list( + &class.decorators, + end_position + CLASS_DECLARATION_DECORATORS_OFFSET, + |ast_converter, decorator| { + ast_converter.store_decorator(decorator); + true + }, + ); + if !class.decorators.is_empty() { + body_start_search = class.decorators.last().unwrap().span.hi.0 - 1; + } // id if let Some(identifier) = identifier { self.update_reference_position(end_position + CLASS_DECLARATION_ID_OFFSET); diff --git a/rust/parse_ast/src/convert_ast/converter.rs b/rust/parse_ast/src/convert_ast/converter.rs index 64a5df6df..b5d55d155 100644 --- a/rust/parse_ast/src/convert_ast/converter.rs +++ b/rust/parse_ast/src/convert_ast/converter.rs @@ -595,8 +595,8 @@ impl<'a> AstConverter<'a> { PropName::Computed(computed_property_name) => { self.convert_expression(computed_property_name.expr.as_ref()) } - PropName::Ident(ident) => { - self.convert_identifier(ident); + PropName::Ident(identifier_name) => { + self.convert_identifier_name(identifier_name); } PropName::Str(string) => { self.store_literal_string(string); diff --git a/rust/parse_ast/src/convert_ast/converter/ast_constants.rs b/rust/parse_ast/src/convert_ast/converter/ast_constants.rs index 2048f4721..72f6335f8 100644 --- a/rust/parse_ast/src/convert_ast/converter/ast_constants.rs +++ b/rust/parse_ast/src/convert_ast/converter/ast_constants.rs @@ -15,29 +15,29 @@ pub const TYPE_CHAIN_EXPRESSION: [u8; 4] = 13u32.to_ne_bytes(); pub const TYPE_CLASS_BODY: [u8; 4] = 14u32.to_ne_bytes(); pub const TYPE_CLASS_DECLARATION: [u8; 4] = 15u32.to_ne_bytes(); pub const TYPE_CLASS_EXPRESSION: [u8; 4] = 16u32.to_ne_bytes(); -pub const TYPE_EXPORT_ALL_DECLARATION: [u8; 4] = 23u32.to_ne_bytes(); -pub const TYPE_EXPORT_DEFAULT_DECLARATION: [u8; 4] = 24u32.to_ne_bytes(); -pub const TYPE_EXPORT_NAMED_DECLARATION: [u8; 4] = 25u32.to_ne_bytes(); -pub const TYPE_FUNCTION_DECLARATION: [u8; 4] = 31u32.to_ne_bytes(); -pub const TYPE_FUNCTION_EXPRESSION: [u8; 4] = 32u32.to_ne_bytes(); -pub const TYPE_IDENTIFIER: [u8; 4] = 33u32.to_ne_bytes(); -pub const TYPE_IMPORT_ATTRIBUTE: [u8; 4] = 35u32.to_ne_bytes(); -pub const TYPE_IMPORT_DECLARATION: [u8; 4] = 36u32.to_ne_bytes(); -pub const TYPE_IMPORT_EXPRESSION: [u8; 4] = 38u32.to_ne_bytes(); -pub const TYPE_LOGICAL_EXPRESSION: [u8; 4] = 48u32.to_ne_bytes(); -pub const TYPE_MEMBER_EXPRESSION: [u8; 4] = 49u32.to_ne_bytes(); -pub const TYPE_META_PROPERTY: [u8; 4] = 50u32.to_ne_bytes(); -pub const TYPE_METHOD_DEFINITION: [u8; 4] = 51u32.to_ne_bytes(); -pub const TYPE_NEW_EXPRESSION: [u8; 4] = 52u32.to_ne_bytes(); -pub const TYPE_PROGRAM: [u8; 4] = 56u32.to_ne_bytes(); -pub const TYPE_PROPERTY: [u8; 4] = 57u32.to_ne_bytes(); -pub const TYPE_PROPERTY_DEFINITION: [u8; 4] = 58u32.to_ne_bytes(); -pub const TYPE_REST_ELEMENT: [u8; 4] = 59u32.to_ne_bytes(); -pub const TYPE_SPREAD_ELEMENT: [u8; 4] = 62u32.to_ne_bytes(); -pub const TYPE_TEMPLATE_LITERAL: [u8; 4] = 69u32.to_ne_bytes(); -pub const TYPE_TRY_STATEMENT: [u8; 4] = 72u32.to_ne_bytes(); -pub const TYPE_VARIABLE_DECLARATION: [u8; 4] = 75u32.to_ne_bytes(); -pub const TYPE_VARIABLE_DECLARATOR: [u8; 4] = 76u32.to_ne_bytes(); +pub const TYPE_EXPORT_ALL_DECLARATION: [u8; 4] = 24u32.to_ne_bytes(); +pub const TYPE_EXPORT_DEFAULT_DECLARATION: [u8; 4] = 25u32.to_ne_bytes(); +pub const TYPE_EXPORT_NAMED_DECLARATION: [u8; 4] = 26u32.to_ne_bytes(); +pub const TYPE_FUNCTION_DECLARATION: [u8; 4] = 32u32.to_ne_bytes(); +pub const TYPE_FUNCTION_EXPRESSION: [u8; 4] = 33u32.to_ne_bytes(); +pub const TYPE_IDENTIFIER: [u8; 4] = 34u32.to_ne_bytes(); +pub const TYPE_IMPORT_ATTRIBUTE: [u8; 4] = 36u32.to_ne_bytes(); +pub const TYPE_IMPORT_DECLARATION: [u8; 4] = 37u32.to_ne_bytes(); +pub const TYPE_IMPORT_EXPRESSION: [u8; 4] = 39u32.to_ne_bytes(); +pub const TYPE_LOGICAL_EXPRESSION: [u8; 4] = 49u32.to_ne_bytes(); +pub const TYPE_MEMBER_EXPRESSION: [u8; 4] = 50u32.to_ne_bytes(); +pub const TYPE_META_PROPERTY: [u8; 4] = 51u32.to_ne_bytes(); +pub const TYPE_METHOD_DEFINITION: [u8; 4] = 52u32.to_ne_bytes(); +pub const TYPE_NEW_EXPRESSION: [u8; 4] = 53u32.to_ne_bytes(); +pub const TYPE_PROGRAM: [u8; 4] = 57u32.to_ne_bytes(); +pub const TYPE_PROPERTY: [u8; 4] = 58u32.to_ne_bytes(); +pub const TYPE_PROPERTY_DEFINITION: [u8; 4] = 59u32.to_ne_bytes(); +pub const TYPE_REST_ELEMENT: [u8; 4] = 60u32.to_ne_bytes(); +pub const TYPE_SPREAD_ELEMENT: [u8; 4] = 63u32.to_ne_bytes(); +pub const TYPE_TEMPLATE_LITERAL: [u8; 4] = 70u32.to_ne_bytes(); +pub const TYPE_TRY_STATEMENT: [u8; 4] = 73u32.to_ne_bytes(); +pub const TYPE_VARIABLE_DECLARATION: [u8; 4] = 76u32.to_ne_bytes(); +pub const TYPE_VARIABLE_DECLARATOR: [u8; 4] = 77u32.to_ne_bytes(); pub const PANIC_ERROR_RESERVED_BYTES: usize = 8; pub const PANIC_ERROR_MESSAGE_OFFSET: usize = 4; @@ -83,10 +83,11 @@ pub const CHAIN_EXPRESSION_EXPRESSION_OFFSET: usize = 4; pub const CLASS_BODY_RESERVED_BYTES: usize = 8; pub const CLASS_BODY_BODY_OFFSET: usize = 4; -pub const CLASS_DECLARATION_RESERVED_BYTES: usize = 16; -pub const CLASS_DECLARATION_ID_OFFSET: usize = 4; -pub const CLASS_DECLARATION_SUPER_CLASS_OFFSET: usize = 8; -pub const CLASS_DECLARATION_BODY_OFFSET: usize = 12; +pub const CLASS_DECLARATION_RESERVED_BYTES: usize = 20; +pub const CLASS_DECLARATION_DECORATORS_OFFSET: usize = 4; +pub const CLASS_DECLARATION_ID_OFFSET: usize = 8; +pub const CLASS_DECLARATION_SUPER_CLASS_OFFSET: usize = 12; +pub const CLASS_DECLARATION_BODY_OFFSET: usize = 16; pub const EXPORT_ALL_DECLARATION_RESERVED_BYTES: usize = 16; pub const EXPORT_ALL_DECLARATION_EXPORTED_OFFSET: usize = 4; @@ -132,10 +133,11 @@ pub const META_PROPERTY_RESERVED_BYTES: usize = 12; pub const META_PROPERTY_META_OFFSET: usize = 4; pub const META_PROPERTY_PROPERTY_OFFSET: usize = 8; -pub const METHOD_DEFINITION_RESERVED_BYTES: usize = 20; -pub const METHOD_DEFINITION_KEY_OFFSET: usize = 8; -pub const METHOD_DEFINITION_VALUE_OFFSET: usize = 12; -pub const METHOD_DEFINITION_KIND_OFFSET: usize = 16; +pub const METHOD_DEFINITION_RESERVED_BYTES: usize = 24; +pub const METHOD_DEFINITION_DECORATORS_OFFSET: usize = 8; +pub const METHOD_DEFINITION_KEY_OFFSET: usize = 12; +pub const METHOD_DEFINITION_VALUE_OFFSET: usize = 16; +pub const METHOD_DEFINITION_KIND_OFFSET: usize = 20; pub const NEW_EXPRESSION_RESERVED_BYTES: usize = 16; pub const NEW_EXPRESSION_ANNOTATIONS_OFFSET: usize = 4; @@ -151,9 +153,10 @@ pub const PROPERTY_KEY_OFFSET: usize = 8; pub const PROPERTY_VALUE_OFFSET: usize = 12; pub const PROPERTY_KIND_OFFSET: usize = 16; -pub const PROPERTY_DEFINITION_RESERVED_BYTES: usize = 16; -pub const PROPERTY_DEFINITION_KEY_OFFSET: usize = 8; -pub const PROPERTY_DEFINITION_VALUE_OFFSET: usize = 12; +pub const PROPERTY_DEFINITION_RESERVED_BYTES: usize = 20; +pub const PROPERTY_DEFINITION_DECORATORS_OFFSET: usize = 8; +pub const PROPERTY_DEFINITION_KEY_OFFSET: usize = 12; +pub const PROPERTY_DEFINITION_VALUE_OFFSET: usize = 16; pub const REST_ELEMENT_RESERVED_BYTES: usize = 8; pub const REST_ELEMENT_ARGUMENT_OFFSET: usize = 4; diff --git a/rust/parse_ast/src/convert_ast/converter/ast_macros.rs b/rust/parse_ast/src/convert_ast/converter/ast_macros.rs index dee54ed74..9270789b4 100644 --- a/rust/parse_ast/src/convert_ast/converter/ast_macros.rs +++ b/rust/parse_ast/src/convert_ast/converter/ast_macros.rs @@ -92,11 +92,24 @@ macro_rules! store_debugger_statement { }; } +#[macro_export] +macro_rules! store_decorator { + ($self:expr, span => $span:expr, expression => [$expression_value:expr, $expression_converter:ident]) => { + let _: &mut AstConverter = $self; + let end_position = $self.add_type_and_start(&20u32.to_ne_bytes(), &$span, 8, false); + // expression + $self.update_reference_position(end_position + 4); + $self.$expression_converter(&$expression_value); + // end + $self.add_end(end_position, &$span); + }; +} + #[macro_export] macro_rules! store_directive { ($self:expr, span => $span:expr, directive => $directive_value:expr, expression => [$expression_value:expr, $expression_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&20u32.to_ne_bytes(), &$span, 12, false); + let end_position = $self.add_type_and_start(&21u32.to_ne_bytes(), &$span, 12, false); // directive $self.convert_string($directive_value, end_position + 4); // expression @@ -111,7 +124,7 @@ macro_rules! store_directive { macro_rules! store_do_while_statement { ($self:expr, span => $span:expr, body => [$body_value:expr, $body_converter:ident], test => [$test_value:expr, $test_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&21u32.to_ne_bytes(), &$span, 12, false); + let end_position = $self.add_type_and_start(&22u32.to_ne_bytes(), &$span, 12, false); // body $self.update_reference_position(end_position + 4); $self.$body_converter(&$body_value); @@ -127,7 +140,7 @@ macro_rules! store_do_while_statement { macro_rules! store_empty_statement { ($self:expr, span => $span:expr) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&22u32.to_ne_bytes(), &$span, 4, false); + let end_position = $self.add_type_and_start(&23u32.to_ne_bytes(), &$span, 4, false); // end $self.add_end(end_position, &$span); }; @@ -137,7 +150,7 @@ macro_rules! store_empty_statement { macro_rules! store_export_specifier { ($self:expr, span => $span:expr, local => [$local_value:expr, $local_converter:ident], exported => [$exported_value:expr, $exported_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&26u32.to_ne_bytes(), &$span, 12, false); + let end_position = $self.add_type_and_start(&27u32.to_ne_bytes(), &$span, 12, false); // local $self.update_reference_position(end_position + 4); $self.$local_converter(&$local_value); @@ -155,7 +168,7 @@ macro_rules! store_export_specifier { macro_rules! store_expression_statement { ($self:expr, span => $span:expr, expression => [$expression_value:expr, $expression_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&27u32.to_ne_bytes(), &$span, 8, false); + let end_position = $self.add_type_and_start(&28u32.to_ne_bytes(), &$span, 8, false); // expression $self.update_reference_position(end_position + 4); $self.$expression_converter(&$expression_value); @@ -168,7 +181,7 @@ macro_rules! store_expression_statement { macro_rules! store_for_in_statement { ($self:expr, span => $span:expr, left => [$left_value:expr, $left_converter:ident], right => [$right_value:expr, $right_converter:ident], body => [$body_value:expr, $body_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&28u32.to_ne_bytes(), &$span, 16, false); + let end_position = $self.add_type_and_start(&29u32.to_ne_bytes(), &$span, 16, false); // left $self.update_reference_position(end_position + 4); $self.$left_converter(&$left_value); @@ -188,7 +201,7 @@ macro_rules! store_for_of_statement { ($self:expr, span => $span:expr, await => $await_value:expr, left => [$left_value:expr, $left_converter:ident], right => [$right_value:expr, $right_converter:ident], body => [$body_value:expr, $body_converter:ident]) => { let _: &mut AstConverter = $self; let end_position = $self.add_type_and_start( - &29u32.to_ne_bytes(), + &30u32.to_ne_bytes(), &$span, 20, false, @@ -213,7 +226,7 @@ macro_rules! store_for_of_statement { macro_rules! store_for_statement { ($self:expr, span => $span:expr, init => [$init_value:expr, $init_converter:ident], test => [$test_value:expr, $test_converter:ident], update => [$update_value:expr, $update_converter:ident], body => [$body_value:expr, $body_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&30u32.to_ne_bytes(), &$span, 20, false); + let end_position = $self.add_type_and_start(&31u32.to_ne_bytes(), &$span, 20, false); // init if let Some(value) = $init_value.as_ref() { $self.update_reference_position(end_position + 4); @@ -241,7 +254,7 @@ macro_rules! store_for_statement { macro_rules! store_if_statement { ($self:expr, span => $span:expr, test => [$test_value:expr, $test_converter:ident], consequent => [$consequent_value:expr, $consequent_converter:ident], alternate => [$alternate_value:expr, $alternate_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&34u32.to_ne_bytes(), &$span, 16, false); + let end_position = $self.add_type_and_start(&35u32.to_ne_bytes(), &$span, 16, false); // test $self.update_reference_position(end_position + 4); $self.$test_converter(&$test_value); @@ -262,7 +275,7 @@ macro_rules! store_if_statement { macro_rules! store_import_default_specifier { ($self:expr, span => $span:expr, local => [$local_value:expr, $local_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&37u32.to_ne_bytes(), &$span, 8, false); + let end_position = $self.add_type_and_start(&38u32.to_ne_bytes(), &$span, 8, false); // local $self.update_reference_position(end_position + 4); $self.$local_converter(&$local_value); @@ -275,7 +288,7 @@ macro_rules! store_import_default_specifier { macro_rules! store_import_namespace_specifier { ($self:expr, span => $span:expr, local => [$local_value:expr, $local_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&39u32.to_ne_bytes(), &$span, 8, false); + let end_position = $self.add_type_and_start(&40u32.to_ne_bytes(), &$span, 8, false); // local $self.update_reference_position(end_position + 4); $self.$local_converter(&$local_value); @@ -288,7 +301,7 @@ macro_rules! store_import_namespace_specifier { macro_rules! store_import_specifier { ($self:expr, span => $span:expr, imported => [$imported_value:expr, $imported_converter:ident], local => [$local_value:expr, $local_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&40u32.to_ne_bytes(), &$span, 12, false); + let end_position = $self.add_type_and_start(&41u32.to_ne_bytes(), &$span, 12, false); // imported if let Some(value) = $imported_value.as_ref() { $self.update_reference_position(end_position + 4); @@ -306,7 +319,7 @@ macro_rules! store_import_specifier { macro_rules! store_labeled_statement { ($self:expr, span => $span:expr, label => [$label_value:expr, $label_converter:ident], body => [$body_value:expr, $body_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&41u32.to_ne_bytes(), &$span, 12, false); + let end_position = $self.add_type_and_start(&42u32.to_ne_bytes(), &$span, 12, false); // label $self.update_reference_position(end_position + 4); $self.$label_converter(&$label_value); @@ -322,7 +335,7 @@ macro_rules! store_labeled_statement { macro_rules! store_literal_big_int { ($self:expr, span => $span:expr, bigint => $bigint_value:expr, raw => $raw_value:expr) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&42u32.to_ne_bytes(), &$span, 12, false); + let end_position = $self.add_type_and_start(&43u32.to_ne_bytes(), &$span, 12, false); // bigint $self.convert_string($bigint_value, end_position + 4); // raw @@ -337,7 +350,7 @@ macro_rules! store_literal_boolean { ($self:expr, span => $span:expr, value => $value_value:expr) => { let _: &mut AstConverter = $self; let end_position = $self.add_type_and_start( - &43u32.to_ne_bytes(), + &44u32.to_ne_bytes(), &$span, 8, false, @@ -353,7 +366,7 @@ macro_rules! store_literal_boolean { macro_rules! store_literal_null { ($self:expr, span => $span:expr) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&44u32.to_ne_bytes(), &$span, 4, false); + let end_position = $self.add_type_and_start(&45u32.to_ne_bytes(), &$span, 4, false); // end $self.add_end(end_position, &$span); }; @@ -363,7 +376,7 @@ macro_rules! store_literal_null { macro_rules! store_literal_number { ($self:expr, span => $span:expr, raw => $raw_value:expr, value => $value_value:expr) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&45u32.to_ne_bytes(), &$span, 16, false); + let end_position = $self.add_type_and_start(&46u32.to_ne_bytes(), &$span, 16, false); // raw if let Some(value) = $raw_value.as_ref() { $self.convert_string(value, end_position + 4); @@ -380,7 +393,7 @@ macro_rules! store_literal_number { macro_rules! store_literal_reg_exp { ($self:expr, span => $span:expr, flags => $flags_value:expr, pattern => $pattern_value:expr) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&46u32.to_ne_bytes(), &$span, 12, false); + let end_position = $self.add_type_and_start(&47u32.to_ne_bytes(), &$span, 12, false); // flags $self.convert_string($flags_value, end_position + 4); // pattern @@ -394,7 +407,7 @@ macro_rules! store_literal_reg_exp { macro_rules! store_literal_string { ($self:expr, span => $span:expr, value => $value_value:expr, raw => $raw_value:expr) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&47u32.to_ne_bytes(), &$span, 12, false); + let end_position = $self.add_type_and_start(&48u32.to_ne_bytes(), &$span, 12, false); // value $self.convert_string($value_value, end_position + 4); // raw @@ -410,7 +423,7 @@ macro_rules! store_literal_string { macro_rules! store_object_expression { ($self:expr, span => $span:expr, properties => [$properties_value:expr, $properties_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&53u32.to_ne_bytes(), &$span, 8, false); + let end_position = $self.add_type_and_start(&54u32.to_ne_bytes(), &$span, 8, false); // properties $self.convert_item_list( &$properties_value, @@ -429,7 +442,7 @@ macro_rules! store_object_expression { macro_rules! store_object_pattern { ($self:expr, span => $span:expr, properties => [$properties_value:expr, $properties_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&54u32.to_ne_bytes(), &$span, 8, false); + let end_position = $self.add_type_and_start(&55u32.to_ne_bytes(), &$span, 8, false); // properties $self.convert_item_list( &$properties_value, @@ -448,7 +461,7 @@ macro_rules! store_object_pattern { macro_rules! store_private_identifier { ($self:expr, span => $span:expr, name => $name_value:expr) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&55u32.to_ne_bytes(), &$span, 8, false); + let end_position = $self.add_type_and_start(&56u32.to_ne_bytes(), &$span, 8, false); // name $self.convert_string($name_value, end_position + 4); // end @@ -460,7 +473,7 @@ macro_rules! store_private_identifier { macro_rules! store_return_statement { ($self:expr, span => $span:expr, argument => [$argument_value:expr, $argument_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&60u32.to_ne_bytes(), &$span, 8, false); + let end_position = $self.add_type_and_start(&61u32.to_ne_bytes(), &$span, 8, false); // argument if let Some(value) = $argument_value.as_ref() { $self.update_reference_position(end_position + 4); @@ -475,7 +488,7 @@ macro_rules! store_return_statement { macro_rules! store_sequence_expression { ($self:expr, span => $span:expr, expressions => [$expressions_value:expr, $expressions_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&61u32.to_ne_bytes(), &$span, 8, false); + let end_position = $self.add_type_and_start(&62u32.to_ne_bytes(), &$span, 8, false); // expressions $self.convert_item_list( &$expressions_value, @@ -494,7 +507,7 @@ macro_rules! store_sequence_expression { macro_rules! store_static_block { ($self:expr, span => $span:expr, body => [$body_value:expr, $body_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&63u32.to_ne_bytes(), &$span, 8, false); + let end_position = $self.add_type_and_start(&64u32.to_ne_bytes(), &$span, 8, false); // body $self.convert_item_list(&$body_value, end_position + 4, |ast_converter, node| { ast_converter.$body_converter(node); @@ -509,7 +522,7 @@ macro_rules! store_static_block { macro_rules! store_super_element { ($self:expr, span => $span:expr) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&64u32.to_ne_bytes(), &$span, 4, false); + let end_position = $self.add_type_and_start(&65u32.to_ne_bytes(), &$span, 4, false); // end $self.add_end(end_position, &$span); }; @@ -519,7 +532,7 @@ macro_rules! store_super_element { macro_rules! store_switch_case { ($self:expr, span => $span:expr, test => [$test_value:expr, $test_converter:ident], consequent => [$consequent_value:expr, $consequent_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&65u32.to_ne_bytes(), &$span, 12, false); + let end_position = $self.add_type_and_start(&66u32.to_ne_bytes(), &$span, 12, false); // test if let Some(value) = $test_value.as_ref() { $self.update_reference_position(end_position + 4); @@ -543,7 +556,7 @@ macro_rules! store_switch_case { macro_rules! store_switch_statement { ($self:expr, span => $span:expr, discriminant => [$discriminant_value:expr, $discriminant_converter:ident], cases => [$cases_value:expr, $cases_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&66u32.to_ne_bytes(), &$span, 12, false); + let end_position = $self.add_type_and_start(&67u32.to_ne_bytes(), &$span, 12, false); // discriminant $self.update_reference_position(end_position + 4); $self.$discriminant_converter(&$discriminant_value); @@ -561,7 +574,7 @@ macro_rules! store_switch_statement { macro_rules! store_tagged_template_expression { ($self:expr, span => $span:expr, tag => [$tag_value:expr, $tag_converter:ident], quasi => [$quasi_value:expr, $quasi_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&67u32.to_ne_bytes(), &$span, 12, false); + let end_position = $self.add_type_and_start(&68u32.to_ne_bytes(), &$span, 12, false); // tag $self.update_reference_position(end_position + 4); $self.$tag_converter(&$tag_value); @@ -578,7 +591,7 @@ macro_rules! store_template_element { ($self:expr, span => $span:expr, tail => $tail_value:expr, cooked => $cooked_value:expr, raw => $raw_value:expr) => { let _: &mut AstConverter = $self; let end_position = $self.add_type_and_start( - &68u32.to_ne_bytes(), + &69u32.to_ne_bytes(), &$span, 16, false, @@ -600,7 +613,7 @@ macro_rules! store_template_element { macro_rules! store_this_expression { ($self:expr, span => $span:expr) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&70u32.to_ne_bytes(), &$span, 4, false); + let end_position = $self.add_type_and_start(&71u32.to_ne_bytes(), &$span, 4, false); // end $self.add_end(end_position, &$span); }; @@ -610,7 +623,7 @@ macro_rules! store_this_expression { macro_rules! store_throw_statement { ($self:expr, span => $span:expr, argument => [$argument_value:expr, $argument_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&71u32.to_ne_bytes(), &$span, 8, false); + let end_position = $self.add_type_and_start(&72u32.to_ne_bytes(), &$span, 8, false); // argument $self.update_reference_position(end_position + 4); $self.$argument_converter(&$argument_value); @@ -623,7 +636,7 @@ macro_rules! store_throw_statement { macro_rules! store_unary_expression { ($self:expr, span => $span:expr, operator => $operator_value:expr, argument => [$argument_value:expr, $argument_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&73u32.to_ne_bytes(), &$span, 12, false); + let end_position = $self.add_type_and_start(&74u32.to_ne_bytes(), &$span, 12, false); // operator let operator_position = end_position + 4; $self.buffer[operator_position..operator_position + 4].copy_from_slice($operator_value); @@ -640,7 +653,7 @@ macro_rules! store_update_expression { ($self:expr, span => $span:expr, prefix => $prefix_value:expr, operator => $operator_value:expr, argument => [$argument_value:expr, $argument_converter:ident]) => { let _: &mut AstConverter = $self; let end_position = $self.add_type_and_start( - &74u32.to_ne_bytes(), + &75u32.to_ne_bytes(), &$span, 16, false, @@ -662,7 +675,7 @@ macro_rules! store_update_expression { macro_rules! store_while_statement { ($self:expr, span => $span:expr, test => [$test_value:expr, $test_converter:ident], body => [$body_value:expr, $body_converter:ident]) => { let _: &mut AstConverter = $self; - let end_position = $self.add_type_and_start(&77u32.to_ne_bytes(), &$span, 12, false); + let end_position = $self.add_type_and_start(&78u32.to_ne_bytes(), &$span, 12, false); // test $self.update_reference_position(end_position + 4); $self.$test_converter(&$test_value); @@ -679,7 +692,7 @@ macro_rules! store_yield_expression { ($self:expr, span => $span:expr, delegate => $delegate_value:expr, argument => [$argument_value:expr, $argument_converter:ident]) => { let _: &mut AstConverter = $self; let end_position = $self.add_type_and_start( - &78u32.to_ne_bytes(), + &79u32.to_ne_bytes(), &$span, 12, false, diff --git a/rust/parse_ast/src/lib.rs b/rust/parse_ast/src/lib.rs index 80541da4c..6ffe5074d 100644 --- a/rust/parse_ast/src/lib.rs +++ b/rust/parse_ast/src/lib.rs @@ -24,11 +24,12 @@ pub fn parse_ast(code: String, allow_return_outside_function: bool) -> Vec { allow_return_outside_function, import_attributes: true, explicit_resource_management: true, + decorators: true, ..Default::default() }); let filename = FileName::Anon; - let file = cm.new_source_file(filename, code); + let file = cm.new_source_file(filename.into(), code); let code_reference = Lrc::clone(&file.src); let comments = SequentialComments::default(); GLOBALS.set(&Globals::default(), || { diff --git a/scripts/ast-types.js b/scripts/ast-types.js index e18ea27ed..fbfa8f807 100644 --- a/scripts/ast-types.js +++ b/scripts/ast-types.js @@ -1,6 +1,6 @@ /** * This file contains the AST node descriptions for the ESTree AST. - * From this file, "npm run build:ast:converters" will generate + * From this file, "npm run build:ast-converters" will generate * - /rust/parse_ast/src/convert_ast/converter/ast_constants.rs: * Constants that describe how the AST nodes are encoded in Rust. * - /src/utils/bufferToAst.ts: @@ -187,6 +187,7 @@ export const AST_NODES = { }, ClassDeclaration: { fields: [ + ['decorators', 'NodeList'], ['id', 'OptionalNode'], ['superClass', 'OptionalNode'], ['body', 'Node'] @@ -214,6 +215,7 @@ export const AST_NODES = { fields: [['label', 'OptionalNode']] }, DebuggerStatement: {}, + Decorator: { fields: [['expression', 'Node']] }, Directive: { astType: 'ExpressionStatement', estreeType: 'estree.Directive', @@ -478,6 +480,7 @@ export const AST_NODES = { }, MethodDefinition: { fields: [ + ['decorators', 'NodeList'], ['key', 'Node'], ['value', 'Node'], ['kind', 'FixedString'] @@ -531,6 +534,7 @@ export const AST_NODES = { }, PropertyDefinition: { fields: [ + ['decorators', 'NodeList'], ['key', 'Node'], ['value', 'OptionalNode'] ], diff --git a/scripts/prepare-release.js b/scripts/prepare-release.js index 8ea89c0ef..108f22610 100755 --- a/scripts/prepare-release.js +++ b/scripts/prepare-release.js @@ -95,7 +95,8 @@ async function getNewVersion(mainPackage, isMainBranch) { ? ['prerelease'] : ['premajor', 'preminor', 'prepatch']; - const { newVersion } = await inquirer.prompt([ + /** @type {any} The inquirer types appear to be seriously broken */ + const questions = [ { choices: availableIncrements.map(increment => { const value = semverInc(version, increment); @@ -109,7 +110,8 @@ async function getNewVersion(mainPackage, isMainBranch) { name: 'newVersion', type: 'list' } - ]); + ]; + const { newVersion } = await inquirer.prompt(questions); return newVersion; } @@ -220,14 +222,17 @@ async function waitForChangelogUpdate(version) { } changelogEntry = newEntry; console.log(cyan('You generated the following changelog entry:\n') + changelogEntry); - await inquirer.prompt([ + /** @type {any} The inquirer types appear to be seriously broken */ + const questions = [ { + /** @type {any[]} */ choices: ['ok'], message: `Please edit the changelog or confirm the changelog is acceptable to continue to release "${version}".`, name: 'ok', type: 'list' } - ]); + ]; + await inquirer.prompt(questions); } } diff --git a/src/ast/bufferParsers.ts b/src/ast/bufferParsers.ts index 3f7c90ec0..b197bd23e 100644 --- a/src/ast/bufferParsers.ts +++ b/src/ast/bufferParsers.ts @@ -27,6 +27,7 @@ import ClassExpression from './nodes/ClassExpression'; import ConditionalExpression from './nodes/ConditionalExpression'; import ContinueStatement from './nodes/ContinueStatement'; import DebuggerStatement from './nodes/DebuggerStatement'; +import Decorator from './nodes/Decorator'; import DoWhileStatement from './nodes/DoWhileStatement'; import EmptyStatement from './nodes/EmptyStatement'; import ExportAllDeclaration from './nodes/ExportAllDeclaration'; @@ -118,6 +119,7 @@ const nodeTypeStrings = [ 'ConditionalExpression', 'ContinueStatement', 'DebuggerStatement', + 'Decorator', 'ExpressionStatement', 'DoWhileStatement', 'EmptyStatement', @@ -200,6 +202,7 @@ const nodeConstructors: (typeof NodeBase)[] = [ ConditionalExpression, ContinueStatement, DebuggerStatement, + Decorator, ExpressionStatement, DoWhileStatement, EmptyStatement, @@ -364,22 +367,24 @@ const bufferParsers: ((node: any, position: number, buffer: AstBuffer) => void)[ }, function classDeclaration(node: ClassDeclaration, position, buffer) { const { scope } = node; - const idPosition = buffer[position]; + node.decorators = convertNodeList(node, scope, buffer[position], buffer); + const idPosition = buffer[position + 1]; node.id = idPosition === 0 ? null : convertNode(node, scope.parent as ChildScope, idPosition, buffer); - const superClassPosition = buffer[position + 1]; + const superClassPosition = buffer[position + 2]; node.superClass = superClassPosition === 0 ? null : convertNode(node, scope, superClassPosition, buffer); - node.body = convertNode(node, scope, buffer[position + 2], buffer); + node.body = convertNode(node, scope, buffer[position + 3], buffer); }, function classExpression(node: ClassExpression, position, buffer) { const { scope } = node; - const idPosition = buffer[position]; + node.decorators = convertNodeList(node, scope, buffer[position], buffer); + const idPosition = buffer[position + 1]; node.id = idPosition === 0 ? null : convertNode(node, scope, idPosition, buffer); - const superClassPosition = buffer[position + 1]; + const superClassPosition = buffer[position + 2]; node.superClass = superClassPosition === 0 ? null : convertNode(node, scope, superClassPosition, buffer); - node.body = convertNode(node, scope, buffer[position + 2], buffer); + node.body = convertNode(node, scope, buffer[position + 3], buffer); }, function conditionalExpression(node: ConditionalExpression, position, buffer) { const { scope } = node; @@ -393,6 +398,10 @@ const bufferParsers: ((node: any, position: number, buffer: AstBuffer) => void)[ node.label = labelPosition === 0 ? null : convertNode(node, scope, labelPosition, buffer); }, function debuggerStatement() {}, + function decorator(node: Decorator, position, buffer) { + const { scope } = node; + node.expression = convertNode(node, scope, buffer[position], buffer); + }, function directive(node: ExpressionStatement, position, buffer) { const { scope } = node; node.directive = buffer.convertString(buffer[position]); @@ -613,9 +622,10 @@ const bufferParsers: ((node: any, position: number, buffer: AstBuffer) => void)[ const flags = buffer[position]; node.static = (flags & 1) === 1; node.computed = (flags & 2) === 2; - node.key = convertNode(node, scope, buffer[position + 1], buffer); - node.value = convertNode(node, scope, buffer[position + 2], buffer); - node.kind = FIXED_STRINGS[buffer[position + 3]] as estree.MethodDefinition['kind']; + node.decorators = convertNodeList(node, scope, buffer[position + 1], buffer); + node.key = convertNode(node, scope, buffer[position + 2], buffer); + node.value = convertNode(node, scope, buffer[position + 3], buffer); + node.kind = FIXED_STRINGS[buffer[position + 4]] as estree.MethodDefinition['kind']; }, function newExpression(node: NewExpression, position, buffer) { const { scope } = node; @@ -655,8 +665,9 @@ const bufferParsers: ((node: any, position: number, buffer: AstBuffer) => void)[ const flags = buffer[position]; node.static = (flags & 1) === 1; node.computed = (flags & 2) === 2; - node.key = convertNode(node, scope, buffer[position + 1], buffer); - const valuePosition = buffer[position + 2]; + node.decorators = convertNodeList(node, scope, buffer[position + 1], buffer); + node.key = convertNode(node, scope, buffer[position + 2], buffer); + const valuePosition = buffer[position + 3]; node.value = valuePosition === 0 ? null : convertNode(node, scope, valuePosition, buffer); }, function restElement(node: RestElement, position, buffer) { diff --git a/src/ast/childNodeKeys.ts b/src/ast/childNodeKeys.ts index c1e6e433b..e6ab43b65 100644 --- a/src/ast/childNodeKeys.ts +++ b/src/ast/childNodeKeys.ts @@ -15,11 +15,12 @@ export const childNodeKeys: Record = { CatchClause: ['param', 'body'], ChainExpression: ['expression'], ClassBody: ['body'], - ClassDeclaration: ['id', 'superClass', 'body'], - ClassExpression: ['id', 'superClass', 'body'], + ClassDeclaration: ['decorators', 'id', 'superClass', 'body'], + ClassExpression: ['decorators', 'id', 'superClass', 'body'], ConditionalExpression: ['test', 'consequent', 'alternate'], ContinueStatement: ['label'], DebuggerStatement: [], + Decorator: ['expression'], DoWhileStatement: ['body', 'test'], EmptyStatement: [], ExportAllDeclaration: ['exported', 'source', 'attributes'], @@ -45,7 +46,7 @@ export const childNodeKeys: Record = { LogicalExpression: ['left', 'right'], MemberExpression: ['object', 'property'], MetaProperty: ['meta', 'property'], - MethodDefinition: ['key', 'value'], + MethodDefinition: ['decorators', 'key', 'value'], NewExpression: ['callee', 'arguments'], ObjectExpression: ['properties'], ObjectPattern: ['properties'], @@ -54,7 +55,7 @@ export const childNodeKeys: Record = { PrivateIdentifier: [], Program: ['body'], Property: ['key', 'value'], - PropertyDefinition: ['key', 'value'], + PropertyDefinition: ['decorators', 'key', 'value'], RestElement: ['argument'], ReturnStatement: ['argument'], SequenceExpression: ['expressions'], diff --git a/src/ast/nodes/ClassDeclaration.ts b/src/ast/nodes/ClassDeclaration.ts index 8ff2a0c53..76b1465cc 100644 --- a/src/ast/nodes/ClassDeclaration.ts +++ b/src/ast/nodes/ClassDeclaration.ts @@ -41,6 +41,7 @@ export default class ClassDeclaration extends ClassNode { } const renderedVariable = variable.getName(getPropertyAccess); if (renderedVariable !== name) { + this.decorators.map(decorator => decorator.render(code, options)); this.superClass?.render(code, options); this.body.render(code, { ...options, diff --git a/src/ast/nodes/Decorator.ts b/src/ast/nodes/Decorator.ts new file mode 100644 index 000000000..67dfe97c9 --- /dev/null +++ b/src/ast/nodes/Decorator.ts @@ -0,0 +1,20 @@ +import type { HasEffectsContext } from '../ExecutionContext'; +import { NODE_INTERACTION_UNKNOWN_CALL } from '../NodeInteractions'; +import { EMPTY_PATH } from '../utils/PathTracker'; +import type * as NodeType from './NodeType'; +import { type ExpressionNode, NodeBase } from './shared/Node'; + +export default class Decorator extends NodeBase { + declare type: NodeType.tDecorator; + declare expression: ExpressionNode; + hasEffects(context: HasEffectsContext): boolean { + return ( + this.expression.hasEffects(context) || + this.expression.hasEffectsOnInteractionAtPath( + EMPTY_PATH, + NODE_INTERACTION_UNKNOWN_CALL, + context + ) + ); + } +} diff --git a/src/ast/nodes/LogicalExpression.ts b/src/ast/nodes/LogicalExpression.ts index 55de14861..62e9b8781 100644 --- a/src/ast/nodes/LogicalExpression.ts +++ b/src/ast/nodes/LogicalExpression.ts @@ -185,12 +185,12 @@ export default class LogicalExpression extends NodeBase implements Deoptimizable }: NodeRenderOptions = BLANK ): void { if (!this.left.included || !this.right.included) { - const operatorPos = findFirstOccurrenceOutsideComment( - code.original, - this.operator, - this.left.end - ); if (this.right.included) { + const operatorPos = findFirstOccurrenceOutsideComment( + code.original, + this.operator, + this.left.end + ); const removePos = findNonWhiteSpace(code.original, operatorPos + 2); code.remove(this.start, removePos); if (preventASI) { @@ -198,7 +198,7 @@ export default class LogicalExpression extends NodeBase implements Deoptimizable } this.left.removeAnnotations(code); } else { - code.remove(operatorPos, this.end); + code.remove(this.left.end, this.end); } this.getUsedBranch()!.render(code, options, { isCalleeOfRenderedParent, diff --git a/src/ast/nodes/MethodDefinition.ts b/src/ast/nodes/MethodDefinition.ts index 9b84c7eef..d4d66b48c 100644 --- a/src/ast/nodes/MethodDefinition.ts +++ b/src/ast/nodes/MethodDefinition.ts @@ -1,3 +1,6 @@ +import type { HasEffectsContext } from '../ExecutionContext'; +import { checkEffectForNodes } from '../utils/checkEffectForNodes'; +import type Decorator from './Decorator'; import type FunctionExpression from './FunctionExpression'; import type * as NodeType from './NodeType'; import type PrivateIdentifier from './PrivateIdentifier'; @@ -10,6 +13,9 @@ export default class MethodDefinition extends MethodBase { declare static: boolean; declare type: NodeType.tMethodDefinition; declare value: FunctionExpression; - + declare decorators: Decorator[]; + hasEffects(context: HasEffectsContext): boolean { + return super.hasEffects(context) || checkEffectForNodes(this.decorators, context); + } protected applyDeoptimizations() {} } diff --git a/src/ast/nodes/NodeType.ts b/src/ast/nodes/NodeType.ts index db1224862..f3dfbb7d7 100644 --- a/src/ast/nodes/NodeType.ts +++ b/src/ast/nodes/NodeType.ts @@ -19,6 +19,7 @@ export type tClassExpression = 'ClassExpression'; export type tConditionalExpression = 'ConditionalExpression'; export type tContinueStatement = 'ContinueStatement'; export type tDebuggerStatement = 'DebuggerStatement'; +export type tDecorator = 'Decorator'; export type tDoWhileStatement = 'DoWhileStatement'; export type tEmptyStatement = 'EmptyStatement'; export type tExportAllDeclaration = 'ExportAllDeclaration'; @@ -93,6 +94,7 @@ export const ClassExpression: tClassExpression = 'ClassExpression'; export const ConditionalExpression: tConditionalExpression = 'ConditionalExpression'; export const ContinueStatement: tContinueStatement = 'ContinueStatement'; export const DebuggerStatement: tDebuggerStatement = 'DebuggerStatement'; +export const Decorator: tDecorator = 'Decorator'; export const DoWhileStatement: tDoWhileStatement = 'DoWhileStatement'; export const EmptyStatement: tEmptyStatement = 'EmptyStatement'; export const ExportAllDeclaration: tExportAllDeclaration = 'ExportAllDeclaration'; diff --git a/src/ast/nodes/PropertyDefinition.ts b/src/ast/nodes/PropertyDefinition.ts index 6f15cc7c1..bb1e9903d 100644 --- a/src/ast/nodes/PropertyDefinition.ts +++ b/src/ast/nodes/PropertyDefinition.ts @@ -2,6 +2,8 @@ import type { DeoptimizableEntity } from '../DeoptimizableEntity'; import type { HasEffectsContext } from '../ExecutionContext'; import type { NodeInteraction, NodeInteractionCalled } from '../NodeInteractions'; import type { ObjectPath, PathTracker } from '../utils/PathTracker'; +import { checkEffectForNodes } from '../utils/checkEffectForNodes'; +import type Decorator from './Decorator'; import type * as NodeType from './NodeType'; import type PrivateIdentifier from './PrivateIdentifier'; import { Flag, isFlagSet, setFlag } from './shared/BitFlags'; @@ -18,6 +20,7 @@ export default class PropertyDefinition extends NodeBase { declare static: boolean; declare type: NodeType.tPropertyDefinition; declare value: ExpressionNode | null; + declare decorators: Decorator[]; get computed(): boolean { return isFlagSet(this.flags, Flag.computed); @@ -60,7 +63,11 @@ export default class PropertyDefinition extends NodeBase { } hasEffects(context: HasEffectsContext): boolean { - return this.key.hasEffects(context) || (this.static && !!this.value?.hasEffects(context)); + return ( + this.key.hasEffects(context) || + (this.static && !!this.value?.hasEffects(context)) || + checkEffectForNodes(this.decorators, context) + ); } hasEffectsOnInteractionAtPath( diff --git a/src/ast/nodes/index.ts b/src/ast/nodes/index.ts index eb42ab564..b05b174da 100644 --- a/src/ast/nodes/index.ts +++ b/src/ast/nodes/index.ts @@ -19,6 +19,7 @@ import ClassExpression from './ClassExpression'; import ConditionalExpression from './ConditionalExpression'; import ContinueStatement from './ContinueStatement'; import DebuggerStatement from './DebuggerStatement'; +import Decorator from './Decorator'; import DoWhileStatement from './DoWhileStatement'; import EmptyStatement from './EmptyStatement'; import ExportAllDeclaration from './ExportAllDeclaration'; @@ -98,6 +99,7 @@ export const nodeConstructors: { ConditionalExpression, ContinueStatement, DebuggerStatement, + Decorator, DoWhileStatement, EmptyStatement, ExportAllDeclaration, diff --git a/src/ast/nodes/shared/ClassNode.ts b/src/ast/nodes/shared/ClassNode.ts index 6105bf319..43ca97814 100644 --- a/src/ast/nodes/shared/ClassNode.ts +++ b/src/ast/nodes/shared/ClassNode.ts @@ -11,7 +11,9 @@ import { UNKNOWN_PATH, UnknownKey } from '../../utils/PathTracker'; +import { checkEffectForNodes } from '../../utils/checkEffectForNodes'; import type ClassBody from '../ClassBody'; +import type Decorator from '../Decorator'; import Identifier from '../Identifier'; import type Literal from '../Literal'; import MethodDefinition from '../MethodDefinition'; @@ -26,6 +28,7 @@ export default class ClassNode extends NodeBase implements DeoptimizableEntity { declare body: ClassBody; declare id: Identifier | null; declare superClass: ExpressionNode | null; + declare decorators: Decorator[]; private declare classConstructor: MethodDefinition | null; private objectEntity: ObjectEntity | null = null; @@ -79,7 +82,7 @@ export default class ClassNode extends NodeBase implements DeoptimizableEntity { if (!this.deoptimized) this.applyDeoptimizations(); const initEffect = this.superClass?.hasEffects(context) || this.body.hasEffects(context); this.id?.markDeclarationReached(); - return initEffect || super.hasEffects(context); + return initEffect || super.hasEffects(context) || checkEffectForNodes(this.decorators, context); } hasEffectsOnInteractionAtPath( @@ -101,6 +104,7 @@ export default class ClassNode extends NodeBase implements DeoptimizableEntity { this.included = true; this.superClass?.include(context, includeChildrenRecursively); this.body.include(context, includeChildrenRecursively); + for (const decorator of this.decorators) decorator.include(context, includeChildrenRecursively); if (this.id) { this.id.markDeclarationReached(); this.id.include(); diff --git a/src/ast/utils/checkEffectForNodes.ts b/src/ast/utils/checkEffectForNodes.ts new file mode 100644 index 000000000..a4124b07e --- /dev/null +++ b/src/ast/utils/checkEffectForNodes.ts @@ -0,0 +1,11 @@ +import type { HasEffectsContext } from '../ExecutionContext'; +import type { NodeBase } from '../nodes/shared/Node'; + +export function checkEffectForNodes(nodes: Array, context: HasEffectsContext): boolean { + for (const node of nodes) { + if (node.hasEffects(context)) { + return true; + } + } + return false; +} diff --git a/src/rollup/types.d.ts b/src/rollup/types.d.ts index 0b44882a8..9eec93e68 100644 --- a/src/rollup/types.d.ts +++ b/src/rollup/types.d.ts @@ -1,4 +1,20 @@ -import type { Node as EstreeNode, Program } from 'estree'; +import type * as estree from 'estree'; + +declare module 'estree' { + export interface Decorator extends estree.BaseNode { + type: 'Decorator'; + expression: estree.Expression; + } + interface PropertyDefinition { + decorators: estree.Decorator[]; + } + interface MethodDefinition { + decorators: estree.Decorator[]; + } + interface BaseClass { + decorators: estree.Decorator[]; + } +} export const VERSION: string; @@ -996,8 +1012,8 @@ type OmittedEstreeKeys = | 'comments'; type RollupAstNode = Omit & AstNodeLocation; -type ProgramNode = RollupAstNode; -export type AstNode = RollupAstNode; +type ProgramNode = RollupAstNode; +export type AstNode = RollupAstNode; export function defineConfig(options: RollupOptions): RollupOptions; export function defineConfig(options: RollupOptions[]): RollupOptions[]; diff --git a/src/utils/bufferToAst.ts b/src/utils/bufferToAst.ts index a6a0976ce..bf870cc1d 100644 --- a/src/utils/bufferToAst.ts +++ b/src/utils/bufferToAst.ts @@ -170,27 +170,29 @@ const nodeConverters: ((position: number, buffer: AstBuffer) => any)[] = [ }; }, function classDeclaration(position, buffer): ClassDeclarationNode { - const idPosition = buffer[position + 2]; - const superClassPosition = buffer[position + 3]; + const idPosition = buffer[position + 3]; + const superClassPosition = buffer[position + 4]; return { type: 'ClassDeclaration', start: buffer[position], end: buffer[position + 1], + decorators: convertNodeList(buffer[position + 2], buffer), id: idPosition === 0 ? null : convertNode(idPosition, buffer), superClass: superClassPosition === 0 ? null : convertNode(superClassPosition, buffer), - body: convertNode(buffer[position + 4], buffer) + body: convertNode(buffer[position + 5], buffer) }; }, function classExpression(position, buffer): ClassExpressionNode { - const idPosition = buffer[position + 2]; - const superClassPosition = buffer[position + 3]; + const idPosition = buffer[position + 3]; + const superClassPosition = buffer[position + 4]; return { type: 'ClassExpression', start: buffer[position], end: buffer[position + 1], + decorators: convertNodeList(buffer[position + 2], buffer), id: idPosition === 0 ? null : convertNode(idPosition, buffer), superClass: superClassPosition === 0 ? null : convertNode(superClassPosition, buffer), - body: convertNode(buffer[position + 4], buffer) + body: convertNode(buffer[position + 5], buffer) }; }, function conditionalExpression(position, buffer): ConditionalExpressionNode { @@ -219,6 +221,14 @@ const nodeConverters: ((position: number, buffer: AstBuffer) => any)[] = [ end: buffer[position + 1] }; }, + function decorator(position, buffer): DecoratorNode { + return { + type: 'Decorator', + start: buffer[position], + end: buffer[position + 1], + expression: convertNode(buffer[position + 2], buffer) + }; + }, function directive(position, buffer): DirectiveNode { return { type: 'ExpressionStatement', @@ -551,9 +561,10 @@ const nodeConverters: ((position: number, buffer: AstBuffer) => any)[] = [ end: buffer[position + 1], static: (flags & 1) === 1, computed: (flags & 2) === 2, - key: convertNode(buffer[position + 3], buffer), - value: convertNode(buffer[position + 4], buffer), - kind: FIXED_STRINGS[buffer[position + 5]] as estree.MethodDefinition['kind'] + decorators: convertNodeList(buffer[position + 3], buffer), + key: convertNode(buffer[position + 4], buffer), + value: convertNode(buffer[position + 5], buffer), + kind: FIXED_STRINGS[buffer[position + 6]] as estree.MethodDefinition['kind'] }; }, function newExpression(position, buffer): NewExpressionNode { @@ -620,14 +631,15 @@ const nodeConverters: ((position: number, buffer: AstBuffer) => any)[] = [ }, function propertyDefinition(position, buffer): PropertyDefinitionNode { const flags = buffer[position + 2]; - const valuePosition = buffer[position + 4]; + const valuePosition = buffer[position + 5]; return { type: 'PropertyDefinition', start: buffer[position], end: buffer[position + 1], static: (flags & 1) === 1, computed: (flags & 2) === 2, - key: convertNode(buffer[position + 3], buffer), + decorators: convertNodeList(buffer[position + 3], buffer), + key: convertNode(buffer[position + 4], buffer), value: valuePosition === 0 ? null : convertNode(valuePosition, buffer) }; }, @@ -843,6 +855,7 @@ export type ClassExpressionNode = RollupAstNode; export type ConditionalExpressionNode = RollupAstNode; export type ContinueStatementNode = RollupAstNode; export type DebuggerStatementNode = RollupAstNode; +export type DecoratorNode = RollupAstNode; export type DirectiveNode = RollupAstNode; export type DoWhileStatementNode = RollupAstNode; export type EmptyStatementNode = RollupAstNode; diff --git a/src/utils/options/normalizeOutputOptions.ts b/src/utils/options/normalizeOutputOptions.ts index 0ee418cde..e886f243b 100644 --- a/src/utils/options/normalizeOutputOptions.ts +++ b/src/utils/options/normalizeOutputOptions.ts @@ -374,7 +374,7 @@ const getIndent = (config: OutputOptions, compact: boolean): NormalizedOutputOpt return ''; } const configIndent = config.indent; - return configIndent === false ? '' : configIndent ?? true; + return configIndent === false ? '' : (configIndent ?? true); }; const ALLOWED_INTEROP_TYPES: ReadonlySet = new Set([ diff --git a/test/form/samples/cjs-transpiler-re-exports-1/_expected/execute.mjs b/test/form/samples/cjs-transpiler-re-exports-1/_expected/execute.mjs new file mode 100644 index 000000000..15b9a0c4f --- /dev/null +++ b/test/form/samples/cjs-transpiler-re-exports-1/_expected/execute.mjs @@ -0,0 +1,4 @@ +import assert from "node:assert"; +import { foo, __proto__ } from "./cjs.js"; +assert.strictEqual(foo, 1); +assert.strictEqual(__proto__, undefined); \ No newline at end of file diff --git a/test/form/samples/cjs-transpiler-re-exports-1/_expected/foo.js b/test/form/samples/cjs-transpiler-re-exports-1/_expected/foo.js new file mode 100644 index 000000000..a34e9e489 --- /dev/null +++ b/test/form/samples/cjs-transpiler-re-exports-1/_expected/foo.js @@ -0,0 +1,5 @@ +exports.foo = 1; +Object.defineProperty(exports, "__proto__", { + enumerable: true, + value: 2 +}); \ No newline at end of file diff --git a/test/form/samples/cjs-transpiler-re-exports/_expected/execute.mjs b/test/form/samples/cjs-transpiler-re-exports/_expected/execute.mjs new file mode 100644 index 000000000..fe4ca2d9d --- /dev/null +++ b/test/form/samples/cjs-transpiler-re-exports/_expected/execute.mjs @@ -0,0 +1,4 @@ +import assert from "node:assert"; +import { foo, __proto__ } from "./cjs.js"; +assert.strictEqual(foo, 1); +assert.strictEqual(__proto__, 2); \ No newline at end of file diff --git a/test/form/samples/cjs-transpiler-re-exports/_expected/foo.js b/test/form/samples/cjs-transpiler-re-exports/_expected/foo.js new file mode 100644 index 000000000..a34e9e489 --- /dev/null +++ b/test/form/samples/cjs-transpiler-re-exports/_expected/foo.js @@ -0,0 +1,5 @@ +exports.foo = 1; +Object.defineProperty(exports, "__proto__", { + enumerable: true, + value: 2 +}); \ No newline at end of file diff --git a/test/form/samples/decorator-identifiers-deconflict/_config.js b/test/form/samples/decorator-identifiers-deconflict/_config.js new file mode 100644 index 000000000..1202dfce6 --- /dev/null +++ b/test/form/samples/decorator-identifiers-deconflict/_config.js @@ -0,0 +1,4 @@ +module.exports = defineTest({ + description: 'de-conflict identifiers of decorators', + verifyAst: false +}); diff --git a/test/form/samples/decorator-identifiers-deconflict/_expected.js b/test/form/samples/decorator-identifiers-deconflict/_expected.js new file mode 100644 index 000000000..f09535c56 --- /dev/null +++ b/test/form/samples/decorator-identifiers-deconflict/_expected.js @@ -0,0 +1,13 @@ +function fooDecorator$1() { + console.log('first effect'); +} + +let Foo$1 = @fooDecorator$1 +class Foo {}; + +function fooDecorator() { + console.log('second effect'); +} + +@fooDecorator +class Foo {} diff --git a/test/form/samples/decorator-identifiers-deconflict/first.js b/test/form/samples/decorator-identifiers-deconflict/first.js new file mode 100644 index 000000000..abab3322c --- /dev/null +++ b/test/form/samples/decorator-identifiers-deconflict/first.js @@ -0,0 +1,6 @@ +function fooDecorator() { + console.log('first effect'); +} + +@fooDecorator +class Foo {} diff --git a/test/form/samples/decorator-identifiers-deconflict/main.js b/test/form/samples/decorator-identifiers-deconflict/main.js new file mode 100644 index 000000000..0da9babd2 --- /dev/null +++ b/test/form/samples/decorator-identifiers-deconflict/main.js @@ -0,0 +1,2 @@ +import './first'; +import './second'; diff --git a/test/form/samples/decorator-identifiers-deconflict/second.js b/test/form/samples/decorator-identifiers-deconflict/second.js new file mode 100644 index 000000000..5278ed5de --- /dev/null +++ b/test/form/samples/decorator-identifiers-deconflict/second.js @@ -0,0 +1,6 @@ +function fooDecorator() { + console.log('second effect'); +} + +@fooDecorator +class Foo {} diff --git a/test/form/samples/decorator-tree-shaking-2/_config.js b/test/form/samples/decorator-tree-shaking-2/_config.js new file mode 100644 index 000000000..e964fc29c --- /dev/null +++ b/test/form/samples/decorator-tree-shaking-2/_config.js @@ -0,0 +1,4 @@ +module.exports = defineTest({ + description: 'retain the decorator function if the decorated class is retained', + verifyAst: false +}); diff --git a/test/form/samples/decorator-tree-shaking-2/_expected.js b/test/form/samples/decorator-tree-shaking-2/_expected.js new file mode 100644 index 000000000..1e4722ff3 --- /dev/null +++ b/test/form/samples/decorator-tree-shaking-2/_expected.js @@ -0,0 +1,6 @@ +function decorator() {} + +@decorator +class Main {} + +assert.ok(Main); diff --git a/test/form/samples/decorator-tree-shaking-2/main.js b/test/form/samples/decorator-tree-shaking-2/main.js new file mode 100644 index 000000000..1e4722ff3 --- /dev/null +++ b/test/form/samples/decorator-tree-shaking-2/main.js @@ -0,0 +1,6 @@ +function decorator() {} + +@decorator +class Main {} + +assert.ok(Main); diff --git a/test/form/samples/decorator-tree-shaking/_config.js b/test/form/samples/decorator-tree-shaking/_config.js new file mode 100644 index 000000000..bb849b653 --- /dev/null +++ b/test/form/samples/decorator-tree-shaking/_config.js @@ -0,0 +1,4 @@ +module.exports = defineTest({ + description: 'retain the class if the calling of decorator function has effects', + verifyAst: false +}); diff --git a/test/form/samples/decorator-tree-shaking/_expected.js b/test/form/samples/decorator-tree-shaking/_expected.js new file mode 100644 index 000000000..0c0332f7b --- /dev/null +++ b/test/form/samples/decorator-tree-shaking/_expected.js @@ -0,0 +1,52 @@ +// retained +function decorator() { + console.log('effect'); +} + +@decorator +class Main {} + +// retained +function decorator2() { + console.log('effect'); +} + +class Main2 { + @decorator2 + a = 1; +} + +// retained +function decorator3() { + console.log('effect'); +} +class Main3 { + @decorator3 + a() {} +} + +// retained +function decorator5() { + console.log('effect'); + return () => {}; +} +@decorator5() +class Main5 {} + +// retained +function decorator6() { + return () => { + console.log('effect'); + }; +} +@decorator6() +class Main6 {} + +// retained +function decorator8() { + console.log('effect'); + return () => {}; +} + +@(decorator8()) +class Main8 {} diff --git a/test/form/samples/decorator-tree-shaking/main.js b/test/form/samples/decorator-tree-shaking/main.js new file mode 100644 index 000000000..8e84011b5 --- /dev/null +++ b/test/form/samples/decorator-tree-shaking/main.js @@ -0,0 +1,70 @@ +// retained +function decorator() { + console.log('effect'); +} + +@decorator +class Main {} + +// retained +function decorator2() { + console.log('effect'); +} + +class Main2 { + @decorator2 + a = 1; +} + +// retained +function decorator3() { + console.log('effect'); +} +class Main3 { + @decorator3 + a() {} +} + +// removed +function decorator4() {} + +@decorator4 +class Main4 { + @decorator4 + a = 1; + @decorator4 + b() {} +} + +// retained +function decorator5() { + console.log('effect'); + return () => {}; +} +@decorator5() +class Main5 {} + +// retained +function decorator6() { + return () => { + console.log('effect'); + }; +} +@decorator6() +class Main6 {} + +// removed +function decorator7() { + return () => {}; +} +@decorator7() +class Main7 {} + +// retained +function decorator8() { + console.log('effect'); + return () => {}; +} + +@(false || decorator8()) +class Main8 {} diff --git a/test/form/samples/decorator/_config.js b/test/form/samples/decorator/_config.js new file mode 100644 index 000000000..b2ea582ac --- /dev/null +++ b/test/form/samples/decorator/_config.js @@ -0,0 +1,4 @@ +module.exports = defineTest({ + description: 'parsing decorators successfully', + verifyAst: false +}); diff --git a/test/form/samples/decorator/_expected.js b/test/form/samples/decorator/_expected.js new file mode 100644 index 000000000..6d007e7f7 --- /dev/null +++ b/test/form/samples/decorator/_expected.js @@ -0,0 +1,10 @@ +function decorator() {} + +@decorator +@decorator2 +class Test { + @decorator + a = 1; + @decorator + b() {} +} diff --git a/test/form/samples/decorator/main.js b/test/form/samples/decorator/main.js new file mode 100644 index 000000000..6d007e7f7 --- /dev/null +++ b/test/form/samples/decorator/main.js @@ -0,0 +1,10 @@ +function decorator() {} + +@decorator +@decorator2 +class Test { + @decorator + a = 1; + @decorator + b() {} +} diff --git a/test/form/samples/emit-asset-file/_expected/assets/logo_reverse'-DbGK2oiS.svg b/test/form/samples/emit-asset-file/_expected/assets/logo_reverse'-DbGK2oiS.svg new file mode 100644 index 000000000..31bbbec27 --- /dev/null +++ b/test/form/samples/emit-asset-file/_expected/assets/logo_reverse'-DbGK2oiS.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/form/samples/logical-expression/deopzimize-while-included/_expected.js b/test/form/samples/logical-expression/deopzimize-while-included/_expected.js index 0bdbdb545..fb0bdf81f 100644 --- a/test/form/samples/logical-expression/deopzimize-while-included/_expected.js +++ b/test/form/samples/logical-expression/deopzimize-while-included/_expected.js @@ -1,6 +1,6 @@ let isFirstReassigned = false; -const result1 = (foo(), isFirstReassigned ); +const result1 = (foo(), isFirstReassigned); console.log(result1); let isSecondReassigned = false; diff --git a/test/form/samples/logical-expression/simplify-non-boolean/_expected.js b/test/form/samples/logical-expression/simplify-non-boolean/_expected.js index d887e0745..9aba650ea 100644 --- a/test/form/samples/logical-expression/simplify-non-boolean/_expected.js +++ b/test/form/samples/logical-expression/simplify-non-boolean/_expected.js @@ -1,6 +1,6 @@ -console.log('keep' ); +console.log('keep'); console.log('keep'); const x = 'keep'; -console.log(x ); +console.log(x); console.log(x); diff --git a/test/form/samples/nullish-coalescing/_expected.js b/test/form/samples/nullish-coalescing/_expected.js index 16ea2b260..e1465d60c 100644 --- a/test/form/samples/nullish-coalescing/_expected.js +++ b/test/form/samples/nullish-coalescing/_expected.js @@ -5,9 +5,9 @@ function getNullSideEffect() { console.log('null'); console.log('undefined'); -console.log(0 ); -console.log('' ); -console.log('Hello' ); +console.log(0); +console.log(''); +console.log('Hello'); console.log('null return'); console.log(getNullSideEffect() ?? 'null return with side-effect'); diff --git a/test/form/samples/side-effects-logical-expressions/_expected/amd.js b/test/form/samples/side-effects-logical-expressions/_expected/amd.js index b682a2bf3..5cd0363fa 100644 --- a/test/form/samples/side-effects-logical-expressions/_expected/amd.js +++ b/test/form/samples/side-effects-logical-expressions/_expected/amd.js @@ -22,14 +22,14 @@ define((function () { 'use strict'; (null).foo = 1; // effect - (true )(); - (false )(); + (true)(); + (false)(); ((() => console.log( 'effect' )))(); ((() => console.log( 'effect' )))(); // effect - (true )()(); - (false )()(); + (true)()(); + (false)()(); ((() => () => console.log( 'effect' )))()(); ((() => () => console.log( 'effect' )))()(); diff --git a/test/form/samples/side-effects-logical-expressions/_expected/cjs.js b/test/form/samples/side-effects-logical-expressions/_expected/cjs.js index f39a15cad..2efd87aac 100644 --- a/test/form/samples/side-effects-logical-expressions/_expected/cjs.js +++ b/test/form/samples/side-effects-logical-expressions/_expected/cjs.js @@ -22,13 +22,13 @@ const foo = { (null).foo = 1; // effect -(true )(); -(false )(); +(true)(); +(false)(); ((() => console.log( 'effect' )))(); ((() => console.log( 'effect' )))(); // effect -(true )()(); -(false )()(); +(true)()(); +(false)()(); ((() => () => console.log( 'effect' )))()(); ((() => () => console.log( 'effect' )))()(); diff --git a/test/form/samples/side-effects-logical-expressions/_expected/es.js b/test/form/samples/side-effects-logical-expressions/_expected/es.js index 9de928c8d..0814df63c 100644 --- a/test/form/samples/side-effects-logical-expressions/_expected/es.js +++ b/test/form/samples/side-effects-logical-expressions/_expected/es.js @@ -20,13 +20,13 @@ const foo = { (null).foo = 1; // effect -(true )(); -(false )(); +(true)(); +(false)(); ((() => console.log( 'effect' )))(); ((() => console.log( 'effect' )))(); // effect -(true )()(); -(false )()(); +(true)()(); +(false)()(); ((() => () => console.log( 'effect' )))()(); ((() => () => console.log( 'effect' )))()(); diff --git a/test/form/samples/side-effects-logical-expressions/_expected/iife.js b/test/form/samples/side-effects-logical-expressions/_expected/iife.js index e20911c96..fb4bea51a 100644 --- a/test/form/samples/side-effects-logical-expressions/_expected/iife.js +++ b/test/form/samples/side-effects-logical-expressions/_expected/iife.js @@ -23,14 +23,14 @@ (null).foo = 1; // effect - (true )(); - (false )(); + (true)(); + (false)(); ((() => console.log( 'effect' )))(); ((() => console.log( 'effect' )))(); // effect - (true )()(); - (false )()(); + (true)()(); + (false)()(); ((() => () => console.log( 'effect' )))()(); ((() => () => console.log( 'effect' )))()(); diff --git a/test/form/samples/side-effects-logical-expressions/_expected/system.js b/test/form/samples/side-effects-logical-expressions/_expected/system.js index d8489dc70..8853d5df6 100644 --- a/test/form/samples/side-effects-logical-expressions/_expected/system.js +++ b/test/form/samples/side-effects-logical-expressions/_expected/system.js @@ -25,14 +25,14 @@ System.register([], (function () { (null).foo = 1; // effect - (true )(); - (false )(); + (true)(); + (false)(); ((() => console.log( 'effect' )))(); ((() => console.log( 'effect' )))(); // effect - (true )()(); - (false )()(); + (true)()(); + (false)()(); ((() => () => console.log( 'effect' )))()(); ((() => () => console.log( 'effect' )))()(); diff --git a/test/form/samples/side-effects-logical-expressions/_expected/umd.js b/test/form/samples/side-effects-logical-expressions/_expected/umd.js index 34c4e745c..6ff0de937 100644 --- a/test/form/samples/side-effects-logical-expressions/_expected/umd.js +++ b/test/form/samples/side-effects-logical-expressions/_expected/umd.js @@ -25,14 +25,14 @@ (null).foo = 1; // effect - (true )(); - (false )(); + (true)(); + (false)(); ((() => console.log( 'effect' )))(); ((() => console.log( 'effect' )))(); // effect - (true )()(); - (false )()(); + (true)()(); + (false)()(); ((() => () => console.log( 'effect' )))()(); ((() => () => console.log( 'effect' )))()(); diff --git a/test/form/samples/tree-shake-literal-parameter/recursion-literal/_expected.js b/test/form/samples/tree-shake-literal-parameter/recursion-literal/_expected.js index 2fcab0594..3886e024c 100644 --- a/test/form/samples/tree-shake-literal-parameter/recursion-literal/_expected.js +++ b/test/form/samples/tree-shake-literal-parameter/recursion-literal/_expected.js @@ -10,4 +10,4 @@ function fun2(enable) { } } -console.log(fun2()); \ No newline at end of file +console.log(fun2()); diff --git a/test/form/samples/tree-shake-literal-parameter/reexport-function/_expected.js b/test/form/samples/tree-shake-literal-parameter/reexport-function/_expected.js index fd105290a..fb14309f4 100644 --- a/test/form/samples/tree-shake-literal-parameter/reexport-function/_expected.js +++ b/test/form/samples/tree-shake-literal-parameter/reexport-function/_expected.js @@ -4,4 +4,4 @@ function module2 (enable) { } } -console.log(module2()); \ No newline at end of file +console.log(module2()); diff --git a/test/form/samples/tree-shake-logical-expressions/_expected/amd.js b/test/form/samples/tree-shake-logical-expressions/_expected/amd.js index e7058ed79..0c14d126d 100644 --- a/test/form/samples/tree-shake-logical-expressions/_expected/amd.js +++ b/test/form/samples/tree-shake-logical-expressions/_expected/amd.js @@ -6,9 +6,9 @@ define((function () { 'use strict'; console.log(getStringA()); - console.log(false ); + console.log(false); - console.log(true ); + console.log(true); function getStringD() { return 'D'; diff --git a/test/form/samples/tree-shake-logical-expressions/_expected/cjs.js b/test/form/samples/tree-shake-logical-expressions/_expected/cjs.js index d36465fff..9792485a4 100644 --- a/test/form/samples/tree-shake-logical-expressions/_expected/cjs.js +++ b/test/form/samples/tree-shake-logical-expressions/_expected/cjs.js @@ -6,9 +6,9 @@ function getStringA() { console.log(getStringA()); -console.log(false ); +console.log(false); -console.log(true ); +console.log(true); function getStringD() { return 'D'; diff --git a/test/form/samples/tree-shake-logical-expressions/_expected/es.js b/test/form/samples/tree-shake-logical-expressions/_expected/es.js index bc04584d0..0ccf0053a 100644 --- a/test/form/samples/tree-shake-logical-expressions/_expected/es.js +++ b/test/form/samples/tree-shake-logical-expressions/_expected/es.js @@ -4,9 +4,9 @@ function getStringA() { console.log(getStringA()); -console.log(false ); +console.log(false); -console.log(true ); +console.log(true); function getStringD() { return 'D'; diff --git a/test/form/samples/tree-shake-logical-expressions/_expected/iife.js b/test/form/samples/tree-shake-logical-expressions/_expected/iife.js index 665bd6743..180a99ca0 100644 --- a/test/form/samples/tree-shake-logical-expressions/_expected/iife.js +++ b/test/form/samples/tree-shake-logical-expressions/_expected/iife.js @@ -7,9 +7,9 @@ console.log(getStringA()); - console.log(false ); + console.log(false); - console.log(true ); + console.log(true); function getStringD() { return 'D'; diff --git a/test/form/samples/tree-shake-logical-expressions/_expected/system.js b/test/form/samples/tree-shake-logical-expressions/_expected/system.js index b9caa3d83..8891e125e 100644 --- a/test/form/samples/tree-shake-logical-expressions/_expected/system.js +++ b/test/form/samples/tree-shake-logical-expressions/_expected/system.js @@ -9,9 +9,9 @@ System.register([], (function () { console.log(getStringA()); - console.log(false ); + console.log(false); - console.log(true ); + console.log(true); function getStringD() { return 'D'; diff --git a/test/form/samples/tree-shake-logical-expressions/_expected/umd.js b/test/form/samples/tree-shake-logical-expressions/_expected/umd.js index 62dc3debf..07635dd05 100644 --- a/test/form/samples/tree-shake-logical-expressions/_expected/umd.js +++ b/test/form/samples/tree-shake-logical-expressions/_expected/umd.js @@ -9,9 +9,9 @@ console.log(getStringA()); - console.log(false ); + console.log(false); - console.log(true ); + console.log(true); function getStringD() { return 'D'; diff --git a/test/utils.js b/test/utils.js index 12b5efb1e..4f566fda5 100644 --- a/test/utils.js +++ b/test/utils.js @@ -479,6 +479,13 @@ const replaceStringifyValues = (key, value) => { const { options, ...nonOptionsProperties } = value; return { ...nonOptionsProperties, ...(options ? { arguments: [options] } : {}) }; } + case 'ClassDeclaration': + case 'ClassExpression': + case 'PropertyDefinition': + case 'MethodDefinition': { + const { decorators, ...rest } = value; + return rest; + } } return key.startsWith('_')