UNPKG

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