ember-codemod-remove-global-styles 0.7.1 → 0.9.0

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/README.md CHANGED
@@ -112,7 +112,7 @@ pnpm build
112
112
 
113
113
  ## Compatibility
114
114
 
115
- - Node.js v20 or above
115
+ - Node.js v22 or above
116
116
 
117
117
 
118
118
  ## Contributing
@@ -1,52 +1,67 @@
1
- import { createParser, render, traverse } from 'css-selector-parser';
1
+ import { createParser, render, traverse, } from 'css-selector-parser';
2
2
  import postcss from 'postcss';
3
3
  const parse = createParser({
4
4
  // Allow unknown pseudo-classes
5
5
  syntax: 'progressive',
6
6
  });
7
+ function parseRule(rule) {
8
+ const childClassNames = [];
9
+ traverse(rule, (node) => {
10
+ if (node.type === 'ClassName') {
11
+ childClassNames.push(node.name);
12
+ }
13
+ });
14
+ if (childClassNames.length === 0) {
15
+ return undefined;
16
+ }
17
+ const parentClassName = childClassNames.shift();
18
+ return {
19
+ childClassNames,
20
+ parentClassName,
21
+ selector: render(rule),
22
+ };
23
+ }
7
24
  function parseSelector(maybeSelector) {
25
+ const selectors = [];
8
26
  try {
9
27
  const { rules } = parse(maybeSelector);
10
- return rules.map((rule) => {
11
- const classNames = [];
28
+ rules.forEach((rule) => {
12
29
  traverse(rule, (node) => {
13
- if (node.type === 'ClassName') {
14
- classNames.push(node.name);
30
+ if (node.type !== 'Rule') {
31
+ return;
32
+ }
33
+ const selector = parseRule(node);
34
+ if (selector === undefined) {
35
+ return;
15
36
  }
37
+ selectors.push(selector);
16
38
  });
17
- return {
18
- classNames,
19
- selector: render(rule),
20
- };
21
39
  });
22
40
  }
23
41
  catch {
24
- return [];
42
+ // Do nothing
25
43
  }
44
+ return selectors;
26
45
  }
27
46
  export function getClassNameToStyles(file) {
28
47
  const classNameToStyles = new Map();
29
48
  function processRule(node) {
30
49
  const clone = node.clone();
31
- const data = parseSelector(node.selector);
32
50
  const line = node.source.start.line;
33
- data.forEach(({ classNames, selector }) => {
34
- const containerClass = classNames[0];
35
- if (containerClass === undefined) {
36
- return;
37
- }
51
+ const selectors = parseSelector(node.selector);
52
+ selectors.forEach(({ childClassNames, parentClassName, selector }) => {
38
53
  clone.selector = selector;
39
- const data = {
40
- classNames,
54
+ const style = {
55
+ classNames: childClassNames,
41
56
  code: clone.toString(),
42
57
  line,
43
58
  selector,
44
59
  };
45
- if (classNameToStyles.has(containerClass)) {
46
- classNameToStyles.get(containerClass).push(data);
60
+ if (classNameToStyles.has(parentClassName)) {
61
+ classNameToStyles.get(parentClassName).push(style);
47
62
  }
48
63
  else {
49
- classNameToStyles.set(containerClass, [data]);
64
+ classNameToStyles.set(parentClassName, [style]);
50
65
  }
51
66
  });
52
67
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-codemod-remove-global-styles",
3
- "version": "0.7.1",
3
+ "version": "0.9.0",
4
4
  "description": "Codemod to localize global styles",
5
5
  "keywords": [
6
6
  "codemod",
@@ -24,18 +24,18 @@
24
24
  "dist"
25
25
  ],
26
26
  "dependencies": {
27
- "@codemod-utils/ast-javascript": "^2.1.4",
28
- "@codemod-utils/ast-template": "^2.1.3",
29
- "@codemod-utils/ast-template-tag": "^1.2.2",
30
- "@codemod-utils/files": "^3.2.5",
27
+ "@codemod-utils/ast-javascript": "^3.0.0",
28
+ "@codemod-utils/ast-template": "^3.0.0",
29
+ "@codemod-utils/ast-template-tag": "^2.0.0",
30
+ "@codemod-utils/files": "^4.0.0",
31
31
  "css-selector-parser": "^3.3.0",
32
32
  "postcss": "^8.5.6",
33
33
  "yargs": "^18.0.0"
34
34
  },
35
35
  "devDependencies": {
36
- "@codemod-utils/tests": "^2.2.4",
36
+ "@codemod-utils/tests": "^3.0.0",
37
37
  "@sondr3/minitest": "^0.1.2",
38
- "@types/node": "^20.19.31",
38
+ "@types/node": "^22.19.11",
39
39
  "@types/yargs": "^17.0.35",
40
40
  "concurrently": "^9.2.1",
41
41
  "eslint": "^9.39.2",
@@ -46,7 +46,7 @@
46
46
  "@shared-configs/typescript": "0.0.0"
47
47
  },
48
48
  "engines": {
49
- "node": "20.* || >= 22"
49
+ "node": "22.* || >= 24"
50
50
  },
51
51
  "scripts": {
52
52
  "build": "sh build.sh --production",