UNPKG

@altostra/core

Version:

Core library for shared types and logic

1 lines 1.04 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createDataParser=void 0;const from_1=require("@reactivex/ix-es2015-cjs/iterable/from"),last_1=require("@reactivex/ix-es2015-cjs/iterable/last"),scan_1=require("@reactivex/ix-es2015-cjs/iterable/operators/scan"),js_yaml_1=require("js-yaml"),AltoError_1=require("./Errors/AltoError"),Iterable_1=require("./Iterable");function createDataParser(r,...e){return 0===e.length&&(e=[JSON.parse,js_yaml_1.load]),function(a){const t=function(r){const a=(0,last_1.last)((0,from_1.from)(e).pipe((0,scan_1.scan)((e,a)=>{if(e.didParse)return e;try{return{didParse:!0,data:a(r)}}catch(r){return{didParse:!1}}},{didParse:!1}),(0,Iterable_1.completeWhen)(({didParse:r})=>r)));if(!(null==a?void 0:a.didParse))throw AltoError_1.AltoError.create("Data failed to parse by any available parser",{data:{data:r}});return a.data}(a);if(!r(t))throw AltoError_1.AltoError.create("Parsed data failed validation",{data:{data:a,parsed:t}});return t}}exports.createDataParser=createDataParser;