elm-decoders
Version:
A powerful, well tested, data decoder for Typescript.
3 lines (2 loc) • 7.92 kB
JavaScript
;function e(t){return(e=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(t)}function t(e,r){return(t=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,r)}function r(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function n(e,o,u){return(n=r()?Reflect.construct:function(e,r,n){var o=[null];o.push.apply(o,r);var u=new(Function.bind.apply(e,o));return n&&t(u,n.prototype),u}).apply(null,arguments)}function o(r){var u="function"==typeof Map?new Map:void 0;return(o=function(r){if(null===r||-1===Function.toString.call(r).indexOf("[native code]"))return r;if("function"!=typeof r)throw new TypeError("Super expression must either be null or a function");if(void 0!==u){if(u.has(r))return u.get(r);u.set(r,o)}function o(){return n(r,arguments,e(this).constructor)}return o.prototype=Object.create(r.prototype,{constructor:{value:o,enumerable:!1,writable:!0,configurable:!0}}),t(o,r)})(r)}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function i(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return u(e,void 0);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(e,void 0):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(r=e[Symbol.iterator]()).next.bind(r)}Object.defineProperty(exports,"__esModule",{value:!0});var a=function(){var e=function e(t){var r=this;this.map=function(t){switch(r.get.type){case"OK":return new e({type:"OK",value:t(r.get.value)});case"FAIL":return new e({type:"FAIL",error:r.get.error})}},this.mapError=function(t){switch(r.get.type){case"OK":return new e({type:"OK",value:r.get.value});case"FAIL":return new e({type:"FAIL",error:t(r.get.error)})}},this.andThen=function(t){switch(r.get.type){case"OK":return t(r.get.value);case"FAIL":return new e({type:"FAIL",error:r.get.error})}},this.get=t};return e.merge=function(t,r){return t.reduce((function(t,n,o){switch(t.get.type){case"OK":switch(n.get.type){case"OK":return e.ok([].concat(t.get.value,[n.get.value]));case"FAIL":return e.fail([r(o,n.get.error)])}case"FAIL":switch(n.get.type){case"OK":return e.fail(t.get.error);case"FAIL":return e.fail([].concat(t.get.error,[r(o,n.get.error)]))}}}),e.ok([]))},e.ok=function(t){return new e({type:"OK",value:t})},e.fail=function(t){return new e({type:"FAIL",error:t})},e.isOk=function(e){return"OK"===e.get.type},e.isFail=function(e){return"FAIL"===e.get.type},e}(),c=function(e,t){return{error:e,value:t}},f=function(e){return Math.floor(e)===e&&Infinity!==e},l=new RegExp("^((?:NaN|-?(?:(?:\\d+|\\d*\\.\\d+)(?:[E|e][+|-]?\\d+)?|Infinity)))$"),s=function(e){var t,r;function n(t){var r;return(r=e.call(this,"Decoding value failed: "+JSON.stringify(t))||this).error=t,Object.setPrototypeOf(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r),n.prototype),r}return r=e,(t=n).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r,n}(o(Error));exports.Decoder=function(){var e=function e(t){var r=this;this.map=function(t){return new e((function(e){return r.decoder(e).map((function(e){return t(e)}))}))},this.default=function(t){return new e((function(e){var n=r.decoder(e);return a.isOk(n)?n:a.ok(t)}))},this.run=function(e){return r.decoder(e).get},this.guard=function(e){var t=r.decoder(e).get;if("OK"===t.type)return t.value;throw new s(t.error)},this.then=function(t){return new e((function(e){var n=r.decoder(e);switch(n.get.type){case"OK":return t(n.get.value).decoder(e);case"FAIL":return a.fail(n.get.error)}}))},this.satisfy=function(t){var n=t.predicate,o=t.failureMessage;return r.then((function(t){return n(t)?e.ok(t):e.fail(o||"Not fulfilled predicate")}))},this.sequence=function(e){for(var t,n=[],o=[],u=i(e);!(t=u()).done;){var a=t.value,c=r.run(a);switch(c.type){case"OK":o.push(c.value);break;case"FAIL":n.push(a)}}return{failed:n,successful:o}},this.decoder=t};return e.createOneOf=function(t){return new e((function(e){for(var r,n=[],o=i(t);!(r=o()).done;){var u=r.value.decoder(e).get;switch(u.type){case"OK":return a.ok(u.value);case"FAIL":Array.isArray(u.error)&&Array.isArray(n)?n=[].concat(n,u.error):n.push(u.error)}}return a.fail(n)}))},e.oneOf=function(t){return 0===t.length?e.ok:e.createOneOf(t)},e.number=new e((function(e){switch(typeof e){case"number":return isNaN(e)?a.fail(c("Not a number",e)):a.ok(e);case"string":return 0!==(t=e).length&&null!==t.match(l)?a.ok(parseFloat(e)):a.fail(c("Not a number",e));default:return a.fail(c("Not a number",e))}var t})),e.isoDate=new e((function(e){switch(Object.prototype.toString.call(e)){case"[object Date]":return isNaN(e.getDate())?a.fail(c("Badly formatted date object",e)):a.ok(e);case"[object String]":return null!==e.match(/(\d{4})-(\d{2})-(\d{2})/)?a.ok(new Date(e)):a.fail(c("Not a ISO date",e));default:return a.fail(c("Not a ISO date",e))}})),e.date=e.oneOf([(e.timestamp=e.number.satisfy({predicate:f,failureMessage:"Not a timestamp"})).map((function(e){return new Date(e)})),e.isoDate]),e.undefined=new e((function(e){return void 0===e?a.ok(e):a.fail(c("Not undefined",e))})),e.null=new e((function(e){return null===e?a.ok(e):a.fail(c("Not null",e))})),e.buffer=new e((function(e){return Buffer.isBuffer(e)?a.ok(e):a.fail(c("Not Buffer",e))})),e.string=new e((function(e){return"string"==typeof e?a.ok(e):a.fail(c("Not a string",e))})),e.literalString=function(t){return e.string.then((function(r){return r===t?e.ok(t):e.fail("Not "+t)}))},e.optional=function(t){return e.oneOf([e.undefined,e.null.map((function(e){})),t])},e.fail=function(t){return new e((function(){return a.fail({error:t})}))},e.ok=function(t){return new e((function(){return a.ok(t)}))},e.literalNumber=function(t){return e.number.then((function(r){return r===t?e.ok(t):e.fail("Not "+t)}))},e.array=function(t){return new e((function(e){return Array.isArray(e)?a.merge(e.map((function(e){return t.decoder(e)})),(function(e,t){return function(e,t){return"string"==typeof t.error?{index:e,error:t.error,value:t.value}:[e,t]}(e,t)})):a.fail(c("Not an array",e))}))},e.boolean=new e((function(e){switch(typeof e){case"boolean":return a.ok(e);case"string":switch(e){case"true":return a.ok(!0);case"false":return a.ok(!1);default:return a.fail(c("Not a boolean",e))}default:return a.fail(c("Not a boolean",e))}})),e.field=function(t,r){return new e((function(e){return"object"==typeof e&&null!==e?r.decoder(e[t]).mapError((function(e){var r;return(r={})[t]=e,r})):a.fail(c("Not an object",e))}))},e.any=new e((function(e){return a.ok(e)})),e.dict=function(t){return new e((function(e){if("object"==typeof e&&null!==e){var r={},n={};for(var o in e){var u=t.run(e[o]);switch(u.type){case"OK":r[o]=u.value;break;case"FAIL":n[o]=u.error}}return 0===Object.keys(n).length?a.ok(r):a.fail(n)}return a.fail(c("Not an object",e))}))},e.object=function(t){return new e((function(e){if("object"==typeof e&&null!==e){var r,n={},o={};for(r in t){var u=t[r].decoder(e[r]).get;switch(u.type){case"OK":n[r]=u.value;break;case"FAIL":o[r]=u.error}}return 0===Object.keys(o).length?a.ok(n):a.fail(o)}return a.fail(c("Not an object",e))}))},e}(),exports.ValidationFailedError=s;
//# sourceMappingURL=elm-decoders.cjs.production.min.js.map