From dbb4197f49bdfd71949ea50e61fb6fc2b25d449d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?= Date: Thu, 5 Sep 2024 20:10:40 +0800 Subject: [PATCH] test: add rolldown --- package.json | 3 +- pnpm-lock.yaml | 24 +- tests/__snapshots__/rollup.test.ts.snap | 446 +++++++++++++++++++----- tests/rollup.test.ts | 31 +- 4 files changed, 405 insertions(+), 99 deletions(-) diff --git a/package.json b/package.json index 89d461f..89cfb1c 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "@jridgewell/trace-mapping": "^0.3.25", "@sxzz/eslint-config": "^4.1.4", "@sxzz/prettier-config": "^2.0.2", - "@sxzz/test-utils": "^0.2.1", + "@sxzz/test-utils": "^0.3.0", "@types/debug": "^4.1.12", "@types/node": "^22.5.4", "@vitejs/plugin-vue": "5.1.3", @@ -107,6 +107,7 @@ "eslint": "^9.9.1", "fast-glob": "^3.3.2", "rimraf": "^6.0.1", + "rolldown": "^0.13.1", "rollup": "^4.21.2", "rollup-plugin-esbuild": "^6.1.1", "slash": "^5.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 32bac53..1280280 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,8 +40,8 @@ importers: specifier: ^2.0.2 version: 2.0.2 '@sxzz/test-utils': - specifier: ^0.2.1 - version: 0.2.1(vitest@2.0.5(@types/node@22.5.4)(@vitest/ui@2.0.5)(sass@1.78.0)(terser@5.31.6)) + specifier: ^0.3.0 + version: 0.3.0(rolldown@0.13.1)(rollup@4.21.2)(vitest@2.0.5(@types/node@22.5.4)(@vitest/ui@2.0.5)(sass@1.78.0)(terser@5.31.6)) '@types/debug': specifier: ^4.1.12 version: 4.1.12 @@ -69,6 +69,9 @@ importers: rimraf: specifier: ^6.0.1 version: 6.0.1 + rolldown: + specifier: ^0.13.1 + version: 0.13.1 rollup: specifier: ^4.21.2 version: 4.21.2 @@ -1041,11 +1044,18 @@ packages: '@sxzz/prettier-config@2.0.2': resolution: {integrity: sha512-yBKxaIr6WqgHTaLgX0g6gxNuMllkwR1QGeXynfJGmyD+XrZqO96t9xT5Mfbr9H3+N56SXY9/yFvP/e8lcJI7KA==} - '@sxzz/test-utils@0.2.1': - resolution: {integrity: sha512-DmOdRZE68LW73YIT3pA6c6wErace7coM4sptQgCoV6IGZLPxWeGdoaxS8U/HWfuQCJ++n/zo3FOZoYuLxbQPhg==} + '@sxzz/test-utils@0.3.0': + resolution: {integrity: sha512-et8R5tInmzmqT1STb78onyQKlsesAxhJjWjJzrQzChWc4SsiyhQ+PuoTBS46Vwf5CLBq0/G/U0oJ/J89cU+XEg==} engines: {node: '>=18.12.0'} peerDependencies: + rolldown: '*' + rollup: ^4.1.0 vitest: ^2.0.3 + peerDependenciesMeta: + rolldown: + optional: true + rollup: + optional: true '@tsconfig/node10@1.0.11': resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} @@ -4914,12 +4924,14 @@ snapshots: '@sxzz/prettier-config@2.0.2': {} - '@sxzz/test-utils@0.2.1(vitest@2.0.5(@types/node@22.5.4)(@vitest/ui@2.0.5)(sass@1.78.0)(terser@5.31.6))': + '@sxzz/test-utils@0.3.0(rolldown@0.13.1)(rollup@4.21.2)(vitest@2.0.5(@types/node@22.5.4)(@vitest/ui@2.0.5)(sass@1.78.0)(terser@5.31.6))': dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.21.2) fast-glob: 3.3.2 - rollup: 4.21.2 vitest: 2.0.5(@types/node@22.5.4)(@vitest/ui@2.0.5)(sass@1.78.0)(terser@5.31.6) + optionalDependencies: + rolldown: 0.13.1 + rollup: 4.21.2 '@tsconfig/node10@1.0.11': {} diff --git a/tests/__snapshots__/rollup.test.ts.snap b/tests/__snapshots__/rollup.test.ts.snap index 9424cdc..cbb47fb 100644 --- a/tests/__snapshots__/rollup.test.ts.snap +++ b/tests/__snapshots__/rollup.test.ts.snap @@ -2,6 +2,32 @@ exports[`rollup > tests/fixtures/basic.vue > isProduction = false 1`] = ` "// basic.js +import { createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, openBlock as _openBlock } from "vue"; + +//#region \\0/plugin-vue/export-helper +var export_helper_default = (sfc, props) => { + const target = sfc.__vccOpts || sfc; + for (const [key, val] of props) { + target[key] = val; + } + return target; +}; + +//#endregion +//#region tests/fixtures/basic.vue +console.log("Hello world"); +const _sfc_main = {}; +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + return _openBlock(), _createElementBlock("div", null, _cache[0] || (_cache[0] = [_createElementVNode("h1", null, "Hello World", -1)])); +} +var basic_default = /*#__PURE__*/ export_helper_default(_sfc_main, [["render", _sfc_render], ["__file", "/Users/kevin/Developer/open-source/unplugin-vue/tests/fixtures/basic.vue"]]); + +//#endregion +export { basic_default as default };" +`; + +exports[`rollup > tests/fixtures/basic.vue > isProduction = false 2`] = ` +"// basic.js import { openBlock, createElementBlock, createElementVNode } from 'vue'; var _export_sfc = (sfc, props) => { @@ -29,6 +55,32 @@ export { basic as default }; exports[`rollup > tests/fixtures/basic.vue > isProduction = true 1`] = ` "// basic.js +import { createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, openBlock as _openBlock } from "vue"; + +//#region \\0/plugin-vue/export-helper +var export_helper_default = (sfc, props) => { + const target = sfc.__vccOpts || sfc; + for (const [key, val] of props) { + target[key] = val; + } + return target; +}; + +//#endregion +//#region tests/fixtures/basic.vue +console.log("Hello world"); +const _sfc_main = {}; +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + return _openBlock(), _createElementBlock("div", null, _cache[0] || (_cache[0] = [_createElementVNode("h1", null, "Hello World", -1)])); +} +var basic_default = /*#__PURE__*/ export_helper_default(_sfc_main, [["render", _sfc_render]]); + +//#endregion +export { basic_default as default };" +`; + +exports[`rollup > tests/fixtures/basic.vue > isProduction = true 2`] = ` +"// basic.js import { openBlock, createElementBlock, createElementVNode } from 'vue'; var _export_sfc = (sfc, props) => { @@ -56,6 +108,21 @@ export { basic as default }; exports[`rollup > tests/fixtures/reactivity-transform.ts > isProduction = false 1`] = ` "// reactivity-transform.js +import { ref } from "vue"; + +//#region tests/fixtures/reactivity-transform.ts +const ref1 = $ref("hello"); +const ref2 = $(ref("hello")); +console.log(ref1); +console.log(ref2); +console.log($$(ref1)); +console.log($$(ref2)); + +//#endregion" +`; + +exports[`rollup > tests/fixtures/reactivity-transform.ts > isProduction = false 2`] = ` +"// reactivity-transform.js import { ref } from 'vue'; const ref1 = $ref("hello"); @@ -69,6 +136,21 @@ console.log($$(ref2)); exports[`rollup > tests/fixtures/reactivity-transform.ts > isProduction = true 1`] = ` "// reactivity-transform.js +import { ref } from "vue"; + +//#region tests/fixtures/reactivity-transform.ts +const ref1 = $ref("hello"); +const ref2 = $(ref("hello")); +console.log(ref1); +console.log(ref2); +console.log($$(ref1)); +console.log($$(ref2)); + +//#endregion" +`; + +exports[`rollup > tests/fixtures/reactivity-transform.ts > isProduction = true 2`] = ` +"// reactivity-transform.js import { ref } from 'vue'; const ref1 = $ref("hello"); @@ -82,6 +164,49 @@ console.log($$(ref2)); exports[`rollup > tests/fixtures/reactivity-transform.vue > isProduction = false 1`] = ` "// reactivity-transform.js +import { ref } from "vue"; + +//#region \\0/plugin-vue/export-helper +var export_helper_default = (sfc, props) => { + const target = sfc.__vccOpts || sfc; + for (const [key, val] of props) { + target[key] = val; + } + return target; +}; + +//#endregion +//#region tests/fixtures/reactivity-transform.vue +const _sfc_main = { + __name: "reactivity-transform", + setup(__props, { expose: __expose }) { + __expose(); + const ref1 = $ref("hello"); + const ref2 = $(ref("hello")); + console.log(ref1); + console.log(ref2); + console.log($$(ref1)); + console.log($$(ref2)); + const __returned__ = { + ref1, + ref2, + ref + }; + Object.defineProperty(__returned__, "__isScriptSetup", { + enumerable: false, + value: true + }); + return __returned__; + } +}; +var reactivity_transform_default = /*#__PURE__*/ export_helper_default(_sfc_main, [["__file", "/Users/kevin/Developer/open-source/unplugin-vue/tests/fixtures/reactivity-transform.vue"]]); + +//#endregion +export { reactivity_transform_default as default };" +`; + +exports[`rollup > tests/fixtures/reactivity-transform.vue > isProduction = false 2`] = ` +"// reactivity-transform.js import { ref } from 'vue'; var _export_sfc = (sfc, props) => { @@ -119,6 +244,29 @@ export { reactivityTransform as default }; exports[`rollup > tests/fixtures/reactivity-transform.vue > isProduction = true 1`] = ` "// reactivity-transform.js +import { ref } from "vue"; + +//#region tests/fixtures/reactivity-transform.vue +const _sfc_main = { + __name: "reactivity-transform", + setup(__props) { + const ref1 = $ref("hello"); + const ref2 = $(ref("hello")); + console.log(ref1); + console.log(ref2); + console.log($$(ref1)); + console.log($$(ref2)); + return () => {}; + } +}; +var reactivity_transform_default = _sfc_main; + +//#endregion +export { reactivity_transform_default as default };" +`; + +exports[`rollup > tests/fixtures/reactivity-transform.vue > isProduction = true 2`] = ` +"// reactivity-transform.js import { ref } from 'vue'; const _sfc_main = { @@ -144,6 +292,43 @@ export { _sfc_main as default }; exports[`rollup > tests/fixtures/script-setup.vue > isProduction = false 1`] = ` "// script-setup.js +import { createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, openBlock as _openBlock } from "vue"; + +//#region \\0/plugin-vue/export-helper +var export_helper_default = (sfc, props) => { + const target = sfc.__vccOpts || sfc; + for (const [key, val] of props) { + target[key] = val; + } + return target; +}; + +//#endregion +//#region tests/fixtures/script-setup.vue +const foo = "bar"; +const _sfc_main = { + __name: "script-setup", + setup(__props, { expose: __expose }) { + __expose(); + const __returned__ = { foo }; + Object.defineProperty(__returned__, "__isScriptSetup", { + enumerable: false, + value: true + }); + return __returned__; + } +}; +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + return _openBlock(), _createElementBlock("div", null, _cache[0] || (_cache[0] = [_createElementVNode("h1", null, "Hello World", -1)])); +} +var script_setup_default = /*#__PURE__*/ export_helper_default(_sfc_main, [["render", _sfc_render], ["__file", "/Users/kevin/Developer/open-source/unplugin-vue/tests/fixtures/script-setup.vue"]]); + +//#endregion +export { script_setup_default as default };" +`; + +exports[`rollup > tests/fixtures/script-setup.vue > isProduction = false 2`] = ` +"// script-setup.js import { openBlock, createElementBlock, createElementVNode } from 'vue'; var _export_sfc = (sfc, props) => { @@ -182,6 +367,26 @@ export { scriptSetup as default }; exports[`rollup > tests/fixtures/script-setup.vue > isProduction = true 1`] = ` "// script-setup.js +import { createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, openBlock as _openBlock } from "vue"; + +//#region tests/fixtures/script-setup.vue +const foo = "bar"; +const _sfc_main = { + __name: "script-setup", + setup(__props) { + return (_ctx, _cache) => { + return _openBlock(), _createElementBlock("div", null, _cache[0] || (_cache[0] = [_createElementVNode("h1", null, "Hello World", -1)])); + }; + } +}; +var script_setup_default = _sfc_main; + +//#endregion +export { script_setup_default as default };" +`; + +exports[`rollup > tests/fixtures/script-setup.vue > isProduction = true 2`] = ` +"// script-setup.js import { openBlock, createElementBlock, createElementVNode } from 'vue'; const foo = 'bar'; @@ -206,6 +411,63 @@ export { _sfc_main as default }; exports[`rollup > tests/fixtures/script-setup-ts.vue > isProduction = false 1`] = ` "// script-setup-ts.js +import { createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, defineComponent as _defineComponent, openBlock as _openBlock } from "vue"; + +//#region tests/fixtures/script-setup-ts.vue?vue&type=script&setup=true&lang.ts +const str = "bar"; +var script_setup_ts_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ _defineComponent({ + __name: "script-setup-ts", + props: { + foo: { + type: String, + required: true, + default: "123" + }, + bar: { + type: Number, + required: true, + default: 123 + }, + baz: { + type: Boolean, + required: true, + default: true + } + }, + setup(__props, { expose: __expose }) { + __expose({ str }); + const __returned__ = { str }; + Object.defineProperty(__returned__, "__isScriptSetup", { + enumerable: false, + value: true + }); + return __returned__; + } +}); + +//#endregion +//#region \\0/plugin-vue/export-helper +var export_helper_default = (sfc, props) => { + const target = sfc.__vccOpts || sfc; + for (const [key, val] of props) { + target[key] = val; + } + return target; +}; + +//#endregion +//#region tests/fixtures/script-setup-ts.vue +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + return _openBlock(), _createElementBlock("div", null, _cache[0] || (_cache[0] = [_createElementVNode("h1", null, "Hello World", -1)])); +} +var script_setup_ts_default = /* @__PURE__ */ export_helper_default(script_setup_ts_vue_vue_type_script_setup_true_lang_default, [["render", _sfc_render], ["__file", "/Users/kevin/Developer/open-source/unplugin-vue/tests/fixtures/script-setup-ts.vue"]]); + +//#endregion +export { script_setup_ts_default as default };" +`; + +exports[`rollup > tests/fixtures/script-setup-ts.vue > isProduction = false 2`] = ` +"// script-setup-ts.js import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue'; const str = "bar"; @@ -253,6 +515,38 @@ export { scriptSetupTs as default }; exports[`rollup > tests/fixtures/script-setup-ts.vue > isProduction = true 1`] = ` "// script-setup-ts.js +import { createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, defineComponent as _defineComponent, openBlock as _openBlock } from "vue"; + +//#region tests/fixtures/script-setup-ts.vue?vue&type=script&setup=true&lang.ts +const str = "bar"; +var script_setup_ts_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ _defineComponent({ + __name: "script-setup-ts", + props: { + foo: { default: "123" }, + bar: { default: 123 }, + baz: { + type: Boolean, + default: true + } + }, + setup(__props, { expose: __expose }) { + __expose({ str }); + return (_ctx, _cache) => { + return _openBlock(), _createElementBlock("div", null, _cache[0] || (_cache[0] = [_createElementVNode("h1", null, "Hello World", -1)])); + }; + } +}); + +//#endregion +//#region tests/fixtures/script-setup-ts.vue +var script_setup_ts_default = script_setup_ts_vue_vue_type_script_setup_true_lang_default; + +//#endregion +export { script_setup_ts_default as default };" +`; + +exports[`rollup > tests/fixtures/script-setup-ts.vue > isProduction = true 2`] = ` +"// script-setup-ts.js import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue'; const str = "bar"; @@ -285,93 +579,20 @@ export { script_setup_ts_vue_vue_type_script_setup_true_lang_default as default " `; -exports[`rollup > tests/fixtures/sfc-src.vue > isProduction = false 1`] = ` -"// sfc-src.js -import { defineComponent, openBlock, createElementBlock, createElementVNode, toDisplayString } from 'vue'; - -var src_script_ts_vue_type_script_src_true_lang_default = defineComponent({ - setup() { - return []; - } -}); - -function render(_ctx, _cache, $props, $setup, $data, $options) { - return openBlock(), createElementBlock("div", null, [ - _cache[0] || (_cache[0] = createElementVNode( - "h1", - null, - "Hello World", - -1 - /* HOISTED */ - )), - createElementVNode( - "h2", - null, - toDisplayString(_ctx.msg), - 1 - /* TEXT */ - ) - ]); -} - -var _export_sfc = (sfc, props) => { - const target = sfc.__vccOpts || sfc; - for (const [key, val] of props) { - target[key] = val; - } - return target; -}; - -var sfcSrc = /*#__PURE__*/_export_sfc(src_script_ts_vue_type_script_src_true_lang_default, [['render',render],['__file','#FILE#']]); - -export { sfcSrc as default }; -" -`; - -exports[`rollup > tests/fixtures/sfc-src.vue > isProduction = true 1`] = ` -"// sfc-src.js -import { defineComponent, openBlock, createElementBlock, createElementVNode, toDisplayString } from 'vue'; - -var src_script_ts_vue_type_script_src_true_lang_default = defineComponent({ - setup() { - return []; - } -}); - -function render(_ctx, _cache, $props, $setup, $data, $options) { - return openBlock(), createElementBlock("div", null, [ - _cache[0] || (_cache[0] = createElementVNode( - "h1", - null, - "Hello World", - -1 - /* HOISTED */ - )), - createElementVNode( - "h2", - null, - toDisplayString(_ctx.msg), - 1 - /* TEXT */ - ) - ]); -} - -var _export_sfc = (sfc, props) => { - const target = sfc.__vccOpts || sfc; - for (const [key, val] of props) { - target[key] = val; - } - return target; -}; +exports[`rollup > tests/fixtures/src-script.ts > isProduction = false 1`] = ` +"// src-script.js +import { defineComponent } from "vue"; -var sfcSrc = /*#__PURE__*/_export_sfc(src_script_ts_vue_type_script_src_true_lang_default, [['render',render]]); +//#region tests/fixtures/src-script.ts +var src_script_default = defineComponent({ setup() { + return []; +} }); -export { sfcSrc as default }; -" +//#endregion +export { src_script_default as default };" `; -exports[`rollup > tests/fixtures/src-script.ts > isProduction = false 1`] = ` +exports[`rollup > tests/fixtures/src-script.ts > isProduction = false 2`] = ` "// src-script.js import { defineComponent } from 'vue'; @@ -387,6 +608,19 @@ export { src_script_default as default }; exports[`rollup > tests/fixtures/src-script.ts > isProduction = true 1`] = ` "// src-script.js +import { defineComponent } from "vue"; + +//#region tests/fixtures/src-script.ts +var src_script_default = defineComponent({ setup() { + return []; +} }); + +//#endregion +export { src_script_default as default };" +`; + +exports[`rollup > tests/fixtures/src-script.ts > isProduction = true 2`] = ` +"// src-script.js import { defineComponent } from 'vue'; var src_script_default = defineComponent({ @@ -401,6 +635,34 @@ export { src_script_default as default }; exports[`rollup > tests/fixtures/typescript.vue > isProduction = false 1`] = ` "// typescript.js + +//#region tests/fixtures/typescript.vue?vue&type=script&lang.ts +const str = "123"; +const bool = true; +const count = 123; +function foo(str$1) {} +var typescript_vue_vue_type_script_lang_default = {}; + +//#endregion +//#region \\0/plugin-vue/export-helper +var export_helper_default = (sfc, props) => { + const target = sfc.__vccOpts || sfc; + for (const [key, val] of props) { + target[key] = val; + } + return target; +}; + +//#endregion +//#region tests/fixtures/typescript.vue +var typescript_default = /* @__PURE__ */ export_helper_default(typescript_vue_vue_type_script_lang_default, [["__file", "/Users/kevin/Developer/open-source/unplugin-vue/tests/fixtures/typescript.vue"]]); + +//#endregion +export { typescript_default as default };" +`; + +exports[`rollup > tests/fixtures/typescript.vue > isProduction = false 2`] = ` +"// typescript.js const str = "123"; const bool = true; const count = 123; @@ -424,6 +686,24 @@ export { typescript as default }; exports[`rollup > tests/fixtures/typescript.vue > isProduction = true 1`] = ` "// typescript.js + +//#region tests/fixtures/typescript.vue?vue&type=script&lang.ts +const str = "123"; +const bool = true; +const count = 123; +function foo(str$1) {} +var typescript_vue_vue_type_script_lang_default = {}; + +//#endregion +//#region tests/fixtures/typescript.vue +var typescript_default = typescript_vue_vue_type_script_lang_default; + +//#endregion +export { typescript_default as default };" +`; + +exports[`rollup > tests/fixtures/typescript.vue > isProduction = true 2`] = ` +"// typescript.js const str = "123"; const bool = true; const count = 123; diff --git a/tests/rollup.test.ts b/tests/rollup.test.ts index f187898..6ed6a10 100644 --- a/tests/rollup.test.ts +++ b/tests/rollup.test.ts @@ -1,19 +1,28 @@ import process from 'node:process' -import { rollupBuild, testFixtures } from '@sxzz/test-utils' +import { rolldownBuild, rollupBuild, testFixtures } from '@sxzz/test-utils' import ViteVue from '@vitejs/plugin-vue' import esbuild from 'rollup-plugin-esbuild' import { describe, expect } from 'vitest' import * as vueCompiler from 'vue/compiler-sfc' -import Vue from '../src/rollup' +import Vue from '../src' import type { Options } from '../src/api' +import type { Plugin as RolldownPlugin } from 'rolldown' +import type { Plugin } from 'rollup' -async function getCode(file: string, plugin: any) { +async function getRollupCode(file: string, plugin: Plugin) { const bundle = await rollupBuild(file, [plugin, esbuild({ format: 'esm' })], { external: ['vue'], }) return bundle.snapshot } +async function getRolldownCode(file: string, plugin: RolldownPlugin) { + const bundle = await rolldownBuild(file, [plugin], { + external: ['vue'], + }) + return bundle.snapshot +} + function createPlugins(opt: Options & { root: string }) { const vite = ViteVue(opt) // @ts-expect-error @@ -27,7 +36,8 @@ function createPlugins(opt: Options & { root: string }) { define: {}, } as any) return { - unplugin: Vue(opt), + rollup: Vue.rollup(opt), + rolldown: Vue.rolldown(opt), vite, } } @@ -36,17 +46,20 @@ describe('rollup', async () => { await testFixtures( 'tests/fixtures/*.{vue,js,ts}', async (args, id) => { - const { unplugin, vite } = createPlugins({ + const { rollup, rolldown, vite } = createPlugins({ root: process.cwd(), compiler: vueCompiler, isProduction: args.isProduction, }) - const viteCode = await getCode(id, vite) - const unpluginCode = await getCode(id, unplugin) + const viteCode = await getRollupCode(id, vite) + const rollupCode = await getRollupCode(id, rollup) + const rolldownCode = await getRolldownCode(id, rolldown) - expect(viteCode).toBe(unpluginCode) - return unpluginCode.replaceAll(JSON.stringify(id), "'#FILE#'") + expect(viteCode).toBe(rollupCode) + // expect(rollupCode).toBe(rolldownCode) + expect(rolldownCode).matchSnapshot() + return rollupCode.replaceAll(JSON.stringify(id), "'#FILE#'") }, { params: [['isProduction', [true, false]]],