{"version":3,"file":"resolve.cjs","sources":["../../../src/js/resolve.ts"],"sourcesContent":["/**\n * resolve.js\n */\n\nimport { LRUCache } from 'lru-cache';\nimport {\n convertRgbToHex,\n resolveColorFunc,\n resolveColorMix,\n resolveColorValue\n} from './color';\nimport { isString } from './common';\nimport { cssCalc } from './css-calc';\nimport { cssVar } from './css-var';\nimport { resolveRelativeColor } from './relative-color';\nimport { valueToJsonString } from './util';\n\n/* constants */\nimport {\n FN_COLOR,\n FN_MIX,\n SYN_FN_MATH_CALC,\n SYN_FN_REL,\n SYN_FN_VAR,\n VAL_COMP,\n VAL_SPEC\n} from './constant.js';\n\nconst RGB_TRANSPARENT = 'rgba(0, 0, 0, 0)';\n\n/* regexp */\nconst REG_FN_MATH_CALC = new RegExp(SYN_FN_MATH_CALC);\nconst REG_FN_REL = new RegExp(SYN_FN_REL);\nconst REG_FN_VAR = new RegExp(SYN_FN_VAR);\n\n/* cached results */\nexport const cachedResults = new LRUCache({\n max: 4096\n});\n\n/**\n * resolve CSS color\n * @param {string} color - color value\n * - system colors are not supported\n * @param {object} [opt] - options\n * @param {string} [opt.currentColor]\n * - color to use for `currentcolor` keyword\n * - if omitted, it will be treated as a missing color\n * i.e. `rgb(none none none / none)`\n * @param {object} [opt.customProperty]\n * - custom properties\n * - pair of `--` prefixed property name and value,\n * e.g. `customProperty: { '--some-color': '#0000ff' }`\n * - and/or `callback` function to get the value of the custom property,\n * e.g. `customProperty: { callback: someDeclaration.getPropertyValue }`\n * @param {object} [opt.dimension]\n * - dimension, convert relative length to pixels\n * - pair of unit and it's value as a number in pixels,\n * e.g. `dimension: { em: 12, rem: 16, vw: 10.26 }`\n * - and/or `callback` function to get the value as a number in pixels,\n * e.g. `dimension: { callback: convertUnitToPixel }`\n * @param {string} [opt.format]\n * - output format, one of below\n * - `computedValue` (default), [computed value][139] of the color\n * - `specifiedValue`, [specified value][140] of the color\n * - `hex`, hex color notation, i.e. `rrggbb`\n * - `hexAlpha`, hex color notation with alpha channel, i.e. `#rrggbbaa`\n * @param {*} [opt.key] - key e.g. CSS property `background-color`\n * @returns {?string|Array}\n * - one of rgba?(), #rrggbb(aa)?, color-name, '(empty-string)',\n * color(color-space r g b / alpha), color(color-space x y z / alpha),\n * lab(l a b / alpha), lch(l c h / alpha), oklab(l a b / alpha),\n * oklch(l c h / alpha), null or [key, rgba?()] etc. if `key` is specified\n * - in `computedValue`, values are numbers, however `rgb()` values are\n * integers\n * - in `specifiedValue`, returns `empty string` for unknown and/or invalid\n * color\n * - in `hex`, returns `null` for `transparent`, and also returns `null` if\n * any of `r`, `g`, `b`, `alpha` is not a number\n * - in `hexAlpha`, returns `#00000000` for `transparent`,\n * however returns `null` if any of `r`, `g`, `b`, `alpha` is not a number\n */\nexport const resolve = (\n color: string,\n opt: {\n currentColor?: string;\n customProperty?: object;\n dimension?: object;\n format?: string;\n key?: any;\n } = {}\n): (string | Array) | null => {\n if (isString(color)) {\n color = color.trim();\n } else {\n throw new TypeError(`${color} is not a string.`);\n }\n const { currentColor, customProperty = {}, format = VAL_COMP, key } = opt;\n let cacheKey;\n if (\n !REG_FN_VAR.test(color) ||\n typeof (\n customProperty as { callback?: (value: string) => string }\n ).callback === 'function'\n ) {\n cacheKey = `{resolve:${color},opt:${valueToJsonString(opt)}}`;\n if (cachedResults.has(cacheKey)) {\n return cachedResults.get(cacheKey) as string | Array;\n }\n }\n let res, cs, r, g, b, alpha;\n if (REG_FN_VAR.test(color)) {\n if (format === VAL_SPEC) {\n if (cacheKey) {\n cachedResults.set(cacheKey, color);\n }\n return color;\n }\n const resolvedColor = cssVar(color, opt);\n if (resolvedColor) {\n color = resolvedColor;\n } else {\n switch (format) {\n case 'hex':\n case 'hexAlpha': {\n if (cacheKey) {\n cachedResults.set(cacheKey, null!);\n }\n return null;\n }\n default: {\n res = RGB_TRANSPARENT;\n if (cacheKey) {\n cachedResults.set(cacheKey, res);\n }\n return res;\n }\n }\n }\n }\n if (opt.format !== format) {\n opt.format = format;\n }\n color = color.toLowerCase();\n if (REG_FN_REL.test(color)) {\n const resolvedColor = resolveRelativeColor(color, opt) as string | null;\n if (format === VAL_COMP) {\n if (resolvedColor) {\n res = resolvedColor;\n } else {\n res = RGB_TRANSPARENT;\n }\n if (cacheKey) {\n cachedResults.set(cacheKey, res);\n }\n return res;\n }\n if (format === VAL_SPEC) {\n if (resolvedColor) {\n res = resolvedColor;\n } else {\n res = '';\n }\n if (cacheKey) {\n cachedResults.set(cacheKey, res);\n }\n return res;\n }\n if (resolvedColor) {\n color = resolvedColor;\n } else {\n color = '';\n }\n }\n if (REG_FN_MATH_CALC.test(color)) {\n const resolvedColor = cssCalc(color, opt) as string | null;\n if (resolvedColor) {\n color = resolvedColor;\n } else {\n color = '';\n }\n }\n if (color === 'transparent') {\n switch (format) {\n case VAL_SPEC: {\n if (cacheKey) {\n cachedResults.set(cacheKey, color);\n }\n return color;\n }\n case 'hex': {\n if (cacheKey) {\n cachedResults.set(cacheKey, null!);\n }\n return null;\n }\n case 'hexAlpha': {\n res = '#00000000';\n if (cacheKey) {\n cachedResults.set(cacheKey, res);\n }\n return res;\n }\n case VAL_COMP:\n default: {\n res = RGB_TRANSPARENT;\n if (cacheKey) {\n cachedResults.set(cacheKey, res);\n }\n return res;\n }\n }\n } else if (color === 'currentcolor') {\n if (format === VAL_SPEC) {\n if (cacheKey) {\n cachedResults.set(cacheKey, color);\n }\n return color;\n }\n if (currentColor) {\n if (currentColor.startsWith(FN_MIX)) {\n [cs, r, g, b, alpha] = resolveColorMix(currentColor, opt) as [\n string,\n number,\n number,\n number,\n number\n ];\n } else if (currentColor.startsWith(FN_COLOR)) {\n [cs, r, g, b, alpha] = resolveColorFunc(currentColor, opt) as [\n string,\n number,\n number,\n number,\n number\n ];\n } else {\n [cs, r, g, b, alpha] = resolveColorValue(currentColor, opt) as [\n string,\n number,\n number,\n number,\n number\n ];\n }\n } else if (format === VAL_COMP) {\n res = RGB_TRANSPARENT;\n if (cacheKey) {\n cachedResults.set(cacheKey, res);\n }\n return res;\n }\n } else if (format === VAL_SPEC) {\n if (color.startsWith(FN_MIX)) {\n res = resolveColorMix(color, opt);\n if (cacheKey) {\n cachedResults.set(cacheKey, res!);\n }\n return res;\n } else if (color.startsWith(FN_COLOR)) {\n [cs, r, g, b, alpha] = resolveColorFunc(color, opt) as [\n string,\n number | string,\n number | string,\n number | string,\n number | string\n ];\n if (alpha === 1) {\n res = `color(${cs} ${r} ${g} ${b})`;\n } else {\n res = `color(${cs} ${r} ${g} ${b} / ${alpha})`;\n }\n if (cacheKey) {\n cachedResults.set(cacheKey, res);\n }\n return res;\n } else {\n const rgb = resolveColorValue(color, opt);\n if (!rgb) {\n res = '';\n if (cacheKey) {\n cachedResults.set(cacheKey, res);\n }\n return res;\n }\n [cs, r, g, b, alpha] = rgb;\n if (cs === 'rgb') {\n if (alpha === 1) {\n res = `${cs}(${r}, ${g}, ${b})`;\n } else {\n res = `${cs}a(${r}, ${g}, ${b}, ${alpha})`;\n }\n if (cacheKey) {\n cachedResults.set(cacheKey, res);\n }\n return res;\n }\n if (alpha === 1) {\n res = `${cs}(${r} ${g} ${b})`;\n } else {\n res = `${cs}(${r} ${g} ${b} / ${alpha})`;\n }\n if (cacheKey) {\n cachedResults.set(cacheKey, res);\n }\n return res;\n }\n } else if (/currentcolor/.test(color)) {\n if (currentColor) {\n color = color.replace(/currentcolor/g, currentColor);\n }\n if (/transparent/.test(color)) {\n color = color.replace(/transparent/g, RGB_TRANSPARENT);\n }\n if (color.startsWith(FN_MIX)) {\n [cs, r, g, b, alpha] = resolveColorMix(color, opt) as [\n string,\n number,\n number,\n number,\n number\n ];\n }\n } else if (/transparent/.test(color)) {\n color = color.replace(/transparent/g, RGB_TRANSPARENT);\n if (color.startsWith(FN_MIX)) {\n [cs, r, g, b, alpha] = resolveColorMix(color, opt) as [\n string,\n number,\n number,\n number,\n number\n ];\n }\n } else if (color.startsWith(FN_MIX)) {\n [cs, r, g, b, alpha] = resolveColorMix(color, opt) as [\n string,\n number,\n number,\n number,\n number\n ];\n } else if (color.startsWith(FN_COLOR)) {\n [cs, r, g, b, alpha] = resolveColorFunc(color, opt) as [\n string,\n number,\n number,\n number,\n number\n ];\n } else if (color) {\n [cs, r, g, b, alpha] = resolveColorValue(color, opt) as [\n string,\n number,\n number,\n number,\n number\n ];\n }\n switch (format) {\n case 'hex': {\n let hex;\n if (\n isNaN(r as number) ||\n isNaN(g as number) ||\n isNaN(b as number) ||\n isNaN(alpha as number) ||\n alpha === 0\n ) {\n hex = null;\n } else {\n hex = convertRgbToHex([r as number, g as number, b as number]);\n }\n if (key) {\n res = [key, hex];\n } else {\n res = hex;\n }\n break;\n }\n case 'hexAlpha': {\n let hex;\n if (\n isNaN(r as number) ||\n isNaN(g as number) ||\n isNaN(b as number) ||\n isNaN(alpha as number)\n ) {\n hex = null;\n } else {\n hex = convertRgbToHex([\n r as number,\n g as number,\n b as number,\n alpha as number\n ]);\n }\n if (key) {\n res = [key, hex];\n } else {\n res = hex;\n }\n break;\n }\n case VAL_COMP:\n default: {\n let value;\n switch (cs) {\n case 'rgb': {\n if (alpha === 1) {\n value = `${cs}(${r}, ${g}, ${b})`;\n } else {\n value = `${cs}a(${r}, ${g}, ${b}, ${alpha})`;\n }\n break;\n }\n case 'lab':\n case 'lch':\n case 'oklab':\n case 'oklch': {\n if (alpha === 1) {\n value = `${cs}(${r} ${g} ${b})`;\n } else {\n value = `${cs}(${r} ${g} ${b} / ${alpha})`;\n }\n break;\n }\n // color()\n default: {\n if (alpha === 1) {\n value = `color(${cs} ${r} ${g} ${b})`;\n } else {\n value = `color(${cs} ${r} ${g} ${b} / ${alpha})`;\n }\n }\n }\n if (key) {\n res = [key, value];\n } else {\n res = value;\n }\n }\n }\n if (cacheKey) {\n cachedResults.set(cacheKey, res!);\n }\n return res;\n};\n"],"names":["SYN_FN_MATH_CALC","SYN_FN_REL","SYN_FN_VAR","LRUCache","color","isString","VAL_COMP","valueToJsonString","VAL_SPEC","cssVar","resolveRelativeColor","cssCalc","FN_MIX","resolveColorMix","FN_COLOR","resolveColorFunc","resolveColorValue","convertRgbToHex"],"mappings":"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"}