From 6db2515437121dd52e8930e255080fe1977ac552 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Barr=C3=A9?= Date: Mon, 10 Jun 2024 16:58:21 +0200 Subject: [PATCH] build: use esbuild to speedup building vite package (#17299) --- package.json | 2 +- packages/vite/package.json | 7 +- packages/vite/rollup.config.ts | 297 ++++++++++--------------- packages/vite/scripts/dev.ts | 120 ++++++++++ packages/vite/src/client/tsconfig.json | 2 +- packages/vite/src/node/tsconfig.json | 7 +- packages/vite/tsconfig.check.json | 2 + packages/vite/tsconfig.json | 2 +- playground/legacy/package.json | 1 + pnpm-lock.yaml | 57 +---- 10 files changed, 258 insertions(+), 239 deletions(-) create mode 100644 packages/vite/scripts/dev.ts diff --git a/package.json b/package.json index 29e882a2f39689..ac232d1e172efc 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,6 @@ }, "devDependencies": { "@eslint/js": "^9.4.0", - "@rollup/plugin-typescript": "^11.1.6", "@types/babel__core": "^7.20.5", "@types/babel__preset-env": "^7.9.6", "@types/convert-source-map": "^2.0.3", @@ -74,6 +73,7 @@ "prettier": "3.3.1", "rimraf": "^5.0.7", "rollup": "^4.13.0", + "rollup-plugin-esbuild": "^6.1.1", "simple-git-hooks": "^2.11.1", "tslib": "^2.6.3", "tsx": "^4.15.1", diff --git a/packages/vite/package.json b/packages/vite/package.json index ff56f2bd947d72..51cd4db9e95310 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -71,12 +71,12 @@ "homepage": "https://vitejs.dev", "funding": "https://github.com/vitejs/vite?sponsor=1", "scripts": { - "dev": "rimraf dist && pnpm run build-bundle -w", + "dev": "tsx scripts/dev.ts", "build": "rimraf dist && run-s build-bundle build-types", - "build-bundle": "rollup --config rollup.config.ts --configPlugin typescript", + "build-bundle": "rollup --config rollup.config.ts --configPlugin esbuild", "build-types": "run-s build-types-temp build-types-roll build-types-check", "build-types-temp": "tsc --emitDeclarationOnly --outDir temp -p src/node", - "build-types-roll": "rollup --config rollup.dts.config.ts --configPlugin typescript && rimraf temp", + "build-types-roll": "rollup --config rollup.dts.config.ts --configPlugin esbuild && rimraf temp", "build-types-check": "tsc --project tsconfig.check.json", "typecheck": "tsc --noEmit", "lint": "eslint --cache --ext .ts src/**", @@ -102,7 +102,6 @@ "@rollup/plugin-dynamic-import-vars": "^2.1.2", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "15.2.3", - "@rollup/plugin-typescript": "^11.1.6", "@rollup/pluginutils": "^5.1.0", "@types/escape-html": "^1.0.4", "@types/pnpapi": "^0.0.5", diff --git a/packages/vite/rollup.config.ts b/packages/vite/rollup.config.ts index 2d14eace0eea9c..d88ca526ade8ae 100644 --- a/packages/vite/rollup.config.ts +++ b/packages/vite/rollup.config.ts @@ -2,13 +2,12 @@ import { readFileSync } from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' import nodeResolve from '@rollup/plugin-node-resolve' -import typescript from '@rollup/plugin-typescript' import commonjs from '@rollup/plugin-commonjs' import json from '@rollup/plugin-json' import MagicString from 'magic-string' -import type { Plugin, RollupOptions } from 'rollup' +import type { Plugin } from 'rollup' import { defineConfig } from 'rollup' -import { minify as esbuildMinifyPlugin } from 'rollup-plugin-esbuild' +import esbuild, { type Options as esbuildOptions } from 'rollup-plugin-esbuild' import licensePlugin from './rollupLicensePlugin' const pkg = JSON.parse( @@ -20,39 +19,25 @@ const __dirname = fileURLToPath(new URL('.', import.meta.url)) const envConfig = defineConfig({ input: path.resolve(__dirname, 'src/client/env.ts'), plugins: [ - typescript({ + esbuild({ tsconfig: path.resolve(__dirname, 'src/client/tsconfig.json'), }), ], output: { file: path.resolve(__dirname, 'dist/client', 'env.mjs'), - sourcemap: true, - sourcemapPathTransform(relativeSourcePath) { - return path.basename(relativeSourcePath) - }, - sourcemapIgnoreList() { - return true - }, }, }) const clientConfig = defineConfig({ input: path.resolve(__dirname, 'src/client/client.ts'), - external: ['./env', '@vite/env'], + external: ['@vite/env'], plugins: [ - typescript({ + esbuild({ tsconfig: path.resolve(__dirname, 'src/client/tsconfig.json'), }), ], output: { file: path.resolve(__dirname, 'dist/client', 'client.mjs'), - sourcemap: true, - sourcemapPathTransform(relativeSourcePath) { - return path.basename(relativeSourcePath) - }, - sourcemapIgnoreList() { - return true - }, }, }) @@ -79,171 +64,132 @@ const sharedNodeOptions = defineConfig({ }, }) -function createNodePlugins( - isProduction: boolean, - sourceMap: boolean, - declarationDir: string | false, -): (Plugin | false)[] { +function createSharedNodePlugins({ + esbuildOptions, +}: { + esbuildOptions?: esbuildOptions +}): Plugin[] { return [ nodeResolve({ preferBuiltins: true }), - typescript({ + esbuild({ tsconfig: path.resolve(__dirname, 'src/node/tsconfig.json'), - sourceMap, - declaration: declarationDir !== false, - declarationDir: declarationDir !== false ? declarationDir : undefined, + target: 'node18', + ...esbuildOptions, }), - - // Some deps have try...catch require of optional deps, but rollup will - // generate code that force require them upfront for side effects. - // Shim them with eval() so rollup can skip these calls. - isProduction && - shimDepsPlugin({ - // chokidar -> fsevents - 'fsevents-handler.js': { - src: `require('fsevents')`, - replacement: `__require('fsevents')`, - }, - // postcss-import -> sugarss - 'process-content.js': { - src: 'require("sugarss")', - replacement: `__require('sugarss')`, - }, - 'lilconfig/dist/index.js': { - pattern: /: require,/g, - replacement: `: __require,`, - }, - // postcss-load-config calls require after register ts-node - 'postcss-load-config/src/index.js': { - pattern: /require(?=\((configFile|'ts-node')\))/g, - replacement: `__require`, - }, - // postcss-import uses the `resolve` dep if the `resolve` option is not passed. - // However, we always pass the `resolve` option. Remove this import to avoid - // bundling the `resolve` dep. - 'postcss-import/index.js': { - src: 'const resolveId = require("./lib/resolve-id")', - replacement: 'const resolveId = (id) => id', - }, - 'postcss-import/lib/parse-styles.js': { - src: 'const resolveId = require("./resolve-id")', - replacement: 'const resolveId = (id) => id', - }, - }), - commonjs({ extensions: ['.js'], // Optional peer deps of ws. Native deps that are mostly for performance. // Since ws is not that perf critical for us, just ignore these deps. ignore: ['bufferutil', 'utf-8-validate'], + sourceMap: false, }), json(), - isProduction && - licensePlugin( - path.resolve(__dirname, 'LICENSE.md'), - 'Vite core license', - 'Vite', - ), - cjsPatchPlugin(), ] } -function createNodeConfig(isProduction: boolean) { - return defineConfig({ - ...sharedNodeOptions, - input: { - index: path.resolve(__dirname, 'src/node/index.ts'), - cli: path.resolve(__dirname, 'src/node/cli.ts'), - constants: path.resolve(__dirname, 'src/node/constants.ts'), - }, - output: { - ...sharedNodeOptions.output, - sourcemap: !isProduction, - }, - external: [ - /^vite\//, - 'fsevents', - 'lightningcss', - 'rollup/parseAst', - ...Object.keys(pkg.dependencies), - ...(isProduction ? [] : Object.keys(pkg.devDependencies)), - ], - plugins: createNodePlugins( - isProduction, - !isProduction, - // in production we use rollup.dts.config.ts for dts generation - // in development we need to rely on the rollup ts plugin - isProduction ? false : './dist/node', +const nodeConfig = defineConfig({ + ...sharedNodeOptions, + input: { + index: path.resolve(__dirname, 'src/node/index.ts'), + cli: path.resolve(__dirname, 'src/node/cli.ts'), + constants: path.resolve(__dirname, 'src/node/constants.ts'), + }, + external: [ + /^vite\//, + 'fsevents', + 'lightningcss', + 'rollup/parseAst', + ...Object.keys(pkg.dependencies), + ], + plugins: [ + // Some deps have try...catch require of optional deps, but rollup will + // generate code that force require them upfront for side effects. + // Shim them with eval() so rollup can skip these calls. + shimDepsPlugin({ + // chokidar -> fsevents + 'fsevents-handler.js': { + src: `require('fsevents')`, + replacement: `__require('fsevents')`, + }, + // postcss-import -> sugarss + 'process-content.js': { + src: 'require("sugarss")', + replacement: `__require('sugarss')`, + }, + 'lilconfig/dist/index.js': { + pattern: /: require,/g, + replacement: `: __require,`, + }, + // postcss-load-config calls require after register ts-node + 'postcss-load-config/src/index.js': { + pattern: /require(?=\((configFile|'ts-node')\))/g, + replacement: `__require`, + }, + // postcss-import uses the `resolve` dep if the `resolve` option is not passed. + // However, we always pass the `resolve` option. Remove this import to avoid + // bundling the `resolve` dep. + 'postcss-import/index.js': { + src: 'const resolveId = require("./lib/resolve-id")', + replacement: 'const resolveId = (id) => id', + }, + 'postcss-import/lib/parse-styles.js': { + src: 'const resolveId = require("./resolve-id")', + replacement: 'const resolveId = (id) => id', + }, + }), + ...createSharedNodePlugins({}), + licensePlugin( + path.resolve(__dirname, 'LICENSE.md'), + 'Vite core license', + 'Vite', ), - }) -} - -function createRuntimeConfig(isProduction: boolean) { - return defineConfig({ - ...sharedNodeOptions, - input: { - runtime: path.resolve(__dirname, 'src/runtime/index.ts'), - }, - output: { - ...sharedNodeOptions.output, - sourcemap: !isProduction, - }, - external: [ - 'fsevents', - 'lightningcss', - 'rollup/parseAst', - ...Object.keys(pkg.dependencies), - ], - plugins: [ - ...createNodePlugins( - false, - !isProduction, - // in production we use rollup.dts.config.ts for dts generation - // in development we need to rely on the rollup ts plugin - isProduction ? false : './dist/node', - ), - esbuildMinifyPlugin({ minify: false, minifySyntax: true }), - bundleSizeLimit(45), - ], - }) -} + cjsPatchPlugin(), + ], +}) -function createCjsConfig(isProduction: boolean) { - return defineConfig({ - ...sharedNodeOptions, - input: { - publicUtils: path.resolve(__dirname, 'src/node/publicUtils.ts'), - }, - output: { - dir: './dist', - entryFileNames: `node-cjs/[name].cjs`, - chunkFileNames: 'node-cjs/chunks/dep-[hash].js', - exports: 'named', - format: 'cjs', - externalLiveBindings: false, - freeze: false, - sourcemap: false, - }, - external: [ - 'fsevents', - ...Object.keys(pkg.dependencies), - ...(isProduction ? [] : Object.keys(pkg.devDependencies)), - ], - plugins: [...createNodePlugins(false, false, false), bundleSizeLimit(175)], - }) -} +const runtimeConfig = defineConfig({ + ...sharedNodeOptions, + input: { + runtime: path.resolve(__dirname, 'src/runtime/index.ts'), + }, + external: [ + 'fsevents', + 'lightningcss', + 'rollup/parseAst', + ...Object.keys(pkg.dependencies), + ], + plugins: [ + ...createSharedNodePlugins({ esbuildOptions: { minifySyntax: true } }), + bundleSizeLimit(50), + ], +}) -export default (commandLineArgs: any): RollupOptions[] => { - const isDev = commandLineArgs.watch - const isProduction = !isDev +const cjsConfig = defineConfig({ + ...sharedNodeOptions, + input: { + publicUtils: path.resolve(__dirname, 'src/node/publicUtils.ts'), + }, + output: { + dir: './dist', + entryFileNames: `node-cjs/[name].cjs`, + chunkFileNames: 'node-cjs/chunks/dep-[hash].js', + exports: 'named', + format: 'cjs', + externalLiveBindings: false, + freeze: false, + sourcemap: false, + }, + external: ['fsevents', ...Object.keys(pkg.dependencies)], + plugins: [...createSharedNodePlugins({}), bundleSizeLimit(175)], +}) - return defineConfig([ - envConfig, - clientConfig, - createNodeConfig(isProduction), - createRuntimeConfig(isProduction), - createCjsConfig(isProduction), - ]) -} +export default defineConfig([ + envConfig, + clientConfig, + nodeConfig, + runtimeConfig, + cjsConfig, +]) // #region Plugins @@ -292,10 +238,7 @@ function shimDepsPlugin(deps: Record): Plugin { console.log(`shimmed: ${file}`) } - return { - code: magicString.toString(), - map: magicString.generateMap({ hires: 'boundary' }), - } + return magicString.toString() } } }, @@ -332,23 +275,13 @@ const __require = require; name: 'cjs-chunk-patch', renderChunk(code, chunk) { if (!chunk.fileName.includes('chunks/dep-')) return - // don't patch runtime utils chunk because it should stay lightweight and we know it doesn't use require - if ( - chunk.name === 'utils' && - chunk.moduleIds.some((id) => id.endsWith('/ssr/runtime/utils.ts')) - ) - return const match = code.match(/^(?:import[\s\S]*?;\s*)+/) const index = match ? match.index! + match[0].length : 0 const s = new MagicString(code) // inject after the last `import` s.appendRight(index, cjsPatch) console.log('patched cjs context: ' + chunk.fileName) - - return { - code: s.toString(), - map: s.generateMap({ hires: 'boundary' }), - } + return s.toString() }, } } diff --git a/packages/vite/scripts/dev.ts b/packages/vite/scripts/dev.ts new file mode 100644 index 00000000000000..32d3d9ef8ed6ad --- /dev/null +++ b/packages/vite/scripts/dev.ts @@ -0,0 +1,120 @@ +import { + mkdirSync, + readFileSync, + readdirSync, + rmSync, + writeFileSync, +} from 'node:fs' +import { type BuildOptions, context } from 'esbuild' +import packageJSON from '../package.json' + +rmSync('dist', { force: true, recursive: true }) +mkdirSync('dist/node', { recursive: true }) +writeFileSync('dist/node/index.d.ts', "export * from '../../src/node/index.ts'") +writeFileSync( + 'dist/node/runtime.d.ts', + "export * from '../../src/runtime/index.ts'", +) + +const serverOptions: BuildOptions = { + bundle: true, + platform: 'node', + target: 'node18', + sourcemap: true, + external: [ + ...Object.keys(packageJSON.dependencies), + ...Object.keys(packageJSON.peerDependencies), + ...Object.keys(packageJSON.optionalDependencies), + ...Object.keys(packageJSON.devDependencies), + ], +} +const clientOptions: BuildOptions = { + bundle: true, + platform: 'browser', + target: 'es2020', + format: 'esm', + sourcemap: true, +} + +const watch = async (options: BuildOptions) => { + const ctx = await context(options) + await ctx.watch() +} + +// envConfig +void watch({ + entryPoints: ['src/client/env.ts'], + outfile: 'dist/client/env.mjs', + ...clientOptions, +}) +// clientConfig +void watch({ + entryPoints: ['src/client/client.ts'], + outfile: 'dist/client/client.mjs', + external: ['@vite/env'], + ...clientOptions, +}) +// nodeConfig +void watch({ + ...serverOptions, + entryPoints: { + cli: 'src/node/cli.ts', + constants: 'src/node/constants.ts', + index: 'src/node/index.ts', + }, + outdir: 'dist/node', + format: 'esm', + splitting: true, + chunkNames: '_[name]-[hash]', + // The current usage of require() inside inlined workers confuse esbuild, + // and generate top level __require which are then undefined in the worker + // at runtime. To workaround, we move require call to ___require and then + // back to require on build end. + // Ideally we should move workers to ESM + define: { require: '___require' }, + plugins: [ + { + name: 'log', + setup(build) { + let first = true + build.onEnd(() => { + for (const file of readdirSync('dist/node')) { + const path = `dist/node/${file}` + const content = readFileSync(path, 'utf-8') + if (content.includes('___require')) { + writeFileSync(path, content.replaceAll('___require', 'require')) + } + } + if (first) { + first = false + console.log('Watching...') + } else { + console.log('Rebuilt') + } + }) + }, + }, + ], +}) +// runtimeConfig +void watch({ + ...serverOptions, + entryPoints: ['./src/runtime/index.ts'], + outfile: 'dist/node/runtime.js', + format: 'esm', +}) +// cjsConfig +void watch({ + ...serverOptions, + entryPoints: ['./src/node/publicUtils.ts'], + outfile: 'dist/node-cjs/publicUtils.cjs', + format: 'cjs', + banner: { + js: ` +const { pathToFileURL } = require("node:url") +const __url = pathToFileURL(__filename)`.trimStart(), + }, + define: { + 'import.meta.url': '__url', + }, +}) diff --git a/packages/vite/src/client/tsconfig.json b/packages/vite/src/client/tsconfig.json index a7b763fdf2e37c..a0bacaa3006509 100644 --- a/packages/vite/src/client/tsconfig.json +++ b/packages/vite/src/client/tsconfig.json @@ -3,7 +3,7 @@ "include": ["./", "../types"], "compilerOptions": { "types": [], - "target": "ES2019", + "target": "ES2020", "lib": ["ESNext", "DOM"], "declaration": false } diff --git a/packages/vite/src/node/tsconfig.json b/packages/vite/src/node/tsconfig.json index db8e56fa8449c5..fc1e1744a518d4 100644 --- a/packages/vite/src/node/tsconfig.json +++ b/packages/vite/src/node/tsconfig.json @@ -1,9 +1,12 @@ { "extends": "../../tsconfig.base.json", - "include": ["./", "../runtime", "../dep-types", "../types", "constants.ts"], + "include": ["./", "../runtime", "../types"], "exclude": ["../**/__tests__"], "compilerOptions": { - "lib": ["ESNext", "DOM"], + // https://github.com/microsoft/TypeScript/wiki/Node-Target-Mapping#node-18 + "lib": ["ES2023", "DOM"], // DOM because we have client code that gets inlined via function.toString() + "target": "ES2022", + "skipLibCheck": true, // lib check is done on final types "stripInternal": true, "paths": { "vite/runtime": ["../runtime"] diff --git a/packages/vite/tsconfig.check.json b/packages/vite/tsconfig.check.json index d71065ba1e71c4..8b33b1a8fe41cd 100644 --- a/packages/vite/tsconfig.check.json +++ b/packages/vite/tsconfig.check.json @@ -3,6 +3,8 @@ "target": "ES2020", "moduleResolution": "node16", "module": "node16", + "lib": ["ES2020", "WebWorker"], // ES2020 is very conservative check for client types, could be bumped if needed + "types": [], // Avoid checking unrelated node_modules types "noEmit": true, "strict": true, "exactOptionalPropertyTypes": true diff --git a/packages/vite/tsconfig.json b/packages/vite/tsconfig.json index 288eefaaa299ce..0dcf833e6ec3e1 100644 --- a/packages/vite/tsconfig.json +++ b/packages/vite/tsconfig.json @@ -1,6 +1,6 @@ { "extends": "./tsconfig.base.json", - "include": ["./rollup.config.ts", "./rollup.dts.config.ts"], + "include": ["./rollup.config.ts", "./rollup.dts.config.ts", "scripts"], "compilerOptions": { "esModuleInterop": true, "declaration": false, diff --git a/playground/legacy/package.json b/playground/legacy/package.json index 3b48046002276e..fb8189605451ac 100644 --- a/playground/legacy/package.json +++ b/playground/legacy/package.json @@ -15,6 +15,7 @@ "preview": "vite preview" }, "devDependencies": { + "vite": "workspace:*", "@vitejs/plugin-legacy": "workspace:*", "express": "^4.19.2", "terser": "^5.31.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f89077f0a8c590..f2061d5a62bdef 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,9 +28,6 @@ importers: '@eslint/js': specifier: ^9.4.0 version: 9.4.0 - '@rollup/plugin-typescript': - specifier: ^11.1.6 - version: 11.1.6(rollup@4.13.0)(tslib@2.6.3)(typescript@5.2.2) '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 @@ -127,6 +124,9 @@ importers: rollup: specifier: ^4.13.0 version: 4.13.0 + rollup-plugin-esbuild: + specifier: ^6.1.1 + version: 6.1.1(esbuild@0.21.4)(rollup@4.13.0) simple-git-hooks: specifier: ^2.11.1 version: 2.11.1 @@ -274,9 +274,6 @@ importers: '@rollup/plugin-node-resolve': specifier: 15.2.3 version: 15.2.3(rollup@4.13.0) - '@rollup/plugin-typescript': - specifier: ^11.1.6 - version: 11.1.6(rollup@4.13.0)(tslib@2.6.3)(typescript@5.2.2) '@rollup/pluginutils': specifier: ^5.1.0 version: 5.1.0(rollup@4.13.0) @@ -791,6 +788,9 @@ importers: terser: specifier: ^5.31.1 version: 5.31.1 + vite: + specifier: workspace:* + version: link:../../packages/vite playground/lib: devDependencies: @@ -1730,14 +1730,6 @@ packages: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - /@babel/code-frame@7.24.6: - resolution: {integrity: sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.24.6 - picocolors: 1.0.1 - dev: true - /@babel/code-frame@7.24.7: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} @@ -2030,17 +2022,6 @@ packages: '@babel/template': 7.24.7 '@babel/types': 7.24.7 - /@babel/highlight@7.24.6: - resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==} - engines: {node: '>=6.9.0'} - requiresBuild: true - dependencies: - '@babel/helper-validator-identifier': 7.24.6 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 - dev: true - /@babel/highlight@7.24.7: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} @@ -4060,26 +4041,6 @@ packages: rollup: 3.29.4 dev: true - /@rollup/plugin-typescript@11.1.6(rollup@4.13.0)(tslib@2.6.3)(typescript@5.2.2): - resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.14.0||^3.0.0||^4.0.0 - tslib: '*' - typescript: '>=3.7.0' - peerDependenciesMeta: - rollup: - optional: true - tslib: - optional: true - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.13.0) - resolve: 1.22.4 - rollup: 4.13.0 - tslib: 2.6.3 - typescript: 5.2.2 - dev: true - /@rollup/pluginutils@5.0.4(rollup@3.29.4): resolution: {integrity: sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==} engines: {node: '>=14.0.0'} @@ -8535,7 +8496,7 @@ packages: resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} engines: {node: '>=18'} dependencies: - '@babel/code-frame': 7.24.6 + '@babel/code-frame': 7.24.7 index-to-position: 0.1.2 type-fest: 4.18.1 dev: true @@ -9264,7 +9225,7 @@ packages: rollup: 3.29.4 typescript: 5.2.2 optionalDependencies: - '@babel/code-frame': 7.24.6 + '@babel/code-frame': 7.24.7 dev: true /rollup-plugin-dts@6.1.1(rollup@4.13.0)(typescript@5.2.2): @@ -9278,7 +9239,7 @@ packages: rollup: 4.13.0 typescript: 5.2.2 optionalDependencies: - '@babel/code-frame': 7.24.6 + '@babel/code-frame': 7.24.7 dev: true /rollup-plugin-esbuild@6.1.1(esbuild@0.21.4)(rollup@4.13.0):