From 3c1983e8ab68523b43ed2bd487eb82cf7903da14 Mon Sep 17 00:00:00 2001 From: tycho Date: Fri, 14 Mar 2025 16:06:11 +0800 Subject: [PATCH] fix(plugin-vue): properly interpret boolean values in `define` --- packages/plugin-vue-jsx/src/index.ts | 17 ++++++++++++++--- packages/plugin-vue/src/index.ts | 15 ++++++++++++--- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/packages/plugin-vue-jsx/src/index.ts b/packages/plugin-vue-jsx/src/index.ts index d291472c..7234bd39 100644 --- a/packages/plugin-vue-jsx/src/index.ts +++ b/packages/plugin-vue-jsx/src/index.ts @@ -53,6 +53,13 @@ function vueJsxPlugin(options: Options = {}): Plugin { name: 'vite:vue-jsx', config(config) { + const parseDefine = (v: unknown) => { + try { + return typeof v === 'string' ? JSON.parse(v) : v + } catch (err) { + return v + } + } return { // only apply esbuild to ts files // since we are handling jsx and tsx now @@ -60,10 +67,14 @@ function vueJsxPlugin(options: Options = {}): Plugin { include: /\.ts$/, }, define: { - __VUE_OPTIONS_API__: config.define?.__VUE_OPTIONS_API__ ?? true, - __VUE_PROD_DEVTOOLS__: config.define?.__VUE_PROD_DEVTOOLS__ ?? false, + __VUE_OPTIONS_API__: + parseDefine(config.define?.__VUE_OPTIONS_API__) ?? true, + __VUE_PROD_DEVTOOLS__: + parseDefine(config.define?.__VUE_PROD_DEVTOOLS__) ?? false, __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: - config.define?.__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ ?? false, + parseDefine( + config.define?.__VUE_PROD_HYDRATION_MISMATCH_DETAILS__, + ) ?? false, }, } }, diff --git a/packages/plugin-vue/src/index.ts b/packages/plugin-vue/src/index.ts index 32e1ddf4..3fce93c9 100644 --- a/packages/plugin-vue/src/index.ts +++ b/packages/plugin-vue/src/index.ts @@ -245,6 +245,13 @@ export default function vuePlugin(rawOptions: Options = {}): Plugin { }, config(config) { + const parseDefine = (v: unknown) => { + try { + return typeof v === 'string' ? JSON.parse(v) : v + } catch (err) { + return v + } + } return { resolve: { dedupe: config.build?.ssr ? [] : ['vue'], @@ -252,15 +259,17 @@ export default function vuePlugin(rawOptions: Options = {}): Plugin { define: { __VUE_OPTIONS_API__: options.value.features?.optionsAPI ?? - config.define?.__VUE_OPTIONS_API__ ?? + parseDefine(config.define?.__VUE_OPTIONS_API__) ?? true, __VUE_PROD_DEVTOOLS__: (options.value.features?.prodDevtools || - config.define?.__VUE_PROD_DEVTOOLS__) ?? + parseDefine(config.define?.__VUE_PROD_DEVTOOLS__)) ?? false, __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: (options.value.features?.prodHydrationMismatchDetails || - config.define?.__VUE_PROD_HYDRATION_MISMATCH_DETAILS__) ?? + parseDefine( + config.define?.__VUE_PROD_HYDRATION_MISMATCH_DETAILS__, + )) ?? false, }, ssr: {