}"
`;
+exports[`CSS vars injection codegen w/ <script setup> using the same var multiple times 1`] = `
+"import { useCssVars as _useCssVars, unref as _unref } from 'vue'
+
+export default {
+ expose: [],
+ setup(__props) {
+
+_useCssVars(_ctx => ({
+ \\"xxxxxxxx-color\\": (color)
+}))
+
+ const color = 'red'
+
+return { color }
+}
+
+}"
+`;
+
exports[`CSS vars injection generating correct code for nested paths 1`] = `
"const a = 1
const __default__ = {}
).content
)
})
+
+ test('w/ <script setup> using the same var multiple times', () => {
+ const { content } = compileSFCScript(
+ `<script setup>
+ const color = 'red'
+ </script>\n` +
+ `<style>
+ div {
+ color: v-bind(color);
+ }
+ p {
+ color: v-bind(color);
+ }
+ </style>`
+ )
+ // color should only be injected once, even if it is twice in style
+ expect(content).toMatch(`_useCssVars(_ctx => ({
+ "${mockId}-color": (color)
+})`)
+ assertCode(content)
+ })
})
})
sfc.styles.forEach(style => {
let match
while ((match = cssVarRE.exec(style.content))) {
- vars.push(match[1] || match[2] || match[3])
+ const variable = match[1] || match[2] || match[3]
+ if (!vars.includes(variable)) {
+ vars.push(variable)
+ }
}
})
return vars