stylelint-css-in-js-syntax
Version:
This plugin provides [ESLint](https://eslint.org/) rules that limit the line length of your comments. Furthermore, an **automatic fix** is included such that you can save time manually formatting your comments. As such it is recommended to apply this rule
1 lines • 6.16 kB
Source Map (JSON)
{"version":3,"file":"util.stringify-expressions.mjs","sources":["../../../src/syntax.parser/util.stringify-expressions.ts"],"sourcesContent":["export function stringifyExpressions(\n quasis: Array<{ value: { cooked: string } }>,\n expressions: string[],\n) {\n let cssString = \"\";\n const refs = [] as string[];\n\n for (let i = 0; i < quasis.length; i++) {\n const currentQuasi = quasis[i]?.value.cooked;\n cssString += currentQuasi;\n\n const nextExpression = expressions[i];\n\n if (nextExpression) {\n const nearestChar = cssString?.replace(/\\n/g, \"\").trimEnd().at(-1);\n const hasCommentBefore =\n `${cssString?.replace(/\\n/g, \"\").trimEnd().at(-2)}${nearestChar}` ===\n \"*/\";\n const hasCommentBeforeOnSameLine =\n `${cssString.trimEnd().at(-2)}${nearestChar}` === \"*/\";\n\n const nextQuasi = quasis[i + 1]?.value.cooked.trimStart();\n\n const currentQuasiEndsWithNewLine = /\\n( |\\t\\r)*?/.test(\n currentQuasi ?? \"\",\n );\n\n const base64Expression = Buffer.from(nextExpression).toString(\"base64\");\n const refIndexToExpression = (() => {\n const existingIndex = refs.indexOf(base64Expression);\n\n if (existingIndex !== -1) {\n return existingIndex;\n } else {\n refs.push(base64Expression);\n return refs.length - 1;\n }\n })();\n\n const newlineCount = nextExpression.split(\"\\n\").length - 1;\n\n if (\n (!nearestChar ||\n [\"{\", \";\", \"}\"].includes(nearestChar) ||\n (hasCommentBefore && !hasCommentBeforeOnSameLine)) &&\n !nextQuasi?.startsWith(\"{\") &&\n !nextQuasi?.startsWith(\"&\") &&\n !nextQuasi?.startsWith(\".\") &&\n !nextQuasi?.startsWith(\"[\") &&\n !nextQuasi?.startsWith(\"$\") &&\n nextQuasi !== \"\" &&\n ((currentQuasiEndsWithNewLine && !nextQuasi?.trim().startsWith(\":\")) ||\n nextQuasi?.startsWith(\"\\n\") ||\n nextQuasi?.startsWith(\";\"))\n ) {\n cssString += `ref-${refIndexToExpression}:ignore${\"\\n\".repeat(newlineCount)}_${\n nextQuasi?.startsWith(\";\") || nextQuasi?.startsWith(\"{\") ? \"\" : \";\"\n }`;\n } else {\n const sanitizedExpression = sanitizeExpression(\n nextExpression,\n ).replaceAll(\"\\n\", \"\");\n\n cssString += `ref-${refIndexToExpression}_${sanitizedExpression}${\"\\n\".repeat(newlineCount)}_`;\n }\n }\n }\n\n cssString += `/*refs ${refs.join(\";\")}*/`;\n\n return cssString;\n}\n\nfunction sanitizeExpression(expression: string): string {\n return expression\n .replaceAll(\" \", \"\")\n .replaceAll(\"\\n\", \"\")\n .replaceAll(/[^A-Za-z\\d]/g, ($1) => `\\\\${$1}`)\n .replaceAll(\"\\\\_\", \"ˍ\")\n .replaceAll(\"\\\\.\", \".\")\n .replaceAll(\"\\\\:\", \"꞉\")\n .replaceAll(\"\\\\,\", \",\")\n .replaceAll(\"\\\\(\", \"⸨\")\n .replaceAll(\"\\\\)\", \"⸩\")\n .replaceAll(\"\\\\{\", \"❴\")\n .replaceAll(\"\\\\}\", \"❵\")\n .replaceAll(\"\\\\[\", \"⁅\")\n .replaceAll(\"\\\\]\", \"⁆\");\n}\n"],"names":[],"mappings":"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"}