Skip to content

Commit c495b7c

Browse files
authored
refactor: Use stricter TS, ESLint configs (#2507)
1 parent 6f0cbc0 commit c495b7c

File tree

11 files changed

+118
-107
lines changed

11 files changed

+118
-107
lines changed

.eslintrc.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
"no-unused-expressions": 2,
4343
"no-useless-call": 2,
4444
"no-use-before-define": [2, "nofunc"],
45+
"no-constant-binary-expression": 2,
4546
"no-void": 2,
4647

4748
"jsdoc/require-jsdoc": 0,
@@ -83,6 +84,9 @@
8384
"project": "./tsconfig.eslint.json"
8485
},
8586
"rules": {
87+
"dot-notation": 0,
88+
"curly": [2, "multi-line"],
89+
8690
"@typescript-eslint/prefer-for-of": 0,
8791
"@typescript-eslint/member-ordering": 0,
8892
"@typescript-eslint/explicit-function-return-type": 0,

src/api/attributes.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ describe('$(...)', () => {
5151
'pear'
5252
) as Cheerio<Element>;
5353

54-
expect($el[0].attribs.class).toBe('pear');
54+
expect($el[0].attribs).toHaveProperty('class', 'pear');
5555
expect($el[1].attribs).toBeUndefined();
56-
expect($el[2].attribs.class).toBe('pear');
56+
expect($el[2].attribs).toHaveProperty('class', 'pear');
5757
});
5858

5959
it('(key, value) : should return an empty object for an empty object', () => {
@@ -204,7 +204,7 @@ describe('$(...)', () => {
204204
it('(valid key) : valid prop should get value', () => {
205205
expect(checkbox.prop('checked')).toBe(true);
206206
checkbox.css('display', 'none');
207-
expect(checkbox.prop('style').display).toBe('none');
207+
expect(checkbox.prop('style')).toHaveProperty('display', 'none');
208208
expect(checkbox.prop('style')).toHaveLength(1);
209209
expect(checkbox.prop('style')).toContain('display');
210210
expect(checkbox.prop('tagName')).toBe('INPUT');

src/api/attributes.ts

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ function getAttr(
7676
// Mimic DOM with default value for radios/checkboxes
7777
if (
7878
elem.name === 'input' &&
79-
(elem.attribs.type === 'radio' || elem.attribs.type === 'checkbox') &&
79+
(elem.attribs['type'] === 'radio' || elem.attribs['type'] === 'checkbox') &&
8080
name === 'value'
8181
) {
8282
return 'on';
@@ -387,13 +387,14 @@ export function prop<T extends AnyNode>(
387387
throw new Error('Bad combination of arguments.');
388388
}
389389
return domEach(this, (el, i) => {
390-
if (isTag(el))
390+
if (isTag(el)) {
391391
setProp(
392392
el,
393393
name,
394394
value.call(el, i, getProp(el, name, this.options.xmlMode)),
395395
this.options.xmlMode
396396
);
397+
}
397398
});
398399
}
399400

@@ -599,9 +600,10 @@ export function data<T extends AnyNode>(
599600
// Set the value (with attr map support)
600601
if (typeof name === 'object' || value !== undefined) {
601602
domEach(this, (el) => {
602-
if (isTag(el))
603+
if (isTag(el)) {
603604
if (typeof name === 'object') setData(el, name);
604605
else setData(el, name, value as unknown);
606+
}
605607
});
606608
return this;
607609
}
@@ -777,7 +779,7 @@ export function hasClass<T extends AnyNode>(
777779
className: string
778780
): boolean {
779781
return this.toArray().some((elem) => {
780-
const clazz = isTag(elem) && elem.attribs.class;
782+
const clazz = isTag(elem) && elem.attribs['class'];
781783
let idx = -1;
782784

783785
if (clazz && className.length) {
@@ -825,7 +827,7 @@ export function addClass<T extends AnyNode, R extends ArrayLike<T>>(
825827
if (typeof value === 'function') {
826828
return domEach(this, (el, i) => {
827829
if (isTag(el)) {
828-
const className = el.attribs.class || '';
830+
const className = el.attribs['class'] || '';
829831
addClass.call([el], value.call(el, i, className));
830832
}
831833
});
@@ -891,8 +893,9 @@ export function removeClass<T extends AnyNode, R extends ArrayLike<T>>(
891893
// Handle if value is a function
892894
if (typeof name === 'function') {
893895
return domEach(this, (el, i) => {
894-
if (isTag(el))
895-
removeClass.call([el], name.call(el, i, el.attribs.class || ''));
896+
if (isTag(el)) {
897+
removeClass.call([el], name.call(el, i, el.attribs['class'] || ''));
898+
}
896899
});
897900
}
898901

@@ -905,9 +908,9 @@ export function removeClass<T extends AnyNode, R extends ArrayLike<T>>(
905908

906909
if (removeAll) {
907910
// Short circuit the remove all case as this is the nice one
908-
el.attribs.class = '';
911+
el.attribs['class'] = '';
909912
} else {
910-
const elClasses = splitNames(el.attribs.class);
913+
const elClasses = splitNames(el.attribs['class']);
911914
let changed = false;
912915

913916
for (let j = 0; j < numClasses; j++) {
@@ -925,7 +928,7 @@ export function removeClass<T extends AnyNode, R extends ArrayLike<T>>(
925928
}
926929
}
927930
if (changed) {
928-
el.attribs.class = elClasses.join(' ');
931+
el.attribs['class'] = elClasses.join(' ');
929932
}
930933
}
931934
});
@@ -969,7 +972,7 @@ export function toggleClass<T extends AnyNode, R extends ArrayLike<T>>(
969972
if (isTag(el)) {
970973
toggleClass.call(
971974
[el],
972-
value.call(el, i, el.attribs.class || '', stateVal),
975+
value.call(el, i, el.attribs['class'] || '', stateVal),
973976
stateVal
974977
);
975978
}
@@ -989,7 +992,7 @@ export function toggleClass<T extends AnyNode, R extends ArrayLike<T>>(
989992
// If selected element isn't a tag, move on
990993
if (!isTag(el)) continue;
991994

992-
const elementClasses = splitNames(el.attribs.class);
995+
const elementClasses = splitNames(el.attribs['class']);
993996

994997
// Check if class already exists
995998
for (let j = 0; j < numClasses; j++) {
@@ -1005,7 +1008,7 @@ export function toggleClass<T extends AnyNode, R extends ArrayLike<T>>(
10051008
}
10061009
}
10071010

1008-
el.attribs.class = elementClasses.join(' ');
1011+
el.attribs['class'] = elementClasses.join(' ');
10091012
}
10101013

10111014
return this;

src/api/css.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ function setCss(
112112
styles[prop] = val;
113113
}
114114

115-
el.attribs.style = stringify(styles);
115+
el.attribs['style'] = stringify(styles);
116116
} else if (typeof prop === 'object') {
117117
Object.keys(prop).forEach((k, i) => {
118118
setCss(el, k, prop[k], i);
@@ -146,7 +146,7 @@ function getCss(
146146
): Record<string, string> | string | undefined {
147147
if (!el || !isTag(el)) return;
148148

149-
const styles = parse(el.attribs.style);
149+
const styles = parse(el.attribs['style']);
150150
if (typeof prop === 'string') {
151151
return styles[prop];
152152
}

0 commit comments

Comments
 (0)