| import valueParser from 'postcss-value-parser'; |
| import mappings from './lib/map.js'; |
| |
| const displayRegex = /^display$/i; |
| |
| /** |
| * @param {string} value |
| * @return {string} |
| */ |
| function transform(value) { |
| const { nodes } = valueParser(value); |
| |
| if (nodes.length === 1) { |
| return value; |
| } |
| |
| const values = nodes |
| .filter((list, index) => index % 2 === 0) |
| .filter((node) => node.type === 'word') |
| .map((n) => n.value.toLowerCase()); |
| |
| if (values.length === 0) { |
| return value; |
| } |
| |
| const match = mappings.get(values.toString()); |
| |
| if (!match) { |
| return value; |
| } |
| |
| return match; |
| } |
| |
| /** |
| * @return {import('postcss').Plugin} |
| */ |
| function pluginCreator() { |
| return { |
| postcssPlugin: 'postcss-normalize-display-values', |
| |
| prepare() { |
| const cache = new Map(); |
| return { |
| /** |
| * @param {import('postcss').Root} css |
| */ |
| OnceExit(css) { |
| css.walkDecls(displayRegex, (decl) => { |
| const value = decl.value; |
| |
| if (!value) { |
| return; |
| } |
| |
| if (cache.has(value)) { |
| decl.value = cache.get(value); |
| |
| return; |
| } |
| |
| const result = transform(value); |
| |
| decl.value = result; |
| cache.set(value, result); |
| }); |
| }, |
| }; |
| }, |
| }; |
| } |
| /** @type {true} */ |
| pluginCreator.postcss = true; |
| const moduleExports = pluginCreator; |
| |
| export { moduleExports as default, moduleExports as 'module.exports' }; |