STET

agent_patch

runs/2026-02-27__21-30-28__gpt-5-3-codex/flux-commit-fc48a85d/flux-commit-fc48a85d.1-of-1.2026-02-27__21-30-28__gpt-5-3-codex/agent-logs/agent.patch

262144 bytes

Back to adjudication
diff --git a/app/lib/src/ZodError.d.ts b/app/lib/src/ZodError.d.ts
new file mode 100644
index 0000000..85d2c17
--- /dev/null
+++ b/app/lib/src/ZodError.d.ts
@@ -0,0 +1,105 @@
+import { ZodParsedType } from './parser';
+export declare const ZodErrorCode: {
+    invalid_type: "invalid_type";
+    nonempty_array_is_empty: "nonempty_array_is_empty";
+    custom_error: "custom_error";
+    invalid_union: "invalid_union";
+    invalid_literal_value: "invalid_literal_value";
+    invalid_enum_value: "invalid_enum_value";
+    unrecognized_keys: "unrecognized_keys";
+    invalid_arguments: "invalid_arguments";
+    invalid_return_type: "invalid_return_type";
+    invalid_date: "invalid_date";
+    invalid_string: "invalid_string";
+    too_small: "too_small";
+    too_big: "too_big";
+};
+export declare type ZodErrorCode = keyof typeof ZodErrorCode;
+export declare type ZodSuberrorBase = {
+    path: (string | number)[];
+    message?: string;
+};
+export interface ZodInvalidTypeError extends ZodSuberrorBase {
+    code: typeof ZodErrorCode.invalid_type;
+    expected: ZodParsedType;
+    received: ZodParsedType;
+}
+export interface ZodNonEmptyArrayIsEmptyError extends ZodSuberrorBase {
+    code: typeof ZodErrorCode.nonempty_array_is_empty;
+}
+export interface ZodUnrecognizedKeysError extends ZodSuberrorBase {
+    code: typeof ZodErrorCode.unrecognized_keys;
+    keys: string[];
+}
+export interface ZodInvalidUnionError extends ZodSuberrorBase {
+    code: typeof ZodErrorCode.invalid_union;
+    unionErrors: ZodError[];
+}
+export interface ZodInvalidLiteralValueError extends ZodSuberrorBase {
+    code: typeof ZodErrorCode.invalid_literal_value;
+    expected: string | number | boolean;
+}
+export interface ZodInvalidEnumValueError extends ZodSuberrorBase {
+    code: typeof ZodErrorCode.invalid_enum_value;
+    options: (string | number)[];
+}
+export interface ZodInvalidArgumentsError extends ZodSuberrorBase {
+    code: typeof ZodErrorCode.invalid_arguments;
+    argumentsError: ZodError;
+}
+export interface ZodInvalidReturnTypeError extends ZodSuberrorBase {
+    code: typeof ZodErrorCode.invalid_return_type;
+    returnTypeError: ZodError;
+}
+export interface ZodInvalidDateError extends ZodSuberrorBase {
+    code: typeof ZodErrorCode.invalid_date;
+}
+export declare type StringValidation = 'email' | 'url' | 'uuid' | 'regex';
+export interface ZodInvalidStringError extends ZodSuberrorBase {
+    code: typeof ZodErrorCode.invalid_string;
+    validation: StringValidation;
+}
+export interface ZodTooSmallError extends ZodSuberrorBase {
+    code: typeof ZodErrorCode.too_small;
+    minimum: number;
+    inclusive: boolean;
+    type: 'array' | 'string' | 'number';
+}
+export interface ZodTooBigError extends ZodSuberrorBase {
+    code: typeof ZodErrorCode.too_big;
+    maximum: number;
+    inclusive: boolean;
+    type: 'array' | 'string' | 'number';
+}
+export interface ZodCustomError extends ZodSuberrorBase {
+    code: typeof ZodErrorCode.custom_error;
+    params?: {
+        [k: string]: any;
+    };
+}
+export declare type ZodSuberrorOptionalMessage = ZodInvalidTypeError | ZodNonEmptyArrayIsEmptyError | ZodUnrecognizedKeysError | ZodInvalidUnionError | ZodInvalidLiteralValueError | ZodInvalidEnumValueError | ZodInvalidArgumentsError | ZodInvalidReturnTypeError | ZodInvalidDateError | ZodInvalidStringError | ZodTooSmallError | ZodTooBigError | ZodCustomError;
+export declare type ZodSuberror = ZodSuberrorOptionalMessage & {
+    message: string;
+};
+export declare const quotelessJson: (obj: any) => string;
+export declare class ZodError extends Error {
+    errors: ZodSuberror[];
+    constructor(errors: ZodSuberror[]);
+    static create: (errors: ZodSuberror[]) => ZodError;
+    readonly message: string;
+    readonly isEmpty: boolean;
+    addError: (sub: ZodSuberror) => void;
+    addErrors: (subs?: ZodSuberror[]) => void;
+    flatten: () => {
+        formErrors: string[];
+        fieldErrors: {
+            [k: string]: string[];
+        };
+    };
+    readonly formErrors: {
+        formErrors: string[];
+        fieldErrors: {
+            [k: string]: string[];
+        };
+    };
+}
diff --git a/app/lib/src/ZodError.js b/app/lib/src/ZodError.js
new file mode 100644
index 0000000..2042f63
--- /dev/null
+++ b/app/lib/src/ZodError.js
@@ -0,0 +1,110 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var util_1 = require("./helpers/util");
+exports.ZodErrorCode = util_1.util.arrayToEnum([
+    'invalid_type',
+    'nonempty_array_is_empty',
+    'custom_error',
+    'invalid_union',
+    'invalid_literal_value',
+    'invalid_enum_value',
+    'unrecognized_keys',
+    'invalid_arguments',
+    'invalid_return_type',
+    'invalid_date',
+    'invalid_string',
+    'too_small',
+    'too_big',
+]);
+exports.quotelessJson = function (obj) {
+    var json = JSON.stringify(obj, null, 2); // {"name":"John Smith"}
+    return json.replace(/"([^"]+)":/g, '$1:');
+};
+var ZodError = /** @class */ (function (_super) {
+    __extends(ZodError, _super);
+    function ZodError(errors) {
+        var _newTarget = this.constructor;
+        var _this = _super.call(this) || this;
+        _this.errors = [];
+        _this.addError = function (sub) {
+            _this.errors = _this.errors.concat([sub]);
+        };
+        _this.addErrors = function (subs) {
+            if (subs === void 0) { subs = []; }
+            _this.errors = _this.errors.concat(subs);
+        };
+        _this.flatten = function () {
+            var fieldErrors = {};
+            var formErrors = [];
+            for (var _i = 0, _a = _this.errors; _i < _a.length; _i++) {
+                var sub = _a[_i];
+                if (sub.path.length > 0) {
+                    fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];
+                    fieldErrors[sub.path[0]].push(sub.message);
+                }
+                else {
+                    formErrors.push(sub.message);
+                }
+            }
+            return { formErrors: formErrors, fieldErrors: fieldErrors };
+        };
+        // restore prototype chain
+        var actualProto = _newTarget.prototype;
+        Object.setPrototypeOf(_this, actualProto);
+        _this.errors = errors;
+        return _this;
+    }
+    Object.defineProperty(ZodError.prototype, "message", {
+        get: function () {
+            return JSON.stringify(this.errors, null, 2);
+            // const errorMessage: string[] = [`${this.errors.length} validation issue(s)`, ''];
+            // for (const err of this.errors) {
+            //   errorMessage.push(`  Issue #${this.errors.indexOf(err)}: ${err.code} at ${err.path.join('./index')}`);
+            //   errorMessage.push(`  ` + err.message);
+            //   errorMessage.push('');
+            // }
+            // return errorMessage.join('\n');
+            // return quotelessJson(this);
+            // .map(({ path, message }) => {
+            //   return path.length ? `${path.join('./index')}: ${message}` : `${message}`;
+            // })
+            // .join('\n');
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(ZodError.prototype, "isEmpty", {
+        get: function () {
+            return this.errors.length === 0;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(ZodError.prototype, "formErrors", {
+        get: function () {
+            return this.flatten();
+        },
+        enumerable: true,
+        configurable: true
+    });
+    ZodError.create = function (errors) {
+        var error = new ZodError(errors);
+        return error;
+    };
+    return ZodError;
+}(Error));
+exports.ZodError = ZodError;
+//# sourceMappingURL=ZodError.js.map
\ No newline at end of file
diff --git a/app/lib/src/ZodError.js.map b/app/lib/src/ZodError.js.map
new file mode 100644
index 0000000..e04047b
--- /dev/null
+++ b/app/lib/src/ZodError.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ZodError.js","sourceRoot":"","sources":["../../src/ZodError.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/lib/src/codegen.d.ts b/app/lib/src/codegen.d.ts
new file mode 100644
index 0000000..c766f5e
--- /dev/null
+++ b/app/lib/src/codegen.d.ts
@@ -0,0 +1,18 @@
+import * as z from './index';
+declare type TypeResult = {
+    schema: any;
+    id: string;
+    type: string;
+};
+export declare class ZodCodeGenerator {
+    seen: TypeResult[];
+    serial: number;
+    randomId: () => string;
+    findBySchema: (schema: z.ZodType<any, any>) => TypeResult | undefined;
+    findById: (id: string) => TypeResult;
+    dump: () => string;
+    setType: (id: string, type: string) => TypeResult;
+    generate: (schema: z.ZodType<any, any>) => TypeResult;
+    static create: () => z.ZodCodeGenerator;
+}
+export {};
diff --git a/app/lib/src/codegen.js b/app/lib/src/codegen.js
new file mode 100644
index 0000000..fd9a67b
--- /dev/null
+++ b/app/lib/src/codegen.js
@@ -0,0 +1,146 @@
+"use strict";
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./index"));
+var util_1 = require("./helpers/util");
+var isOptional = function (schema) {
+    var def = schema._def;
+    if (def.t === z.ZodTypes.undefined)
+        return true;
+    else if (def.t === z.ZodTypes.intersection) {
+        return isOptional(def.right) && isOptional(def.left);
+    }
+    else if (def.t === z.ZodTypes.union) {
+        return def.options.map(isOptional).some(function (x) { return x === true; });
+    }
+    return false;
+};
+var ZodCodeGenerator = /** @class */ (function () {
+    function ZodCodeGenerator() {
+        var _this = this;
+        this.seen = [];
+        this.serial = 0;
+        this.randomId = function () {
+            return "IZod" + _this.serial++;
+        };
+        this.findBySchema = function (schema) {
+            return _this.seen.find(function (s) { return s.schema === schema; });
+        };
+        this.findById = function (id) {
+            var found = _this.seen.find(function (s) { return s.id === id; });
+            if (!found)
+                throw new Error("Unfound ID: " + id);
+            return found;
+        };
+        this.dump = function () {
+            return "\ntype Identity<T> = T;\n\n" + _this.seen.map(function (item) { return "type " + item.id + " = Identity<" + item.type + ">;"; }).join('\n\n') + "\n";
+        };
+        this.setType = function (id, type) {
+            var found = _this.findById(id);
+            found.type = type;
+            return found;
+        };
+        this.generate = function (schema) {
+            var found = _this.findBySchema(schema);
+            if (found)
+                return found;
+            var def = schema._def;
+            var id = _this.randomId();
+            var ty = {
+                schema: schema,
+                id: id,
+                type: "__INCOMPLETE__",
+            };
+            _this.seen.push(ty);
+            switch (def.t) {
+                case z.ZodTypes.string:
+                    return _this.setType(id, "string");
+                case z.ZodTypes.number:
+                    return _this.setType(id, "number");
+                case z.ZodTypes.bigint:
+                    return _this.setType(id, "bigint");
+                case z.ZodTypes.boolean:
+                    return _this.setType(id, "boolean");
+                case z.ZodTypes.date:
+                    return _this.setType(id, "Date");
+                case z.ZodTypes.undefined:
+                    return _this.setType(id, "undefined");
+                case z.ZodTypes.null:
+                    return _this.setType(id, "null");
+                case z.ZodTypes.any:
+                    return _this.setType(id, "any");
+                case z.ZodTypes.unknown:
+                    return _this.setType(id, "unknown");
+                case z.ZodTypes.void:
+                    return _this.setType(id, "void");
+                case z.ZodTypes.literal:
+                    var val = def.value;
+                    var literalType = typeof val === 'string' ? "\"" + val + "\"" : "" + val;
+                    return _this.setType(id, literalType);
+                case z.ZodTypes.enum:
+                    return _this.setType(id, def.values.map(function (v) { return "\"" + v + "\""; }).join(' | '));
+                case z.ZodTypes.object:
+                    var objectLines = [];
+                    var shape = def.shape();
+                    for (var key in shape) {
+                        var childSchema = shape[key];
+                        var childType = _this.generate(childSchema);
+                        var OPTKEY = isOptional(childSchema) ? '?' : '';
+                        objectLines.push("" + key + OPTKEY + ": " + childType.id);
+                    }
+                    var baseStruct = "{\n" + objectLines.map(function (line) { return "  " + line + ";"; }).join('\n') + "\n}";
+                    _this.setType(id, "" + baseStruct);
+                    break;
+                case z.ZodTypes.tuple:
+                    var tupleLines = [];
+                    for (var _i = 0, _a = def.items; _i < _a.length; _i++) {
+                        var elSchema = _a[_i];
+                        var elType = _this.generate(elSchema);
+                        tupleLines.push(elType.id);
+                    }
+                    var baseTuple = "[\n" + tupleLines.map(function (line) { return "  " + line + ","; }).join('\n') + "\n]";
+                    return _this.setType(id, "" + baseTuple);
+                case z.ZodTypes.array:
+                    return _this.setType(id, _this.generate(def.type).id + "[]");
+                case z.ZodTypes.function:
+                    var args = _this.generate(def.args);
+                    var returns = _this.generate(def.returns);
+                    return _this.setType(id, "(...args: " + args.id + ")=>" + returns.id);
+                case z.ZodTypes.promise:
+                    var promValue = _this.generate(def.type);
+                    return _this.setType(id, "Promise<" + promValue.id + ">");
+                case z.ZodTypes.union:
+                    var unionLines = [];
+                    for (var _b = 0, _c = def.options; _b < _c.length; _b++) {
+                        var elSchema = _c[_b];
+                        var elType = _this.generate(elSchema);
+                        unionLines.push(elType.id);
+                    }
+                    return _this.setType(id, unionLines.join(" | "));
+                case z.ZodTypes.intersection:
+                    return _this.setType(id, _this.generate(def.left).id + " & " + _this.generate(def.right).id);
+                case z.ZodTypes.record:
+                    return _this.setType(id, "{[k:string]: " + _this.generate(def.valueType).id + "}");
+                case z.ZodTypes.lazy:
+                    var lazyType = def.getter();
+                    return _this.setType(id, _this.generate(lazyType).id);
+                case z.ZodTypes.nativeEnum:
+                    // const lazyType = def.getter();
+                    return _this.setType(id, 'asdf');
+                default:
+                    util_1.util.assertNever(def);
+            }
+            return _this.findById(id);
+        };
+    }
+    ZodCodeGenerator.create = function () { return new ZodCodeGenerator(); };
+    return ZodCodeGenerator;
+}());
+exports.ZodCodeGenerator = ZodCodeGenerator;
+//# sourceMappingURL=codegen.js.map
\ No newline at end of file
diff --git a/app/lib/src/codegen.js.map b/app/lib/src/codegen.js.map
new file mode 100644
index 0000000..becdb00
--- /dev/null
+++ b/app/lib/src/codegen.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../src/codegen.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/lib/src/defaultErrorMap.d.ts b/app/lib/src/defaultErrorMap.d.ts
new file mode 100644
index 0000000..3a9a6d9
--- /dev/null
+++ b/app/lib/src/defaultErrorMap.d.ts
@@ -0,0 +1,10 @@
+import { ZodSuberrorOptionalMessage } from './ZodError';
+declare type ErrorMapCtx = {
+    defaultError: string;
+    data: any;
+};
+export declare type ZodErrorMap = typeof defaultErrorMap;
+export declare const defaultErrorMap: (error: ZodSuberrorOptionalMessage, _ctx: ErrorMapCtx) => {
+    message: string;
+};
+export {};
diff --git a/app/lib/src/defaultErrorMap.js b/app/lib/src/defaultErrorMap.js
new file mode 100644
index 0000000..ceb49b6
--- /dev/null
+++ b/app/lib/src/defaultErrorMap.js
@@ -0,0 +1,93 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var ZodError_1 = require("./ZodError");
+var util_1 = require("./helpers/util");
+exports.defaultErrorMap = function (error, _ctx) {
+    var message;
+    switch (error.code) {
+        case ZodError_1.ZodErrorCode.invalid_type:
+            if (error.received === 'undefined') {
+                message = 'Required';
+            }
+            else {
+                message = "Expected " + error.expected + ", received " + error.received;
+            }
+            break;
+        case ZodError_1.ZodErrorCode.nonempty_array_is_empty:
+            message = "List must contain at least one item";
+            break;
+        case ZodError_1.ZodErrorCode.unrecognized_keys:
+            message = "Unrecognized key(s) in object: " + error.keys.map(function (k) { return "'" + k + "'"; }).join(', ');
+            break;
+        case ZodError_1.ZodErrorCode.invalid_union:
+            message = "Invalid input";
+            break;
+        // case ZodErrorCode.invalid_tuple_length:
+        //   message = `Expected list of ${error.expected} items, received ${error.received} items`;
+        //   break;
+        case ZodError_1.ZodErrorCode.invalid_literal_value:
+            message = "Input must be \"" + error.expected + "\"";
+            break;
+        case ZodError_1.ZodErrorCode.invalid_enum_value:
+            message = "Input must be one of these values: " + error.options.join(', ');
+            break;
+        case ZodError_1.ZodErrorCode.invalid_arguments:
+            message = "Invalid function arguments";
+            break;
+        case ZodError_1.ZodErrorCode.invalid_return_type:
+            message = "Invalid function return type";
+            break;
+        case ZodError_1.ZodErrorCode.invalid_date:
+            message = "Invalid date";
+            break;
+        // case ZodErrorCode.too_small:
+        //   const tooShortNoun = _ctx.data === 'string' ? 'characters' : 'items';
+        //   message = `Too short, should be at least ${error.minimum} ${tooShortNoun}`;
+        //   break;
+        // case ZodErrorCode.too_big:
+        //   const tooLongNoun = _ctx.data === 'string' ? 'characters' : 'items';
+        //   message = `Too short, should be at most ${error.maximum} ${tooLongNoun}`;
+        //   break;
+        case ZodError_1.ZodErrorCode.invalid_string:
+            if (error.validation !== 'regex')
+                message = "Invalid " + error.validation;
+            else
+                message = 'Invalid';
+            break;
+        // case ZodErrorCode.invalid_url:
+        //   message = 'Invalid URL.';
+        //   break;
+        // case ZodErrorCode.invalid_uuid:
+        //   message = 'Invalid UUID.';
+        //   break;
+        case ZodError_1.ZodErrorCode.too_small:
+            if (error.type === 'array')
+                message = "Should have " + (error.inclusive ? "at least" : "more than") + " " + error.minimum + " items";
+            else if (error.type === 'string')
+                message = "Should be " + (error.inclusive ? "at least" : "over") + " " + error.minimum + " characters";
+            else if (error.type === 'number')
+                message = "Value should be greater than " + (error.inclusive ? "or equal to " : "") + error.minimum;
+            else
+                message = 'Invalid input';
+            break;
+        case ZodError_1.ZodErrorCode.too_big:
+            if (error.type === 'array')
+                message = "Should have " + (error.inclusive ? "at most" : "less than") + " " + error.maximum + " items";
+            else if (error.type === 'string')
+                message = "Should be " + (error.inclusive ? "at most" : "under") + " " + error.maximum + " characters long";
+            else if (error.type === 'number')
+                message = "Value should be less than " + (error.inclusive ? "or equal to " : "") + error.maximum;
+            else
+                message = 'Invalid input';
+            break;
+        case ZodError_1.ZodErrorCode.custom_error:
+            message = "Invalid input.";
+            break;
+        default:
+            message = "Invalid input.";
+            util_1.util.assertNever(error);
+    }
+    return { message: message };
+    // return `Invalid input.`;
+};
+//# sourceMappingURL=defaultErrorMap.js.map
\ No newline at end of file
diff --git a/app/lib/src/defaultErrorMap.js.map b/app/lib/src/defaultErrorMap.js.map
new file mode 100644
index 0000000..e2634a6
--- /dev/null
+++ b/app/lib/src/defaultErrorMap.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"defaultErrorMap.js","sourceRoot":"","sources":["../../src/defaultErrorMap.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/lib/src/helpers/Mocker.d.ts b/app/lib/src/helpers/Mocker.d.ts
new file mode 100644
index 0000000..a455255
--- /dev/null
+++ b/app/lib/src/helpers/Mocker.d.ts
@@ -0,0 +1,16 @@
+export declare class Mocker {
+    pick: (...args: any[]) => any;
+    readonly string: string;
+    readonly number: number;
+    readonly bigint: bigint;
+    readonly boolean: boolean;
+    readonly date: Date;
+    readonly null: null;
+    readonly undefined: undefined;
+    readonly stringOptional: any;
+    readonly stringNullable: any;
+    readonly numberOptional: any;
+    readonly numberNullable: any;
+    readonly booleanOptional: any;
+    readonly booleanNullable: any;
+}
diff --git a/app/lib/src/helpers/Mocker.js b/app/lib/src/helpers/Mocker.js
new file mode 100644
index 0000000..7945eb8
--- /dev/null
+++ b/app/lib/src/helpers/Mocker.js
@@ -0,0 +1,112 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+function getRandomInt(max) {
+    return Math.floor(Math.random() * Math.floor(max));
+}
+var Mocker = /** @class */ (function () {
+    function Mocker() {
+        this.pick = function () {
+            var args = [];
+            for (var _i = 0; _i < arguments.length; _i++) {
+                args[_i] = arguments[_i];
+            }
+            return args[getRandomInt(args.length)];
+        };
+    }
+    Object.defineProperty(Mocker.prototype, "string", {
+        get: function () {
+            return Math.random()
+                .toString(36)
+                .substring(7);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(Mocker.prototype, "number", {
+        get: function () {
+            return Math.random() * 100;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(Mocker.prototype, "bigint", {
+        get: function () {
+            return BigInt(Math.floor(Math.random() * 10000));
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(Mocker.prototype, "boolean", {
+        get: function () {
+            return Math.random() < 0.5;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(Mocker.prototype, "date", {
+        get: function () {
+            return new Date(Math.floor(Date.now() * Math.random()));
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(Mocker.prototype, "null", {
+        get: function () {
+            return null;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(Mocker.prototype, "undefined", {
+        get: function () {
+            return undefined;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(Mocker.prototype, "stringOptional", {
+        get: function () {
+            return this.pick(this.string, this.undefined);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(Mocker.prototype, "stringNullable", {
+        get: function () {
+            return this.pick(this.string, this.null);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(Mocker.prototype, "numberOptional", {
+        get: function () {
+            return this.pick(this.number, this.undefined);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(Mocker.prototype, "numberNullable", {
+        get: function () {
+            return this.pick(this.number, this.null);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(Mocker.prototype, "booleanOptional", {
+        get: function () {
+            return this.pick(this.boolean, this.undefined);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(Mocker.prototype, "booleanNullable", {
+        get: function () {
+            return this.pick(this.boolean, this.null);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    return Mocker;
+}());
+exports.Mocker = Mocker;
+//# sourceMappingURL=Mocker.js.map
\ No newline at end of file
diff --git a/app/lib/src/helpers/Mocker.js.map b/app/lib/src/helpers/Mocker.js.map
new file mode 100644
index 0000000..aa403cb
--- /dev/null
+++ b/app/lib/src/helpers/Mocker.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Mocker.js","sourceRoot":"","sources":["../../../src/helpers/Mocker.ts"],"names":[],"mappings":";;AAAA,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,CAAC;AAED;IAAA;QACE,SAAI,GAAG;YAAC,cAAc;iBAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;gBAAd,yBAAc;;YACpB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC;IA2CJ,CAAC;IAzCC,sBAAI,0BAAM;aAAV;YACE,OAAO,IAAI,CAAC,MAAM,EAAE;iBACjB,QAAQ,CAAC,EAAE,CAAC;iBACZ,SAAS,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;;;OAAA;IACD,sBAAI,0BAAM;aAAV;YACE,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;QAC7B,CAAC;;;OAAA;IACD,sBAAI,0BAAM;aAAV;YACE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;QACnD,CAAC;;;OAAA;IACD,sBAAI,2BAAO;aAAX;YACE,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;QAC7B,CAAC;;;OAAA;IACD,sBAAI,wBAAI;aAAR;YACE,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;;;OAAA;IACD,sBAAI,wBAAI;aAAR;YACE,OAAO,IAAI,CAAC;QACd,CAAC;;;OAAA;IACD,sBAAI,6BAAS;aAAb;YACE,OAAO,SAAS,CAAC;QACnB,CAAC;;;OAAA;IACD,sBAAI,kCAAc;aAAlB;YACE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAChD,CAAC;;;OAAA;IACD,sBAAI,kCAAc;aAAlB;YACE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;;;OAAA;IACD,sBAAI,kCAAc;aAAlB;YACE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAChD,CAAC;;;OAAA;IACD,sBAAI,kCAAc;aAAlB;YACE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;;;OAAA;IACD,sBAAI,mCAAe;aAAnB;YACE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,CAAC;;;OAAA;IACD,sBAAI,mCAAe;aAAnB;YACE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;;;OAAA;IACH,aAAC;AAAD,CAAC,AA9CD,IA8CC;AA9CY,wBAAM"}
\ No newline at end of file
diff --git a/app/lib/src/helpers/errorUtil.d.ts b/app/lib/src/helpers/errorUtil.d.ts
new file mode 100644
index 0000000..42698c0
--- /dev/null
+++ b/app/lib/src/helpers/errorUtil.d.ts
@@ -0,0 +1,10 @@
+export declare namespace errorUtil {
+    type ErrMessage = string | {
+        message?: string;
+    };
+    const errToObj: (message?: string | {
+        message?: string | undefined;
+    } | undefined) => {
+        message?: string | undefined;
+    };
+}
diff --git a/app/lib/src/helpers/errorUtil.js b/app/lib/src/helpers/errorUtil.js
new file mode 100644
index 0000000..77b2bf4
--- /dev/null
+++ b/app/lib/src/helpers/errorUtil.js
@@ -0,0 +1,7 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var errorUtil;
+(function (errorUtil) {
+    errorUtil.errToObj = function (message) { return (typeof message === 'string' ? { message: message } : message || {}); };
+})(errorUtil = exports.errorUtil || (exports.errorUtil = {}));
+//# sourceMappingURL=errorUtil.js.map
\ No newline at end of file
diff --git a/app/lib/src/helpers/errorUtil.js.map b/app/lib/src/helpers/errorUtil.js.map
new file mode 100644
index 0000000..b1ee31f
--- /dev/null
+++ b/app/lib/src/helpers/errorUtil.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"errorUtil.js","sourceRoot":"","sources":["../../../src/helpers/errorUtil.ts"],"names":[],"mappings":";;AAAA,IAAiB,SAAS,CAGzB;AAHD,WAAiB,SAAS;IAEX,kBAAQ,GAAG,UAAC,OAAoB,IAAK,OAAA,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,SAAA,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,EAA3D,CAA2D,CAAC;AAChH,CAAC,EAHgB,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAGzB"}
\ No newline at end of file
diff --git a/app/lib/src/helpers/maskUtil.d.ts b/app/lib/src/helpers/maskUtil.d.ts
new file mode 100644
index 0000000..5b26f57
--- /dev/null
+++ b/app/lib/src/helpers/maskUtil.d.ts
@@ -0,0 +1,39 @@
+import { Primitive } from './primitive';
+declare type AnyObject = {
+    [k: string]: any;
+};
+declare type IsAny<T> = any extends T ? (T extends any ? true : false) : false;
+declare type IsNever<T> = never extends T ? (T extends never ? true : false) : false;
+declare type IsTrue<T> = true extends T ? (T extends true ? true : false) : false;
+declare type IsObject<T> = T extends {
+    [k: string]: any;
+} ? (T extends Array<any> ? false : true) : false;
+declare type IsObjectArray<T> = T extends Array<{
+    [k: string]: any;
+}> ? true : false;
+export declare namespace maskUtil {
+    type Params<T> = {
+        array: T extends Array<infer U> ? true | {
+            [k in keyof U]?: true | Params<U[k]>;
+        } : never;
+        object: T extends AnyObject ? {
+            [k in keyof T]?: true | Params<T[k]>;
+        } : never;
+        rest: never;
+        never: never;
+    }[T extends null | undefined | Primitive | Array<Primitive> ? 'never' : any extends T ? 'never' : T extends Array<AnyObject> ? 'array' : IsObject<T> extends true ? 'object' : 'rest'];
+    type PickTest<T, P extends any> = P extends true ? 'true' : true extends IsObject<T> ? 'object' : true extends IsObjectArray<T> ? 'array' : 'rest';
+    type Pick<T, P> = null extends T ? undefined extends T ? BasePick<NonNullable<T>, P> | null | undefined : BasePick<NonNullable<T>, P> | null : undefined extends T ? BasePick<NonNullable<T>, P> | undefined : BasePick<NonNullable<T>, P>;
+    type BasePick<T, P extends any> = {
+        primitive: T;
+        primitivearray: T;
+        true: T;
+        object: {
+            [k in keyof P]: k extends keyof T ? Pick<T[k], P[k]> : never;
+        };
+        array: T extends (infer U)[] ? Pick<U, P>[] : never;
+        never: never;
+        any: any;
+    }[IsAny<T> extends true ? 'any' : IsNever<T> extends true ? 'never' : IsNever<P> extends true ? 'true' : IsTrue<P> extends true ? 'true' : true extends IsObject<T> ? 'object' : true extends IsObjectArray<T> ? 'array' : 'any'];
+}
+export {};
diff --git a/app/lib/src/helpers/maskUtil.js b/app/lib/src/helpers/maskUtil.js
new file mode 100644
index 0000000..88226d2
--- /dev/null
+++ b/app/lib/src/helpers/maskUtil.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=maskUtil.js.map
\ No newline at end of file
diff --git a/app/lib/src/helpers/maskUtil.js.map b/app/lib/src/helpers/maskUtil.js.map
new file mode 100644
index 0000000..f4299f7
--- /dev/null
+++ b/app/lib/src/helpers/maskUtil.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"maskUtil.js","sourceRoot":"","sources":["../../../src/helpers/maskUtil.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/app/lib/src/helpers/objectUtil.d.ts b/app/lib/src/helpers/objectUtil.d.ts
new file mode 100644
index 0000000..35367a2
--- /dev/null
+++ b/app/lib/src/helpers/objectUtil.d.ts
@@ -0,0 +1,41 @@
+import { ZodRawShape } from '../types/base';
+import { ZodObject } from '../types/object';
+export declare namespace objectUtil {
+    interface ZodObjectParams {
+        strict: boolean;
+    }
+    type MergeObjectParams<First extends ZodObjectParams, Second extends ZodObjectParams> = {
+        strict: First['strict'] extends false ? false : Second['strict'] extends false ? false : true;
+    };
+    type MergeShapes<U extends ZodRawShape, V extends ZodRawShape> = {
+        [k in Exclude<keyof U, keyof V>]: U[k];
+    } & V;
+    type Flatten<T extends object> = {
+        [k in keyof T]: T[k];
+    };
+    type OptionalKeys<T extends object> = {
+        [k in keyof T]: undefined extends T[k] ? k : never;
+    }[keyof T];
+    type RequiredKeys<T extends object> = Exclude<keyof T, OptionalKeys<T>>;
+    type AddQuestionMarks<T extends object> = {
+        [k in OptionalKeys<T>]?: T[k];
+    } & {
+        [k in RequiredKeys<T>]: T[k];
+    };
+    type ObjectIntersection<T extends ZodRawShape> = AddQuestionMarks<{
+        [k in keyof T]: T[k]['_type'];
+    }>;
+    type Identity<T> = T;
+    type FlattenObject<T extends ZodRawShape> = Identity<{
+        [k in keyof T]: T[k];
+    }>;
+    type NoNeverKeys<T extends ZodRawShape> = {
+        [k in keyof T]: [T[k]] extends [never] ? never : k;
+    }[keyof T];
+    type NoNever<T extends ZodRawShape> = Identity<{
+        [k in NoNeverKeys<T>]: k extends keyof T ? T[k] : never;
+    }>;
+    type ObjectType<T extends ZodRawShape> = FlattenObject<ObjectIntersection<T>>;
+    const mergeShapes: <U extends ZodRawShape, T extends ZodRawShape>(first: U, second: T) => T & U;
+    const mergeObjects: <First extends ZodObject<any, any, any>>(first: First) => <Second extends ZodObject<any, any, any>>(second: Second) => ZodObject<First["_shape"] & Second["_shape"], MergeObjectParams<First["_params"], Second["_params"]>, First["_type"] & Second["_type"]>;
+}
diff --git a/app/lib/src/helpers/objectUtil.js b/app/lib/src/helpers/objectUtil.js
new file mode 100644
index 0000000..0cccb3c
--- /dev/null
+++ b/app/lib/src/helpers/objectUtil.js
@@ -0,0 +1,43 @@
+"use strict";
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var base_1 = require("../types/base");
+var intersection_1 = require("../types/intersection");
+var object_1 = require("../types/object");
+var objectUtil;
+(function (objectUtil) {
+    objectUtil.mergeShapes = function (first, second) {
+        var firstKeys = Object.keys(first);
+        var secondKeys = Object.keys(second);
+        var sharedKeys = firstKeys.filter(function (k) { return secondKeys.indexOf(k) !== -1; });
+        var sharedShape = {};
+        for (var _i = 0, sharedKeys_1 = sharedKeys; _i < sharedKeys_1.length; _i++) {
+            var k = sharedKeys_1[_i];
+            sharedShape[k] = intersection_1.ZodIntersection.create(first[k], second[k]);
+        }
+        return __assign({}, first, second, sharedShape);
+    };
+    objectUtil.mergeObjects = function (first) { return function (second) {
+        var mergedShape = objectUtil.mergeShapes(first._def.shape(), second._def.shape());
+        var merged = new object_1.ZodObject({
+            t: base_1.ZodTypes.object,
+            checks: (first._def.checks || []).concat((second._def.checks || [])),
+            params: {
+                strict: first.params.strict && second.params.strict,
+            },
+            shape: function () { return mergedShape; },
+        });
+        return merged;
+    }; };
+})(objectUtil = exports.objectUtil || (exports.objectUtil = {}));
+//# sourceMappingURL=objectUtil.js.map
\ No newline at end of file
diff --git a/app/lib/src/helpers/objectUtil.js.map b/app/lib/src/helpers/objectUtil.js.map
new file mode 100644
index 0000000..c05f8ca
--- /dev/null
+++ b/app/lib/src/helpers/objectUtil.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"objectUtil.js","sourceRoot":"","sources":["../../../src/helpers/objectUtil.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,sCAAsD;AACtD,sDAAwD;AACxD,0CAA4C;AAE5C,IAAiB,UAAU,CAoF1B;AApFD,WAAiB,UAAU;IA+CZ,sBAAW,GAAG,UAA+C,KAAQ,EAAE,MAAS;QAC3F,IAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,IAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,IAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAA5B,CAA4B,CAAC,CAAC;QAEvE,IAAM,WAAW,GAAQ,EAAE,CAAC;QAC5B,KAAgB,UAAU,EAAV,yBAAU,EAAV,wBAAU,EAAV,IAAU,EAAE;YAAvB,IAAM,CAAC,mBAAA;YACV,WAAW,CAAC,CAAC,CAAC,GAAG,8BAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAC9D;QACD,oBACM,KAAgB,EAChB,MAAiB,EAClB,WAAW,EACd;IACJ,CAAC,CAAC;IAEW,uBAAY,GAAG,UAAyC,KAAY,IAAK,OAAA,UAGpF,MAAc;QAMd,IAAM,WAAW,GAAG,WAAA,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACzE,IAAM,MAAM,GAAQ,IAAI,kBAAS,CAAC;YAChC,CAAC,EAAE,eAAQ,CAAC,MAAM;YAClB,MAAM,EAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,QAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YAErE,MAAM,EAAE;gBACN,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM;aACpD;YACD,KAAK,EAAE,cAAM,OAAA,WAAW,EAAX,CAAW;SACzB,CAAQ,CAAC;QACV,OAAO,MAAM,CAAC;IAChB,CAAC,EApBqF,CAoBrF,CAAC;AACJ,CAAC,EApFgB,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAoF1B"}
\ No newline at end of file
diff --git a/app/lib/src/helpers/partialUtil.d.ts b/app/lib/src/helpers/partialUtil.d.ts
new file mode 100644
index 0000000..50d72a3
--- /dev/null
+++ b/app/lib/src/helpers/partialUtil.d.ts
@@ -0,0 +1,15 @@
+import * as z from '../index';
+export declare namespace partialUtil {
+    type RootDeepPartial<T extends z.ZodTypeAny> = {
+        object: T extends z.ZodObject<infer Shape, infer Params> ? z.ZodObject<{
+            [k in keyof Shape]: DeepPartial<Shape[k]>;
+        }, Params> : never;
+        rest: z.ZodUnion<[T, z.ZodUndefined]>;
+    }[T extends z.ZodObject<any> ? 'object' : 'rest'];
+    type DeepPartial<T extends z.ZodTypeAny> = {
+        object: T extends z.ZodObject<infer Shape, infer Params> ? z.ZodUnion<[z.ZodObject<{
+            [k in keyof Shape]: DeepPartial<Shape[k]>;
+        }, Params>, z.ZodUndefined]> : never;
+        rest: z.ZodUnion<[T, z.ZodUndefined]>;
+    }[T extends z.ZodObject<any> ? 'object' : 'rest'];
+}
diff --git a/app/lib/src/helpers/partialUtil.js b/app/lib/src/helpers/partialUtil.js
new file mode 100644
index 0000000..1867136
--- /dev/null
+++ b/app/lib/src/helpers/partialUtil.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=partialUtil.js.map
\ No newline at end of file
diff --git a/app/lib/src/helpers/partialUtil.js.map b/app/lib/src/helpers/partialUtil.js.map
new file mode 100644
index 0000000..69d2112
--- /dev/null
+++ b/app/lib/src/helpers/partialUtil.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"partialUtil.js","sourceRoot":"","sources":["../../../src/helpers/partialUtil.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/app/lib/src/helpers/primitive.d.ts b/app/lib/src/helpers/primitive.d.ts
new file mode 100644
index 0000000..4854b7e
--- /dev/null
+++ b/app/lib/src/helpers/primitive.d.ts
@@ -0,0 +1 @@
+export declare type Primitive = string | number | bigint | boolean | null | undefined;
diff --git a/app/lib/src/helpers/primitive.js b/app/lib/src/helpers/primitive.js
new file mode 100644
index 0000000..8359dd0
--- /dev/null
+++ b/app/lib/src/helpers/primitive.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=primitive.js.map
\ No newline at end of file
diff --git a/app/lib/src/helpers/primitive.js.map b/app/lib/src/helpers/primitive.js.map
new file mode 100644
index 0000000..56f1b00
--- /dev/null
+++ b/app/lib/src/helpers/primitive.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"primitive.js","sourceRoot":"","sources":["../../../src/helpers/primitive.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/app/lib/src/helpers/util.d.ts b/app/lib/src/helpers/util.d.ts
new file mode 100644
index 0000000..00aa3aa
--- /dev/null
+++ b/app/lib/src/helpers/util.d.ts
@@ -0,0 +1,9 @@
+export declare namespace util {
+    type AssertEqual<T, Expected> = T extends Expected ? (Expected extends T ? true : false) : false;
+    function assertNever(_x: never): never;
+    type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
+    type OmitKeys<T, K extends string> = Pick<T, Exclude<keyof T, K>>;
+    type MakePartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
+    const arrayToEnum: <T extends string, U extends [T, ...T[]]>(items: U) => { [k in U[number]]: k; };
+    const getValidEnumValues: (obj: any) => {}[];
+}
diff --git a/app/lib/src/helpers/util.js b/app/lib/src/helpers/util.js
new file mode 100644
index 0000000..4c469cd
--- /dev/null
+++ b/app/lib/src/helpers/util.js
@@ -0,0 +1,27 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var util;
+(function (util) {
+    function assertNever(_x) {
+        throw new Error();
+    }
+    util.assertNever = assertNever;
+    util.arrayToEnum = function (items) {
+        var obj = {};
+        for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {
+            var item = items_1[_i];
+            obj[item] = item;
+        }
+        return obj;
+    };
+    util.getValidEnumValues = function (obj) {
+        var validKeys = Object.keys(obj).filter(function (k) { return typeof obj[obj[k]] !== 'number'; });
+        var filtered = {};
+        for (var _i = 0, validKeys_1 = validKeys; _i < validKeys_1.length; _i++) {
+            var k = validKeys_1[_i];
+            filtered[k] = obj[k];
+        }
+        return Object.values(filtered);
+    };
+})(util = exports.util || (exports.util = {}));
+//# sourceMappingURL=util.js.map
\ No newline at end of file
diff --git a/app/lib/src/helpers/util.js.map b/app/lib/src/helpers/util.js.map
new file mode 100644
index 0000000..aa8ebab
--- /dev/null
+++ b/app/lib/src/helpers/util.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/helpers/util.ts"],"names":[],"mappings":";;AAAA,IAAiB,IAAI,CA2BpB;AA3BD,WAAiB,IAAI;IAGnB,SAAgB,WAAW,CAAC,EAAS;QACnC,MAAM,IAAI,KAAK,EAAE,CAAC;IACpB,CAAC;IAFe,gBAAW,cAE1B,CAAA;IAMY,gBAAW,GAAG,UAA0C,KAAQ;QAC3E,IAAM,GAAG,GAAQ,EAAE,CAAC;QACpB,KAAmB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;YAArB,IAAM,IAAI,cAAA;YACb,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;SAClB;QACD,OAAO,GAAU,CAAC;IACpB,CAAC,CAAC;IAEW,uBAAkB,GAAG,UAAC,GAAQ;QACzC,IAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAC,CAAM,IAAK,OAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAA/B,CAA+B,CAAC,CAAC;QACvF,IAAM,QAAQ,GAAQ,EAAE,CAAC;QACzB,KAAgB,UAAS,EAAT,uBAAS,EAAT,uBAAS,EAAT,IAAS,EAAE;YAAtB,IAAM,CAAC,kBAAA;YACV,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;SACtB;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC,CAAC;AACJ,CAAC,EA3BgB,IAAI,GAAJ,YAAI,KAAJ,YAAI,QA2BpB"}
\ No newline at end of file
diff --git a/app/lib/src/index.d.ts b/app/lib/src/index.d.ts
new file mode 100644
index 0000000..b8d3019
--- /dev/null
+++ b/app/lib/src/index.d.ts
@@ -0,0 +1,84 @@
+import { ZodString, ZodStringDef } from './types/string';
+import { ZodNumber, ZodNumberDef } from './types/number';
+import { ZodBigInt, ZodBigIntDef } from './types/bigint';
+import { ZodBoolean, ZodBooleanDef } from './types/boolean';
+import { ZodDate, ZodDateDef } from './types/date';
+import { ZodUndefined, ZodUndefinedDef } from './types/undefined';
+import { ZodNull, ZodNullDef } from './types/null';
+import { ZodAny, ZodAnyDef } from './types/any';
+import { ZodUnknown, ZodUnknownDef } from './types/unknown';
+import { ZodVoid, ZodVoidDef } from './types/void';
+import { ZodArray, ZodArrayDef } from './types/array';
+import { ZodObject, ZodObjectDef } from './types/object';
+import { ZodUnion, ZodUnionDef } from './types/union';
+import { ZodIntersection, ZodIntersectionDef } from './types/intersection';
+import { ZodTuple, ZodTupleDef } from './types/tuple';
+import { ZodRecord, ZodRecordDef } from './types/record';
+import { ZodFunction, ZodFunctionDef } from './types/function';
+import { ZodLazy, ZodLazyDef } from './types/lazy';
+import { ZodLiteral, ZodLiteralDef } from './types/literal';
+import { ZodEnum, ZodEnumDef } from './types/enum';
+import { ZodNativeEnum, ZodNativeEnumDef } from './types/nativeEnum';
+import { ZodPromise, ZodPromiseDef } from './types/promise';
+import { TypeOf, ZodType, ZodTypeAny, ZodTypeDef, ZodTypes } from './types/base';
+import { ZodParsedType } from './parser';
+import { ZodErrorMap } from './defaultErrorMap';
+import { ZodCodeGenerator } from './codegen';
+export { ZodTypeDef, ZodTypes };
+declare type ZodDef = ZodStringDef | ZodNumberDef | ZodBigIntDef | ZodBooleanDef | ZodDateDef | ZodUndefinedDef | ZodNullDef | ZodAnyDef | ZodUnknownDef | ZodVoidDef | ZodArrayDef | ZodObjectDef | ZodUnionDef | ZodIntersectionDef | ZodTupleDef | ZodRecordDef | ZodFunctionDef | ZodLazyDef | ZodLiteralDef | ZodEnumDef | ZodNativeEnumDef | ZodPromiseDef;
+declare const stringType: () => ZodString;
+declare const numberType: () => ZodNumber;
+declare const bigIntType: () => ZodBigInt;
+declare const booleanType: () => ZodBoolean;
+declare const dateType: () => ZodDate;
+declare const undefinedType: () => ZodUndefined;
+declare const nullType: () => ZodNull;
+declare const anyType: () => ZodAny;
+declare const unknownType: () => ZodUnknown;
+declare const voidType: () => ZodVoid;
+declare const arrayType: <T extends ZodType<any, any>>(schema: T) => ZodArray<T>;
+declare const objectType: <T extends import("./types/base").ZodRawShape>(shape: T) => ZodObject<T, {
+    strict: true;
+}, { [k in keyof ({ [k in { [k in keyof { [k in keyof T]: T[k]["_type"]; }]: undefined extends { [k in keyof T]: T[k]["_type"]; }[k] ? k : never; }[keyof T]]?: { [k in keyof T]: T[k]["_type"]; }[k] | undefined; } & { [k in Exclude<keyof T, { [k in keyof { [k in keyof T]: T[k]["_type"]; }]: undefined extends { [k in keyof T]: T[k]["_type"]; }[k] ? k : never; }[keyof T]>]: { [k in keyof T]: T[k]["_type"]; }[k]; })]: ({ [k in { [k in keyof { [k in keyof T]: T[k]["_type"]; }]: undefined extends { [k in keyof T]: T[k]["_type"]; }[k] ? k : never; }[keyof T]]?: { [k in keyof T]: T[k]["_type"]; }[k] | undefined; } & { [k in Exclude<keyof T, { [k in keyof { [k in keyof T]: T[k]["_type"]; }]: undefined extends { [k in keyof T]: T[k]["_type"]; }[k] ? k : never; }[keyof T]>]: { [k in keyof T]: T[k]["_type"]; }[k]; })[k]; }>;
+declare const unionType: <T extends [ZodType<any, any>, ZodType<any, any>, ...ZodType<any, any>[]]>(types: T) => ZodUnion<T>;
+declare const intersectionType: <T extends ZodType<any, any>, U extends ZodType<any, any>>(left: T, right: U) => ZodIntersection<T, U>;
+declare const tupleType: <T extends [ZodType<any, any>, ...ZodType<any, any>[]] | []>(schemas: T) => ZodTuple<T>;
+declare const recordType: <Value extends ZodType<any, any> = ZodType<any, any>>(valueType: Value) => ZodRecord<Value>;
+declare const functionType: <T extends ZodTuple<any> = ZodTuple<[]>, U extends ZodType<any, any> = ZodVoid>(args?: T | undefined, returns?: U | undefined) => ZodFunction<T, U>;
+declare const lazyType: <T extends ZodType<any, any>>(getter: () => T) => ZodLazy<T>;
+declare const literalType: <T extends import("./helpers/primitive").Primitive>(value: T) => ZodLiteral<T>;
+declare const enumType: <U extends string, T extends [U, ...U[]]>(values: T) => ZodEnum<T>;
+declare const nativeEnumType: <T extends {
+    [k: string]: string | number;
+    [nu: number]: string;
+}>(values: T) => ZodNativeEnum<T>;
+declare const promiseType: <T extends ZodType<any, any>>(schema: T) => ZodPromise<T>;
+declare const ostring: () => ZodUnion<[ZodString, ZodUndefined]>;
+declare const onumber: () => ZodUnion<[ZodNumber, ZodUndefined]>;
+declare const oboolean: () => ZodUnion<[ZodBoolean, ZodUndefined]>;
+declare const codegen: () => ZodCodeGenerator;
+export declare const custom: <T>(check: (data: unknown) => any, params?: string | Pick<{
+    check: (arg: any) => any;
+    path?: (string | number)[] | undefined;
+    message?: string | undefined;
+    params?: {
+        [k: string]: any;
+    } | undefined;
+}, "path" | "message" | "params"> | undefined) => ZodType<T, ZodTypeDef>;
+declare const instanceOfType: <T extends new (...args: any[]) => any>(cls: T, params?: string | Pick<{
+    check: (arg: any) => any;
+    path?: (string | number)[] | undefined;
+    message?: string | undefined;
+    params?: {
+        [k: string]: any;
+    } | undefined;
+}, "path" | "message" | "params"> | undefined) => ZodType<InstanceType<T>, ZodTypeDef>;
+export { stringType as string, numberType as number, bigIntType as bigint, booleanType as boolean, dateType as date, undefinedType as undefined, nullType as null, anyType as any, unknownType as unknown, voidType as void, arrayType as array, objectType as object, unionType as union, intersectionType as intersection, tupleType as tuple, recordType as record, functionType as function, lazyType as lazy, literalType as literal, enumType as enum, nativeEnumType as nativeEnum, promiseType as promise, instanceOfType as instanceof, ostring, onumber, oboolean, codegen, };
+export declare const late: {
+    object: <T extends import("./types/base").ZodRawShape>(shape: () => T) => ZodObject<T, {
+        strict: true;
+    }, { [k in keyof ({ [k in { [k in keyof { [k in keyof T]: T[k]["_type"]; }]: undefined extends { [k in keyof T]: T[k]["_type"]; }[k] ? k : never; }[keyof T]]?: { [k in keyof T]: T[k]["_type"]; }[k] | undefined; } & { [k in Exclude<keyof T, { [k in keyof { [k in keyof T]: T[k]["_type"]; }]: undefined extends { [k in keyof T]: T[k]["_type"]; }[k] ? k : never; }[keyof T]>]: { [k in keyof T]: T[k]["_type"]; }[k]; })]: ({ [k in { [k in keyof { [k in keyof T]: T[k]["_type"]; }]: undefined extends { [k in keyof T]: T[k]["_type"]; }[k] ? k : never; }[keyof T]]?: { [k in keyof T]: T[k]["_type"]; }[k] | undefined; } & { [k in Exclude<keyof T, { [k in keyof { [k in keyof T]: T[k]["_type"]; }]: undefined extends { [k in keyof T]: T[k]["_type"]; }[k] ? k : never; }[keyof T]>]: { [k in keyof T]: T[k]["_type"]; }[k]; })[k]; }>;
+};
+export { ZodString, ZodNumber, ZodBigInt, ZodBoolean, ZodDate, ZodUndefined, ZodNull, ZodAny, ZodUnknown, ZodVoid, ZodArray, ZodObject, ZodUnion, ZodIntersection, ZodTuple, ZodRecord, ZodFunction, ZodLazy, ZodLiteral, ZodEnum, ZodNativeEnum, ZodPromise, ZodType, ZodType as Schema, ZodType as ZodSchema, ZodTypeAny, ZodDef, ZodErrorMap, ZodParsedType, ZodCodeGenerator, };
+export * from './ZodError';
+export { TypeOf, TypeOf as infer };
diff --git a/app/lib/src/index.js b/app/lib/src/index.js
new file mode 100644
index 0000000..8d8ff16
--- /dev/null
+++ b/app/lib/src/index.js
@@ -0,0 +1,137 @@
+"use strict";
+/* ZOD */
+function __export(m) {
+    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
+}
+Object.defineProperty(exports, "__esModule", { value: true });
+var string_1 = require("./types/string");
+exports.ZodString = string_1.ZodString;
+var number_1 = require("./types/number");
+exports.ZodNumber = number_1.ZodNumber;
+var bigint_1 = require("./types/bigint");
+exports.ZodBigInt = bigint_1.ZodBigInt;
+var boolean_1 = require("./types/boolean");
+exports.ZodBoolean = boolean_1.ZodBoolean;
+var date_1 = require("./types/date");
+exports.ZodDate = date_1.ZodDate;
+var undefined_1 = require("./types/undefined");
+exports.ZodUndefined = undefined_1.ZodUndefined;
+var null_1 = require("./types/null");
+exports.ZodNull = null_1.ZodNull;
+var any_1 = require("./types/any");
+exports.ZodAny = any_1.ZodAny;
+var unknown_1 = require("./types/unknown");
+exports.ZodUnknown = unknown_1.ZodUnknown;
+var void_1 = require("./types/void");
+exports.ZodVoid = void_1.ZodVoid;
+var array_1 = require("./types/array");
+exports.ZodArray = array_1.ZodArray;
+var object_1 = require("./types/object");
+exports.ZodObject = object_1.ZodObject;
+var union_1 = require("./types/union");
+exports.ZodUnion = union_1.ZodUnion;
+var intersection_1 = require("./types/intersection");
+exports.ZodIntersection = intersection_1.ZodIntersection;
+var tuple_1 = require("./types/tuple");
+exports.ZodTuple = tuple_1.ZodTuple;
+var record_1 = require("./types/record");
+exports.ZodRecord = record_1.ZodRecord;
+var function_1 = require("./types/function");
+exports.ZodFunction = function_1.ZodFunction;
+var lazy_1 = require("./types/lazy");
+exports.ZodLazy = lazy_1.ZodLazy;
+var literal_1 = require("./types/literal");
+exports.ZodLiteral = literal_1.ZodLiteral;
+var enum_1 = require("./types/enum");
+exports.ZodEnum = enum_1.ZodEnum;
+var nativeEnum_1 = require("./types/nativeEnum");
+exports.ZodNativeEnum = nativeEnum_1.ZodNativeEnum;
+var promise_1 = require("./types/promise");
+exports.ZodPromise = promise_1.ZodPromise;
+var base_1 = require("./types/base");
+exports.ZodType = base_1.ZodType;
+exports.Schema = base_1.ZodType;
+exports.ZodSchema = base_1.ZodType;
+exports.ZodTypes = base_1.ZodTypes;
+// import { ZodError, ZodErrorCode, ZodInvalidTypeError,
+// ZodNonEmptyArrayIsEmptyError,
+// ZodUnrecognizedKeysError,
+// ZodInvalidUnionError,
+// ZodInvalidLiteralValueError,
+// ZodInvalidEnumValueError,
+// ZodInvalidArgumentsError,
+// ZodInvalidReturnTypeError,
+// ZodInvalidDateError,
+// ZodInvalidStringError,
+// ZodTooSmallError,
+// ZodTooBigError,
+// ZodCustomError } from './ZodError';
+var parser_1 = require("./parser");
+exports.ZodParsedType = parser_1.ZodParsedType;
+var codegen_1 = require("./codegen");
+exports.ZodCodeGenerator = codegen_1.ZodCodeGenerator;
+var stringType = string_1.ZodString.create;
+exports.string = stringType;
+var numberType = number_1.ZodNumber.create;
+exports.number = numberType;
+var bigIntType = bigint_1.ZodBigInt.create;
+exports.bigint = bigIntType;
+var booleanType = boolean_1.ZodBoolean.create;
+exports.boolean = booleanType;
+var dateType = date_1.ZodDate.create;
+exports.date = dateType;
+var undefinedType = undefined_1.ZodUndefined.create;
+exports.undefined = undefinedType;
+var nullType = null_1.ZodNull.create;
+exports.null = nullType;
+var anyType = any_1.ZodAny.create;
+exports.any = anyType;
+var unknownType = unknown_1.ZodUnknown.create;
+exports.unknown = unknownType;
+var voidType = void_1.ZodVoid.create;
+exports.void = voidType;
+var arrayType = array_1.ZodArray.create;
+exports.array = arrayType;
+var objectType = object_1.ZodObject.create;
+exports.object = objectType;
+var unionType = union_1.ZodUnion.create;
+exports.union = unionType;
+var intersectionType = intersection_1.ZodIntersection.create;
+exports.intersection = intersectionType;
+var tupleType = tuple_1.ZodTuple.create;
+exports.tuple = tupleType;
+var recordType = record_1.ZodRecord.create;
+exports.record = recordType;
+var functionType = function_1.ZodFunction.create;
+exports.function = functionType;
+var lazyType = lazy_1.ZodLazy.create;
+exports.lazy = lazyType;
+var literalType = literal_1.ZodLiteral.create;
+exports.literal = literalType;
+var enumType = enum_1.ZodEnum.create;
+exports.enum = enumType;
+var nativeEnumType = nativeEnum_1.ZodNativeEnum.create;
+exports.nativeEnum = nativeEnumType;
+var promiseType = promise_1.ZodPromise.create;
+exports.promise = promiseType;
+var ostring = function () { return stringType().optional(); };
+exports.ostring = ostring;
+var onumber = function () { return numberType().optional(); };
+exports.onumber = onumber;
+var oboolean = function () { return booleanType().optional(); };
+exports.oboolean = oboolean;
+var codegen = codegen_1.ZodCodeGenerator.create;
+exports.codegen = codegen;
+exports.custom = function (check, params) {
+    return anyType().refine(check, params);
+};
+var instanceOfType = function (cls, params) {
+    if (params === void 0) { params = { message: "Input not instance of " + cls.name }; }
+    return exports.custom(function (data) { return data instanceof cls; }, params);
+};
+exports.instanceof = instanceOfType;
+exports.late = {
+    object: object_1.ZodObject.lazycreate,
+};
+__export(require("./ZodError"));
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/app/lib/src/index.js.map b/app/lib/src/index.js.map
new file mode 100644
index 0000000..fdf7908
--- /dev/null
+++ b/app/lib/src/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/lib/src/isScalar.d.ts b/app/lib/src/isScalar.d.ts
new file mode 100644
index 0000000..e3c8ee4
--- /dev/null
+++ b/app/lib/src/isScalar.d.ts
@@ -0,0 +1,4 @@
+import * as z from './index';
+export declare const isScalar: (schema: z.ZodType<any, any>, params?: {
+    root: boolean;
+}) => boolean;
diff --git a/app/lib/src/isScalar.js b/app/lib/src/isScalar.js
new file mode 100644
index 0000000..e96d607
--- /dev/null
+++ b/app/lib/src/isScalar.js
@@ -0,0 +1,91 @@
+"use strict";
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./index"));
+var util_1 = require("./helpers/util");
+exports.isScalar = function (schema, params) {
+    if (params === void 0) { params = { root: true }; }
+    var def = schema._def;
+    var returnValue = false;
+    switch (def.t) {
+        case z.ZodTypes.string:
+            returnValue = true;
+            break;
+        case z.ZodTypes.number:
+            returnValue = true;
+            break;
+        case z.ZodTypes.bigint:
+            returnValue = true;
+            break;
+        case z.ZodTypes.boolean:
+            returnValue = true;
+            break;
+        case z.ZodTypes.undefined:
+            returnValue = true;
+            break;
+        case z.ZodTypes.null:
+            returnValue = true;
+            break;
+        case z.ZodTypes.any:
+            returnValue = false;
+            break;
+        case z.ZodTypes.unknown:
+            returnValue = false;
+            break;
+        case z.ZodTypes.void:
+            returnValue = false;
+            break;
+        case z.ZodTypes.array:
+            if (params.root === false)
+                return false;
+            returnValue = exports.isScalar(def.type, { root: false });
+            break;
+        case z.ZodTypes.object:
+            returnValue = false;
+            break;
+        case z.ZodTypes.union:
+            returnValue = def.options.every(function (x) { return exports.isScalar(x); });
+            break;
+        case z.ZodTypes.intersection:
+            returnValue = exports.isScalar(def.left) && exports.isScalar(def.right);
+            break;
+        case z.ZodTypes.tuple:
+            returnValue = false;
+            break;
+        case z.ZodTypes.lazy:
+            returnValue = exports.isScalar(def.getter());
+            break;
+        case z.ZodTypes.literal:
+            returnValue = true;
+            break;
+        case z.ZodTypes.enum:
+            returnValue = true;
+            break;
+        case z.ZodTypes.nativeEnum:
+            returnValue = true;
+            break;
+        case z.ZodTypes.function:
+            returnValue = false;
+            break;
+        case z.ZodTypes.record:
+            returnValue = false;
+            break;
+        case z.ZodTypes.date:
+            returnValue = true;
+            break;
+        case z.ZodTypes.promise:
+            returnValue = false;
+            break;
+        default:
+            util_1.util.assertNever(def);
+        // returnValue = false; break;
+    }
+    return returnValue;
+};
+//# sourceMappingURL=isScalar.js.map
\ No newline at end of file
diff --git a/app/lib/src/isScalar.js.map b/app/lib/src/isScalar.js.map
new file mode 100644
index 0000000..c902062
--- /dev/null
+++ b/app/lib/src/isScalar.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"isScalar.js","sourceRoot":"","sources":["../../src/isScalar.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/lib/src/parser.d.ts b/app/lib/src/parser.d.ts
new file mode 100644
index 0000000..c7f0286
--- /dev/null
+++ b/app/lib/src/parser.d.ts
@@ -0,0 +1,43 @@
+import * as z from './types/base';
+import { ZodError, ZodSuberrorOptionalMessage } from './ZodError';
+import { util } from './helpers/util';
+import { ZodErrorMap } from './defaultErrorMap';
+export declare type ParseParams = {
+    seen?: {
+        schema: any;
+        objects: {
+            object: any;
+            visits: number;
+            inProgress: number;
+            error?: ZodError;
+        }[];
+    }[];
+    path?: (string | number)[];
+    errorMap?: ZodErrorMap;
+};
+export declare const getParsedType: (data: any) => "number" | "string" | "nan" | "integer" | "boolean" | "date" | "bigint" | "symbol" | "function" | "undefined" | "null" | "array" | "object" | "unknown" | "promise" | "void";
+export declare const ZodParsedType: {
+    number: "number";
+    string: "string";
+    nan: "nan";
+    integer: "integer";
+    boolean: "boolean";
+    date: "date";
+    bigint: "bigint";
+    symbol: "symbol";
+    function: "function";
+    undefined: "undefined";
+    null: "null";
+    array: "array";
+    object: "object";
+    unknown: "unknown";
+    promise: "promise";
+    void: "void";
+};
+export declare type ZodParsedType = keyof typeof ZodParsedType;
+declare type stripPath<T extends object> = T extends any ? util.OmitKeys<T, 'path'> : never;
+export declare type MakeErrorData = stripPath<ZodSuberrorOptionalMessage> & {
+    path?: (string | number)[];
+};
+export declare const ZodParser: (schemaDef: z.ZodTypeDef) => (obj: any, baseParams?: ParseParams) => any;
+export {};
diff --git a/app/lib/src/parser.js b/app/lib/src/parser.js
new file mode 100644
index 0000000..e7d4cc5
--- /dev/null
+++ b/app/lib/src/parser.js
@@ -0,0 +1,500 @@
+"use strict";
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __generator = (this && this.__generator) || function (thisArg, body) {
+    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+    function verb(n) { return function (v) { return step([n, v]); }; }
+    function step(op) {
+        if (f) throw new TypeError("Generator is already executing.");
+        while (_) try {
+            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+            if (y = 0, t) op = [op[0] & 2, t.value];
+            switch (op[0]) {
+                case 0: case 1: t = op; break;
+                case 4: _.label++; return { value: op[1], done: false };
+                case 5: _.label++; y = op[1]; op = [0]; continue;
+                case 7: op = _.ops.pop(); _.trys.pop(); continue;
+                default:
+                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+                    if (t[2]) _.ops.pop();
+                    _.trys.pop(); continue;
+            }
+            op = body.call(thisArg, _);
+        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+    }
+};
+var __rest = (this && this.__rest) || function (s, e) {
+    var t = {};
+    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+        t[p] = s[p];
+    if (s != null && typeof Object.getOwnPropertySymbols === "function")
+        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
+            t[p[i]] = s[p[i]];
+    return t;
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+var _this = this;
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./types/base"));
+var ZodError_1 = require("./ZodError");
+var util_1 = require("./helpers/util");
+var defaultErrorMap_1 = require("./defaultErrorMap");
+var MAX_SEEN_RECURSION_VISITS = 3;
+exports.getParsedType = function (data) {
+    if (typeof data === 'string')
+        return 'string';
+    if (typeof data === 'number') {
+        if (Number.isNaN(data))
+            return 'nan';
+        return 'number';
+    }
+    if (typeof data === 'boolean')
+        return 'boolean';
+    if (typeof data === 'bigint')
+        return 'bigint';
+    if (typeof data === 'symbol')
+        return 'symbol';
+    if (data instanceof Date)
+        return 'date';
+    if (typeof data === 'function')
+        return 'function';
+    if (data === undefined)
+        return 'undefined';
+    if (typeof data === 'undefined')
+        return 'undefined';
+    if (typeof data === 'object') {
+        if (Array.isArray(data))
+            return 'array';
+        if (!data)
+            return 'null';
+        if (data.then && typeof data.then === 'function' && data.catch && typeof data.catch === 'function') {
+            return 'promise';
+        }
+        return 'object';
+    }
+    return 'unknown';
+};
+exports.ZodParsedType = util_1.util.arrayToEnum([
+    'string',
+    'nan',
+    'number',
+    'integer',
+    'boolean',
+    'date',
+    'bigint',
+    'symbol',
+    'function',
+    'undefined',
+    'null',
+    'array',
+    'object',
+    'unknown',
+    'promise',
+    'void',
+]);
+exports.ZodParser = function (schemaDef) { return function (obj, baseParams) {
+    if (baseParams === void 0) { baseParams = { seen: [], errorMap: defaultErrorMap_1.defaultErrorMap, path: [] }; }
+    var params = {
+        seen: baseParams.seen || [],
+        path: baseParams.path || [],
+        errorMap: baseParams.errorMap || defaultErrorMap_1.defaultErrorMap,
+    };
+    var makeError = function (errorData) {
+        var errorArg = __assign({}, errorData, { path: params.path });
+        var ctxArg = { data: obj };
+        var defaultError = defaultErrorMap_1.defaultErrorMap === params.errorMap
+            ? { message: "Invalid value." }
+            : defaultErrorMap_1.defaultErrorMap(errorArg, __assign({}, ctxArg, { defaultError: "Invalid value." }));
+        return __assign({}, errorData, { path: params.path.concat((errorData.path || [])), message: errorData.message || params.errorMap(errorArg, __assign({}, ctxArg, { defaultError: defaultError.message })).message });
+    };
+    var def = schemaDef;
+    var parsedType = exports.getParsedType(obj);
+    var schemaSeen = params.seen.find(function (x) { return x.schema === schemaDef; });
+    var objectSeen;
+    var isPrimitive = typeof obj !== 'object' || obj === null;
+    if (isPrimitive) {
+    }
+    else if (schemaSeen) {
+        objectSeen = schemaSeen.objects.find(function (entry) { return entry.object === obj; });
+        if (objectSeen) {
+            if (objectSeen.inProgress > 0) {
+                if (objectSeen.error) {
+                    throw objectSeen.error;
+                }
+                if (objectSeen.visits >= MAX_SEEN_RECURSION_VISITS) {
+                    return obj;
+                }
+            }
+            objectSeen.visits += 1;
+            objectSeen.inProgress += 1;
+        }
+        else {
+            objectSeen = { object: obj, visits: 1, inProgress: 1 };
+            schemaSeen.objects.push(objectSeen);
+        }
+    }
+    else {
+        objectSeen = { object: obj, visits: 1, inProgress: 1 };
+        params.seen.push({ schema: schemaDef, objects: [objectSeen] });
+    }
+    try {
+        var error_1 = new ZodError_1.ZodError([]);
+        var returnValue = obj;
+        switch (def.t) {
+            case z.ZodTypes.string:
+                if (parsedType !== exports.ZodParsedType.string) {
+                    error_1.addError(makeError({ code: ZodError_1.ZodErrorCode.invalid_type, expected: exports.ZodParsedType.string, received: parsedType }));
+                    throw error_1;
+                }
+                break;
+            case z.ZodTypes.number:
+                if (parsedType !== exports.ZodParsedType.number) {
+                    error_1.addError(makeError({ code: ZodError_1.ZodErrorCode.invalid_type, expected: exports.ZodParsedType.number, received: parsedType }));
+                    throw error_1;
+                }
+                if (Number.isNaN(obj)) {
+                    error_1.addError(makeError({
+                        code: ZodError_1.ZodErrorCode.invalid_type,
+                        expected: exports.ZodParsedType.number,
+                        received: exports.ZodParsedType.nan,
+                    }));
+                    throw error_1;
+                }
+                break;
+            case z.ZodTypes.bigint:
+                if (parsedType !== exports.ZodParsedType.bigint) {
+                    error_1.addError(makeError({ code: ZodError_1.ZodErrorCode.invalid_type, expected: exports.ZodParsedType.number, received: parsedType }));
+                    throw error_1;
+                }
+                break;
+            case z.ZodTypes.boolean:
+                if (parsedType !== exports.ZodParsedType.boolean) {
+                    error_1.addError(makeError({ code: ZodError_1.ZodErrorCode.invalid_type, expected: exports.ZodParsedType.boolean, received: parsedType }));
+                    throw error_1;
+                }
+                break;
+            case z.ZodTypes.undefined:
+                if (parsedType !== exports.ZodParsedType.undefined) {
+                    error_1.addError(makeError({ code: ZodError_1.ZodErrorCode.invalid_type, expected: exports.ZodParsedType.undefined, received: parsedType }));
+                    throw error_1;
+                }
+                break;
+            case z.ZodTypes.null:
+                if (parsedType !== exports.ZodParsedType.null) {
+                    error_1.addError(makeError({ code: ZodError_1.ZodErrorCode.invalid_type, expected: exports.ZodParsedType.null, received: parsedType }));
+                    throw error_1;
+                }
+                break;
+            case z.ZodTypes.any:
+                break;
+            case z.ZodTypes.unknown:
+                break;
+            case z.ZodTypes.void:
+                if (parsedType !== exports.ZodParsedType.undefined && parsedType !== exports.ZodParsedType.null) {
+                    error_1.addError(makeError({ code: ZodError_1.ZodErrorCode.invalid_type, expected: exports.ZodParsedType.void, received: parsedType }));
+                    throw error_1;
+                }
+                break;
+            case z.ZodTypes.array:
+                if (parsedType !== exports.ZodParsedType.array) {
+                    error_1.addError(makeError({ code: ZodError_1.ZodErrorCode.invalid_type, expected: exports.ZodParsedType.array, received: parsedType }));
+                    throw error_1;
+                }
+                var data = obj;
+                if (def.nonempty === true && obj.length === 0) {
+                    error_1.addError(makeError({ code: ZodError_1.ZodErrorCode.nonempty_array_is_empty }));
+                    throw error_1;
+                }
+                data.map(function (item, i) {
+                    try {
+                        var parsedItem = def.type.parse(item, __assign({}, params, { path: params.path.concat([i]) }));
+                        return parsedItem;
+                    }
+                    catch (err) {
+                        var zerr = err;
+                        error_1.addErrors(zerr.errors);
+                    }
+                });
+                if (!error_1.isEmpty) {
+                    throw error_1;
+                }
+                break;
+            case z.ZodTypes.object:
+                if (parsedType !== exports.ZodParsedType.object) {
+                    error_1.addError(makeError({ code: ZodError_1.ZodErrorCode.invalid_type, expected: exports.ZodParsedType.object, received: parsedType }));
+                    throw error_1;
+                }
+                var shape = def.shape();
+                if (def.params.strict) {
+                    var shapeKeys_1 = Object.keys(shape);
+                    var objKeys = Object.keys(obj);
+                    var extraKeys = objKeys.filter(function (k) { return shapeKeys_1.indexOf(k) === -1; });
+                    if (extraKeys.length) {
+                        error_1.addError(makeError({ code: ZodError_1.ZodErrorCode.unrecognized_keys, keys: extraKeys }));
+                    }
+                }
+                for (var key in shape) {
+                    try {
+                        def.shape()[key].parse(obj[key], __assign({}, params, { path: params.path.concat([key]) }));
+                    }
+                    catch (err) {
+                        var zerr = err;
+                        error_1.addErrors(zerr.errors);
+                    }
+                }
+                break;
+            case z.ZodTypes.union:
+                var isValid = false;
+                var unionErrors = [];
+                for (var _i = 0, _a = def.options; _i < _a.length; _i++) {
+                    var option = _a[_i];
+                    try {
+                        option.parse(obj, params);
+                        isValid = true;
+                    }
+                    catch (err) {
+                        unionErrors.push(err);
+                    }
+                }
+                if (!isValid) {
+                    var filteredErrors = unionErrors.filter(function (err) {
+                        return err.errors[0].code !== 'invalid_type';
+                    });
+                    if (filteredErrors.length === 1) {
+                        error_1.addErrors(filteredErrors[0].errors);
+                    }
+                    else {
+                        error_1.addError(makeError({
+                            code: ZodError_1.ZodErrorCode.invalid_union,
+                            unionErrors: unionErrors,
+                        }));
+                    }
+                }
+                break;
+            case z.ZodTypes.intersection:
+                try {
+                    def.left.parse(obj, params);
+                }
+                catch (err) {
+                    error_1.addErrors(err.errors);
+                }
+                try {
+                    def.right.parse(obj, params);
+                }
+                catch (err) {
+                    error_1.addErrors(err.errors);
+                }
+                break;
+            case z.ZodTypes.tuple:
+                if (parsedType !== exports.ZodParsedType.array) {
+                    error_1.addError(makeError({ code: ZodError_1.ZodErrorCode.invalid_type, expected: exports.ZodParsedType.array, received: parsedType }));
+                    throw error_1;
+                }
+                if (obj.length > def.items.length) {
+                    error_1.addError(makeError({ code: ZodError_1.ZodErrorCode.too_big, maximum: def.items.length, inclusive: true, type: 'array' }));
+                }
+                else if (obj.length < def.items.length) {
+                    error_1.addError(makeError({ code: ZodError_1.ZodErrorCode.too_small, minimum: def.items.length, inclusive: true, type: 'array' }));
+                }
+                var parsedTuple = [];
+                var tupleData = obj;
+                for (var index in tupleData) {
+                    var item = tupleData[index];
+                    var itemParser = def.items[index];
+                    try {
+                        parsedTuple.push(itemParser.parse(item, __assign({}, params, { path: params.path.concat([index]) })));
+                    }
+                    catch (err) {
+                        error_1.addErrors(err.errors);
+                    }
+                }
+                break;
+            case z.ZodTypes.lazy:
+                var lazySchema = def.getter();
+                lazySchema.parse(obj, params);
+                break;
+            case z.ZodTypes.literal:
+                if (obj !== def.value) {
+                    error_1.addError(makeError({ code: ZodError_1.ZodErrorCode.invalid_literal_value, expected: def.value }));
+                }
+                break;
+            case z.ZodTypes.enum:
+                if (def.values.indexOf(obj) === -1) {
+                    error_1.addError(makeError({
+                        code: ZodError_1.ZodErrorCode.invalid_enum_value,
+                        options: def.values,
+                    }));
+                }
+                break;
+            case z.ZodTypes.nativeEnum:
+                if (util_1.util.getValidEnumValues(def.values).indexOf(obj) === -1) {
+                    error_1.addError(makeError({
+                        code: ZodError_1.ZodErrorCode.invalid_enum_value,
+                        options: Object.values(def.values),
+                    }));
+                }
+                break;
+            case z.ZodTypes.function:
+                if (parsedType !== exports.ZodParsedType.function) {
+                    error_1.addError(makeError({
+                        code: ZodError_1.ZodErrorCode.invalid_type,
+                        expected: exports.ZodParsedType.function,
+                        received: parsedType,
+                    }));
+                    throw error_1;
+                }
+                var validatedFunc = function () {
+                    var args = [];
+                    for (var _i = 0; _i < arguments.length; _i++) {
+                        args[_i] = arguments[_i];
+                    }
+                    try {
+                        def.args.parse(args);
+                    }
+                    catch (err) {
+                        if (err instanceof ZodError_1.ZodError) {
+                            var argsError = new ZodError_1.ZodError([]);
+                            argsError.addError(makeError({
+                                code: ZodError_1.ZodErrorCode.invalid_arguments,
+                                argumentsError: err,
+                            }));
+                            throw argsError;
+                        }
+                        throw err;
+                    }
+                    var result = obj.apply(void 0, args);
+                    try {
+                        return def.returns.parse(result);
+                    }
+                    catch (err) {
+                        if (err instanceof ZodError_1.ZodError) {
+                            var returnsError = new ZodError_1.ZodError([]);
+                            returnsError.addError(makeError({
+                                code: ZodError_1.ZodErrorCode.invalid_return_type,
+                                returnTypeError: err,
+                            }));
+                            throw returnsError;
+                        }
+                        throw err;
+                    }
+                };
+                return validatedFunc;
+            case z.ZodTypes.record:
+                if (parsedType !== exports.ZodParsedType.object) {
+                    error_1.addError(makeError({
+                        code: ZodError_1.ZodErrorCode.invalid_type,
+                        expected: exports.ZodParsedType.object,
+                        received: parsedType,
+                    }));
+                    throw error_1;
+                }
+                for (var key in obj) {
+                    try {
+                        def.valueType.parse(obj[key], __assign({}, params, { path: params.path.concat([key]) }));
+                    }
+                    catch (err) {
+                        error_1.addErrors(err.errors);
+                    }
+                }
+                break;
+            case z.ZodTypes.date:
+                if (!(obj instanceof Date)) {
+                    error_1.addError(makeError({
+                        code: ZodError_1.ZodErrorCode.invalid_type,
+                        expected: exports.ZodParsedType.date,
+                        received: parsedType,
+                    }));
+                    throw error_1;
+                }
+                if (isNaN(obj.getTime())) {
+                    console.log('NAN');
+                    error_1.addError(makeError({
+                        code: ZodError_1.ZodErrorCode.invalid_date,
+                    }));
+                    throw error_1;
+                }
+                break;
+            case z.ZodTypes.promise:
+                if (parsedType !== exports.ZodParsedType.promise) {
+                    error_1.addError(makeError({
+                        code: ZodError_1.ZodErrorCode.invalid_type,
+                        expected: exports.ZodParsedType.promise,
+                        received: parsedType,
+                    }));
+                    throw error_1;
+                }
+                return new Promise(function (res, rej) { return __awaiter(_this, void 0, void 0, function () {
+                    var objValue, parsed;
+                    return __generator(this, function (_a) {
+                        switch (_a.label) {
+                            case 0: return [4 /*yield*/, obj];
+                            case 1:
+                                objValue = _a.sent();
+                                try {
+                                    parsed = def.type.parse(objValue, params);
+                                    res(parsed);
+                                }
+                                catch (err) {
+                                    rej(err);
+                                }
+                                return [2 /*return*/];
+                        }
+                    });
+                }); });
+            default:
+                util_1.util.assertNever(def);
+        }
+        var customChecks = def.checks || [];
+        for (var _b = 0, customChecks_1 = customChecks; _b < customChecks_1.length; _b++) {
+            var check = customChecks_1[_b];
+            if (!check.check(returnValue)) {
+                var checkMethod = check.check, noMethodCheck = __rest(check, ["check"]);
+                error_1.addError(makeError(noMethodCheck));
+            }
+        }
+        if (!error_1.isEmpty) {
+            throw error_1;
+        }
+        return returnValue;
+    }
+    catch (err) {
+        if (objectSeen && err instanceof ZodError_1.ZodError) {
+            objectSeen.error = err;
+        }
+        throw err;
+    }
+    finally {
+        if (objectSeen) {
+            objectSeen.inProgress -= 1;
+        }
+    }
+}; };
+//# sourceMappingURL=parser.js.map
\ No newline at end of file
diff --git a/app/lib/src/parser.js.map b/app/lib/src/parser.js.map
new file mode 100644
index 0000000..e9a17d1
--- /dev/null
+++ b/app/lib/src/parser.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/lib/src/playground.d.ts b/app/lib/src/playground.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/app/lib/src/playground.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/app/lib/src/playground.js b/app/lib/src/playground.js
new file mode 100644
index 0000000..d4fbb35
--- /dev/null
+++ b/app/lib/src/playground.js
@@ -0,0 +1,30 @@
+"use strict";
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./index"));
+// const myType = z.object({ name: z.string() });
+var run = function () {
+    try {
+        z.string().parse(134);
+    }
+    catch (err) {
+        console.log(err);
+    }
+    // const t1 = z.object({
+    //   name: z.string(),
+    //   obj: z.object({}),
+    //   arrayarray: z.array(z.array(z.string())),
+    // });
+    // const i1 = t1.primitives();
+    // type i1 = z.infer<typeof i1>;
+    // const f1: util.AssertEqual<i1, { name: string }> = true;
+    // const i1 = t1.primitives();
+};
+run();
+//# sourceMappingURL=playground.js.map
\ No newline at end of file
diff --git a/app/lib/src/playground.js.map b/app/lib/src/playground.js.map
new file mode 100644
index 0000000..75ac01c
--- /dev/null
+++ b/app/lib/src/playground.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"playground.js","sourceRoot":"","sources":["../../src/playground.ts"],"names":[],"mappings":";;;;;;;;;AAAA,yCAA6B;AAE7B,iDAAiD;AAEjD,IAAM,GAAG,GAAG;IACV,IAAI;QACF,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACvB;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAClB;IACD,wBAAwB;IACxB,sBAAsB;IACtB,uBAAuB;IACvB,8CAA8C;IAC9C,MAAM;IACN,8BAA8B;IAC9B,gCAAgC;IAChC,2DAA2D;IAC3D,8BAA8B;AAChC,CAAC,CAAC;AAEF,GAAG,EAAE,CAAC"}
\ No newline at end of file
diff --git a/app/lib/src/switcher.d.ts b/app/lib/src/switcher.d.ts
new file mode 100644
index 0000000..23850d2
--- /dev/null
+++ b/app/lib/src/switcher.d.ts
@@ -0,0 +1,2 @@
+import * as z from './index';
+export declare const visitor: (schema: z.ZodType<any, any>) => void;
diff --git a/app/lib/src/switcher.js b/app/lib/src/switcher.js
new file mode 100644
index 0000000..bbb0996
--- /dev/null
+++ b/app/lib/src/switcher.js
@@ -0,0 +1,63 @@
+"use strict";
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./index"));
+var util_1 = require("./helpers/util");
+exports.visitor = function (schema) {
+    var def = schema._def;
+    switch (def.t) {
+        case z.ZodTypes.string:
+            break;
+        case z.ZodTypes.number:
+            break;
+        case z.ZodTypes.bigint:
+            break;
+        case z.ZodTypes.boolean:
+            break;
+        case z.ZodTypes.undefined:
+            break;
+        case z.ZodTypes.null:
+            break;
+        case z.ZodTypes.any:
+            break;
+        case z.ZodTypes.unknown:
+            break;
+        case z.ZodTypes.void:
+            break;
+        case z.ZodTypes.array:
+            break;
+        case z.ZodTypes.object:
+            break;
+        case z.ZodTypes.union:
+            break;
+        case z.ZodTypes.intersection:
+            break;
+        case z.ZodTypes.tuple:
+            break;
+        case z.ZodTypes.lazy:
+            break;
+        case z.ZodTypes.literal:
+            break;
+        case z.ZodTypes.enum:
+            break;
+        case z.ZodTypes.nativeEnum:
+            break;
+        case z.ZodTypes.function:
+            break;
+        case z.ZodTypes.record:
+            break;
+        case z.ZodTypes.date:
+            break;
+        case z.ZodTypes.promise:
+            break;
+        default:
+            util_1.util.assertNever(def);
+    }
+};
+//# sourceMappingURL=switcher.js.map
\ No newline at end of file
diff --git a/app/lib/src/switcher.js.map b/app/lib/src/switcher.js.map
new file mode 100644
index 0000000..df06b27
--- /dev/null
+++ b/app/lib/src/switcher.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"switcher.js","sourceRoot":"","sources":["../../src/switcher.ts"],"names":[],"mappings":";;;;;;;;;AAAA,yCAA6B;AAC7B,uCAAsC;AAEzB,QAAA,OAAO,GAAG,UAAC,MAA2B;IACjD,IAAM,GAAG,GAAG,MAAM,CAAC,IAAgB,CAAC;IACpC,QAAQ,GAAG,CAAC,CAAC,EAAE;QACb,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM;YACpB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM;YACpB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM;YACpB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO;YACrB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,SAAS;YACvB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI;YAClB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG;YACjB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO;YACrB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI;YAClB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK;YACnB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM;YACpB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK;YACnB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,YAAY;YAC1B,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK;YACnB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI;YAClB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO;YACrB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI;YAClB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU;YACxB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ;YACtB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM;YACpB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI;YAClB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO;YACrB,MAAM;QACR;YACE,WAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;KACzB;AACH,CAAC,CAAC"}
\ No newline at end of file
diff --git a/app/lib/src/types/any.d.ts b/app/lib/src/types/any.d.ts
new file mode 100644
index 0000000..abf130c
--- /dev/null
+++ b/app/lib/src/types/any.d.ts
@@ -0,0 +1,8 @@
+import * as z from './base';
+export interface ZodAnyDef extends z.ZodTypeDef {
+    t: z.ZodTypes.any;
+}
+export declare class ZodAny extends z.ZodType<any, ZodAnyDef> {
+    toJSON: () => ZodAnyDef;
+    static create: () => ZodAny;
+}
diff --git a/app/lib/src/types/any.js b/app/lib/src/types/any.js
new file mode 100644
index 0000000..1dbb9ed
--- /dev/null
+++ b/app/lib/src/types/any.js
@@ -0,0 +1,41 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var ZodAny = /** @class */ (function (_super) {
+    __extends(ZodAny, _super);
+    function ZodAny() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.toJSON = function () { return _this._def; };
+        return _this;
+    }
+    ZodAny.create = function () {
+        return new ZodAny({
+            t: z.ZodTypes.any,
+        });
+    };
+    return ZodAny;
+}(z.ZodType));
+exports.ZodAny = ZodAny;
+//# sourceMappingURL=any.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/any.js.map b/app/lib/src/types/any.js.map
new file mode 100644
index 0000000..4e17486
--- /dev/null
+++ b/app/lib/src/types/any.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"any.js","sourceRoot":"","sources":["../../../src/types/any.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAS5B;IAA4B,0BAAyB;IAArD;QAAA,qEAUC;QATC,6GAA6G;QAC7G,oGAAoG;QACpG,YAAM,GAAG,cAAM,OAAA,KAAI,CAAC,IAAI,EAAT,CAAS,CAAC;;IAO3B,CAAC;IALQ,aAAM,GAAG;QACd,OAAO,IAAI,MAAM,CAAC;YAChB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG;SAClB,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,aAAC;CAAA,AAVD,CAA4B,CAAC,CAAC,OAAO,GAUpC;AAVY,wBAAM"}
\ No newline at end of file
diff --git a/app/lib/src/types/array.d.ts b/app/lib/src/types/array.d.ts
new file mode 100644
index 0000000..bca0b59
--- /dev/null
+++ b/app/lib/src/types/array.d.ts
@@ -0,0 +1,36 @@
+import * as z from './base';
+export interface ZodArrayDef<T extends z.ZodTypeAny = z.ZodTypeAny> extends z.ZodTypeDef {
+    t: z.ZodTypes.array;
+    type: T;
+    nonempty: boolean;
+}
+export declare class ZodArray<T extends z.ZodTypeAny> extends z.ZodType<T['_type'][], ZodArrayDef<T>> {
+    toJSON: () => {
+        t: z.ZodTypes.array;
+        nonempty: boolean;
+        type: object;
+    };
+    readonly element: T;
+    min: (minLength: number, message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    max: (maxLength: number, message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    length: (len: number, message?: string | undefined) => this;
+    nonempty: () => ZodNonEmptyArray<T>;
+    static create: <T_1 extends z.ZodType<any, any>>(schema: T_1) => ZodArray<T_1>;
+}
+export declare class ZodNonEmptyArray<T extends z.ZodTypeAny> extends z.ZodType<[T['_type'], ...T['_type'][]], ZodArrayDef<T>> {
+    toJSON: () => {
+        t: z.ZodTypes.array;
+        type: object;
+    };
+    min: (minLength: number, message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    max: (maxLength: number, message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    length: (len: number, message?: string | undefined) => this;
+}
diff --git a/app/lib/src/types/array.js b/app/lib/src/types/array.js
new file mode 100644
index 0000000..56bce2f
--- /dev/null
+++ b/app/lib/src/types/array.js
@@ -0,0 +1,105 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+// import { ZodUndefined } from './undefined';
+// import { ZodNull } from './null';
+// import { ZodUnion } from './union';
+var ZodError_1 = require("../ZodError");
+var ZodArray = /** @class */ (function (_super) {
+    __extends(ZodArray, _super);
+    function ZodArray() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.toJSON = function () {
+            return {
+                t: _this._def.t,
+                nonempty: _this._def.nonempty,
+                type: _this._def.type.toJSON(),
+            };
+        };
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.min = function (minLength, message) {
+            return _this._refinement(__assign({ check: function (data) { return data.length >= minLength; }, code: ZodError_1.ZodErrorCode.too_small, type: 'array', inclusive: true, minimum: minLength }, (typeof message === 'string' ? { message: message } : message)));
+        };
+        _this.max = function (maxLength, message) {
+            return _this._refinement(__assign({ check: function (data) { return data.length <= maxLength; }, code: ZodError_1.ZodErrorCode.too_big, type: 'array', inclusive: true, maximum: maxLength }, (typeof message === 'string' ? { message: message } : message)));
+        };
+        _this.length = function (len, message) { return _this.min(len, { message: message }).max(len, { message: message }); };
+        _this.nonempty = function () {
+            return new ZodNonEmptyArray(__assign({}, _this._def, { nonempty: true }));
+        };
+        return _this;
+    }
+    Object.defineProperty(ZodArray.prototype, "element", {
+        get: function () {
+            return this._def.type;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    ZodArray.create = function (schema) {
+        return new ZodArray({
+            t: z.ZodTypes.array,
+            type: schema,
+            nonempty: false,
+        });
+    };
+    return ZodArray;
+}(z.ZodType));
+exports.ZodArray = ZodArray;
+var ZodNonEmptyArray = /** @class */ (function (_super) {
+    __extends(ZodNonEmptyArray, _super);
+    function ZodNonEmptyArray() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.toJSON = function () {
+            return {
+                t: _this._def.t,
+                type: _this._def.type.toJSON(),
+            };
+        };
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.min = function (minLength, message) {
+            return _this._refinement(__assign({ check: function (data) { return data.length >= minLength; }, code: ZodError_1.ZodErrorCode.too_small, minimum: minLength, type: 'array', inclusive: true }, (typeof message === 'string' ? { message: message } : message)));
+        };
+        _this.max = function (maxLength, message) {
+            return _this._refinement(__assign({ check: function (data) { return data.length >= maxLength; }, code: ZodError_1.ZodErrorCode.too_big, maximum: maxLength, type: 'array', inclusive: true }, (typeof message === 'string' ? { message: message } : message)));
+        };
+        _this.length = function (len, message) { return _this.min(len, { message: message }).max(len, { message: message }); };
+        return _this;
+    }
+    return ZodNonEmptyArray;
+}(z.ZodType));
+exports.ZodNonEmptyArray = ZodNonEmptyArray;
+//# sourceMappingURL=array.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/array.js.map b/app/lib/src/types/array.js.map
new file mode 100644
index 0000000..141db24
--- /dev/null
+++ b/app/lib/src/types/array.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"array.js","sourceRoot":"","sources":["../../../src/types/array.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/lib/src/types/base.d.ts b/app/lib/src/types/base.d.ts
new file mode 100644
index 0000000..86edd9f
--- /dev/null
+++ b/app/lib/src/types/base.d.ts
@@ -0,0 +1,77 @@
+import { ParseParams, MakeErrorData } from '../parser';
+import { ZodArray, ZodUnion, ZodNull, ZodUndefined, ZodError } from '../index';
+export declare enum ZodTypes {
+    string = "string",
+    number = "number",
+    bigint = "bigint",
+    boolean = "boolean",
+    date = "date",
+    undefined = "undefined",
+    null = "null",
+    array = "array",
+    object = "object",
+    union = "union",
+    intersection = "intersection",
+    tuple = "tuple",
+    record = "record",
+    function = "function",
+    lazy = "lazy",
+    literal = "literal",
+    enum = "enum",
+    nativeEnum = "nativeEnum",
+    promise = "promise",
+    any = "any",
+    unknown = "unknown",
+    void = "void"
+}
+export declare type ZodTypeAny = ZodType<any, any>;
+export declare type ZodRawShape = {
+    [k: string]: ZodTypeAny;
+};
+declare type InternalCheck<T> = {
+    check: (arg: T) => any;
+} & MakeErrorData;
+declare type Check<T> = {
+    check: (arg: T) => any;
+    path?: (string | number)[];
+    message?: string;
+    params?: {
+        [k: string]: any;
+    };
+};
+export interface ZodTypeDef {
+    t: ZodTypes;
+    checks?: InternalCheck<any>[];
+    accepts?: ZodType<any, any>;
+}
+export declare type TypeOf<T extends {
+    _type: any;
+}> = T['_type'];
+export declare type Infer<T extends {
+    _type: any;
+}> = T['_type'];
+export declare abstract class ZodType<Type, Def extends ZodTypeDef = ZodTypeDef> {
+    readonly _type: Type;
+    readonly _def: Def;
+    parse: (x: Type | unknown, params?: ParseParams) => Type;
+    safeParse: (x: Type | unknown, params?: ParseParams) => {
+        success: true;
+        data: Type;
+    } | {
+        success: false;
+        error: ZodError;
+    };
+    parseAsync: (x: Type | unknown, params?: ParseParams) => Promise<Type>;
+    is(u: Type): u is Type;
+    check(u: Type | unknown): u is Type;
+    refine: <Func extends (arg: Type) => any>(check: Func, message?: string | Pick<Check<Type>, "path" | "message" | "params">) => this;
+    refinement: (refinement: Check<Type>) => this;
+    protected _refinement: (refinement: InternalCheck<Type>) => this;
+    constructor(def: Def);
+    abstract toJSON: () => object;
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+    array: () => ZodArray<this>;
+    or: <U extends ZodType<any>>(arg: U) => ZodUnion<[this, U]>;
+}
+export {};
diff --git a/app/lib/src/types/base.js b/app/lib/src/types/base.js
new file mode 100644
index 0000000..81b96dc
--- /dev/null
+++ b/app/lib/src/types/base.js
@@ -0,0 +1,117 @@
+"use strict";
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var parser_1 = require("../parser");
+var index_1 = require("../index");
+var ZodTypes;
+(function (ZodTypes) {
+    ZodTypes["string"] = "string";
+    ZodTypes["number"] = "number";
+    ZodTypes["bigint"] = "bigint";
+    ZodTypes["boolean"] = "boolean";
+    ZodTypes["date"] = "date";
+    ZodTypes["undefined"] = "undefined";
+    ZodTypes["null"] = "null";
+    ZodTypes["array"] = "array";
+    ZodTypes["object"] = "object";
+    ZodTypes["union"] = "union";
+    ZodTypes["intersection"] = "intersection";
+    ZodTypes["tuple"] = "tuple";
+    ZodTypes["record"] = "record";
+    ZodTypes["function"] = "function";
+    ZodTypes["lazy"] = "lazy";
+    ZodTypes["literal"] = "literal";
+    ZodTypes["enum"] = "enum";
+    ZodTypes["nativeEnum"] = "nativeEnum";
+    ZodTypes["promise"] = "promise";
+    ZodTypes["any"] = "any";
+    ZodTypes["unknown"] = "unknown";
+    ZodTypes["void"] = "void";
+})(ZodTypes = exports.ZodTypes || (exports.ZodTypes = {}));
+var ZodType = /** @class */ (function () {
+    function ZodType(def) {
+        var _this = this;
+        this.safeParse = function (data, params) {
+            try {
+                var parsed = _this.parse(data, params);
+                return {
+                    success: true,
+                    data: parsed,
+                };
+            }
+            catch (err) {
+                if (err instanceof index_1.ZodError) {
+                    return {
+                        success: false,
+                        error: err,
+                    };
+                }
+                throw err;
+            }
+        };
+        this.parseAsync = function (value, params) {
+            return new Promise(function (res, rej) {
+                try {
+                    var parsed = _this.parse(value, params);
+                    return res(parsed);
+                }
+                catch (err) {
+                    return rej(err);
+                }
+            });
+        };
+        this.refine = function (check, message) {
+            if (message === void 0) { message = 'Invalid value.'; }
+            if (typeof message === 'string') {
+                return _this.refinement({ check: check, message: message });
+            }
+            return _this.refinement(__assign({ check: check }, message));
+        };
+        this.refinement = function (refinement) {
+            return _this._refinement(__assign({ code: index_1.ZodErrorCode.custom_error }, refinement));
+        };
+        this._refinement = function (refinement) {
+            return new _this.constructor(__assign({}, _this._def, { checks: (_this._def.checks || []).concat([refinement]) }));
+        };
+        //  abstract // opt optional: () => any;
+        this.optional = function () { return index_1.ZodUnion.create([_this, index_1.ZodUndefined.create()]); };
+        this.nullable = function () { return index_1.ZodUnion.create([_this, index_1.ZodNull.create()]); };
+        this.array = function () { return index_1.ZodArray.create(_this); };
+        this.or = function (arg) {
+            return index_1.ZodUnion.create([_this, arg]);
+        };
+        this._def = def;
+        this.parse = parser_1.ZodParser(def);
+    }
+    ZodType.prototype.is = function (u) {
+        try {
+            this.parse(u);
+            return true;
+        }
+        catch (err) {
+            return false;
+        }
+    };
+    ZodType.prototype.check = function (u) {
+        try {
+            this.parse(u);
+            return true;
+        }
+        catch (err) {
+            return false;
+        }
+    };
+    return ZodType;
+}());
+exports.ZodType = ZodType;
+//# sourceMappingURL=base.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/base.js.map b/app/lib/src/types/base.js.map
new file mode 100644
index 0000000..37fa319
--- /dev/null
+++ b/app/lib/src/types/base.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/types/base.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/lib/src/types/bigint.d.ts b/app/lib/src/types/bigint.d.ts
new file mode 100644
index 0000000..44d78ed
--- /dev/null
+++ b/app/lib/src/types/bigint.d.ts
@@ -0,0 +1,8 @@
+import * as z from './base';
+export interface ZodBigIntDef extends z.ZodTypeDef {
+    t: z.ZodTypes.bigint;
+}
+export declare class ZodBigInt extends z.ZodType<bigint, ZodBigIntDef> {
+    toJSON: () => ZodBigIntDef;
+    static create: () => ZodBigInt;
+}
diff --git a/app/lib/src/types/bigint.js b/app/lib/src/types/bigint.js
new file mode 100644
index 0000000..d79ba86
--- /dev/null
+++ b/app/lib/src/types/bigint.js
@@ -0,0 +1,41 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var ZodBigInt = /** @class */ (function (_super) {
+    __extends(ZodBigInt, _super);
+    function ZodBigInt() {
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.toJSON = function () { return _this._def; };
+        return _this;
+    }
+    ZodBigInt.create = function () {
+        return new ZodBigInt({
+            t: z.ZodTypes.bigint,
+        });
+    };
+    return ZodBigInt;
+}(z.ZodType));
+exports.ZodBigInt = ZodBigInt;
+//# sourceMappingURL=bigint.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/bigint.js.map b/app/lib/src/types/bigint.js.map
new file mode 100644
index 0000000..048787f
--- /dev/null
+++ b/app/lib/src/types/bigint.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"bigint.js","sourceRoot":"","sources":["../../../src/types/bigint.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAS5B;IAA+B,6BAA+B;IAA9D;QACE,6GAA6G;QAD/G,qEAYC;QATC,oGAAoG;QAEpG,YAAM,GAAG,cAAM,OAAA,KAAI,CAAC,IAAI,EAAT,CAAS,CAAC;;IAO3B,CAAC;IALQ,gBAAM,GAAG;QACd,OAAO,IAAI,SAAS,CAAC;YACnB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM;SACrB,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,gBAAC;CAAA,AAZD,CAA+B,CAAC,CAAC,OAAO,GAYvC;AAZY,8BAAS"}
\ No newline at end of file
diff --git a/app/lib/src/types/boolean.d.ts b/app/lib/src/types/boolean.d.ts
new file mode 100644
index 0000000..6cef9d3
--- /dev/null
+++ b/app/lib/src/types/boolean.d.ts
@@ -0,0 +1,8 @@
+import * as z from './base';
+export interface ZodBooleanDef extends z.ZodTypeDef {
+    t: z.ZodTypes.boolean;
+}
+export declare class ZodBoolean extends z.ZodType<boolean, ZodBooleanDef> {
+    toJSON: () => ZodBooleanDef;
+    static create: () => ZodBoolean;
+}
diff --git a/app/lib/src/types/boolean.js b/app/lib/src/types/boolean.js
new file mode 100644
index 0000000..ceaa47e
--- /dev/null
+++ b/app/lib/src/types/boolean.js
@@ -0,0 +1,41 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var ZodBoolean = /** @class */ (function (_super) {
+    __extends(ZodBoolean, _super);
+    function ZodBoolean() {
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.toJSON = function () { return _this._def; };
+        return _this;
+    }
+    ZodBoolean.create = function () {
+        return new ZodBoolean({
+            t: z.ZodTypes.boolean,
+        });
+    };
+    return ZodBoolean;
+}(z.ZodType));
+exports.ZodBoolean = ZodBoolean;
+//# sourceMappingURL=boolean.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/boolean.js.map b/app/lib/src/types/boolean.js.map
new file mode 100644
index 0000000..2fbf167
--- /dev/null
+++ b/app/lib/src/types/boolean.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../../src/types/boolean.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAS5B;IAAgC,8BAAiC;IAAjE;QACE,6GAA6G;QAD/G,qEAWC;QARC,oGAAoG;QAEpG,YAAM,GAAG,cAAM,OAAA,KAAI,CAAC,IAAI,EAAT,CAAS,CAAC;;IAM3B,CAAC;IALQ,iBAAM,GAAG;QACd,OAAO,IAAI,UAAU,CAAC;YACpB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO;SACtB,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,iBAAC;CAAA,AAXD,CAAgC,CAAC,CAAC,OAAO,GAWxC;AAXY,gCAAU"}
\ No newline at end of file
diff --git a/app/lib/src/types/date.d.ts b/app/lib/src/types/date.d.ts
new file mode 100644
index 0000000..14ec179
--- /dev/null
+++ b/app/lib/src/types/date.d.ts
@@ -0,0 +1,8 @@
+import * as z from './base';
+export interface ZodDateDef extends z.ZodTypeDef {
+    t: z.ZodTypes.date;
+}
+export declare class ZodDate extends z.ZodType<Date, ZodDateDef> {
+    toJSON: () => ZodDateDef;
+    static create: () => ZodDate;
+}
diff --git a/app/lib/src/types/date.js b/app/lib/src/types/date.js
new file mode 100644
index 0000000..cafdd10
--- /dev/null
+++ b/app/lib/src/types/date.js
@@ -0,0 +1,41 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var ZodDate = /** @class */ (function (_super) {
+    __extends(ZodDate, _super);
+    function ZodDate() {
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.toJSON = function () { return _this._def; };
+        return _this;
+    }
+    ZodDate.create = function () {
+        return new ZodDate({
+            t: z.ZodTypes.date,
+        });
+    };
+    return ZodDate;
+}(z.ZodType));
+exports.ZodDate = ZodDate;
+//# sourceMappingURL=date.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/date.js.map b/app/lib/src/types/date.js.map
new file mode 100644
index 0000000..b3e466a
--- /dev/null
+++ b/app/lib/src/types/date.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"date.js","sourceRoot":"","sources":["../../../src/types/date.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAS5B;IAA6B,2BAA2B;IAAxD;QACE,6GAA6G;QAD/G,qEAWC;QARC,oGAAoG;QAEpG,YAAM,GAAG,cAAM,OAAA,KAAI,CAAC,IAAI,EAAT,CAAS,CAAC;;IAM3B,CAAC;IALQ,cAAM,GAAG;QACd,OAAO,IAAI,OAAO,CAAC;YACjB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;SACnB,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,cAAC;CAAA,AAXD,CAA6B,CAAC,CAAC,OAAO,GAWrC;AAXY,0BAAO"}
\ No newline at end of file
diff --git a/app/lib/src/types/enum.d.ts b/app/lib/src/types/enum.d.ts
new file mode 100644
index 0000000..9d73c77
--- /dev/null
+++ b/app/lib/src/types/enum.d.ts
@@ -0,0 +1,20 @@
+import * as z from './base';
+export declare type ArrayKeys = keyof any[];
+export declare type Indices<T> = Exclude<keyof T, ArrayKeys>;
+declare type EnumValues = [string, ...string[]];
+declare type Values<T extends EnumValues> = {
+    [k in T[number]]: k;
+};
+export interface ZodEnumDef<T extends EnumValues = EnumValues> extends z.ZodTypeDef {
+    t: z.ZodTypes.enum;
+    values: T;
+}
+export declare class ZodEnum<T extends [string, ...string[]]> extends z.ZodType<T[number], ZodEnumDef<T>> {
+    toJSON: () => ZodEnumDef<T>;
+    readonly options: T;
+    readonly enum: Values<T>;
+    readonly Values: Values<T>;
+    readonly Enum: Values<T>;
+    static create: <U extends string, T_1 extends [U, ...U[]]>(values: T_1) => ZodEnum<T_1>;
+}
+export {};
diff --git a/app/lib/src/types/enum.js b/app/lib/src/types/enum.js
new file mode 100644
index 0000000..1b2eff2
--- /dev/null
+++ b/app/lib/src/types/enum.js
@@ -0,0 +1,85 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var ZodEnum = /** @class */ (function (_super) {
+    __extends(ZodEnum, _super);
+    function ZodEnum() {
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.toJSON = function () { return _this._def; };
+        return _this;
+    }
+    Object.defineProperty(ZodEnum.prototype, "options", {
+        get: function () {
+            return this._def.values;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(ZodEnum.prototype, "enum", {
+        get: function () {
+            var enumValues = {};
+            for (var _i = 0, _a = this._def.values; _i < _a.length; _i++) {
+                var val = _a[_i];
+                enumValues[val] = val;
+            }
+            return enumValues;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(ZodEnum.prototype, "Values", {
+        get: function () {
+            var enumValues = {};
+            for (var _i = 0, _a = this._def.values; _i < _a.length; _i++) {
+                var val = _a[_i];
+                enumValues[val] = val;
+            }
+            return enumValues;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(ZodEnum.prototype, "Enum", {
+        get: function () {
+            var enumValues = {};
+            for (var _i = 0, _a = this._def.values; _i < _a.length; _i++) {
+                var val = _a[_i];
+                enumValues[val] = val;
+            }
+            return enumValues;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    ZodEnum.create = function (values) {
+        return new ZodEnum({
+            t: z.ZodTypes.enum,
+            values: values,
+        });
+    };
+    return ZodEnum;
+}(z.ZodType));
+exports.ZodEnum = ZodEnum;
+//# sourceMappingURL=enum.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/enum.js.map b/app/lib/src/types/enum.js.map
new file mode 100644
index 0000000..e6ce755
--- /dev/null
+++ b/app/lib/src/types/enum.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"enum.js","sourceRoot":"","sources":["../../../src/types/enum.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAmB5B;IAA8D,2BAAmC;IAAjG;QACE,6GAA6G;QAD/G,qEAyCC;QAtCC,oGAAoG;QAEpG,YAAM,GAAG,cAAM,OAAA,KAAI,CAAC,IAAI,EAAT,CAAS,CAAC;;IAoC3B,CAAC;IAlCC,sBAAI,4BAAO;aAAX;YACE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC1B,CAAC;;;OAAA;IAED,sBAAI,yBAAI;aAAR;YACE,IAAM,UAAU,GAAQ,EAAE,CAAC;YAC3B,KAAkB,UAAgB,EAAhB,KAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAhB,cAAgB,EAAhB,IAAgB,EAAE;gBAA/B,IAAM,GAAG,SAAA;gBACZ,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;aACvB;YACD,OAAO,UAAiB,CAAC;QAC3B,CAAC;;;OAAA;IAED,sBAAI,2BAAM;aAAV;YACE,IAAM,UAAU,GAAQ,EAAE,CAAC;YAC3B,KAAkB,UAAgB,EAAhB,KAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAhB,cAAgB,EAAhB,IAAgB,EAAE;gBAA/B,IAAM,GAAG,SAAA;gBACZ,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;aACvB;YACD,OAAO,UAAiB,CAAC;QAC3B,CAAC;;;OAAA;IAED,sBAAI,yBAAI;aAAR;YACE,IAAM,UAAU,GAAQ,EAAE,CAAC;YAC3B,KAAkB,UAAgB,EAAhB,KAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAhB,cAAgB,EAAhB,IAAgB,EAAE;gBAA/B,IAAM,GAAG,SAAA;gBACZ,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;aACvB;YACD,OAAO,UAAiB,CAAC;QAC3B,CAAC;;;OAAA;IAEM,cAAM,GAAG,UAA0C,MAAS;QACjE,OAAO,IAAI,OAAO,CAAC;YACjB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;YAClB,MAAM,EAAE,MAAM;SACf,CAAQ,CAAC;IACZ,CAAC,CAAC;IACJ,cAAC;CAAA,AAzCD,CAA8D,CAAC,CAAC,OAAO,GAyCtE;AAzCY,0BAAO"}
\ No newline at end of file
diff --git a/app/lib/src/types/function.d.ts b/app/lib/src/types/function.d.ts
new file mode 100644
index 0000000..aac160a
--- /dev/null
+++ b/app/lib/src/types/function.d.ts
@@ -0,0 +1,26 @@
+import * as z from './base';
+import { ZodTuple } from './tuple';
+import { ZodVoid } from './void';
+export interface ZodFunctionDef<Args extends ZodTuple<any> = ZodTuple<any>, Returns extends z.ZodTypeAny = z.ZodTypeAny> extends z.ZodTypeDef {
+    t: z.ZodTypes.function;
+    args: Args;
+    returns: Returns;
+}
+export declare type TypeOfFunction<Args extends ZodTuple<any>, Returns extends z.ZodTypeAny> = Args['_type'] extends Array<any> ? (...args: Args['_type']) => Returns['_type'] : never;
+export declare class ZodFunction<Args extends ZodTuple<any>, Returns extends z.ZodTypeAny> extends z.ZodType<TypeOfFunction<Args, Returns>, ZodFunctionDef> {
+    readonly _def: ZodFunctionDef<Args, Returns>;
+    readonly _type: TypeOfFunction<Args, Returns>;
+    args: <Items extends [z.ZodType<any, any>, ...z.ZodType<any, any>[]] | []>(...items: Items) => ZodFunction<ZodTuple<Items>, Returns>;
+    returns: <NewReturnType extends z.ZodType<any, any>>(returnType: NewReturnType) => ZodFunction<Args, NewReturnType>;
+    implement: (func: TypeOfFunction<Args, Returns>) => TypeOfFunction<Args, Returns>;
+    validate: (func: TypeOfFunction<Args, Returns>) => TypeOfFunction<Args, Returns>;
+    static create: <T extends ZodTuple<any> = ZodTuple<[]>, U extends z.ZodType<any, any> = ZodVoid>(args?: T | undefined, returns?: U | undefined) => ZodFunction<T, U>;
+    toJSON: () => {
+        t: z.ZodTypes.function;
+        args: {
+            t: z.ZodTypes.tuple;
+            items: any[];
+        };
+        returns: object;
+    };
+}
diff --git a/app/lib/src/types/function.js b/app/lib/src/types/function.js
new file mode 100644
index 0000000..e79ef10
--- /dev/null
+++ b/app/lib/src/types/function.js
@@ -0,0 +1,80 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var tuple_1 = require("./tuple");
+// import { ZodUndefined } from './undefined';
+// import { ZodNull } from './null';
+// import { ZodUnion } from './union';
+var void_1 = require("./void");
+var ZodFunction = /** @class */ (function (_super) {
+    __extends(ZodFunction, _super);
+    function ZodFunction() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.args = function () {
+            var items = [];
+            for (var _i = 0; _i < arguments.length; _i++) {
+                items[_i] = arguments[_i];
+            }
+            return new ZodFunction(__assign({}, _this._def, { args: tuple_1.ZodTuple.create(items) }));
+        };
+        _this.returns = function (returnType) {
+            return new ZodFunction(__assign({}, _this._def, { returns: returnType }));
+        };
+        _this.implement = function (func) {
+            var validatedFunc = _this.parse(func);
+            return validatedFunc;
+        };
+        _this.validate = _this.implement;
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.toJSON = function () {
+            return {
+                t: _this._def.t,
+                args: _this._def.args.toJSON(),
+                returns: _this._def.returns.toJSON(),
+            };
+        };
+        return _this;
+    }
+    ZodFunction.create = function (args, returns) {
+        return new ZodFunction({
+            t: z.ZodTypes.function,
+            args: args || tuple_1.ZodTuple.create([]),
+            returns: returns || void_1.ZodVoid.create(),
+        });
+    };
+    return ZodFunction;
+}(z.ZodType));
+exports.ZodFunction = ZodFunction;
+//# sourceMappingURL=function.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/function.js.map b/app/lib/src/types/function.js.map
new file mode 100644
index 0000000..9156cc0
--- /dev/null
+++ b/app/lib/src/types/function.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"function.js","sourceRoot":"","sources":["../../../src/types/function.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAC5B,iCAAmC;AACnC,8CAA8C;AAC9C,oCAAoC;AACpC,sCAAsC;AACtC,+BAAiC;AAejC;IAA2F,+BAG1F;IAHD;QAAA,qEAsDC;QA/CC,UAAI,GAAG;YACL,eAAe;iBAAf,UAAe,EAAf,qBAAe,EAAf,IAAe;gBAAf,0BAAe;;YAEf,OAAO,IAAI,WAAW,cACjB,KAAI,CAAC,IAAI,IACZ,IAAI,EAAE,gBAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAC5B,CAAC;QACL,CAAC,CAAC;QAEF,aAAO,GAAG,UACR,UAAyB;YAEzB,OAAO,IAAI,WAAW,cACjB,KAAI,CAAC,IAAI,IACZ,OAAO,EAAE,UAAU,IACnB,CAAC;QACL,CAAC,CAAC;QAEF,eAAS,GAAG,UAAC,IAAmC;YAC9C,IAAM,aAAa,GAAG,KAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACvC,OAAQ,aAAsD,CAAC;QACjE,CAAC,CAAC;QAEF,cAAQ,GAAG,KAAI,CAAC,SAAS,CAAC;QAa1B,6GAA6G;QAE7G,oGAAoG;QAEpG,YAAM,GAAG;YACP,OAAO;gBACL,CAAC,EAAE,KAAI,CAAC,IAAI,CAAC,CAAC;gBACd,IAAI,EAAE,KAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC7B,OAAO,EAAE,KAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;aACpC,CAAC;QACJ,CAAC,CAAC;;IACJ,CAAC;IAtBQ,kBAAM,GAAG,UACd,IAAQ,EACR,OAAW;QAEX,OAAO,IAAI,WAAW,CAAC;YACrB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ;YACtB,IAAI,EAAE,IAAI,IAAI,gBAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,OAAO,IAAI,cAAO,CAAC,MAAM,EAAE;SACrC,CAAC,CAAC;IACL,CAAC,CAAC;IAaJ,kBAAC;CAAA,AAtDD,CAA2F,CAAC,CAAC,OAAO,GAsDnG;AAtDY,kCAAW"}
\ No newline at end of file
diff --git a/app/lib/src/types/intersection.d.ts b/app/lib/src/types/intersection.d.ts
new file mode 100644
index 0000000..c8e8222
--- /dev/null
+++ b/app/lib/src/types/intersection.d.ts
@@ -0,0 +1,14 @@
+import * as z from './base';
+export interface ZodIntersectionDef<T extends z.ZodTypeAny = z.ZodTypeAny, U extends z.ZodTypeAny = z.ZodTypeAny> extends z.ZodTypeDef {
+    t: z.ZodTypes.intersection;
+    left: T;
+    right: U;
+}
+export declare class ZodIntersection<T extends z.ZodTypeAny, U extends z.ZodTypeAny> extends z.ZodType<T['_type'] & U['_type'], ZodIntersectionDef<T, U>> {
+    toJSON: () => {
+        t: z.ZodTypes.intersection;
+        left: object;
+        right: object;
+    };
+    static create: <T_1 extends z.ZodType<any, any>, U_1 extends z.ZodType<any, any>>(left: T_1, right: U_1) => ZodIntersection<T_1, U_1>;
+}
diff --git a/app/lib/src/types/intersection.js b/app/lib/src/types/intersection.js
new file mode 100644
index 0000000..46cf562
--- /dev/null
+++ b/app/lib/src/types/intersection.js
@@ -0,0 +1,47 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var ZodIntersection = /** @class */ (function (_super) {
+    __extends(ZodIntersection, _super);
+    function ZodIntersection() {
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.toJSON = function () { return ({
+            t: _this._def.t,
+            left: _this._def.left.toJSON(),
+            right: _this._def.right.toJSON(),
+        }); };
+        return _this;
+    }
+    ZodIntersection.create = function (left, right) {
+        return new ZodIntersection({
+            t: z.ZodTypes.intersection,
+            left: left,
+            right: right,
+        });
+    };
+    return ZodIntersection;
+}(z.ZodType));
+exports.ZodIntersection = ZodIntersection;
+//# sourceMappingURL=intersection.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/intersection.js.map b/app/lib/src/types/intersection.js.map
new file mode 100644
index 0000000..ffd570d
--- /dev/null
+++ b/app/lib/src/types/intersection.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"intersection.js","sourceRoot":"","sources":["../../../src/types/intersection.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAY5B;IAAqF,mCAGpF;IAHD;QAIE,6GAA6G;QAJ/G,qEAqBC;QAfC,oGAAoG;QAEpG,YAAM,GAAG,cAAM,OAAA,CAAC;YACd,CAAC,EAAE,KAAI,CAAC,IAAI,CAAC,CAAC;YACd,IAAI,EAAE,KAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAC7B,KAAK,EAAE,KAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;SAChC,CAAC,EAJa,CAIb,CAAC;;IASL,CAAC;IAPQ,sBAAM,GAAG,UAAiD,IAAO,EAAE,KAAQ;QAChF,OAAO,IAAI,eAAe,CAAC;YACzB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAY;YAC1B,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,sBAAC;CAAA,AArBD,CAAqF,CAAC,CAAC,OAAO,GAqB7F;AArBY,0CAAe"}
\ No newline at end of file
diff --git a/app/lib/src/types/lazy.d.ts b/app/lib/src/types/lazy.d.ts
new file mode 100644
index 0000000..49ee1c7
--- /dev/null
+++ b/app/lib/src/types/lazy.d.ts
@@ -0,0 +1,10 @@
+import * as z from './base';
+export interface ZodLazyDef<T extends z.ZodTypeAny = z.ZodTypeAny> extends z.ZodTypeDef {
+    t: z.ZodTypes.lazy;
+    getter: () => T;
+}
+export declare class ZodLazy<T extends z.ZodTypeAny> extends z.ZodType<z.TypeOf<T>, ZodLazyDef<T>> {
+    readonly schema: T;
+    toJSON: () => never;
+    static create: <T_1 extends z.ZodType<any, any>>(getter: () => T_1) => ZodLazy<T_1>;
+}
diff --git a/app/lib/src/types/lazy.js b/app/lib/src/types/lazy.js
new file mode 100644
index 0000000..3fe8e2b
--- /dev/null
+++ b/app/lib/src/types/lazy.js
@@ -0,0 +1,51 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var ZodLazy = /** @class */ (function (_super) {
+    __extends(ZodLazy, _super);
+    function ZodLazy() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.toJSON = function () {
+            throw new Error("Can't JSONify recursive structure");
+        };
+        return _this;
+    }
+    Object.defineProperty(ZodLazy.prototype, "schema", {
+        get: function () {
+            return this._def.getter();
+        },
+        enumerable: true,
+        configurable: true
+    });
+    ZodLazy.create = function (getter) {
+        return new ZodLazy({
+            t: z.ZodTypes.lazy,
+            getter: getter,
+        });
+    };
+    return ZodLazy;
+}(z.ZodType));
+exports.ZodLazy = ZodLazy;
+//# sourceMappingURL=lazy.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/lazy.js.map b/app/lib/src/types/lazy.js.map
new file mode 100644
index 0000000..a1264fc
--- /dev/null
+++ b/app/lib/src/types/lazy.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"lazy.js","sourceRoot":"","sources":["../../../src/types/lazy.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAU5B;IAAqD,2BAAqC;IAA1F;QAAA,qEAmBC;QAdC,6GAA6G;QAE7G,oGAAoG;QAEpG,YAAM,GAAG;YACP,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC,CAAC;;IAQJ,CAAC;IAlBC,sBAAI,2BAAM;aAAV;YACE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,CAAC;;;OAAA;IAUM,cAAM,GAAG,UAAyB,MAAe;QACtD,OAAO,IAAI,OAAO,CAAC;YACjB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;YAClB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,cAAC;CAAA,AAnBD,CAAqD,CAAC,CAAC,OAAO,GAmB7D;AAnBY,0BAAO"}
\ No newline at end of file
diff --git a/app/lib/src/types/literal.d.ts b/app/lib/src/types/literal.d.ts
new file mode 100644
index 0000000..067b459
--- /dev/null
+++ b/app/lib/src/types/literal.d.ts
@@ -0,0 +1,10 @@
+import * as z from './base';
+import { Primitive } from '../helpers/primitive';
+export interface ZodLiteralDef<T extends any = any> extends z.ZodTypeDef {
+    t: z.ZodTypes.literal;
+    value: T;
+}
+export declare class ZodLiteral<T extends any> extends z.ZodType<T, ZodLiteralDef<T>> {
+    toJSON: () => ZodLiteralDef<T>;
+    static create: <T_1 extends Primitive>(value: T_1) => ZodLiteral<T_1>;
+}
diff --git a/app/lib/src/types/literal.js b/app/lib/src/types/literal.js
new file mode 100644
index 0000000..0a06b4a
--- /dev/null
+++ b/app/lib/src/types/literal.js
@@ -0,0 +1,42 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var ZodLiteral = /** @class */ (function (_super) {
+    __extends(ZodLiteral, _super);
+    function ZodLiteral() {
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.toJSON = function () { return _this._def; };
+        return _this;
+    }
+    ZodLiteral.create = function (value) {
+        return new ZodLiteral({
+            t: z.ZodTypes.literal,
+            value: value,
+        });
+    };
+    return ZodLiteral;
+}(z.ZodType));
+exports.ZodLiteral = ZodLiteral;
+//# sourceMappingURL=literal.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/literal.js.map b/app/lib/src/types/literal.js.map
new file mode 100644
index 0000000..0d9db1e
--- /dev/null
+++ b/app/lib/src/types/literal.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"literal.js","sourceRoot":"","sources":["../../../src/types/literal.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAa5B;IAA+C,8BAA8B;IAA7E;QACE,6GAA6G;QAD/G,qEAaC;QAVC,oGAAoG;QAEpG,YAAM,GAAG,cAAM,OAAA,KAAI,CAAC,IAAI,EAAT,CAAS,CAAC;;IAQ3B,CAAC;IANQ,iBAAM,GAAG,UAAyB,KAAQ;QAC/C,OAAO,IAAI,UAAU,CAAC;YACpB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO;YACrB,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,iBAAC;CAAA,AAbD,CAA+C,CAAC,CAAC,OAAO,GAavD;AAbY,gCAAU"}
\ No newline at end of file
diff --git a/app/lib/src/types/nativeEnum.d.ts b/app/lib/src/types/nativeEnum.d.ts
new file mode 100644
index 0000000..e033f11
--- /dev/null
+++ b/app/lib/src/types/nativeEnum.d.ts
@@ -0,0 +1,14 @@
+import * as z from './base';
+export interface ZodNativeEnumDef<T extends EnumLike = EnumLike> extends z.ZodTypeDef {
+    t: z.ZodTypes.nativeEnum;
+    values: T;
+}
+declare type EnumLike = {
+    [k: string]: string | number;
+    [nu: number]: string;
+};
+export declare class ZodNativeEnum<T extends EnumLike> extends z.ZodType<T[keyof T], ZodNativeEnumDef<T>> {
+    toJSON: () => ZodNativeEnumDef<T>;
+    static create: <T_1 extends EnumLike>(values: T_1) => ZodNativeEnum<T_1>;
+}
+export {};
diff --git a/app/lib/src/types/nativeEnum.js b/app/lib/src/types/nativeEnum.js
new file mode 100644
index 0000000..f11f728
--- /dev/null
+++ b/app/lib/src/types/nativeEnum.js
@@ -0,0 +1,40 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var ZodNativeEnum = /** @class */ (function (_super) {
+    __extends(ZodNativeEnum, _super);
+    function ZodNativeEnum() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.toJSON = function () { return _this._def; };
+        return _this;
+    }
+    ZodNativeEnum.create = function (values) {
+        return new ZodNativeEnum({
+            t: z.ZodTypes.nativeEnum,
+            values: values,
+        });
+    };
+    return ZodNativeEnum;
+}(z.ZodType));
+exports.ZodNativeEnum = ZodNativeEnum;
+//# sourceMappingURL=nativeEnum.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/nativeEnum.js.map b/app/lib/src/types/nativeEnum.js.map
new file mode 100644
index 0000000..0222ac2
--- /dev/null
+++ b/app/lib/src/types/nativeEnum.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"nativeEnum.js","sourceRoot":"","sources":["../../../src/types/nativeEnum.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAS5B;IAAuD,iCAA0C;IAAjG;QAAA,qEAQC;QAPC,YAAM,GAAG,cAAM,OAAA,KAAI,CAAC,IAAI,EAAT,CAAS,CAAC;;IAO3B,CAAC;IANQ,oBAAM,GAAG,UAAqB,MAAS;QAC5C,OAAO,IAAI,aAAa,CAAC;YACvB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU;YACxB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,oBAAC;CAAA,AARD,CAAuD,CAAC,CAAC,OAAO,GAQ/D;AARY,sCAAa"}
\ No newline at end of file
diff --git a/app/lib/src/types/null.d.ts b/app/lib/src/types/null.d.ts
new file mode 100644
index 0000000..f06d16f
--- /dev/null
+++ b/app/lib/src/types/null.d.ts
@@ -0,0 +1,8 @@
+import * as z from './base';
+export interface ZodNullDef extends z.ZodTypeDef {
+    t: z.ZodTypes.null;
+}
+export declare class ZodNull extends z.ZodType<null, ZodNullDef> {
+    toJSON: () => ZodNullDef;
+    static create: () => ZodNull;
+}
diff --git a/app/lib/src/types/null.js b/app/lib/src/types/null.js
new file mode 100644
index 0000000..1e1cd04
--- /dev/null
+++ b/app/lib/src/types/null.js
@@ -0,0 +1,41 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var ZodNull = /** @class */ (function (_super) {
+    __extends(ZodNull, _super);
+    function ZodNull() {
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.toJSON = function () { return _this._def; };
+        return _this;
+    }
+    ZodNull.create = function () {
+        return new ZodNull({
+            t: z.ZodTypes.null,
+        });
+    };
+    return ZodNull;
+}(z.ZodType));
+exports.ZodNull = ZodNull;
+//# sourceMappingURL=null.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/null.js.map b/app/lib/src/types/null.js.map
new file mode 100644
index 0000000..41f2191
--- /dev/null
+++ b/app/lib/src/types/null.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"null.js","sourceRoot":"","sources":["../../../src/types/null.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAQ5B;IAA6B,2BAA2B;IAAxD;QACE,6GAA6G;QAD/G,qEAWC;QARC,oGAAoG;QAEpG,YAAM,GAAG,cAAM,OAAA,KAAI,CAAC,IAAI,EAAT,CAAS,CAAC;;IAM3B,CAAC;IALQ,cAAM,GAAG;QACd,OAAO,IAAI,OAAO,CAAC;YACjB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;SACnB,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,cAAC;CAAA,AAXD,CAA6B,CAAC,CAAC,OAAO,GAWrC;AAXY,0BAAO"}
\ No newline at end of file
diff --git a/app/lib/src/types/number.d.ts b/app/lib/src/types/number.d.ts
new file mode 100644
index 0000000..bd11bf3
--- /dev/null
+++ b/app/lib/src/types/number.d.ts
@@ -0,0 +1,29 @@
+import * as z from './base';
+export interface ZodNumberDef extends z.ZodTypeDef {
+    t: z.ZodTypes.number;
+}
+export declare class ZodNumber extends z.ZodType<number, ZodNumberDef> {
+    toJSON: () => ZodNumberDef;
+    static create: () => ZodNumber;
+    min: (minimum: number, message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    max: (maximum: number, message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    int: (message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    positive: (message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    negative: (message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    nonpositive: (message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    nonnegative: (message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+}
diff --git a/app/lib/src/types/number.js b/app/lib/src/types/number.js
new file mode 100644
index 0000000..3a4af8a
--- /dev/null
+++ b/app/lib/src/types/number.js
@@ -0,0 +1,78 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+// import { ZodUndefined } from './undefined';
+// import { ZodNull } from './null';
+// import { ZodUnion } from './union';
+var ZodError_1 = require("../ZodError");
+var errorUtil_1 = require("../helpers/errorUtil");
+var ZodNumber = /** @class */ (function (_super) {
+    __extends(ZodNumber, _super);
+    function ZodNumber() {
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.toJSON = function () { return _this._def; };
+        _this.min = function (minimum, message) {
+            return _this._refinement(__assign({ check: function (data) { return data >= minimum; }, code: ZodError_1.ZodErrorCode.too_small, minimum: minimum, type: 'number', inclusive: true }, errorUtil_1.errorUtil.errToObj(message)));
+        };
+        _this.max = function (maximum, message) {
+            return _this._refinement(__assign({ check: function (data) { return data <= maximum; }, code: ZodError_1.ZodErrorCode.too_big, maximum: maximum, type: 'number', inclusive: true }, errorUtil_1.errorUtil.errToObj(message)));
+        };
+        _this.int = function (message) {
+            return _this._refinement(__assign({ check: function (data) { return Number.isInteger(data); }, code: ZodError_1.ZodErrorCode.invalid_type, expected: 'integer', received: 'number' }, errorUtil_1.errorUtil.errToObj(message)));
+        };
+        _this.positive = function (message) {
+            return _this._refinement(__assign({ check: function (data) { return data > 0; }, code: ZodError_1.ZodErrorCode.too_small, minimum: 0, type: 'number', inclusive: false }, errorUtil_1.errorUtil.errToObj(message)));
+        };
+        _this.negative = function (message) {
+            return _this._refinement(__assign({ check: function (data) { return data < 0; }, code: ZodError_1.ZodErrorCode.too_big, maximum: 0, type: 'number', inclusive: false }, errorUtil_1.errorUtil.errToObj(message)));
+        };
+        _this.nonpositive = function (message) {
+            return _this._refinement(__assign({ check: function (data) { return data <= 0; }, code: ZodError_1.ZodErrorCode.too_big, maximum: 0, type: 'number', inclusive: true }, errorUtil_1.errorUtil.errToObj(message)));
+        };
+        _this.nonnegative = function (message) {
+            return _this._refinement(__assign({ check: function (data) { return data >= 0; }, code: ZodError_1.ZodErrorCode.too_small, minimum: 0, type: 'number', inclusive: true }, errorUtil_1.errorUtil.errToObj(message)));
+        };
+        return _this;
+    }
+    ZodNumber.create = function () {
+        return new ZodNumber({
+            t: z.ZodTypes.number,
+        });
+    };
+    return ZodNumber;
+}(z.ZodType));
+exports.ZodNumber = ZodNumber;
+//# sourceMappingURL=number.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/number.js.map b/app/lib/src/types/number.js.map
new file mode 100644
index 0000000..befa44f
--- /dev/null
+++ b/app/lib/src/types/number.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"number.js","sourceRoot":"","sources":["../../../src/types/number.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAC5B,8CAA8C;AAC9C,oCAAoC;AACpC,sCAAsC;AACtC,wCAA2C;AAC3C,kDAAiD;AAMjD;IAA+B,6BAA+B;IAA9D;QACE,6GAA6G;QAD/G,qEAgFC;QA7EC,oGAAoG;QAEpG,YAAM,GAAG,cAAM,OAAA,KAAI,CAAC,IAAI,EAAT,CAAS,CAAC;QAOzB,SAAG,GAAG,UAAC,OAAe,EAAE,OAA8B;YACpD,OAAA,KAAI,CAAC,WAAW,YACd,KAAK,EAAE,UAAA,IAAI,IAAI,OAAA,IAAI,IAAI,OAAO,EAAf,CAAe,EAC9B,IAAI,EAAE,uBAAY,CAAC,SAAS,EAC5B,OAAO,SAAA,EACP,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,IAAI,IACZ,qBAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC9B;QAPF,CAOE,CAAC;QAEL,SAAG,GAAG,UAAC,OAAe,EAAE,OAA8B;YACpD,OAAA,KAAI,CAAC,WAAW,YACd,KAAK,EAAE,UAAA,IAAI,IAAI,OAAA,IAAI,IAAI,OAAO,EAAf,CAAe,EAC9B,IAAI,EAAE,uBAAY,CAAC,OAAO,EAC1B,OAAO,SAAA,EACP,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,IAAI,IACZ,qBAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC9B;QAPF,CAOE,CAAC;QAEL,SAAG,GAAG,UAAC,OAA8B;YACnC,OAAA,KAAI,CAAC,WAAW,YACd,KAAK,EAAE,UAAA,IAAI,IAAI,OAAA,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAtB,CAAsB,EACrC,IAAI,EAAE,uBAAY,CAAC,YAAY,EAC/B,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,QAAQ,IACf,qBAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC9B;QANF,CAME,CAAC;QAEL,cAAQ,GAAG,UAAC,OAA8B;YACxC,OAAA,KAAI,CAAC,WAAW,YACd,KAAK,EAAE,UAAA,IAAI,IAAI,OAAA,IAAI,GAAG,CAAC,EAAR,CAAQ,EACvB,IAAI,EAAE,uBAAY,CAAC,SAAS,EAC5B,OAAO,EAAE,CAAC,EACV,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,KAAK,IACb,qBAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC9B;QAPF,CAOE,CAAC;QAEL,cAAQ,GAAG,UAAC,OAA8B;YACxC,OAAA,KAAI,CAAC,WAAW,YACd,KAAK,EAAE,UAAA,IAAI,IAAI,OAAA,IAAI,GAAG,CAAC,EAAR,CAAQ,EACvB,IAAI,EAAE,uBAAY,CAAC,OAAO,EAC1B,OAAO,EAAE,CAAC,EACV,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,KAAK,IACb,qBAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC9B;QAPF,CAOE,CAAC;QAEL,iBAAW,GAAG,UAAC,OAA8B;YAC3C,OAAA,KAAI,CAAC,WAAW,YACd,KAAK,EAAE,UAAA,IAAI,IAAI,OAAA,IAAI,IAAI,CAAC,EAAT,CAAS,EACxB,IAAI,EAAE,uBAAY,CAAC,OAAO,EAC1B,OAAO,EAAE,CAAC,EACV,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,IAAI,IACZ,qBAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC9B;QAPF,CAOE,CAAC;QAEL,iBAAW,GAAG,UAAC,OAA8B;YAC3C,OAAA,KAAI,CAAC,WAAW,YACd,KAAK,EAAE,UAAA,IAAI,IAAI,OAAA,IAAI,IAAI,CAAC,EAAT,CAAS,EACxB,IAAI,EAAE,uBAAY,CAAC,SAAS,EAC5B,OAAO,EAAE,CAAC,EACV,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,IAAI,IACZ,qBAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC9B;QAPF,CAOE,CAAC;;IACP,CAAC;IA1EQ,gBAAM,GAAG;QACd,OAAO,IAAI,SAAS,CAAC;YACnB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM;SACrB,CAAC,CAAC;IACL,CAAC,CAAC;IAsEJ,gBAAC;CAAA,AAhFD,CAA+B,CAAC,CAAC,OAAO,GAgFvC;AAhFY,8BAAS"}
\ No newline at end of file
diff --git a/app/lib/src/types/object.d.ts b/app/lib/src/types/object.d.ts
new file mode 100644
index 0000000..afd7b22
--- /dev/null
+++ b/app/lib/src/types/object.d.ts
@@ -0,0 +1,57 @@
+import * as z from './base';
+import { ZodUndefined } from './undefined';
+import { ZodUnion } from './union';
+import { objectUtil } from '../helpers/objectUtil';
+import { partialUtil } from '../helpers/partialUtil';
+export interface ZodObjectDef<T extends z.ZodRawShape = z.ZodRawShape, Params extends ZodObjectParams = ZodObjectParams> extends z.ZodTypeDef {
+    t: z.ZodTypes.object;
+    shape: () => T;
+    params: Params;
+}
+interface ZodObjectParams {
+    strict: boolean;
+}
+export declare type Scalars = string | string[] | number | number[] | boolean | boolean[] | bigint | bigint[] | undefined | null;
+declare type ZodObjectType<T extends z.ZodRawShape, Params extends ZodObjectParams> = Params['strict'] extends true ? objectUtil.ObjectType<T> : objectUtil.Flatten<objectUtil.ObjectType<T> & {
+    [k: string]: any;
+}>;
+export declare class ZodObject<T extends z.ZodRawShape, Params extends ZodObjectParams = {
+    strict: true;
+}, Type extends ZodObjectType<T, Params> = ZodObjectType<T, Params>> extends z.ZodType<Type, ZodObjectDef<T, Params>> {
+    readonly _shape: T;
+    readonly _params: Params;
+    readonly shape: T;
+    readonly params: Params;
+    toJSON: () => {
+        t: z.ZodTypes.object;
+        shape: {
+            [x: string]: any;
+        }[];
+    };
+    nonstrict: () => ZodObject<T, objectUtil.Flatten<{ [k in Exclude<keyof Params, "strict">]: Params[k]; } & {
+        strict: false;
+    }>, ZodObjectType<T, objectUtil.Flatten<{ [k in Exclude<keyof Params, "strict">]: Params[k]; } & {
+        strict: false;
+    }>>>;
+    augment: <Augmentation extends z.ZodRawShape>(augmentation: Augmentation) => ZodObject<{ [k in Exclude<keyof T, keyof Augmentation>]: T[k]; } & { [k in keyof Augmentation]: Augmentation[k]; }, Params, ZodObjectType<{ [k in Exclude<keyof T, keyof Augmentation>]: T[k]; } & { [k in keyof Augmentation]: Augmentation[k]; }, Params>>;
+    extend: <Augmentation extends z.ZodRawShape>(augmentation: Augmentation) => ZodObject<{ [k in Exclude<keyof T, keyof Augmentation>]: T[k]; } & { [k in keyof Augmentation]: Augmentation[k]; }, Params, ZodObjectType<{ [k in Exclude<keyof T, keyof Augmentation>]: T[k]; } & { [k in keyof Augmentation]: Augmentation[k]; }, Params>>;
+    /**
+     * Prior to zod@1.0.12 there was a bug in the
+     * inferred type of merged objects. Please
+     * upgrade if you are experiencing issues.
+     */
+    merge: <MergeShape extends z.ZodRawShape, MergeParams extends ZodObjectParams>(other: ZodObject<MergeShape, MergeParams>) => ZodObject<T & MergeShape, objectUtil.MergeObjectParams<Params, MergeParams>>;
+    pick: <Mask extends { [k in keyof T]?: true | undefined; }>(mask: Mask) => ZodObject<{ [k in { [k in keyof { [k in keyof Mask]: k extends keyof T ? T[k] : never; }]: [{ [k in keyof Mask]: k extends keyof T ? T[k] : never; }[k]] extends [never] ? never : k; }[keyof Mask]]: k extends keyof Mask ? { [k in keyof Mask]: k extends keyof T ? T[k] : never; }[k] : never; }, Params, ZodObjectType<{ [k in { [k in keyof { [k in keyof Mask]: k extends keyof T ? T[k] : never; }]: [{ [k in keyof Mask]: k extends keyof T ? T[k] : never; }[k]] extends [never] ? never : k; }[keyof Mask]]: k extends keyof Mask ? { [k in keyof Mask]: k extends keyof T ? T[k] : never; }[k] : never; }, Params>>;
+    omit: <Mask extends { [k in keyof T]?: true | undefined; }>(mask: Mask) => ZodObject<{ [k in { [k in keyof { [k in keyof T]: k extends keyof Mask ? never : T[k]; }]: [{ [k in keyof T]: k extends keyof Mask ? never : T[k]; }[k]] extends [never] ? never : k; }[keyof T]]: k extends keyof T ? { [k in keyof T]: k extends keyof Mask ? never : T[k]; }[k] : never; }, Params, ZodObjectType<{ [k in { [k in keyof { [k in keyof T]: k extends keyof Mask ? never : T[k]; }]: [{ [k in keyof T]: k extends keyof Mask ? never : T[k]; }[k]] extends [never] ? never : k; }[keyof T]]: k extends keyof T ? { [k in keyof T]: k extends keyof Mask ? never : T[k]; }[k] : never; }, Params>>;
+    partial: () => ZodObject<{ [k in keyof T]: ZodUnion<[T[k], ZodUndefined]>; }, Params, ZodObjectType<{ [k in keyof T]: ZodUnion<[T[k], ZodUndefined]>; }, Params>>;
+    primitives: () => ZodObject<{ [k in { [k in keyof { [k in keyof T]: [T[k]["_type"]] extends [Scalars] ? T[k] : never; }]: [{ [k in keyof T]: [T[k]["_type"]] extends [Scalars] ? T[k] : never; }[k]] extends [never] ? never : k; }[keyof T]]: k extends keyof T ? { [k in keyof T]: [T[k]["_type"]] extends [Scalars] ? T[k] : never; }[k] : never; }, Params, ZodObjectType<{ [k in { [k in keyof { [k in keyof T]: [T[k]["_type"]] extends [Scalars] ? T[k] : never; }]: [{ [k in keyof T]: [T[k]["_type"]] extends [Scalars] ? T[k] : never; }[k]] extends [never] ? never : k; }[keyof T]]: k extends keyof T ? { [k in keyof T]: [T[k]["_type"]] extends [Scalars] ? T[k] : never; }[k] : never; }, Params>>;
+    nonprimitives: () => ZodObject<{ [k in { [k in keyof { [k in keyof T]: [T[k]["_type"]] extends [Scalars] ? never : T[k]; }]: [{ [k in keyof T]: [T[k]["_type"]] extends [Scalars] ? never : T[k]; }[k]] extends [never] ? never : k; }[keyof T]]: k extends keyof T ? { [k in keyof T]: [T[k]["_type"]] extends [Scalars] ? never : T[k]; }[k] : never; }, Params, ZodObjectType<{ [k in { [k in keyof { [k in keyof T]: [T[k]["_type"]] extends [Scalars] ? never : T[k]; }]: [{ [k in keyof T]: [T[k]["_type"]] extends [Scalars] ? never : T[k]; }[k]] extends [never] ? never : k; }[keyof T]]: k extends keyof T ? { [k in keyof T]: [T[k]["_type"]] extends [Scalars] ? never : T[k]; }[k] : never; }, Params>>;
+    deepPartial: () => partialUtil.RootDeepPartial<this>;
+    static create: <T_1 extends z.ZodRawShape>(shape: T_1) => ZodObject<T_1, {
+        strict: true;
+    }, { [k in keyof ({ [k in { [k in keyof { [k in keyof T_1]: T_1[k]["_type"]; }]: undefined extends { [k in keyof T_1]: T_1[k]["_type"]; }[k] ? k : never; }[keyof T_1]]?: { [k in keyof T_1]: T_1[k]["_type"]; }[k] | undefined; } & { [k in Exclude<keyof T_1, { [k in keyof { [k in keyof T_1]: T_1[k]["_type"]; }]: undefined extends { [k in keyof T_1]: T_1[k]["_type"]; }[k] ? k : never; }[keyof T_1]>]: { [k in keyof T_1]: T_1[k]["_type"]; }[k]; })]: ({ [k in { [k in keyof { [k in keyof T_1]: T_1[k]["_type"]; }]: undefined extends { [k in keyof T_1]: T_1[k]["_type"]; }[k] ? k : never; }[keyof T_1]]?: { [k in keyof T_1]: T_1[k]["_type"]; }[k] | undefined; } & { [k in Exclude<keyof T_1, { [k in keyof { [k in keyof T_1]: T_1[k]["_type"]; }]: undefined extends { [k in keyof T_1]: T_1[k]["_type"]; }[k] ? k : never; }[keyof T_1]>]: { [k in keyof T_1]: T_1[k]["_type"]; }[k]; })[k]; }>;
+    static lazycreate: <T_1 extends z.ZodRawShape>(shape: () => T_1) => ZodObject<T_1, {
+        strict: true;
+    }, { [k in keyof ({ [k in { [k in keyof { [k in keyof T_1]: T_1[k]["_type"]; }]: undefined extends { [k in keyof T_1]: T_1[k]["_type"]; }[k] ? k : never; }[keyof T_1]]?: { [k in keyof T_1]: T_1[k]["_type"]; }[k] | undefined; } & { [k in Exclude<keyof T_1, { [k in keyof { [k in keyof T_1]: T_1[k]["_type"]; }]: undefined extends { [k in keyof T_1]: T_1[k]["_type"]; }[k] ? k : never; }[keyof T_1]>]: { [k in keyof T_1]: T_1[k]["_type"]; }[k]; })]: ({ [k in { [k in keyof { [k in keyof T_1]: T_1[k]["_type"]; }]: undefined extends { [k in keyof T_1]: T_1[k]["_type"]; }[k] ? k : never; }[keyof T_1]]?: { [k in keyof T_1]: T_1[k]["_type"]; }[k] | undefined; } & { [k in Exclude<keyof T_1, { [k in keyof { [k in keyof T_1]: T_1[k]["_type"]; }]: undefined extends { [k in keyof T_1]: T_1[k]["_type"]; }[k] ? k : never; }[keyof T_1]>]: { [k in keyof T_1]: T_1[k]["_type"]; }[k]; })[k]; }>;
+}
+export {};
diff --git a/app/lib/src/types/object.js b/app/lib/src/types/object.js
new file mode 100644
index 0000000..d7ceb8f
--- /dev/null
+++ b/app/lib/src/types/object.js
@@ -0,0 +1,162 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var objectUtil_1 = require("../helpers/objectUtil");
+var isScalar_1 = require("../isScalar");
+var AugmentFactory = function (def) { return function (augmentation) {
+    return new ZodObject(__assign({}, def, { shape: function () { return (__assign({}, def.shape(), augmentation)); } }));
+}; };
+var objectDefToJson = function (def) { return ({
+    t: def.t,
+    shape: Object.assign({}, Object.keys(def.shape()).map(function (k) {
+        var _a;
+        return (_a = {},
+            _a[k] = def.shape()[k].toJSON(),
+            _a);
+    })),
+}); };
+var ZodObject = /** @class */ (function (_super) {
+    __extends(ZodObject, _super);
+    function ZodObject() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.toJSON = function () { return objectDefToJson(_this._def); };
+        _this.nonstrict = function () {
+            return new ZodObject({
+                shape: _this._def.shape,
+                t: z.ZodTypes.object,
+                params: __assign({}, _this._params, { strict: false }),
+            });
+        };
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        // nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.augment = AugmentFactory(_this._def);
+        _this.extend = AugmentFactory(_this._def);
+        /**
+         * Prior to zod@1.0.12 there was a bug in the
+         * inferred type of merged objects. Please
+         * upgrade if you are experiencing issues.
+         */
+        _this.merge = objectUtil_1.objectUtil.mergeObjects(_this);
+        _this.pick = function (mask) {
+            var shape = {};
+            Object.keys(mask).map(function (key) {
+                shape[key] = _this.shape[key];
+            });
+            return new ZodObject(__assign({}, _this._def, { shape: function () { return shape; } }));
+        };
+        _this.omit = function (mask) {
+            var shape = {};
+            Object.keys(_this.shape).map(function (key) {
+                if (!Object.keys(mask).includes(key)) {
+                    shape[key] = _this.shape[key];
+                }
+            });
+            return new ZodObject(__assign({}, _this._def, { shape: function () { return shape; } }));
+        };
+        _this.partial = function () {
+            var newShape = {};
+            for (var key in _this.shape) {
+                newShape[key] = _this.shape[key].optional();
+            }
+            return new ZodObject(__assign({}, _this._def, { shape: function () { return newShape; } }));
+        };
+        _this.primitives = function () {
+            var newShape = {};
+            for (var key in _this.shape) {
+                if (isScalar_1.isScalar(_this.shape[key])) {
+                    newShape[key] = _this.shape[key];
+                }
+            }
+            return new ZodObject(__assign({}, _this._def, { shape: function () { return newShape; } }));
+        };
+        _this.nonprimitives = function () {
+            var newShape = {};
+            for (var key in _this.shape) {
+                if (!isScalar_1.isScalar(_this.shape[key])) {
+                    newShape[key] = _this.shape[key];
+                }
+            }
+            return new ZodObject(__assign({}, _this._def, { shape: function () { return newShape; } }));
+        };
+        _this.deepPartial = function () {
+            var newShape = {};
+            for (var key in _this.shape) {
+                var fieldSchema = _this.shape[key];
+                if (fieldSchema instanceof ZodObject) {
+                    newShape[key] = fieldSchema.deepPartial().optional();
+                }
+                else {
+                    newShape[key] = _this.shape[key].optional();
+                }
+            }
+            return new ZodObject(__assign({}, _this._def, { shape: function () { return newShape; } }));
+        };
+        return _this;
+    }
+    Object.defineProperty(ZodObject.prototype, "shape", {
+        get: function () {
+            return this._def.shape();
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(ZodObject.prototype, "params", {
+        get: function () {
+            return this._def.params;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    ZodObject.create = function (shape) {
+        return new ZodObject({
+            t: z.ZodTypes.object,
+            shape: function () { return shape; },
+            params: {
+                strict: true,
+            },
+        });
+    };
+    ZodObject.lazycreate = function (shape) {
+        return new ZodObject({
+            t: z.ZodTypes.object,
+            shape: shape,
+            params: {
+                strict: true,
+            },
+        });
+    };
+    return ZodObject;
+}(z.ZodType));
+exports.ZodObject = ZodObject;
+//# sourceMappingURL=object.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/object.js.map b/app/lib/src/types/object.js.map
new file mode 100644
index 0000000..f3a78c6
--- /dev/null
+++ b/app/lib/src/types/object.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"object.js","sourceRoot":"","sources":["../../../src/types/object.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/lib/src/types/promise.d.ts b/app/lib/src/types/promise.d.ts
new file mode 100644
index 0000000..8966933
--- /dev/null
+++ b/app/lib/src/types/promise.d.ts
@@ -0,0 +1,12 @@
+import * as z from './base';
+export interface ZodPromiseDef<T extends z.ZodTypeAny = z.ZodTypeAny> extends z.ZodTypeDef {
+    t: z.ZodTypes.promise;
+    type: T;
+}
+export declare class ZodPromise<T extends z.ZodTypeAny> extends z.ZodType<Promise<T['_type']>, ZodPromiseDef<T>> {
+    toJSON: () => {
+        t: z.ZodTypes.promise;
+        type: object;
+    };
+    static create: <T_1 extends z.ZodType<any, any>>(schema: T_1) => ZodPromise<T_1>;
+}
diff --git a/app/lib/src/types/promise.js b/app/lib/src/types/promise.js
new file mode 100644
index 0000000..94de2f5
--- /dev/null
+++ b/app/lib/src/types/promise.js
@@ -0,0 +1,47 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var ZodPromise = /** @class */ (function (_super) {
+    __extends(ZodPromise, _super);
+    function ZodPromise() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.toJSON = function () {
+            return {
+                t: _this._def.t,
+                type: _this._def.type.toJSON(),
+            };
+        };
+        return _this;
+    }
+    // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+    // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+    ZodPromise.create = function (schema) {
+        return new ZodPromise({
+            t: z.ZodTypes.promise,
+            type: schema,
+        });
+    };
+    return ZodPromise;
+}(z.ZodType));
+exports.ZodPromise = ZodPromise;
+//# sourceMappingURL=promise.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/promise.js.map b/app/lib/src/types/promise.js.map
new file mode 100644
index 0000000..0039e56
--- /dev/null
+++ b/app/lib/src/types/promise.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"promise.js","sourceRoot":"","sources":["../../../src/types/promise.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAU5B;IAAwD,8BAAgD;IAAxG;QAAA,qEAkBC;QAjBC,YAAM,GAAG;YACP,OAAO;gBACL,CAAC,EAAE,KAAI,CAAC,IAAI,CAAC,CAAC;gBACd,IAAI,EAAE,KAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;aAC9B,CAAC;QACJ,CAAC,CAAC;;IAYJ,CAAC;IAVC,6GAA6G;IAE7G,oGAAoG;IAE7F,iBAAM,GAAG,UAAyB,MAAS;QAChD,OAAO,IAAI,UAAU,CAAC;YACpB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO;YACrB,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,iBAAC;CAAA,AAlBD,CAAwD,CAAC,CAAC,OAAO,GAkBhE;AAlBY,gCAAU"}
\ No newline at end of file
diff --git a/app/lib/src/types/raw.d.ts b/app/lib/src/types/raw.d.ts
new file mode 100644
index 0000000..e69de29
diff --git a/app/lib/src/types/raw.js b/app/lib/src/types/raw.js
new file mode 100644
index 0000000..6e192b9
--- /dev/null
+++ b/app/lib/src/types/raw.js
@@ -0,0 +1,2 @@
+"use strict";
+//# sourceMappingURL=raw.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/raw.js.map b/app/lib/src/types/raw.js.map
new file mode 100644
index 0000000..f2524b5
--- /dev/null
+++ b/app/lib/src/types/raw.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"raw.js","sourceRoot":"","sources":["../../../src/types/raw.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/app/lib/src/types/record.d.ts b/app/lib/src/types/record.d.ts
new file mode 100644
index 0000000..6e6dc44
--- /dev/null
+++ b/app/lib/src/types/record.d.ts
@@ -0,0 +1,14 @@
+import * as z from './base';
+export interface ZodRecordDef<Value extends z.ZodTypeAny = z.ZodTypeAny> extends z.ZodTypeDef {
+    t: z.ZodTypes.record;
+    valueType: Value;
+}
+export declare class ZodRecord<Value extends z.ZodTypeAny = z.ZodTypeAny> extends z.ZodType<Record<string, Value['_type']>, // { [k in keyof T]: T[k]['_type'] },
+ZodRecordDef<Value>> {
+    readonly _value: Value;
+    toJSON: () => {
+        t: z.ZodTypes.record;
+        valueType: object;
+    };
+    static create: <Value_1 extends z.ZodType<any, any> = z.ZodType<any, any>>(valueType: Value_1) => ZodRecord<Value_1>;
+}
diff --git a/app/lib/src/types/record.js b/app/lib/src/types/record.js
new file mode 100644
index 0000000..8c27e8e
--- /dev/null
+++ b/app/lib/src/types/record.js
@@ -0,0 +1,45 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var ZodRecord = /** @class */ (function (_super) {
+    __extends(ZodRecord, _super);
+    function ZodRecord() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.toJSON = function () { return ({
+            t: _this._def.t,
+            valueType: _this._def.valueType.toJSON(),
+        }); };
+        return _this;
+    }
+    // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+    // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+    ZodRecord.create = function (valueType) {
+        return new ZodRecord({
+            t: z.ZodTypes.record,
+            valueType: valueType,
+        });
+    };
+    return ZodRecord;
+}(z.ZodType));
+exports.ZodRecord = ZodRecord;
+//# sourceMappingURL=record.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/record.js.map b/app/lib/src/types/record.js.map
new file mode 100644
index 0000000..3519265
--- /dev/null
+++ b/app/lib/src/types/record.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/types/record.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAU5B;IAA0E,6BAGzE;IAHD;QAAA,qEAqBC;QAfC,YAAM,GAAG,cAAM,OAAA,CAAC;YACd,CAAC,EAAE,KAAI,CAAC,IAAI,CAAC,CAAC;YACd,SAAS,EAAE,KAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;SACxC,CAAC,EAHa,CAGb,CAAC;;IAYL,CAAC;IAVC,6GAA6G;IAE7G,oGAAoG;IAE7F,gBAAM,GAAG,UAA4C,SAAgB;QAC1E,OAAO,IAAI,SAAS,CAAC;YACnB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM;YACpB,SAAS,WAAA;SACV,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,gBAAC;CAAA,AArBD,CAA0E,CAAC,CAAC,OAAO,GAqBlF;AArBY,8BAAS"}
\ No newline at end of file
diff --git a/app/lib/src/types/string.d.ts b/app/lib/src/types/string.d.ts
new file mode 100644
index 0000000..d80f0c0
--- /dev/null
+++ b/app/lib/src/types/string.d.ts
@@ -0,0 +1,39 @@
+import * as z from './base';
+import { StringValidation } from '../ZodError';
+import { errorUtil } from '../helpers/errorUtil';
+export interface ZodStringDef extends z.ZodTypeDef {
+    t: z.ZodTypes.string;
+    validation: {
+        uuid?: true;
+        custom?: ((val: any) => boolean)[];
+    };
+}
+export declare class ZodString extends z.ZodType<string, ZodStringDef> {
+    toJSON: () => ZodStringDef;
+    min: (minLength: number, message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    max: (maxLength: number, message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    length(len: number, message?: errorUtil.ErrMessage): this;
+    protected _regex: (regex: RegExp, validation: StringValidation, message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    email: (message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    url: (message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    uuid: (message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    regex: (regexp: RegExp, message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    nonempty: (message?: string | {
+        message?: string | undefined;
+    } | undefined) => this;
+    static create: () => ZodString;
+}
diff --git a/app/lib/src/types/string.js b/app/lib/src/types/string.js
new file mode 100644
index 0000000..4afee27
--- /dev/null
+++ b/app/lib/src/types/string.js
@@ -0,0 +1,88 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+// import { ZodUndefined } from './undefined';
+// import { ZodNull } from './null';
+// import { ZodUnion } from './union';
+var ZodError_1 = require("../ZodError");
+var errorUtil_1 = require("../helpers/errorUtil");
+var emailRegex = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i;
+var uuidRegex = /([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}){1}/i;
+var ZodString = /** @class */ (function (_super) {
+    __extends(ZodString, _super);
+    function ZodString() {
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.toJSON = function () { return _this._def; };
+        _this.min = function (minLength, message) {
+            return _this._refinement(__assign({ check: function (data) { return data.length >= minLength; }, code: ZodError_1.ZodErrorCode.too_small, minimum: minLength, type: 'string', inclusive: true }, errorUtil_1.errorUtil.errToObj(message)));
+        };
+        _this.max = function (maxLength, message) {
+            return _this._refinement(__assign({ check: function (data) { return data.length <= maxLength; }, code: ZodError_1.ZodErrorCode.too_big, maximum: maxLength, type: 'string', inclusive: true }, errorUtil_1.errorUtil.errToObj(message)));
+        };
+        _this._regex = function (regex, validation, message) {
+            return _this._refinement(__assign({ validation: validation, code: ZodError_1.ZodErrorCode.invalid_string, check: function (data) { return regex.test(data); } }, errorUtil_1.errorUtil.errToObj(message)));
+        };
+        _this.email = function (message) { return _this._regex(emailRegex, 'email', message); };
+        _this.url = function (message) {
+            return _this._refinement(__assign({ check: function (data) {
+                    try {
+                        new URL(data);
+                        return true;
+                    }
+                    catch (_a) {
+                        return false;
+                    }
+                }, code: ZodError_1.ZodErrorCode.invalid_string, validation: 'url' }, errorUtil_1.errorUtil.errToObj(message)));
+        };
+        // url = (message?: errorUtil.ErrMessage) => this._regex(urlRegex, 'url', message);
+        _this.uuid = function (message) { return _this._regex(uuidRegex, 'uuid', message); };
+        _this.regex = function (regexp, message) { return _this._regex(regexp, 'regex', message); };
+        _this.nonempty = function (message) { return _this.min(1, errorUtil_1.errorUtil.errToObj(message)); };
+        return _this;
+    }
+    ZodString.prototype.length = function (len, message) {
+        return this.min(len, message).max(len, message);
+    };
+    ZodString.create = function () {
+        return new ZodString({
+            t: z.ZodTypes.string,
+            validation: {},
+        });
+    };
+    return ZodString;
+}(z.ZodType));
+exports.ZodString = ZodString;
+//# sourceMappingURL=string.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/string.js.map b/app/lib/src/types/string.js.map
new file mode 100644
index 0000000..56c3513
--- /dev/null
+++ b/app/lib/src/types/string.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"string.js","sourceRoot":"","sources":["../../../src/types/string.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/lib/src/types/tuple.d.ts b/app/lib/src/types/tuple.d.ts
new file mode 100644
index 0000000..f06568e
--- /dev/null
+++ b/app/lib/src/types/tuple.d.ts
@@ -0,0 +1,15 @@
+import * as z from './base';
+export declare type TypeOfTuple<T extends [z.ZodTypeAny, ...z.ZodTypeAny[]] | []> = {
+    [k in keyof T]: T[k] extends z.ZodType<infer U> ? U : never;
+};
+export interface ZodTupleDef<T extends [z.ZodTypeAny, ...z.ZodTypeAny[]] | [] = [z.ZodTypeAny, ...z.ZodTypeAny[]]> extends z.ZodTypeDef {
+    t: z.ZodTypes.tuple;
+    items: T;
+}
+export declare class ZodTuple<T extends [z.ZodTypeAny, ...z.ZodTypeAny[]] | [] = [z.ZodTypeAny, ...z.ZodTypeAny[]]> extends z.ZodType<TypeOfTuple<T>, ZodTupleDef<T>> {
+    toJSON: () => {
+        t: z.ZodTypes.tuple;
+        items: any[];
+    };
+    static create: <T_1 extends [z.ZodType<any, any>, ...z.ZodType<any, any>[]] | []>(schemas: T_1) => ZodTuple<T_1>;
+}
diff --git a/app/lib/src/types/tuple.js b/app/lib/src/types/tuple.js
new file mode 100644
index 0000000..fcac4ac
--- /dev/null
+++ b/app/lib/src/types/tuple.js
@@ -0,0 +1,45 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var ZodTuple = /** @class */ (function (_super) {
+    __extends(ZodTuple, _super);
+    function ZodTuple() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.toJSON = function () { return ({
+            t: _this._def.t,
+            items: _this._def.items.map(function (item) { return item.toJSON(); }),
+        }); };
+        return _this;
+    }
+    // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+    // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+    ZodTuple.create = function (schemas) {
+        return new ZodTuple({
+            t: z.ZodTypes.tuple,
+            items: schemas,
+        });
+    };
+    return ZodTuple;
+}(z.ZodType));
+exports.ZodTuple = ZodTuple;
+//# sourceMappingURL=tuple.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/tuple.js.map b/app/lib/src/types/tuple.js.map
new file mode 100644
index 0000000..ac94ce8
--- /dev/null
+++ b/app/lib/src/types/tuple.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"tuple.js","sourceRoot":"","sources":["../../../src/types/tuple.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAe5B;IAEU,4BAAyC;IAFnD;QAAA,qEAkBC;QAfC,YAAM,GAAG,cAAM,OAAA,CAAC;YACd,CAAC,EAAE,KAAI,CAAC,IAAI,CAAC,CAAC;YACd,KAAK,EAAG,KAAI,CAAC,IAAI,CAAC,KAAe,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,MAAM,EAAE,EAAb,CAAa,CAAC;SAC7D,CAAC,EAHa,CAGb,CAAC;;IAYL,CAAC;IAVC,6GAA6G;IAE7G,oGAAoG;IAE7F,eAAM,GAAG,UAAmD,OAAU;QAC3E,OAAO,IAAI,QAAQ,CAAC;YAClB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK;YACnB,KAAK,EAAE,OAAO;SACf,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,eAAC;CAAA,AAlBD,CAEU,CAAC,CAAC,OAAO,GAgBlB;AAlBY,4BAAQ"}
\ No newline at end of file
diff --git a/app/lib/src/types/undefined.d.ts b/app/lib/src/types/undefined.d.ts
new file mode 100644
index 0000000..cd43fb2
--- /dev/null
+++ b/app/lib/src/types/undefined.d.ts
@@ -0,0 +1,8 @@
+import * as z from './base';
+export interface ZodUndefinedDef extends z.ZodTypeDef {
+    t: z.ZodTypes.undefined;
+}
+export declare class ZodUndefined extends z.ZodType<undefined> {
+    toJSON: () => z.ZodTypeDef;
+    static create: () => ZodUndefined;
+}
diff --git a/app/lib/src/types/undefined.js b/app/lib/src/types/undefined.js
new file mode 100644
index 0000000..b2771f5
--- /dev/null
+++ b/app/lib/src/types/undefined.js
@@ -0,0 +1,41 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var ZodUndefined = /** @class */ (function (_super) {
+    __extends(ZodUndefined, _super);
+    function ZodUndefined() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.toJSON = function () { return _this._def; };
+        return _this;
+    }
+    // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+    // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+    ZodUndefined.create = function () {
+        return new ZodUndefined({
+            t: z.ZodTypes.undefined,
+        });
+    };
+    return ZodUndefined;
+}(z.ZodType));
+exports.ZodUndefined = ZodUndefined;
+//# sourceMappingURL=undefined.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/undefined.js.map b/app/lib/src/types/undefined.js.map
new file mode 100644
index 0000000..b123577
--- /dev/null
+++ b/app/lib/src/types/undefined.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"undefined.js","sourceRoot":"","sources":["../../../src/types/undefined.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAQ5B;IAAkC,gCAAoB;IAAtD;QAAA,qEAYC;QAXC,YAAM,GAAG,cAAM,OAAA,KAAI,CAAC,IAAI,EAAT,CAAS,CAAC;;IAW3B,CAAC;IATC,6GAA6G;IAE7G,oGAAoG;IAE7F,mBAAM,GAAG;QACd,OAAO,IAAI,YAAY,CAAC;YACtB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS;SACxB,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,mBAAC;CAAA,AAZD,CAAkC,CAAC,CAAC,OAAO,GAY1C;AAZY,oCAAY"}
\ No newline at end of file
diff --git a/app/lib/src/types/union.d.ts b/app/lib/src/types/union.d.ts
new file mode 100644
index 0000000..530674b
--- /dev/null
+++ b/app/lib/src/types/union.d.ts
@@ -0,0 +1,12 @@
+import * as z from './base';
+export interface ZodUnionDef<T extends [z.ZodTypeAny, z.ZodTypeAny, ...z.ZodTypeAny[]] = [z.ZodTypeAny, z.ZodTypeAny, ...z.ZodTypeAny[]]> extends z.ZodTypeDef {
+    t: z.ZodTypes.union;
+    options: T;
+}
+export declare class ZodUnion<T extends [z.ZodTypeAny, z.ZodTypeAny, ...z.ZodTypeAny[]]> extends z.ZodType<T[number]['_type'], ZodUnionDef<T>> {
+    toJSON: () => {
+        t: z.ZodTypes.union;
+        options: object[];
+    };
+    static create: <T_1 extends [z.ZodType<any, any>, z.ZodType<any, any>, ...z.ZodType<any, any>[]]>(types: T_1) => ZodUnion<T_1>;
+}
diff --git a/app/lib/src/types/union.js b/app/lib/src/types/union.js
new file mode 100644
index 0000000..aae5f0c
--- /dev/null
+++ b/app/lib/src/types/union.js
@@ -0,0 +1,48 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var ZodUnion = /** @class */ (function (_super) {
+    __extends(ZodUnion, _super);
+    function ZodUnion() {
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.toJSON = function () { return ({
+            t: _this._def.t,
+            options: _this._def.options.map(function (x) { return x.toJSON(); }),
+        }); };
+        return _this;
+    }
+    // distribute = <F extends (arg: T[number]) => z.ZodTypeAny>(f: F): ZodUnion<{ [k in keyof T]: ReturnType<F> }> => {
+    //   return ZodUnion.create(this._def.options.map(f) as any);
+    // };
+    ZodUnion.create = function (types) {
+        return new ZodUnion({
+            t: z.ZodTypes.union,
+            options: types,
+        });
+    };
+    return ZodUnion;
+}(z.ZodType));
+exports.ZodUnion = ZodUnion;
+//# sourceMappingURL=union.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/union.js.map b/app/lib/src/types/union.js.map
new file mode 100644
index 0000000..bf61322
--- /dev/null
+++ b/app/lib/src/types/union.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"union.js","sourceRoot":"","sources":["../../../src/types/union.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAW5B;IAAyF,4BAGxF;IAHD;QAIE,6GAA6G;QAJ/G,qEAuBC;QAjBC,oGAAoG;QAEpG,YAAM,GAAG,cAAM,OAAA,CAAC;YACd,CAAC,EAAE,KAAI,CAAC,IAAI,CAAC,CAAC;YACd,OAAO,EAAE,KAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,EAAE,EAAV,CAAU,CAAC;SAChD,CAAC,EAHa,CAGb,CAAC;;IAYL,CAAC;IAVC,oHAAoH;IACpH,6DAA6D;IAC7D,KAAK;IAEE,eAAM,GAAG,UAA4D,KAAQ;QAClF,OAAO,IAAI,QAAQ,CAAC;YAClB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK;YACnB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,eAAC;CAAA,AAvBD,CAAyF,CAAC,CAAC,OAAO,GAuBjG;AAvBY,4BAAQ"}
\ No newline at end of file
diff --git a/app/lib/src/types/unknown.d.ts b/app/lib/src/types/unknown.d.ts
new file mode 100644
index 0000000..31a4fb0
--- /dev/null
+++ b/app/lib/src/types/unknown.d.ts
@@ -0,0 +1,8 @@
+import * as z from './base';
+export interface ZodUnknownDef extends z.ZodTypeDef {
+    t: z.ZodTypes.unknown;
+}
+export declare class ZodUnknown extends z.ZodType<unknown, ZodUnknownDef> {
+    toJSON: () => ZodUnknownDef;
+    static create: () => ZodUnknown;
+}
diff --git a/app/lib/src/types/unknown.js b/app/lib/src/types/unknown.js
new file mode 100644
index 0000000..05b5062
--- /dev/null
+++ b/app/lib/src/types/unknown.js
@@ -0,0 +1,41 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var ZodUnknown = /** @class */ (function (_super) {
+    __extends(ZodUnknown, _super);
+    function ZodUnknown() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.toJSON = function () { return _this._def; };
+        return _this;
+    }
+    ZodUnknown.create = function () {
+        return new ZodUnknown({
+            t: z.ZodTypes.unknown,
+        });
+    };
+    return ZodUnknown;
+}(z.ZodType));
+exports.ZodUnknown = ZodUnknown;
+//# sourceMappingURL=unknown.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/unknown.js.map b/app/lib/src/types/unknown.js.map
new file mode 100644
index 0000000..32b32ec
--- /dev/null
+++ b/app/lib/src/types/unknown.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unknown.js","sourceRoot":"","sources":["../../../src/types/unknown.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAS5B;IAAgC,8BAAiC;IAAjE;QAAA,qEAUC;QATC,6GAA6G;QAC7G,oGAAoG;QACpG,YAAM,GAAG,cAAM,OAAA,KAAI,CAAC,IAAI,EAAT,CAAS,CAAC;;IAO3B,CAAC;IALQ,iBAAM,GAAG;QACd,OAAO,IAAI,UAAU,CAAC;YACpB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO;SACtB,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,iBAAC;CAAA,AAVD,CAAgC,CAAC,CAAC,OAAO,GAUxC;AAVY,gCAAU"}
\ No newline at end of file
diff --git a/app/lib/src/types/void.d.ts b/app/lib/src/types/void.d.ts
new file mode 100644
index 0000000..1754a77
--- /dev/null
+++ b/app/lib/src/types/void.d.ts
@@ -0,0 +1,8 @@
+import * as z from './base';
+export interface ZodVoidDef extends z.ZodTypeDef {
+    t: z.ZodTypes.void;
+}
+export declare class ZodVoid extends z.ZodType<void, ZodVoidDef> {
+    toJSON: () => ZodVoidDef;
+    static create: () => ZodVoid;
+}
diff --git a/app/lib/src/types/void.js b/app/lib/src/types/void.js
new file mode 100644
index 0000000..96c5794
--- /dev/null
+++ b/app/lib/src/types/void.js
@@ -0,0 +1,41 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var z = __importStar(require("./base"));
+var ZodVoid = /** @class */ (function (_super) {
+    __extends(ZodVoid, _super);
+    function ZodVoid() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        // opt optional: () => ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        // null nullable: () => ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.toJSON = function () { return _this._def; };
+        return _this;
+    }
+    ZodVoid.create = function () {
+        return new ZodVoid({
+            t: z.ZodTypes.void,
+        });
+    };
+    return ZodVoid;
+}(z.ZodType));
+exports.ZodVoid = ZodVoid;
+//# sourceMappingURL=void.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/void.js.map b/app/lib/src/types/void.js.map
new file mode 100644
index 0000000..468e526
--- /dev/null
+++ b/app/lib/src/types/void.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"void.js","sourceRoot":"","sources":["../../../src/types/void.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAS5B;IAA6B,2BAA2B;IAAxD;QAAA,qEAUC;QATC,6GAA6G;QAC7G,oGAAoG;QACpG,YAAM,GAAG,cAAM,OAAA,KAAI,CAAC,IAAI,EAAT,CAAS,CAAC;;IAO3B,CAAC;IALQ,cAAM,GAAG;QACd,OAAO,IAAI,OAAO,CAAC;YACjB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;SACnB,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,cAAC;CAAA,AAVD,CAA6B,CAAC,CAAC,OAAO,GAUrC;AAVY,0BAAO"}
\ No newline at end of file
diff --git a/app/lib/tsconfig.package.json b/app/lib/tsconfig.package.json
new file mode 100644
index 0000000..0baddf2
--- /dev/null
+++ b/app/lib/tsconfig.package.json
@@ -0,0 +1,7 @@
+{
+    "extends": "./tsconfig.json",
+    "exclude": [
+        "node_modules",
+        "**/__tests__/"
+    ]
+}
diff --git a/tmp/agent-patch-flux-commit-fc48a85d.1-of-1.2026-02-27__21-30-28__gpt-5-3-codex/app/src/parser.ts b/app/src/parser.ts
index 64e07d1..29f549d 100644
--- a/tmp/agent-patch-flux-commit-fc48a85d.1-of-1.2026-02-27__21-30-28__gpt-5-3-codex/app/src/parser.ts
+++ b/app/src/parser.ts
@@ -5,11 +5,21 @@ import { util } from './helpers/util';
 import { ZodErrorMap, defaultErrorMap } from './defaultErrorMap';
 
 export type ParseParams = {
-  seen?: { schema: any; objects: any[] }[];
+  seen?: {
+    schema: any;
+    objects: {
+      object: any;
+      visits: number;
+      inProgress: number;
+      error?: ZodError;
+    }[];
+  }[];
   path?: (string | number)[];
   errorMap?: ZodErrorMap;
 };
 
+const MAX_SEEN_RECURSION_VISITS = 3;
+
 export const getParsedType = (data: any): ZodParsedType => {
   if (typeof data === 'string') return 'string';
   if (typeof data === 'number') {
@@ -89,369 +99,404 @@ export const ZodParser = (schemaDef: z.ZodTypeDef) => (
   const parsedType = getParsedType(obj);
 
   const schemaSeen = params.seen.find(x => x.schema === schemaDef);
+  let objectSeen:
+    | {
+        object: any;
+        visits: number;
+        inProgress: number;
+        error?: ZodError;
+      }
+    | undefined;
   const isPrimitive = typeof obj !== 'object' || obj === null;
   if (isPrimitive) {
   } else if (schemaSeen) {
-    if (schemaSeen.objects.indexOf(obj) !== -1) {
-      return obj;
+    objectSeen = schemaSeen.objects.find(entry => entry.object === obj);
+    if (objectSeen) {
+      if (objectSeen.inProgress > 0) {
+        if (objectSeen.error) {
+          throw objectSeen.error;
+        }
+        if (objectSeen.visits >= MAX_SEEN_RECURSION_VISITS) {
+          return obj;
+        }
+      }
+      objectSeen.visits += 1;
+      objectSeen.inProgress += 1;
     } else {
-      schemaSeen.objects.push(obj);
+      objectSeen = { object: obj, visits: 1, inProgress: 1 };
+      schemaSeen.objects.push(objectSeen);
     }
   } else {
-    params.seen.push({ schema: schemaDef, objects: [obj] });
+    objectSeen = { object: obj, visits: 1, inProgress: 1 };
+    params.seen.push({ schema: schemaDef, objects: [objectSeen] });
   }
 
-  const error = new ZodError([]);
-  let returnValue: any = obj;
+  try {
+    const error = new ZodError([]);
+    let returnValue: any = obj;
 
-  switch (def.t) {
-    case z.ZodTypes.string:
-      if (parsedType !== ZodParsedType.string) {
-        error.addError(
-          makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.string, received: parsedType }),
-        );
-        throw error;
-      }
-      break;
-    case z.ZodTypes.number:
-      if (parsedType !== ZodParsedType.number) {
-        error.addError(
-          makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.number, received: parsedType }),
-        );
-        throw error;
-      }
-      if (Number.isNaN(obj)) {
-        error.addError(
-          makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.number, received: ZodParsedType.nan }),
-        );
-        throw error;
-      }
-      break;
-    case z.ZodTypes.bigint:
-      if (parsedType !== ZodParsedType.bigint) {
-        error.addError(
-          makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.number, received: parsedType }),
-        );
-        throw error;
-      }
-      break;
-    case z.ZodTypes.boolean:
-      if (parsedType !== ZodParsedType.boolean) {
-        error.addError(
-          makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.boolean, received: parsedType }),
-        );
-        throw error;
-      }
-      break;
-    case z.ZodTypes.undefined:
-      if (parsedType !== ZodParsedType.undefined) {
-        error.addError(
-          makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.undefined, received: parsedType }),
-        );
-        throw error;
-      }
-      break;
-    case z.ZodTypes.null:
-      if (parsedType !== ZodParsedType.null) {
-        error.addError(
-          makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.null, received: parsedType }),
-        );
-        throw error;
-      }
-      break;
-    case z.ZodTypes.any:
-      break;
-    case z.ZodTypes.unknown:
-      break;
-    case z.ZodTypes.void:
-      if (parsedType !== ZodParsedType.undefined && parsedType !== ZodParsedType.null) {
-        error.addError(
-          makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.void, received: parsedType }),
-        );
-        throw error;
-      }
-      break;
-    case z.ZodTypes.array:
-      if (parsedType !== ZodParsedType.array) {
-        error.addError(
-          makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.array, received: parsedType }),
-        );
-        throw error;
-      }
-      const data: any[] = obj;
-      if (def.nonempty === true && obj.length === 0) {
-        error.addError(makeError({ code: ZodErrorCode.nonempty_array_is_empty }));
-        throw error;
-      }
-      data.map((item, i) => {
-        try {
-          const parsedItem = def.type.parse(item, { ...params, path: [...params.path, i] });
-          return parsedItem;
-        } catch (err) {
-          const zerr: ZodError = err;
-          error.addErrors(zerr.errors);
+    switch (def.t) {
+      case z.ZodTypes.string:
+        if (parsedType !== ZodParsedType.string) {
+          error.addError(
+            makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.string, received: parsedType }),
+          );
+          throw error;
         }
-      });
-      if (!error.isEmpty) {
-        throw error;
-      }
-      break;
-    case z.ZodTypes.object:
-      if (parsedType !== ZodParsedType.object) {
-        error.addError(
-          makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.object, received: parsedType }),
-        );
-        throw error;
-      }
-
-      const shape = def.shape();
-      if (def.params.strict) {
-        const shapeKeys = Object.keys(shape);
-        const objKeys = Object.keys(obj);
-        const extraKeys = objKeys.filter(k => shapeKeys.indexOf(k) === -1);
-
-        if (extraKeys.length) {
-          error.addError(makeError({ code: ZodErrorCode.unrecognized_keys, keys: extraKeys }));
+        break;
+      case z.ZodTypes.number:
+        if (parsedType !== ZodParsedType.number) {
+          error.addError(
+            makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.number, received: parsedType }),
+          );
+          throw error;
         }
-      }
-
-      for (const key in shape) {
-        try {
-          def.shape()[key].parse(obj[key], { ...params, path: [...params.path, key] });
-        } catch (err) {
-          const zerr: ZodError = err;
-          error.addErrors(zerr.errors);
+        if (Number.isNaN(obj)) {
+          error.addError(
+            makeError({
+              code: ZodErrorCode.invalid_type,
+              expected: ZodParsedType.number,
+              received: ZodParsedType.nan,
+            }),
+          );
+          throw error;
         }
-      }
-
-      break;
-    case z.ZodTypes.union:
-      let isValid = false;
-      const unionErrors: ZodError[] = [];
-      for (const option of def.options) {
-        try {
-          option.parse(obj, params);
-          isValid = true;
-        } catch (err) {
-          unionErrors.push(err);
+        break;
+      case z.ZodTypes.bigint:
+        if (parsedType !== ZodParsedType.bigint) {
+          error.addError(
+            makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.number, received: parsedType }),
+          );
+          throw error;
         }
-      }
-
-      if (!isValid) {
-        const filteredErrors = unionErrors.filter(err => {
-          return err.errors[0].code !== 'invalid_type';
+        break;
+      case z.ZodTypes.boolean:
+        if (parsedType !== ZodParsedType.boolean) {
+          error.addError(
+            makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.boolean, received: parsedType }),
+          );
+          throw error;
+        }
+        break;
+      case z.ZodTypes.undefined:
+        if (parsedType !== ZodParsedType.undefined) {
+          error.addError(
+            makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.undefined, received: parsedType }),
+          );
+          throw error;
+        }
+        break;
+      case z.ZodTypes.null:
+        if (parsedType !== ZodParsedType.null) {
+          error.addError(
+            makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.null, received: parsedType }),
+          );
+          throw error;
+        }
+        break;
+      case z.ZodTypes.any:
+        break;
+      case z.ZodTypes.unknown:
+        break;
+      case z.ZodTypes.void:
+        if (parsedType !== ZodParsedType.undefined && parsedType !== ZodParsedType.null) {
+          error.addError(
+            makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.void, received: parsedType }),
+          );
+          throw error;
+        }
+        break;
+      case z.ZodTypes.array:
+        if (parsedType !== ZodParsedType.array) {
+          error.addError(
+            makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.array, received: parsedType }),
+          );
+          throw error;
+        }
+        const data: any[] = obj;
+        if (def.nonempty === true && obj.length === 0) {
+          error.addError(makeError({ code: ZodErrorCode.nonempty_array_is_empty }));
+          throw error;
+        }
+        data.map((item, i) => {
+          try {
+            const parsedItem = def.type.parse(item, { ...params, path: [...params.path, i] });
+            return parsedItem;
+          } catch (err) {
+            const zerr: ZodError = err;
+            error.addErrors(zerr.errors);
+          }
         });
-        if (filteredErrors.length === 1) {
-          error.addErrors(filteredErrors[0].errors);
-        } else {
+        if (!error.isEmpty) {
+          throw error;
+        }
+        break;
+      case z.ZodTypes.object:
+        if (parsedType !== ZodParsedType.object) {
           error.addError(
-            makeError({
-              code: ZodErrorCode.invalid_union,
-              unionErrors: unionErrors,
-            }),
+            makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.object, received: parsedType }),
           );
+          throw error;
         }
-      }
-      break;
-    case z.ZodTypes.intersection:
-      try {
-        def.left.parse(obj, params);
-      } catch (err) {
-        error.addErrors(err.errors);
-      }
-
-      try {
-        def.right.parse(obj, params);
-      } catch (err) {
-        error.addErrors(err.errors);
-      }
 
-      break;
-
-    case z.ZodTypes.tuple:
-      if (parsedType !== ZodParsedType.array) {
-        error.addError(
-          makeError({ code: ZodErrorCode.invalid_type, expected: ZodParsedType.array, received: parsedType }),
-        );
-        throw error;
-      }
-      if (obj.length > def.items.length) {
-        error.addError(
-          makeError({ code: ZodErrorCode.too_big, maximum: def.items.length, inclusive: true, type: 'array' }),
-        );
-      } else if (obj.length < def.items.length) {
-        error.addError(
-          makeError({ code: ZodErrorCode.too_small, minimum: def.items.length, inclusive: true, type: 'array' }),
-        );
-      }
+        const shape = def.shape();
+        if (def.params.strict) {
+          const shapeKeys = Object.keys(shape);
+          const objKeys = Object.keys(obj);
+          const extraKeys = objKeys.filter(k => shapeKeys.indexOf(k) === -1);
 
-      const parsedTuple: any[] = [];
-      const tupleData: any[] = obj;
-      for (const index in tupleData) {
-        const item = tupleData[index];
-        const itemParser = def.items[index];
-        try {
-          parsedTuple.push(itemParser.parse(item, { ...params, path: [...params.path, index] }));
-        } catch (err) {
-          error.addErrors(err.errors);
+          if (extraKeys.length) {
+            error.addError(makeError({ code: ZodErrorCode.unrecognized_keys, keys: extraKeys }));
+          }
         }
-      }
-      break;
-    case z.ZodTypes.lazy:
-      const lazySchema = def.getter();
-      lazySchema.parse(obj, params);
-      break;
-    case z.ZodTypes.literal:
-      if (obj !== def.value) {
-        error.addError(makeError({ code: ZodErrorCode.invalid_literal_value, expected: def.value }));
-      }
-      break;
 
-    case z.ZodTypes.enum:
-      if (def.values.indexOf(obj) === -1) {
-        error.addError(
-          makeError({
-            code: ZodErrorCode.invalid_enum_value,
-            options: def.values,
-          }),
-        );
-      }
-      break;
-    case z.ZodTypes.nativeEnum:
-      if (util.getValidEnumValues(def.values).indexOf(obj) === -1) {
-        error.addError(
-          makeError({
-            code: ZodErrorCode.invalid_enum_value,
-            options: Object.values(def.values),
-          }),
-        );
-      }
-      break;
-    case z.ZodTypes.function:
-      if (parsedType !== ZodParsedType.function) {
-        error.addError(
-          makeError({
-            code: ZodErrorCode.invalid_type,
-            expected: ZodParsedType.function,
-            received: parsedType,
-          }),
-        );
-        throw error;
-      }
-      const validatedFunc = (...args: any[]) => {
-        try {
-          def.args.parse(args as any);
-        } catch (err) {
-          if (err instanceof ZodError) {
-            const argsError = new ZodError([]);
-            argsError.addError(
-              makeError({
-                code: ZodErrorCode.invalid_arguments,
-                argumentsError: err,
-              }),
-            );
-            throw argsError;
+        for (const key in shape) {
+          try {
+            def.shape()[key].parse(obj[key], { ...params, path: [...params.path, key] });
+          } catch (err) {
+            const zerr: ZodError = err;
+            error.addErrors(zerr.errors);
           }
-          throw err;
         }
 
-        const result = obj(...(args as any));
+        break;
+      case z.ZodTypes.union:
+        let isValid = false;
+        const unionErrors: ZodError[] = [];
+        for (const option of def.options) {
+          try {
+            option.parse(obj, params);
+            isValid = true;
+          } catch (err) {
+            unionErrors.push(err);
+          }
+        }
 
-        try {
-          return def.returns.parse(result);
-        } catch (err) {
-          if (err instanceof ZodError) {
-            const returnsError = new ZodError([]);
-            returnsError.addError(
+        if (!isValid) {
+          const filteredErrors = unionErrors.filter(err => {
+            return err.errors[0].code !== 'invalid_typ