Skip to content

Commit bb603d3

Browse files
TobiasMelenTobias Melénpatak-dev
authoredMay 10, 2022
fix(glob): wrap glob compile output in function invocation (#3682)
Co-authored-by: Tobias Melén <tobias.melen@makingwaves.com> Co-authored-by: patak-dev <matias.capeletto@gmail.com>
1 parent 5484c8c commit bb603d3

File tree

6 files changed

+98
-68
lines changed

6 files changed

+98
-68
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/* global document */
2+
document &&
3+
(document.querySelector('.side-effect-result').textContent =
4+
'Hello from side effect')

‎packages/vite/src/node/__tests__/plugins/importGlob/__snapshots__/fixture.test.ts.snap

+60-60
Original file line numberDiff line numberDiff line change
@@ -10,67 +10,67 @@ import { name as __vite_glob_3_2 } from \\"./modules/index.ts\\"
1010
import { default as __vite_glob_5_0 } from \\"./modules/a.ts?raw\\"
1111
import { default as __vite_glob_5_1 } from \\"./modules/b.ts?raw\\"
1212
import \\"../../../../../../types/importMeta\\";
13-
export const basic = {
13+
export const basic = Object.assign({
1414
\\"./modules/a.ts\\": () => import(\\"./modules/a.ts\\"),
1515
\\"./modules/b.ts\\": () => import(\\"./modules/b.ts\\"),
1616
\\"./modules/index.ts\\": () => import(\\"./modules/index.ts\\")
17-
};
18-
export const basicEager = {
17+
});
18+
export const basicEager = Object.assign({
1919
\\"./modules/a.ts\\": __vite_glob_1_0,
2020
\\"./modules/b.ts\\": __vite_glob_1_1,
2121
\\"./modules/index.ts\\": __vite_glob_1_2
22-
};
23-
export const ignore = {
22+
});
23+
export const ignore = Object.assign({
2424
\\"./modules/a.ts\\": () => import(\\"./modules/a.ts\\"),
2525
\\"./modules/b.ts\\": () => import(\\"./modules/b.ts\\")
26-
};
27-
export const namedEager = {
26+
});
27+
export const namedEager = Object.assign({
2828
\\"./modules/a.ts\\": __vite_glob_3_0,
2929
\\"./modules/b.ts\\": __vite_glob_3_1,
3030
\\"./modules/index.ts\\": __vite_glob_3_2
31-
};
32-
export const namedDefault = {
31+
});
32+
export const namedDefault = Object.assign({
3333
\\"./modules/a.ts\\": () => import(\\"./modules/a.ts\\").then(m => m[\\"default\\"]),
3434
\\"./modules/b.ts\\": () => import(\\"./modules/b.ts\\").then(m => m[\\"default\\"]),
3535
\\"./modules/index.ts\\": () => import(\\"./modules/index.ts\\").then(m => m[\\"default\\"])
36-
};
37-
export const eagerAs = {
36+
});
37+
export const eagerAs = Object.assign({
3838
\\"./modules/a.ts\\": __vite_glob_5_0,
3939
\\"./modules/b.ts\\": __vite_glob_5_1
40-
};
41-
export const rawImportModule = {
40+
});
41+
export const rawImportModule = Object.assign({
4242
\\"./modules/a.ts\\": () => import(\\"./modules/a.ts?raw\\"),
4343
\\"./modules/b.ts\\": () => import(\\"./modules/b.ts?raw\\")
44-
};
45-
export const excludeSelf = {
44+
});
45+
export const excludeSelf = Object.assign({
4646
\\"./sibling.ts\\": () => import(\\"./sibling.ts\\")
47-
};
48-
export const customQueryString = {
47+
});
48+
export const customQueryString = Object.assign({
4949
\\"./sibling.ts\\": () => import(\\"./sibling.ts?custom\\")
50-
};
51-
export const customQueryObject = {
50+
});
51+
export const customQueryObject = Object.assign({
5252
\\"./sibling.ts\\": () => import(\\"./sibling.ts?foo=bar&raw=true\\")
53-
};
54-
export const parent = {
53+
});
54+
export const parent = Object.assign({
5555
56-
};
57-
export const rootMixedRelative = {
56+
});
57+
export const rootMixedRelative = Object.assign({
5858
\\"/css.spec.ts\\": () => import(\\"../../css.spec.ts?url\\").then(m => m[\\"default\\"]),
5959
\\"/define.spec.ts\\": () => import(\\"../../define.spec.ts?url\\").then(m => m[\\"default\\"]),
6060
\\"/import.spec.ts\\": () => import(\\"../../import.spec.ts?url\\").then(m => m[\\"default\\"]),
6161
\\"/importGlob/fixture-b/a.ts\\": () => import(\\"../fixture-b/a.ts?url\\").then(m => m[\\"default\\"]),
6262
\\"/importGlob/fixture-b/b.ts\\": () => import(\\"../fixture-b/b.ts?url\\").then(m => m[\\"default\\"]),
6363
\\"/importGlob/fixture-b/index.ts\\": () => import(\\"../fixture-b/index.ts?url\\").then(m => m[\\"default\\"])
64-
};
65-
export const cleverCwd1 = {
64+
});
65+
export const cleverCwd1 = Object.assign({
6666
\\"./node_modules/framework/pages/hello.page.js\\": () => import(\\"./node_modules/framework/pages/hello.page.js\\")
67-
};
68-
export const cleverCwd2 = {
67+
});
68+
export const cleverCwd2 = Object.assign({
6969
\\"./modules/a.ts\\": () => import(\\"./modules/a.ts\\"),
7070
\\"./modules/b.ts\\": () => import(\\"./modules/b.ts\\"),
7171
\\"../fixture-b/a.ts\\": () => import(\\"../fixture-b/a.ts\\"),
7272
\\"../fixture-b/b.ts\\": () => import(\\"../fixture-b/b.ts\\")
73-
};
73+
});
7474
"
7575
`;
7676

@@ -84,79 +84,79 @@ import { name as __vite_glob_3_2 } from \\"./modules/index.ts\\"
8484
import { default as __vite_glob_5_0 } from \\"./modules/a.ts?raw\\"
8585
import { default as __vite_glob_5_1 } from \\"./modules/b.ts?raw\\"
8686
import \\"../../../../../../types/importMeta\\";
87-
export const basic = {
87+
export const basic = Object.assign({
8888
\\"./modules/a.ts\\": () => import(\\"./modules/a.ts\\"),
8989
\\"./modules/b.ts\\": () => import(\\"./modules/b.ts\\"),
9090
\\"./modules/index.ts\\": () => import(\\"./modules/index.ts\\")
91-
};
92-
export const basicEager = {
91+
});
92+
export const basicEager = Object.assign({
9393
\\"./modules/a.ts\\": __vite_glob_1_0,
9494
\\"./modules/b.ts\\": __vite_glob_1_1,
9595
\\"./modules/index.ts\\": __vite_glob_1_2
96-
};
97-
export const ignore = {
96+
});
97+
export const ignore = Object.assign({
9898
\\"./modules/a.ts\\": () => import(\\"./modules/a.ts\\"),
9999
\\"./modules/b.ts\\": () => import(\\"./modules/b.ts\\")
100-
};
101-
export const namedEager = {
100+
});
101+
export const namedEager = Object.assign({
102102
\\"./modules/a.ts\\": __vite_glob_3_0,
103103
\\"./modules/b.ts\\": __vite_glob_3_1,
104104
\\"./modules/index.ts\\": __vite_glob_3_2
105-
};
106-
export const namedDefault = {
105+
});
106+
export const namedDefault = Object.assign({
107107
\\"./modules/a.ts\\": () => import(\\"./modules/a.ts\\").then(m => m[\\"default\\"]),
108108
\\"./modules/b.ts\\": () => import(\\"./modules/b.ts\\").then(m => m[\\"default\\"]),
109109
\\"./modules/index.ts\\": () => import(\\"./modules/index.ts\\").then(m => m[\\"default\\"])
110-
};
111-
export const eagerAs = {
110+
});
111+
export const eagerAs = Object.assign({
112112
\\"./modules/a.ts\\": __vite_glob_5_0,
113113
\\"./modules/b.ts\\": __vite_glob_5_1
114-
};
115-
export const rawImportModule = {
114+
});
115+
export const rawImportModule = Object.assign({
116116
\\"./modules/a.ts\\": () => import(\\"./modules/a.ts?raw\\"),
117117
\\"./modules/b.ts\\": () => import(\\"./modules/b.ts?raw\\")
118-
};
119-
export const excludeSelf = {
118+
});
119+
export const excludeSelf = Object.assign({
120120
\\"./sibling.ts\\": () => import(\\"./sibling.ts\\")
121-
};
122-
export const customQueryString = {
121+
});
122+
export const customQueryString = Object.assign({
123123
\\"./sibling.ts\\": () => import(\\"./sibling.ts?custom&lang.ts\\")
124-
};
125-
export const customQueryObject = {
124+
});
125+
export const customQueryObject = Object.assign({
126126
\\"./sibling.ts\\": () => import(\\"./sibling.ts?foo=bar&raw=true&lang.ts\\")
127-
};
128-
export const parent = {
127+
});
128+
export const parent = Object.assign({
129129
130-
};
131-
export const rootMixedRelative = {
130+
});
131+
export const rootMixedRelative = Object.assign({
132132
\\"/css.spec.ts\\": () => import(\\"../../css.spec.ts?url&lang.ts\\").then(m => m[\\"default\\"]),
133133
\\"/define.spec.ts\\": () => import(\\"../../define.spec.ts?url&lang.ts\\").then(m => m[\\"default\\"]),
134134
\\"/import.spec.ts\\": () => import(\\"../../import.spec.ts?url&lang.ts\\").then(m => m[\\"default\\"]),
135135
\\"/importGlob/fixture-b/a.ts\\": () => import(\\"../fixture-b/a.ts?url&lang.ts\\").then(m => m[\\"default\\"]),
136136
\\"/importGlob/fixture-b/b.ts\\": () => import(\\"../fixture-b/b.ts?url&lang.ts\\").then(m => m[\\"default\\"]),
137137
\\"/importGlob/fixture-b/index.ts\\": () => import(\\"../fixture-b/index.ts?url&lang.ts\\").then(m => m[\\"default\\"])
138-
};
139-
export const cleverCwd1 = {
138+
});
139+
export const cleverCwd1 = Object.assign({
140140
\\"./node_modules/framework/pages/hello.page.js\\": () => import(\\"./node_modules/framework/pages/hello.page.js\\")
141-
};
142-
export const cleverCwd2 = {
141+
});
142+
export const cleverCwd2 = Object.assign({
143143
\\"./modules/a.ts\\": () => import(\\"./modules/a.ts\\"),
144144
\\"./modules/b.ts\\": () => import(\\"./modules/b.ts\\"),
145145
\\"../fixture-b/a.ts\\": () => import(\\"../fixture-b/a.ts\\"),
146146
\\"../fixture-b/b.ts\\": () => import(\\"../fixture-b/b.ts\\")
147-
};
147+
});
148148
"
149149
`;
150150

151151
exports[`fixture > virtual modules 1`] = `
152-
"{
152+
"Object.assign({
153153
\\"/modules/a.ts\\": () => import(\\"/modules/a.ts\\"),
154154
\\"/modules/b.ts\\": () => import(\\"/modules/b.ts\\"),
155155
\\"/modules/index.ts\\": () => import(\\"/modules/index.ts\\")
156-
}
157-
{
156+
})
157+
Object.assign({
158158
\\"/../fixture-b/a.ts\\": () => import(\\"/../fixture-b/a.ts\\"),
159159
\\"/../fixture-b/b.ts\\": () => import(\\"/../fixture-b/b.ts\\"),
160160
\\"/../fixture-b/index.ts\\": () => import(\\"/../fixture-b/index.ts\\")
161-
}"
161+
})"
162162
`;

‎packages/vite/src/node/plugins/importMetaGlob.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ export async function transformGlobImport(
398398

399399
files.forEach((i) => matchedFiles.add(i))
400400

401-
const replacement = `{\n${objectProps.join(',\n')}\n}`
401+
const replacement = `Object.assign({\n${objectProps.join(',\n')}\n})`
402402
s.overwrite(start, end, replacement)
403403

404404
return staticImports

‎playground/glob-import/__tests__/glob-import.spec.ts

+20-7
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ const json = isBuild
3131
msg: 'baz'
3232
}
3333

34+
const globWithAlias = {
35+
'/dir/alias.js': {
36+
default: 'hi'
37+
}
38+
}
39+
3440
const allResult = {
3541
// JSON file should be properly transformed
3642
'/dir/alias.js': {
@@ -40,14 +46,15 @@ const allResult = {
4046
'/dir/foo.js': {
4147
msg: 'foo'
4248
},
43-
'/dir/index.js': {
44-
globWithAlias: {
45-
'/dir/alias.js': {
46-
default: 'hi'
49+
'/dir/index.js': isBuild
50+
? {
51+
modules: filteredResult,
52+
globWithAlias
4753
}
48-
},
49-
modules: filteredResult
50-
},
54+
: {
55+
globWithAlias,
56+
modules: filteredResult
57+
},
5158
'/dir/nested/bar.js': {
5259
modules: {
5360
'../baz.json': json
@@ -93,6 +100,12 @@ test('import relative glob raw', async () => {
93100
)
94101
})
95102

103+
test('unassigned import processes', async () => {
104+
expect(await page.textContent('.side-effect-result')).toBe(
105+
'Hello from side effect'
106+
)
107+
})
108+
96109
if (!isBuild) {
97110
test('hmr for adding/removing files', async () => {
98111
addFile('dir/a.js', '')

‎playground/glob-import/index.html

+9
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<pre class="result-node_modules"></pre>
33
<pre class="globraw"></pre>
44
<pre class="relative-glob-raw"></pre>
5+
<pre class="side-effect-result"></pre>
56

67
<script type="module" src="./dir/index.js"></script>
78
<script type="module">
@@ -70,3 +71,11 @@
7071
2
7172
)
7273
</script>
74+
75+
<script type="module">
76+
const neverInvoke = () =>
77+
(document.querySelector('.side-effect-result').textContent =
78+
"Syntax generated from 'import.meta.glob' must do ASI.")
79+
const notInvocation = neverInvoke
80+
import.meta.glob('/side-effect/**', { eager: true })
81+
</script>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/* global document */
2+
document &&
3+
(document.querySelector('.side-effect-result').textContent =
4+
'Hello from side effect')

0 commit comments

Comments
 (0)
Please sign in to comment.