Skip to content

Commit bd7c148

Browse files
authored
fix(build): fix define plugin spread operations (#4397)
1 parent 6017ddb commit bd7c148

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

packages/playground/define/__tests__/define.spec.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,10 @@ test('string', async () => {
1414
expect(await page.textContent('.process-as-property')).toBe(
1515
defines.__OBJ__.process.env.SOMEVAR
1616
)
17+
expect(await page.textContent('.spread-object')).toBe(
18+
JSON.stringify({ SOMEVAR: defines['process.env.SOMEVAR'] })
19+
)
20+
expect(await page.textContent('.spread-array')).toBe(
21+
JSON.stringify([...defines.__STRING__])
22+
)
1723
})

packages/playground/define/index.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ <h1>Define</h1>
77
<p>Object <span class="pre object"></span></p>
88
<p>Env Var <code class="env-var"></code></p>
99
<p>process as property: <code class="process-as-property"></code></p>
10+
<p>spread object: <code class="spread-object"></code></p>
11+
<p>spread array: <code class="spread-array"></code></p>
1012

1113
<script type="module">
1214
text('.exp', __EXP__)
@@ -16,6 +18,13 @@ <h1>Define</h1>
1618
text('.object', JSON.stringify(__OBJ__, null, 2))
1719
text('.env-var', process.env.SOMEVAR)
1820
text('.process-as-property', __OBJ__.process.env.SOMEVAR)
21+
text(
22+
'.spread-object',
23+
JSON.stringify({
24+
...(process.env.SOMEVAR ? { SOMEVAR: `"${process.env.SOMEVAR}"` } : {})
25+
})
26+
)
27+
text('.spread-array', JSON.stringify([...`"${__STRING__}"`]))
1928

2029
function text(el, text) {
2130
document.querySelector(el).textContent = text

packages/vite/src/node/plugins/define.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ export function definePlugin(config: ResolvedConfig): Plugin {
4646
}
4747

4848
const pattern = new RegExp(
49-
'(?<!\\.)\\b(' +
49+
// Do not allow preceding '.', but do allow preceding '...' for spread operations
50+
'(?<!(?<!\\.\\.)\\.)\\b(' +
5051
Object.keys(replacements)
5152
.map((str) => {
5253
return str.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&')

0 commit comments

Comments
 (0)