Skip to content

Commit

Permalink
feat(css): redirect named locals to default export when named export …
Browse files Browse the repository at this point in the history
…is disabled
  • Loading branch information
alexander-akait committed Apr 2, 2024
2 parents 3403e99 + ca0f1e8 commit 3361a5e
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 1 deletion.
5 changes: 5 additions & 0 deletions lib/css/CssParser.js
Original file line number Diff line number Diff line change
Expand Up @@ -1030,6 +1030,11 @@ class CssParser extends Parser {

module.buildInfo.strict = true;
module.buildMeta.exportsType = this.namedExports ? "namespace" : "default";

if (!this.namedExports) {
module.buildMeta.defaultObject = "redirect";
}

module.addDependency(new StaticExportsDependency([], true));
return state;
}
Expand Down
19 changes: 19 additions & 0 deletions test/configCases/css/default-exports-parser-options/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import * as style1 from "./style.module.css?namespace";
import style2 from "./style.module.css?default";
import { foo } from "./style.module.css?named";

it("should able to import with default and named exports", () => {
expect(style1.default).toEqual(nsObj({ foo: '-_style_module_css_namespace-foo' }));
expect(style1.foo).toEqual("-_style_module_css_namespace-foo");
expect(style2).toEqual(nsObj({ foo: '-_style_module_css_default-foo' }));
expect(foo).toEqual("-_style_module_css_named-foo");
});

it("should able to import with different default and namex dynamic export", (done) => {
import("./style.module.css?namespace").then((style1) => {
expect(style1.default).toEqual(nsObj({ foo: '-_style_module_css_namespace-foo' }));
expect(style1.foo).toEqual('-_style_module_css_namespace-foo');

done();
}, done)
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.foo {
color: red;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/** @type {import("../../../../").Configuration} */
module.exports = {
target: "node",
mode: "development",
devtool: false,
module: {
rules: [
{
test: /\.css/,
parser: {
namedExports: false
},
type: "css/module"
}
]
},
experiments: {
css: true
}
};
5 changes: 4 additions & 1 deletion test/configCases/css/named-exports-parser-options/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ it("should able to import with different namedExports (async)", (done) => {
import("./style.module.css?named"),
]).then(([style1, style2, style3]) => {
expect(style1).toEqual(nsObj({ class: '-_style_module_css-class' }));
expect(style2).toEqual(nsObj({ default: nsObj({ class: '-_style_module_css_default-class' }) }));
expect(style2).toEqual(nsObj({
class: "-_style_module_css_default-class",
default: nsObj({ class: '-_style_module_css_default-class' })
}));
expect(style3).toEqual(nsObj({ class: '-_style_module_css_named-class' }));
done()
}, done)
Expand Down

0 comments on commit 3361a5e

Please sign in to comment.