UNPKG

unnestcss

Version:
1 lines 18.1 kB
{"version":3,"file":"parser.cjs","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"],"names":["ruleset","currentPosition","offset","activeRules","rules","ruleCount","itemIndex","propIndex","index","pointPosition","points","segmentEnd","substring","value","ruleIndex","processedValue","AMPERSAND","FORM_FEED","RULESET","type","comment","COMMENT","declaration","DECLARATION","length","parse","rulesets","pseudo","atrule","property","variable","scanning","ampersand","currentChar: string","NULL_CHARACTER","previousChar: string","props","children","reference","rule","characters","currentChar","t","LEFT_PARENTHESIS","COLON","processedChar","startPos","DOUBLE_QUOTE","SINGLE_QUOTE","LEFT_SQUARE_BRACKET","HORIZONTAL_TAB","LINE_FEED","CARRIAGE_RETURN","SPACE","previousChar","REVERSE_SOLIDUS","SOLIDUS","ASTERISK","declarations","token","charOr","START_OF_HEADING","charCodeFrom","SEMICOLON","RIGHT_CURLY_BRACKET","LEFT_CURLY_BRACKET","charCodeAt","COMMA","AT","MINUS","UNDERSCORE","compile","Tokenizer"],"mappings":"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"}