Skip to content

Commit dddca12

Browse files
evilebottnawialexander-akait
authored andcommitted
fix: handle [emoji] property
1 parent cb434bf commit dddca12

File tree

9 files changed

+1372
-465
lines changed

9 files changed

+1372
-465
lines changed

package-lock.json

+495-444
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+10-9
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,15 @@
4949
"postcss": "^7.0.23",
5050
"postcss-modules-extract-imports": "^2.0.0",
5151
"postcss-modules-local-by-default": "^3.0.2",
52-
"postcss-modules-scope": "^2.1.0",
52+
"postcss-modules-scope": "^2.1.1",
5353
"postcss-modules-values": "^3.0.0",
5454
"postcss-value-parser": "^4.0.2",
55-
"schema-utils": "^2.5.0"
55+
"schema-utils": "^2.6.0"
5656
},
5757
"devDependencies": {
58-
"@babel/cli": "^7.7.0",
59-
"@babel/core": "^7.7.2",
60-
"@babel/preset-env": "^7.7.1",
58+
"@babel/cli": "^7.7.4",
59+
"@babel/core": "^7.7.4",
60+
"@babel/preset-env": "^7.7.4",
6161
"@commitlint/cli": "^8.2.0",
6262
"@commitlint/config-conventional": "^8.2.0",
6363
"@webpack-contrib/defaults": "^5.0.2",
@@ -68,23 +68,24 @@
6868
"del": "^5.1.0",
6969
"del-cli": "^3.0.0",
7070
"es-check": "^5.1.0",
71-
"eslint": "^6.6.0",
71+
"eslint": "^6.7.1",
7272
"eslint-config-prettier": "^6.7.0",
7373
"eslint-plugin-import": "^2.18.2",
74-
"file-loader": "^4.0.0",
74+
"file-loader": "^5.0.2",
7575
"husky": "^3.1.0",
7676
"jest": "^24.9.0",
7777
"jest-junit": "^9.0.0",
78-
"lint-staged": "^9.4.3",
78+
"lint-staged": "^9.5.0",
7979
"memory-fs": "^0.5.0",
8080
"npm-run-all": "^4.1.5",
8181
"postcss-loader": "^3.0.0",
8282
"postcss-preset-env": "^6.7.0",
8383
"prettier": "^1.19.1",
8484
"sass": "^1.23.7",
85-
"sass-loader": "^7.1.0",
85+
"sass-loader": "^8.0.0",
8686
"standard-version": "^7.0.1",
8787
"strip-ansi": "^6.0.0",
88+
"url-loader": "^3.0.0",
8889
"webpack": "^4.41.2"
8990
},
9091
"keywords": [

test/__snapshots__/loader.test.js.snap

+554
Large diffs are not rendered by default.

test/__snapshots__/modules-option.test.js.snap

+119
Original file line numberDiff line numberDiff line change
@@ -6446,6 +6446,125 @@ exports.locals = {
64466446
64476447
exports[`modules issue #980: warnings 1`] = `Array []`;
64486448
6449+
exports[`modules issue #995: errors 1`] = `Array []`;
6450+
6451+
exports[`modules issue #995: module (evaluated) 1`] = `
6452+
Array [
6453+
Array [
6454+
1,
6455+
"/* class=\\"😀\\" */
6456+
.a {
6457+
color: red;
6458+
}
6459+
6460+
/* class=\\"😀 😓\\" */
6461+
.a.b {
6462+
color: red;
6463+
}
6464+
6465+
/* class=\\"😀\\" > class=\\"😓\\" */
6466+
.a .b {
6467+
color: red;
6468+
}
6469+
6470+
/* class=\\"😀\\" */
6471+
.😀 {
6472+
color: red;
6473+
}
6474+
6475+
/* class=\\"😀 😓\\" */
6476+
.😀.😓 {
6477+
color: red;
6478+
}
6479+
6480+
/* class=\\"😀\\" > class=\\"😓\\" */
6481+
.😀 .😓 {
6482+
color: red;
6483+
}
6484+
6485+
/* class=\\"😀\\" */
6486+
.\\\\1F600 {
6487+
color: red;
6488+
}
6489+
6490+
/* class=\\"😀 😓\\" */
6491+
.\\\\1F600.\\\\1F613 {
6492+
color: red;
6493+
}
6494+
6495+
/* class=\\"😀\\" > class=\\"😓\\" */
6496+
.\\\\1F600 .\\\\1F613 {
6497+
color: red;
6498+
}
6499+
6500+
/* Local */
6501+
6502+
/* class=\\"😀\\" */
6503+
.\\\\1F600 {
6504+
color: red;
6505+
}
6506+
6507+
/* class=\\"😀 😓\\" */
6508+
.\\\\1F600.\\\\1F600 {
6509+
color: red;
6510+
}
6511+
6512+
/* class=\\"😀\\" > class=\\"😓\\" */
6513+
.\\\\1F600 .\\\\1F600 {
6514+
color: red;
6515+
}
6516+
6517+
.\\\\1F600 .a .\\\\1F600 {
6518+
color: red;
6519+
}
6520+
6521+
.\\\\1F600 .\\\\1F600 .\\\\1F600 {
6522+
color: red;
6523+
}
6524+
6525+
div:not(.\\\\1F600) {
6526+
color: red;
6527+
}
6528+
6529+
.\\\\1F600 .b {
6530+
color: red;
6531+
}
6532+
6533+
.b .\\\\1F600 {
6534+
color: red;
6535+
}
6536+
6537+
.\\\\1F613 .\\\\1F600 {
6538+
color: red;
6539+
}
6540+
6541+
.\\\\1F613 .\\\\1F600 {
6542+
color: red;
6543+
}
6544+
6545+
.\\\\1F600 > .\\\\1F600 > .\\\\1F600 {
6546+
color: red;
6547+
}
6548+
",
6549+
"",
6550+
],
6551+
]
6552+
`;
6553+
6554+
exports[`modules issue #995: module 1`] = `
6555+
"exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
6556+
// Module
6557+
exports.push([module.id, \\"/* class=\\\\\\"😀\\\\\\" */\\\\n.a {\\\\n color: red;\\\\n}\\\\n\\\\n/* class=\\\\\\"😀 😓\\\\\\" */\\\\n.a.b {\\\\n color: red;\\\\n}\\\\n\\\\n/* class=\\\\\\"😀\\\\\\" > class=\\\\\\"😓\\\\\\" */\\\\n.a .b {\\\\n color: red;\\\\n}\\\\n\\\\n/* class=\\\\\\"😀\\\\\\" */\\\\n.😀 {\\\\n color: red;\\\\n}\\\\n\\\\n/* class=\\\\\\"😀 😓\\\\\\" */\\\\n.😀.😓 {\\\\n color: red;\\\\n}\\\\n\\\\n/* class=\\\\\\"😀\\\\\\" > class=\\\\\\"😓\\\\\\" */\\\\n.😀 .😓 {\\\\n color: red;\\\\n}\\\\n\\\\n/* class=\\\\\\"😀\\\\\\" */\\\\n.\\\\\\\\1F600 {\\\\n color: red;\\\\n}\\\\n\\\\n/* class=\\\\\\"😀 😓\\\\\\" */\\\\n.\\\\\\\\1F600.\\\\\\\\1F613 {\\\\n color: red;\\\\n}\\\\n\\\\n/* class=\\\\\\"😀\\\\\\" > class=\\\\\\"😓\\\\\\" */\\\\n.\\\\\\\\1F600 .\\\\\\\\1F613 {\\\\n color: red;\\\\n}\\\\n\\\\n/* Local */\\\\n\\\\n/* class=\\\\\\"😀\\\\\\" */\\\\n.\\\\\\\\1F600 {\\\\n color: red;\\\\n}\\\\n\\\\n/* class=\\\\\\"😀 😓\\\\\\" */\\\\n.\\\\\\\\1F600.\\\\\\\\1F600 {\\\\n color: red;\\\\n}\\\\n\\\\n/* class=\\\\\\"😀\\\\\\" > class=\\\\\\"😓\\\\\\" */\\\\n.\\\\\\\\1F600 .\\\\\\\\1F600 {\\\\n color: red;\\\\n}\\\\n\\\\n.\\\\\\\\1F600 .a .\\\\\\\\1F600 {\\\\n color: red;\\\\n}\\\\n\\\\n.\\\\\\\\1F600 .\\\\\\\\1F600 .\\\\\\\\1F600 {\\\\n color: red;\\\\n}\\\\n\\\\ndiv:not(.\\\\\\\\1F600) {\\\\n color: red;\\\\n}\\\\n\\\\n.\\\\\\\\1F600 .b {\\\\n color: red;\\\\n}\\\\n\\\\n.b .\\\\\\\\1F600 {\\\\n color: red;\\\\n}\\\\n\\\\n.\\\\\\\\1F613 .\\\\\\\\1F600 {\\\\n color: red;\\\\n}\\\\n\\\\n.\\\\\\\\1F613 .\\\\\\\\1F600 {\\\\n color: red;\\\\n}\\\\n\\\\n.\\\\\\\\1F600 > .\\\\\\\\1F600 > .\\\\\\\\1F600 {\\\\n color: red;\\\\n}\\\\n\\", \\"\\"]);
6558+
// Exports
6559+
exports.locals = {
6560+
\\"a\\": \\"😀\\",
6561+
\\"b\\": \\"😀\\",
6562+
\\"c\\": \\"😀\\"
6563+
};"
6564+
`;
6565+
6566+
exports[`modules issue #995: warnings 1`] = `Array []`;
6567+
64496568
exports[`modules should accepts all arguments for getLocalIdent option: errors 1`] = `Array []`;
64506569
64516570
exports[`modules should accepts all arguments for getLocalIdent option: locals 1`] = `

test/fixtures/modules/issue-995.css

+93
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/* class="😀" */
2+
.a {
3+
color: red;
4+
}
5+
6+
/* class="😀 😓" */
7+
.a.b {
8+
color: red;
9+
}
10+
11+
/* class="😀" > class="😓" */
12+
.a .b {
13+
color: red;
14+
}
15+
16+
/* class="😀" */
17+
.😀 {
18+
color: red;
19+
}
20+
21+
/* class="😀 😓" */
22+
.😀.😓 {
23+
color: red;
24+
}
25+
26+
/* class="😀" > class="😓" */
27+
.😀 .😓 {
28+
color: red;
29+
}
30+
31+
/* class="😀" */
32+
.\1F600 {
33+
color: red;
34+
}
35+
36+
/* class="😀 😓" */
37+
.\1F600.\1F613 {
38+
color: red;
39+
}
40+
41+
/* class="😀" > class="😓" */
42+
.\1F600 .\1F613 {
43+
color: red;
44+
}
45+
46+
/* Local */
47+
48+
/* class="😀" */
49+
:local(.a) {
50+
color: red;
51+
}
52+
53+
/* class="😀 😓" */
54+
:local(.a.b) {
55+
color: red;
56+
}
57+
58+
/* class="😀" > class="😓" */
59+
:local(.a .b) {
60+
color: red;
61+
}
62+
63+
.\1F600 .a .\1F600 {
64+
color: red;
65+
}
66+
67+
:local(.a .b .a) {
68+
color: red;
69+
}
70+
71+
div:not(:local(.a)) {
72+
color: red;
73+
}
74+
75+
:local(.a) .b {
76+
color: red;
77+
}
78+
79+
.b :local(.a) {
80+
color: red;
81+
}
82+
83+
.\1F613 :local(.a) {
84+
color: red;
85+
}
86+
87+
.\1F613 :local(.a) {
88+
color: red;
89+
}
90+
91+
:local(.a) > :local(.b) > :local(.c) {
92+
color: red;
93+
}
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
body:before {
22
content: '';
3-
background: url('~!!file-loader!./img.png');
3+
background: url('~!!file-loader?esModule=false!./img.png');
44
}

test/helpers.js

+15-11
Original file line numberDiff line numberDiff line change
@@ -142,16 +142,19 @@ const moduleConfig = (config) => {
142142
: []
143143
),
144144
},
145-
config.additionalLoader ? config.additionalLoader : {},
146-
{
147-
test: /\.(png|jpg|gif|svg|eot|ttf|woff|woff2)$/,
148-
use: {
149-
loader: 'file-loader',
150-
options: {
151-
name: '[name].[ext]',
145+
config.disableFileLoader
146+
? {}
147+
: {
148+
test: /\.(png|jpg|gif|svg|eot|ttf|woff|woff2)$/,
149+
use: {
150+
loader: 'file-loader',
151+
options: config.fileLoaderOptions || {
152+
name: '[name].[ext]',
153+
esModule: false,
154+
},
155+
},
152156
},
153-
},
154-
},
157+
config.additionalLoader ? config.additionalLoader : {},
155158
],
156159
};
157160
};
@@ -170,15 +173,16 @@ function compile(fixture, config = {}, options = {}) {
170173
// webpack Config
171174
// eslint-disable-next-line no-param-reassign
172175
config = {
173-
mode: 'development',
176+
mode: config.mode || 'development',
174177
devtool: config.devtool || 'sourcemap',
175178
context: path.resolve(__dirname, 'fixtures'),
176179
entry: path.resolve(__dirname, 'fixtures', fixture),
177180
output: outputConfig(config),
178181
module: moduleConfig(config),
179182
plugins: pluginsConfig(config),
180183
optimization: {
181-
runtimeChunk: true,
184+
minimize: false,
185+
runtimeChunk: false,
182186
},
183187
resolve: {
184188
alias: {

test/loader.test.js

+61
Original file line numberDiff line numberDiff line change
@@ -164,4 +164,65 @@ describe('loader', () => {
164164
expect(stats.compilation.warnings).toMatchSnapshot('warnings');
165165
expect(stats.compilation.errors).toMatchSnapshot('errors');
166166
});
167+
168+
it('using together with "sass-loader"', async () => {
169+
const config = {
170+
loader: { test: /\.s[ca]ss$/i },
171+
sassLoader: true,
172+
sassLoaderOptions: {
173+
// eslint-disable-next-line global-require
174+
implementation: require('sass'),
175+
},
176+
};
177+
const testId = './scss/source.scss';
178+
const stats = await webpack(testId, config);
179+
const { modules } = stats.toJson();
180+
const module = modules.find((m) => m.id === testId);
181+
182+
expect(module.source).toMatchSnapshot('module');
183+
expect(evaluated(module.source, modules)).toMatchSnapshot(
184+
'module (evaluated)'
185+
);
186+
expect(stats.compilation.warnings).toMatchSnapshot('warnings');
187+
expect(stats.compilation.errors).toMatchSnapshot('errors');
188+
});
189+
190+
it('should work with ModuleConcatenationPlugin (file-loader)', async () => {
191+
const stats = await webpack('basic.js', {
192+
mode: 'production',
193+
fileLoaderOptions: {
194+
name: '[name].[ext]',
195+
esModules: true,
196+
},
197+
});
198+
199+
expect(stats.compilation.assets['main.bundle.js'].source()).toMatchSnapshot(
200+
'assets'
201+
);
202+
expect(stats.compilation.warnings).toMatchSnapshot('warnings');
203+
expect(stats.compilation.errors).toMatchSnapshot('errors');
204+
});
205+
206+
it('should work with ModuleConcatenationPlugin (url-loader)', async () => {
207+
const stats = await webpack('basic.js', {
208+
mode: 'production',
209+
disableFileLoader: true,
210+
additionalLoader: {
211+
test: /\.(png|jpg|gif|svg|eot|ttf|woff|woff2)$/,
212+
use: {
213+
loader: 'url-loader',
214+
options: {
215+
name: '[name].[ext]',
216+
esModules: true,
217+
},
218+
},
219+
},
220+
});
221+
222+
expect(stats.compilation.assets['main.bundle.js'].source()).toMatchSnapshot(
223+
'assets'
224+
);
225+
expect(stats.compilation.warnings).toMatchSnapshot('warnings');
226+
expect(stats.compilation.errors).toMatchSnapshot('errors');
227+
});
167228
});

0 commit comments

Comments
 (0)