UNPKG

sury

Version:

🧬 The fastest schema with next-gen DX

1,920 lines (1,766 loc) • 141 kB
'use strict'; function some(x) { if (x === undefined) { return { BS_PRIVATE_NESTED_SOME_NONE: 0 }; } else if (x !== null && x.BS_PRIVATE_NESTED_SOME_NONE !== undefined) { return { BS_PRIVATE_NESTED_SOME_NONE: x.BS_PRIVATE_NESTED_SOME_NONE + 1 | 0 }; } else { return x; } } function valFromOption(x) { if (!(x !== null && x.BS_PRIVATE_NESTED_SOME_NONE !== undefined)) { return x; } var depth = x.BS_PRIVATE_NESTED_SOME_NONE; if (depth === 0) { return ; } else { return { BS_PRIVATE_NESTED_SOME_NONE: depth - 1 | 0 }; } } /* No side effect */ function length$1(xs) { var _x = xs; var _acc = 0; while(true) { var acc = _acc; var x = _x; if (!x) { return acc; } _acc = acc + 1 | 0; _x = x.tl; continue ; }} function fillAux(arr, _i, _x) { while(true) { var x = _x; var i = _i; if (!x) { return ; } arr[i] = x.hd; _x = x.tl; _i = i + 1 | 0; continue ; }} function fromArray$1(a) { var _i = a.length - 1 | 0; var _res = /* [] */0; while(true) { var res = _res; var i = _i; if (i < 0) { return res; } _res = { hd: a[i], tl: res }; _i = i - 1 | 0; continue ; }} function toArray$1(x) { var len = length$1(x); var arr = new Array(len); fillAux(arr, 0, x); return arr; } /* No side effect */ // Generated by ReScript, PLEASE EDIT WITH CARE function classify(arrayable) { if (Array.isArray(arrayable)) { return { TAG: "Array", _0: arrayable }; } else { return { TAG: "Single", _0: arrayable }; } } var Arrayable = { classify: classify }; /* No side effect */ var idMap = new Map(); function create(str) { var v = idMap.get(str); var id; if (v !== undefined) { var id$1 = v + 1 | 0; idMap.set(str, id$1); id = id$1; } else { idMap.set(str, 1); id = 1; } return str + ("/" + id); } /* idMap Not a pure module */ // Generated by ReScript, PLEASE EDIT WITH CARE var immutableEmpty = {}; var immutableEmpty$1 = []; function fromString(string) { var _idx = 0; while(true) { var idx = _idx; var match = string[idx]; if (match === undefined) { return "\"" + string + "\""; } if (match === "\"") { return JSON.stringify(string); } _idx = idx + 1 | 0; continue ; }} function toArray(path) { if (path === "") { return []; } else { return JSON.parse(path.split("\"][\"").join("\",\"")); } } function fromLocation($$location) { return "[" + fromString($$location) + "]"; } function fromArray(array) { var len = array.length; if (len !== 1) { if (len !== 0) { return "[" + array.map(fromString).join("][") + "]"; } else { return ""; } } var $$location = array[0]; return "[" + fromString($$location) + "]"; } function concat(path, concatedPath) { return path + concatedPath; } var vendor = "sury"; var s = Symbol(vendor); var itemSymbol = Symbol(vendor + ":item"); var $$Error$1 = /* @__PURE__ */create("Sury.Error"); var isLiteral = (s => "const" in s); function isOptional(schema) { var match = schema.type; switch (match) { case "undefined" : return true; case "union" : return schema.has["undefined"]; default: return false; } } var globalConfig = { r: 0, a: "strip", n: false }; class SuryError extends Error { constructor(code, flag, path) { super(); this.flag = flag; this.code = code; this.path = path; } } var d = Object.defineProperty, p = SuryError.prototype; d(p, 'message', { get() { return message(this); } }); d(p, 'reason', { get() { return reason(this); } }); d(p, 'name', {value: 'SuryError'}); d(p, 's', {value: s}); d(p, '_1', { get() { return this }, }); d(p, 'RE_EXN_ID', { value: $$Error$1, }); var Schema$1 = function() {}, sp = Object.create(null); d(sp, 'with', { get() { return (fn, ...args) => fn(this, ...args) }, }); // Also has ~standard below Schema$1.prototype = sp; function getOrRethrow(exn) { if ((exn&&exn.s===s)) { return exn; } throw exn; } function has(acc, flag) { return (acc & flag) !== 0; } var copy = ((schema) => { let c = new Schema$1(); for (let k in schema) { if (k > "a") { c[k] = schema[k]; } } return c }); var mergeInPlace = ((target, schema) => { for (let k in schema) { if (k > "a") { target[k] = schema[k]; } } }); var resetOperationsCache = ((schema) => { for (let k in schema) { if (+k) { delete schema[k]; } } }); function stringify(unknown) { var typeOfValue = typeof unknown; if (typeOfValue === "number" || typeOfValue === "function" || typeOfValue === "boolean" || typeOfValue === "symbol") { return unknown.toString(); } if (typeOfValue === "string") { return "\"" + unknown + "\""; } if (typeOfValue !== "object") { if (typeOfValue === "undefined") { return "undefined"; } else { return unknown + "n"; } } if (unknown === null) { return "null"; } if (Array.isArray(unknown)) { var string = "["; for(var i = 0 ,i_finish = unknown.length; i < i_finish; ++i){ if (i !== 0) { string = string + ", "; } string = string + stringify(unknown[i]); } return string + "]"; } if (unknown.constructor !== Object) { return Object.prototype.toString.call(unknown); } var keys = Object.keys(unknown); var string$1 = "{ "; for(var i$1 = 0 ,i_finish$1 = keys.length; i$1 < i_finish$1; ++i$1){ var key = keys[i$1]; var value = unknown[key]; string$1 = string$1 + key + ": " + stringify(value) + "; "; } return string$1 + "}"; } function toExpression$1(schema) { var tag = schema.type; var $$const = schema.const; var name = schema.name; if (name !== undefined) { return name; } if ($$const !== undefined) { return stringify($$const); } var format = schema.format; var anyOf = schema.anyOf; if (anyOf !== undefined) { return anyOf.map(toExpression$1).join(" | "); } if (format !== undefined) { return format; } switch (tag) { case "nan" : return "NaN"; case "instance" : return schema.class.name; case "array" : var additionalItems = schema.additionalItems; var items = schema.items; if (typeof additionalItems !== "object") { return "[" + items.map(function (item) { return toExpression$1(item.schema); }).join(", ") + "]"; } var itemName = toExpression$1(additionalItems); return ( additionalItems.type === "union" ? "(" + itemName + ")" : itemName ) + "[]"; case "object" : var additionalItems$1 = schema.additionalItems; var items$1 = schema.items; if (items$1.length === 0) { if (typeof additionalItems$1 === "object") { return "{ [key: string]: " + toExpression$1(additionalItems$1) + "; }"; } else { return "{}"; } } else { return "{ " + items$1.map(function (item) { return item.location + ": " + toExpression$1(item.schema) + ";"; }).join(" ") + " }"; } default: return tag; } } var value = SuryError; function constructor(prim0, prim1, prim2) { return new SuryError(prim0, prim1, prim2); } function reason(error, nestedLevelOpt) { var nestedLevel = nestedLevelOpt !== undefined ? nestedLevelOpt : 0; var reason$1 = error.code; if (typeof reason$1 !== "object") { return "Encountered unexpected async transform or refine. Use parseAsyncOrThrow operation instead"; } switch (reason$1.TAG) { case "OperationFailed" : return reason$1._0; case "InvalidOperation" : return reason$1.description; case "InvalidType" : var unionErrors = reason$1.unionErrors; var m = "Expected " + toExpression$1(reason$1.expected) + ", received " + stringify(reason$1.received); if (unionErrors !== undefined) { var lineBreak = "\n" + " ".repeat((nestedLevel << 1)); var reasonsDict = {}; for(var idx = 0 ,idx_finish = unionErrors.length; idx < idx_finish; ++idx){ var error$1 = unionErrors[idx]; var reason$2 = reason(error$1, nestedLevel + 1); var nonEmptyPath = error$1.path; var $$location = nonEmptyPath === "" ? "" : "At " + nonEmptyPath + ": "; var line = "- " + $$location + reason$2; if (!reasonsDict[line]) { reasonsDict[line] = 1; m = m + lineBreak + line; } } } return m; case "ExcessField" : return "Unrecognized key \"" + reason$1._0 + "\""; case "InvalidJsonSchema" : return toExpression$1(reason$1._0) + " is not valid JSON"; } } function reason$1(error) { return reason(error, undefined); } function message(error) { var op = error.flag; var text = "Failed "; if (op & 2) { text = text + "async "; } text = text + ( op & 1 ? ( op & 4 ? "asserting" : "parsing" ) : "converting" ); if (op & 8) { text = text + " to JSON" + ( op & 16 ? " string" : "" ); } var nonEmptyPath = error.path; var tmp = nonEmptyPath === "" ? "" : " at " + nonEmptyPath; return text + tmp + ": " + reason(error, undefined); } var ErrorClass$1 = { value: value, constructor: constructor, reason: reason$1, message: message }; function embed(b, value) { var e = b.g.e; var l = e.length; e[l] = value; return "e[" + l + "]"; } function inlineConst(b, schema) { var match = schema.type; switch (match) { case "string" : var $$const = schema.const; return fromString($$const); case "bigint" : var $$const$1 = schema.const; return $$const$1 + "n"; case "undefined" : return "void 0"; case "symbol" : case "function" : case "instance" : break; default: return schema.const; } var $$const$2 = schema.const; return embed(b, $$const$2); } function secondAllocate(v) { var b = this; b.l = b.l + "," + v; } function initialAllocate(v) { var b = this; b.l = v; b.a = secondAllocate; } function rootScope(flag) { var $$global = { c: "", l: "", a: initialAllocate, v: -1, o: flag, e: [] }; $$global.g = $$global; return $$global; } function allocateScope(b) { ((delete b.a)); var varsAllocation = b.l; if (varsAllocation === "") { return b.c; } else { return "let " + varsAllocation + ";" + b.c; } } function varWithoutAllocation($$global) { var newCounter = $$global.v + 1; $$global.v = newCounter; return "v" + newCounter; } function _var(_b) { return this.i; } function _notVar(b) { var val = this; var v = varWithoutAllocation(b.g); var i = val.i; if (i === "") { val.b.a(v); } else if (val.b.a !== (void 0)) { val.b.a(v + "=" + i); } else { b.c = b.c + (v + "=" + i + ";"); b.g.a(v); } val.v = _var; val.i = v; return v; } function allocateVal(b) { var v = varWithoutAllocation(b.g); b.a(v); return { b: b, v: _var, i: v, a: false }; } function objectJoin(inlinedLocation, value) { return inlinedLocation + ":" + value + ","; } function arrayJoin(_inlinedLocation, value) { return value + ","; } function make(b, isArray) { return { b: b, v: _notVar, i: "", a: false, j: isArray ? arrayJoin : objectJoin, c: 0, p: "" }; } function add(objectVal, inlinedLocation, val) { objectVal[inlinedLocation] = val; if (val.a) { objectVal.p = objectVal.p + val.i + ","; objectVal.i = objectVal.i + objectVal.j(inlinedLocation, "a[" + (objectVal.c++) + "]"); } else { objectVal.i = objectVal.i + objectVal.j(inlinedLocation, val.i); } } function merge(target, subObjectVal) { var inlinedLocations = Object.keys(subObjectVal); for(var idx = 7 ,idx_finish = inlinedLocations.length; idx < idx_finish; ++idx){ var inlinedLocation = inlinedLocations[idx]; add(target, inlinedLocation, subObjectVal[inlinedLocation]); } } function complete(objectVal, isArray) { objectVal.i = isArray ? "[" + objectVal.i + "]" : "{" + objectVal.i + "}"; if (objectVal.c) { objectVal.a = true; objectVal.i = "Promise.all([" + objectVal.p + "]).then(a=>(" + objectVal.i + "))"; } return objectVal; } function addKey(b, input, key, val) { return input.v(b) + "[" + key + "]=" + val.i; } function set(b, input, val) { if (input === val) { return ""; } var inputVar = input.v(b); var match = input.a; if (match) { var match$1 = val.a; if (!match$1) { return inputVar + "=Promise.resolve(" + val.i + ")"; } } else { var match$2 = val.a; if (match$2) { input.a = true; return inputVar + "=" + val.i; } } return inputVar + "=" + val.i; } function get(b, targetVal, inlinedLocation) { var val = targetVal[inlinedLocation]; if (val !== undefined) { return val; } else { return { b: b, v: _notVar, i: targetVal.v(b) + ("[" + inlinedLocation + "]"), a: false }; } } function setInlined(b, input, inlined) { return input.v(b) + "=" + inlined; } function map(inlinedFn, input) { return { b: input.b, v: _notVar, i: inlinedFn + "(" + input.i + ")", a: false }; } function transform$1(b, input, operation) { if (!input.a) { return operation(b, input); } var bb = { c: "", l: "", a: initialAllocate, g: b.g }; var operationInput = { b: b, v: _var, i: varWithoutAllocation(bb.g), a: false }; var operationOutputVal = operation(bb, operationInput); var operationCode = allocateScope(bb); return { b: input.b, v: _notVar, i: input.i + ".then(" + operationInput.v(b) + "=>{" + operationCode + "return " + operationOutputVal.i + "})", a: true }; } function raise(b, code, path) { throw new SuryError(code, b.g.o, path); } function embedSyncOperation(b, input, fn) { if (input.a) { return { b: input.b, v: _notVar, i: input.i + ".then(" + embed(b, fn) + ")", a: true }; } else { return map(embed(b, fn), input); } } function failWithArg(b, path, fn, arg) { return embed(b, (function (arg) { return raise(b, fn(arg), path); })) + "(" + arg + ")"; } function fail(b, message, path) { return embed(b, (function () { return raise(b, { TAG: "OperationFailed", _0: message }, path); })) + "()"; } function effectCtx(b, selfSchema, path) { return { schema: selfSchema, fail: (function (message, customPathOpt) { var customPath = customPathOpt !== undefined ? customPathOpt : ""; return raise(b, { TAG: "OperationFailed", _0: message }, path + customPath); }) }; } function invalidOperation(b, path, description) { return raise(b, { TAG: "InvalidOperation", description: description }, path); } function withCatch(b, input, $$catch, appendSafe, fn) { var prevCode = b.c; b.c = ""; var errorVar = varWithoutAllocation(b.g); var maybeResolveVal = $$catch(b, errorVar); var catchCode = "if(" + (errorVar + "&&" + errorVar + ".s===s") + "){" + b.c; b.c = ""; var bb = { c: "", l: "", a: initialAllocate, g: b.g }; var fnOutput = fn(bb); b.c = b.c + allocateScope(bb); var isNoop = fnOutput.i === input.i && b.c === ""; if (appendSafe !== undefined) { appendSafe(b, fnOutput); } if (isNoop) { return fnOutput; } var isAsync = fnOutput.a; var output = input === fnOutput ? input : ( appendSafe !== undefined ? fnOutput : ({ b: b, v: _notVar, i: "", a: isAsync }) ); var catchCode$1 = maybeResolveVal !== undefined ? (function (catchLocation) { return catchCode + ( catchLocation === 1 ? "return " + maybeResolveVal.i : set(b, output, maybeResolveVal) ) + ("}else{throw " + errorVar + "}"); }) : (function (param) { return catchCode + "}throw " + errorVar; }); b.c = prevCode + ("try{" + b.c + ( isAsync ? setInlined(b, output, fnOutput.i + ".catch(" + errorVar + "=>{" + catchCode$1(1) + "})") : set(b, output, fnOutput) ) + "}catch(" + errorVar + "){" + catchCode$1(0) + "}"); return output; } function withPathPrepend(b, input, path, maybeDynamicLocationVar, appendSafe, fn) { if (path === "" && maybeDynamicLocationVar === undefined) { return fn(b, input, path); } try { return withCatch(b, input, (function (b, errorVar) { b.c = errorVar + ".path=" + fromString(path) + "+" + ( maybeDynamicLocationVar !== undefined ? "'[\"'+" + maybeDynamicLocationVar + "+'\"]'+" : "" ) + errorVar + ".path"; }), appendSafe, (function (b) { return fn(b, input, ""); })); } catch (exn){ var error = getOrRethrow(exn); throw new SuryError(error.code, error.flag, path + "[]" + error.path); } } function validation(b, inputVar, schema, negative) { var eq = negative ? "!==" : "==="; var and_ = negative ? "||" : "&&"; var exp = negative ? "!" : ""; var tag = schema.type; switch (tag) { case "null" : return inputVar + eq + "null"; case "undefined" : return inputVar + eq + "void 0"; case "nan" : return exp + ("Number.isNaN(" + inputVar + ")"); default: var match = schema.const; if (match !== undefined) { return inputVar + eq + inlineConst(b, schema); } switch (tag) { case "instance" : var $$class = schema.class; var c = inputVar + " instanceof " + embed(b, $$class); if (negative) { return "!(" + c + ")"; } else { return c; } case "array" : return exp + "Array.isArray(" + inputVar + ")"; case "object" : return "typeof " + inputVar + eq + "\"" + tag + "\"" + and_ + exp + inputVar; default: return "typeof " + inputVar + eq + "\"" + tag + "\""; } } } function refinement(b, inputVar, schema, negative) { var eq = negative ? "!==" : "==="; var and_ = negative ? "||" : "&&"; var not_ = negative ? "" : "!"; var lt = negative ? ">" : "<"; var gt = negative ? "<" : ">"; var match = schema.type; var tag; var exit = 0; var match$1 = schema.const; if (match$1 !== undefined) { return ""; } var match$2 = schema.format; if (match$2 !== undefined) { if (match$2 === "int32") { return and_ + inputVar + lt + "2147483647" + and_ + inputVar + gt + "-2147483648" + and_ + inputVar + "%1" + eq + "0"; } exit = 2; } else { exit = 2; } if (exit === 2) { switch (match) { case "number" : if (globalConfig.n) { return ""; } else { return and_ + not_ + "Number.isNaN(" + inputVar + ")"; } case "array" : case "object" : tag = match; break; default: return ""; } } var additionalItems = schema.additionalItems; var items = schema.items; var length = items.length; var code = tag === "array" ? ( additionalItems === "strip" || additionalItems === "strict" ? ( additionalItems === "strip" ? and_ + inputVar + ".length" + gt + length : and_ + inputVar + ".length" + eq + length ) : "" ) : ( additionalItems === "strip" ? "" : and_ + not_ + "Array.isArray(" + inputVar + ")" ); for(var idx = 0 ,idx_finish = items.length; idx < idx_finish; ++idx){ var match$3 = items[idx]; var inlinedLocation = match$3.inlinedLocation; var item = match$3.schema; var itemCode; if (isLiteral(item) && !item.catch || schema.unnest) { itemCode = validation(b, inputVar + ("[" + inlinedLocation + "]"), item, negative); } else if (item.type === "object") { var inputVar$1 = inputVar + ("[" + inlinedLocation + "]"); itemCode = validation(b, inputVar$1, item, negative) + refinement(b, inputVar$1, item, negative); } else { itemCode = ""; } if (itemCode !== "") { code = code + and_ + itemCode; } } return code; } function typeFilterCode(b, schema, input, path) { var match = schema.type; var match$1 = schema.noValidation; if (match$1 !== undefined && match$1) { return ""; } switch (match) { case "never" : case "unknown" : case "union" : case "json" : return ""; default: var inputVar = input.v(b); return "if(" + validation(b, inputVar, schema, true) + refinement(b, inputVar, schema, true) + "){" + failWithArg(b, path, (function (input) { return { TAG: "InvalidType", expected: schema, received: input }; }), inputVar) + "}"; } } function parse(b, schema, input, path) { var builder = schema.builder; if (builder !== undefined) { return builder(b, input, schema, path); } else { return input; } } function parseWithTypeValidation(b, schema, input, path) { if (b.g.o & 1 || isLiteral(schema)) { b.c = b.c + typeFilterCode(b, schema, input, path); } return parse(b, schema, input, path); } function noopOperation(i) { return i; } var nonJsonableTags = new Set([ "unknown", "nan", "bigint", "function", "instance", "symbol" ]); function jsonableValidation(output, parent, path, flag, recSet) { var tag = output.type; if (tag === "undefined" && parent.type !== "object" || nonJsonableTags.has(tag)) { throw new SuryError({ TAG: "InvalidJsonSchema", _0: parent }, flag, path); } var match = output.type; switch (match) { case "array" : case "object" : case "union" : break; default: return ; } var recSet$1 = recSet !== undefined ? valFromOption(recSet) : new Set(); if (recSet$1.has(output)) { return ; } recSet$1.add(output); var recSet$2 = some(recSet$1); if (tag === "union") { output.anyOf.forEach(function (s) { jsonableValidation(s, parent, path, flag, recSet$2); }); return ; } var additionalItems = output.additionalItems; var items = output.items; if (items === undefined) { return ; } if (additionalItems === "strip" || additionalItems === "strict") ; else { jsonableValidation(additionalItems, parent, path, flag, recSet$2); } items.forEach(function (item) { jsonableValidation(item.schema, output, path + ("[" + item.inlinedLocation + "]"), flag, recSet$2); }); } function reverse$1(schema) { var fn = schema.output; if (fn === undefined) { return schema; } if (typeof fn === "object") { return fn; } var reversed = fn.call(schema); var reversed$1 = reversed.output === undefined ? copy(reversed) : reversed; schema.output = reversed$1; reversed$1.output = schema; return reversed$1; } function internalCompile(schema, flag) { var b = rootScope(flag); if (flag & 8) { var output = reverse$1(schema); jsonableValidation(output, output, "", flag, undefined); } var input = { b: b, v: _var, i: "i", a: false }; var output$1 = parse(b, schema, input, ""); schema.isAsync = output$1.a; if (b.l !== "") { b.c = "let " + b.l + ";" + b.c; } if (flag & 1 || isLiteral(schema)) { b.c = typeFilterCode(b, schema, input, "") + b.c; } if (b.c === "" && output$1 === input && !(flag & 22)) { return noopOperation; } var inlinedOutput = flag & 4 ? "void 0" : output$1.i; if (flag & 16) { inlinedOutput = "JSON.stringify(" + inlinedOutput + ")"; } if (flag & 2 && !output$1.a) { inlinedOutput = "Promise.resolve(" + inlinedOutput + ")"; } var inlinedFunction = "i=>{" + b.c + "return " + inlinedOutput + "}"; return new Function("e", "s", "return " + inlinedFunction)(b.g.e, s); } function operationFn(s, o) { if ((o in s)) { return (s[o]); } var f = internalCompile(o & 32 ? reverse$1(s) : s, o); ((s[o] = f)); return f; } d(sp, "~standard", { get: (function () { var schema = this; return { version: 1, vendor: vendor, validate: (function (input) { try { return { value: operationFn(schema, 1)(input) }; } catch (exn){ var error = getOrRethrow(exn); return { issues: [{ message: message(error), path: error.path === "" ? undefined : toArray(error.path) }] }; } }) }; }) }); function compile$1(schema, input, output, mode, typeValidationOpt) { var typeValidation = typeValidationOpt !== undefined ? typeValidationOpt : true; var flag = 0; var exit = 0; switch (output) { case "Output" : case "Input" : exit = 1; break; case "Assert" : flag = flag | 4; break; case "Json" : flag = flag | 8; break; case "JsonString" : flag = flag | 24; break; } if (exit === 1 && output === input) { throw new Error("[Sury] Can't compile operation to converting value to self"); } if (mode !== "Sync") { flag = flag | 2; } if (typeValidation) { flag = flag | 1; } if (input === "Output") { flag = flag | 32; } var fn = operationFn(schema, flag); if (input !== "JsonString") { return fn; } var flag$1 = flag; return function (jsonString) { try { return fn(JSON.parse(jsonString)); } catch (exn){ throw new SuryError({ TAG: "OperationFailed", _0: exn.message }, flag$1, ""); } }; } function item(factory, item$1) { return function () { var reversed = reverse$1(item$1); if (reversed === item$1) { return this; } else { return factory(reversed); } }; } function parseOrThrow$1(any, schema) { return operationFn(schema, 1)(any); } function parseJsonStringOrThrow$1(jsonString, schema) { var tmp; try { tmp = JSON.parse(jsonString); } catch (exn){ throw new SuryError({ TAG: "OperationFailed", _0: exn.message }, 1, ""); } return parseOrThrow$1(tmp, schema); } function parseAsyncOrThrow$1(any, schema) { return operationFn(schema, 3)(any); } function convertOrThrow$1(input, schema) { return operationFn(schema, 0)(input); } function convertToJsonOrThrow$1(any, schema) { return operationFn(schema, 8)(any); } function convertToJsonStringOrThrow$1(input, schema) { return operationFn(schema, 24)(input); } function convertAsyncOrThrow$1(any, schema) { return operationFn(schema, 2)(any); } function reverseConvertOrThrow$1(value, schema) { return operationFn(schema, 32)(value); } function reverseConvertToJsonOrThrow$1(value, schema) { return operationFn(schema, 40)(value); } function reverseConvertToJsonStringOrThrow$1(value, schema, spaceOpt) { var space = spaceOpt !== undefined ? spaceOpt : 0; return JSON.stringify(reverseConvertToJsonOrThrow$1(value, schema), null, space); } function assertOrThrow$1(any, schema) { return operationFn(schema, 5)(any); } var $$undefined = new Schema$1(); $$undefined.type = "undefined"; $$undefined.const = (void 0); var $$null$1 = new Schema$1(); $$null$1.type = "null"; $$null$1.const = null; function parse$1(value) { if (value === null) { return $$null$1; } var $$typeof = typeof value; var schema; if ($$typeof === "object") { var mut = new Schema$1(); mut.type = "instance"; var i = mut; i.class = value.constructor; schema = i; } else if ($$typeof === "undefined") { schema = $$undefined; } else if ($$typeof === "number") { if (Number.isNaN(value)) { var mut$1 = new Schema$1(); mut$1.type = "nan"; schema = mut$1; } else { var mut$2 = new Schema$1(); mut$2.type = $$typeof; schema = mut$2; } } else { var mut$3 = new Schema$1(); mut$3.type = $$typeof; schema = mut$3; } schema.const = value; return schema; } function isAsync$1(schema) { var v = schema.isAsync; if (v !== undefined) { return v; } try { var b = rootScope(2); var input = { b: b, v: _var, i: "i", a: false }; var output = parse(b, schema, input, ""); schema.isAsync = output.a; return output.a; } catch (exn){ getOrRethrow(exn); return false; } } function make$1(namespace, name) { return "m:" + namespace + ":" + name; } function internal(name) { return "m:" + name; } var Id = { make: make$1, internal: internal }; function get$1(schema, id) { return schema[id]; } function set$1(schema, id, metadata) { var mut = copy(schema); mut[id] = metadata; return mut; } function recursive$1(fn) { var r = "r" + globalConfig.r; globalConfig.r = globalConfig.r + 1 | 0; var builder = function (b, input, param, param$1) { return transform$1(b, input, (function (_b, input) { return map(r, input); })); }; var output = function () { var mut = new Schema$1(); mut.type = "unknown"; mut.builder = (function (_b, input, param, param$1) { return map(r, input); }); return mut; }; var placeholder = new Schema$1(); placeholder.type = "unknown"; placeholder.builder = builder; placeholder.output = output; placeholder.name = "Self"; var schema = fn(placeholder); mergeInPlace(placeholder, schema); placeholder.name = toExpression$1(schema); placeholder.builder = builder; placeholder.output = output; var initialParseOperationBuilder = schema.builder; schema.builder = (function (b, input, selfSchema, path) { var inputVar = input.v(b); var bb = { c: "", l: "", a: initialAllocate, g: b.g }; var opOutput = initialParseOperationBuilder(bb, input, selfSchema, ""); var opBodyCode = allocateScope(bb) + ("return " + opOutput.i); b.c = b.c + ("let " + r + "=" + inputVar + "=>{" + opBodyCode + "};"); return withPathPrepend(b, input, path, undefined, undefined, (function (b, input, param) { return transform$1(b, input, (function (_b, input) { var output = map(r, input); if (opOutput.a) { output.a = true; placeholder.builder = (function (b, input, param, param$1) { return transform$1(b, input, (function (_b, input) { var output = map(r, input); output.a = true; return output; })); }); } return output; })); })); }); var initialReverse = schema.output.bind(schema); schema.output = (function () { var initialReversed = initialReverse(); var mut = copy(initialReversed); mut.output = schema; schema.output = mut; mut.builder = (function (b, input, selfSchema, path) { var inputVar = input.v(b); var bb = { c: "", l: "", a: initialAllocate, g: b.g }; var initialInput = { b: bb, v: input.v, i: input.i, a: input.a }; var opOutput = initialReversed.builder(bb, initialInput, selfSchema, ""); var opBodyCode = allocateScope(bb) + ("return " + opOutput.i); b.c = b.c + ("let " + r + "=" + inputVar + "=>{" + opBodyCode + "};"); return withPathPrepend(b, input, path, undefined, undefined, (function (_b, input, param) { return map(r, input); })); }); return mut; }); return schema; } function noValidation$1(schema, value) { var mut = copy(schema); mut.noValidation = value; return mut; } function internalRefine(schema, refiner) { var mut = copy(schema); mut.builder = (function (b, input, selfSchema, path) { return transform$1(b, parse(b, schema, input, path), (function (b, input) { var bb = { c: "", l: "", a: initialAllocate, g: b.g }; var rCode = refiner(bb, input.v(bb), selfSchema, path); b.c = b.c + allocateScope(bb) + rCode; return input; })); }); mut.output = (function () { var schema$1 = reverse$1(schema); var mut = copy(schema$1); mut.builder = (function (b, input, selfSchema, path) { return parse(b, schema$1, transform$1(b, input, (function (b, input) { b.c = b.c + refiner(b, input.v(b), selfSchema, path); return input; })), path); }); return mut; }); return mut; } function refine$1(schema, refiner) { return internalRefine(schema, (function (b, inputVar, selfSchema, path) { return embed(b, refiner(effectCtx(b, selfSchema, path))) + "(" + inputVar + ");"; })); } function addRefinement(schema, metadataId, refinement, refiner) { var refinements = schema[metadataId]; return internalRefine(set$1(schema, metadataId, refinements !== undefined ? refinements.concat(refinement) : [refinement]), refiner); } function transform$1$1(schema, transformer) { var mut = copy(schema); mut.builder = (function (b, input, selfSchema, path) { var input$1 = parse(b, schema, input, path); var match = transformer(effectCtx(b, selfSchema, path)); var parser = match.p; if (parser !== undefined) { if (match.a !== undefined) { return invalidOperation(b, path, "The S.transform doesn't allow parser and asyncParser at the same time. Remove parser in favor of asyncParser"); } else { return embedSyncOperation(b, input$1, parser); } } var asyncParser = match.a; if (asyncParser !== undefined) { if (!(b.g.o & 2)) { raise(b, "UnexpectedAsync", ""); } var val = embedSyncOperation(b, input$1, asyncParser); val.a = true; return val; } else if (match.s !== undefined) { return invalidOperation(b, path, "The S.transform parser is missing"); } else { return input$1; } }); mut.output = (function () { var schema$1 = reverse$1(schema); return { type: "unknown", builder: (function (b, input, selfSchema, path) { var match = transformer(effectCtx(b, selfSchema, path)); var serializer = match.s; if (serializer !== undefined) { return parse(b, schema$1, embedSyncOperation(b, input, serializer), path); } else if (match.a !== undefined || match.p !== undefined) { return invalidOperation(b, path, "The S.transform serializer is missing"); } else { return parse(b, schema$1, input, path); } }) }; }); mut.isAsync = undefined; return mut; } function output() { var mut = new Schema$1(); mut.type = "undefined"; mut.const = (void 0); mut.builder = (function (b, param, param$1, param$2) { return { b: b, v: _notVar, i: "null", a: false }; }); return mut; } var mut = new Schema$1(); mut.type = "null"; mut.const = null; mut.builder = (function (b, param, param$1, param$2) { return { b: b, v: _notVar, i: "void 0", a: false }; }); mut.output = output; var unknown$1 = new Schema$1(); unknown$1.type = "unknown"; function builder(b, input, selfSchema, path) { b.c = b.c + failWithArg(b, path, (function (input) { return { TAG: "InvalidType", expected: selfSchema, received: input }; }), input.i) + ";"; return input; } var never$1 = new Schema$1(); never$1.type = "never"; never$1.builder = builder; function getItemCode(b, schema, input, output, deopt, path) { try { var bb = { c: "", l: "", a: initialAllocate, g: b.g }; if (deopt) { bb.c = bb.c + typeFilterCode(bb, schema, input, path); } var itemOutput = parse(bb, schema, input, path); if (itemOutput !== input) { itemOutput.b = bb; if (schema.type === "unknown") { var reversed = reverse$1(schema); bb.c = bb.c + typeFilterCode(bb, reversed, itemOutput, path); } if (itemOutput.a) { output.a = true; } bb.c = bb.c + (output.v(b) + "=" + itemOutput.i); } return allocateScope(bb); } catch (exn){ return "throw " + embed(b, getOrRethrow(exn)); } } function isPriority(tag, byKey) { if ((tag === "array" || tag === "instance") && byKey["object"]) { return true; } else if (tag === "nan") { return byKey["number"]; } else { return false; } } function builder$1(b, input, selfSchema, path) { var fail = function (caught) { return embed(b, (function (param) { var args = arguments; return raise(b, { TAG: "InvalidType", expected: selfSchema, received: args[0], unionErrors: args.length > 1 ? Array.from(args).slice(1) : undefined }, path); })) + "(" + input.v(b) + caught + ")"; }; var schemas = selfSchema.anyOf; var typeValidation = b.g.o & 1; var initialInline = input.i; var deoptIdx = -1; var lastIdx = schemas.length - 1 | 0; var byKey = {}; var keys = []; for(var idx = 0; idx <= lastIdx; ++idx){ var schema = schemas[idx]; var tag = schema.type; var exit = 0; switch (tag) { case "never" : case "unknown" : case "union" : case "json" : exit = 1; break; default: var key = tag === "instance" ? schema.class.name : tag; var arr = byKey[key]; if (arr !== undefined) { if (tag !== "undefined" && tag !== "null" && tag !== "nan") { arr.push(schema); } } else { if (isPriority(tag, byKey)) { keys.unshift(key); } else { keys.push(key); } byKey[key] = [schema]; } } if (exit === 1) { deoptIdx = idx; byKey = {}; keys = []; } } var deoptIdx$1 = deoptIdx; var byKey$1 = byKey; var keys$1 = keys; var start = ""; var end = ""; var caught = ""; var exit$1 = false; if (deoptIdx$1 !== -1) { for(var idx$1 = 0; idx$1 <= deoptIdx$1; ++idx$1){ if (!exit$1) { var schema$1 = schemas[idx$1]; var itemCode = getItemCode(b, schema$1, input, input, true, path); if (itemCode) { var errorVar = "e" + idx$1; start = start + ("try{" + itemCode + "}catch(" + errorVar + "){"); end = "}" + end; caught = caught + "," + errorVar; } else { exit$1 = true; } } } } if (!exit$1) { var nextElse = false; var noop = ""; for(var idx$2 = 0 ,idx_finish = keys$1.length; idx$2 < idx_finish; ++idx$2){ var schemas$1 = byKey$1[keys$1[idx$2]]; var inputVar = input.v(b); var isMultiple = schemas$1.length > 1; var firstSchema = schemas$1[0]; var cond = ""; var body; if (isMultiple) { var itemStart = ""; var itemEnd = ""; var itemNextElse = false; var itemNoop = ""; var caught$1 = ""; var byDiscriminant = {}; var itemIdx = 0; var lastIdx$1 = schemas$1.length - 1 | 0; while(itemIdx <= lastIdx$1) { var schema$2 = schemas$1[itemIdx]; var itemCond = ( isLiteral(schema$2) ? validation(b, inputVar, schema$2, false) : "" ) + refinement(b, inputVar, schema$2, false).slice(2); var itemCode$1 = getItemCode(b, schema$2, input, input, false, path); if (itemCond) { if (itemCode$1) { var match = byDiscriminant[itemCond]; if (match !== undefined) { if (typeof match === "string") { byDiscriminant[itemCond] = [ match, itemCode$1 ]; } else { match.push(itemCode$1); } } else { byDiscriminant[itemCond] = itemCode$1; } } else { itemNoop = itemNoop ? itemNoop + "||" + itemCond : itemCond; } } if (!itemCond || itemIdx === lastIdx$1) { var accedDiscriminants = Object.keys(byDiscriminant); for(var idx$3 = 0 ,idx_finish$1 = accedDiscriminants.length; idx$3 < idx_finish$1; ++idx$3){ var discrim = accedDiscriminants[idx$3]; var if_ = itemNextElse ? "else if" : "if"; itemStart = itemStart + if_ + ("(" + discrim + "){"); var code = byDiscriminant[discrim]; if (typeof code === "string") { itemStart = itemStart + code + "}"; } else { var caught$2 = ""; for(var idx$4 = 0 ,idx_finish$2 = code.length; idx$4 < idx_finish$2; ++idx$4){ var code$1 = code[idx$4]; var errorVar$1 = "e" + idx$4; itemStart = itemStart + ("try{" + code$1 + "}catch(" + errorVar$1 + "){"); caught$2 = caught$2 + "," + errorVar$1; } itemStart = itemStart + fail(caught$2) + "}".repeat(code.length) + "}"; } itemNextElse = true; } byDiscriminant = {}; } if (!itemCond) { if (itemCode$1) { if (itemNoop) { var if_$1 = itemNextElse ? "else if" : "if"; itemStart = itemStart + if_$1 + ("(!(" + itemNoop + ")){"); itemEnd = "}" + itemEnd; itemNoop = ""; itemNextElse = false; } var errorVar$2 = "e" + itemIdx; itemStart = itemStart + (( itemNextElse ? "else{" : "" ) + "try{" + itemCode$1 + "}catch(" + errorVar$2 + "){"); itemEnd = ( itemNextElse ? "}" : "" ) + "}" + itemEnd; caught$1 = caught$1 + "," + errorVar$2; itemNextElse = false; } else { itemNoop = ""; itemIdx = lastIdx$1; } } itemIdx = itemIdx + 1; } cond = validation(b, inputVar, { type: firstSchema.type, builder: 0 }, false); if (itemNoop) { if (itemStart) { if (typeValidation) { var if_$2 = itemNextElse ? "else if" : "if"; itemStart = itemStart + if_$2 + ("(!(" + itemNoop + ")){" + fail(caught$1) + "}"); } } else { cond = cond + ("&&(" + itemNoop + ")"); } } else if (typeValidation && itemStart) { var errorCode = fail(caught$1); itemStart = itemStart + ( itemNextElse ? "else{" + errorCode + "}" : errorCode ); } body = itemStart + itemEnd; } else { cond = validation(b, inputVar, firstSchema, false) + refinement(b, inputVar, firstSchema, false); body = getItemCode(b, firstSchema, input, input, false, path); } var cond$1 = cond; if (body || isPriority(firstSchema.type, byKey$1)) { var if_$3 = nextElse ? "else if" : "if"; start = start + if_$3 + ("(" + cond$1 + "){" + body + "}"); nextElse = true; } else { noop = noop ? noop + "||" + cond$1 : cond$1; } } if (typeValidation || deoptIdx$1 === lastIdx) { var errorCode$1 = fail(caught); var tmp; if (noop) { var if_$4 = nextElse ? "else if" : "if"; tmp = if_$4 + ("(!(" + noop + ")){" + errorCode$1 + "}"); } else { tmp = nextElse ? "else{" + errorCode$1 + "}" : errorCode$1; } start = start + tmp; } } b.c = b.c + start + end; if (input.a) { return { b: b, v: _notVar, i: "Promise.resolve(" + input.i + ")", a: true }; } else if (input.v === _var) { if (b.c === "" && input.b.c === "" && (input.b.l === input.i + "=" + initialInline || initialInline === "i")) { input.b.l = ""; input.b.a = initialAllocate; input.v = _notVar; input.i = initialInline; return input; } else { return { b: input.b, v: input.v, i: input.i, a: input.a }; } } else { return input; } } function factory(schemas) { var len = schemas.length; if (len === 1) { return schemas[0]; } if (len !== 0) { var has = {}; var anyOf = new Set(); for(var idx = 0 ,idx_finish = schemas.length; idx < idx_finish; ++idx){ var schema = schemas[idx]; if (schema.type === "union" && schema.builder === builder$1) { schema.anyOf.forEach(function (item) { anyOf.add(item); }); Object.assign(has, schema.has); } else { anyOf.add(schema); var v = schema.type; var tmp; switch (v) { case "union" : case "json" : tmp = "unknown"; break; default: tmp = v; } has[tmp] = true; } } var mut = new Schema$1(); mut.type = "union"; mut.anyOf = Array.from(anyOf); mut.builder = builder$1; mut.output = output$1; mut.has = has; return mut; } throw new Error("[Sury] S.union requires at least one item"); } function output$1() { var schemas = this.anyOf; var items = []; var toSelf = true; for(var idx = 0 ,idx_finish = schemas.length; idx < idx_finish; ++idx){ var schema = schemas[idx]; var reversed = reverse$1(schema); items[idx] = reversed; toSelf = toSelf && schema === reversed; } if (toSelf) { return this; } else { return factory(items); } } var defaultMetadataId = "m:Option.default"; function $$default(schema) { return schema[defaultMetadataId]; } var nestedLoc = "BS_PRIVATE_NESTED_SOME_NONE"; var inLoc = "\"" + nestedLoc + "\""; function nestedNone() { var item_schema = parse$1(0); var item = { schema: item_schema, location: nestedLoc, inlinedLocation: inLoc }; var fields = {}; fields[nestedLoc] = item; return { type: "object", builder: (function (b, param, selfSchema, param$1) { return { b: b, v: _notVar, i: inlineConst(b, reverse$1(selfSchema)), a: false }; }), additionalItems: "strip", items: [item], fields: fields }; } function builder$2(b, param, selfSchema, param$1) { return { b: b, v: _notVar, i: "{" + inLoc + ":" + reverse$1(selfSchema).items[0].schema.const + "}", a: false }; } function nestedOption(item) { var mut = copy(item); mut.output = nestedNone; mut.builder = builder$2; return mut; } function factory$1(item, unitOpt) { var unit = unitOpt !== undefined ? unitOpt : $$undefined; var reversed = reverse$1(item); var match = reversed.type; switch (match) { case "undefined" : return factory([ unit, nestedOption(item)