{"version":3,"sources":["../src/createGenerator.js"],"names":["escapeValue","value","JSON","stringify","renderSelector","selectorToken","tokens","body","parts","token","part","type","name","operator","parameters","length","map","join","Error","push","generate","sequences"],"mappings":"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","file":"createGenerator.js","sourcesContent":["// @flow\n\nimport type {\n CombinatorTokenType,\n SelectorTokenType\n} from './types';\n\nconst escapeValue = (value: string): string => {\n return JSON.stringify(value);\n};\n\nconst renderSelector = (selectorToken: SelectorTokenType) => {\n const tokens = selectorToken.body;\n const parts = [];\n\n for (const token of tokens) {\n let part;\n\n if (token.type === 'universalSelector') {\n part = '*';\n } else if (token.type === 'typeSelector') {\n part = token.name;\n } else if (token.type === 'idSelector') {\n part = '#' + token.name;\n } else if (token.type === 'classSelector') {\n part = '.' + token.name;\n } else if (token.type === 'attributePresenceSelector') {\n part = '[' + token.name + ']';\n } else if (token.type === 'attributeValueSelector') {\n part = '[' + token.name + token.operator + escapeValue(token.value) + ']';\n } else if (token.type === 'pseudoClassSelector') {\n part = ':' + token.name;\n\n if (token.parameters.length) {\n part += '(' + token.parameters.map(escapeValue).join(', ') + ')';\n }\n } else if (token.type === 'pseudoElementSelector') {\n part = '::' + token.name;\n } else {\n throw new Error('Unknown token.');\n }\n\n parts.push(part);\n }\n\n return parts.join('');\n};\n\nexport default () => {\n const generate = (tokens: Array): string => {\n /**\n * @todo Think of a better name. This array contains selectors or combinators.\n */\n const sequences: Array = [];\n\n for (const token of tokens) {\n if (token.type === 'selector') {\n sequences.push(renderSelector(token));\n } else if (token.type === 'descendantCombinator') {\n sequences.push(' ');\n } else if (token.type === 'childCombinator') {\n sequences.push(' > ');\n } else if (token.type === 'adjacentSiblingCombinator') {\n sequences.push(' + ');\n } else if (token.type === 'generalSiblingCombinator') {\n sequences.push(' ~ ');\n } else {\n throw new Error('Unknown token.');\n }\n }\n\n return sequences.join('');\n };\n\n return {\n generate\n };\n};\n"]}