UNPKG

2.11 kBJavaScriptView Raw
1// tooling
2import transformDecl from './transform-decl';
3import transformAtrule from './transform-atrule';
4import transformEachAtrule from './transform-each-atrule';
5import transformIfAtrule from './transform-if-atrule';
6import transformIncludeAtrule from './transform-include-atrule';
7import transformForAtrule from './transform-for-atrule';
8import transformMixinAtrule from './transform-mixin-atrule';
9import transformRule from './transform-rule';
10import transformContentAtrule from './transform-content-atrule';
11
12// transform all nodes
13export default function transformNode(node, result, opts) {
14 // walk the children of the current node
15 getNodesArray(node).forEach(
16 childNode => {
17 if ('atrule' === childNode.type) {
18 if ('content' === childNode.name) {
19 // transform @content at-rules
20 transformContentAtrule(childNode, result, opts);
21 } else if ('each' === childNode.name) {
22 // transform @each at-rules
23 transformEachAtrule(childNode, result, opts);
24 } else if ('if' === childNode.name) {
25 // transform @if at-rules
26 transformIfAtrule(childNode, result, opts);
27 } else if ('include' === childNode.name) {
28 // transform @include at-rules
29 transformIncludeAtrule(childNode, result, opts);
30 } else if ('for' === childNode.name) {
31 // transform @for at-rules
32 transformForAtrule(childNode, result, opts);
33 } else if ('mixin' === childNode.name) {
34 // transform @for at-rules
35 transformMixinAtrule(childNode, result, opts);
36 } else {
37 // transform all other at-rules
38 transformAtrule(childNode, result, opts);
39 }
40 } else if ('decl' === childNode.type) {
41 // transform declarations
42 transformDecl(childNode, result, opts);
43 } else if ('rule' === childNode.type) {
44 // transform rule
45 transformRule(childNode, result, opts);
46 }
47
48 // conditionally walk grandchildren if the current child still has a parent
49 if (childNode.parent) {
50 transformNode(childNode, result, opts);
51 }
52 }
53 );
54}
55
56// return the children of a node as an array
57const getNodesArray = node => Array.from(Object(node).nodes || []);