{"version":3,"file":"index.cjs","sources":["../src/index.js"],"sourcesContent":["const valueParser = require('postcss-value-parser');\n\n// whether the value has a lab() or lch() matcher\nconst gradientRegExp = /(repeating-)?(conic|linear|radial)-gradient\\([\\W\\w]*\\)/i;\nconst gradientPartsRegExp = /^(repeating-)?(conic|linear|radial)-gradient$/i;\n\nconst isPunctuationCommaNode = node => node.type === 'div' && node.value === ',';\n\nfunction insertBefore(nodes, node, ...values) {\n\tconst index = nodes.findIndex(n => n === node);\n\tnodes.splice.apply(nodes, [index - 1, 0].concat(\n\t\tArray.prototype.slice.call(...values, 0)),\n\t);\n}\n\nfunction isNumericNode(node) {\n\ttry {\n\t\treturn valueParser.unit(node?.value) !== false;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}\n\n/**\n * Transform double-position gradients in CSS.\n * @param {{preserve?: boolean}} opts\n * @returns {import('postcss').Plugin}\n */\nmodule.exports = function creator(opts) {\n\tconst preserve = 'preserve' in Object(opts) ? Boolean(opts.preserve) : true;\n\n\treturn {\n\t\tpostcssPlugin: 'postcss-double-position-gradients',\n\t\tDeclaration(decl, { result }) {\n\t\t\tif (!gradientRegExp.test(decl.value)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet valueAST;\n\n\t\t\ttry {\n\t\t\t\tvalueAST = valueParser(decl.value);\n\t\t\t} catch (error) {\n\t\t\t\tdecl.warn(\n\t\t\t\t\tresult,\n\t\t\t\t\t`Failed to parse value '${decl.value}' as a CSS gradient. Leaving the original value intact.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (typeof valueAST === 'undefined') {\n\t\t\t\t// Bail if there's an error\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueAST.walk(func => {\n\t\t\t\tif (func.type !== 'function' || !gradientPartsRegExp.test(func.value)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Discarding comments and spaces\n\t\t\t\tconst nodes = func.nodes.filter((x) => {\n\t\t\t\t\treturn x.type !== 'comment' && x.type !== 'space';\n\t\t\t\t});\n\n\t\t\t\tnodes.forEach((node, index, nodes) => {\n\t\t\t\t\tconst oneValueBack = Object(nodes[index - 1]);\n\t\t\t\t\tconst twoValuesBack = Object(nodes[index - 2]);\n\t\t\t\t\tconst nextNode = Object(nodes[index + 1]);\n\t\t\t\t\tconst isDoublePositionLength = twoValuesBack.type && isNumericNode(oneValueBack) && isNumericNode(node);\n\n\t\t\t\t\t// if the argument concludes a double-position gradient\n\t\t\t\t\tif (isDoublePositionLength) {\n\t\t\t\t\t\t// insert the fallback colors\n\t\t\t\t\t\tconst color = { type: twoValuesBack.type, value: twoValuesBack.value };\n\t\t\t\t\t\tconst comma = {\n\t\t\t\t\t\t\ttype: 'div',\n\t\t\t\t\t\t\tvalue: ',',\n\t\t\t\t\t\t\tbefore: isPunctuationCommaNode(nextNode) ? nextNode.before : '',\n\t\t\t\t\t\t\tafter: isPunctuationCommaNode(nextNode) ? '' : ' ',\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tinsertBefore(func.nodes, node, [comma, color]);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\tconst modifiedValue = valueAST.toString();\n\n\t\t\tif (modifiedValue !== decl.value) {\n\t\t\t\tif (preserve) {\n\t\t\t\t\tdecl.cloneBefore({ value: modifiedValue });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tdecl.value = modifiedValue;\n\t\t\t}\n\t\t},\n\t};\n};\n\nmodule.exports.postcss = true;\n"],"names":["valueParser","require","gradientRegExp","gradientPartsRegExp","isPunctuationCommaNode","node","type","value","isNumericNode","unit","e","module","exports","opts","preserve","Object","Boolean","postcssPlugin","Declaration","decl","result","test","valueAST","error","warn","walk","func","nodes","filter","x","forEach","index","oneValueBack","twoValuesBack","nextNode","color","comma","before","after","values","findIndex","n","splice","apply","concat","Array","prototype","slice","call","insertBefore","modifiedValue","toString","cloneBefore","postcss"],"mappings":"aAAA,MAAMA,EAAcC,QAAQ,wBAGtBC,EAAiB,0DACjBC,EAAsB,iDAEtBC,EAAyBC,GAAsB,QAAdA,EAAKC,MAAiC,MAAfD,EAAKE,MASnE,SAASC,EAAcH,cAEoB,IAAlCL,EAAYS,WAAKJ,SAAAA,EAAME,OAC7B,MAAOG,UACD,GASTC,OAAOC,QAAU,SAAiBC,SAC3BC,IAAW,aAAcC,OAAOF,KAAQG,QAAQH,EAAKC,gBAEpD,CACNG,cAAe,oCACfC,YAAYC,GAAMC,OAAEA,QACdlB,EAAemB,KAAKF,EAAKZ,kBAI1Be,MAGHA,EAAWtB,EAAYmB,EAAKZ,OAC3B,MAAOgB,GACRJ,EAAKK,KACJJ,EACC,0BAAyBD,EAAKZ,wEAIT,IAAbe,SAKXA,EAASG,MAAKC,OACK,aAAdA,EAAKpB,OAAwBH,EAAoBkB,KAAKK,EAAKnB,qBAKjDmB,EAAKC,MAAMC,QAAQC,GACd,YAAXA,EAAEvB,MAAiC,UAAXuB,EAAEvB,OAG5BwB,SAAQ,CAACzB,EAAM0B,EAAOJ,WACrBK,EAAejB,OAAOY,EAAMI,EAAQ,IACpCE,EAAgBlB,OAAOY,EAAMI,EAAQ,IACrCG,EAAWnB,OAAOY,EAAMI,EAAQ,OACPE,EAAc3B,MAAQE,EAAcwB,IAAiBxB,EAAcH,GAGtE,OAErB8B,EAAQ,CAAE7B,KAAM2B,EAAc3B,KAAMC,MAAO0B,EAAc1B,OACzD6B,EAAQ,CACb9B,KAAM,MACNC,MAAO,IACP8B,OAAQjC,EAAuB8B,GAAYA,EAASG,OAAS,GAC7DC,MAAOlC,EAAuB8B,GAAY,GAAK,MAtEtD,SAAsBP,EAAOtB,KAASkC,SAC/BR,EAAQJ,EAAMa,WAAUC,GAAKA,IAAMpC,IACzCsB,EAAMe,OAAOC,MAAMhB,EAAO,CAACI,EAAQ,EAAG,GAAGa,OACxCC,MAAMC,UAAUC,MAAMC,QAAQT,EAAQ,KAsElCU,CAAavB,EAAKC,MAAOtB,EAAM,CAAC+B,EAAOD,SAIlC,WAGFe,EAAgB5B,EAAS6B,cAE3BD,IAAkB/B,EAAKZ,MAAO,IAC7BO,cACHK,EAAKiC,YAAY,CAAE7C,MAAO2C,IAI3B/B,EAAKZ,MAAQ2C,MAMjBvC,OAAOC,QAAQyC,SAAU"}