Skip to content

Commit 72982d2

Browse files
committed
extract functions from file
1 parent a33f852 commit 72982d2

File tree

6 files changed

+63
-49
lines changed

6 files changed

+63
-49
lines changed

src/build-map.ts

Lines changed: 3 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,9 @@
11
import css from 'css';
22
import {readFileSync} from 'fs';
3+
import Rules from "./rules.js";
4+
import handleRule from "./handle-rule.js";
5+
import handleAtRule from "./handle-at-rule.js";
36

4-
interface Rules {
5-
[selector:string]: {
6-
[media:string]: {
7-
[property:string]: string
8-
}
9-
}
10-
}
11-
const handleDeclaration = (selector: string, declaration: css.Declaration, position: css.Position|undefined, media: string, rules: Rules): boolean => {
12-
let fails = false;
13-
if (rules[selector]) {
14-
if (rules[selector][media]) {
15-
if (rules[selector][media][declaration.property || '']) {
16-
fails = true;
17-
console.error(`${declaration.property} of ${selector} overwrites a previous definition in line ${position?.line} for media ${media}.`);
18-
}
19-
}
20-
if (media !== '' && rules[selector]['']) {
21-
if (rules[selector][''][declaration.property || ''] && rules[selector][''][declaration.property || ''] === declaration.value || '') {
22-
fails = true;
23-
console.error(`${declaration.property} of ${selector} overwrites a previous definition in line ${position?.line} general with the same value.`);
24-
}
25-
}
26-
}
27-
rules[selector] = rules[selector] || {};
28-
rules[selector][media] = rules[selector][media] || {};
29-
rules[selector][media][declaration.property || ''] = declaration.value || '';
30-
return fails;
31-
}
32-
const handleRule = (rule: css.Rule, rules: Rules, media: string = '') => {
33-
let fails = false;
34-
for (const selector of rule.selectors || []) {
35-
for (const declaration of rule.declarations || []) {
36-
if (declaration.type === 'declaration') {
37-
fails = handleDeclaration(selector, declaration, rule.position?.start, media, rules) || fails;
38-
}
39-
}
40-
}
41-
return fails;
42-
};
43-
const handleAtRule = (rule: css.Media, rules: Rules): boolean => {
44-
let fails = false;
45-
for (const rul of rule.rules || []) {
46-
fails = handleRule(rul, rules, rule.media) || fails;
47-
}
48-
return fails;
49-
};
507
export default(file: string): boolean => {
518
const rules: Rules = {};
529
let fails = false;

src/handle-at-rule.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import css from "css";
2+
import Rules from "./rules.js";
3+
import handleRule from "./handle-rule.js";
4+
5+
export default (rule: css.Media, rules: Rules): boolean => {
6+
let fails = false;
7+
for (const rul of rule.rules || []) {
8+
fails = handleRule(rul, rules, rule.media) || fails;
9+
}
10+
return fails;
11+
};

src/handle-declaration.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import css from "css";
2+
import Rules from "./rules.js";
3+
4+
export default (selector: string, declaration: css.Declaration, position: css.Position | undefined, media: string, rules: Rules): boolean => {
5+
let fails = false;
6+
if (rules[selector]) {
7+
if (rules[selector][media]) {
8+
if (rules[selector][media][declaration.property || '']) {
9+
fails = true;
10+
console.error(`${declaration.property} of ${selector} overwrites a previous definition in line ${position?.line} for media ${media}.`);
11+
}
12+
}
13+
if (media !== '' && rules[selector]['']) {
14+
if (rules[selector][''][declaration.property || ''] && rules[selector][''][declaration.property || ''] === declaration.value || '') {
15+
fails = true;
16+
console.error(`${declaration.property} of ${selector} overwrites a previous definition in line ${position?.line} general with the same value.`);
17+
}
18+
}
19+
}
20+
rules[selector] = rules[selector] || {};
21+
rules[selector][media] = rules[selector][media] || {};
22+
rules[selector][media][declaration.property || ''] = declaration.value || '';
23+
return fails;
24+
}

src/handle-rule.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import css from "css";
2+
import Rules from "./rules.js";
3+
import {handleDeclaration} from "./handle-declaration.js";
4+
5+
export default (rule: css.Rule, rules: Rules, media: string = '') => {
6+
let fails = false;
7+
for (const selector of rule.selectors || []) {
8+
for (const declaration of rule.declarations || []) {
9+
if (declaration.type === 'declaration') {
10+
fails = handleDeclaration(selector, declaration, rule.position?.start, media, rules) || fails;
11+
}
12+
}
13+
}
14+
return fails;
15+
};

src/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ import {readdirSync} from 'node:fs';
22
import buildMap from './build-map.js';
33

44
export default (cwd: string): boolean => {
5-
let fails = false;
5+
let success = false;
66
for (const file of readdirSync(cwd, {recursive: true, encoding: 'utf8'})) {
77
if (file.endsWith('.css') && !file.includes('node_modules') && !file.includes('coverage') && !file.includes('dist')) {
8-
fails = buildMap(cwd + '/' + file) || fails;
8+
success = buildMap(cwd + '/' + file) || success;
99
}
1010
}
11-
return fails;
11+
return success;
1212
}

src/rules.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export default interface Rules {
2+
[selector: string]: {
3+
[media: string]: {
4+
[property: string]: string
5+
}
6+
}
7+
}

0 commit comments

Comments
 (0)