(node, css, type = null)
| 29 | } |
| 30 | |
| 31 | function transformAst(node, css, type = null) { |
| 32 | if (!node) { |
| 33 | return; |
| 34 | } |
| 35 | |
| 36 | if (node.type === 'StyleSheet') { |
| 37 | return { |
| 38 | type: 'stylesheet', |
| 39 | stylesheet: { |
| 40 | rules: node.children |
| 41 | .map((child) => transformAst(child, css)) |
| 42 | .filter((child) => child !== null) |
| 43 | .toArray(), |
| 44 | parsingErrors: [], |
| 45 | }, |
| 46 | }; |
| 47 | } |
| 48 | |
| 49 | if (node.type === 'Atrule') { |
| 50 | const atrule: any = { |
| 51 | type: node.name, |
| 52 | }; |
| 53 | |
| 54 | if (node.name === 'supports' || node.name === 'media') { |
| 55 | atrule[node.name] = node.prelude.value; |
| 56 | atrule.rules = transformAst(node.block, css); |
| 57 | } else if (node.name === 'page') { |
| 58 | atrule.selectors = node.prelude ? mapSelectors(node.prelude.value) : []; |
| 59 | atrule.declarations = transformAst(node.block, css); |
| 60 | } else if (node.name === 'document') { |
| 61 | atrule.document = node.prelude ? node.prelude.value : ''; |
| 62 | atrule.vendor = ''; |
| 63 | atrule.rules = transformAst(node.block, css); |
| 64 | } else if (node.name === 'font-face') { |
| 65 | atrule.declarations = transformAst(node.block, css); |
| 66 | } else if (node.name === 'import' || node.name === 'charset' || node.name === 'namespace') { |
| 67 | atrule[node.name] = node.prelude ? node.prelude.value : ''; |
| 68 | } else if (node.name === 'keyframes') { |
| 69 | atrule.name = node.prelude ? node.prelude.value : ''; |
| 70 | atrule.keyframes = transformAst(node.block, css, 'keyframe'); |
| 71 | atrule.vendor = undefined; |
| 72 | } else { |
| 73 | atrule.rules = transformAst(node.block, css); |
| 74 | } |
| 75 | |
| 76 | atrule.position = mapPosition(node, css); |
| 77 | |
| 78 | return atrule; |
| 79 | } |
| 80 | |
| 81 | if (node.type === 'Block') { |
| 82 | return node.children |
| 83 | .map((child) => transformAst(child, css, type)) |
| 84 | .filter((child) => child !== null) |
| 85 | .toArray(); |
| 86 | } |
| 87 | |
| 88 | if (node.type === 'Rule') { |
no test coverage detected