Skip to content

Commit dc9d672

Browse files
committed
esbuild as peer denpendency
1 parent 7f92213 commit dc9d672

File tree

4 files changed

+33
-25
lines changed

4 files changed

+33
-25
lines changed

index.js

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,37 +15,46 @@ const cssHandler = require('@parcel/css');
1515
const camelCase = require('lodash/camelCase');
1616

1717
const getAbsoluteUrl = (resolveDir, url) => {
18-
return path.resolve(resolveDir, url.replace(/\"/g, '').replace(/\'/g, ''));
18+
const pureUrl = url.replace(/\"/g, '').replace(/\'/g, '');
19+
if (path.isAbsolute(pureUrl) || pureUrl.startsWith('http')) {
20+
return pureUrl;
21+
}
22+
return path.resolve(resolveDir, pureUrl);
1923
};
2024

2125
const buildCssModulesJS2 = async (cssFullPath) => {
2226
const resolveDir = path.dirname(cssFullPath);
23-
const cssContent = await readFile(cssFullPath);
24-
const transformConfig = {
25-
filename: path.basename(cssFullPath),
26-
code: cssContent,
27+
28+
/**
29+
* @type {import('@parcel/css').BundleOptions}
30+
*/
31+
const bundleConfig = {
32+
filename: cssFullPath,
2733
minify: false,
2834
sourceMap: true,
2935
cssModules: true,
3036
analyzeDependencies: true
3137
};
32-
const { code, exports, map, dependencies } = cssHandler.transform(transformConfig);
38+
const { code, exports = {}, map, dependencies = [] } = cssHandler.bundle(bundleConfig);
39+
3340
const cssModulesJSON = {};
3441
Object.keys(exports).forEach((originClass) => {
3542
cssModulesJSON[camelCase(originClass)] = exports[originClass].name;
3643
});
37-
const classNames = JSON.stringify(cssModulesJSON);
38-
const jsContent = `
39-
export default ${classNames};
40-
`;
41-
const urls = dependencies?.filter((d) => d.type === 'url') ?? [];
44+
const classNames = JSON.stringify(cssModulesJSON, null, 2);
45+
46+
const urls = dependencies.filter((d) => d.type === 'url');
47+
4248
let finalCssContent = code.toString('utf-8');
4349
urls.forEach(({ url, placeholder }) => {
4450
finalCssContent = finalCssContent.replace(
4551
new RegExp(`${placeholder}`, 'g'),
4652
getAbsoluteUrl(resolveDir, url)
4753
);
4854
});
55+
56+
const jsContent = `export default ${classNames};`;
57+
4958
if (map) {
5059
finalCssContent += `\n/*# sourceMappingURL=data:application/json;base64,${map.toString(
5160
'base64'
@@ -155,7 +164,8 @@ const CssModulesPlugin = (options = {}) => {
155164
.join(path.posix.sep)}";\n${jsContent}`;
156165

157166
return {
158-
contents: jsFileContent
167+
contents: jsFileContent,
168+
loader: 'js'
159169
};
160170
});
161171

package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "esbuild-css-modules-plugin",
3-
"version": "2.1.2",
3+
"version": "2.1.3",
44
"description": "A esbuild plugin to bundle css modules into js(x)/ts(x).",
55
"main": "index.js",
66
"keywords": [
@@ -18,15 +18,15 @@
1818
"test": "cd ./test && node test.js",
1919
"pub": "npm_config_registry=\"https://registry.npmjs.org/\" npm publish --userconfig ~/.pubnpmrc --access public"
2020
},
21-
"devDependencies": {
22-
"esbuild": "^0.14.11"
21+
"peerDependencies": {
22+
"esbuild": "^0.14.21"
2323
},
2424
"dependencies": {
25-
"@parcel/css": "^1.0.1",
25+
"@parcel/css": "^1.3.1",
2626
"fs-extra": "^9.1.0",
2727
"lodash": "^4.17.21",
28-
"postcss": "^8.2.7",
29-
"postcss-modules": "^4.0.0",
28+
"postcss": "^8.4.6",
29+
"postcss-modules": "^4.3.0",
3030
"tmp": "^0.2.1"
3131
}
3232
}

test/components/hello.world.jsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,15 @@
11
import React from 'react';
22
import styles, * as appCssModules from '../styles/app.modules.css';
3-
import styles2, * as h from '../styles/deep/styles/hello.modules.css';
43

54
export const HelloWorld = () => (
65
<>
76
<h3 className={styles.helloWorld}>Hello World!</h3>
8-
<p className={styles2.helloText}>hi...</p>
7+
<p className={styles.helloText}>hi...</p>
98
<pre>
109
<code>${appCssModules?.digest ?? '// n/a'}</code>
1110
</pre>
1211
<pre>
13-
<code>${h?.digest ?? '// n/a'}</code>
14-
</pre>
15-
<pre>
16-
<code>${h?.css ?? '// n/a'}</code>
12+
<code>${appCssModules?.css ?? '// n/a'}</code>
1713
</pre>
1814
</>
1915
);

test/styles/app.modules.css

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
@import url(./deep/styles/hello.modules.css);
2+
13
.hello-world {
24
color: red;
35
background: url("../components/world.jpg");
46
}
57

68
.hello-world:hover {
7-
background-image: url(../components//world2.jpg);
9+
background-image: url(../components/world2.jpg);
810
}
911

1012
.some-other-selector {

0 commit comments

Comments
 (0)