UNPKG

unnestcss

Version:
1 lines 13.5 kB
{"mappings":"AA6BA,SAAgB,iBAAiB;AACjC,cAAc,eAAe;AAE7B,OAAO,cAAM,UAAW,EACtB,OACA,MACA,QACA,OACA,QACA,OACA,QACA,MACA,OACA,UACA,QACA,UACA,MACA,UACC;CACD;CACA,MAAM;CACN,QAAQ;CACR;CACA;CACA;CACA;CACA;CACA;CACA,UAAU;CACV;CACA,WAAW;CACX;CACA;MACE;AAoCJ,OAAO,cAAM,UAAW,EACtB,OACA,MACA,QACA,OACA,UACA,MACA,UACC;CACD;CACA,MAAM;CACN,QAAQ;CACR;CACA,WAAW;CACX;CACA;MACE;AAeJ,OAAO,cAAM,cAAe,EAC1B,OACA,MACA,QACA,QACA,UACA,MACA,UACC;CACD;CACA,MAAM;CACN,QAAQ;CACR;CACA,WAAW;CACX;CACA;MACE;AAeJ,OAAO,cAAM,QACX,GAAG,WACH,EACE,OACA,MACA,QACA,MACA,OACA,UACA,QACA,QACA,iBACC;CACD;CACA,OAAO;CACP,SAAS;CACT,OAAO;CACP;CACA,WAAW;CACX;CACA;CACA,0BAA0B;MAE3B;AAqSH,OAAO,cAAM,UAAW,kBAAgB","names":[],"sources":["../../../../src/lib/stylis/parser.ts"],"sourcesContent":["import {\n AMPERSAND,\n ASTERISK,\n AT,\n CARRIAGE_RETURN,\n COLON,\n COMMA,\n COMMENT,\n DECLARATION,\n DOUBLE_QUOTE,\n FORM_FEED,\n HORIZONTAL_TAB,\n MINUS,\n LEFT_CURLY_BRACKET,\n LEFT_PARENTHESIS,\n LEFT_SQUARE_BRACKET,\n LINE_FEED,\n NULL_CHARACTER,\n REVERSE_SOLIDUS,\n RIGHT_CURLY_BRACKET,\n RULESET,\n SEMICOLON,\n SINGLE_QUOTE,\n SOLIDUS,\n SPACE,\n START_OF_HEADING,\n UNDERSCORE,\n} from \"./enum.ts\";\nimport { charCodeAt, charCodeFrom, charOr } from \"./utility.ts\";\nimport { token, Tokenizer } from \"./tokenizer.ts\";\nimport type { Element } from \"./types.ts\";\n\nexport const ruleset = ({\n value,\n root,\n parent,\n index,\n offset,\n rules,\n points,\n type,\n props,\n children,\n length,\n siblings,\n line,\n column,\n}: {\n value: string;\n root: Element;\n parent: Element | null;\n index: number;\n offset: number;\n rules: string[];\n points: number[];\n type: string;\n props: string[];\n children: Element[];\n length: number;\n siblings?: Element[];\n line: number;\n column: number;\n}): Element => {\n let currentPosition = offset - 1;\n\n const activeRules = offset === 0 ? rules : [\"\"];\n const ruleCount = activeRules.length;\n\n for (let itemIndex = 0, propIndex = 0; itemIndex < index; itemIndex++) {\n const pointPosition = points[itemIndex];\n const segmentEnd = Math.abs(pointPosition);\n\n const substring = value.slice(currentPosition + 1, segmentEnd);\n currentPosition = segmentEnd;\n\n for (let ruleIndex = 0; ruleIndex < ruleCount; ruleIndex++) {\n const processedValue =\n pointPosition > 0\n ? `${activeRules[ruleIndex]} ${substring}`\n : substring.replaceAll(AMPERSAND + FORM_FEED, activeRules[ruleIndex]);\n props[propIndex] = processedValue.trim();\n propIndex++;\n }\n }\n return {\n value,\n root,\n parent,\n type: offset === 0 ? RULESET : type,\n props,\n children,\n length,\n siblings,\n line,\n column,\n } as Element;\n};\n\nexport const comment = ({\n value,\n root,\n parent,\n props,\n siblings,\n line,\n column,\n}: {\n value: string;\n root: Element;\n parent: Element | null;\n props: string;\n siblings?: Element[];\n line: number;\n column: number;\n}): Element => {\n return {\n value,\n root,\n parent,\n type: COMMENT,\n props,\n children: value.slice(2, -2),\n length: 0,\n siblings,\n line,\n column,\n } as Element;\n};\n\nexport const declaration = ({\n value,\n root,\n parent,\n length,\n siblings,\n line,\n column,\n}: {\n value: string;\n root: Element;\n parent: Element | null;\n length: number;\n siblings?: Element[];\n line: number;\n column: number;\n}): Element => {\n return {\n value,\n root,\n parent,\n type: DECLARATION,\n props: value.slice(0, length),\n children: value.slice(length + 1, -1),\n length,\n siblings,\n line,\n column,\n } as Element;\n};\n\nexport const parse = (\n t: Tokenizer,\n {\n value = \"\",\n root = null,\n parent = null,\n rule = null,\n rules = [\"\"],\n rulesets = [],\n pseudo = 0,\n points = [0],\n declarations = rulesets,\n }: {\n value?: string;\n root?: Element;\n parent?: Element | null;\n rule?: Element | string[];\n rules?: string[];\n rulesets?: Element[];\n pseudo?: number;\n points?: number[];\n declarations?: string[] | Element[];\n } = {},\n): Element[] => {\n let index = 0;\n let offset = 0;\n let length = pseudo;\n let atrule;\n let property = 0;\n let variable = 1;\n let scanning = true;\n let ampersand = 1;\n let currentChar: string = NULL_CHARACTER;\n let previousChar: string = NULL_CHARACTER;\n let type = \"\";\n let props = rules;\n let children = rulesets;\n let reference = rule;\n let characters = \"\";\n\n while (scanning) {\n previousChar = currentChar;\n currentChar = t.next();\n switch (currentChar) {\n // (\n case LEFT_PARENTHESIS:\n if (characters[length - 1] === COLON) {\n const processedChar = t.delimit(currentChar).replace(AMPERSAND, AMPERSAND + FORM_FEED);\n characters += processedChar;\n const startPos = Math.abs(index ? points[index - 1] : 0);\n\n if (characters.indexOf(AMPERSAND + FORM_FEED, startPos) !== -1) {\n ampersand = -1;\n }\n break;\n }\n // \" ' [\n case DOUBLE_QUOTE:\n case SINGLE_QUOTE:\n case LEFT_SQUARE_BRACKET:\n characters += t.delimit(currentChar);\n break;\n // \\t \\n \\r\n case HORIZONTAL_TAB:\n case LINE_FEED:\n case CARRIAGE_RETURN:\n case SPACE:\n characters += t.whitespace(previousChar);\n break;\n // \\\n case REVERSE_SOLIDUS:\n characters += t.escaping(t.position - 1, 7);\n continue;\n // /\n case SOLIDUS:\n switch (t.peek()) {\n case ASTERISK:\n case SOLIDUS: {\n (declarations as unknown as Element[]).push(\n comment({\n value: t.commenter(t.next(), t.position),\n root,\n parent,\n props: t.character,\n siblings: declarations as unknown as Element[],\n line: t.line,\n column: t.column,\n }),\n );\n if (\n (token(charOr(previousChar, START_OF_HEADING)) === 5 ||\n token(charOr(t.peek(), START_OF_HEADING)) === 5) &&\n characters.length &&\n characters.slice(-1) !== SPACE\n ) {\n characters += SPACE;\n }\n break;\n }\n default:\n characters += SOLIDUS;\n }\n break;\n // {\n case charCodeFrom(123 * variable):\n points[index] = characters.length * ampersand;\n index++;\n // } ; \\0\n case charCodeFrom(125 * variable):\n case SEMICOLON:\n case NULL_CHARACTER:\n switch (currentChar) {\n // \\0 }\n case NULL_CHARACTER:\n case RIGHT_CURLY_BRACKET:\n scanning = false;\n // ;\n case charCodeFrom(59 + offset):\n if (ampersand === -1) {\n characters = characters.replace(FORM_FEED, \"\");\n }\n if (\n property > 0 &&\n (characters.length - length || (variable === 0 && previousChar === SOLIDUS))\n ) {\n (declarations as unknown as Element[]).push(\n property > 32\n ? declaration({\n value: characters + SEMICOLON,\n root: rule as Element,\n parent,\n length: length - 1,\n siblings: declarations as unknown as Element[],\n line: t.line,\n column: t.column,\n })\n : declaration({\n value: characters.replace(SPACE, \"\") + SEMICOLON,\n root: rule as Element,\n parent,\n length: length - 2,\n siblings: declarations as unknown as Element[],\n line: t.line,\n column: t.column,\n }),\n );\n }\n break;\n // @ ;\n case SEMICOLON:\n characters += SEMICOLON;\n // { rule/at-rule\n default:\n props = [];\n children = [];\n rulesets.push(\n (reference = ruleset({\n value: characters,\n root,\n parent,\n index,\n offset,\n rules,\n points,\n type,\n props,\n children,\n length,\n siblings: rulesets,\n line: t.line,\n column: t.column,\n })),\n );\n\n if (currentChar === LEFT_CURLY_BRACKET) {\n if (offset === 0) {\n parse(t, {\n value: characters,\n root,\n parent: reference,\n rule: reference,\n rules: props,\n rulesets,\n pseudo: length,\n points,\n declarations: children,\n });\n } else {\n switch (atrule) {\n // c(ontainer)\n case \"c\":\n if (characters.slice(2, 10) === \"ontainer\") {\n break;\n }\n offset = 0;\n // l(ayer)\n case \"l\":\n if (characters.slice(2, 6) === \"ayer\") {\n break;\n }\n offset = 0;\n // d(ocument) m(edia) s(upports)\n case \"d\":\n case \"m\":\n case \"s\":\n break;\n default:\n offset = 0;\n }\n if (offset) {\n if (rule) {\n props = [];\n children.push(\n ruleset({\n value,\n root: reference,\n parent: reference,\n index: 0,\n offset: 0,\n rules,\n points,\n type,\n props: rules,\n children: props as any,\n length,\n siblings: children,\n line: t.line,\n column: t.column,\n }),\n );\n }\n parse(t, {\n value,\n root: reference,\n parent: reference,\n rule: children as any,\n rules: rules,\n rulesets: children,\n pseudo: length,\n points,\n declarations: rule ? props : children,\n });\n } else {\n parse(t, {\n value: characters,\n root: reference,\n parent: reference,\n rule: reference,\n rulesets: children,\n points,\n declarations: children,\n });\n }\n }\n }\n }\n index = offset = property = 0;\n variable = ampersand = 1;\n type = characters = \"\";\n length = pseudo;\n break;\n // :\n case COLON:\n length = 1 + characters.length;\n property = charCodeAt(previousChar);\n default:\n if (variable < 1) {\n if (currentChar === LEFT_CURLY_BRACKET) {\n variable--;\n } else if (currentChar === RIGHT_CURLY_BRACKET) {\n variable++;\n if (variable === 1 && t.prev() === RIGHT_CURLY_BRACKET) {\n continue;\n }\n }\n }\n characters += currentChar;\n switch (charCodeFrom(charCodeAt(currentChar) * variable)) {\n // &\n case AMPERSAND:\n if (offset > 0) {\n ampersand = 1;\n } else {\n characters += FORM_FEED;\n ampersand = -1;\n }\n break;\n // ,\n case COMMA:\n points[index] = (characters.length - 1) * ampersand;\n index++;\n ampersand = 1;\n break;\n // @\n case AT:\n // -\n if (t.peek() === MINUS) {\n characters += t.delimit(t.next());\n }\n atrule = t.peek();\n type = characters += t.identifier(t.position);\n offset = length = type.length;\n currentChar = UNDERSCORE;\n break;\n // -\n case MINUS:\n if (previousChar === MINUS && characters.length === 2) {\n variable = 0;\n }\n }\n }\n }\n\n return rulesets;\n};\n\nexport const compile = (value: string): Element[] => parse(new Tokenizer(value));\n"],"version":3,"file":"parser.d.ts"}