rollup-plugin-lib-style 2.3.0 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.es.js +21 -2
- package/lib/index.js +21 -2
- package/package.json +1 -1
package/lib/index.es.js
CHANGED
|
@@ -18,6 +18,20 @@ const replaceFormat = (formatString, fileName, cssContent) => {
|
|
|
18
18
|
return formatString.replace("[local]", fileName).replace(/\[hash:(.*?)(:\d+)?\]/, hashToUse)
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Ensures generated class names are valid CSS identifiers.
|
|
23
|
+
* - Replaces invalid characters with `_`
|
|
24
|
+
* - Ensures class names do not start with a number
|
|
25
|
+
* @param {string} name - Original class name
|
|
26
|
+
* @returns {string} - Valid CSS class name
|
|
27
|
+
*/
|
|
28
|
+
const normalizeClassName = (hash) => {
|
|
29
|
+
// Replace invalid characters with '_'
|
|
30
|
+
let sanitized = hash.replace(/[^a-zA-Z0-9-_]/g, "_");
|
|
31
|
+
if (/^[0-9]/.test(sanitized)) sanitized = `_${sanitized}`;
|
|
32
|
+
return sanitized
|
|
33
|
+
};
|
|
34
|
+
|
|
21
35
|
const DEFAULT_SCOPED_NAME = "[local]_[hash:hex:6]";
|
|
22
36
|
|
|
23
37
|
/**
|
|
@@ -44,13 +58,18 @@ const postCssLoader = async ({code, fiePath, options}) => {
|
|
|
44
58
|
|
|
45
59
|
const modulesExported = {};
|
|
46
60
|
|
|
47
|
-
const isGlobalStyle = /\.global
|
|
61
|
+
const isGlobalStyle = /\.global\.(css|scss|sass|less|stylus)$/.test(fiePath);
|
|
48
62
|
const isInNodeModules = /[\\/]node_modules[\\/]/.test(fiePath);
|
|
49
63
|
|
|
50
64
|
const postCssPluginsWithCssModules = [
|
|
51
65
|
postcssModules({
|
|
52
66
|
generateScopedName: (name, filename, css) => {
|
|
53
|
-
|
|
67
|
+
const hashContent = `${filename}:${name}:${css}`;
|
|
68
|
+
const rawScopedName = replaceFormat(scopedName, name, hashContent);
|
|
69
|
+
const normalizedName = normalizeClassName(rawScopedName);
|
|
70
|
+
return isInNodeModules || isGlobalStyle
|
|
71
|
+
? name // Use the original name for global or node_modules styles
|
|
72
|
+
: classNamePrefix + normalizedName // Apply prefix and normalize
|
|
54
73
|
},
|
|
55
74
|
getJSON: (cssFileName, json) => (modulesExported[cssFileName] = json),
|
|
56
75
|
}),
|
package/lib/index.js
CHANGED
|
@@ -20,6 +20,20 @@ const replaceFormat = (formatString, fileName, cssContent) => {
|
|
|
20
20
|
return formatString.replace("[local]", fileName).replace(/\[hash:(.*?)(:\d+)?\]/, hashToUse)
|
|
21
21
|
};
|
|
22
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Ensures generated class names are valid CSS identifiers.
|
|
25
|
+
* - Replaces invalid characters with `_`
|
|
26
|
+
* - Ensures class names do not start with a number
|
|
27
|
+
* @param {string} name - Original class name
|
|
28
|
+
* @returns {string} - Valid CSS class name
|
|
29
|
+
*/
|
|
30
|
+
const normalizeClassName = (hash) => {
|
|
31
|
+
// Replace invalid characters with '_'
|
|
32
|
+
let sanitized = hash.replace(/[^a-zA-Z0-9-_]/g, "_");
|
|
33
|
+
if (/^[0-9]/.test(sanitized)) sanitized = `_${sanitized}`;
|
|
34
|
+
return sanitized
|
|
35
|
+
};
|
|
36
|
+
|
|
23
37
|
const DEFAULT_SCOPED_NAME = "[local]_[hash:hex:6]";
|
|
24
38
|
|
|
25
39
|
/**
|
|
@@ -46,13 +60,18 @@ const postCssLoader = async ({code, fiePath, options}) => {
|
|
|
46
60
|
|
|
47
61
|
const modulesExported = {};
|
|
48
62
|
|
|
49
|
-
const isGlobalStyle = /\.global
|
|
63
|
+
const isGlobalStyle = /\.global\.(css|scss|sass|less|stylus)$/.test(fiePath);
|
|
50
64
|
const isInNodeModules = /[\\/]node_modules[\\/]/.test(fiePath);
|
|
51
65
|
|
|
52
66
|
const postCssPluginsWithCssModules = [
|
|
53
67
|
postcssModules({
|
|
54
68
|
generateScopedName: (name, filename, css) => {
|
|
55
|
-
|
|
69
|
+
const hashContent = `${filename}:${name}:${css}`;
|
|
70
|
+
const rawScopedName = replaceFormat(scopedName, name, hashContent);
|
|
71
|
+
const normalizedName = normalizeClassName(rawScopedName);
|
|
72
|
+
return isInNodeModules || isGlobalStyle
|
|
73
|
+
? name // Use the original name for global or node_modules styles
|
|
74
|
+
: classNamePrefix + normalizedName // Apply prefix and normalize
|
|
56
75
|
},
|
|
57
76
|
getJSON: (cssFileName, json) => (modulesExported[cssFileName] = json),
|
|
58
77
|
}),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rollup-plugin-lib-style",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.1",
|
|
4
4
|
"description": "A Rollup plugin that converts CSS and extensions for CSS into CSS modules and imports the generated CSS files",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib/index.es.js",
|