@swisspost/design-system-eslint 10.0.0-next.60 → 10.0.0-next.62
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-class-update-rule.d.ts","sourceRoot":"","sources":["../../src/utils/create-class-update-rule.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"create-class-update-rule.d.ts","sourceRoot":"","sources":["../../src/utils/create-class-update-rule.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAM9B,KAAK,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,EAAE,CAAC;CACL;AAED,KAAK,qBAAqB,CAAC,CAAC,IAAI,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAChE,KAAK,4BAA4B,GAAG,cAAc,GAAG,kBAAkB,CAAC;AAExE,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpE,QAAQ,qBAAqB,CAAC,CAAC,CAAC,qKA6F9B,CAAC;AAoEL,eAAO,MAAM,4BAA4B,GAAI,QAAQ,4BAA4B;;;;CAUhF,CAAC"}
|
|
@@ -22,20 +22,64 @@ const createClassUpdateRule = (config) => (0, create_rule_1.createRule)({
|
|
|
22
22
|
tag(node) {
|
|
23
23
|
const $node = node.toCheerio();
|
|
24
24
|
Object.entries(config.mutations).forEach(([messageId, [oldClass, newClass]]) => {
|
|
25
|
+
// Simple HTML class
|
|
25
26
|
if ($node.hasClass(oldClass)) {
|
|
26
27
|
context.report({
|
|
27
28
|
messageId,
|
|
28
29
|
loc: node.loc,
|
|
29
30
|
fix(fixer) {
|
|
30
|
-
const fixedNode = $node.removeClass(oldClass)
|
|
31
|
+
const fixedNode = $node.removeClass(oldClass);
|
|
32
|
+
if (newClass)
|
|
33
|
+
fixedNode.addClass(newClass);
|
|
31
34
|
// Remove empty class attribute
|
|
32
|
-
|
|
33
|
-
if (!classValue || classValue.trim() === '') {
|
|
35
|
+
if (!fixedNode.attr('class')?.trim())
|
|
34
36
|
fixedNode.removeAttr('class');
|
|
35
|
-
}
|
|
36
37
|
return fixer.replaceTextRange(node.range, fixedNode.toString());
|
|
37
38
|
},
|
|
38
39
|
});
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
// Skip if no newClass to replace - should be updated for deleted classes case
|
|
43
|
+
if (!newClass?.trim())
|
|
44
|
+
return;
|
|
45
|
+
const root = $node[0];
|
|
46
|
+
if (!root || root.type !== 'tag')
|
|
47
|
+
return;
|
|
48
|
+
const attribs = root.attribs;
|
|
49
|
+
for (const attrName of Object.keys(attribs)) {
|
|
50
|
+
const value = $node.attr(attrName);
|
|
51
|
+
const { isClassBinding, isNgClass, isClass } = getDynamicClassType(attrName, value, oldClass);
|
|
52
|
+
if (!isClassBinding && !isNgClass && !isClass)
|
|
53
|
+
continue;
|
|
54
|
+
context.report({
|
|
55
|
+
loc: node.loc,
|
|
56
|
+
messageId,
|
|
57
|
+
fix(fixer) {
|
|
58
|
+
if (isClassBinding) {
|
|
59
|
+
const fixedAttrName = `[class.${newClass}]`;
|
|
60
|
+
const oldAttrValue = $node.attr(attrName);
|
|
61
|
+
if (!oldAttrValue)
|
|
62
|
+
return null;
|
|
63
|
+
$node.attr(fixedAttrName, oldAttrValue);
|
|
64
|
+
$node.removeAttr(`[class.${oldClass}]`);
|
|
65
|
+
return fixer.replaceTextRange(node.range, $node.toString());
|
|
66
|
+
}
|
|
67
|
+
const raw = $node.attr(attrName)?.trim();
|
|
68
|
+
if (!raw)
|
|
69
|
+
return null;
|
|
70
|
+
const newValue = getNewAttrValue($node, attrName, oldClass, newClass, raw);
|
|
71
|
+
if (newValue === null)
|
|
72
|
+
return null;
|
|
73
|
+
const targetAttr = isNgClass ? '[ngClass]' : '[class]';
|
|
74
|
+
if (newValue === '')
|
|
75
|
+
$node.removeAttr(targetAttr);
|
|
76
|
+
else
|
|
77
|
+
$node.attr(targetAttr, newValue);
|
|
78
|
+
if (isNgClass && attrName !== targetAttr)
|
|
79
|
+
$node.removeAttr(attrName);
|
|
80
|
+
return fixer.replaceTextRange(node.range, $node.toString());
|
|
81
|
+
},
|
|
82
|
+
});
|
|
39
83
|
}
|
|
40
84
|
});
|
|
41
85
|
},
|
|
@@ -43,6 +87,53 @@ const createClassUpdateRule = (config) => (0, create_rule_1.createRule)({
|
|
|
43
87
|
},
|
|
44
88
|
});
|
|
45
89
|
exports.createClassUpdateRule = createClassUpdateRule;
|
|
90
|
+
// Determine type of dynamic class attribute
|
|
91
|
+
function getDynamicClassType(attrName, value, oldClass) {
|
|
92
|
+
const escaped = oldClass.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
93
|
+
const regex = new RegExp(`(^|[^A-Za-z0-9_-])${escaped}([^A-Za-z0-9_-]|$)`);
|
|
94
|
+
const hasExactClass = typeof value === 'string' && regex.test(value);
|
|
95
|
+
return {
|
|
96
|
+
isClassBinding: attrName === `[class.${oldClass}]`,
|
|
97
|
+
isNgClass: attrName.toLowerCase() === '[ngclass]' && hasExactClass,
|
|
98
|
+
isClass: attrName.toLowerCase() === '[class]' && hasExactClass,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function getNewAttrValue($node, attrName, oldClass, newClass, value) {
|
|
102
|
+
if (isStringLiteral(value))
|
|
103
|
+
return updateStringLiteral(value, oldClass, newClass);
|
|
104
|
+
if (isObjectLiteral(value)) {
|
|
105
|
+
const rawAttr = $node.attr(attrName);
|
|
106
|
+
if (!rawAttr)
|
|
107
|
+
return null;
|
|
108
|
+
return updateObjectLiteral(rawAttr, oldClass, newClass);
|
|
109
|
+
}
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
function isStringLiteral(value) {
|
|
113
|
+
const first = value[0], last = value.at(-1);
|
|
114
|
+
return ['"', "'", '`'].includes(first) && first === last;
|
|
115
|
+
}
|
|
116
|
+
function isObjectLiteral(value) {
|
|
117
|
+
return value.startsWith('{') && value.endsWith('}');
|
|
118
|
+
}
|
|
119
|
+
function updateStringLiteral(value, oldClass, newClass) {
|
|
120
|
+
const quote = value[0];
|
|
121
|
+
const inner = value.slice(1, -1);
|
|
122
|
+
const parts = inner
|
|
123
|
+
.split(/\s+/)
|
|
124
|
+
.map(cls => (cls === oldClass ? newClass : cls))
|
|
125
|
+
.filter(Boolean); // remove empty strings if deleting class
|
|
126
|
+
return parts.length ? quote + parts.join(' ') + quote : '';
|
|
127
|
+
}
|
|
128
|
+
function updateObjectLiteral(rawAttr, oldClass, newClass) {
|
|
129
|
+
const sanitized = rawAttr.replace(/['"\s]/g, '');
|
|
130
|
+
const inner = sanitized.slice(1, -1);
|
|
131
|
+
const keys = inner.split(',').map(p => p.split(':')[0]);
|
|
132
|
+
if (!keys.includes(oldClass))
|
|
133
|
+
return null;
|
|
134
|
+
const escapedOldClass = oldClass.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
135
|
+
return rawAttr.replace(new RegExp(`(?<![\\w-])${escapedOldClass}(?![\\w-])`, 'g'), newClass ?? '');
|
|
136
|
+
}
|
|
46
137
|
const createClassUpdateRuleWrapper = (config) => {
|
|
47
138
|
const data = (0, generate_mutations_1.generateReplacedClassMutations)(config.classesMap);
|
|
48
139
|
const rule = (0, exports.createClassUpdateRule)({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-class-update-rule.js","sourceRoot":"","sources":["../../src/utils/create-class-update-rule.ts"],"names":[],"mappings":";;;AAAA,+CAA2C;AAG3C,6DAAsE;AACtE,2DAAoE;
|
|
1
|
+
{"version":3,"file":"create-class-update-rule.js","sourceRoot":"","sources":["../../src/utils/create-class-update-rule.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@swisspost/design-system-eslint",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "10.0.0-next.
|
|
4
|
+
"version": "10.0.0-next.62",
|
|
5
5
|
"description": "A set of custom ESLint rules to help keeping projects using the Swiss Post Design System up-to-date.",
|
|
6
6
|
"author": "Swiss Post <design-system@post.ch>",
|
|
7
7
|
"license": "Apache-2.0",
|
|
@@ -38,12 +38,12 @@
|
|
|
38
38
|
"@typescript-eslint/rule-tester": "8.49.0",
|
|
39
39
|
"concurrently": "9.2.1",
|
|
40
40
|
"domhandler": "5.0.3",
|
|
41
|
-
"eslint": "9.
|
|
42
|
-
"globals": "
|
|
41
|
+
"eslint": "9.26.0",
|
|
42
|
+
"globals": "17.3.0",
|
|
43
43
|
"jest": "29.7.0",
|
|
44
44
|
"parse5": "7.2.1",
|
|
45
45
|
"rimraf": "6.0.1",
|
|
46
|
-
"ts-jest": "29.
|
|
46
|
+
"ts-jest": "29.4.6",
|
|
47
47
|
"typescript": "5.8.3",
|
|
48
48
|
"typescript-eslint": "8.49.0"
|
|
49
49
|
},
|