STET

agent_patch

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

262144 bytes

Back to adjudication
diff --git a/tmp/agent-patch-flux-commit-a8580f2b.1-of-1.2026-02-27__21-30-28__gpt-5-4/app/README.md b/app/README.md
index ba2fad7..95dddbb 100644
--- a/tmp/agent-patch-flux-commit-a8580f2b.1-of-1.2026-02-27__21-30-28__gpt-5-4/app/README.md
+++ b/app/README.md
@@ -31,6 +31,7 @@ If you find this package useful, leave a star to help more folks find it ⭐️
     - [.nonstrict](#unknown-keys)
     - [.merge](#merging)
     - [.augment](#augmentation)
+    - [.partial/.deepPartial](#masking)
     - [.pick/.omit](#masking)
   - [Records](#records)
   - [Arrays](#arrays)
@@ -197,7 +198,7 @@ dogSchema.parse({
   name: 'Spot',
   neutered: true,
   color: 'brown',
-}); // Error(`Unexpected keys in object: 'color'`)
+}); // Error(`color`: Unexpected key in object)
 ```
 
 This is an intentional decision to make Zod's behavior consistent with TypeScript. Consider this:
@@ -314,6 +315,33 @@ const Recipe = z.object({
 
 Inspired by TypeScript's built-in `Pick` and `Omit` utility types, all Zod object schemas have `.pick` and `.omit` methods that return a "masked" version of the schema.
 
+To make every key optional, use `.partial()`.
+
+```ts
+const RecipeDraft = Recipe.partial();
+
+type RecipeDraft = z.infer<typeof RecipeDraft>;
+// => { id?: string | undefined, name?: string | undefined, ingredients?: string[] | undefined }
+```
+
+If you want that optionality to recurse through nested object shapes, use `.deepPartial()`.
+
+```ts
+const User = z.object({
+  profile: z.object({
+    name: z.string(),
+    settings: z.object({
+      theme: z.string(),
+    }),
+  }),
+});
+
+const UserPatch = User.deepPartial();
+
+type UserPatch = z.infer<typeof UserPatch>;
+// => { profile?: { name?: string | undefined, settings?: { theme?: string | undefined } | undefined } | undefined }
+```
+
 To only keep certain keys, use `.pick`.
 
 ```ts
diff --git a/app/lib/src/ZodError.d.ts b/app/lib/src/ZodError.d.ts
new file mode 100644
index 0000000..002ef76
--- /dev/null
+++ b/app/lib/src/ZodError.d.ts
@@ -0,0 +1,20 @@
+declare type ZodErrorArray = {
+    path: (string | number)[];
+    message: string;
+}[];
+export declare class ZodError extends Error {
+    errors: ZodErrorArray;
+    constructor();
+    static create: (errors: {
+        path: (string | number)[];
+        message: string;
+    }[]) => ZodError;
+    readonly message: string;
+    readonly empty: boolean;
+    static fromString: (message: string) => ZodError;
+    mergeChild: (pathElement: string | number, child: Error) => void;
+    bubbleUp: (pathElement: string | number) => ZodError;
+    addError: (path: string | number, message: string) => void;
+    merge: (error: ZodError) => void;
+}
+export {};
diff --git a/app/lib/src/ZodError.js b/app/lib/src/ZodError.js
new file mode 100644
index 0000000..644a0cb
--- /dev/null
+++ b/app/lib/src/ZodError.js
@@ -0,0 +1,81 @@
+"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 ZodError = /** @class */ (function (_super) {
+    __extends(ZodError, _super);
+    function ZodError() {
+        var _newTarget = this.constructor;
+        var _this = _super.call(this) || this;
+        _this.errors = [];
+        _this.mergeChild = function (pathElement, child) {
+            if (child instanceof ZodError) {
+                _this.merge(child.bubbleUp(pathElement));
+            }
+            else {
+                _this.merge(ZodError.fromString(child.message).bubbleUp(pathElement));
+            }
+        };
+        _this.bubbleUp = function (pathElement) {
+            return ZodError.create(_this.errors.map(function (err) {
+                return { path: [pathElement].concat(err.path), message: err.message };
+            }));
+        };
+        _this.addError = function (path, message) {
+            _this.errors = _this.errors.concat([{ path: path === '' ? [] : [path], message: message }]);
+        };
+        _this.merge = function (error) {
+            _this.errors = _this.errors.concat(error.errors);
+        };
+        // restore prototype chain
+        var actualProto = _newTarget.prototype;
+        Object.setPrototypeOf(_this, actualProto);
+        return _this;
+    }
+    Object.defineProperty(ZodError.prototype, "message", {
+        get: function () {
+            return this.errors
+                .map(function (_a) {
+                var path = _a.path, message = _a.message;
+                return path.length ? "`" + path.join('.') + "`: " + message : "" + message;
+            })
+                .join('\n');
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(ZodError.prototype, "empty", {
+        get: function () {
+            return this.errors.length === 0;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    ZodError.create = function (errors) {
+        var error = new ZodError();
+        error.errors = errors;
+        return error;
+    };
+    ZodError.fromString = function (message) {
+        return ZodError.create([
+            {
+                path: [],
+                message: message,
+            },
+        ]);
+    };
+    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..dd029d7
--- /dev/null
+++ b/app/lib/src/ZodError.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ZodError.js","sourceRoot":"","sources":["../../src/ZodError.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAKA;IAA8B,4BAAK;IAGjC;;QAAA,YACE,iBAAO,SAIR;QAPD,YAAM,GAAkB,EAAE,CAAC;QAoC3B,gBAAU,GAAG,UAAC,WAA4B,EAAE,KAAY;YACtD,IAAI,KAAK,YAAY,QAAQ,EAAE;gBAC7B,KAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;aACzC;iBAAM;gBACL,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;aACtE;QACH,CAAC,CAAC;QAEF,cAAQ,GAAG,UAAC,WAA4B;YACtC,OAAO,QAAQ,CAAC,MAAM,CACpB,KAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAA,GAAG;gBACjB,OAAO,EAAE,IAAI,GAAG,WAAW,SAAK,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;YACpE,CAAC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC;QAEF,cAAQ,GAAG,UAAC,IAAqB,EAAE,OAAe;YAChD,KAAI,CAAC,MAAM,GAAO,KAAI,CAAC,MAAM,SAAE,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,SAAA,EAAE,EAAC,CAAC;QAC/E,CAAC,CAAC;QAEF,WAAK,GAAG,UAAC,KAAe;YACtB,KAAI,CAAC,MAAM,GAAO,KAAI,CAAC,MAAM,QAAK,KAAK,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC,CAAC;QAtDA,0BAA0B;QAC1B,IAAM,WAAW,GAAG,WAAW,SAAS,CAAC;QACzC,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,WAAW,CAAC,CAAC;;IAC3C,CAAC;IAQD,sBAAI,6BAAO;aAAX;YACE,OAAO,IAAI,CAAC,MAAM;iBACf,GAAG,CAAC,UAAC,EAAiB;oBAAf,cAAI,EAAE,oBAAO;gBACnB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAO,OAAS,CAAC,CAAC,CAAC,KAAG,OAAS,CAAC;YAC1E,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;;;OAAA;IAED,sBAAI,2BAAK;aAAT;YACE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QAClC,CAAC;;;OAAA;IAhBM,eAAM,GAAG,UAAC,MAAqB;QACpC,IAAM,KAAK,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC7B,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAcK,mBAAU,GAAG,UAAC,OAAe;QAClC,OAAO,QAAQ,CAAC,MAAM,CAAC;YACrB;gBACE,IAAI,EAAE,EAAE;gBACR,OAAO,SAAA;aACR;SACF,CAAC,CAAC;IACL,CAAC,CAAC;IAyBJ,eAAC;CAAA,AA5DD,CAA8B,KAAK,GA4DlC;AA5DY,4BAAQ"}
\ 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..ea06264
--- /dev/null
+++ b/app/lib/src/helpers/Mocker.d.ts
@@ -0,0 +1,15 @@
+export declare class Mocker {
+    pick: (...args: any[]) => any;
+    readonly string: string;
+    readonly number: number;
+    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..cf279cf
--- /dev/null
+++ b/app/lib/src/helpers/Mocker.js
@@ -0,0 +1,105 @@
+"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, "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..c9bc568
--- /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;IAwCJ,CAAC;IAtCC,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,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,AA3CD,IA2CC;AA3CY,wBAAM"}
\ 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..332d497
--- /dev/null
+++ b/app/lib/src/helpers/maskUtil.d.ts
@@ -0,0 +1,39 @@
+import { Primitive } from './primitive';
+type AnyObject = {
+    [k: string]: any;
+};
+type IsAny<T> = any extends T ? (T extends any ? true : false) : false;
+type IsNever<T> = never extends T ? (T extends never ? true : false) : false;
+type IsTrue<T> = true extends T ? (T extends true ? true : false) : false;
+type IsObject<T> = T extends {
+    [k: string]: any;
+} ? (T extends Array<any> ? false : true) : false;
+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..8fe3e5a
--- /dev/null
+++ b/app/lib/src/helpers/maskUtil.js
@@ -0,0 +1,74 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+// type test = any[] extends Record<string, any> ? true : false;
+// type test1 = maskUtil.Params<{ name: string }>;
+// type test2 = maskUtil.Params<{ name: string }[]>;
+// type test3 = maskUtil.Params<{ name: string } | undefined>;
+// type test4 = maskUtil.Params<undefined>;
+// type test5 = maskUtil.Params<null>;
+// type test6 = maskUtil.Params<string>;
+// type test7 = maskUtil.Params<string | boolean | undefined>;
+// type test8 = maskUtil.Params<{ properties: { name: string; number: number } }>;
+// type test9 = IsObjectArray<[]>;
+// type test10 = IsObject<[]>;
+// type test11 = true extends IsObject<{ firstName: string; lastName: string }[]> ? true : false;
+// type test11b = true extends IsObjectArray<{ firstName: string; lastName: string }[]> ? true : false;
+// type test12 = maskUtil.Pick<{ firstName: string }, true>;
+// type test13 = maskUtil.Pick<{ firstName: string }, {}>;
+// type test14 = maskUtil.PickTest<{ firstName: string; lastName: string }, {}>;
+// type test15 = maskUtil.Pick<
+//   { firstName: string | undefined; lastName: string | undefined | null }[] | undefined,
+//   { firstName: true }
+// >;
+// type test16 = maskUtil.Pick<{ username: string; points: number }, { points: true }>;
+// type test16 = {} extends true ? true : false;
+// export namespace maskUtil {
+//   export type Params<T> = {
+//     never: never;
+//     undefined: never;
+//     primitive: true;
+//     primitivearr: true;
+//     tuple: true;
+//     array: true | (T extends Array<infer U> ? Params<U> : never);
+//     obj: { [k in keyof T]?: Params<T[k]> };
+//     unknown: unknown;
+//   }[T extends never
+//     ? 'never'
+//     : T extends undefined
+//     ? 'undefined'
+//     : T extends Primitive
+//     ? 'primitive'
+//     : T extends [any, ...any[]]
+//     ? 'tuple'
+//     : T extends Array<any>
+//     ? 'array'
+//     : T extends AnyObject
+//     ? 'obj'
+//     : 'unknown'];
+//   export type Mask<T, P extends Params<T>> = {
+//     false: never;
+//     true: T;
+//     inferenceerror: 'InferenceError! Please file an issue with your code.';
+//     primitiveerror: 'PrimitiveError! Please file an issue with your code';
+//     objarray: T extends Array<infer U> ? Mask<U, P>[] : never;
+//     obj: T extends AnyObject
+//       ? {
+//           [k in keyof T]: k extends keyof P ? Mask<T[k], P[k]> : never;
+//         }
+//       : never;
+//     unknown: 'MaskedTypeUnknownError! Please file an issue with your code.';
+//   }[P extends false
+//     ? 'false'
+//     : P extends true
+//     ? 'true'
+//     : P extends boolean
+//     ? 'inferenceerror'
+//     : T extends Primitive
+//     ? 'primitiveerror'
+//     : T extends Array<any>
+//     ? 'objarray'
+//     : T extends AnyObject
+//     ? 'obj'
+//     : 'unknown'];
+// }
+//# 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..02b8624
--- /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":";;AAkEA,gEAAgE;AAChE,kDAAkD;AAClD,oDAAoD;AACpD,8DAA8D;AAC9D,2CAA2C;AAC3C,sCAAsC;AACtC,wCAAwC;AACxC,8DAA8D;AAC9D,kFAAkF;AAClF,kCAAkC;AAClC,8BAA8B;AAC9B,iGAAiG;AACjG,uGAAuG;AACvG,4DAA4D;AAC5D,0DAA0D;AAE1D,gFAAgF;AAChF,+BAA+B;AAC/B,0FAA0F;AAC1F,wBAAwB;AACxB,KAAK;AACL,uFAAuF;AAEvF,gDAAgD;AAChD,8BAA8B;AAC9B,8BAA8B;AAC9B,oBAAoB;AACpB,wBAAwB;AACxB,uBAAuB;AACvB,0BAA0B;AAC1B,mBAAmB;AACnB,oEAAoE;AACpE,8CAA8C;AAC9C,wBAAwB;AACxB,sBAAsB;AACtB,gBAAgB;AAChB,4BAA4B;AAC5B,oBAAoB;AACpB,4BAA4B;AAC5B,oBAAoB;AACpB,kCAAkC;AAClC,gBAAgB;AAChB,6BAA6B;AAC7B,gBAAgB;AAChB,4BAA4B;AAC5B,cAAc;AACd,oBAAoB;AACpB,iDAAiD;AACjD,oBAAoB;AACpB,eAAe;AACf,8EAA8E;AAC9E,6EAA6E;AAC7E,iEAAiE;AACjE,+BAA+B;AAC/B,YAAY;AACZ,0EAA0E;AAC1E,YAAY;AACZ,iBAAiB;AACjB,+EAA+E;AAC/E,sBAAsB;AACtB,gBAAgB;AAChB,uBAAuB;AACvB,eAAe;AACf,0BAA0B;AAC1B,yBAAyB;AACzB,4BAA4B;AAC5B,yBAAyB;AACzB,6BAA6B;AAC7B,mBAAmB;AACnB,4BAA4B;AAC5B,cAAc;AACd,oBAAoB;AACpB,IAAI"}
\ 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..133bf83
--- /dev/null
+++ b/app/lib/src/helpers/objectUtil.d.ts
@@ -0,0 +1,47 @@
+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 Builtin = string | number | boolean | null | undefined | symbol | Date | Function;
+    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 FlattenObject<T extends ZodRawShape> = {
+        [k in keyof T]: T[k];
+    };
+    type NoNeverKeys<T extends object> = {
+        [k in keyof T]: T[k] extends never ? never : k;
+    }[keyof T];
+    type NoNever<T extends object> = {
+        [k in NoNeverKeys<T>]: T[k];
+    };
+    type ObjectType<T extends ZodRawShape> = FlattenObject<ObjectIntersection<NoNever<T>>>;
+    type DeepPartial<T> = T extends Builtin ? T : T extends Array<infer U> ? DeepPartialArray<U> : T extends object ? DeepPartialObject<T> : T;
+    interface DeepPartialArray<T> extends Array<DeepPartial<T>> {
+    }
+    type DeepPartialObject<T> = {
+        [k in keyof T]?: DeepPartial<T[k]>;
+    };
+    const mergeShapes: <U extends ZodRawShape, T extends ZodRawShape>(first: U, second: T) => T & U;
+    const mergeObjects: <FirstShape extends ZodRawShape, FirstParams extends ZodObjectParams>(first: ZodObject<FirstShape, FirstParams>) => <SecondShape extends ZodRawShape, SecondParams extends ZodObjectParams>(second: ZodObject<SecondShape, SecondParams>) => ZodObject<FirstShape & SecondShape, MergeObjectParams<FirstParams, SecondParams>>;
+}
diff --git a/app/lib/src/helpers/objectUtil.js b/app/lib/src/helpers/objectUtil.js
new file mode 100644
index 0000000..f5f52f4
--- /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,
+            // strict: first.params.strict && second.params.strict,
+            params: {
+                strict: first.params.strict && second.params.strict,
+            },
+            shape: 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..8b4c973
--- /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,CA4F1B;AA5FD,WAAiB,UAAU;IA4DZ,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,UAC1B,KAAyC,IACtC,OAAA,UACH,MAA4C;QAE5C,IAAM,WAAW,GAAG,WAAA,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrE,IAAM,MAAM,GAAQ,IAAI,kBAAS,CAAC;YAChC,CAAC,EAAE,eAAQ,CAAC,MAAM;YAClB,uDAAuD;YACvD,MAAM,EAAE;gBACN,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM;aACpD;YACD,KAAK,EAAE,WAAW;SACnB,CAAQ,CAAC;QACV,OAAO,MAAM,CAAC;IAChB,CAAC,EAbI,CAaJ,CAAC;AACJ,CAAC,EA5FgB,UAAU,GAAV,kBAAU,KAAV,kBAAU,QA4F1B"}
\ 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..38c1503
--- /dev/null
+++ b/app/lib/src/helpers/primitive.d.ts
@@ -0,0 +1 @@
+export declare type Primitive = string | number | 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..e44e90f
--- /dev/null
+++ b/app/lib/src/helpers/util.d.ts
@@ -0,0 +1,4 @@
+export declare namespace util {
+    type AssertEqual<T, Expected> = T extends Expected ? (Expected extends T ? true : never) : never;
+    function assertNever(_x: never): never;
+}
diff --git a/app/lib/src/helpers/util.js b/app/lib/src/helpers/util.js
new file mode 100644
index 0000000..0a79a4a
--- /dev/null
+++ b/app/lib/src/helpers/util.js
@@ -0,0 +1,10 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var util;
+(function (util) {
+    function assertNever(_x) {
+        throw new Error();
+    }
+    util.assertNever = assertNever;
+})(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..bc45ccd
--- /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,CAMpB;AAND,WAAiB,IAAI;IAGnB,SAAgB,WAAW,CAAC,EAAS;QACnC,MAAM,IAAI,KAAK,EAAE,CAAC;IACpB,CAAC;IAFe,gBAAW,cAE1B,CAAA;AACH,CAAC,EANgB,IAAI,GAAJ,YAAI,KAAJ,YAAI,QAMpB"}
\ No newline at end of file
diff --git a/app/lib/src/helpers/zodmaskUtil.d.ts b/app/lib/src/helpers/zodmaskUtil.d.ts
new file mode 100644
index 0000000..e69de29
diff --git a/app/lib/src/helpers/zodmaskUtil.js b/app/lib/src/helpers/zodmaskUtil.js
new file mode 100644
index 0000000..9fcd61e
--- /dev/null
+++ b/app/lib/src/helpers/zodmaskUtil.js
@@ -0,0 +1,59 @@
+"use strict";
+// import { ZodAny } from '../types/base';
+// import { ZodObject } from '../types/object';
+// import { ZodArray } from '..';
+// type AnyObject = { [k: string]: any };
+// export namespace zodmaskUtil {
+//   export type Params<T extends ZodAny> = {
+//     object: true | (T extends ZodObject<infer U, any> ? { [k in keyof U]?: Params<U[k]> } : 'objectnever');
+//     array: true | (T extends ZodArray<ZodObject<infer U, any>> ? Params<ZodObject<U, any>> : 'arraynever');
+//     rest: true;
+//   }[T extends ZodObject<any, any> ? 'object' : T extends ZodArray<ZodObject<any>> ? 'array' : 'rest'];
+//   export type pick<T extends ZodAny, P extends Params<T>> = {
+//     false: never;
+//     true: T;
+//     array: T extends ZodArray<infer U> ? ZodArray<pick<U, P>> : never;
+//     object: T extends ZodObject<infer U, infer V>
+//       ? P extends AnyObject
+//         ? ZodObject<{ [k in keyof P & keyof U]: pick<U[k], P[k]> }, V>
+//         : never
+//       : never;
+//     never: never;
+//   }[P extends false
+//     ? 'false'
+//     : P extends true
+//     ? 'true'
+//     : P extends boolean
+//     ? 'never'
+//     : P extends object
+//     ? T extends ZodObject<any, any>
+//       ? 'object'
+//       : T extends ZodArray<ZodObject<any, any>>
+//       ? 'array'
+//       : 'never'
+//     : 'never'];
+//   export type omit<T extends ZodAny, P extends Params<T>> = {
+//     false: T;
+//     true: never;
+//     array: T extends ZodArray<infer U> ? ZodArray<omit<U, P>> : never;
+//     object: T extends ZodObject<infer U, infer V>
+//       ? P extends AnyObject
+//         ? ZodObject<{ [k in keyof U]: k extends keyof P ? omit<U[k], P[k]> : U[k] }, V>
+//         : 'innernever'
+//       : 'outernever';
+//     never: never;
+//   }[P extends false
+//     ? 'false'
+//     : P extends true
+//     ? 'true'
+//     : P extends boolean
+//     ? 'never'
+//     : P extends AnyObject
+//     ? T extends ZodObject<any, any>
+//       ? 'object'
+//       : T extends ZodArray<ZodObject<any, any>>
+//       ? 'array'
+//       : 'never'
+//     : 'never'];
+// }
+//# sourceMappingURL=zodmaskUtil.js.map
\ No newline at end of file
diff --git a/app/lib/src/helpers/zodmaskUtil.js.map b/app/lib/src/helpers/zodmaskUtil.js.map
new file mode 100644
index 0000000..ab9e40f
--- /dev/null
+++ b/app/lib/src/helpers/zodmaskUtil.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"zodmaskUtil.js","sourceRoot":"","sources":["../../../src/helpers/zodmaskUtil.ts"],"names":[],"mappings":";AAAA,0CAA0C;AAC1C,+CAA+C;AAC/C,iCAAiC;AAEjC,yCAAyC;AAEzC,iCAAiC;AACjC,6CAA6C;AAC7C,8GAA8G;AAC9G,8GAA8G;AAC9G,kBAAkB;AAClB,yGAAyG;AAEzG,gEAAgE;AAChE,oBAAoB;AACpB,eAAe;AACf,yEAAyE;AACzE,oDAAoD;AACpD,8BAA8B;AAC9B,yEAAyE;AACzE,kBAAkB;AAClB,iBAAiB;AACjB,oBAAoB;AACpB,sBAAsB;AACtB,gBAAgB;AAChB,uBAAuB;AACvB,eAAe;AACf,0BAA0B;AAC1B,gBAAgB;AAChB,yBAAyB;AACzB,sCAAsC;AACtC,mBAAmB;AACnB,kDAAkD;AAClD,kBAAkB;AAClB,kBAAkB;AAClB,kBAAkB;AAElB,gEAAgE;AAChE,gBAAgB;AAChB,mBAAmB;AACnB,yEAAyE;AACzE,oDAAoD;AACpD,8BAA8B;AAC9B,0FAA0F;AAC1F,yBAAyB;AACzB,wBAAwB;AACxB,oBAAoB;AACpB,sBAAsB;AACtB,gBAAgB;AAChB,uBAAuB;AACvB,eAAe;AACf,0BAA0B;AAC1B,gBAAgB;AAChB,4BAA4B;AAC5B,sCAAsC;AACtC,mBAAmB;AACnB,kDAAkD;AAClD,kBAAkB;AAClB,kBAAkB;AAClB,kBAAkB;AAClB,IAAI"}
\ 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..aa92884
--- /dev/null
+++ b/app/lib/src/index.d.ts
@@ -0,0 +1,43 @@
+import { ZodString, ZodStringDef } from './types/string';
+import { ZodNumber, ZodNumberDef } from './types/number';
+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 { 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 } from './types/function';
+import { ZodLazy, ZodLazyDef } from './types/lazy';
+import { ZodLiteral, ZodLiteralDef } from './types/literal';
+import { ZodEnum, ZodEnumDef } from './types/enum';
+import { TypeOf, ZodType, ZodAny } from './types/base';
+import { ZodError } from './ZodError';
+declare type ZodDef = ZodStringDef | ZodNumberDef | ZodBooleanDef | ZodDateDef | ZodUndefinedDef | ZodNullDef | ZodArrayDef | ZodObjectDef | ZodUnionDef | ZodIntersectionDef | ZodTupleDef | ZodRecordDef | ZodLazyDef | ZodLiteralDef | ZodEnumDef;
+declare const stringType: () => ZodString;
+declare const numberType: () => ZodNumber;
+declare const booleanType: () => ZodBoolean;
+declare const dateType: () => ZodDate;
+declare const undefinedType: () => ZodUndefined;
+declare const nullType: () => ZodNull;
+declare const arrayType: <T extends ZodType<any, import("./types/base").ZodTypeDef>>(schema: T) => ZodArray<T>;
+declare const objectType: <T extends import("./types/base").ZodRawShape>(shape: T) => ZodObject<T, {
+    strict: true;
+}>;
+declare const unionType: <T extends [ZodType<any, import("./types/base").ZodTypeDef>, ZodType<any, import("./types/base").ZodTypeDef>, ...ZodType<any, import("./types/base").ZodTypeDef>[]]>(types: T) => ZodUnion<T>;
+declare const intersectionType: <T extends ZodType<any, import("./types/base").ZodTypeDef>, U extends ZodType<any, import("./types/base").ZodTypeDef>>(left: T, right: U) => ZodIntersection<T, U>;
+declare const tupleType: <T extends [ZodType<any, import("./types/base").ZodTypeDef>, ...ZodType<any, import("./types/base").ZodTypeDef>[]] | []>(schemas: T) => ZodTuple<T>;
+declare const recordType: <Value extends ZodType<any, import("./types/base").ZodTypeDef> = ZodType<any, import("./types/base").ZodTypeDef>>(valueType: Value) => ZodRecord<Value>;
+declare const functionType: <T extends ZodTuple<any>, U extends ZodType<any, import("./types/base").ZodTypeDef>>(args: T, returns: U) => ZodFunction<T, U>;
+declare const lazyType: <T extends ZodType<any, import("./types/base").ZodTypeDef>>(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 ostring: () => ZodUnion<[ZodString, ZodUndefined]>;
+declare const onumber: () => ZodUnion<[ZodNumber, ZodUndefined]>;
+declare const oboolean: () => ZodUnion<[ZodBoolean, ZodUndefined]>;
+export { stringType as string, numberType as number, booleanType as boolean, dateType as date, undefinedType as undefined, nullType as null, 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, ostring, onumber, oboolean, };
+export { ZodString, ZodNumber, ZodBoolean, ZodDate, ZodUndefined, ZodNull, ZodArray, ZodObject, ZodUnion, ZodIntersection, ZodTuple, ZodRecord, ZodFunction, ZodLazy, ZodLiteral, ZodEnum, ZodType, ZodAny, ZodDef, 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..d193665
--- /dev/null
+++ b/app/lib/src/index.js
@@ -0,0 +1,80 @@
+"use strict";
+/* ZOD */
+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 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 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 base_1 = require("./types/base");
+exports.ZodType = base_1.ZodType;
+var ZodError_1 = require("./ZodError");
+exports.ZodError = ZodError_1.ZodError;
+var stringType = string_1.ZodString.create;
+exports.string = stringType;
+var numberType = number_1.ZodNumber.create;
+exports.number = numberType;
+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 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;
+// const lazyobjectType = ZodLazyObject.create;
+// const recursionType = ZodObject.recursion;
+var literalType = literal_1.ZodLiteral.create;
+exports.literal = literalType;
+var enumType = enum_1.ZodEnum.create;
+exports.enum = enumType;
+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;
+//# 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..a13abeb
--- /dev/null
+++ b/app/lib/src/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,SAAS;;AAET,yCAAyD;AA0FvD,oBA1FO,kBAAS,CA0FP;AAzFX,yCAAyD;AA0FvD,oBA1FO,kBAAS,CA0FP;AAzFX,2CAA4D;AA0F1D,qBA1FO,oBAAU,CA0FP;AAzFZ,qCAAmD;AA0FjD,kBA1FO,cAAO,CA0FP;AAzFT,+CAAkE;AA0FhE,uBA1FO,wBAAY,CA0FP;AAzFd,qCAAmD;AA0FjD,kBA1FO,cAAO,CA0FP;AAzFT,uCAAsD;AA0FpD,mBA1FO,gBAAQ,CA0FP;AAzFV,yCAAyD;AA0FvD,oBA1FO,kBAAS,CA0FP;AAzFX,uCAAsD;AA0FpD,mBA1FO,gBAAQ,CA0FP;AAzFV,qDAA2E;AA0FzE,0BA1FO,8BAAe,CA0FP;AAzFjB,uCAAsD;AA0FpD,mBA1FO,gBAAQ,CA0FP;AAzFV,yCAAyD;AA0FvD,oBA1FO,kBAAS,CA0FP;AAzFX,6CAA+C;AA0F7C,sBA1FO,sBAAW,CA0FP;AAzFb,qCAAmD;AA0FjD,kBA1FO,cAAO,CA0FP;AAzFT,2CAA4D;AA2F1D,qBA3FO,oBAAU,CA2FP;AA1FZ,qCAAmD;AA2FjD,kBA3FO,cAAO,CA2FP;AA1FT,qCAAuD;AA2FrD,kBA3Fe,cAAO,CA2Ff;AA1FT,uCAAsC;AA6FpC,mBA7FO,mBAAQ,CA6FP;AAvEV,IAAM,UAAU,GAAG,kBAAS,CAAC,MAAM,CAAC;AA2BpB,4BAAM;AA1BtB,IAAM,UAAU,GAAG,kBAAS,CAAC,MAAM,CAAC;AA2BpB,4BAAM;AA1BtB,IAAM,WAAW,GAAG,oBAAU,CAAC,MAAM,CAAC;AA2BrB,8BAAO;AA1BxB,IAAM,QAAQ,GAAG,cAAO,CAAC,MAAM,CAAC;AA2BlB,wBAAI;AA1BlB,IAAM,aAAa,GAAG,wBAAY,CAAC,MAAM,CAAC;AA2BvB,kCAAS;AA1B5B,IAAM,QAAQ,GAAG,cAAO,CAAC,MAAM,CAAC;AA2BlB,wBAAI;AA1BlB,IAAM,SAAS,GAAG,gBAAQ,CAAC,MAAM,CAAC;AA2BnB,0BAAK;AA1BpB,IAAM,UAAU,GAAG,kBAAS,CAAC,MAAM,CAAC;AA2BpB,4BAAM;AA1BtB,IAAM,SAAS,GAAG,gBAAQ,CAAC,MAAM,CAAC;AA2BnB,0BAAK;AA1BpB,IAAM,gBAAgB,GAAG,8BAAe,CAAC,MAAM,CAAC;AA2B1B,wCAAY;AA1BlC,IAAM,SAAS,GAAG,gBAAQ,CAAC,MAAM,CAAC;AA2BnB,0BAAK;AA1BpB,IAAM,UAAU,GAAG,kBAAS,CAAC,MAAM,CAAC;AA2BpB,4BAAM;AA1BtB,IAAM,YAAY,GAAG,sBAAW,CAAC,MAAM,CAAC;AA2BtB,gCAAQ;AA1B1B,IAAM,QAAQ,GAAG,cAAO,CAAC,MAAM,CAAC;AA2BlB,wBAAI;AA1BlB,+CAA+C;AAC/C,6CAA6C;AAC7C,IAAM,WAAW,GAAG,oBAAU,CAAC,MAAM,CAAC;AA2BrB,8BAAO;AA1BxB,IAAM,QAAQ,GAAG,cAAO,CAAC,MAAM,CAAC;AA2BlB,wBAAI;AA1BlB,IAAM,OAAO,GAAG,cAAM,OAAA,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAvB,CAAuB,CAAC;AA2B5C,0BAAO;AA1BT,IAAM,OAAO,GAAG,cAAM,OAAA,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAvB,CAAuB,CAAC;AA2B5C,0BAAO;AA1BT,IAAM,QAAQ,GAAG,cAAM,OAAA,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAxB,CAAwB,CAAC;AA2B9C,4BAAQ"}
\ No newline at end of file
diff --git a/app/lib/src/masker.d.ts b/app/lib/src/masker.d.ts
new file mode 100644
index 0000000..aa4d4d4
--- /dev/null
+++ b/app/lib/src/masker.d.ts
@@ -0,0 +1,2 @@
+import * as z from './types/base';
+export declare const Masker: (schema: z.ZodType<any, z.ZodTypeDef>, params: any) => z.ZodType<any, z.ZodTypeDef>;
diff --git a/app/lib/src/masker.js b/app/lib/src/masker.js
new file mode 100644
index 0000000..4326bcf
--- /dev/null
+++ b/app/lib/src/masker.js
@@ -0,0 +1,142 @@
+"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("./types/base"));
+var _1 = require(".");
+// import { util } from './helpers/util';;
+// import { ZodArray } from './types/array';
+// import { ZodObject } from './types/object';
+// import { ZodUnion } from './types/union';
+// import { ZodIntersection } from './types/intersection';
+// import { ZodTuple } from './types/tuple';
+// import { ZodRecord } from './types/record';
+// import { ZodLazy } from './types/lazy';
+// import { ZodError } from './ZodError';
+var sampleParamVisitor_1 = require("./sampleParamVisitor");
+// import { ZodObject } from './types/object';
+// type Params = any; //{ [k: string]: boolean | Params } | boolean;
+exports.Masker = sampleParamVisitor_1.ParamVisitor(function (schema, params) {
+    var def = schema._def;
+    console.log("visiting " + def.t);
+    console.log("params: " + JSON.stringify(params, null, 2), null, 2);
+    if (def.t === z.ZodTypes.object) {
+        console.log(schema);
+        // console.log(JSON.stringify(params, null, 2));
+        var visitedShape = {};
+        for (var key in def.shape) {
+            if (params[key]) {
+                visitedShape[key] = def.shape[key];
+            }
+        }
+        return _1.ZodObject.create(visitedShape);
+    }
+    else {
+        return schema;
+    }
+});
+// export const Masker = (visit: (_schema: z.ZodAny, params: Params) => z.ZodAny) => (
+//   schema: z.ZodAny,
+//   params: Params,
+// ) => {
+//   const def: ZodDef = schema._def as any;
+//   if (params === true) return schema;
+//   if (typeof params !== 'object') throw new Error('Invalid params');
+//   if (Array.isArray(params)) throw new Error('Invalid params');
+//   switch (def.t) {
+//     case z.ZodTypes.string:
+//       return visit(schema, params);
+//     case z.ZodTypes.number:
+//       return visit(schema, params);
+//     case z.ZodTypes.boolean:
+//       return visit(schema, params);
+//     case z.ZodTypes.date:
+//       return visit(schema, params);
+//     case z.ZodTypes.undefined:
+//       return visit(schema, params);
+//     case z.ZodTypes.null:
+//       return visit(schema, params);
+//     case z.ZodTypes.array:
+//       return visit(
+//         new ZodArray({
+//           ...def,
+//           type: visit(def.type, params),
+//         }),
+//         params,
+//       );
+//     case z.ZodTypes.object:
+//       const visitedShape: any = {};
+//       for (const key in def.shape) {
+//         if (params[key]) {
+//           visitedShape[key] = visit(def.shape[key], params[key]);
+//           // if(params[key] === true){
+//           //   visitedShape[key] = def.shape[key]
+//           // }else if(typeof params === "object"){
+//           //   visitedShape[key] = visit(def.shape[key], params[key]);
+//           // }
+//         }
+//       }
+//       return visit(
+//         new ZodObject({
+//           ...def,
+//           shape: visitedShape,
+//         }),
+//         params,
+//       );
+//     case z.ZodTypes.union:
+//       return visit(
+//         new ZodUnion({
+//           ...def,
+//           options: def.options.map(option => visit(option, params)) as any,
+//         }),
+//         params,
+//       );
+//     case z.ZodTypes.intersection:
+//       return visit(
+//         new ZodIntersection({
+//           ...def,
+//           left: visit(def.left, params),
+//           right: visit(def.left, params),
+//         }),
+//         params,
+//       );
+//     case z.ZodTypes.tuple:
+//       return visit(
+//         new ZodTuple({
+//           ...def,
+//           items: def.items.map(item => visit(item, params)) as any,
+//         }),
+//         params,
+//       );
+//     case z.ZodTypes.record:
+//       return visit(
+//         new ZodRecord({
+//           ...def,
+//           valueType: visit(def.valueType, params),
+//         }),
+//         params,
+//       );
+//     case z.ZodTypes.lazy:
+//       return visit(
+//         new ZodLazy({
+//           ...def,
+//           getter: () => visit(def.getter(), params),
+//         }),
+//         params,
+//       );
+//     case z.ZodTypes.literal:
+//       return visit(schema, params);
+//     case z.ZodTypes.enum:
+//       return visit(schema, params);
+//     default:
+//       util.assertNever(def);
+//       break;
+//   }
+//   throw ZodError.fromString(`Unknown schema type.`);
+// };
+//# sourceMappingURL=masker.js.map
\ No newline at end of file
diff --git a/app/lib/src/masker.js.map b/app/lib/src/masker.js.map
new file mode 100644
index 0000000..8e8c3d9
--- /dev/null
+++ b/app/lib/src/masker.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"masker.js","sourceRoot":"","sources":["../../src/masker.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/lib/src/oldmasker.d.ts b/app/lib/src/oldmasker.d.ts
new file mode 100644
index 0000000..3ecbfba
--- /dev/null
+++ b/app/lib/src/oldmasker.d.ts
@@ -0,0 +1,2 @@
+import * as z from './types/base';
+export declare const applyMask: (schema: z.ZodType<any, z.ZodTypeDef>, mask: any, mode: "omit" | "pick") => any;
diff --git a/app/lib/src/oldmasker.js b/app/lib/src/oldmasker.js
new file mode 100644
index 0000000..94d4784
--- /dev/null
+++ b/app/lib/src/oldmasker.js
@@ -0,0 +1,70 @@
+"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("./types/base"));
+var array_1 = require("./types/array");
+var object_1 = require("./types/object");
+exports.applyMask = function (schema, mask, mode) {
+    var _def = schema._def;
+    var def = _def;
+    if (mask === true) {
+        return schema;
+    }
+    else if (typeof mask === 'object' && !Array.isArray(mask)) {
+        if (def.t === z.ZodTypes.array) {
+            if (def.type._def.t === z.ZodTypes.object) {
+                return new array_1.ZodArray({
+                    t: z.ZodTypes.array,
+                    nonempty: def.nonempty,
+                    type: exports.applyMask(def.type, mask, mode),
+                });
+            }
+            else {
+                throw new Error("You can only " + mode + " arrays of objects.");
+            }
+        }
+        else if (def.t === z.ZodTypes.object) {
+            var modShape = {};
+            var shape = def.shape;
+            if (mode === 'pick') {
+                if (mask === true)
+                    return shape;
+                for (var key in mask) {
+                    if (!Object.keys(shape).includes(key))
+                        throw new Error("Unknown key in pick: " + key);
+                    modShape[key] = exports.applyMask(shape[key], mask[key], mode);
+                }
+            }
+            if (mode === 'omit') {
+                for (var maskKey in mask) {
+                    if (!Object.keys(shape).includes(maskKey))
+                        throw new Error("Unknown key in omit: " + maskKey);
+                }
+                for (var key in shape) {
+                    if (mask[key] === true) {
+                        continue;
+                    }
+                    else if (typeof mask[key] === 'object') {
+                        modShape[key] = exports.applyMask(shape[key], mask[key], mode);
+                    }
+                    else {
+                        modShape[key] = shape[key];
+                    }
+                }
+            }
+            return new object_1.ZodObject({
+                t: z.ZodTypes.object,
+                params: def.params,
+                shape: modShape,
+            });
+        }
+    }
+    throw new Error("Invalid mask!\n\n" + JSON.stringify(mask, null, 2));
+};
+//# sourceMappingURL=oldmasker.js.map
\ No newline at end of file
diff --git a/app/lib/src/oldmasker.js.map b/app/lib/src/oldmasker.js.map
new file mode 100644
index 0000000..bd60969
--- /dev/null
+++ b/app/lib/src/oldmasker.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"oldmasker.js","sourceRoot":"","sources":["../../src/oldmasker.ts"],"names":[],"mappings":";;;;;;;;;AAAA,8CAAkC;AAClC,uCAAyC;AAEzC,yCAA2C;AAE9B,QAAA,SAAS,GAAG,UAAC,MAAgB,EAAE,IAAS,EAAE,IAAqB;IAC1E,IAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,IAAM,GAAG,GAAW,IAAW,CAAC;IAEhC,IAAI,IAAI,KAAK,IAAI,EAAE;QACjB,OAAO,MAAM,CAAC;KACf;SAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC3D,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE;YAC9B,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE;gBACzC,OAAO,IAAI,gBAAQ,CAAC;oBAClB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK;oBACnB,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,IAAI,EAAE,iBAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;iBACtC,CAAC,CAAC;aACJ;iBAAM;gBACL,MAAM,IAAI,KAAK,CAAC,kBAAgB,IAAI,wBAAqB,CAAC,CAAC;aAC5D;SACF;aAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE;YACtC,IAAM,QAAQ,GAAQ,EAAE,CAAC;YACzB,IAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YACxB,IAAI,IAAI,KAAK,MAAM,EAAE;gBACnB,IAAI,IAAI,KAAK,IAAI;oBAAE,OAAO,KAAK,CAAC;gBAChC,KAAK,IAAM,GAAG,IAAI,IAAI,EAAE;oBACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;wBAAE,MAAM,IAAI,KAAK,CAAC,0BAAwB,GAAK,CAAC,CAAC;oBACtF,QAAQ,CAAC,GAAG,CAAC,GAAG,iBAAS,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;iBACxD;aACF;YAED,IAAI,IAAI,KAAK,MAAM,EAAE;gBACnB,KAAK,IAAM,OAAO,IAAI,IAAI,EAAE;oBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;wBAAE,MAAM,IAAI,KAAK,CAAC,0BAAwB,OAAS,CAAC,CAAC;iBAC/F;gBACD,KAAK,IAAM,GAAG,IAAI,KAAK,EAAE;oBACvB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;wBACtB,SAAS;qBACV;yBAAM,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;wBACxC,QAAQ,CAAC,GAAG,CAAC,GAAG,iBAAS,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;qBACxD;yBAAM;wBACL,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;qBAC5B;iBACF;aACF;YACD,OAAO,IAAI,kBAAS,CAAC;gBACnB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM;gBACpB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,KAAK,EAAE,QAAQ;aAChB,CAAC,CAAC;SACJ;KACF;IACD,MAAM,IAAI,KAAK,CAAC,sBAAoB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAG,CAAC,CAAC;AACvE,CAAC,CAAC"}
\ 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..8e1f329
--- /dev/null
+++ b/app/lib/src/parser.d.ts
@@ -0,0 +1,8 @@
+import * as z from './types/base';
+export declare type ParseParams = {
+    seen: {
+        schema: any;
+        objects: any[];
+    }[];
+};
+export declare const ZodParser: (schemaDef: z.ZodTypeDef) => (obj: any, params?: ParseParams) => any;
diff --git a/app/lib/src/parser.js b/app/lib/src/parser.js
new file mode 100644
index 0000000..9e8f925
--- /dev/null
+++ b/app/lib/src/parser.js
@@ -0,0 +1,223 @@
+"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("./types/base"));
+var ZodError_1 = require("./ZodError");
+var util_1 = require("./helpers/util");
+exports.ZodParser = function (schemaDef) { return function (obj, params) {
+    if (params === void 0) { params = { seen: [] }; }
+    var def = schemaDef;
+    // const { seen } = params;
+    // const y:ZodObject<any> = "asdf" as any;
+    // console.log(`visit ${schemaDef.t}: ${typeof obj} - ${obj.name || ''}`);
+    // if (!['number', 'string', 'boolean', 'undefined'].includes(typeof obj)) {
+    var schemaSeen = params.seen.find(function (x) { return x.schema === schemaDef; });
+    if (schemaSeen) {
+        if (schemaSeen.objects.indexOf(obj) !== -1) {
+            // console.log(`seen ${typeof obj} before: ${obj.name}`);
+            return obj;
+        }
+        else {
+            schemaSeen.objects.push(obj);
+        }
+    }
+    else {
+        params.seen.push({ schema: schemaDef, objects: [obj] });
+    }
+    // }
+    switch (def.t) {
+        case z.ZodTypes.string:
+            if (typeof obj !== 'string')
+                throw ZodError_1.ZodError.fromString("Non-string type: " + typeof obj);
+            return obj;
+        case z.ZodTypes.number:
+            if (typeof obj !== 'number')
+                throw ZodError_1.ZodError.fromString("Non-number type: " + typeof obj);
+            if (Number.isNaN(obj)) {
+                throw ZodError_1.ZodError.fromString("Non-number type: NaN");
+            }
+            return obj;
+        case z.ZodTypes.boolean:
+            if (typeof obj !== 'boolean')
+                throw ZodError_1.ZodError.fromString("Non-boolean type: " + typeof obj);
+            return obj;
+        case z.ZodTypes.undefined:
+            if (obj !== undefined)
+                throw ZodError_1.ZodError.fromString("Non-undefined type:Found: " + typeof obj);
+            return undefined;
+        case z.ZodTypes.null:
+            if (obj !== null)
+                throw ZodError_1.ZodError.fromString("Non-null type: " + typeof obj);
+            return null;
+        case z.ZodTypes.array:
+            if (!Array.isArray(obj))
+                throw ZodError_1.ZodError.fromString("Non-array type: " + typeof obj);
+            var arrayError_1 = ZodError_1.ZodError.create([]);
+            if (def.nonempty === true && obj.length === 0) {
+                throw ZodError_1.ZodError.fromString('Array cannot be empty');
+            }
+            var parsedArray = obj.map(function (item, i) {
+                try {
+                    var parsedItem = def.type.parse(item, params);
+                    return parsedItem;
+                }
+                catch (err) {
+                    arrayError_1.mergeChild(i, err);
+                }
+            });
+            if (!arrayError_1.empty) {
+                // throw ZodError.fromString(arrayErrors.join('\n\n'));
+                throw arrayError_1;
+            }
+            return parsedArray;
+        case z.ZodTypes.object:
+            if (typeof obj !== 'object')
+                throw ZodError_1.ZodError.fromString("Non-object type: " + typeof obj);
+            if (obj === null)
+                throw ZodError_1.ZodError.fromString("Non-object type: null");
+            if (Array.isArray(obj))
+                throw ZodError_1.ZodError.fromString("Non-object type: array");
+            var shape = def.shape;
+            if (def.params.strict) {
+                var shapeKeys_1 = Object.keys(def.shape);
+                var objKeys = Object.keys(obj);
+                var extraKeys = objKeys.filter(function (k) { return shapeKeys_1.indexOf(k) === -1; });
+                if (extraKeys.length) {
+                    throw ZodError_1.ZodError.create(extraKeys.map(function (key) { return ({
+                        path: [key],
+                        message: "Unexpected key in object",
+                    }); }));
+                }
+            }
+            var parsedObject = {};
+            var objectError = ZodError_1.ZodError.create([]);
+            for (var key in shape) {
+                try {
+                    var parsedEntry = def.shape[key].parse(obj[key], params);
+                    parsedObject[key] = parsedEntry;
+                }
+                catch (err) {
+                    objectError.mergeChild(key, err);
+                }
+            }
+            if (!objectError.empty) {
+                throw objectError; //ZodError.fromString(objectErrors.join('\n'));
+            }
+            return parsedObject;
+        case z.ZodTypes.union:
+            for (var _i = 0, _a = def.options; _i < _a.length; _i++) {
+                var option = _a[_i];
+                try {
+                    return option.parse(obj, params);
+                    // return obj;
+                }
+                catch (err) { }
+            }
+            throw ZodError_1.ZodError.fromString("Type mismatch in union.\nReceived: " + JSON.stringify(obj, null, 2) + "\n\nExpected: " + def.options
+                .map(function (x) { return x._def.t; })
+                .join(' OR '));
+        case z.ZodTypes.intersection:
+            var errors = [];
+            try {
+                def.left.parse(obj, params);
+            }
+            catch (err) {
+                errors.push("Left side of intersection: " + err.message);
+            }
+            try {
+                def.right.parse(obj, params);
+            }
+            catch (err) {
+                errors.push("Right side of intersection: " + err.message);
+            }
+            if (!errors.length) {
+                return obj;
+            }
+            throw ZodError_1.ZodError.fromString(errors.join('\n'));
+        case z.ZodTypes.tuple:
+            if (!Array.isArray(obj)) {
+                // tupleError.addError('','Non-array type detected; invalid tuple.')
+                throw ZodError_1.ZodError.fromString('Non-array type detected; invalid tuple.');
+            }
+            if (def.items.length !== obj.length) {
+                // tupleError.addError('',`Incorrect number of elements in tuple: expected ${def.items.length}, got ${obj.length}`)
+                throw ZodError_1.ZodError.fromString("Incorrect number of elements in tuple: expected " + def.items.length + ", got " + obj.length);
+            }
+            var tupleError = ZodError_1.ZodError.create([]);
+            var parsedTuple = [];
+            for (var index in obj) {
+                var item = obj[index];
+                var itemParser = def.items[index];
+                try {
+                    parsedTuple.push(itemParser.parse(item, params));
+                }
+                catch (err) {
+                    tupleError.mergeChild(index, err);
+                }
+            }
+            if (!tupleError.empty) {
+                throw tupleError;
+            }
+            return parsedTuple;
+        case z.ZodTypes.lazy:
+            var lazySchema = def.getter();
+            return lazySchema.parse(obj, params);
+        // return obj;
+        case z.ZodTypes.literal:
+            // const literalValue = def.value;
+            // if (typeof literalValue === 'object' && obj !== null) throw ZodError.fromString(`Can't process non-primitive literals.`);
+            // if (['string','']typeof obj === 'object') throw ZodError.fromString(`Invalid type: ${object}.`);
+            if (obj === def.value)
+                return obj;
+            throw ZodError_1.ZodError.fromString(obj + " !== " + def.value);
+        case z.ZodTypes.enum:
+            if (def.values.indexOf(obj) === -1) {
+                throw ZodError_1.ZodError.fromString("\"" + obj + "\" does not match any value in enum");
+            }
+            return obj;
+        // case z.ZodTypes.function:
+        //   return obj;
+        case z.ZodTypes.record:
+            if (typeof obj !== 'object')
+                throw ZodError_1.ZodError.fromString("Non-object type: " + typeof obj);
+            if (Array.isArray(obj))
+                throw ZodError_1.ZodError.fromString("Non-object type: array");
+            var parsedRecord = {};
+            var recordError = new ZodError_1.ZodError();
+            for (var key in obj) {
+                try {
+                    parsedRecord[key] = def.valueType.parse(obj[key]);
+                }
+                catch (err) {
+                    recordError.mergeChild(key, err);
+                }
+            }
+            if (!recordError.empty)
+                throw recordError;
+            return parsedRecord;
+        case z.ZodTypes.date:
+            if (obj instanceof Date) {
+                if (!isNaN(obj.getTime())) {
+                    return obj;
+                }
+                else {
+                    throw ZodError_1.ZodError.fromString("Invalid date.");
+                }
+            }
+            throw ZodError_1.ZodError.fromString("Non-Date type: " + obj.type);
+        default:
+            // function
+            // return obj;
+            util_1.util.assertNever(def);
+        // break;
+    }
+    // assertNever();
+    // return obj;
+}; };
+//# 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..8f78c6e
--- /dev/null
+++ b/app/lib/src/parser.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":";;;;;;;;;AAAA,8CAAkC;AAElC,uCAAsC;AACtC,uCAAsC;AAMzB,QAAA,SAAS,GAAG,UAAC,SAAuB,IAAK,OAAA,UAAC,GAAQ,EAAE,MAAkC;IAAlC,uBAAA,EAAA,WAAwB,IAAI,EAAE,EAAE,EAAE;IACjG,IAAM,GAAG,GAAW,SAAgB,CAAC;IACrC,2BAA2B;IAC3B,0CAA0C;IAE1C,0EAA0E;IAC1E,4EAA4E;IAC5E,IAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,KAAK,SAAS,EAAtB,CAAsB,CAAC,CAAC;IACjE,IAAI,UAAU,EAAE;QACd,IAAI,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;YAC1C,yDAAyD;YACzD,OAAO,GAAG,CAAC;SACZ;aAAM;YACL,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC9B;KACF;SAAM;QACL,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;KACzD;IACD,IAAI;IAEJ,QAAQ,GAAG,CAAC,CAAC,EAAE;QACb,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM;YACpB,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,MAAM,mBAAQ,CAAC,UAAU,CAAC,sBAAoB,OAAO,GAAK,CAAC,CAAC;YACzF,OAAO,GAAU,CAAC;QACpB,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM;YACpB,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,MAAM,mBAAQ,CAAC,UAAU,CAAC,sBAAoB,OAAO,GAAK,CAAC,CAAC;YACzF,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBACrB,MAAM,mBAAQ,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;aACnD;YACD,OAAO,GAAU,CAAC;QACpB,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO;YACrB,IAAI,OAAO,GAAG,KAAK,SAAS;gBAAE,MAAM,mBAAQ,CAAC,UAAU,CAAC,uBAAqB,OAAO,GAAK,CAAC,CAAC;YAC3F,OAAO,GAAU,CAAC;QACpB,KAAK,CAAC,CAAC,QAAQ,CAAC,SAAS;YACvB,IAAI,GAAG,KAAK,SAAS;gBAAE,MAAM,mBAAQ,CAAC,UAAU,CAAC,+BAA6B,OAAO,GAAK,CAAC,CAAC;YAC5F,OAAO,SAAS,CAAC;QACnB,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI;YAClB,IAAI,GAAG,KAAK,IAAI;gBAAE,MAAM,mBAAQ,CAAC,UAAU,CAAC,oBAAkB,OAAO,GAAK,CAAC,CAAC;YAC5E,OAAO,IAAI,CAAC;QACd,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK;YACnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,MAAM,mBAAQ,CAAC,UAAU,CAAC,qBAAmB,OAAO,GAAK,CAAC,CAAC;YACpF,IAAM,YAAU,GAAG,mBAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC7C,MAAM,mBAAQ,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;aACpD;YACD,IAAM,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC,UAAC,IAAI,EAAE,CAAC;gBAClC,IAAI;oBACF,IAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBAChD,OAAO,UAAU,CAAC;iBACnB;gBAAC,OAAO,GAAG,EAAE;oBACZ,YAAU,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;iBAC/B;YACH,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,YAAU,CAAC,KAAK,EAAE;gBACrB,uDAAuD;gBACvD,MAAM,YAAU,CAAC;aAClB;YACD,OAAO,WAAkB,CAAC;QAC5B,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM;YACpB,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,MAAM,mBAAQ,CAAC,UAAU,CAAC,sBAAoB,OAAO,GAAK,CAAC,CAAC;YACzF,IAAI,GAAG,KAAK,IAAI;gBAAE,MAAM,mBAAQ,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;YACrE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,MAAM,mBAAQ,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;YAE5E,IAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YACxB,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;gBACrB,IAAM,WAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACzC,IAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,WAAS,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAA3B,CAA2B,CAAC,CAAC;gBACnE,IAAI,SAAS,CAAC,MAAM,EAAE;oBACpB,MAAM,mBAAQ,CAAC,MAAM,CACnB,SAAS,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC;wBACpB,IAAI,EAAE,CAAC,GAAG,CAAC;wBACX,OAAO,EAAE,0BAA0B;qBACpC,CAAC,EAHmB,CAGnB,CAAC,CACJ,CAAC;iBACH;aACF;YAED,IAAM,YAAY,GAAQ,EAAE,CAAC;YAC7B,IAAM,WAAW,GAAG,mBAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACxC,KAAK,IAAM,GAAG,IAAI,KAAK,EAAE;gBACvB,IAAI;oBACF,IAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;oBAC3D,YAAY,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;iBACjC;gBAAC,OAAO,GAAG,EAAE;oBACZ,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;iBAClC;aACF;YAED,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;gBACtB,MAAM,WAAW,CAAC,CAAC,+CAA+C;aACnE;YACD,OAAO,YAAY,CAAC;QACtB,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK;YACnB,KAAqB,UAAW,EAAX,KAAA,GAAG,CAAC,OAAO,EAAX,cAAW,EAAX,IAAW,EAAE;gBAA7B,IAAM,MAAM,SAAA;gBACf,IAAI;oBACF,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;oBACjC,cAAc;iBACf;gBAAC,OAAO,GAAG,EAAE,GAAE;aACjB;YACD,MAAM,mBAAQ,CAAC,UAAU,CACvB,wCAAsC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,sBAAiB,GAAG,CAAC,OAAO;iBAC3F,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,CAAC,EAAR,CAAQ,CAAC;iBAClB,IAAI,CAAC,MAAM,CAAG,CAClB,CAAC;QACJ,KAAK,CAAC,CAAC,QAAQ,CAAC,YAAY;YAC1B,IAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,IAAI;gBACF,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;aAC7B;YAAC,OAAO,GAAG,EAAE;gBACZ,MAAM,CAAC,IAAI,CAAC,gCAA8B,GAAG,CAAC,OAAS,CAAC,CAAC;aAC1D;YAED,IAAI;gBACF,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;aAC9B;YAAC,OAAO,GAAG,EAAE;gBACZ,MAAM,CAAC,IAAI,CAAC,iCAA+B,GAAG,CAAC,OAAS,CAAC,CAAC;aAC3D;YAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBAClB,OAAO,GAAG,CAAC;aACZ;YACD,MAAM,mBAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE/C,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK;YACnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACvB,oEAAoE;gBACpE,MAAM,mBAAQ,CAAC,UAAU,CAAC,yCAAyC,CAAC,CAAC;aACtE;YACD,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE;gBACnC,mHAAmH;gBACnH,MAAM,mBAAQ,CAAC,UAAU,CACvB,qDAAmD,GAAG,CAAC,KAAK,CAAC,MAAM,cAAS,GAAG,CAAC,MAAQ,CACzF,CAAC;aACH;YAED,IAAM,UAAU,GAAG,mBAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvC,IAAM,WAAW,GAAU,EAAE,CAAC;YAC9B,KAAK,IAAM,KAAK,IAAI,GAAG,EAAE;gBACvB,IAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;gBACxB,IAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAI;oBACF,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;iBAClD;gBAAC,OAAO,GAAG,EAAE;oBACZ,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;iBACnC;aACF;YACD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;gBACrB,MAAM,UAAU,CAAC;aAClB;YACD,OAAO,WAAkB,CAAC;QAC5B,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI;YAClB,IAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;YAChC,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;QACd,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO;YACrB,kCAAkC;YAClC,4HAA4H;YAC5H,mGAAmG;YACnG,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK;gBAAE,OAAO,GAAG,CAAC;YAClC,MAAM,mBAAQ,CAAC,UAAU,CAAI,GAAG,aAAQ,GAAG,CAAC,KAAO,CAAC,CAAC;QACvD,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI;YAClB,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;gBAClC,MAAM,mBAAQ,CAAC,UAAU,CAAC,OAAI,GAAG,wCAAoC,CAAC,CAAC;aACxE;YACD,OAAO,GAAG,CAAC;QACb,4BAA4B;QAC5B,gBAAgB;QAChB,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM;YACpB,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,MAAM,mBAAQ,CAAC,UAAU,CAAC,sBAAoB,OAAO,GAAK,CAAC,CAAC;YACzF,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,MAAM,mBAAQ,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;YAE5E,IAAM,YAAY,GAAQ,EAAE,CAAC;YAC7B,IAAM,WAAW,GAAG,IAAI,mBAAQ,EAAE,CAAC;YACnC,KAAK,IAAM,GAAG,IAAI,GAAG,EAAE;gBACrB,IAAI;oBACF,YAAY,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;iBACnD;gBAAC,OAAO,GAAG,EAAE;oBACZ,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;iBAClC;aACF;YACD,IAAI,CAAC,WAAW,CAAC,KAAK;gBAAE,MAAM,WAAW,CAAC;YAC1C,OAAO,YAAY,CAAC;QACtB,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI;YAClB,IAAI,GAAG,YAAY,IAAI,EAAE;gBACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE;oBACzB,OAAO,GAAG,CAAC;iBACZ;qBAAM;oBACL,MAAM,mBAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;iBAC5C;aACF;YACD,MAAM,mBAAQ,CAAC,UAAU,CAAC,oBAAkB,GAAG,CAAC,IAAM,CAAC,CAAC;QAC1D;YACE,WAAW;YACX,cAAc;YACd,WAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACxB,SAAS;KACV;IAED,iBAAiB;IACjB,cAAc;AAChB,CAAC,EAzMqD,CAyMrD,CAAC"}
\ 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..e69de29
diff --git a/app/lib/src/playground.js b/app/lib/src/playground.js
new file mode 100644
index 0000000..e2b8367
--- /dev/null
+++ b/app/lib/src/playground.js
@@ -0,0 +1,2 @@
+"use strict";
+//# 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..c5d53dd
--- /dev/null
+++ b/app/lib/src/playground.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"playground.js","sourceRoot":"","sources":["../../src/playground.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/app/lib/src/sampleParamVisitor.d.ts b/app/lib/src/sampleParamVisitor.d.ts
new file mode 100644
index 0000000..e7168bb
--- /dev/null
+++ b/app/lib/src/sampleParamVisitor.d.ts
@@ -0,0 +1,2 @@
+import * as z from './types/base';
+export declare const ParamVisitor: (visit: (_schema: z.ZodType<any, z.ZodTypeDef>, params: any) => z.ZodType<any, z.ZodTypeDef>) => (schema: z.ZodType<any, z.ZodTypeDef>, params: any) => z.ZodType<any, z.ZodTypeDef>;
diff --git a/app/lib/src/sampleParamVisitor.js b/app/lib/src/sampleParamVisitor.js
new file mode 100644
index 0000000..09259ec
--- /dev/null
+++ b/app/lib/src/sampleParamVisitor.js
@@ -0,0 +1,75 @@
+"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 __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("./types/base"));
+var _1 = require(".");
+var util_1 = require("./helpers/util");
+// import { ZodArray } from './types/array';
+// import { ZodObject } from './types/object';
+// import { ZodUnion } from './types/union';
+// import { ZodIntersection } from './types/intersection';
+// import { ZodTuple } from './types/tuple';
+// import { ZodRecord } from './types/record';
+// import { ZodLazy } from './types/lazy';
+var ZodError_1 = require("./ZodError");
+exports.ParamVisitor = function (visit) { return function (schema, params) {
+    var def = schema._def;
+    switch (def.t) {
+        case z.ZodTypes.string:
+            return visit(schema, params);
+        case z.ZodTypes.number:
+            return visit(schema, params);
+        case z.ZodTypes.boolean:
+            return visit(schema, params);
+        case z.ZodTypes.date:
+            return visit(schema, params);
+        case z.ZodTypes.undefined:
+            return visit(schema, params);
+        case z.ZodTypes.null:
+            return visit(schema, params);
+        case z.ZodTypes.array:
+            return visit(new _1.ZodArray(__assign({}, def, { type: visit(def.type, params) })), params);
+        case z.ZodTypes.object:
+            var visitedShape = {};
+            for (var key in def.shape) {
+                visitedShape[key] = visit(def.shape[key], params[key]);
+            }
+            return visit(new _1.ZodObject(__assign({}, def, { shape: visitedShape })), params);
+        case z.ZodTypes.union:
+            return visit(new _1.ZodUnion(__assign({}, def, { options: def.options.map(function (option) { return visit(option, params); }) })), params);
+        case z.ZodTypes.intersection:
+            return visit(new _1.ZodIntersection(__assign({}, def, { left: visit(def.left, params), right: visit(def.left, params) })), params);
+        case z.ZodTypes.tuple:
+            return visit(new _1.ZodTuple(__assign({}, def, { items: def.items.map(function (item) { return visit(item, params); }) })), params);
+        case z.ZodTypes.record:
+            return visit(new _1.ZodRecord(__assign({}, def, { valueType: visit(def.valueType, params) })), params);
+        case z.ZodTypes.lazy:
+            return visit(new _1.ZodLazy(__assign({}, def, { getter: function () { return visit(def.getter(), params); } })), params);
+        case z.ZodTypes.literal:
+            return visit(schema, params);
+        case z.ZodTypes.enum:
+            return visit(schema, params);
+        default:
+            util_1.util.assertNever(def);
+            break;
+    }
+    throw ZodError_1.ZodError.fromString("Unknown schema type.");
+}; };
+//# sourceMappingURL=sampleParamVisitor.js.map
\ No newline at end of file
diff --git a/app/lib/src/sampleParamVisitor.js.map b/app/lib/src/sampleParamVisitor.js.map
new file mode 100644
index 0000000..e82fc0a
--- /dev/null
+++ b/app/lib/src/sampleParamVisitor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"sampleParamVisitor.js","sourceRoot":"","sources":["../../src/sampleParamVisitor.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/lib/src/sampleVisitor.d.ts b/app/lib/src/sampleVisitor.d.ts
new file mode 100644
index 0000000..31fe6ec
--- /dev/null
+++ b/app/lib/src/sampleVisitor.d.ts
@@ -0,0 +1,2 @@
+import * as z from './types/base';
+export declare const sampleVisitor: (schema: z.ZodType<any, z.ZodTypeDef>) => void;
diff --git a/app/lib/src/sampleVisitor.js b/app/lib/src/sampleVisitor.js
new file mode 100644
index 0000000..ddc61e0
--- /dev/null
+++ b/app/lib/src/sampleVisitor.js
@@ -0,0 +1,51 @@
+"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("./types/base"));
+var util_1 = require("./helpers/util");
+exports.sampleVisitor = function (schema) {
+    var _def = schema._def;
+    var def = _def;
+    switch (def.t) {
+        case z.ZodTypes.string:
+            break;
+        case z.ZodTypes.number:
+            break;
+        case z.ZodTypes.boolean:
+            break;
+        case z.ZodTypes.date:
+            break;
+        case z.ZodTypes.undefined:
+            break;
+        case z.ZodTypes.null:
+            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.record:
+            break;
+        case z.ZodTypes.lazy:
+            break;
+        case z.ZodTypes.literal:
+            break;
+        case z.ZodTypes.enum:
+            break;
+        default:
+            util_1.util.assertNever(def);
+            break;
+    }
+};
+//# sourceMappingURL=sampleVisitor.js.map
\ No newline at end of file
diff --git a/app/lib/src/sampleVisitor.js.map b/app/lib/src/sampleVisitor.js.map
new file mode 100644
index 0000000..4b6ef9d
--- /dev/null
+++ b/app/lib/src/sampleVisitor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"sampleVisitor.js","sourceRoot":"","sources":["../../src/sampleVisitor.ts"],"names":[],"mappings":";;;;;;;;;AAAA,8CAAkC;AAElC,uCAAsC;AAEzB,QAAA,aAAa,GAAG,UAAC,MAAgB;IAC5C,IAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,IAAM,GAAG,GAAW,IAAW,CAAC;IAEhC,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,OAAO;YACrB,MAAM;QACR,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI;YAClB,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,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,MAAM;YACpB,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;YACE,WAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACtB,MAAM;KACT;AACH,CAAC,CAAC"}
\ 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..fe435b9
--- /dev/null
+++ b/app/lib/src/types/array.d.ts
@@ -0,0 +1,28 @@
+import * as z from './base';
+import { ZodUndefined } from './undefined';
+import { ZodNull } from './null';
+import { ZodUnion } from './union';
+export interface ZodArrayDef<T extends z.ZodAny = z.ZodAny> extends z.ZodTypeDef {
+    t: z.ZodTypes.array;
+    type: T;
+    nonempty: boolean;
+}
+export declare class ZodArray<T extends z.ZodAny> extends z.ZodType<T['_type'][], ZodArrayDef<T>> {
+    toJSON: () => {
+        t: z.ZodTypes.array;
+        nonempty: boolean;
+        type: object;
+    };
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+    nonempty: () => ZodNonEmptyArray<T>;
+    static create: <T_1 extends z.ZodType<any, z.ZodTypeDef>>(schema: T_1) => ZodArray<T_1>;
+}
+export declare class ZodNonEmptyArray<T extends z.ZodAny> extends z.ZodType<[T['_type'], ...T['_type'][]], ZodArrayDef<T>> {
+    toJSON: () => {
+        t: z.ZodTypes.array;
+        type: object;
+    };
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+}
diff --git a/app/lib/src/types/array.js b/app/lib/src/types/array.js
new file mode 100644
index 0000000..09777c1
--- /dev/null
+++ b/app/lib/src/types/array.js
@@ -0,0 +1,96 @@
+"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 undefined_1 = require("./undefined");
+var null_1 = require("./null");
+var union_1 = require("./union");
+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(),
+            };
+        };
+        _this.optional = function () { return union_1.ZodUnion.create([_this, undefined_1.ZodUndefined.create()]); };
+        _this.nullable = function () { return union_1.ZodUnion.create([_this, null_1.ZodNull.create()]); };
+        _this.nonempty = function () {
+            return new ZodNonEmptyArray(__assign({}, _this._def, { nonempty: true }));
+        };
+        return _this;
+    }
+    // pick = <Mask extends zodmaskUtil.Params<T>>(mask: Mask): ZodArray<zodmaskUtil.pick<T, Mask>> => {
+    //   return applyMask(this, mask, 'pick');
+    // };
+    // omit = <Mask extends zodmaskUtil.Params<T>>(mask: Mask): ZodArray<zodmaskUtil.omit<T, Mask>> => {
+    //   return applyMask(this, mask, 'omit');
+    // };
+    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(),
+            };
+        };
+        _this.optional = function () { return union_1.ZodUnion.create([_this, undefined_1.ZodUndefined.create()]); };
+        _this.nullable = function () { return union_1.ZodUnion.create([_this, null_1.ZodNull.create()]); };
+        return _this;
+        // static create = <T extends z.ZodAny>(schema: T): ZodArray<T> => {
+        //   return new ZodArray({
+        //     t: z.ZodTypes.array,
+        //     nonempty: true,
+        //     type: schema,
+        //   });
+        // };
+    }
+    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..9b2430b
--- /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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAC5B,yCAA2C;AAC3C,+BAAiC;AACjC,iCAAmC;AAWnC;IAAkD,4BAAuC;IAAzF;QAAA,qEAgCC;QA/BC,YAAM,GAAG;YACP,OAAO;gBACL,CAAC,EAAE,KAAI,CAAC,IAAI,CAAC,CAAC;gBACd,QAAQ,EAAE,KAAI,CAAC,IAAI,CAAC,QAAQ;gBAC5B,IAAI,EAAE,KAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;aAC9B,CAAC;QACJ,CAAC,CAAC;QAEF,cAAQ,GAAyC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,wBAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAA9C,CAA8C,CAAC;QAEtG,cAAQ,GAAoC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,cAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAzC,CAAyC,CAAC;QAE5F,cAAQ,GAA8B;YACpC,OAAO,IAAI,gBAAgB,cAAM,KAAI,CAAC,IAAI,IAAE,QAAQ,EAAE,IAAI,IAAG,CAAC;QAChE,CAAC,CAAC;;IAiBJ,CAAC;IAfC,oGAAoG;IACpG,0CAA0C;IAC1C,KAAK;IAEL,oGAAoG;IACpG,0CAA0C;IAC1C,KAAK;IAEE,eAAM,GAAG,UAAqB,MAAS;QAC5C,OAAO,IAAI,QAAQ,CAAC;YAClB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK;YACnB,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,eAAC;CAAA,AAhCD,CAAkD,CAAC,CAAC,OAAO,GAgC1D;AAhCY,4BAAQ;AAkCrB;IAA0D,oCAAwD;IAAlH;QAAA,qEAmBC;QAlBC,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;QAEF,cAAQ,GAAyC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,wBAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAA9C,CAA8C,CAAC;QAEtG,cAAQ,GAAoC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,cAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAzC,CAAyC,CAAC;;QAE5F,oEAAoE;QACpE,0BAA0B;QAC1B,2BAA2B;QAC3B,sBAAsB;QACtB,oBAAoB;QACpB,QAAQ;QACR,KAAK;IACP,CAAC;IAAD,uBAAC;AAAD,CAAC,AAnBD,CAA0D,CAAC,CAAC,OAAO,GAmBlE;AAnBY,4CAAgB"}
\ 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..1c12fe6
--- /dev/null
+++ b/app/lib/src/types/base.d.ts
@@ -0,0 +1,820 @@
+import { ParseParams } from '../parser';
+import { maskUtil } from '../helpers/maskUtil';
+export declare enum ZodTypes {
+    string = "string",
+    number = "number",
+    boolean = "boolean",
+    date = "date",
+    undefined = "undefined",
+    null = "null",
+    array = "array",
+    object = "object",
+    union = "union",
+    intersection = "intersection",
+    tuple = "tuple",
+    record = "record",
+    function = "function",
+    lazy = "lazy",
+    lazyobject = "lazyobject",
+    literal = "literal",
+    enum = "enum"
+}
+export declare type ZodAny = ZodType<any>;
+export declare type ZodRawShape = {
+    [k: string]: ZodAny;
+};
+export interface ZodTypeDef {
+    t: ZodTypes;
+}
+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, params?: ParseParams) => Type;
+    is(u: Type): u is Type;
+    check(u: Type): u is Type;
+    mask: <P extends {
+        array: Type extends (infer U)[] ? true | { [k in keyof U]?: true | {
+            array: U[k] extends (infer U)[] ? true | any : never;
+            object: U[k] extends {
+                [k: string]: any;
+            } ? { [k in keyof U[k]]?: true | {
+                array: U[k][k] extends (infer U)[] ? true | any : never;
+                object: U[k][k] extends {
+                    [k: string]: any;
+                } ? { [k in keyof U[k][k]]?: true | {
+                    array: U[k][k][k] extends (infer U)[] ? true | any : never;
+                    object: U[k][k][k] extends {
+                        [k: string]: any;
+                    } ? { [k in keyof U[k][k][k]]?: true | {
+                        array: U[k][k][k][k] extends (infer U)[] ? true | any : never;
+                        object: U[k][k][k][k] extends {
+                            [k: string]: any;
+                        } ? { [k in keyof U[k][k][k][k]]?: true | {
+                            array: U[k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                            object: U[k][k][k][k][k] extends {
+                                [k: string]: any;
+                            } ? { [k in keyof U[k][k][k][k][k]]?: true | {
+                                array: U[k][k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                object: U[k][k][k][k][k][k] extends {
+                                    [k: string]: any;
+                                } ? { [k in keyof U[k][k][k][k][k][k]]?: true | {
+                                    array: U[k][k][k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                    object: U[k][k][k][k][k][k][k] extends {
+                                        [k: string]: any;
+                                    } ? { [k in keyof U[k][k][k][k][k][k][k]]?: true | {
+                                        array: U[k][k][k][k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                        object: U[k][k][k][k][k][k][k][k] extends {
+                                            [k: string]: any;
+                                        } ? { [k in keyof U[k][k][k][k][k][k][k][k]]?: true | {
+                                            array: U[k][k][k][k][k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                            object: U[k][k][k][k][k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            } ? { [k in keyof U[k][k][k][k][k][k][k][k][k]]?: true | {
+                                                array: U[k][k][k][k][k][k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                                object: U[k][k][k][k][k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? { [k in keyof U[k][k][k][k][k][k][k][k][k][k]]?: true | any[U[k][k][k][k][k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                }[] ? "array" : (U[k][k][k][k][k][k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? U[k][k][k][k][k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                                rest: never;
+                                                never: never;
+                                            }[U[k][k][k][k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            }[] ? "array" : (U[k][k][k][k][k][k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            } ? U[k][k][k][k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                            rest: never;
+                                            never: never;
+                                        }[U[k][k][k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k][k][k][k] extends {
+                                            [k: string]: any;
+                                        }[] ? "array" : (U[k][k][k][k][k][k][k][k][k] extends {
+                                            [k: string]: any;
+                                        } ? U[k][k][k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                        rest: never;
+                                        never: never;
+                                    }[U[k][k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k][k][k] extends {
+                                        [k: string]: any;
+                                    }[] ? "array" : (U[k][k][k][k][k][k][k][k] extends {
+                                        [k: string]: any;
+                                    } ? U[k][k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                    rest: never;
+                                    never: never;
+                                }[U[k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k][k] extends {
+                                    [k: string]: any;
+                                }[] ? "array" : (U[k][k][k][k][k][k][k] extends {
+                                    [k: string]: any;
+                                } ? U[k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                rest: never;
+                                never: never;
+                            }[U[k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k] extends {
+                                [k: string]: any;
+                            }[] ? "array" : (U[k][k][k][k][k][k] extends {
+                                [k: string]: any;
+                            } ? U[k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                            rest: never;
+                            never: never;
+                        }[U[k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k] ? "never" : U[k][k][k][k][k] extends {
+                            [k: string]: any;
+                        }[] ? "array" : (U[k][k][k][k][k] extends {
+                            [k: string]: any;
+                        } ? U[k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                        rest: never;
+                        never: never;
+                    }[U[k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k] ? "never" : U[k][k][k][k] extends {
+                        [k: string]: any;
+                    }[] ? "array" : (U[k][k][k][k] extends {
+                        [k: string]: any;
+                    } ? U[k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                    rest: never;
+                    never: never;
+                }[U[k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k] ? "never" : U[k][k][k] extends {
+                    [k: string]: any;
+                }[] ? "array" : (U[k][k][k] extends {
+                    [k: string]: any;
+                } ? U[k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                rest: never;
+                never: never;
+            }[U[k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k] ? "never" : U[k][k] extends {
+                [k: string]: any;
+            }[] ? "array" : (U[k][k] extends {
+                [k: string]: any;
+            } ? U[k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+            rest: never;
+            never: never;
+        }[U[k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k] ? "never" : U[k] extends {
+            [k: string]: any;
+        }[] ? "array" : (U[k] extends {
+            [k: string]: any;
+        } ? U[k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+        object: Type extends {
+            [k: string]: any;
+        } ? { [k in keyof Type]?: true | {
+            array: Type[k] extends (infer U)[] ? true | { [k in keyof U]?: true | {
+                array: U[k] extends (infer U)[] ? true | any : never;
+                object: U[k] extends {
+                    [k: string]: any;
+                } ? { [k in keyof U[k]]?: true | {
+                    array: U[k][k] extends (infer U)[] ? true | any : never;
+                    object: U[k][k] extends {
+                        [k: string]: any;
+                    } ? { [k in keyof U[k][k]]?: true | {
+                        array: U[k][k][k] extends (infer U)[] ? true | any : never;
+                        object: U[k][k][k] extends {
+                            [k: string]: any;
+                        } ? { [k in keyof U[k][k][k]]?: true | {
+                            array: U[k][k][k][k] extends (infer U)[] ? true | any : never;
+                            object: U[k][k][k][k] extends {
+                                [k: string]: any;
+                            } ? { [k in keyof U[k][k][k][k]]?: true | {
+                                array: U[k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                object: U[k][k][k][k][k] extends {
+                                    [k: string]: any;
+                                } ? { [k in keyof U[k][k][k][k][k]]?: true | {
+                                    array: U[k][k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                    object: U[k][k][k][k][k][k] extends {
+                                        [k: string]: any;
+                                    } ? { [k in keyof U[k][k][k][k][k][k]]?: true | {
+                                        array: U[k][k][k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                        object: U[k][k][k][k][k][k][k] extends {
+                                            [k: string]: any;
+                                        } ? { [k in keyof U[k][k][k][k][k][k][k]]?: true | {
+                                            array: U[k][k][k][k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                            object: U[k][k][k][k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            } ? { [k in keyof U[k][k][k][k][k][k][k][k]]?: true | {
+                                                array: U[k][k][k][k][k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                                object: U[k][k][k][k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? { [k in keyof U[k][k][k][k][k][k][k][k][k]]?: true | any[U[k][k][k][k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                }[] ? "array" : (U[k][k][k][k][k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? U[k][k][k][k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                                rest: never;
+                                                never: never;
+                                            }[U[k][k][k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            }[] ? "array" : (U[k][k][k][k][k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            } ? U[k][k][k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                            rest: never;
+                                            never: never;
+                                        }[U[k][k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k][k][k] extends {
+                                            [k: string]: any;
+                                        }[] ? "array" : (U[k][k][k][k][k][k][k][k] extends {
+                                            [k: string]: any;
+                                        } ? U[k][k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                        rest: never;
+                                        never: never;
+                                    }[U[k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k][k] extends {
+                                        [k: string]: any;
+                                    }[] ? "array" : (U[k][k][k][k][k][k][k] extends {
+                                        [k: string]: any;
+                                    } ? U[k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                    rest: never;
+                                    never: never;
+                                }[U[k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k] extends {
+                                    [k: string]: any;
+                                }[] ? "array" : (U[k][k][k][k][k][k] extends {
+                                    [k: string]: any;
+                                } ? U[k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                rest: never;
+                                never: never;
+                            }[U[k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k] ? "never" : U[k][k][k][k][k] extends {
+                                [k: string]: any;
+                            }[] ? "array" : (U[k][k][k][k][k] extends {
+                                [k: string]: any;
+                            } ? U[k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                            rest: never;
+                            never: never;
+                        }[U[k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k] ? "never" : U[k][k][k][k] extends {
+                            [k: string]: any;
+                        }[] ? "array" : (U[k][k][k][k] extends {
+                            [k: string]: any;
+                        } ? U[k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                        rest: never;
+                        never: never;
+                    }[U[k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k] ? "never" : U[k][k][k] extends {
+                        [k: string]: any;
+                    }[] ? "array" : (U[k][k][k] extends {
+                        [k: string]: any;
+                    } ? U[k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                    rest: never;
+                    never: never;
+                }[U[k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k] ? "never" : U[k][k] extends {
+                    [k: string]: any;
+                }[] ? "array" : (U[k][k] extends {
+                    [k: string]: any;
+                } ? U[k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                rest: never;
+                never: never;
+            }[U[k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k] ? "never" : U[k] extends {
+                [k: string]: any;
+            }[] ? "array" : (U[k] extends {
+                [k: string]: any;
+            } ? U[k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+            object: Type[k] extends {
+                [k: string]: any;
+            } ? { [k in keyof Type[k]]?: true | {
+                array: Type[k][k] extends (infer U)[] ? true | { [k in keyof U]?: true | {
+                    array: U[k] extends (infer U)[] ? true | any : never;
+                    object: U[k] extends {
+                        [k: string]: any;
+                    } ? { [k in keyof U[k]]?: true | {
+                        array: U[k][k] extends (infer U)[] ? true | any : never;
+                        object: U[k][k] extends {
+                            [k: string]: any;
+                        } ? { [k in keyof U[k][k]]?: true | {
+                            array: U[k][k][k] extends (infer U)[] ? true | any : never;
+                            object: U[k][k][k] extends {
+                                [k: string]: any;
+                            } ? { [k in keyof U[k][k][k]]?: true | {
+                                array: U[k][k][k][k] extends (infer U)[] ? true | any : never;
+                                object: U[k][k][k][k] extends {
+                                    [k: string]: any;
+                                } ? { [k in keyof U[k][k][k][k]]?: true | {
+                                    array: U[k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                    object: U[k][k][k][k][k] extends {
+                                        [k: string]: any;
+                                    } ? { [k in keyof U[k][k][k][k][k]]?: true | {
+                                        array: U[k][k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                        object: U[k][k][k][k][k][k] extends {
+                                            [k: string]: any;
+                                        } ? { [k in keyof U[k][k][k][k][k][k]]?: true | {
+                                            array: U[k][k][k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                            object: U[k][k][k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            } ? { [k in keyof U[k][k][k][k][k][k][k]]?: true | {
+                                                array: U[k][k][k][k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                                object: U[k][k][k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? { [k in keyof U[k][k][k][k][k][k][k][k]]?: true | any[U[k][k][k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                }[] ? "array" : (U[k][k][k][k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? U[k][k][k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                                rest: never;
+                                                never: never;
+                                            }[U[k][k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            }[] ? "array" : (U[k][k][k][k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            } ? U[k][k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                            rest: never;
+                                            never: never;
+                                        }[U[k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k][k] extends {
+                                            [k: string]: any;
+                                        }[] ? "array" : (U[k][k][k][k][k][k][k] extends {
+                                            [k: string]: any;
+                                        } ? U[k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                        rest: never;
+                                        never: never;
+                                    }[U[k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k] extends {
+                                        [k: string]: any;
+                                    }[] ? "array" : (U[k][k][k][k][k][k] extends {
+                                        [k: string]: any;
+                                    } ? U[k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                    rest: never;
+                                    never: never;
+                                }[U[k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k] ? "never" : U[k][k][k][k][k] extends {
+                                    [k: string]: any;
+                                }[] ? "array" : (U[k][k][k][k][k] extends {
+                                    [k: string]: any;
+                                } ? U[k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                rest: never;
+                                never: never;
+                            }[U[k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k] ? "never" : U[k][k][k][k] extends {
+                                [k: string]: any;
+                            }[] ? "array" : (U[k][k][k][k] extends {
+                                [k: string]: any;
+                            } ? U[k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                            rest: never;
+                            never: never;
+                        }[U[k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k] ? "never" : U[k][k][k] extends {
+                            [k: string]: any;
+                        }[] ? "array" : (U[k][k][k] extends {
+                            [k: string]: any;
+                        } ? U[k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                        rest: never;
+                        never: never;
+                    }[U[k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k] ? "never" : U[k][k] extends {
+                        [k: string]: any;
+                    }[] ? "array" : (U[k][k] extends {
+                        [k: string]: any;
+                    } ? U[k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                    rest: never;
+                    never: never;
+                }[U[k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k] ? "never" : U[k] extends {
+                    [k: string]: any;
+                }[] ? "array" : (U[k] extends {
+                    [k: string]: any;
+                } ? U[k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                object: Type[k][k] extends {
+                    [k: string]: any;
+                } ? { [k in keyof Type[k][k]]?: true | {
+                    array: Type[k][k][k] extends (infer U)[] ? true | { [k in keyof U]?: true | {
+                        array: U[k] extends (infer U)[] ? true | any : never;
+                        object: U[k] extends {
+                            [k: string]: any;
+                        } ? { [k in keyof U[k]]?: true | {
+                            array: U[k][k] extends (infer U)[] ? true | any : never;
+                            object: U[k][k] extends {
+                                [k: string]: any;
+                            } ? { [k in keyof U[k][k]]?: true | {
+                                array: U[k][k][k] extends (infer U)[] ? true | any : never;
+                                object: U[k][k][k] extends {
+                                    [k: string]: any;
+                                } ? { [k in keyof U[k][k][k]]?: true | {
+                                    array: U[k][k][k][k] extends (infer U)[] ? true | any : never;
+                                    object: U[k][k][k][k] extends {
+                                        [k: string]: any;
+                                    } ? { [k in keyof U[k][k][k][k]]?: true | {
+                                        array: U[k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                        object: U[k][k][k][k][k] extends {
+                                            [k: string]: any;
+                                        } ? { [k in keyof U[k][k][k][k][k]]?: true | {
+                                            array: U[k][k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                            object: U[k][k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            } ? { [k in keyof U[k][k][k][k][k][k]]?: true | {
+                                                array: U[k][k][k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                                object: U[k][k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? { [k in keyof U[k][k][k][k][k][k][k]]?: true | any[U[k][k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                }[] ? "array" : (U[k][k][k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? U[k][k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                                rest: never;
+                                                never: never;
+                                            }[U[k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            }[] ? "array" : (U[k][k][k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            } ? U[k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                            rest: never;
+                                            never: never;
+                                        }[U[k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k] extends {
+                                            [k: string]: any;
+                                        }[] ? "array" : (U[k][k][k][k][k][k] extends {
+                                            [k: string]: any;
+                                        } ? U[k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                        rest: never;
+                                        never: never;
+                                    }[U[k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k] ? "never" : U[k][k][k][k][k] extends {
+                                        [k: string]: any;
+                                    }[] ? "array" : (U[k][k][k][k][k] extends {
+                                        [k: string]: any;
+                                    } ? U[k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                    rest: never;
+                                    never: never;
+                                }[U[k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k] ? "never" : U[k][k][k][k] extends {
+                                    [k: string]: any;
+                                }[] ? "array" : (U[k][k][k][k] extends {
+                                    [k: string]: any;
+                                } ? U[k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                rest: never;
+                                never: never;
+                            }[U[k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k] ? "never" : U[k][k][k] extends {
+                                [k: string]: any;
+                            }[] ? "array" : (U[k][k][k] extends {
+                                [k: string]: any;
+                            } ? U[k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                            rest: never;
+                            never: never;
+                        }[U[k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k] ? "never" : U[k][k] extends {
+                            [k: string]: any;
+                        }[] ? "array" : (U[k][k] extends {
+                            [k: string]: any;
+                        } ? U[k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                        rest: never;
+                        never: never;
+                    }[U[k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k] ? "never" : U[k] extends {
+                        [k: string]: any;
+                    }[] ? "array" : (U[k] extends {
+                        [k: string]: any;
+                    } ? U[k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                    object: Type[k][k][k] extends {
+                        [k: string]: any;
+                    } ? { [k in keyof Type[k][k][k]]?: true | {
+                        array: Type[k][k][k][k] extends (infer U)[] ? true | { [k in keyof U]?: true | {
+                            array: U[k] extends (infer U)[] ? true | any : never;
+                            object: U[k] extends {
+                                [k: string]: any;
+                            } ? { [k in keyof U[k]]?: true | {
+                                array: U[k][k] extends (infer U)[] ? true | any : never;
+                                object: U[k][k] extends {
+                                    [k: string]: any;
+                                } ? { [k in keyof U[k][k]]?: true | {
+                                    array: U[k][k][k] extends (infer U)[] ? true | any : never;
+                                    object: U[k][k][k] extends {
+                                        [k: string]: any;
+                                    } ? { [k in keyof U[k][k][k]]?: true | {
+                                        array: U[k][k][k][k] extends (infer U)[] ? true | any : never;
+                                        object: U[k][k][k][k] extends {
+                                            [k: string]: any;
+                                        } ? { [k in keyof U[k][k][k][k]]?: true | {
+                                            array: U[k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                            object: U[k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            } ? { [k in keyof U[k][k][k][k][k]]?: true | {
+                                                array: U[k][k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                                object: U[k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? { [k in keyof U[k][k][k][k][k][k]]?: true | any[U[k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                }[] ? "array" : (U[k][k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? U[k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                                rest: never;
+                                                never: never;
+                                            }[U[k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            }[] ? "array" : (U[k][k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            } ? U[k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                            rest: never;
+                                            never: never;
+                                        }[U[k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k] ? "never" : U[k][k][k][k][k] extends {
+                                            [k: string]: any;
+                                        }[] ? "array" : (U[k][k][k][k][k] extends {
+                                            [k: string]: any;
+                                        } ? U[k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                        rest: never;
+                                        never: never;
+                                    }[U[k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k] ? "never" : U[k][k][k][k] extends {
+                                        [k: string]: any;
+                                    }[] ? "array" : (U[k][k][k][k] extends {
+                                        [k: string]: any;
+                                    } ? U[k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                    rest: never;
+                                    never: never;
+                                }[U[k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k] ? "never" : U[k][k][k] extends {
+                                    [k: string]: any;
+                                }[] ? "array" : (U[k][k][k] extends {
+                                    [k: string]: any;
+                                } ? U[k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                rest: never;
+                                never: never;
+                            }[U[k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k] ? "never" : U[k][k] extends {
+                                [k: string]: any;
+                            }[] ? "array" : (U[k][k] extends {
+                                [k: string]: any;
+                            } ? U[k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                            rest: never;
+                            never: never;
+                        }[U[k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k] ? "never" : U[k] extends {
+                            [k: string]: any;
+                        }[] ? "array" : (U[k] extends {
+                            [k: string]: any;
+                        } ? U[k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                        object: Type[k][k][k][k] extends {
+                            [k: string]: any;
+                        } ? { [k in keyof Type[k][k][k][k]]?: true | {
+                            array: Type[k][k][k][k][k] extends (infer U)[] ? true | { [k in keyof U]?: true | {
+                                array: U[k] extends (infer U)[] ? true | any : never;
+                                object: U[k] extends {
+                                    [k: string]: any;
+                                } ? { [k in keyof U[k]]?: true | {
+                                    array: U[k][k] extends (infer U)[] ? true | any : never;
+                                    object: U[k][k] extends {
+                                        [k: string]: any;
+                                    } ? { [k in keyof U[k][k]]?: true | {
+                                        array: U[k][k][k] extends (infer U)[] ? true | any : never;
+                                        object: U[k][k][k] extends {
+                                            [k: string]: any;
+                                        } ? { [k in keyof U[k][k][k]]?: true | {
+                                            array: U[k][k][k][k] extends (infer U)[] ? true | any : never;
+                                            object: U[k][k][k][k] extends {
+                                                [k: string]: any;
+                                            } ? { [k in keyof U[k][k][k][k]]?: true | {
+                                                array: U[k][k][k][k][k] extends (infer U)[] ? true | any : never;
+                                                object: U[k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? { [k in keyof U[k][k][k][k][k]]?: true | any[U[k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k][k] ? "never" : U[k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                }[] ? "array" : (U[k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? U[k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                                rest: never;
+                                                never: never;
+                                            }[U[k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k] ? "never" : U[k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            }[] ? "array" : (U[k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            } ? U[k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                            rest: never;
+                                            never: never;
+                                        }[U[k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k] ? "never" : U[k][k][k][k] extends {
+                                            [k: string]: any;
+                                        }[] ? "array" : (U[k][k][k][k] extends {
+                                            [k: string]: any;
+                                        } ? U[k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                        rest: never;
+                                        never: never;
+                                    }[U[k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k] ? "never" : U[k][k][k] extends {
+                                        [k: string]: any;
+                                    }[] ? "array" : (U[k][k][k] extends {
+                                        [k: string]: any;
+                                    } ? U[k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                    rest: never;
+                                    never: never;
+                                }[U[k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k] ? "never" : U[k][k] extends {
+                                    [k: string]: any;
+                                }[] ? "array" : (U[k][k] extends {
+                                    [k: string]: any;
+                                } ? U[k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                rest: never;
+                                never: never;
+                            }[U[k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k] ? "never" : U[k] extends {
+                                [k: string]: any;
+                            }[] ? "array" : (U[k] extends {
+                                [k: string]: any;
+                            } ? U[k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                            object: Type[k][k][k][k][k] extends {
+                                [k: string]: any;
+                            } ? { [k in keyof Type[k][k][k][k][k]]?: true | {
+                                array: Type[k][k][k][k][k][k] extends (infer U)[] ? true | { [k in keyof U]?: true | {
+                                    array: U[k] extends (infer U)[] ? true | any : never;
+                                    object: U[k] extends {
+                                        [k: string]: any;
+                                    } ? { [k in keyof U[k]]?: true | {
+                                        array: U[k][k] extends (infer U)[] ? true | any : never;
+                                        object: U[k][k] extends {
+                                            [k: string]: any;
+                                        } ? { [k in keyof U[k][k]]?: true | {
+                                            array: U[k][k][k] extends (infer U)[] ? true | any : never;
+                                            object: U[k][k][k] extends {
+                                                [k: string]: any;
+                                            } ? { [k in keyof U[k][k][k]]?: true | {
+                                                array: U[k][k][k][k] extends (infer U)[] ? true | any : never;
+                                                object: U[k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? { [k in keyof U[k][k][k][k]]?: true | any[U[k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k][k] ? "never" : U[k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                }[] ? "array" : (U[k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? U[k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                                rest: never;
+                                                never: never;
+                                            }[U[k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k] ? "never" : U[k][k][k][k] extends {
+                                                [k: string]: any;
+                                            }[] ? "array" : (U[k][k][k][k] extends {
+                                                [k: string]: any;
+                                            } ? U[k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                            rest: never;
+                                            never: never;
+                                        }[U[k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k] ? "never" : U[k][k][k] extends {
+                                            [k: string]: any;
+                                        }[] ? "array" : (U[k][k][k] extends {
+                                            [k: string]: any;
+                                        } ? U[k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                        rest: never;
+                                        never: never;
+                                    }[U[k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k] ? "never" : U[k][k] extends {
+                                        [k: string]: any;
+                                    }[] ? "array" : (U[k][k] extends {
+                                        [k: string]: any;
+                                    } ? U[k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                    rest: never;
+                                    never: never;
+                                }[U[k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k] ? "never" : U[k] extends {
+                                    [k: string]: any;
+                                }[] ? "array" : (U[k] extends {
+                                    [k: string]: any;
+                                } ? U[k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                object: Type[k][k][k][k][k][k] extends {
+                                    [k: string]: any;
+                                } ? { [k in keyof Type[k][k][k][k][k][k]]?: true | {
+                                    array: Type[k][k][k][k][k][k][k] extends (infer U)[] ? true | { [k in keyof U]?: true | {
+                                        array: U[k] extends (infer U)[] ? true | any : never;
+                                        object: U[k] extends {
+                                            [k: string]: any;
+                                        } ? { [k in keyof U[k]]?: true | {
+                                            array: U[k][k] extends (infer U)[] ? true | any : never;
+                                            object: U[k][k] extends {
+                                                [k: string]: any;
+                                            } ? { [k in keyof U[k][k]]?: true | {
+                                                array: U[k][k][k] extends (infer U)[] ? true | any : never;
+                                                object: U[k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? { [k in keyof U[k][k][k]]?: true | any[U[k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k][k] ? "never" : U[k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                }[] ? "array" : (U[k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? U[k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                                rest: never;
+                                                never: never;
+                                            }[U[k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k] ? "never" : U[k][k][k] extends {
+                                                [k: string]: any;
+                                            }[] ? "array" : (U[k][k][k] extends {
+                                                [k: string]: any;
+                                            } ? U[k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                            rest: never;
+                                            never: never;
+                                        }[U[k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k] ? "never" : U[k][k] extends {
+                                            [k: string]: any;
+                                        }[] ? "array" : (U[k][k] extends {
+                                            [k: string]: any;
+                                        } ? U[k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                        rest: never;
+                                        never: never;
+                                    }[U[k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k] ? "never" : U[k] extends {
+                                        [k: string]: any;
+                                    }[] ? "array" : (U[k] extends {
+                                        [k: string]: any;
+                                    } ? U[k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                    object: Type[k][k][k][k][k][k][k] extends {
+                                        [k: string]: any;
+                                    } ? { [k in keyof Type[k][k][k][k][k][k][k]]?: true | {
+                                        array: Type[k][k][k][k][k][k][k][k] extends (infer U)[] ? true | { [k in keyof U]?: true | {
+                                            array: U[k] extends (infer U)[] ? true | any : never;
+                                            object: U[k] extends {
+                                                [k: string]: any;
+                                            } ? { [k in keyof U[k]]?: true | {
+                                                array: U[k][k] extends (infer U)[] ? true | any : never;
+                                                object: U[k][k] extends {
+                                                    [k: string]: any;
+                                                } ? { [k in keyof U[k][k]]?: true | any[U[k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k][k] ? "never" : U[k][k][k] extends {
+                                                    [k: string]: any;
+                                                }[] ? "array" : (U[k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? U[k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                                rest: never;
+                                                never: never;
+                                            }[U[k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k] ? "never" : U[k][k] extends {
+                                                [k: string]: any;
+                                            }[] ? "array" : (U[k][k] extends {
+                                                [k: string]: any;
+                                            } ? U[k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                            rest: never;
+                                            never: never;
+                                        }[U[k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k] ? "never" : U[k] extends {
+                                            [k: string]: any;
+                                        }[] ? "array" : (U[k] extends {
+                                            [k: string]: any;
+                                        } ? U[k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                        object: Type[k][k][k][k][k][k][k][k] extends {
+                                            [k: string]: any;
+                                        } ? { [k in keyof Type[k][k][k][k][k][k][k][k]]?: true | {
+                                            array: Type[k][k][k][k][k][k][k][k][k] extends (infer U)[] ? true | { [k in keyof U]?: true | {
+                                                array: U[k] extends (infer U)[] ? true | any : never;
+                                                object: U[k] extends {
+                                                    [k: string]: any;
+                                                } ? { [k in keyof U[k]]?: true | any[U[k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k][k] ? "never" : U[k][k] extends {
+                                                    [k: string]: any;
+                                                }[] ? "array" : (U[k][k] extends {
+                                                    [k: string]: any;
+                                                } ? U[k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                                rest: never;
+                                                never: never;
+                                            }[U[k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k] ? "never" : U[k] extends {
+                                                [k: string]: any;
+                                            }[] ? "array" : (U[k] extends {
+                                                [k: string]: any;
+                                            } ? U[k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                            object: Type[k][k][k][k][k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            } ? { [k in keyof Type[k][k][k][k][k][k][k][k][k]]?: true | {
+                                                array: Type[k][k][k][k][k][k][k][k][k][k] extends (infer U)[] ? true | { [k in keyof U]?: true | any[U[k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends U[k] ? "never" : U[k] extends {
+                                                    [k: string]: any;
+                                                }[] ? "array" : (U[k] extends {
+                                                    [k: string]: any;
+                                                } ? U[k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                                object: Type[k][k][k][k][k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? { [k in keyof Type[k][k][k][k][k][k][k][k][k][k]]?: true | any[Type[k][k][k][k][k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends Type[k][k][k][k][k][k][k][k][k][k][k] ? "never" : Type[k][k][k][k][k][k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                }[] ? "array" : (Type[k][k][k][k][k][k][k][k][k][k][k] extends {
+                                                    [k: string]: any;
+                                                } ? Type[k][k][k][k][k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                                rest: never;
+                                                never: never;
+                                            }[Type[k][k][k][k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends Type[k][k][k][k][k][k][k][k][k][k] ? "never" : Type[k][k][k][k][k][k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            }[] ? "array" : (Type[k][k][k][k][k][k][k][k][k][k] extends {
+                                                [k: string]: any;
+                                            } ? Type[k][k][k][k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                            rest: never;
+                                            never: never;
+                                        }[Type[k][k][k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends Type[k][k][k][k][k][k][k][k][k] ? "never" : Type[k][k][k][k][k][k][k][k][k] extends {
+                                            [k: string]: any;
+                                        }[] ? "array" : (Type[k][k][k][k][k][k][k][k][k] extends {
+                                            [k: string]: any;
+                                        } ? Type[k][k][k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                        rest: never;
+                                        never: never;
+                                    }[Type[k][k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends Type[k][k][k][k][k][k][k][k] ? "never" : Type[k][k][k][k][k][k][k][k] extends {
+                                        [k: string]: any;
+                                    }[] ? "array" : (Type[k][k][k][k][k][k][k][k] extends {
+                                        [k: string]: any;
+                                    } ? Type[k][k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                    rest: never;
+                                    never: never;
+                                }[Type[k][k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends Type[k][k][k][k][k][k][k] ? "never" : Type[k][k][k][k][k][k][k] extends {
+                                    [k: string]: any;
+                                }[] ? "array" : (Type[k][k][k][k][k][k][k] extends {
+                                    [k: string]: any;
+                                } ? Type[k][k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                                rest: never;
+                                never: never;
+                            }[Type[k][k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends Type[k][k][k][k][k][k] ? "never" : Type[k][k][k][k][k][k] extends {
+                                [k: string]: any;
+                            }[] ? "array" : (Type[k][k][k][k][k][k] extends {
+                                [k: string]: any;
+                            } ? Type[k][k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                            rest: never;
+                            never: never;
+                        }[Type[k][k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends Type[k][k][k][k][k] ? "never" : Type[k][k][k][k][k] extends {
+                            [k: string]: any;
+                        }[] ? "array" : (Type[k][k][k][k][k] extends {
+                            [k: string]: any;
+                        } ? Type[k][k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                        rest: never;
+                        never: never;
+                    }[Type[k][k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends Type[k][k][k][k] ? "never" : Type[k][k][k][k] extends {
+                        [k: string]: any;
+                    }[] ? "array" : (Type[k][k][k][k] extends {
+                        [k: string]: any;
+                    } ? Type[k][k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                    rest: never;
+                    never: never;
+                }[Type[k][k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends Type[k][k][k] ? "never" : Type[k][k][k] extends {
+                    [k: string]: any;
+                }[] ? "array" : (Type[k][k][k] extends {
+                    [k: string]: any;
+                } ? Type[k][k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+                rest: never;
+                never: never;
+            }[Type[k][k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends Type[k][k] ? "never" : Type[k][k] extends {
+                [k: string]: any;
+            }[] ? "array" : (Type[k][k] extends {
+                [k: string]: any;
+            } ? Type[k][k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+            rest: never;
+            never: never;
+        }[Type[k] extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends Type[k] ? "never" : Type[k] extends {
+            [k: string]: any;
+        }[] ? "array" : (Type[k] extends {
+            [k: string]: any;
+        } ? Type[k] extends any[] ? false : true : false) extends true ? "object" : "rest"] | undefined; } : never;
+        rest: never;
+        never: never;
+    }[Type extends string | number | boolean | import("../helpers/primitive").Primitive[] | null | undefined ? "never" : any extends Type ? "never" : Type extends {
+        [k: string]: any;
+    }[] ? "array" : (Type extends {
+        [k: string]: any;
+    } ? Type extends any[] ? false : true : false) extends true ? "object" : "rest"]>(_params: P) => ZodType<maskUtil.Pick<Type, P>, ZodTypeDef>;
+    constructor(def: Def);
+    abstract toJSON: () => object;
+    abstract optional: () => any;
+    abstract nullable: () => any;
+}
diff --git a/app/lib/src/types/base.js b/app/lib/src/types/base.js
new file mode 100644
index 0000000..9bd1e43
--- /dev/null
+++ b/app/lib/src/types/base.js
@@ -0,0 +1,65 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var parser_1 = require("../parser");
+var masker_1 = require("../masker");
+// import { ZodString } from './string';
+// import { maskUtil } from '../helpers/maskUtil';
+var ZodTypes;
+(function (ZodTypes) {
+    ZodTypes["string"] = "string";
+    ZodTypes["number"] = "number";
+    ZodTypes["boolean"] = "boolean";
+    ZodTypes["date"] = "date";
+    ZodTypes["undefined"] = "undefined";
+    ZodTypes["null"] = "null";
+    ZodTypes["array"] = "array";
+    ZodTypes["object"] = "object";
+    // interface = 'interface',
+    ZodTypes["union"] = "union";
+    ZodTypes["intersection"] = "intersection";
+    ZodTypes["tuple"] = "tuple";
+    ZodTypes["record"] = "record";
+    ZodTypes["function"] = "function";
+    ZodTypes["lazy"] = "lazy";
+    ZodTypes["lazyobject"] = "lazyobject";
+    ZodTypes["literal"] = "literal";
+    ZodTypes["enum"] = "enum";
+})(ZodTypes = exports.ZodTypes || (exports.ZodTypes = {}));
+//   interface Assertable<T> {
+//     is(value: any): value is T;
+//     assert(value: any): asserts value is T;
+// }
+var ZodType = /** @class */ (function () {
+    // pick = <Params extends maskUtil.Params<Type>>(_params: Params): maskUtil.Mask<Type, Params> => {
+    //   return 'asdf' as any;
+    // };
+    function ZodType(def) {
+        var _this = this;
+        this.mask = function (_params) {
+            return masker_1.Masker(_this, _params);
+        };
+        this.parse = parser_1.ZodParser(def);
+        this._def = 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..0944594
--- /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":";;AAAA,oCAAmD;AAEnD,oCAAmC;AACnC,wCAAwC;AACxC,kDAAkD;AAElD,IAAY,QAmBX;AAnBD,WAAY,QAAQ;IAClB,6BAAiB,CAAA;IACjB,6BAAiB,CAAA;IACjB,+BAAmB,CAAA;IACnB,yBAAa,CAAA;IACb,mCAAuB,CAAA;IACvB,yBAAa,CAAA;IACb,2BAAe,CAAA;IACf,6BAAiB,CAAA;IACjB,2BAA2B;IAC3B,2BAAe,CAAA;IACf,yCAA6B,CAAA;IAC7B,2BAAe,CAAA;IACf,6BAAiB,CAAA;IACjB,iCAAqB,CAAA;IACrB,yBAAa,CAAA;IACb,qCAAyB,CAAA;IACzB,+BAAmB,CAAA;IACnB,yBAAa,CAAA;AACf,CAAC,EAnBW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAmBnB;AAeD,8BAA8B;AAC9B,kCAAkC;AAClC,8CAA8C;AAC9C,IAAI;AAEJ;IAiCE,mGAAmG;IACnG,0BAA0B;IAC1B,KAAK;IAEL,iBAAY,GAAQ;QAApB,iBAGC;QAXD,SAAI,GAAG,UAAkC,OAAU;YACjD,OAAO,eAAM,CAAC,KAAI,EAAE,OAAO,CAAQ,CAAC;QACtC,CAAC,CAAC;QAOA,IAAI,CAAC,KAAK,GAAG,kBAAS,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IA7BD,oBAAE,GAAF,UAAG,CAAO;QACR,IAAI;YACF,IAAI,CAAC,KAAK,CAAC,CAAQ,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC;SACb;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAED,uBAAK,GAAL,UAAM,CAAO;QACX,IAAI;YACF,IAAI,CAAC,KAAK,CAAC,CAAQ,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC;SACb;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAkBH,cAAC;AAAD,CAAC,AA7CD,IA6CC;AA7CqB,0BAAO"}
\ 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..21c535a
--- /dev/null
+++ b/app/lib/src/types/boolean.d.ts
@@ -0,0 +1,13 @@
+import * as z from './base';
+import { ZodUndefined } from './undefined';
+import { ZodNull } from './null';
+import { ZodUnion } from './union';
+export interface ZodBooleanDef extends z.ZodTypeDef {
+    t: z.ZodTypes.boolean;
+}
+export declare class ZodBoolean extends z.ZodType<boolean, ZodBooleanDef> {
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+    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..a40463c
--- /dev/null
+++ b/app/lib/src/types/boolean.js
@@ -0,0 +1,44 @@
+"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 undefined_1 = require("./undefined");
+var null_1 = require("./null");
+var union_1 = require("./union");
+var ZodBoolean = /** @class */ (function (_super) {
+    __extends(ZodBoolean, _super);
+    function ZodBoolean() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.optional = function () { return union_1.ZodUnion.create([_this, undefined_1.ZodUndefined.create()]); };
+        _this.nullable = function () { return union_1.ZodUnion.create([_this, null_1.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..bacff31
--- /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;AAC5B,yCAA2C;AAC3C,+BAAiC;AACjC,iCAAmC;AAMnC;IAAgC,8BAAiC;IAAjE;QAAA,qEAWC;QAVC,cAAQ,GAAyC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,wBAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAA9C,CAA8C,CAAC;QAEtG,cAAQ,GAAoC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,cAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAzC,CAAyC,CAAC;QAE5F,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..bf27290
--- /dev/null
+++ b/app/lib/src/types/date.d.ts
@@ -0,0 +1,13 @@
+import * as z from './base';
+import { ZodUndefined } from './undefined';
+import { ZodNull } from './null';
+import { ZodUnion } from './union';
+export interface ZodDateDef extends z.ZodTypeDef {
+    t: z.ZodTypes.date;
+}
+export declare class ZodDate extends z.ZodType<Date, ZodDateDef> {
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+    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..0492a91
--- /dev/null
+++ b/app/lib/src/types/date.js
@@ -0,0 +1,44 @@
+"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 undefined_1 = require("./undefined");
+var null_1 = require("./null");
+var union_1 = require("./union");
+var ZodDate = /** @class */ (function (_super) {
+    __extends(ZodDate, _super);
+    function ZodDate() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.optional = function () { return union_1.ZodUnion.create([_this, undefined_1.ZodUndefined.create()]); };
+        _this.nullable = function () { return union_1.ZodUnion.create([_this, null_1.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..4427567
--- /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;AAC5B,yCAA2C;AAC3C,+BAAiC;AACjC,iCAAmC;AAMnC;IAA6B,2BAA2B;IAAxD;QAAA,qEAWC;QAVC,cAAQ,GAAyC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,wBAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAA9C,CAA8C,CAAC;QAEtG,cAAQ,GAAoC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,cAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAzC,CAAyC,CAAC;QAE5F,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..edbbb33
--- /dev/null
+++ b/app/lib/src/types/enum.d.ts
@@ -0,0 +1,22 @@
+import * as z from './base';
+import { ZodUndefined } from './undefined';
+import { ZodNull } from './null';
+import { ZodUnion } from './union';
+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>> {
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+    toJSON: () => ZodEnumDef<T>;
+    readonly Values: 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..43a6e88
--- /dev/null
+++ b/app/lib/src/types/enum.js
@@ -0,0 +1,57 @@
+"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 undefined_1 = require("./undefined");
+var null_1 = require("./null");
+var union_1 = require("./union");
+var ZodEnum = /** @class */ (function (_super) {
+    __extends(ZodEnum, _super);
+    function ZodEnum() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.optional = function () { return union_1.ZodUnion.create([_this, undefined_1.ZodUndefined.create()]); };
+        _this.nullable = function () { return union_1.ZodUnion.create([_this, null_1.ZodNull.create()]); };
+        _this.toJSON = function () { return _this._def; };
+        return _this;
+    }
+    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
+    });
+    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..e65b530
--- /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;AAC5B,yCAA2C;AAC3C,+BAAiC;AACjC,iCAAmC;AAsBnC;IAA8D,2BAAmC;IAAjG;QAAA,qEAoBC;QAnBC,cAAQ,GAAyC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,wBAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAA9C,CAA8C,CAAC;QAEtG,cAAQ,GAAoC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,cAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAzC,CAAyC,CAAC;QAE5F,YAAM,GAAG,cAAM,OAAA,KAAI,CAAC,IAAI,EAAT,CAAS,CAAC;;IAe3B,CAAC;IAbC,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;IACM,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,AApBD,CAA8D,CAAC,CAAC,OAAO,GAoBtE;AApBY,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..1204276
--- /dev/null
+++ b/app/lib/src/types/function.d.ts
@@ -0,0 +1,16 @@
+import * as z from './base';
+import { ZodTuple } from './tuple';
+export interface ZodFunctionDef<Args extends ZodTuple<any> = ZodTuple<any>, Returns extends z.ZodAny = z.ZodAny> extends z.ZodTypeDef {
+    t: z.ZodTypes.function;
+    args: Args;
+    returns: Returns;
+}
+export declare type TypeOfFunction<Args extends ZodTuple<any>, Returns extends z.ZodAny> = Args['_type'] extends Array<any> ? (...args: Args['_type']) => Returns['_type'] : never;
+export declare class ZodFunction<Args extends ZodTuple<any>, Returns extends z.ZodAny> {
+    readonly _def: ZodFunctionDef<Args, Returns>;
+    readonly _type: TypeOfFunction<Args, Returns>;
+    constructor(def: ZodFunctionDef<Args, Returns>);
+    implement: (func: TypeOfFunction<Args, Returns>) => TypeOfFunction<Args, Returns>;
+    validate: (func: TypeOfFunction<Args, Returns>) => TypeOfFunction<Args, Returns>;
+    static create: <T extends ZodTuple<any>, U extends z.ZodType<any, z.ZodTypeDef>>(args: T, returns: U) => ZodFunction<T, U>;
+}
diff --git a/app/lib/src/types/function.js b/app/lib/src/types/function.js
new file mode 100644
index 0000000..1008582
--- /dev/null
+++ b/app/lib/src/types/function.js
@@ -0,0 +1,45 @@
+"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("./base"));
+var ZodFunction = /** @class */ (function () {
+    function ZodFunction(def) {
+        var _this = this;
+        this.implement = function (func) {
+            var validatedFunc = function () {
+                var args = [];
+                for (var _i = 0; _i < arguments.length; _i++) {
+                    args[_i] = arguments[_i];
+                }
+                try {
+                    _this._def.args.parse(args);
+                    var result = func.apply(void 0, args);
+                    _this._def.returns.parse(result);
+                    return result;
+                }
+                catch (err) {
+                    throw err;
+                }
+            };
+            return validatedFunc;
+        };
+        this.validate = this.implement;
+        this._def = def;
+    }
+    ZodFunction.create = function (args, returns) {
+        return new ZodFunction({
+            t: z.ZodTypes.function,
+            args: args,
+            returns: returns,
+        });
+    };
+    return ZodFunction;
+}());
+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..9d5878c
--- /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;IAIE,qBAAY,GAAkC;QAA9C,iBAEC;QAED,cAAS,GAAG,UAAC,IAAmC;YAC9C,IAAM,aAAa,GAAG;gBAAC,cAAc;qBAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;oBAAd,yBAAc;;gBACnC,IAAI;oBACF,KAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAW,CAAC,CAAC;oBAClC,IAAM,MAAM,GAAG,IAAI,eAAK,IAAY,CAAC,CAAC;oBACtC,KAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAChC,OAAO,MAAM,CAAC;iBACf;gBAAC,OAAO,GAAG,EAAE;oBACZ,MAAM,GAAG,CAAC;iBACX;YACH,CAAC,CAAC;YACF,OAAQ,aAAsD,CAAC;QACjE,CAAC,CAAC;QAEF,aAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAjBxB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAkBM,kBAAM,GAAG,UAA8C,IAAO,EAAE,OAAU;QAC/E,OAAO,IAAI,WAAW,CAAC;YACrB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ;YACtB,IAAI,MAAA;YACJ,OAAO,SAAA;SACR,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,kBAAC;CAAA,AA/BD,IA+BC;AA/BY,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..b3e2c83
--- /dev/null
+++ b/app/lib/src/types/intersection.d.ts
@@ -0,0 +1,19 @@
+import * as z from './base';
+import { ZodUndefined } from './undefined';
+import { ZodNull } from './null';
+import { ZodUnion } from './union';
+export interface ZodIntersectionDef<T extends z.ZodAny = z.ZodAny, U extends z.ZodAny = z.ZodAny> extends z.ZodTypeDef {
+    t: z.ZodTypes.intersection;
+    left: T;
+    right: U;
+}
+export declare class ZodIntersection<T extends z.ZodAny, U extends z.ZodAny> extends z.ZodType<T['_type'] & U['_type'], ZodIntersectionDef<T, U>> {
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+    toJSON: () => {
+        t: z.ZodTypes.intersection;
+        left: object;
+        right: object;
+    };
+    static create: <T_1 extends z.ZodType<any, z.ZodTypeDef>, U_1 extends z.ZodType<any, z.ZodTypeDef>>(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..a966d70
--- /dev/null
+++ b/app/lib/src/types/intersection.js
@@ -0,0 +1,50 @@
+"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 undefined_1 = require("./undefined");
+var null_1 = require("./null");
+var union_1 = require("./union");
+var ZodIntersection = /** @class */ (function (_super) {
+    __extends(ZodIntersection, _super);
+    function ZodIntersection() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.optional = function () { return union_1.ZodUnion.create([_this, undefined_1.ZodUndefined.create()]); };
+        _this.nullable = function () { return union_1.ZodUnion.create([_this, null_1.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..b15a974
--- /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;AAC5B,yCAA2C;AAC3C,+BAAiC;AACjC,iCAAmC;AAQnC;IAA6E,mCAG5E;IAHD;QAAA,qEAqBC;QAjBC,cAAQ,GAAyC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,wBAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAA9C,CAA8C,CAAC;QAEtG,cAAQ,GAAoC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,cAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAzC,CAAyC,CAAC;QAE5F,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,UAAyC,IAAO,EAAE,KAAQ;QACxE,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,CAA6E,CAAC,CAAC,OAAO,GAqBrF;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..67c1e5d
--- /dev/null
+++ b/app/lib/src/types/lazy.d.ts
@@ -0,0 +1,15 @@
+import * as z from './base';
+import { ZodUndefined } from './undefined';
+import { ZodNull } from './null';
+import { ZodUnion } from './union';
+export interface ZodLazyDef<T extends z.ZodAny = z.ZodAny> extends z.ZodTypeDef {
+    t: z.ZodTypes.lazy;
+    getter: () => T;
+}
+export declare class ZodLazy<T extends z.ZodAny> extends z.ZodType<z.TypeOf<T>, ZodLazyDef<T>> {
+    readonly schema: T;
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+    toJSON: () => never;
+    static create: <T_1 extends z.ZodType<any, z.ZodTypeDef>>(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..9a4964e
--- /dev/null
+++ b/app/lib/src/types/lazy.js
@@ -0,0 +1,58 @@
+"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 undefined_1 = require("./undefined");
+var null_1 = require("./null");
+var union_1 = require("./union");
+var ZodLazy = /** @class */ (function (_super) {
+    __extends(ZodLazy, _super);
+    function ZodLazy() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.optional = function () { return union_1.ZodUnion.create([_this, undefined_1.ZodUndefined.create()]); };
+        _this.nullable = function () { return union_1.ZodUnion.create([_this, null_1.ZodNull.create()]); };
+        _this.toJSON = function () {
+            throw new Error("Can't JSONify recursive structure");
+        };
+        return _this;
+        //  static recursion = <Rels extends { [k: string]: any }, T extends ZodObject<any>>(
+        //    getter: () => T,
+        //  ) => {};
+    }
+    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;
+// type
+//# 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..1286628
--- /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;AAC5B,yCAA2C;AAC3C,+BAAiC;AACjC,iCAAmC;AAQnC;IAAiD,2BAAqC;IAAtF;QAAA,qEAuBC;QAlBC,cAAQ,GAAyC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,wBAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAA9C,CAA8C,CAAC;QAEtG,cAAQ,GAAoC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,cAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAzC,CAAyC,CAAC;QAE5F,YAAM,GAAG;YACP,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC,CAAC;;QASF,qFAAqF;QACrF,sBAAsB;QACtB,YAAY;IACd,CAAC;IAtBC,sBAAI,2BAAM;aAAV;YACE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,CAAC;;;OAAA;IAUM,cAAM,GAAG,UAAqB,MAAe;QAClD,OAAO,IAAI,OAAO,CAAC;YACjB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;YAClB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC,CAAC;IAKJ,cAAC;CAAA,AAvBD,CAAiD,CAAC,CAAC,OAAO,GAuBzD;AAvBY,0BAAO;AAyBpB,OAAO"}
\ No newline at end of file
diff --git a/app/lib/src/types/lazyobject.d.ts b/app/lib/src/types/lazyobject.d.ts
new file mode 100644
index 0000000..f0a08bc
--- /dev/null
+++ b/app/lib/src/types/lazyobject.d.ts
@@ -0,0 +1,20 @@
+import * as z from './base';
+import { ZodObject } from './object';
+export interface ZodLazyObjectDef<T extends ZodObject<any> = ZodObject<any>> extends z.ZodTypeDef {
+    t: z.ZodTypes.lazyobject;
+    getter: () => T;
+}
+export declare class ZodLazyObject<T extends ZodObject<any>> extends z.ZodType<z.TypeOf<T>, ZodLazyObjectDef<T>> {
+    readonly schema: T;
+    optional: () => this;
+    nullable: () => this;
+    toJSON: () => never;
+    static create: <T_1 extends ZodObject<any, {
+        strict: true;
+    }>>(getter: () => T_1) => ZodLazyObject<T_1>;
+    augment: (arg: any) => ZodLazyObject<ZodObject<{} & {
+        [x: string]: any;
+    }, {
+        strict: true;
+    }>>;
+}
diff --git a/app/lib/src/types/lazyobject.js b/app/lib/src/types/lazyobject.js
new file mode 100644
index 0000000..da8e72a
--- /dev/null
+++ b/app/lib/src/types/lazyobject.js
@@ -0,0 +1,64 @@
+"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 ZodLazyObject = /** @class */ (function (_super) {
+    __extends(ZodLazyObject, _super);
+    function ZodLazyObject() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.optional = function () {
+            console.log("nullable does nothing on ZodLazyObject");
+            return _this;
+        }; // ZodUnion<[this, ZodUndefined]> = () => ZodUnion.create([this, ZodUndefined.create()]);
+        _this.nullable = function () {
+            console.log("nullable does nothing on ZodLazyObject");
+            return _this;
+        }; // ZodUnion<[this, ZodNull]> = () => ZodUnion.create([this, ZodNull.create()]);
+        _this.toJSON = function () {
+            throw new Error("Can't JSONify recursive structure");
+        };
+        _this.augment = function (arg) {
+            return ZodLazyObject.create(function () { return _this._def.getter().augment(arg); });
+        };
+        return _this;
+        //  static recursion = <Rels extends { [k: string]: any }, T extends ZodObject<any>>(
+        //    getter: () => T,
+        //  ) => {};
+    }
+    Object.defineProperty(ZodLazyObject.prototype, "schema", {
+        get: function () {
+            return this._def.getter();
+        },
+        enumerable: true,
+        configurable: true
+    });
+    ZodLazyObject.create = function (getter) {
+        return new ZodLazyObject({
+            t: z.ZodTypes.lazyobject,
+            getter: getter,
+        });
+    };
+    return ZodLazyObject;
+}(z.ZodType));
+exports.ZodLazyObject = ZodLazyObject;
+// type
+//# sourceMappingURL=lazyobject.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/lazyobject.js.map b/app/lib/src/types/lazyobject.js.map
new file mode 100644
index 0000000..40eee02
--- /dev/null
+++ b/app/lib/src/types/lazyobject.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"lazyobject.js","sourceRoot":"","sources":["../../../src/types/lazyobject.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAY5B;IAA6D,iCAA2C;IAAxG;QAAA,qEAiCC;QA5BC,cAAQ,GAAG;YACT,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YACtD,OAAO,KAAI,CAAC;QACd,CAAC,CAAC,CAAC,yFAAyF;QAE5F,cAAQ,GAAG;YACT,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YACtD,OAAO,KAAI,CAAC;QACd,CAAC,CAAC,CAAC,+EAA+E;QAElF,YAAM,GAAG;YACP,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC,CAAC;QASF,aAAO,GAAG,UAAC,GAAQ;YACjB,OAAO,aAAa,CAAC,MAAM,CAAC,cAAM,OAAA,KAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAA/B,CAA+B,CAAC,CAAC;QACrE,CAAC,CAAC;;QAEF,qFAAqF;QACrF,sBAAsB;QACtB,YAAY;IACd,CAAC;IAhCC,sBAAI,iCAAM;aAAV;YACE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,CAAC;;;OAAA;IAgBM,oBAAM,GAAG,UAA2B,MAAe;QACxD,OAAO,IAAI,aAAa,CAAC;YACvB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU;YACxB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC,CAAC;IASJ,oBAAC;CAAA,AAjCD,CAA6D,CAAC,CAAC,OAAO,GAiCrE;AAjCY,sCAAa;AAmC1B,OAAO"}
\ 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..b001179
--- /dev/null
+++ b/app/lib/src/types/literal.d.ts
@@ -0,0 +1,15 @@
+import * as z from './base';
+import { ZodUndefined } from './undefined';
+import { ZodNull } from './null';
+import { ZodUnion } from './union';
+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>> {
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+    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..4af3642
--- /dev/null
+++ b/app/lib/src/types/literal.js
@@ -0,0 +1,46 @@
+"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 undefined_1 = require("./undefined");
+var null_1 = require("./null");
+var union_1 = require("./union");
+var ZodLiteral = /** @class */ (function (_super) {
+    __extends(ZodLiteral, _super);
+    function ZodLiteral() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.optional = function () { return union_1.ZodUnion.create([_this, undefined_1.ZodUndefined.create()]); };
+        _this.nullable = function () { return union_1.ZodUnion.create([_this, null_1.ZodNull.create()]); };
+        _this.toJSON = function () { return _this._def; };
+        return _this;
+    }
+    // static create = <U extends Primitive, T extends LiteralValue<U>>(value: T): ZodLiteral<T> => {
+    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..742699b
--- /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;AAC5B,yCAA2C;AAC3C,+BAAiC;AACjC,iCAAmC;AAgCnC;IAA+C,8BAA8B;IAA7E;QAAA,qEAcC;QAbC,cAAQ,GAAyC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,wBAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAA9C,CAA8C,CAAC;QAEtG,cAAQ,GAAoC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,cAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAzC,CAAyC,CAAC;QAE5F,YAAM,GAAG,cAAM,OAAA,KAAI,CAAC,IAAI,EAAT,CAAS,CAAC;;IAS3B,CAAC;IAPC,iGAAiG;IAC1F,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,AAdD,CAA+C,CAAC,CAAC,OAAO,GAcvD;AAdY,gCAAU"}
\ 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..96a6dd8
--- /dev/null
+++ b/app/lib/src/types/null.d.ts
@@ -0,0 +1,12 @@
+import * as z from './base';
+import { ZodUndefined } from './undefined';
+import { ZodUnion } from './union';
+export interface ZodNullDef extends z.ZodTypeDef {
+    t: z.ZodTypes.null;
+}
+export declare class ZodNull extends z.ZodType<null, ZodNullDef> {
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+    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..9fc3da2
--- /dev/null
+++ b/app/lib/src/types/null.js
@@ -0,0 +1,43 @@
+"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 undefined_1 = require("./undefined");
+var union_1 = require("./union");
+var ZodNull = /** @class */ (function (_super) {
+    __extends(ZodNull, _super);
+    function ZodNull() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.optional = function () { return union_1.ZodUnion.create([_this, undefined_1.ZodUndefined.create()]); };
+        _this.nullable = function () { return union_1.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..a7d5544
--- /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;AAC5B,yCAA2C;AAC3C,iCAAmC;AAMnC;IAA6B,2BAA2B;IAAxD;QAAA,qEAWC;QAVC,cAAQ,GAAyC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,wBAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAA9C,CAA8C,CAAC;QAEtG,cAAQ,GAAoC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAzC,CAAyC,CAAC;QAE5F,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..9cc7d74
--- /dev/null
+++ b/app/lib/src/types/number.d.ts
@@ -0,0 +1,13 @@
+import * as z from './base';
+import { ZodUndefined } from './undefined';
+import { ZodNull } from './null';
+import { ZodUnion } from './union';
+export interface ZodNumberDef extends z.ZodTypeDef {
+    t: z.ZodTypes.number;
+}
+export declare class ZodNumber extends z.ZodType<number, ZodNumberDef> {
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+    toJSON: () => ZodNumberDef;
+    static create: () => ZodNumber;
+}
diff --git a/app/lib/src/types/number.js b/app/lib/src/types/number.js
new file mode 100644
index 0000000..ca7afff
--- /dev/null
+++ b/app/lib/src/types/number.js
@@ -0,0 +1,44 @@
+"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 undefined_1 = require("./undefined");
+var null_1 = require("./null");
+var union_1 = require("./union");
+var ZodNumber = /** @class */ (function (_super) {
+    __extends(ZodNumber, _super);
+    function ZodNumber() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.optional = function () { return union_1.ZodUnion.create([_this, undefined_1.ZodUndefined.create()]); };
+        _this.nullable = function () { return union_1.ZodUnion.create([_this, null_1.ZodNull.create()]); };
+        _this.toJSON = function () { return _this._def; };
+        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..8e73887
--- /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,yCAA2C;AAC3C,+BAAiC;AACjC,iCAAmC;AAMnC;IAA+B,6BAA+B;IAA9D;QAAA,qEAWC;QAVC,cAAQ,GAAyC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,wBAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAA9C,CAA8C,CAAC;QAEtG,cAAQ,GAAoC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,cAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAzC,CAAyC,CAAC;QAE5F,YAAM,GAAG,cAAM,OAAA,KAAI,CAAC,IAAI,EAAT,CAAS,CAAC;;IAM3B,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,AAXD,CAA+B,CAAC,CAAC,OAAO,GAWvC;AAXY,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..92c117e
--- /dev/null
+++ b/app/lib/src/types/object.d.ts
@@ -0,0 +1,62 @@
+import * as z from './base';
+import { ZodUndefined } from './undefined';
+import { ZodNull } from './null';
+import { ZodUnion } from './union';
+import { objectUtil } from '../helpers/objectUtil';
+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;
+}
+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;
+}>;
+declare type OptionalSchema<T extends z.ZodAny> = T extends {
+    optional: () => infer U;
+} ? U : never;
+declare type PartialShape<T extends z.ZodRawShape> = {
+    [k in keyof T]: OptionalSchema<T[k]>;
+};
+declare type WithType<Schema extends z.ZodAny, Type> = {
+    [k in Exclude<keyof Schema, '_type'>]: Schema[k];
+} & {
+    _type: Type;
+};
+export declare class ZodObject<T extends z.ZodRawShape, Params extends ZodObjectParams = {
+    strict: true;
+}> extends z.ZodType<ZodObjectType<T, Params>, // { [k in keyof T]: T[k]['_type'] },
+ZodObjectDef<T, Params>> {
+    readonly _shape: T;
+    private readonly _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;
+    }>>;
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+    augment: <Augmentation extends z.ZodRawShape>(augmentation: Augmentation) => ZodObject<{ [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 keyof Mask]: k extends keyof T ? T[k] : never; }, Params>;
+    omit: <Mask extends { [k in keyof T]?: true | undefined; }>(mask: Mask) => ZodObject<{ [k in keyof T]: k extends keyof Mask ? never : T[k]; }, Params>;
+    partial: () => ZodObject<PartialShape<T>, Params>;
+    deepPartial: () => WithType<ZodObject<any, Params>, objectUtil.DeepPartial<ZodObjectType<T, Params>>>;
+    static create: <T_1 extends z.ZodRawShape>(shape: T_1) => ZodObject<T_1, {
+        strict: true;
+    }>;
+}
+export {};
diff --git a/app/lib/src/types/object.js b/app/lib/src/types/object.js
new file mode 100644
index 0000000..dbebe6c
--- /dev/null
+++ b/app/lib/src/types/object.js
@@ -0,0 +1,234 @@
+"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")); // change
+var array_1 = require("./array");
+var lazy_1 = require("./lazy");
+var undefined_1 = require("./undefined");
+var null_1 = require("./null");
+var tuple_1 = require("./tuple");
+var union_1 = require("./union");
+var objectUtil_1 = require("../helpers/objectUtil");
+// import { ZodString } from './string';
+// import { maskUtil } from '../helpers/maskUtil';
+// import { zodmaskUtil } from '../helpers/zodmaskUtil';
+// import { applyMask } from '../masker';
+var AugmentFactory = function (def) { return function (augmentation) {
+    return new ZodObject(__assign({}, def, { shape: __assign({}, def.shape, augmentation) }));
+}; };
+// const infer = <T extends ZodObjectDef<any>>(def: T): T => def;
+// const qewr = infer({ t: z.ZodTypes.object, shape: { asfd: ZodString.create() }, params: { strict: true } });
+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 makePartialShape = function (shape) {
+    var nextShape = {};
+    for (var key in shape) {
+        nextShape[key] = shape[key].optional();
+    }
+    return nextShape;
+};
+var deepPartialifySchema = function (schema, cache) {
+    var cached = cache.get(schema);
+    if (cached) {
+        return cached;
+    }
+    if (schema instanceof ZodObject) {
+        var partialObject = new ZodObject(__assign({}, schema._def, { shape: makeDeepPartialShape(schema.shape, cache) }));
+        cache.set(schema, partialObject);
+        return partialObject;
+    }
+    if (schema instanceof array_1.ZodArray) {
+        var partialArray = new array_1.ZodArray(__assign({}, schema._def, { type: deepPartialifySchema(schema._def.type, cache) }));
+        cache.set(schema, partialArray);
+        return partialArray;
+    }
+    if (schema instanceof tuple_1.ZodTuple) {
+        var partialTuple = tuple_1.ZodTuple.create(schema._def.items.map(function (item) { return deepPartialifySchema(item, cache); }));
+        cache.set(schema, partialTuple);
+        return partialTuple;
+    }
+    if (schema instanceof lazy_1.ZodLazy) {
+        var partialLazy = lazy_1.ZodLazy.create(function () { return deepPartialifySchema(schema.schema, cache); });
+        cache.set(schema, partialLazy);
+        return partialLazy;
+    }
+    return schema;
+};
+var makeDeepPartialShape = function (shape, cache) {
+    var nextShape = {};
+    for (var key in shape) {
+        nextShape[key] = deepPartialifySchema(shape[key], cache).optional();
+    }
+    return nextShape;
+};
+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,
+                //  strict: false,
+                t: z.ZodTypes.object,
+                params: __assign({}, _this._params, { strict: false }),
+            });
+        };
+        _this.optional = function () { return union_1.ZodUnion.create([_this, undefined_1.ZodUndefined.create()]); };
+        _this.nullable = function () { return union_1.ZodUnion.create([_this, null_1.ZodNull.create()]); };
+        //
+        _this.augment = AugmentFactory(_this._def);
+        // augment = <Augmentation extends z.ZodRawShape>(
+        //   augmentation: Augmentation,
+        // ): ZodObject<
+        //   { [k in Exclude<keyof T, keyof Augmentation>]: T[k] } & { [k in keyof Augmentation]: Augmentation[k] },
+        //   Params
+        // > => {
+        //   return new ZodObject({
+        //     ...this._def,
+        //     shape: {
+        //       ...this._def.shape,
+        //       ...augmentation,
+        //     },
+        //   }) as any;
+        // };
+        /**
+         * 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._def.shape[key];
+            });
+            return new ZodObject(__assign({}, _this._def, { shape: shape }));
+        };
+        // omitKeys = <OmitKeys extends (keyof T)[]>(...omit:OmitKeys):OmitKeys => omit;
+        _this.omit = function (mask) {
+            var shape = {};
+            Object.keys(_this._def.shape).map(function (key) {
+                if (!Object.keys(mask).includes(key)) {
+                    shape[key] = _this._def.shape[key];
+                }
+            });
+            return new ZodObject(__assign({}, _this._def, { shape: shape }));
+        };
+        _this.partial = function () {
+            return new ZodObject(__assign({}, _this._def, { shape: makePartialShape(_this.shape) }));
+        };
+        _this.deepPartial = function () {
+            return new ZodObject(__assign({}, _this._def, { shape: makeDeepPartialShape(_this.shape, new Map()) }));
+        };
+        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
+    });
+    // pick = <Mask extends zodmaskUtil.Params<ZodObject<T>>>(
+    //   mask: Mask,
+    // ): zodmaskUtil.pick<ZodObject<T, Params>, Mask> => {
+    //   return applyMask(this, mask, 'pick');
+    // };
+    // omit = <Mask extends zodmaskUtil.Params<ZodObject<T>>>(
+    //   mask: Mask,
+    // ): zodmaskUtil.omit<ZodObject<T, Params>, Mask> => {
+    //   return applyMask(this, mask, 'omit');
+    // };
+    // relations = <Rels extends { [k: string]: any }>(
+    //   lazyShape: { [k in keyof Rels]: ZodLazy<z.ZodType<Rels[k]>> },
+    // ): RelationsReturnType<Rels, T> => {
+    //   // const relationShape: any = {};
+    //   // for (const key in lazyShape) {
+    //   //   relationShape[key] = lazyShape[key]();
+    //   // }
+    //   // console.log(relationShape);
+    //   // const relationKeys = Object.keys(lazyShape);
+    //   // const existingKeys = Object.keys(this._def.shape);
+    //   return new ZodObject({
+    //     t: z.ZodTypes.object,
+    //     strict: this._def.strict,
+    //     shape: {
+    //       ...this._def.shape,
+    //       ...lazyShape,
+    //     },
+    //   }) as any;
+    // };
+    // static recursion = <R extends { [k: string]: any }>() => <T extends ZodObject<any>>(
+    //   shape: withRefsInputType<T, R>,
+    // ): ZodObject<withRefsReturnType<T, R>> => {
+    //   //  const getters =
+    //   return new ZodObject({ t: z.ZodTypes.object, strict: true, shape(); });
+    // };
+    ZodObject.create = function (shape) {
+        return new ZodObject({
+            t: z.ZodTypes.object,
+            //  strict: true,
+            shape: shape,
+            params: {
+                strict: true,
+            },
+        });
+    };
+    return ZodObject;
+}(z.ZodType));
+exports.ZodObject = ZodObject;
+// type RelationsReturnType<Rels extends { [k: string]: any }, Shape extends z.ZodRawShape> = ZodObject<
+//   Without<Shape, keyof Rels> & { [k in keyof Rels]: ZodLazy<z.ZodType<Rels[k]>> }
+// >;
+// type Without<T, K> = Pick<T, Exclude<keyof T, K>>;
+// type withRefsInputType<T extends z.ZodObject, Refs extends { [k in keyof T]: any }> = ZodObject<
+//   Without<T['_shape'], keyof Refs> & { [k in keyof Refs]: ZodLazy<Refs[k]> }
+// >;
+// type withRefsReturnType<T extends z.ZodRawShape, Refs extends { [k in keyof T]?: any }> = Without<T, keyof Refs> &
+//   { [k in keyof Refs]: z.ZodType<Refs[k]> };
+//# 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..03fa9d9
--- /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/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..0b294f4
--- /dev/null
+++ b/app/lib/src/types/record.d.ts
@@ -0,0 +1,19 @@
+import * as z from './base';
+import { ZodUndefined } from './undefined';
+import { ZodNull } from './null';
+import { ZodUnion } from './union';
+export interface ZodRecordDef<Value extends z.ZodAny = z.ZodAny> extends z.ZodTypeDef {
+    t: z.ZodTypes.record;
+    valueType: Value;
+}
+export declare class ZodRecord<Value extends z.ZodAny = z.ZodAny> 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;
+    };
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+    static create: <Value_1 extends z.ZodType<any, z.ZodTypeDef> = z.ZodType<any, z.ZodTypeDef>>(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..c5e82ac
--- /dev/null
+++ b/app/lib/src/types/record.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 undefined_1 = require("./undefined");
+var null_1 = require("./null");
+var union_1 = require("./union");
+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(),
+        }); };
+        _this.optional = function () { return union_1.ZodUnion.create([_this, undefined_1.ZodUndefined.create()]); };
+        _this.nullable = function () { return union_1.ZodUnion.create([_this, null_1.ZodNull.create()]); };
+        return _this;
+    }
+    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..2602e01
--- /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;AAC5B,yCAA2C;AAC3C,+BAAiC;AACjC,iCAAmC;AAOnC;IAAkE,6BAGjE;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;QAEH,cAAQ,GAAyC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,wBAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAA9C,CAA8C,CAAC;QAEtG,cAAQ,GAAoC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,cAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAzC,CAAyC,CAAC;;IAQ9F,CAAC;IANQ,gBAAM,GAAG,UAAoC,SAAgB;QAClE,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,CAAkE,CAAC,CAAC,OAAO,GAqB1E;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..931c4d1
--- /dev/null
+++ b/app/lib/src/types/string.d.ts
@@ -0,0 +1,13 @@
+import * as z from './base';
+import { ZodUndefined } from './undefined';
+import { ZodNull } from './null';
+import { ZodUnion } from './union';
+export interface ZodStringDef extends z.ZodTypeDef {
+    t: z.ZodTypes.string;
+}
+export declare class ZodString extends z.ZodType<string, ZodStringDef> {
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+    toJSON: () => ZodStringDef;
+    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..2df32cc
--- /dev/null
+++ b/app/lib/src/types/string.js
@@ -0,0 +1,44 @@
+"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 undefined_1 = require("./undefined");
+var null_1 = require("./null");
+var union_1 = require("./union");
+var ZodString = /** @class */ (function (_super) {
+    __extends(ZodString, _super);
+    function ZodString() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.optional = function () { return union_1.ZodUnion.create([_this, undefined_1.ZodUndefined.create()]); };
+        _this.nullable = function () { return union_1.ZodUnion.create([_this, null_1.ZodNull.create()]); };
+        _this.toJSON = function () { return _this._def; };
+        return _this;
+    }
+    ZodString.create = function () {
+        return new ZodString({
+            t: z.ZodTypes.string,
+        });
+    };
+    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..07716bd
--- /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":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAC5B,yCAA2C;AAC3C,+BAAiC;AACjC,iCAAmC;AAMnC;IAA+B,6BAA+B;IAA9D;QAAA,qEAYC;QAXC,cAAQ,GAAyC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,wBAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAA9C,CAA8C,CAAC;QAEtG,cAAQ,GAAoC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,cAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAzC,CAAyC,CAAC;QAE5F,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/tuple.d.ts b/app/lib/src/types/tuple.d.ts
new file mode 100644
index 0000000..f85e2a0
--- /dev/null
+++ b/app/lib/src/types/tuple.d.ts
@@ -0,0 +1,20 @@
+import * as z from './base';
+import { ZodUnion } from './union';
+import { ZodUndefined } from './undefined';
+import { ZodNull } from './null';
+export declare type TypeOfTuple<T extends [z.ZodAny, ...z.ZodAny[]] | []> = {
+    [k in keyof T]: T[k] extends z.ZodType<infer U> ? U : never;
+};
+export interface ZodTupleDef<T extends [z.ZodAny, ...z.ZodAny[]] | [] = [z.ZodAny, ...z.ZodAny[]]> extends z.ZodTypeDef {
+    t: z.ZodTypes.tuple;
+    items: T;
+}
+export declare class ZodTuple<T extends [z.ZodAny, ...z.ZodAny[]] | [] = [z.ZodAny, ...z.ZodAny[]]> extends z.ZodType<TypeOfTuple<T>, ZodTupleDef<T>> {
+    toJSON: () => {
+        t: z.ZodTypes.tuple;
+        items: any[];
+    };
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+    static create: <T_1 extends [z.ZodType<any, z.ZodTypeDef>, ...z.ZodType<any, z.ZodTypeDef>[]] | []>(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..c5be867
--- /dev/null
+++ b/app/lib/src/types/tuple.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 union_1 = require("./union");
+var undefined_1 = require("./undefined");
+var null_1 = require("./null");
+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(); }),
+        }); };
+        _this.optional = function () { return union_1.ZodUnion.create([_this, undefined_1.ZodUndefined.create()]); };
+        _this.nullable = function () { return union_1.ZodUnion.create([_this, null_1.ZodNull.create()]); };
+        return _this;
+    }
+    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..26d864b
--- /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;AAC5B,iCAAmC;AACnC,yCAA2C;AAC3C,+BAAiC;AAYjC;IAAoG,4BAGnG;IAHD;QAAA,qEAmBC;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;QAEH,cAAQ,GAAyC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,wBAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAA9C,CAA8C,CAAC;QAEtG,cAAQ,GAAoC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,cAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAzC,CAAyC,CAAC;;IAQ9F,CAAC;IANQ,eAAM,GAAG,UAA2C,OAAU;QACnE,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,AAnBD,CAAoG,CAAC,CAAC,OAAO,GAmB5G;AAnBY,4BAAQ"}
\ No newline at end of file
diff --git a/app/lib/src/types/typedRecord.d.ts b/app/lib/src/types/typedRecord.d.ts
new file mode 100644
index 0000000..9485900
--- /dev/null
+++ b/app/lib/src/types/typedRecord.d.ts
@@ -0,0 +1,31 @@
+import * as z from './base';
+import { ZodUndefined } from './undefined';
+import { ZodNull } from './null';
+import { ZodUnion } from './union';
+import { ZodString } from './string';
+import { ZodNumber } from './number';
+declare type RecordKey = ZodString | ZodNumber;
+export interface ZodRecordDef<Key extends RecordKey = ZodString, Value extends z.ZodAny = z.ZodAny> extends z.ZodTypeDef {
+    t: z.ZodTypes.record;
+    keyType: Key;
+    valueType: Value;
+}
+declare type ZodRecordType<Key extends RecordKey = ZodString, Value extends z.ZodAny = z.ZodAny> = Key extends ZodString ? Key extends ZodNumber ? Record<string | number, Value['_type']> : Record<string, Value['_type']> & {
+    [k: number]: never;
+} : Key extends ZodNumber ? Record<number, Value['_type']> & {
+    [k: string]: never;
+} : never;
+export declare class ZodRecord<Key extends RecordKey = ZodString, Value extends z.ZodAny = z.ZodAny> extends z.ZodType<ZodRecordType<Key, Value>, // { [k in keyof T]: T[k]['_type'] },
+ZodRecordDef<Key, Value>> {
+    readonly _key: Key;
+    readonly _value: Value;
+    toJSON: () => {
+        t: z.ZodTypes.record;
+        keyType: import("./string").ZodStringDef | import("./number").ZodNumberDef;
+        valueType: object;
+    };
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+    static create: <Key_1 extends RecordKey = ZodString, Value_1 extends z.ZodType<any, z.ZodTypeDef> = z.ZodType<any, z.ZodTypeDef>>(keyType: Key_1, valueType: Value_1) => ZodRecord<Key_1, Value_1>;
+}
+export {};
diff --git a/app/lib/src/types/typedRecord.js b/app/lib/src/types/typedRecord.js
new file mode 100644
index 0000000..2f19cd1
--- /dev/null
+++ b/app/lib/src/types/typedRecord.js
@@ -0,0 +1,50 @@
+"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 undefined_1 = require("./undefined");
+var null_1 = require("./null");
+var union_1 = require("./union");
+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,
+            keyType: _this._def.keyType.toJSON(),
+            valueType: _this._def.valueType.toJSON(),
+        }); };
+        _this.optional = function () { return union_1.ZodUnion.create([_this, undefined_1.ZodUndefined.create()]); };
+        _this.nullable = function () { return union_1.ZodUnion.create([_this, null_1.ZodNull.create()]); };
+        return _this;
+    }
+    ZodRecord.create = function (keyType, valueType) {
+        return new ZodRecord({
+            t: z.ZodTypes.record,
+            keyType: keyType,
+            valueType: valueType,
+        });
+    };
+    return ZodRecord;
+}(z.ZodType));
+exports.ZodRecord = ZodRecord;
+//# sourceMappingURL=typedRecord.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/typedRecord.js.map b/app/lib/src/types/typedRecord.js.map
new file mode 100644
index 0000000..b8ed64e
--- /dev/null
+++ b/app/lib/src/types/typedRecord.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"typedRecord.js","sourceRoot":"","sources":["../../../src/types/typedRecord.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA4B;AAC5B,yCAA2C;AAC3C,+BAAiC;AACjC,iCAAmC;AAqBnC;IAAqG,6BAGpG;IAHD;QAAA,qEA2BC;QApBC,YAAM,GAAG,cAAM,OAAA,CAAC;YACd,CAAC,EAAE,KAAI,CAAC,IAAI,CAAC,CAAC;YACd,OAAO,EAAE,KAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACnC,SAAS,EAAE,KAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;SACxC,CAAC,EAJa,CAIb,CAAC;QAEH,cAAQ,GAAyC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,wBAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAA9C,CAA8C,CAAC;QAEtG,cAAQ,GAAoC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,cAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAzC,CAAyC,CAAC;;IAY9F,CAAC;IAVQ,gBAAM,GAAG,UACd,OAAY,EACZ,SAAgB;QAEhB,OAAO,IAAI,SAAS,CAAC;YACnB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM;YACpB,OAAO,SAAA;YACP,SAAS,WAAA;SACV,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,gBAAC;CAAA,AA3BD,CAAqG,CAAC,CAAC,OAAO,GA2B7G;AA3BY,8BAAS"}
\ 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..cd1b082
--- /dev/null
+++ b/app/lib/src/types/undefined.d.ts
@@ -0,0 +1,12 @@
+import * as z from './base';
+import { ZodUnion } from './union';
+import { ZodNull } from './null';
+export interface ZodUndefinedDef extends z.ZodTypeDef {
+    t: z.ZodTypes.undefined;
+}
+export declare class ZodUndefined extends z.ZodType<undefined> {
+    toJSON: () => z.ZodTypeDef;
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+    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..077f88e
--- /dev/null
+++ b/app/lib/src/types/undefined.js
@@ -0,0 +1,43 @@
+"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 union_1 = require("./union");
+var null_1 = require("./null");
+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; };
+        _this.optional = function () { return union_1.ZodUnion.create([_this, ZodUndefined.create()]); };
+        _this.nullable = function () { return union_1.ZodUnion.create([_this, null_1.ZodNull.create()]); };
+        return _this;
+    }
+    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..93b3742
--- /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;AAC5B,iCAAmC;AACnC,+BAAiC;AAMjC;IAAkC,gCAAoB;IAAtD;QAAA,qEAYC;QAXC,YAAM,GAAG,cAAM,OAAA,KAAI,CAAC,IAAI,EAAT,CAAS,CAAC;QAEzB,cAAQ,GAAyC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAA9C,CAA8C,CAAC;QAEtG,cAAQ,GAAoC,cAAM,OAAA,gBAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,cAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAzC,CAAyC,CAAC;;IAO9F,CAAC;IALQ,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..a1ac827
--- /dev/null
+++ b/app/lib/src/types/union.d.ts
@@ -0,0 +1,16 @@
+import * as z from './base';
+import { ZodUndefined } from './undefined';
+import { ZodNull } from './null';
+export interface ZodUnionDef<T extends [z.ZodAny, z.ZodAny, ...z.ZodAny[]] = [z.ZodAny, z.ZodAny, ...z.ZodAny[]]> extends z.ZodTypeDef {
+    t: z.ZodTypes.union;
+    options: T;
+}
+export declare class ZodUnion<T extends [z.ZodAny, z.ZodAny, ...z.ZodAny[]]> extends z.ZodType<T[number]['_type'], ZodUnionDef<T>> {
+    optional: () => ZodUnion<[this, ZodUndefined]>;
+    nullable: () => ZodUnion<[this, ZodNull]>;
+    toJSON: () => {
+        t: z.ZodTypes.union;
+        options: object[];
+    };
+    static create: <T_1 extends [z.ZodType<any, z.ZodTypeDef>, z.ZodType<any, z.ZodTypeDef>, ...z.ZodType<any, z.ZodTypeDef>[]]>(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..58d9ba4
--- /dev/null
+++ b/app/lib/src/types/union.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 undefined_1 = require("./undefined");
+var null_1 = require("./null");
+var ZodUnion = /** @class */ (function (_super) {
+    __extends(ZodUnion, _super);
+    function ZodUnion() {
+        var _this = _super !== null && _super.apply(this, arguments) || this;
+        _this.optional = function () { return ZodUnion.create([_this, undefined_1.ZodUndefined.create()]); };
+        _this.nullable = function () { return ZodUnion.create([_this, null_1.ZodNull.create()]); };
+        _this.toJSON = function () { return ({
+            t: _this._def.t,
+            options: _this._def.options.map(function (x) { return x.toJSON(); }),
+        }); };
+        return _this;
+    }
+    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..5d0dc07
--- /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;AAC5B,yCAA2C;AAC3C,+BAAiC;AAQjC;IAA6E,4BAG5E;IAHD;QAAA,qEAmBC;QAfC,cAAQ,GAAyC,cAAM,OAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,wBAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAA9C,CAA8C,CAAC;QAEtG,cAAQ,GAAoC,cAAM,OAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAI,EAAE,cAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAzC,CAAyC,CAAC;QAE5F,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;;IAQL,CAAC;IANQ,eAAM,GAAG,UAAgD,KAAQ;QACtE,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,AAnBD,CAA6E,CAAC,CAAC,OAAO,GAmBrF;AAnBY,4BAAQ"}
\ No newline at end of file
diff --git a/app/lib/src/types/utils.d.ts b/app/lib/src/types/utils.d.ts
new file mode 100644
index 0000000..e69de29
diff --git a/app/lib/src/types/utils.js b/app/lib/src/types/utils.js
new file mode 100644
index 0000000..6662b59
--- /dev/null
+++ b/app/lib/src/types/utils.js
@@ -0,0 +1,2 @@
+"use strict";
+//# sourceMappingURL=utils.js.map
\ No newline at end of file
diff --git a/app/lib/src/types/utils.js.map b/app/lib/src/types/utils.js.map
new file mode 100644
index 0000000..6435acb
--- /dev/null
+++ b/app/lib/src/types/utils.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/types/utils.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/app/lib/src/visit.d.ts b/app/lib/src/visit.d.ts
new file mode 100644
index 0000000..a3d20ba
--- /dev/null
+++ b/app/lib/src/visit.d.ts
@@ -0,0 +1,2 @@
+import * as z from './types/base';
+export declare const Visitor: (visit: (_schema: z.ZodType<any, z.ZodTypeDef>) => z.ZodType<any, z.ZodTypeDef>) => (schema: z.ZodType<any, z.ZodTypeDef>) => z.ZodType<any, z.ZodTypeDef>;
diff --git a/app/lib/src/visit.js b/app/lib/src/visit.js
new file mode 100644
index 0000000..4ef8838
--- /dev/null
+++ b/app/lib/src/visit.js
@@ -0,0 +1,75 @@
+"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 __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("./types/base"));
+var util_1 = require("./helpers/util");
+var array_1 = require("./types/array");
+var object_1 = require("./types/object");
+var union_1 = require("./types/union");
+var intersection_1 = require("./types/intersection");
+var tuple_1 = require("./types/tuple");
+var record_1 = require("./types/record");
+var lazy_1 = require("./types/lazy");
+var ZodError_1 = require("./ZodError");
+exports.Visitor = function (visit) { return function (schema) {
+    var _def = schema._def;
+    var def = _def;
+    switch (def.t) {
+        case z.ZodTypes.string:
+            return visit(schema);
+        case z.ZodTypes.number:
+            return visit(schema);
+        case z.ZodTypes.boolean:
+            return visit(schema);
+        case z.ZodTypes.date:
+            return visit(schema);
+        case z.ZodTypes.undefined:
+            return visit(schema);
+        case z.ZodTypes.null:
+            return visit(schema);
+        case z.ZodTypes.array:
+            return visit(new array_1.ZodArray(__assign({}, def, { type: visit(def.type) })));
+        case z.ZodTypes.object:
+            var visitedShape = {};
+            for (var key in def.shape) {
+                visitedShape[key] = visit(def.shape[key]);
+            }
+            return visit(new object_1.ZodObject(__assign({}, def, { shape: visitedShape })));
+        case z.ZodTypes.union:
+            return visit(new union_1.ZodUnion(__assign({}, def, { options: def.options.map(function (option) { return visit(option); }) })));
+        case z.ZodTypes.intersection:
+            return visit(new intersection_1.ZodIntersection(__assign({}, def, { left: visit(def.left), right: visit(def.left) })));
+        case z.ZodTypes.tuple:
+            return visit(new tuple_1.ZodTuple(__assign({}, def, { items: def.items.map(function (item) { return visit(item); }) })));
+        case z.ZodTypes.record:
+            return visit(new record_1.ZodRecord(__assign({}, def, { valueType: visit(def.valueType) })));
+        case z.ZodTypes.lazy:
+            return visit(new lazy_1.ZodLazy(__assign({}, def, { getter: function () { return visit(def.getter()); } })));
+        case z.ZodTypes.literal:
+            return visit(schema);
+        case z.ZodTypes.enum:
+            return visit(schema);
+        default:
+            util_1.util.assertNever(def);
+            break;
+    }
+    throw ZodError_1.ZodError.fromString("Unknown schema type.");
+}; };
+//# sourceMappingURL=visit.js.map
\ No newline at end of file
diff --git a/app/lib/src/visit.js.map b/app/lib/src/visit.js.map
new file mode 100644
index 0000000..10720fb
--- /dev/null
+++ b/app/lib/src/visit.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"visit.js","sourceRoot":"","sources":["../../src/visit.ts"],"names":[],"mappings":"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"}
\ 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/app/node_modules/.bin/acorn b/app/node_modules/.bin/acorn
new file mode 120000
index 0000000..cf76760
--- /dev/null
+++ b/app/node_modules/.bin/acorn
@@ -0,0 +1 @@
+../acorn/bin/acorn
\ No newline at end of file
diff --git a/app/node_modules/.bin/atob b/app/node_modules/.bin/atob
new file mode 120000
index 0000000..a68344a
--- /dev/null
+++ b/app/node_modules/.bin/atob
@@ -0,0 +1 @@
+../atob/bin/atob.js
\ No newline at end of file
diff --git a/app/node_modules/.bin/escodegen b/app/node_modules/.bin/escodegen
new file mode 120000
index 0000000..01a7c32
--- /dev/null
+++ b/app/node_modules/.bin/escodegen
@@ -0,0 +1 @@
+../escodegen/bin/escodegen.js
\ No newline at end of file
diff --git a/app/node_modules/.bin/esgenerate b/app/node_modules/.bin/esgenerate
new file mode 120000
index 0000000..7d0293e
--- /dev/null
+++ b/app/node_modules/.bin/esgenerate
@@ -0,0 +1 @@
+../escodegen/bin/esgenerate.js
\ No newline at end of file
diff --git a/app/node_modules/.bin/esparse b/app/node_modules/.bin/esparse
new file mode 120000
index 0000000..7423b18
--- /dev/null
+++ b/app/node_modules/.bin/esparse
@@ -0,0 +1 @@
+../esprima/bin/esparse.js
\ No newline at end of file
diff --git a/app/node_modules/.bin/esvalidate b/app/node_modules/.bin/esvalidate
new file mode 120000
index 0000000..16069ef
--- /dev/null
+++ b/app/node_modules/.bin/esvalidate
@@ -0,0 +1 @@
+../esprima/bin/esvalidate.js
\ No newline at end of file
diff --git a/app/node_modules/.bin/import-local-fixture b/app/node_modules/.bin/import-local-fixture
new file mode 120000
index 0000000..ff4b104
--- /dev/null
+++ b/app/node_modules/.bin/import-local-fixture
@@ -0,0 +1 @@
+../import-local/fixtures/cli.js
\ No newline at end of file
diff --git a/app/node_modules/.bin/is-ci b/app/node_modules/.bin/is-ci
new file mode 120000
index 0000000..fe6aca6
--- /dev/null
+++ b/app/node_modules/.bin/is-ci
@@ -0,0 +1 @@
+../is-ci/bin.js
\ No newline at end of file
diff --git a/app/node_modules/.bin/jest b/app/node_modules/.bin/jest
new file mode 120000
index 0000000..61c1861
--- /dev/null
+++ b/app/node_modules/.bin