unnestcss
Version:
A library for un-nesting CSS
1 lines • 2.28 kB
Source Map (JSON)
{"mappings":"AAYA,cAAc,SAAS,kBAAkB;AAGzC,OAAO,cAAM,aACV,YAAY,iBAAe;AAM9B,OAAO,cAAM,YAAa,SAAS","names":[],"sources":["../../../../src/lib/stylis/middleware.ts"],"sourcesContent":["import {\n COLON,\n FORM_FEED,\n GREATER_THAN,\n LEFT_PARENTHESIS,\n NULL_CHARACTER,\n PLUS,\n RULESET,\n SPACE,\n TILDE,\n} from \"./enum.js\";\nimport { Tokenizer } from \"./tokenizer.ts\";\nimport type { Element, Middleware } from \"./types.ts\";\nimport { serialize } from \"./serializer.ts\";\n\nexport const middleware =\n (collection: Middleware[]): Middleware =>\n (element, index, children, callback) =>\n serialize(collection, (currentMiddleware) =>\n currentMiddleware(element, index, children, callback),\n );\n\nexport const namespace = (element: Element): string | void => {\n if (element.type === RULESET) {\n element.props = element.props.map((value) =>\n new Tokenizer(value)\n .tokenize()\n .map((value, index, children) => {\n if (!value) {\n return value;\n }\n switch (value[0]) {\n // \\f\n case FORM_FEED:\n return value.slice(1, value.length);\n // \\0 ( + > ~\n case NULL_CHARACTER:\n case LEFT_PARENTHESIS:\n case PLUS:\n case GREATER_THAN:\n case TILDE:\n return value;\n // :\n case COLON:\n index++;\n if (children[index] === \"global\") {\n children[index] = \"\";\n index++;\n children[index] = `\\f${children[index].slice((index = 1), -1)}`;\n }\n // \\s\n case SPACE:\n return index === 1 ? \"\" : value;\n default:\n switch (index) {\n case 0:\n element = value as any;\n return children.length > 1 ? \"\" : value;\n case (index = children.length - 1):\n case 2:\n return index === 2 ? value + element + element : value + element;\n default:\n return value;\n }\n }\n })\n .join(\"\"),\n );\n }\n};\n"],"version":3,"file":"middleware.d.ts"}