postcss-map-get
Version:
PostCSS plugin for sass-like Map Function
1 lines • 2.28 kB
JavaScript
;var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=_default;var _constant=require("./constant"),_parseParenthesisContent=_interopRequireDefault(require("./parse-parenthesis-content"));function getKeyFromMapString(mapString,keyParameter){const keyValue=keyParameter.replace(/\s/g,"");mapString=mapString.slice(1,-1),mapString=mapString.replace(/(\r\n|\n|\r)/gm,"");let isParsingKey=!0,hasFinishedParsingValue=!1,key="",value="";for(let position=0;position<mapString.length;position++){const currentCharacter=mapString[position];if(isParsingKey){":"===currentCharacter?isParsingKey=!1:key+=currentCharacter;continue}if("("===currentCharacter){const output=(0,_parseParenthesisContent.default)(mapString,position);value+=output.content,position=output.position,hasFinishedParsingValue=!0}else{const isLastCharacter=position===mapString.length-1;","===currentCharacter||isLastCharacter?(isLastCharacter&&(value+=currentCharacter),hasFinishedParsingValue=!0):value+=currentCharacter}if(hasFinishedParsingValue){if(key=key.replace(/\s/g,""),key===keyValue)return value.trim();isParsingKey=!0,hasFinishedParsingValue=!1,key="",value=""}}throw new Error(`${_constant.ERROR_PREFIX} unable to find “${keyValue}“ key inside map “(${mapString})“`)}function _default(value){let resolvedValue=value,indexOfMethod=resolvedValue.indexOf(_constant.METHOD);for(;-1<indexOfMethod;){const startPosition=indexOfMethod;let position=startPosition+_constant.METHOD.length-1,mapString="";const output=(0,_parseParenthesisContent.default)(resolvedValue,position);mapString+=output.content,position=output.position;let keyString="",hasFoundComa=!1;for(;position<resolvedValue.length;position++){const currentCharacter=resolvedValue[position];if(","===currentCharacter)hasFoundComa=!0;else if(")"===currentCharacter)break;else hasFoundComa&&(keyString+=currentCharacter)}position++;const currentDeclaration=resolvedValue.slice(startPosition,position),mapResolvedValue=getKeyFromMapString(mapString,keyString);resolvedValue=resolvedValue.replace(currentDeclaration,mapResolvedValue),indexOfMethod=resolvedValue.indexOf(_constant.METHOD)}return resolvedValue}module.exports=exports.default;