{"version":3,"sources":["../src/between.js"],"names":["number","props","propName","componentName","value","isNaN","TypeError","numberOrPropsFunc","lowerCompare","gt","gte","upperCompare","lt","lte","greaterThanError","lessThanError","errorMessage","opts","errors","filter","Boolean","join","propsThunkify","reduce","acc","key","numberThunk","invokeWithProps","optsThunks","thunk","argValidators","isRequired","argValidator","every","validator","thunkValueValidator","betweenValidator","options","argError","between","propValue","RangeError","rest","thunkValuesError","betweenRequired"],"mappings":";;;;;;;AAAA;;AAEA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;AAEA,SAASA,MAAT,CAAgBC,KAAhB,EAAuBC,QAAvB,EAAiCC,aAAjC,EAAgD;AAC9C,MAAMC,KAAK,GAAGH,KAAK,CAACC,QAAD,CAAnB;;AACA,MAAI,OAAOE,KAAP,KAAiB,QAAjB,IAA6B,CAACC,KAAK,CAACD,KAAD,CAAvC,EAAgD;AAC9C,WAAO,IAAP;AACD;;AAED,SAAO,IAAIE,SAAJ,WAAiBH,aAAjB,eAAmCD,QAAnC,gCAAP;AACD;;AAED,SAASK,iBAAT,CAA2BN,KAA3B,EAAkCC,QAAlC,EAA4C;AAC1C,MAAME,KAAK,GAAGH,KAAK,CAACC,QAAD,CAAnB;;AAEA,MAAI,OAAOE,KAAP,KAAiB,UAArB,EAAiC;AAC/B,WAAO,IAAP;AACD;;AAED,MAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,CAACC,KAAK,CAACD,KAAD,CAAvC,EAAgD;AAC9C,WAAO,IAAP;AACD;;AAED,SAAO,IAAIE,SAAJ,WAAiBJ,QAAjB,mDAAP;AACD;;AAED,SAASM,YAAT,CAAsBJ,KAAtB,QAA0C;AAAA,MAAXK,EAAW,QAAXA,EAAW;AAAA,MAAPC,GAAO,QAAPA,GAAO;;AACxC,MAAI,OAAOD,EAAP,KAAc,QAAlB,EAA4B;AAC1B,WAAOL,KAAK,GAAGK,EAAf;AACD;;AACD,MAAI,OAAOC,GAAP,KAAe,QAAnB,EAA6B;AAC3B,WAAON,KAAK,IAAIM,GAAhB;AACD;;AACD,SAAO,IAAP;AACD;;AAED,SAASC,YAAT,CAAsBP,KAAtB,SAA0C;AAAA,MAAXQ,EAAW,SAAXA,EAAW;AAAA,MAAPC,GAAO,SAAPA,GAAO;;AACxC,MAAI,OAAOD,EAAP,KAAc,QAAlB,EAA4B;AAC1B,WAAOR,KAAK,GAAGQ,EAAf;AACD;;AACD,MAAI,OAAOC,GAAP,KAAe,QAAnB,EAA6B;AAC3B,WAAOT,KAAK,IAAIS,GAAhB;AACD;;AACD,SAAO,IAAP;AACD;;AAED,SAASC,gBAAT,QAAuC;AAAA,MAAXL,EAAW,SAAXA,EAAW;AAAA,MAAPC,GAAO,SAAPA,GAAO;;AACrC,MAAI,OAAOD,EAAP,KAAc,QAAlB,EAA4B;AAC1B,kCAAuBA,EAAvB;AACD;;AACD,MAAI,OAAOC,GAAP,KAAe,QAAnB,EAA6B;AAC3B,8CAAmCA,GAAnC;AACD;;AACD,SAAO,EAAP;AACD;;AAED,SAASK,aAAT,QAAoC;AAAA,MAAXH,EAAW,SAAXA,EAAW;AAAA,MAAPC,GAAO,SAAPA,GAAO;;AAClC,MAAI,OAAOD,EAAP,KAAc,QAAlB,EAA4B;AAC1B,+BAAoBA,EAApB;AACD;;AACD,MAAI,OAAOC,GAAP,KAAe,QAAnB,EAA6B;AAC3B,2CAAgCA,GAAhC;AACD;;AACD,SAAO,EAAP;AACD;;AAED,SAASG,YAAT,CAAsBb,aAAtB,EAAqCD,QAArC,EAA+Ce,IAA/C,EAAqD;AACnD,MAAMC,MAAM,GAAG,CAACJ,gBAAgB,CAACG,IAAD,CAAjB,EAAyBF,aAAa,CAACE,IAAD,CAAtC,EAA8CE,MAA9C,CAAqDC,OAArD,EAA8DC,IAA9D,CAAmE,OAAnE,CAAf;AACA,mBAAUlB,aAAV,eAA4BD,QAA5B,sBAAgDgB,MAAhD;AACD;;AAED,SAASI,aAAT,CAAuBL,IAAvB,EAA6B;AAC3B,SAAO,wBAAQA,IAAR,EAAcM,MAAd,CAAqB,UAACC,GAAD,SAAuB;AAAA;AAAA,QAAhBC,GAAgB;AAAA,QAAXrB,KAAW;;AACjD,QAAMsB,WAAW,GAAG,OAAOtB,KAAP,KAAiB,QAAjB,GAA4B;AAAA,aAAMA,KAAN;AAAA,KAA5B,GAA0CA,KAA9D;AACA,2CAAYoB,GAAZ,2BAAkBC,GAAlB,EAAwBC,WAAxB;AACD,GAHM,EAGJ,EAHI,CAAP;AAID;;AAED,SAASC,eAAT,CAAyBC,UAAzB,EAAqC3B,KAArC,EAA4C;AAC1C,SAAO,wBAAQ2B,UAAR,EAAoBL,MAApB,CAA2B,UAACC,GAAD,SAAuB;AAAA;AAAA,QAAhBC,GAAgB;AAAA,QAAXI,KAAW;;AACvD,QAAMzB,KAAK,GAAGyB,KAAK,CAAC5B,KAAD,CAAnB;AACA,2CAAYuB,GAAZ,2BAAkBC,GAAlB,EAAwBrB,KAAxB;AACD,GAHM,EAGJ,EAHI,CAAP;AAID;;AAED,IAAM0B,aAAa,GAAG,CACpB,uBAAM;AAAElB,EAAAA,EAAE,EAAEL,iBAAN;AAAyBE,EAAAA,EAAE,EAAEF;AAA7B,CAAN,EAAwDwB,UADpC,EAEpB,uBAAM;AAAElB,EAAAA,GAAG,EAAEN,iBAAP;AAA0BE,EAAAA,EAAE,EAAEF;AAA9B,CAAN,EAAyDwB,UAFrC,EAGpB,uBAAM;AAAEnB,EAAAA,EAAE,EAAEL,iBAAN;AAAyBG,EAAAA,GAAG,EAAEH;AAA9B,CAAN,EAAyDwB,UAHrC,EAIpB,uBAAM;AAAElB,EAAAA,GAAG,EAAEN,iBAAP;AAA0BG,EAAAA,GAAG,EAAEH;AAA/B,CAAN,EAA0DwB,UAJtC,EAKpB,uBAAM;AAAEnB,EAAAA,EAAE,EAAEL;AAAN,CAAN,EAAiCwB,UALb,EAMpB,uBAAM;AAAElB,EAAAA,GAAG,EAAEN;AAAP,CAAN,EAAkCwB,UANd,EAOpB,uBAAM;AAAEtB,EAAAA,EAAE,EAAEF;AAAN,CAAN,EAAiCwB,UAPb,EAQpB,uBAAM;AAAErB,EAAAA,GAAG,EAAEH;AAAP,CAAN,EAAkCwB,UARd,CAAtB;;AAUA,SAASC,YAAT,CAAsB/B,KAAtB,EAA6BC,QAA7B,EAAuC;AACrC,SAAO4B,aAAa,CAACG,KAAd,CAAoB,UAACC,SAAD;AAAA,WAAe,CAAC,CAACA,SAAS,CAACjC,KAAD,EAAQC,QAAR,CAA1B;AAAA,GAApB,CAAP;AACD;;AAED,IAAMiC,mBAAmB,GAAG,0BAASnC,MAAT,EAAiB+B,UAA7C;;AAEe,SAASK,gBAAT,CAA0BC,OAA1B,EAAmC;AAChD,MAAMC,QAAQ,GAAGN,YAAY,CAAC;AAAEK,IAAAA,OAAO,EAAPA;AAAF,GAAD,EAAc,SAAd,CAA7B;;AACA,MAAIC,QAAJ,EAAc;AACZ,UAAM,IAAIhC,SAAJ,CAAc,wHAAd,CAAN;AACD;;AAED,MAAMsB,UAAU,GAAGN,aAAa,CAACe,OAAD,CAAhC;;AAEA,MAAMH,SAAS,GAAG,SAASK,OAAT,CAAiBtC,KAAjB,EAAwBC,QAAxB,EAAkCC,aAAlC,EAA0D;AAAA,QACtDqC,SADsD,GACxCvC,KADwC,CACjEC,QADiE;;AAE1E,QAAIsC,SAAS,IAAI,IAAjB,EAAuB;AACrB,aAAO,IAAP;AACD;;AAED,QAAI,OAAOA,SAAP,KAAqB,QAAzB,EAAmC;AACjC,aAAO,IAAIC,UAAJ,WAAkBtC,aAAlB,eAAoCD,QAApC,8CAA8EsC,SAA9E,SAAP;AACD;;AAED,QAAMvB,IAAI,GAAGU,eAAe,CAACC,UAAD,EAAa3B,KAAb,CAA5B;;AAV0E,sCAANyC,IAAM;AAANA,MAAAA,IAAM;AAAA;;AAW1E,QAAMC,gBAAgB,GAAGR,mBAAmB,MAAnB,8BACpBjC,QADoB,EACTe,IADS,GAEvBf,QAFuB,EAGvBC,aAHuB,SAIpBuC,IAJoB,EAAzB;;AAMA,QAAIC,gBAAJ,EAAsB;AACpB,aAAOA,gBAAP;AACD;;AAED,QAAI,CAACnC,YAAY,CAACgC,SAAD,EAAYvB,IAAZ,CAAb,IAAkC,CAACN,YAAY,CAAC6B,SAAD,EAAYvB,IAAZ,CAAnD,EAAsE;AACpE,aAAO,IAAIwB,UAAJ,CAAezB,YAAY,CAACb,aAAD,EAAgBD,QAAhB,EAA0Be,IAA1B,CAA3B,CAAP;AACD;;AAED,WAAO,IAAP;AACD,GA1BD;;AA2BAiB,EAAAA,SAAS,CAACH,UAAV,GAAuB,SAASa,eAAT,CAAyB3C,KAAzB,EAAgCC,QAAhC,EAA0CC,aAA1C,EAAkE;AAAA,QACnEqC,SADmE,GACrDvC,KADqD,CAC9EC,QAD8E;;AAEvF,QAAI,OAAOsC,SAAP,KAAqB,QAAzB,EAAmC;AACjC,aAAO,IAAIC,UAAJ,WAAkBtC,aAAlB,eAAoCD,QAApC,8CAA8EsC,SAA9E,SAAP;AACD;;AAED,QAAMvB,IAAI,GAAGU,eAAe,CAACC,UAAD,EAAa3B,KAAb,CAA5B;;AANuF,uCAANyC,IAAM;AAANA,MAAAA,IAAM;AAAA;;AAOvF,QAAMC,gBAAgB,GAAGR,mBAAmB,MAAnB,8BACpBjC,QADoB,EACTe,IADS,GAEvBf,QAFuB,EAGvBC,aAHuB,SAIpBuC,IAJoB,EAAzB;;AAMA,QAAIC,gBAAJ,EAAsB;AACpB,aAAOA,gBAAP;AACD;;AAED,QAAI,CAACnC,YAAY,CAACgC,SAAD,EAAYvB,IAAZ,CAAb,IAAkC,CAACN,YAAY,CAAC6B,SAAD,EAAYvB,IAAZ,CAAnD,EAAsE;AACpE,aAAO,IAAIwB,UAAJ,CAAezB,YAAY,CAACb,aAAD,EAAgBD,QAAhB,EAA0Be,IAA1B,CAA3B,CAAP;AACD;;AAED,WAAO,IAAP;AACD,GAtBD;;AAwBA,SAAO,+BAAciB,SAAd,EAAyB,SAAzB,EAAoCG,OAApC,CAAP;AACD","sourcesContent":["import entries from 'object.entries';\n\nimport shape from './shape';\nimport valuesOf from './valuesOf';\nimport wrapValidator from './helpers/wrapValidator';\n\nfunction number(props, propName, componentName) {\n const value = props[propName];\n if (typeof value === 'number' && !isNaN(value)) {\n return null;\n }\n\n return new TypeError(`${componentName}: ${propName} must be a non-NaN number.`);\n}\n\nfunction numberOrPropsFunc(props, propName) {\n const value = props[propName];\n\n if (typeof value === 'function') {\n return null;\n }\n\n if (typeof value === 'number' && !isNaN(value)) {\n return null;\n }\n\n return new TypeError(`${propName}: a function, or a non-NaN number is required`);\n}\n\nfunction lowerCompare(value, { gt, gte }) {\n if (typeof gt === 'number') {\n return value > gt;\n }\n if (typeof gte === 'number') {\n return value >= gte;\n }\n return true;\n}\n\nfunction upperCompare(value, { lt, lte }) {\n if (typeof lt === 'number') {\n return value < lt;\n }\n if (typeof lte === 'number') {\n return value <= lte;\n }\n return true;\n}\n\nfunction greaterThanError({ gt, gte }) {\n if (typeof gt === 'number') {\n return `greater than ${gt}`;\n }\n if (typeof gte === 'number') {\n return `greater than or equal to ${gte}`;\n }\n return '';\n}\n\nfunction lessThanError({ lt, lte }) {\n if (typeof lt === 'number') {\n return `less than ${lt}`;\n }\n if (typeof lte === 'number') {\n return `less than or equal to ${lte}`;\n }\n return '';\n}\n\nfunction errorMessage(componentName, propName, opts) {\n const errors = [greaterThanError(opts), lessThanError(opts)].filter(Boolean).join(' and ');\n return `${componentName}: ${propName} must be ${errors}`;\n}\n\nfunction propsThunkify(opts) {\n return entries(opts).reduce((acc, [key, value]) => {\n const numberThunk = typeof value === 'number' ? () => value : value;\n return { ...acc, [key]: numberThunk };\n }, {});\n}\n\nfunction invokeWithProps(optsThunks, props) {\n return entries(optsThunks).reduce((acc, [key, thunk]) => {\n const value = thunk(props);\n return { ...acc, [key]: value };\n }, {});\n}\n\nconst argValidators = [\n shape({ lt: numberOrPropsFunc, gt: numberOrPropsFunc }).isRequired,\n shape({ lte: numberOrPropsFunc, gt: numberOrPropsFunc }).isRequired,\n shape({ lt: numberOrPropsFunc, gte: numberOrPropsFunc }).isRequired,\n shape({ lte: numberOrPropsFunc, gte: numberOrPropsFunc }).isRequired,\n shape({ lt: numberOrPropsFunc }).isRequired,\n shape({ lte: numberOrPropsFunc }).isRequired,\n shape({ gt: numberOrPropsFunc }).isRequired,\n shape({ gte: numberOrPropsFunc }).isRequired,\n];\nfunction argValidator(props, propName) {\n return argValidators.every((validator) => !!validator(props, propName));\n}\n\nconst thunkValueValidator = valuesOf(number).isRequired;\n\nexport default function betweenValidator(options) {\n const argError = argValidator({ options }, 'options');\n if (argError) {\n throw new TypeError('between: only one of the pairs of `lt`/`lte`, and `gt`/`gte`, may be supplied, and at least one pair must be provided.');\n }\n\n const optsThunks = propsThunkify(options);\n\n const validator = function between(props, propName, componentName, ...rest) {\n const { [propName]: propValue } = props;\n if (propValue == null) {\n return null;\n }\n\n if (typeof propValue !== 'number') {\n return new RangeError(`${componentName}: ${propName} must be a number, got \"${typeof propValue}\"`);\n }\n\n const opts = invokeWithProps(optsThunks, props);\n const thunkValuesError = thunkValueValidator(\n { [propName]: opts },\n propName,\n componentName,\n ...rest,\n );\n if (thunkValuesError) {\n return thunkValuesError;\n }\n\n if (!lowerCompare(propValue, opts) || !upperCompare(propValue, opts)) {\n return new RangeError(errorMessage(componentName, propName, opts));\n }\n\n return null;\n };\n validator.isRequired = function betweenRequired(props, propName, componentName, ...rest) {\n const { [propName]: propValue } = props;\n if (typeof propValue !== 'number') {\n return new RangeError(`${componentName}: ${propName} must be a number, got \"${typeof propValue}\"`);\n }\n\n const opts = invokeWithProps(optsThunks, props);\n const thunkValuesError = thunkValueValidator(\n { [propName]: opts },\n propName,\n componentName,\n ...rest,\n );\n if (thunkValuesError) {\n return thunkValuesError;\n }\n\n if (!lowerCompare(propValue, opts) || !upperCompare(propValue, opts)) {\n return new RangeError(errorMessage(componentName, propName, opts));\n }\n\n return null;\n };\n\n return wrapValidator(validator, 'between', options);\n}\n"],"file":"between.js"}