runcheck 0.54.1 → 0.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,11 +2,20 @@
2
2
 
3
3
  A lib for js/typescript runtime type checks with autofix support. Runcheck has the goal of being very lightweight and fast ⚡. Because of that, it has only around [2.9kb Gzipped](https://bundlephobia.com/package/runcheck) (at v0.30), has no dependencies and is tree-shakeable!
4
4
 
5
- Benchmarks:
5
+ Obs: Runcheck is in Beta and it's api can still change
6
6
 
7
- ![Benchmarks](imgs/image.png)
7
+ # Benchmarks
8
8
 
9
- Obs: Runcheck is in Beta and it's api can still change
9
+ One of the goals of runcheck is to be blazing fast. Here are some benchmarks:
10
+
11
+ <details>
12
+ <summary>Click to see the benchmarks</summary>
13
+
14
+ > `runcheck dist` is the same version as `runcheck` in the benchmarks but bundled
15
+
16
+ ![Benchmarks](imgs/benchmarks.png)
17
+
18
+ </details>
10
19
 
11
20
  # Installation
12
21
 
@@ -16,20 +25,21 @@ pnpm add runcheck
16
25
 
17
26
  # Basic types:
18
27
 
19
- | runcheck type | ts type equivalent |
20
- | ------------------------------- | ------------------------------------------------- |
21
- | `rc_string` | `string` |
22
- | `rc_number` | `number` |
23
- | `rc_boolean` | `boolean` |
24
- | `rc_any` | `any` |
25
- | `rc_null` | `null` |
26
- | `rc_undefined` | `undefined` |
27
- | `rc_date` | `Date` |
28
- | `rc_intanceof(instance: T)` | Classes typecheck in general |
29
- | `rc_literals(...literals: T[])` | Type literal in general like `hello`, `true`, `1` |
30
- | `rc_union(...types: T[])` | Union types in general like `string \| 1` |
31
- | `rc_array<T>(type: T)` | `T[]` |
32
- | `rc_tuple<T>(...types: T[])` | `[T, T]` |
28
+ | runcheck type | ts type equivalent |
29
+ | -------------------------------- | ------------------------------------------------- |
30
+ | `rc_string` | `string` |
31
+ | `rc_number` | `number` |
32
+ | `rc_boolean` | `boolean` |
33
+ | `rc_any` | `any` |
34
+ | `rc_null` | `null` |
35
+ | `rc_undefined` | `undefined` |
36
+ | `rc_date` | `Date` |
37
+ | `rc_intanceof(instance: T)` | Classes typecheck in general |
38
+ | `rc_literals(...literals: T[])` | Type literal in general like `hello`, `true`, `1` |
39
+ | `rc_union(...types: T[])` | Union types in general like `string \| 1` |
40
+ | `rc_array<T>(type: T)` | `T[]` |
41
+ | `rc_tuple<T>(...types: T[])` | `[T, T]` |
42
+ | `rc_intersection(...types: T[])` | Intersection types like `{a:string} & {b:string}` |
33
43
 
34
44
  # Array types:
35
45
 
@@ -646,3 +656,33 @@ const result = rc_unwrap(
646
656
  // | { state: 'success', response: string }
647
657
  // | { state: 'error', code: number }
648
658
  ```
659
+
660
+ # `rc_array_filter_from_schema`
661
+
662
+ Creates a two passes array validation. The first will validate the items against the filter schema and filter the item. The second will perform the type check against the filtered items.
663
+
664
+ ```ts
665
+ const schema = rc_array_filter_from_schema(
666
+ // 1 validate the items against a filter schema
667
+ rc_object({
668
+ deleted: rc_boolean,
669
+ }),
670
+ // Then filter the items based on the filter schema result
671
+ (item) => !item.deleted,
672
+
673
+ // 2 validate the filtered items
674
+ rc_object({
675
+ value: rc_string,
676
+ }),
677
+ )
678
+
679
+ const result = rc_parse(
680
+ [
681
+ { deleted: false, value: 'hello' },
682
+ { deleted: true, value: 'world' },
683
+ ],
684
+ schema,
685
+ )
686
+
687
+ // result.value === [{ value: 'hello' }]
688
+ ```
@@ -1 +1,2 @@
1
- "use strict";var f=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var m=(e,r)=>{for(var n in r)f(e,n,{get:r[n],enumerable:!0})},w=(e,r,n,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of b(r))!g.call(e,t)&&t!==n&&f(e,t,{get:()=>r[t],enumerable:!(o=h(r,t))||o.enumerable});return e};var P=e=>w(f({},"__esModule",{value:!0}),e);var A={};m(A,{rc_boolean_autofix:()=>I,rc_number_autofix:()=>S,rc_string_autofix:()=>v});module.exports=P(A);function k(e){return{...this,g:e}}function u(e,r){return`${e.n?`$${e.n}: `:""}${r}`}function c(e,r){e.T.push(r.startsWith("$")?r:u(e,r))}function s(e,r,n,o){if(e.d&&r===void 0)return[!0,r];if(e.p&&r==null)return[!0,r];if(e.R&&r===null)return[!0,r];let t=o();if(t&&(t===!0||!t.errors)){let i=t===!0?r:t.data;return e.c&&!e.c(i)?[!1,[u(n,`Predicate failed for type '${e.e}'`)]]:[!0,i]}if(!n.i){let i=e.g;if(i!==void 0)return c(n,`Fallback used, errors -> ${y(t,n,e,r)}`),[!0,E(i)?i():i];if(e.j&&e.h){let l=e.h(r);if(l)return e.c&&!e.c(l.fixed)?[!1,[u(n,`Predicate failed for autofix in type '${e.e}'`)]]:(c(n,`Autofixed from error "${y(t,n,e,r)}"`),[!0,l.fixed])}}return[!1,t?t.errors:[u(n,T(e,r))]]}function y(e,r,n,o){return e?e.errors.map(t=>t.replace(r.n,"")).join("; "):T(n,o)}function x(e){return{...this,j:!0,h:e}}function $(e){return{...this,c:e}}function d(){return{...this,d:!0,e:`${this.e}_optional`}}function T(e,r){return`Type '${O(r,!!e.O)}' is not assignable to '${e.e}'`}function N(){return{...this,R:!0,e:`${this.e}_or_null`}}function j(){return{...this,p:!0,e:`${this.e}_or_nullish`}}var a={__rc_type:void 0,withFallback:k,where:$,optional:d,optionalKey:d,orNullish:j,withAutofix:x,orNull:N,_:void 0,g:void 0,c:void 0,d:!1,R:!1,p:!1,j:!1,O:!1,y:void 0,h:void 0,t:void 0,f:!1,b:!1,u:[]},C={...a,r(e,r){return s(this,e,r,()=>e===void 0)},e:"undefined"},K={...a,r(e,r){return s(this,e,r,()=>e===null)},e:"null"},V={...a,r(e,r){return s(this,e,r,()=>!0)},e:"any"},q={...a,r(e,r){return s(this,e,r,()=>!0)},e:"unknown"},p={...a,r(e,r){return s(this,e,r,()=>typeof e=="boolean")},e:"boolean"},_={...a,r(e,r){return s(this,e,r,()=>typeof e=="string")},e:"string"},R={...a,r(e,r){return s(this,e,r,()=>typeof e=="number"&&!Number.isNaN(e))},e:"number"},F={...a,r(e,r){return s(this,e,r,()=>typeof e=="object"&&e instanceof Date&&!Number.isNaN(e.getTime()))},e:"date"};function O(e,r){let n=typeof e,o=(()=>{if(n==="object"){if(Array.isArray(e))return"array";if(!e)return"null"}return n})();return r&&(o==="string"||o==="number"||o==="boolean")?`${o}(${e})`:o}function E(e){return typeof e=="function"}var I=p.withAutofix(e=>e==null||e===0||e===1?{fixed:!!e}:e==="true"||e==="false"?{fixed:e==="true"}:!1),v=_.withAutofix(e=>typeof e=="number"&&!Number.isNaN(e)?{fixed:e.toString()}:!1),S=R.withAutofix(e=>{if(typeof e=="string"){let r=Number(e);if(!Number.isNaN(r))return{fixed:r}}return!1});0&&(module.exports={rc_boolean_autofix,rc_number_autofix,rc_string_autofix});
1
+ "use strict";var f=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var k=(e,r)=>{for(var n in r)f(e,n,{get:r[n],enumerable:!0})},m=(e,r,n,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of b(r))!g.call(e,t)&&t!==n&&f(e,t,{get:()=>r[t],enumerable:!(o=h(r,t))||o.enumerable});return e};var w=e=>m(f({},"__esModule",{value:!0}),e);var S={};k(S,{rc_boolean_autofix:()=>E,rc_number_autofix:()=>v,rc_string_autofix:()=>A});module.exports=w(S);function P(e){return{...this,b:e}}function u(e,r){return`${e.n?`$${e.n}: `:""}${r}`}function d(e,r){e.d.push(r.startsWith("$")?r:u(e,r))}function i(e,r,n,o){if(e.T&&r===void 0)return{ok:!0,data:r,errors:void 0};if(e.p&&r==null)return{ok:!0,data:r,errors:void 0};if(e.R&&r===null)return{ok:!0,data:r,errors:void 0};let t=o();if(t&&(t===!0||!t.errors)){let s=t===!0?r:t.data;return e.c&&!e.c(s)?{ok:!1,data:void 0,errors:[u(n,`Predicate failed for type '${e.e}'`)]}:{ok:!0,data:s,errors:void 0}}if(!n.u){let s=e.b;if(s!==void 0)return d(n,`Fallback used, errors -> ${c(t,n,e,r)}`),{ok:!0,data:I(s)?s():s,errors:void 0};if(e.k&&e._){let l=e._(r);if(l)return e.c&&!e.c(l.fixed)?{ok:!1,data:void 0,errors:[u(n,`Predicate failed for autofix in type '${e.e}'`)]}:(d(n,`Autofixed from error "${c(t,n,e,r)}"`),{ok:!0,data:l.fixed,errors:void 0})}}return{ok:!1,data:void 0,errors:t?t.errors:[u(n,T(e,r))]}}function c(e,r,n,o){return e?e.errors.map(t=>t.replace(r.n,"")).join("; "):T(n,o)}function $(e){return{...this,k:!0,_:e}}function x(e){return{...this,c:e}}function y(){return{...this,T:!0,e:`${this.e}_optional`}}function T(e,r){return`Type '${O(r,!!e.g)}' is not assignable to '${e.e}'`}function N(){return{...this,R:!0,e:`${this.e}_or_null`}}function j(){return{...this,p:!0,e:`${this.e}_or_nullish`}}var a={__rc_type:void 0,withFallback:P,where:x,r:void 0,e:void 0,optional:y,optionalKey:y,orNullish:j,withAutofix:$,orNull:N,f:void 0,b:void 0,c:void 0,T:!1,R:!1,p:!1,k:!1,g:!1,y:void 0,_:void 0,t:void 0,s:!1,h:!1},C={...a,r(e,r){return i(this,e,r,()=>e===void 0)},e:"undefined"},K={...a,r(e,r){return i(this,e,r,()=>e===null)},e:"null"},q={...a,r(e){return{ok:!0,data:e,errors:void 0}},e:"any"},F={...a,r(e){return{ok:!0,data:e,errors:void 0}},e:"unknown"},p={...a,r(e,r){return i(this,e,r,()=>typeof e=="boolean")},e:"boolean"},R={...a,r(e,r){return i(this,e,r,()=>typeof e=="string")},e:"string"},_={...a,r(e,r){return i(this,e,r,()=>typeof e=="number"&&!Number.isNaN(e))},e:"number"},U={...a,r(e,r){return i(this,e,r,()=>typeof e=="object"&&e instanceof Date&&!Number.isNaN(e.getTime()))},e:"date"};function O(e,r){let n=typeof e,o=(()=>{if(n==="object"){if(Array.isArray(e))return"array";if(!e)return"null"}return n})();return r&&(o==="string"||o==="number"||o==="boolean")?`${o}(${e})`:o}function I(e){return typeof e=="function"}var E=p.withAutofix(e=>e==null||e===0||e===1?{fixed:!!e}:e==="true"||e==="false"?{fixed:e==="true"}:!1),A=R.withAutofix(e=>typeof e=="number"&&!Number.isNaN(e)?{fixed:e.toString()}:!1),v=_.withAutofix(e=>{if(typeof e=="string"){let r=Number(e);if(!Number.isNaN(r))return{fixed:r}}return!1});0&&(module.exports={rc_boolean_autofix,rc_number_autofix,rc_string_autofix});
2
+ //# sourceMappingURL=autofixable.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/autofixable.ts","../src/runcheck.ts"],"sourcesContent":["import { rc_boolean, rc_number, rc_string } from './runcheck'\n\n/** autofixes a boolean type if input is 0 | 1 | 'true' | 'false' | undefined | null,\n * returning error otherwise */\nexport const rc_boolean_autofix = rc_boolean.withAutofix((input) => {\n if (input === null || input === undefined || input === 0 || input === 1) {\n return { fixed: !!input }\n }\n\n if (input === 'true' || input === 'false') {\n return { fixed: input === 'true' }\n }\n\n return false\n})\n\n/** autofixes a string type if input is a number, returning error otherwise */\nexport const rc_string_autofix = rc_string.withAutofix((input) => {\n if (typeof input === 'number' && !Number.isNaN(input)) {\n return { fixed: input.toString() }\n }\n\n return false\n})\n\n/** autofixes a number type if input is a a valid number string, returning error otherwise */\nexport const rc_number_autofix = rc_number.withAutofix((input) => {\n if (typeof input === 'string') {\n const parsed = Number(input)\n\n if (!Number.isNaN(parsed)) {\n return { fixed: parsed }\n }\n }\n\n return false\n})\n","import { RcObject, TypeOfObjectType, rc_object } from './rc_object'\n\nexport {\n rc_enable_obj_strict,\n rc_get_from_key_as_fallback,\n rc_get_obj_shape as rc_get_obj_schema,\n rc_obj_builder,\n rc_obj_extends,\n rc_obj_merge,\n rc_obj_omit,\n rc_obj_pick,\n rc_obj_strict,\n rc_object,\n} from './rc_object'\nexport { rc_intersection } from './rc_intersection'\n\nexport type RcParseResult<T> =\n | {\n error: false\n ok: true\n /** @deprecated use value instead */\n data: T\n value: T\n warnings: string[] | false\n }\n | {\n ok: false\n error: true\n errors: string[]\n }\n\nexport type RcInferType<T extends RcType<any>> =\n T extends RcType<infer U> ? U : never\n\ntype ParseResultCtx = {\n warnings_: string[]\n path_: string\n objErrShortCircuit_: boolean\n objErrKeyIndex_: number\n strictObj_: boolean\n noWarnings_: boolean\n noLooseArray_: boolean\n}\n\ntype InternalParseResult<T> =\n | { ok: true; data: T; errors: undefined }\n | { ok: false; errors: ErrorWithPath[]; data: undefined }\n\ntype WithFallback<T> = (fallback: T | (() => T)) => RcType<T>\n\nexport type RcOptionalKeyType<T> = RcBase<T, true>\n\nexport type RcType<T> = RcBase<T, false>\n\ntype Schema<T> = (t: T) => void\n\nexport type RcBase<T, RequiredKey extends boolean> = {\n __rc_type: Schema<T>\n readonly withFallback: WithFallback<T>\n readonly where: (predicate: (input: T) => boolean) => RcType<T>\n /** RcType | undefined */\n readonly optional: () => RcType<T | undefined>\n /** { key?: RcType | undefined } */\n readonly optionalKey: () => RcOptionalKeyType<T | undefined>\n /** RcType | null */\n readonly orNull: () => RcType<T | null>\n /** RcType | null | undefined */\n readonly orNullish: () => RcType<T | null | undefined>\n readonly withAutofix: (\n customAutofix: (input: unknown) => false | { fixed: T },\n ) => RcType<T>\n\n // This should not be stripped out because it is used in type inference\n readonly _optional_key_?: RequiredKey\n /** @internal */\n readonly _parse_: (\n input: unknown,\n ctx: ParseResultCtx,\n ) => InternalParseResult<T>\n /** @internal */\n readonly _kind_: string\n /** @internal */\n readonly _fallback_: T | (() => T) | undefined\n /** @internal */\n readonly _predicate_: ((input: T) => boolean) | undefined\n /** @internal */\n readonly _optional_: boolean\n /** @internal */\n readonly _orNullish_: boolean\n /** @internal */\n readonly _orNull_: boolean\n /** @internal */\n readonly _useAutFix_: boolean\n /** @internal */\n readonly _is_extend_obj_: boolean\n /** @internal */\n readonly _is_object_: boolean\n /** @internal */\n readonly _array_item_type_: RcType<any> | undefined\n /** @internal */\n readonly _show_value_in_error_: boolean\n /** @internal */\n readonly _alternative_key_: string | undefined\n /** @internal */\n readonly _obj_shape_: Record<string, RcType<any>> | undefined\n /** @internal */\n readonly _autoFix_: ((input: unknown) => false | { fixed: T }) | undefined\n}\n\nfunction withFallback(this: RcType<any>, fallback: any): RcType<any> {\n return {\n ...this,\n _fallback_: fallback,\n }\n}\n\n/** @internal */\nexport type ErrorWithPath = string & { __withPath: true }\ntype ErrorWithouPath = string & { __withPath?: never }\n\nexport function getWarningOrErrorWithPath(\n ctx: { path_: string },\n message: ErrorWithouPath,\n): ErrorWithPath {\n return `${ctx.path_ ? `$${ctx.path_}: ` : ''}${message}` as ErrorWithPath\n}\n\nfunction addWarning(ctx: ParseResultCtx, warning: string) {\n ctx.warnings_.push(\n warning.startsWith('$') ? warning : getWarningOrErrorWithPath(ctx, warning),\n )\n}\n\nfunction addWarnings(ctx: ParseResultCtx, warnings: string[]) {\n warnings.forEach((warning) => addWarning(ctx, warning))\n}\n\ntype IsValid<T> =\n | boolean\n | { data: T; errors: false }\n | { data: undefined; errors: ErrorWithPath[] }\n\nexport function parse<T>(\n type: RcType<T>,\n input: unknown,\n ctx: ParseResultCtx,\n checkIfIsValid: () => IsValid<T>,\n): InternalParseResult<T> {\n if (type._optional_) {\n if (input === undefined) {\n return { ok: true, data: input as T, errors: undefined }\n }\n }\n\n if (type._orNullish_) {\n if (input === null || input === undefined) {\n return { ok: true, data: input as T, errors: undefined }\n }\n }\n\n if (type._orNull_) {\n if (input === null) {\n return { ok: true, data: input as T, errors: undefined }\n }\n }\n\n const isValid = checkIfIsValid()\n\n if (isValid) {\n if (isValid === true || !isValid.errors) {\n const validResult = isValid === true ? (input as T) : isValid.data\n\n if (type._predicate_) {\n if (!type._predicate_(validResult)) {\n return {\n ok: false,\n data: undefined,\n errors: [\n getWarningOrErrorWithPath(\n ctx,\n `Predicate failed for type '${type._kind_}'`,\n ),\n ],\n }\n }\n }\n\n return { ok: true, data: validResult, errors: undefined }\n }\n }\n\n if (!ctx.noWarnings_) {\n const fb = type._fallback_\n\n if (fb !== undefined) {\n addWarning(\n ctx,\n `Fallback used, errors -> ${getResultErrors(\n isValid,\n ctx,\n type,\n input,\n )}`,\n )\n\n return { ok: true, data: isFn(fb) ? fb() : fb, errors: undefined }\n }\n\n if (type._useAutFix_ && type._autoFix_) {\n const autofixed = type._autoFix_(input)\n\n if (autofixed) {\n if (type._predicate_) {\n if (!type._predicate_(autofixed.fixed)) {\n return {\n ok: false,\n data: undefined,\n errors: [\n getWarningOrErrorWithPath(\n ctx,\n `Predicate failed for autofix in type '${type._kind_}'`,\n ),\n ],\n }\n }\n }\n\n addWarning(\n ctx,\n `Autofixed from error \"${getResultErrors(\n isValid,\n ctx,\n type,\n input,\n )}\"`,\n )\n\n return { ok: true, data: autofixed.fixed, errors: undefined }\n }\n }\n }\n\n return {\n ok: false,\n data: undefined,\n errors:\n isValid ?\n isValid.errors\n : [getWarningOrErrorWithPath(ctx, getErrorMsg(type, input))],\n }\n}\n\nfunction getResultErrors(\n isValid: false | { errors: string[] },\n ctx: ParseResultCtx,\n type: RcType<any>,\n input: unknown,\n) {\n return isValid ?\n isValid.errors.map((err) => err.replace(ctx.path_, '')).join('; ')\n : getErrorMsg(type, input)\n}\n\nfunction withAutofix(\n this: RcType<any>,\n customAutofix: (input: unknown) => any,\n): RcType<any> {\n return {\n ...this,\n _useAutFix_: true,\n _autoFix_: customAutofix,\n }\n}\n\nfunction where(\n this: RcType<any>,\n predicate: (input: any) => boolean,\n): RcType<any> {\n return {\n ...this,\n _predicate_: predicate,\n }\n}\n\nfunction optional(this: RcType<any>): RcType<any> {\n return {\n ...this,\n _optional_: true,\n _kind_: `${this._kind_}_optional`,\n }\n}\n\nfunction getErrorMsg(type: RcType<any>, input: unknown): string {\n return `Type '${normalizedTypeOf(\n input,\n !!type._show_value_in_error_,\n )}' is not assignable to '${type._kind_}'`\n}\n\nfunction orNull(this: RcType<any>): RcType<any> {\n return {\n ...this,\n _orNull_: true,\n _kind_: `${this._kind_}_or_null`,\n }\n}\n\nfunction orNullish(this: RcType<any>): RcType<any> {\n return {\n ...this,\n _orNullish_: true,\n _kind_: `${this._kind_}_or_nullish`,\n }\n}\n\nexport const defaultProps: Omit<RcType<any>, '_parse_' | '_kind_'> = {\n __rc_type: undefined as any,\n withFallback,\n where,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- perf improvement to avoid polymorphic deoptimaztions\n // @ts-ignore\n _parse_: undefined as any,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- perf improvement to avoid polymorphic deoptimaztions\n // @ts-ignore\n _kind_: undefined as any,\n optional,\n optionalKey: optional as any,\n orNullish,\n withAutofix,\n orNull,\n _array_item_type_: undefined,\n _fallback_: undefined,\n _predicate_: undefined,\n _optional_: false,\n _orNull_: false,\n _orNullish_: false,\n _useAutFix_: false,\n _show_value_in_error_: false,\n _alternative_key_: undefined,\n _autoFix_: undefined,\n _obj_shape_: undefined,\n _is_object_: false,\n _is_extend_obj_: false,\n}\n\nexport const rc_undefined: RcType<undefined> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => input === undefined)\n },\n _kind_: 'undefined',\n}\n\nexport const rc_null: RcType<null> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => input === null)\n },\n _kind_: 'null',\n}\n\nexport const rc_any: RcType<any> = {\n ...defaultProps,\n _parse_(input) {\n return { ok: true, data: input, errors: undefined }\n },\n _kind_: 'any',\n}\n\nexport const rc_unknown: RcType<unknown> = {\n ...defaultProps,\n _parse_(input) {\n return { ok: true, data: input, errors: undefined }\n },\n _kind_: 'unknown',\n}\n\nexport const rc_boolean: RcType<boolean> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => typeof input === 'boolean')\n },\n _kind_: 'boolean',\n}\n\nexport const rc_string: RcType<string> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => typeof input === 'string')\n },\n _kind_: 'string',\n}\n\nexport const rc_number: RcType<number> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(\n this,\n input,\n ctx,\n () => typeof input === 'number' && !Number.isNaN(input),\n )\n },\n _kind_: 'number',\n}\n\nexport const rc_date: RcType<Date> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n return (\n typeof input === 'object' &&\n input instanceof Date &&\n !Number.isNaN(input.getTime())\n )\n })\n },\n _kind_: 'date',\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function rc_instanceof<T extends Function>(classToCheck: T): RcType<T> {\n return {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n return input instanceof classToCheck\n })\n },\n _kind_: `instanceof_${classToCheck.name ? `_${classToCheck.name}` : ''}`,\n }\n}\n\nexport function rc_literals<T extends (string | number | boolean)[]>(\n ...literals: T\n): RcType<T[number]> {\n if (literals.length === 0) {\n throw new Error('rc_literal requires at least one literal')\n }\n\n return {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n for (const literal of literals) {\n if (input === literal) {\n return true\n }\n }\n\n return false\n })\n },\n _show_value_in_error_: true,\n _kind_:\n literals.length == 1 ?\n normalizedTypeOf(literals[0], true)\n : literals.map((literal) => normalizedTypeOf(literal, true)).join(' | '),\n }\n}\n\nconst maxShallowObjErrors = 1\n\nexport function rc_union<T extends RcType<any>[]>(\n ...types: T\n): RcType<RcInferType<T[number]>> {\n if (types.length === 0) {\n throw new Error('Unions should have at least one type')\n }\n\n return {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n const basePath = ctx.path_\n const shallowObjErrors: ErrorWithPath[] = []\n let shallowObjErrorsCount = 0\n let hasNonObjTypeMember = false\n const nonShallowObjErrors: ErrorWithPath[] = []\n\n let i = 0\n for (const type of types) {\n i += 1\n\n if (type._is_object_) {\n ctx.path_ = `${basePath}|union ${i}|`\n }\n\n const currentObjErrShortCircuit = ctx.objErrShortCircuit_\n ctx.objErrShortCircuit_ = true\n ctx.objErrKeyIndex_ = 0\n\n const parseResult = type._parse_(input, ctx)\n\n const objErrIndex = ctx.objErrKeyIndex_\n\n ctx.objErrShortCircuit_ = currentObjErrShortCircuit\n ctx.objErrKeyIndex_ = 0\n\n if (parseResult.ok) {\n return true\n } else if (type._is_object_ && objErrIndex !== -1) {\n if (objErrIndex > 0) {\n nonShallowObjErrors.push(...parseResult.errors)\n } else {\n if (shallowObjErrorsCount < maxShallowObjErrors) {\n shallowObjErrors.push(...parseResult.errors)\n }\n\n shallowObjErrorsCount += 1\n }\n } else {\n hasNonObjTypeMember = true\n }\n }\n\n ctx.path_ = basePath\n\n if (nonShallowObjErrors.length > 0 || shallowObjErrors.length > 0) {\n if (\n shallowObjErrorsCount > maxShallowObjErrors ||\n hasNonObjTypeMember\n ) {\n shallowObjErrors.push(\n getWarningOrErrorWithPath(\n ctx,\n 'not matches any other union member',\n ),\n )\n }\n\n return {\n errors: [...nonShallowObjErrors, ...shallowObjErrors],\n data: undefined,\n }\n }\n\n return false\n })\n },\n _kind_: types.map((type) => type._kind_).join(' | '),\n }\n}\n\ntype NotUndefined<T> = T extends undefined ? never : T\n\n/** Generate a schema with valid fallback value for undefined inputs */\nexport function rc_default<T>(\n schema: RcType<T>,\n defaultValue: NotUndefined<T> | (() => NotUndefined<T>),\n): RcType<NotUndefined<T>> {\n return {\n ...(schema as unknown as RcType<NotUndefined<T>>),\n _optional_: false,\n _orNullish_: false,\n _orNull_: false,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (input === undefined) {\n return getDefaultResult()\n }\n\n const parseResult = schema._parse_(input, ctx)\n\n if (parseResult.ok) {\n if (parseResult.data === undefined) {\n return getDefaultResult()\n }\n\n return { data: parseResult.data as NotUndefined<T>, errors: false }\n } else {\n return { data: undefined, errors: parseResult.errors }\n }\n })\n },\n _kind_: `${schema._kind_}_default`,\n }\n\n function getDefaultResult(): IsValid<NotUndefined<T>> {\n return {\n data: isFn(defaultValue) ? defaultValue() : defaultValue,\n errors: false,\n }\n }\n}\n\ntype NotNullish<T> = T extends null | undefined ? never : T\n\nexport function rc_nullish_default<T>(\n schema: RcType<T>,\n defaultValue: NotNullish<T> | (() => NotNullish<T>),\n): RcType<NotNullish<T>> {\n return {\n ...(schema as unknown as RcType<NotNullish<T>>),\n _optional_: false,\n _orNullish_: false,\n _orNull_: false,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (input === null || input === undefined) {\n return getDefaultResult()\n }\n\n const parseResult = schema._parse_(input, ctx)\n\n if (parseResult.ok) {\n if (parseResult.data === null || parseResult.data === undefined) {\n return getDefaultResult()\n }\n\n return { data: parseResult.data as NotNullish<T>, errors: false }\n } else {\n return { data: undefined, errors: parseResult.errors }\n }\n })\n },\n _kind_: `${schema._kind_}_nullish_default`,\n }\n\n function getDefaultResult(): IsValid<NotNullish<T>> {\n return {\n data: isFn(defaultValue) ? defaultValue() : defaultValue,\n errors: false,\n }\n }\n}\n\nexport function rc_record<V>(\n valueType: RcType<V>,\n {\n checkKey,\n looseCheck,\n }: { checkKey?: (key: string) => boolean; looseCheck?: boolean } = {},\n): RcType<Record<string, V>> {\n return {\n ...defaultProps,\n _kind_: `record<string, ${valueType._kind_}>`,\n _is_object_: true,\n _parse_(inputObj, ctx) {\n return parse<Record<string, V>>(this, inputObj, ctx, () => {\n if (!isObject(inputObj)) return false\n\n const resultObj: Record<any, string> = {} as any\n const resultErrors: ErrorWithPath[] = []\n\n const parentPath = ctx.path_\n\n for (const [key, inputValue] of Object.entries(inputObj)) {\n const subPath = `.${key}`\n\n const path = `${parentPath}${subPath}`\n ctx.path_ = path\n\n if (checkKey && !checkKey(key)) {\n resultErrors.push(\n getWarningOrErrorWithPath(ctx, `Key '${key}' is not allowed`),\n )\n continue\n }\n\n const input = inputObj[key]\n\n const parseResult = valueType._parse_(inputValue, ctx)\n\n if (parseResult.ok) {\n resultObj[key] = input\n }\n //\n else {\n const errors = parseResult.errors\n\n for (const subError of errors) {\n resultErrors.push(subError)\n }\n\n if (ctx.objErrShortCircuit_) {\n break\n }\n }\n }\n\n if (resultErrors.length > 0) {\n if (looseCheck) {\n addWarnings(ctx, resultErrors)\n } else {\n return { errors: resultErrors, data: undefined }\n }\n }\n\n ctx.path_ = parentPath\n\n return { errors: false, data: resultObj as any }\n })\n },\n }\n}\n\nexport function rc_discriminated_union<\n K extends string,\n T extends Record<string, RcObject>,\n>(\n discriminatorKey: K,\n types: T,\n): RcType<\n Prettify<\n { [P in keyof T]: { [Q in K]: P } & TypeOfObjectType<T[P]> }[keyof T]\n >\n> {\n const preComputedTypesShape = {} as Record<string, RcType<any>>\n\n for (const [key, type] of Object.entries(types)) {\n preComputedTypesShape[key] = rc_object(type) as any\n }\n\n return {\n ...defaultProps,\n _kind_: `discriminated_union`,\n _is_object_: true,\n _parse_(input, ctx) {\n return parse<any>(this, input, ctx, () => {\n if (!isObject(input)) {\n ctx.objErrKeyIndex_ = -1\n return false\n }\n\n const discriminator = input[discriminatorKey]\n\n const parentPath = ctx.path_\n\n const type = preComputedTypesShape[discriminator]\n\n if (!type) {\n const invalidValueType = normalizedTypeOf(discriminator, true)\n\n return {\n errors: [\n getWarningOrErrorWithPath(\n { path_: `${parentPath}.${discriminatorKey}` },\n `Type '${invalidValueType}' is not a valid discriminator`,\n ),\n ],\n data: undefined,\n }\n }\n\n ctx.path_ = `${parentPath}|${discriminatorKey}: ${discriminator}|`\n\n const parseResult = type._parse_(input, ctx)\n\n ctx.path_ = parentPath\n\n if (!parseResult.ok) {\n return { errors: parseResult.errors, data: undefined }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n parseResult.data[discriminatorKey] = discriminator\n\n return { errors: false, data: parseResult.data }\n })\n },\n }\n}\n\n/** instead of returning a general error, rejects invalid keys and returns warnings for these items */\nexport function rc_loose_record<V>(\n valueType: RcType<V>,\n { checkKey }: { checkKey?: (key: string) => boolean } = {},\n): RcType<Record<string, V>> {\n return rc_record(valueType, { checkKey, looseCheck: true })\n}\n\nfunction checkArrayItems(\n this: RcType<any>,\n input: any[],\n types: RcType<any> | readonly RcType<any>[],\n ctx: ParseResultCtx,\n _loose = false,\n options?: ArrayOptions<RcType<any>>,\n): IsValid<any[]> {\n const useLooseMode = _loose && !ctx.noWarnings_ && !ctx.noLooseArray_\n const unique = options?.unique\n\n const looseErrors: ErrorWithPath[][] = []\n const arrayResult: any[] = []\n const uniqueValues = unique ? new Set<any>() : undefined\n\n const parentPath = ctx.path_\n\n const isTuple = Array.isArray(types)\n\n let index = -1\n for (const _item of input) {\n index++\n\n const type: RcType<any> = isTuple ? types[index] : types\n\n const subPath = `[${index}]`\n\n const path = `${parentPath}${subPath}`\n\n ctx.path_ = path\n\n if (options?.filter) {\n const filterResult = options.filter(_item)\n\n if (typeof filterResult === 'boolean') {\n if (!filterResult) {\n continue\n }\n } else if ('errors' in filterResult) {\n if (!useLooseMode) {\n return { errors: filterResult.errors, data: undefined }\n } else {\n looseErrors.push(filterResult.errors)\n continue\n }\n }\n\n ctx.path_ = path\n }\n\n let parseResult = type._parse_(_item, ctx)\n\n ctx.path_ = path\n\n if (parseResult.ok && uniqueValues) {\n let uniqueValueToCheck = parseResult.data\n\n const isUniqueKey = typeof unique === 'string'\n\n if (isUniqueKey) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n uniqueValueToCheck = parseResult.data[unique]\n } else if (typeof unique === 'function') {\n uniqueValueToCheck = unique(parseResult.data)\n }\n\n if (uniqueValues.has(uniqueValueToCheck)) {\n if (isUniqueKey) {\n ctx.path_ = `${parentPath}${subPath}.${unique}`\n }\n\n parseResult = {\n ok: false,\n data: undefined,\n errors: [\n getWarningOrErrorWithPath(\n ctx,\n isUniqueKey ?\n `Type '${type._obj_shape_?.[unique]?._kind_}' with value \"${uniqueValueToCheck}\" is not unique`\n : typeof unique === 'function' ?\n `Type '${type._kind_}' unique fn return with value \"${uniqueValueToCheck}\" is not unique`\n : `${type._kind_} value is not unique`,\n ),\n ],\n }\n } else {\n uniqueValues.add(uniqueValueToCheck)\n }\n }\n\n if (!parseResult.ok) {\n if (!useLooseMode) {\n return {\n errors: parseResult.errors,\n data: undefined,\n }\n } else {\n looseErrors.push(parseResult.errors)\n continue\n }\n } else {\n arrayResult.push(parseResult.data)\n }\n }\n\n if (looseErrors.length > 0) {\n if (arrayResult.length === 0) {\n return { errors: looseErrors.slice(0, 5).flat(), data: undefined }\n } else {\n addWarnings(ctx, looseErrors.flat())\n }\n }\n\n return { errors: false, data: arrayResult }\n}\n\ntype ArrayOptions<T extends RcType<any>> = {\n unique?: RcInferType<T> extends Record<string, any> ?\n keyof RcInferType<T> | ((parsedItem: RcInferType<T>) => any)\n : boolean | ((parsedItem: RcInferType<T>) => any)\n filter?: (item: RcInferType<T>) => boolean | { errors: ErrorWithPath[] }\n}\n\nexport function rc_array<T extends RcType<any>>(\n type: T,\n options?: ArrayOptions<T>,\n): RcType<RcInferType<T>[]> {\n return {\n ...defaultProps,\n _kind_: `${type._kind_}[]`,\n _array_item_type_: type,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (!Array.isArray(input)) return false\n\n if (input.length === 0) return true\n\n return checkArrayItems.call(this, input, type, ctx, false, options)\n })\n },\n }\n}\n\nexport function rc_get_array_item_type<T>(type: RcType<T[]>): RcType<T> {\n if (!type._array_item_type_) {\n throw new Error(`Type does not have an item type`)\n }\n\n return type._array_item_type_\n}\n\nexport function rc_disable_loose_array<T extends RcType<any>>(\n type: T,\n { nonRecursive = false }: { nonRecursive?: boolean } = {},\n): T {\n if (nonRecursive) {\n if (!type._kind_.endsWith('[]')) {\n throw new Error(\n `rc_disable_loose_array: nonRecursive option can only be used with array types`,\n )\n }\n\n return {\n ...type,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (!Array.isArray(input)) return false\n\n if (input.length === 0) return true\n\n return checkArrayItems.call(this, input, type, ctx, false)\n })\n },\n }\n }\n\n return {\n ...type,\n _parse_(input, ctx) {\n const parentDisableLooseArray = ctx.noLooseArray_\n\n ctx.noLooseArray_ = true\n const result = type._parse_(input, ctx)\n ctx.noLooseArray_ = parentDisableLooseArray\n\n return result\n },\n }\n}\n\n/** instead of returning a general error, rejects invalid array items and returns warnings for these items */\nexport function rc_loose_array<T extends RcType<any>>(\n type: T,\n options?: ArrayOptions<T>,\n): RcType<RcInferType<T>[]> {\n return {\n ...defaultProps,\n _array_item_type_: type,\n _kind_: `${type._kind_}[]`,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (!Array.isArray(input)) return false\n\n if (input.length === 0) return true\n\n return checkArrayItems.call(this, input, type, ctx, true, options)\n })\n },\n }\n}\n\nexport function rc_array_filter_from_schema<B, T>(\n filterSchema: RcType<B>,\n filterFn: (item: B) => boolean,\n type: RcType<T>,\n options?: Omit<ArrayOptions<RcType<any>>, 'filter'> & {\n loose?: boolean\n },\n): RcType<T[]> {\n return {\n ...defaultProps,\n _array_item_type_: type,\n _kind_: `${type._kind_}[]`,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (!Array.isArray(input)) return false\n\n if (input.length === 0) return true\n\n return checkArrayItems.call(this, input, type, ctx, options?.loose, {\n ...options,\n filter(item) {\n const filterResult = filterSchema._parse_(item, ctx)\n\n if (!filterResult.ok) {\n return { errors: filterResult.errors }\n }\n\n return filterFn(filterResult.data)\n },\n })\n })\n },\n }\n}\n\ntype MapTupleToTypes<T extends readonly [...any[]]> = {\n -readonly [K in keyof T]: RcInferType<T[K]>\n}\n\n/**\n * Check for a tuple of types\n *\n * TS equivalent example: [string, number, boolean]\n */\nexport function rc_tuple<T extends readonly RcType<any>[]>(\n types: T,\n): RcType<MapTupleToTypes<T>> {\n return {\n ...defaultProps,\n _kind_: `[${types.map((type) => type._kind_).join(', ')}]`,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (!Array.isArray(input)) return false\n\n if (input.length !== types.length) return false\n\n return checkArrayItems.call(this, input, types, ctx) as boolean\n })\n },\n }\n}\n\ntype ParseOptions = {\n /** ignore fallback and autofix */\n noWarnings?: boolean\n}\n\n/**\n * Parse a runcheck type. If valid return the valid input, with warning for autofix\n * and fallback, or the errors if invalid\n */\nexport function rc_parse<S>(\n input: any,\n type: RcType<S>,\n { noWarnings = false }: ParseOptions = {},\n): RcParseResult<S> {\n const ctx: ParseResultCtx = {\n warnings_: [],\n path_: '',\n objErrShortCircuit_: false,\n objErrKeyIndex_: 0,\n noWarnings_: noWarnings,\n strictObj_: false,\n noLooseArray_: false,\n }\n\n const parseResult = type._parse_(input, ctx)\n\n if (parseResult.ok) {\n return {\n error: false,\n ok: true,\n data: parseResult.data,\n value: parseResult.data,\n warnings: ctx.warnings_.length > 0 ? ctx.warnings_ : false,\n }\n }\n\n return {\n ok: false,\n error: true,\n errors: parseResult.errors,\n }\n}\n\nexport type RcParser<T> = (input: any) => RcParseResult<T>\n\n/** create a reusable parser for a certain type */\nexport function rc_parser<S>(type: RcType<S>): RcParser<S> {\n return (input: any) => rc_parse(input, type)\n}\n\n/** @deprecated use rc_unwrap_or_null instead */\nexport function rc_loose_parse<S>(\n input: any,\n type: RcType<S>,\n options?: ParseOptions,\n): { data: S | null; errors: string[] | false; warnings: string[] | false } {\n const result = rc_parse(input, type, options)\n\n if (result.error) {\n return {\n data: null,\n errors: result.errors,\n warnings: false,\n }\n }\n\n return { data: result.value, errors: false, warnings: result.warnings }\n}\n\nexport function rc_unwrap_or_null<R>(result: RcParseResult<R>): {\n value: R | null\n errors: string[] | false\n warnings: string[] | false\n} {\n return rc_unwrap_or(result, null)\n}\n\nexport function rc_unwrap_or<R, F>(\n result: RcParseResult<R>,\n fallback: F,\n): {\n value: R | F\n errors: string[] | false\n warnings: string[] | false\n} {\n if (result.error) {\n return {\n value: fallback,\n errors: result.errors,\n warnings: false,\n }\n }\n\n return { value: result.value, errors: false, warnings: result.warnings }\n}\n\nexport class RcValidationError extends Error {\n constructor(public readonly errors: string[]) {\n super(errors.join('\\n'))\n }\n}\n\nexport function rc_unwrap<R>(result: RcParseResult<R>): {\n value: R\n warnings: string[] | false\n} {\n if (result.error) {\n throw new RcValidationError(result.errors)\n }\n\n return result\n}\n\nexport function rc_is_valid<S>(input: any, type: RcType<S>): input is S {\n const ctx: ParseResultCtx = {\n warnings_: [],\n path_: '',\n objErrShortCircuit_: false,\n objErrKeyIndex_: 0,\n noWarnings_: false,\n strictObj_: false,\n noLooseArray_: false,\n }\n\n return type._parse_(input, ctx).ok\n}\n\nexport function rc_validator<S>(type: RcType<S>) {\n return (input: any): input is S => rc_is_valid(input, type)\n}\n\nexport function rc_recursive<T>(type: () => RcType<T>): RcType<T> {\n return {\n ...defaultProps,\n _kind_: 'recursive',\n _parse_(input, ctx) {\n return type()._parse_(input, ctx)\n },\n }\n}\n\ntype TransformOptions<T> = {\n /** if the input type is invalid, the transform will be ignored and this schema will be used to validate the input */\n outputSchema?: RcType<T>\n disableStrictOutputSchema?: boolean\n}\n\nfunction validateTransformOutput<T>(\n ctx: ParseResultCtx,\n outputSchema: RcType<T>,\n input: any,\n disableStrictOutputSchema: boolean | undefined,\n): InternalParseResult<T> {\n const parentPath = ctx.path_\n const parentObjErrShortCircuit = ctx.objErrShortCircuit_\n const parentStrictObj = ctx.strictObj_\n const parentNoWarnings = ctx.noWarnings_\n\n ctx.objErrShortCircuit_ = true\n ctx.path_ = `${parentPath}|output|`\n\n if (!disableStrictOutputSchema) {\n ctx.strictObj_ = true\n ctx.noWarnings_ = true\n }\n\n const result = outputSchema._parse_(input, ctx)\n\n ctx.strictObj_ = parentStrictObj\n ctx.noWarnings_ = parentNoWarnings\n ctx.path_ = parentPath\n ctx.objErrShortCircuit_ = parentObjErrShortCircuit\n\n return result\n}\n\n/** validate a input or subset of input and transform the valid result */\nexport function rc_transform<Input, Transformed>(\n type: RcType<Input>,\n transform: (input: Input, inputSchema: RcType<Input>) => Transformed,\n {\n outputSchema,\n disableStrictOutputSchema,\n }: TransformOptions<Transformed> = {},\n): RcType<Transformed> {\n return {\n ...defaultProps,\n _kind_: `transform_from_${type._kind_}`,\n _parse_(input, ctx) {\n let outputResultErrors: ErrorWithPath[] | null = null\n\n if (outputSchema) {\n const parseResult = validateTransformOutput(\n ctx,\n outputSchema,\n input,\n disableStrictOutputSchema,\n )\n\n if (parseResult.ok) {\n return parseResult\n } else {\n outputResultErrors = parseResult.errors\n }\n }\n\n const parseResult = type._parse_(input, ctx)\n\n if (parseResult.ok) {\n return {\n ok: true,\n data: transform(parseResult.data, type),\n errors: undefined,\n }\n } else {\n return {\n ok: false,\n errors: [...(outputResultErrors || []), ...parseResult.errors],\n data: undefined,\n }\n }\n },\n }\n}\n\n/** Create transforms which result can be validated with the same schema */\nexport function rc_narrow<Input, Narrowed extends Input>(\n type: RcType<Input>,\n narrow: (input: Input, inputSchema: RcType<Input>) => Narrowed,\n): RcType<Narrowed> {\n return rc_transform(type, narrow)\n}\n\n/** Allows the transform function to return a error if transformation is invalid */\nexport function rc_unsafe_transform<Input, Transformed>(\n type: RcType<Input>,\n transform: (\n input: Input,\n inputSchema: RcType<Input>,\n ) =>\n | { ok: true; data: Transformed }\n | { ok: false; errors: string | string[] },\n {\n outputSchema,\n disableStrictOutputSchema,\n }: TransformOptions<Transformed> = {},\n): RcType<Transformed> {\n return {\n ...defaultProps,\n _kind_: `transform_from_${type._kind_}`,\n _parse_(input, ctx) {\n let outputResultErrors: ErrorWithPath[] | null = null\n\n if (outputSchema) {\n const parseResult = validateTransformOutput(\n ctx,\n outputSchema,\n input,\n disableStrictOutputSchema,\n )\n\n if (parseResult.ok) {\n return parseResult\n } else {\n outputResultErrors = parseResult.errors\n }\n }\n\n const parseResult = type._parse_(input, ctx)\n\n if (parseResult.ok) {\n const transformResult = transform(parseResult.data, type)\n\n if (transformResult.ok) {\n return { ok: true, data: transformResult.data, errors: undefined }\n } else {\n return {\n ok: false,\n errors:\n typeof transformResult.errors === 'string' ?\n [getWarningOrErrorWithPath(ctx, transformResult.errors)]\n : transformResult.errors.map((error) =>\n getWarningOrErrorWithPath(ctx, error),\n ),\n data: undefined,\n }\n }\n }\n\n return {\n ok: false,\n errors: [...(outputResultErrors || []), ...parseResult.errors],\n data: undefined,\n }\n },\n }\n}\n\nfunction normalizedTypeOf(input: unknown, showValueInError: boolean): string {\n const typeOf = typeof input\n\n const type = ((): string => {\n if (typeOf === 'object') {\n if (Array.isArray(input)) {\n return 'array'\n }\n\n if (!input) {\n return 'null'\n }\n }\n\n return typeOf\n })()\n\n return (\n showValueInError &&\n (type === 'string' || type === 'number' || type === 'boolean')\n ) ?\n `${type}(${input})`\n : type\n}\n\ntype NonArrayObject = {\n [x: string]: any\n [y: number]: never\n}\n\nexport function rc_assert_is_valid<S>(\n result: RcParseResult<S>,\n): asserts result is {\n ok: true\n error: false\n data: S\n value: S\n warnings: string[] | false\n} {\n if (result.error) {\n throw new Error(`invalid input: ${result.errors.join(', ')}`)\n }\n}\n\n/** @internal */\nexport function isObject(value: any): value is NonArrayObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\n/** @internal */\nexport function snakeCase(str: string): string {\n return str\n .replace(/\\W+/g, ' ')\n .split(/ |\\B(?=[A-Z])/)\n .map((word) => word.toLowerCase())\n .join('_')\n}\n\nexport function rc_parse_json<T>(\n jsonString: unknown,\n schema: RcType<T>,\n options?: ParseOptions,\n): RcParseResult<T> {\n try {\n if (typeof jsonString !== 'string') {\n return {\n ok: false,\n error: true,\n errors: [\n `expected a json string, got ${normalizedTypeOf(jsonString, true)}`,\n ],\n }\n }\n\n const parsed = JSON.parse(jsonString)\n\n return rc_parse(parsed, schema, options)\n } catch (err) {\n return {\n ok: false,\n error: true,\n errors: [`json parsing error: ${isObject(err) ? err.message : ''}`],\n }\n }\n}\n\nfunction isFn(value: any): value is () => any {\n return typeof value === 'function'\n}\n\ntype Prettify<T> =\n T extends Record<string, any> ?\n {\n [K in keyof T]: Prettify<T[K]>\n }\n : T\n\nexport type RcPrettyInferType<T extends RcType<any>> = Prettify<RcInferType<T>>\n"],"mappings":"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","names":["autofixable_exports","__export","rc_boolean_autofix","rc_number_autofix","rc_string_autofix","__toCommonJS","withFallback","fallback","_fallback_","getWarningOrErrorWithPath","ctx","message","path_","addWarning","warning","warnings_","parse","type","input","ctx","checkIfIsValid","_optional_","_orNullish_","_orNull_","isValid","validResult","_predicate_","getWarningOrErrorWithPath","_kind_","noWarnings_","fb","_fallback_","addWarning","getResultErrors","isFn","_useAutFix_","_autoFix_","autofixed","getErrorMsg","err","path_","withAutofix","customAutofix","where","predicate","optional","normalizedTypeOf","_show_value_in_error_","orNull","orNullish","defaultProps","withFallback","_parse_","_array_item_type_","_alternative_key_","_obj_shape_","_is_object_","_is_extend_obj_","rc_undefined","rc_null","rc_any","rc_unknown","rc_boolean","rc_string","rc_number","rc_date","normalizedTypeOf","input","showValueInError","typeOf","type","isFn","value","rc_boolean_autofix","rc_boolean","input","rc_string_autofix","rc_string","rc_number_autofix","rc_number","parsed"]}
@@ -1 +1,2 @@
1
- import{r as f,s as t,t as o}from"./chunk-65CFL2UP.js";var s=f.withAutofix(r=>r==null||r===0||r===1?{fixed:!!r}:r==="true"||r==="false"?{fixed:r==="true"}:!1),n=t.withAutofix(r=>typeof r=="number"&&!Number.isNaN(r)?{fixed:r.toString()}:!1),u=o.withAutofix(r=>{if(typeof r=="string"){let e=Number(r);if(!Number.isNaN(e))return{fixed:e}}return!1});export{s as rc_boolean_autofix,u as rc_number_autofix,n as rc_string_autofix};
1
+ import{s as f,t,u as o}from"./chunk-ZV3N7RXM.js";var s=f.withAutofix(r=>r==null||r===0||r===1?{fixed:!!r}:r==="true"||r==="false"?{fixed:r==="true"}:!1),n=t.withAutofix(r=>typeof r=="number"&&!Number.isNaN(r)?{fixed:r.toString()}:!1),u=o.withAutofix(r=>{if(typeof r=="string"){let e=Number(r);if(!Number.isNaN(e))return{fixed:e}}return!1});export{s as rc_boolean_autofix,u as rc_number_autofix,n as rc_string_autofix};
2
+ //# sourceMappingURL=autofixable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/autofixable.ts"],"sourcesContent":["import { rc_boolean, rc_number, rc_string } from './runcheck'\n\n/** autofixes a boolean type if input is 0 | 1 | 'true' | 'false' | undefined | null,\n * returning error otherwise */\nexport const rc_boolean_autofix = rc_boolean.withAutofix((input) => {\n if (input === null || input === undefined || input === 0 || input === 1) {\n return { fixed: !!input }\n }\n\n if (input === 'true' || input === 'false') {\n return { fixed: input === 'true' }\n }\n\n return false\n})\n\n/** autofixes a string type if input is a number, returning error otherwise */\nexport const rc_string_autofix = rc_string.withAutofix((input) => {\n if (typeof input === 'number' && !Number.isNaN(input)) {\n return { fixed: input.toString() }\n }\n\n return false\n})\n\n/** autofixes a number type if input is a a valid number string, returning error otherwise */\nexport const rc_number_autofix = rc_number.withAutofix((input) => {\n if (typeof input === 'string') {\n const parsed = Number(input)\n\n if (!Number.isNaN(parsed)) {\n return { fixed: parsed }\n }\n }\n\n return false\n})\n"],"mappings":"iDAIO,IAAMA,EAAqBC,EAAW,YAAaC,GACpDA,GAAU,MAA+BA,IAAU,GAAKA,IAAU,EAC7D,CAAE,MAAO,CAAC,CAACA,CAAM,EAGtBA,IAAU,QAAUA,IAAU,QACzB,CAAE,MAAOA,IAAU,MAAO,EAG5B,EACR,EAGYC,EAAoBC,EAAU,YAAaF,GAClD,OAAOA,GAAU,UAAY,CAAC,OAAO,MAAMA,CAAK,EAC3C,CAAE,MAAOA,EAAM,SAAS,CAAE,EAG5B,EACR,EAGYG,EAAoBC,EAAU,YAAaJ,GAAU,CAChE,GAAI,OAAOA,GAAU,SAAU,CAC7B,IAAMK,EAAS,OAAOL,CAAK,EAE3B,GAAI,CAAC,OAAO,MAAMK,CAAM,EACtB,MAAO,CAAE,MAAOA,CAAO,EAI3B,MAAO,EACT,CAAC","names":["rc_boolean_autofix","rc_boolean","input","rc_string_autofix","rc_string","rc_number_autofix","rc_number","parsed"]}
@@ -0,0 +1,3 @@
1
+ function U(e,r){return{...r,y:e}}function D(e){return j(e)&&"__rc_type"in e}function x(e){if(D(e))return e;if(j(e)){let r={};for(let[n,t]of Object.entries(e))r[n]=x(t);return k(r)}else if(Array.isArray(e)){let[r,n]=e;switch(r){case"optional":return x(n).optional();case"nullish_or":return x(n).orNullish();case"null_or":return x(n).orNull()}}throw new Error(`invalid schema: ${e}`)}function k(e,{normalizeKeysFrom:r}={}){let n={};for(let[o,s]of Object.entries(e))n[o]=x(s);let t=Object.entries(n).map(([o,s])=>({key:o,type:s}));return{...c,t:n,e:"object",s:!0,r(o,s){return f(this,o,s,()=>{if(!j(o))return s.a=-1,!1;let a=this.e==="strict_obj"||s.i?new Set(Object.keys(o)):void 0;if(a&&a.size>t.length){s.a=-1;let d=[];if(s.o)return{data:void 0,errors:[p(s,`Expected strict object with ${t.length} keys but got ${a.size}`)]};for(let{key:T}of t)a.has(T)?a.delete(T):d.push(p(s,`Key '${T}' is missing`));for(let T of a)d.push(p(s,`Key '${T}' is not defined in the object shape`));return{data:void 0,errors:d}}let u={},l=[],h=s.n,b=-1;for(let d of t){let T=d.key,_=d.type,O=T;b+=1;let m=`.${T}`,R=`${h}${m}`;s.n=R;let y=o[T],g=T;if(y===void 0&&_.y&&(y=o[_.y],g=_.y),y===void 0&&r==="snake_case"){let A=I(T);y=o[A],g=A}a?.delete(g);let E=_.r(y,s);if(E.ok)u[O]=E.data;else{for(let A of E.errors)s.n=R,l.push(A);if(s.o){s.a=b;break}}}if(a&&a.size>0)for(let d of a)s.n=h,l.push(p(s,`Key '${d}' is not defined in the object shape`));return l.length>0?{errors:l,data:void 0}:(s.n=h,this.h?{errors:!1,data:{...o,...u}}:{errors:!1,data:u})})}}}function V(e,r){return{...k(e,r),e:"extends_object",h:!0}}function M(e){if(!e.t)throw new Error("type does not have an object shape");return e.t}function z(e,r){return{...k(e,r),e:"strict_obj"}}function L(e,{nonRecursive:r}={}){if(r){if(!e.t)throw new Error("rc_enable_obj_strict: nonRecursive option can only be used on object types");return{...e,e:"strict_obj"}}return{...e,r(n,t){let o=t.i;t.i=!0;let s=e.r(n,t);return t.i=o,s}}}function Q(...e){let r={};for(let n of e)Object.assign(r,n.t);return k(r)}function J(e,r){let n={};if(!e.t)throw new Error("rc_obj_pick: obj must be an object type");for(let t of r){let o=e.t[t];o&&(n[t]=o)}return k(n)}function Z(e,r){let n={};if(!e.t)throw new Error("rc_obj_omit: obj must be an object type");for(let t of Object.keys(e.t))r.includes(t)||(n[t]=e.t[t]);return k(n)}function G(){return(e,r)=>k(e,r)}function H(...e){let r="",n=!0;for(let t of e)r&&(r+=" & "),t.s||(n=!1),r+=t.e.includes("|")?`(${t.e})`:t.e;return{...c,e:r,s:n,r(t,o){return f(this,t,o,()=>{let s=null;for(let i of e){let a=i.r(t,o);if(a.ok)i.s&&(s={...s||{},...a.data});else return i.s?a:!1}return s?{data:s,errors:!1}:!0})}}}function X(e){return{...this,b:e}}function p(e,r){return`${e.n?`$${e.n}: `:""}${r}`}function S(e,r){e.d.push(r.startsWith("$")?r:p(e,r))}function C(e,r){r.forEach(n=>S(e,n))}function f(e,r,n,t){if(e.T&&r===void 0)return{ok:!0,data:r,errors:void 0};if(e.p&&r==null)return{ok:!0,data:r,errors:void 0};if(e.R&&r===null)return{ok:!0,data:r,errors:void 0};let o=t();if(o&&(o===!0||!o.errors)){let s=o===!0?r:o.data;return e.c&&!e.c(s)?{ok:!1,data:void 0,errors:[p(n,`Predicate failed for type '${e.e}'`)]}:{ok:!0,data:s,errors:void 0}}if(!n.u){let s=e.b;if(s!==void 0)return S(n,`Fallback used, errors -> ${N(o,n,e,r)}`),{ok:!0,data:v(s)?s():s,errors:void 0};if(e.k&&e._){let i=e._(r);if(i)return e.c&&!e.c(i.fixed)?{ok:!1,data:void 0,errors:[p(n,`Predicate failed for autofix in type '${e.e}'`)]}:(S(n,`Autofixed from error "${N(o,n,e,r)}"`),{ok:!0,data:i.fixed,errors:void 0})}}return{ok:!1,data:void 0,errors:o?o.errors:[p(n,B(e,r))]}}function N(e,r,n,t){return e?e.errors.map(o=>o.replace(r.n,"")).join("; "):B(n,t)}function Y(e){return{...this,k:!0,_:e}}function ee(e){return{...this,c:e}}function W(){return{...this,T:!0,e:`${this.e}_optional`}}function B(e,r){return`Type '${w(r,!!e.g)}' is not assignable to '${e.e}'`}function re(){return{...this,R:!0,e:`${this.e}_or_null`}}function ne(){return{...this,p:!0,e:`${this.e}_or_nullish`}}var c={__rc_type:void 0,withFallback:X,where:ee,r:void 0,e:void 0,optional:W,optionalKey:W,orNullish:ne,withAutofix:Y,orNull:re,f:void 0,b:void 0,c:void 0,T:!1,R:!1,p:!1,k:!1,g:!1,y:void 0,_:void 0,t:void 0,s:!1,h:!1},ke={...c,r(e,r){return f(this,e,r,()=>e===void 0)},e:"undefined"},ge={...c,r(e,r){return f(this,e,r,()=>e===null)},e:"null"},je={...c,r(e){return{ok:!0,data:e,errors:void 0}},e:"any"},Oe={...c,r(e){return{ok:!0,data:e,errors:void 0}},e:"unknown"},me={...c,r(e,r){return f(this,e,r,()=>typeof e=="boolean")},e:"boolean"},xe={...c,r(e,r){return f(this,e,r,()=>typeof e=="string")},e:"string"},we={...c,r(e,r){return f(this,e,r,()=>typeof e=="number"&&!Number.isNaN(e))},e:"number"},Pe={...c,r(e,r){return f(this,e,r,()=>typeof e=="object"&&e instanceof Date&&!Number.isNaN(e.getTime()))},e:"date"};function Ae(e){return{...c,r(r,n){return f(this,r,n,()=>r instanceof e)},e:`instanceof_${e.name?`_${e.name}`:""}`}}function Ee(...e){if(e.length===0)throw new Error("rc_literal requires at least one literal");return{...c,r(r,n){return f(this,r,n,()=>{for(let t of e)if(r===t)return!0;return!1})},g:!0,e:e.length==1?w(e[0],!0):e.map(r=>w(r,!0)).join(" | ")}}var q=1;function Se(...e){if(e.length===0)throw new Error("Unions should have at least one type");return{...c,r(r,n){return f(this,r,n,()=>{let t=n.n,o=[],s=0,i=!1,a=[],u=0;for(let l of e){u+=1,l.s&&(n.n=`${t}|union ${u}|`);let h=n.o;n.o=!0,n.a=0;let b=l.r(r,n),d=n.a;if(n.o=h,n.a=0,b.ok)return!0;l.s&&d!==-1?d>0?a.push(...b.errors):(s<q&&o.push(...b.errors),s+=1):i=!0}return n.n=t,a.length>0||o.length>0?((s>q||i)&&o.push(p(n,"not matches any other union member")),{errors:[...a,...o],data:void 0}):!1})},e:e.map(r=>r.e).join(" | ")}}function $e(e,r){return{...e,T:!1,p:!1,R:!1,r(t,o){return f(this,t,o,()=>{if(t===void 0)return n();let s=e.r(t,o);return s.ok?s.data===void 0?n():{data:s.data,errors:!1}:{data:void 0,errors:s.errors}})},e:`${e.e}_default`};function n(){return{data:v(r)?r():r,errors:!1}}}function Ke(e,r){return{...e,T:!1,p:!1,R:!1,r(t,o){return f(this,t,o,()=>{if(t==null)return n();let s=e.r(t,o);return s.ok?s.data===null||s.data===void 0?n():{data:s.data,errors:!1}:{data:void 0,errors:s.errors}})},e:`${e.e}_nullish_default`};function n(){return{data:v(r)?r():r,errors:!1}}}function te(e,{checkKey:r,looseCheck:n}={}){return{...c,e:`record<string, ${e.e}>`,s:!0,r(t,o){return f(this,t,o,()=>{if(!j(t))return!1;let s={},i=[],a=o.n;for(let[u,l]of Object.entries(t)){let h=`.${u}`,b=`${a}${h}`;if(o.n=b,r&&!r(u)){i.push(p(o,`Key '${u}' is not allowed`));continue}let d=t[u],T=e.r(l,o);if(T.ok)s[u]=d;else{let _=T.errors;for(let O of _)i.push(O);if(o.o)break}}if(i.length>0)if(n)C(o,i);else return{errors:i,data:void 0};return o.n=a,{errors:!1,data:s}})}}}function ve(e,r){let n={};for(let[t,o]of Object.entries(r))n[t]=k(o);return{...c,e:"discriminated_union",s:!0,r(t,o){return f(this,t,o,()=>{if(!j(t))return o.a=-1,!1;let s=t[e],i=o.n,a=n[s];if(!a){let l=w(s,!0);return{errors:[p({n:`${i}.${e}`},`Type '${l}' is not a valid discriminator`)],data:void 0}}o.n=`${i}|${e}: ${s}|`;let u=a.r(t,o);return o.n=i,u.ok?(u.data[e]=s,{errors:!1,data:u.data}):{errors:u.errors,data:void 0}})}}}function Ie(e,{checkKey:r}={}){return te(e,{checkKey:r,looseCheck:!0})}function P(e,r,n,t=!1,o){let s=t&&!n.u&&!n.l,i=o?.unique,a=[],u=[],l=i?new Set:void 0,h=n.n,b=Array.isArray(r),d=-1;for(let T of e){d++;let _=b?r[d]:r,O=`[${d}]`,m=`${h}${O}`;if(n.n=m,o?.filter){let y=o.filter(T);if(typeof y=="boolean"){if(!y)continue}else if("errors"in y)if(s){a.push(y.errors);continue}else return{errors:y.errors,data:void 0};n.n=m}let R=_.r(T,n);if(n.n=m,R.ok&&l){let y=R.data,g=typeof i=="string";g?y=R.data[i]:typeof i=="function"&&(y=i(R.data)),l.has(y)?(g&&(n.n=`${h}${O}.${i}`),R={ok:!1,data:void 0,errors:[p(n,g?`Type '${_.t?.[i]?.e}' with value "${y}" is not unique`:typeof i=="function"?`Type '${_.e}' unique fn return with value "${y}" is not unique`:`${_.e} value is not unique`)]}):l.add(y)}if(R.ok)u.push(R.data);else if(s){a.push(R.errors);continue}else return{errors:R.errors,data:void 0}}if(a.length>0){if(u.length===0)return{errors:a.slice(0,5).flat(),data:void 0};C(n,a.flat())}return{errors:!1,data:u}}function Ne(e,r){return{...c,e:`${e.e}[]`,f:e,r(n,t){return f(this,n,t,()=>Array.isArray(n)?n.length===0?!0:P.call(this,n,e,t,!1,r):!1)}}}function We(e){if(!e.f)throw new Error("Type does not have an item type");return e.f}function qe(e,{nonRecursive:r=!1}={}){if(r){if(!e.e.endsWith("[]"))throw new Error("rc_disable_loose_array: nonRecursive option can only be used with array types");return{...e,r(n,t){return f(this,n,t,()=>Array.isArray(n)?n.length===0?!0:P.call(this,n,e,t,!1):!1)}}}return{...e,r(n,t){let o=t.l;t.l=!0;let s=e.r(n,t);return t.l=o,s}}}function Ce(e,r){return{...c,f:e,e:`${e.e}[]`,r(n,t){return f(this,n,t,()=>Array.isArray(n)?n.length===0?!0:P.call(this,n,e,t,!0,r):!1)}}}function Be(e,r,n,t){return{...c,f:n,e:`${n.e}[]`,r(o,s){return f(this,o,s,()=>Array.isArray(o)?o.length===0?!0:P.call(this,o,n,s,t?.loose,{...t,filter(i){let a=e.r(i,s);return a.ok?r(a.data):{errors:a.errors}}}):!1)}}}function Fe(e){return{...c,e:`[${e.map(r=>r.e).join(", ")}]`,r(r,n){return f(this,r,n,()=>!Array.isArray(r)||r.length!==e.length?!1:P.call(this,r,e,n))}}}function K(e,r,{noWarnings:n=!1}={}){let t={d:[],n:"",o:!1,a:0,u:n,i:!1,l:!1},o=r.r(e,t);return o.ok?{error:!1,ok:!0,data:o.data,value:o.data,warnings:t.d.length>0?t.d:!1}:{ok:!1,error:!0,errors:o.errors}}function Ue(e){return r=>K(r,e)}function De(e,r,n){let t=K(e,r,n);return t.error?{data:null,errors:t.errors,warnings:!1}:{data:t.value,errors:!1,warnings:t.warnings}}function Ve(e){return oe(e,null)}function oe(e,r){return e.error?{value:r,errors:e.errors,warnings:!1}:{value:e.value,errors:!1,warnings:e.warnings}}var $=class extends Error{constructor(n){super(n.join(`
2
+ `));this.errors=n}};function Me(e){if(e.error)throw new $(e.errors);return e}function se(e,r){let n={d:[],n:"",o:!1,a:0,u:!1,i:!1,l:!1};return r.r(e,n).ok}function ze(e){return r=>se(r,e)}function Le(e){return{...c,e:"recursive",r(r,n){return e().r(r,n)}}}function F(e,r,n,t){let o=e.n,s=e.o,i=e.i,a=e.u;e.o=!0,e.n=`${o}|output|`,t||(e.i=!0,e.u=!0);let u=r.r(n,e);return e.i=i,e.u=a,e.n=o,e.o=s,u}function ae(e,r,{outputSchema:n,disableStrictOutputSchema:t}={}){return{...c,e:`transform_from_${e.e}`,r(o,s){let i=null;if(n){let u=F(s,n,o,t);if(u.ok)return u;i=u.errors}let a=e.r(o,s);return a.ok?{ok:!0,data:r(a.data,e),errors:void 0}:{ok:!1,errors:[...i||[],...a.errors],data:void 0}}}}function Qe(e,r){return ae(e,r)}function Je(e,r,{outputSchema:n,disableStrictOutputSchema:t}={}){return{...c,e:`transform_from_${e.e}`,r(o,s){let i=null;if(n){let u=F(s,n,o,t);if(u.ok)return u;i=u.errors}let a=e.r(o,s);if(a.ok){let u=r(a.data,e);return u.ok?{ok:!0,data:u.data,errors:void 0}:{ok:!1,errors:typeof u.errors=="string"?[p(s,u.errors)]:u.errors.map(l=>p(s,l)),data:void 0}}return{ok:!1,errors:[...i||[],...a.errors],data:void 0}}}}function w(e,r){let n=typeof e,t=(()=>{if(n==="object"){if(Array.isArray(e))return"array";if(!e)return"null"}return n})();return r&&(t==="string"||t==="number"||t==="boolean")?`${t}(${e})`:t}function Ze(e){if(e.error)throw new Error(`invalid input: ${e.errors.join(", ")}`)}function j(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function I(e){return e.replace(/\W+/g," ").split(/ |\B(?=[A-Z])/).map(r=>r.toLowerCase()).join("_")}function Ge(e,r,n){try{if(typeof e!="string")return{ok:!1,error:!0,errors:[`expected a json string, got ${w(e,!0)}`]};let t=JSON.parse(e);return K(t,r,n)}catch(t){return{ok:!1,error:!0,errors:[`json parsing error: ${j(t)?t.message:""}`]}}}function v(e){return typeof e=="function"}export{U as a,k as b,V as c,M as d,z as e,L as f,Q as g,J as h,Z as i,G as j,H as k,p as l,f as m,c as n,ke as o,ge as p,je as q,Oe as r,me as s,xe as t,we as u,Pe as v,Ae as w,Ee as x,Se as y,$e as z,Ke as A,te as B,ve as C,Ie as D,Ne as E,We as F,qe as G,Ce as H,Be as I,Fe as J,K,Ue as L,De as M,Ve as N,oe as O,$ as P,Me as Q,se as R,ze as S,Le as T,ae as U,Qe as V,Je as W,Ze as X,j as Y,I as Z,Ge as _};
3
+ //# sourceMappingURL=chunk-ZV3N7RXM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/rc_object.ts","../src/rc_intersection.ts","../src/runcheck.ts"],"sourcesContent":["import {\n ErrorWithPath,\n RcBase,\n RcInferType,\n RcOptionalKeyType,\n RcType,\n defaultProps,\n getWarningOrErrorWithPath,\n isObject,\n parse,\n snakeCase,\n} from './runcheck'\n\n/**\n * If the schema key value is undefined uses a value from the fallback key as a safe value\n * Can be used to rename keys from input\n */\nexport function rc_get_from_key_as_fallback<T extends RcType<any>>(\n fallbackKey: string,\n type: T,\n): RcType<RcInferType<T>> {\n return {\n ...type,\n _alternative_key_: fallbackKey,\n }\n}\n\nexport type RcObject = {\n [key: string]: RcBase<any, any> | RcObject\n}\n\nexport type TypeOfObjectType<T extends RcObject> = Flatten<\n AddQuestionMarks<{\n [K in keyof T]: T[K] extends RcType<infer U> ? RequiredKey<U>\n : T[K] extends RcOptionalKeyType<infer W> ? W\n : T[K] extends RcObject ? RequiredKey<TypeOfObjectType<T[K]>>\n : never\n }>\n>\n\nexport type RcObjTypeReturn<T extends RcObject> = RcType<TypeOfObjectType<T>>\n\ntype RequiredKey<T> = { _required_key_: T }\n\ntype RequiredKeys<T extends object> = {\n [k in keyof T]: T[k] extends RequiredKey<any> ? k : never\n}[keyof T]\n\ntype AddQuestionMarks<\n T extends object,\n R extends keyof T = RequiredKeys<T>,\n> = Pick<Required<T>, R> & Partial<Omit<T, R>>\n\ntype Identity<T> = T\n\ntype Flatten<T> = Identity<{\n [k in keyof T]: T[k] extends RequiredKey<infer U> ? U : T[k]\n}>\n\nfunction isRcType(value: any): value is RcType<any> {\n return isObject(value) && '__rc_type' in value\n}\n\nfunction unwrapToObjSchema(input: unknown): RcType<any> {\n if (isRcType(input)) {\n return input\n } else if (isObject(input)) {\n const objSchema: Record<string, RcType<any>> = {}\n\n for (const [key, value] of Object.entries(input)) {\n objSchema[key] = unwrapToObjSchema(value)\n }\n\n return rc_object(objSchema)\n } else if (Array.isArray(input)) {\n const [type, value] = input\n\n switch (type) {\n case 'optional':\n return unwrapToObjSchema(value).optional()\n case 'nullish_or':\n return unwrapToObjSchema(value).orNullish()\n case 'null_or':\n return unwrapToObjSchema(value).orNull()\n }\n }\n\n throw new Error(`invalid schema: ${input}`)\n}\n\nexport type ObjOptions = {\n normalizeKeysFrom?: 'snake_case'\n}\n\nexport function rc_object<T extends RcObject>(\n shape: T,\n { normalizeKeysFrom }: ObjOptions = {},\n): RcObjTypeReturn<T> {\n const objShape: Record<string, RcType<any>> = {}\n\n for (const [key, value] of Object.entries(shape)) {\n objShape[key] = unwrapToObjSchema(value)\n }\n\n const shapeEntries = Object.entries(objShape).map(([key, type]) => {\n return { key, type }\n })\n\n return {\n ...defaultProps,\n _obj_shape_: objShape,\n _kind_: 'object',\n _is_object_: true,\n _parse_(inputObj, ctx) {\n return parse<TypeOfObjectType<T>>(this, inputObj, ctx, () => {\n if (!isObject(inputObj)) {\n ctx.objErrKeyIndex_ = -1\n return false\n }\n\n const isStrict = this._kind_ === 'strict_obj' || ctx.strictObj_\n\n const excessKeys =\n isStrict ? new Set<string>(Object.keys(inputObj)) : undefined\n\n if (excessKeys && excessKeys.size > shapeEntries.length) {\n ctx.objErrKeyIndex_ = -1\n const errors: ErrorWithPath[] = []\n\n if (ctx.objErrShortCircuit_) {\n return {\n data: undefined,\n errors: [\n getWarningOrErrorWithPath(\n ctx,\n `Expected strict object with ${shapeEntries.length} keys but got ${excessKeys.size}`,\n ),\n ],\n }\n }\n\n for (const { key } of shapeEntries) {\n if (!excessKeys.has(key)) {\n errors.push(\n getWarningOrErrorWithPath(ctx, `Key '${key}' is missing`),\n )\n } else {\n excessKeys.delete(key)\n }\n }\n\n for (const key of excessKeys) {\n errors.push(\n getWarningOrErrorWithPath(\n ctx,\n `Key '${key}' is not defined in the object shape`,\n ),\n )\n }\n\n return {\n data: undefined,\n errors,\n }\n }\n\n const resultObj: Record<any, string> = {} as any\n const resultErrors: ErrorWithPath[] = []\n\n const parentPath = ctx.path_\n\n let i = -1\n for (const shapeEntry of shapeEntries) {\n const key = shapeEntry.key\n const type = shapeEntry.type\n\n const typekey = key as keyof T\n i += 1\n\n const subPath = `.${key}`\n\n const path = `${parentPath}${subPath}`\n\n ctx.path_ = path\n\n let input = inputObj[key]\n let keyToDeleteFromExcessKeys = key\n\n if (input === undefined && type._alternative_key_) {\n input = inputObj[type._alternative_key_]\n keyToDeleteFromExcessKeys = type._alternative_key_\n }\n\n if (input === undefined && normalizeKeysFrom === 'snake_case') {\n const snakeCaseKey = snakeCase(key)\n\n input = inputObj[snakeCaseKey]\n keyToDeleteFromExcessKeys = snakeCaseKey\n }\n\n excessKeys?.delete(keyToDeleteFromExcessKeys)\n\n const parseResult = type._parse_(input, ctx)\n\n if (parseResult.ok) {\n resultObj[typekey] = parseResult.data\n }\n //\n else {\n for (const subError of parseResult.errors) {\n ctx.path_ = path\n resultErrors.push(subError)\n }\n\n if (ctx.objErrShortCircuit_) {\n ctx.objErrKeyIndex_ = i\n break\n }\n }\n }\n\n if (excessKeys) {\n if (excessKeys.size > 0) {\n for (const key of excessKeys) {\n ctx.path_ = parentPath\n\n resultErrors.push(\n getWarningOrErrorWithPath(\n ctx,\n `Key '${key}' is not defined in the object shape`,\n ),\n )\n }\n }\n }\n\n if (resultErrors.length > 0) {\n return { errors: resultErrors, data: undefined }\n }\n\n ctx.path_ = parentPath\n\n if (this._is_extend_obj_) {\n return {\n errors: false,\n data: {\n ...(inputObj as any),\n ...(resultObj as any),\n },\n }\n }\n\n return { errors: false, data: resultObj as any }\n })\n },\n }\n}\n\nexport function rc_obj_extends<T extends RcObject>(\n shape: T,\n options?: ObjOptions,\n): RcObjTypeReturn<T> {\n return {\n ...rc_object(shape, options),\n _kind_: `extends_object`,\n _is_extend_obj_: true,\n }\n}\n\nexport function rc_get_obj_shape<T extends RcObject>(\n type: RcObjTypeReturn<T>,\n): T {\n if (!type._obj_shape_) {\n throw new Error(`type does not have an object shape`)\n }\n\n return type._obj_shape_ as T\n}\n\n/** return an error if the obj has more keys than the expected type */\nexport function rc_obj_strict<T extends RcObject>(\n shape: T,\n options?: ObjOptions,\n): RcObjTypeReturn<T> {\n return {\n ...rc_object(shape, options),\n _kind_: `strict_obj`,\n }\n}\n\nexport function rc_enable_obj_strict<T extends RcType<any>>(\n type: T,\n {\n nonRecursive,\n }: {\n nonRecursive?: boolean\n } = {},\n): T {\n if (nonRecursive) {\n if (!type._obj_shape_) {\n throw new Error(\n `rc_enable_obj_strict: nonRecursive option can only be used on object types`,\n )\n }\n\n return {\n ...type,\n _kind_: `strict_obj`,\n }\n }\n\n return {\n ...type,\n _parse_(input, ctx) {\n const parentStrictObj = ctx.strictObj_\n ctx.strictObj_ = true\n const result = type._parse_(input, ctx)\n ctx.strictObj_ = parentStrictObj\n return result\n },\n }\n}\n\ntype AnyObj = Record<string, unknown>\n\ntype Extends<T extends AnyObj, W extends AnyObj> = Omit<T, keyof W> & W\n\nexport function rc_obj_merge<A extends AnyObj, B extends AnyObj>(\n ...objs: [RcType<A>, RcType<B>]\n): RcType<Extends<A, B>>\nexport function rc_obj_merge<\n A extends AnyObj,\n B extends AnyObj,\n C extends AnyObj,\n>(...objs: [RcType<A>, RcType<B>, RcType<C>]): RcType<Extends<Extends<A, B>, C>>\nexport function rc_obj_merge<\n A extends AnyObj,\n B extends AnyObj,\n C extends AnyObj,\n D extends AnyObj,\n>(\n ...objs: [RcType<A>, RcType<B>, RcType<C>, RcType<D>]\n): RcType<Extends<Extends<Extends<A, B>, C>, D>>\nexport function rc_obj_merge(\n ...objs: RcType<Record<string, unknown>>[]\n): RcType<any> {\n const finalShape = {} as any\n\n for (const objShape of objs) {\n Object.assign(finalShape, objShape._obj_shape_)\n }\n\n return rc_object(finalShape)\n}\n\nexport function rc_obj_pick<O extends AnyObj, K extends keyof O>(\n obj: RcType<O>,\n keys: K[],\n): RcType<Pick<O, K>> {\n const shape = {} as any\n\n if (!obj._obj_shape_) {\n throw new Error('rc_obj_pick: obj must be an object type')\n }\n\n for (const key of keys) {\n const keyShape = obj._obj_shape_[key as string]\n if (keyShape) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n shape[key] = keyShape\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return rc_object(shape) as any\n}\n\nexport function rc_obj_omit<O extends AnyObj, K extends keyof O>(\n obj: RcType<O>,\n keys: K[],\n): RcType<Pick<O, K>> {\n const shape = {} as any\n\n if (!obj._obj_shape_) {\n throw new Error('rc_obj_omit: obj must be an object type')\n }\n\n for (const key of Object.keys(obj._obj_shape_)) {\n if (!(keys as any[]).includes(key)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n shape[key] = obj._obj_shape_[key]\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return rc_object(shape) as any\n}\n\ntype ExpectedSchema<T> = (t: T) => void\n\ntype RcTypeWithSquemaEqualTo<T> = { __rc_type: ExpectedSchema<T> }\n\ntype StrictObjTypeToRcType<T> = {\n [K in keyof T]-?: StricTypeToRcType<T[K]>\n}\n\ntype StricTypeToRcType<T> =\n [T] extends [any[]] ? RcTypeWithSquemaEqualTo<T>\n : [T] extends [Record<string, any>] ?\n StrictObjTypeToRcType<T> | RcTypeWithSquemaEqualTo<T>\n : [T] extends [Record<string, any> | null] ?\n ['null_or', StrictObjTypeToRcType<T>] | RcTypeWithSquemaEqualTo<T>\n : [T] extends [Record<string, any> | undefined] ?\n ['optional', StrictObjTypeToRcType<T>] | RcTypeWithSquemaEqualTo<T>\n : [T] extends [Record<string, any> | null | undefined] ?\n ['nullish_or', StrictObjTypeToRcType<T>] | RcTypeWithSquemaEqualTo<T>\n : RcTypeWithSquemaEqualTo<T>\n\ntype StricTypeToRcTypeBase<T extends Record<string, any>> = {\n [K in keyof T]-?: StricTypeToRcType<T[K]>\n}\n\nexport function rc_obj_builder<T extends Record<string, any>>() {\n return <S extends StricTypeToRcTypeBase<T>>(\n schema: {\n [K in keyof S]: K extends keyof T ? S[K] : never\n },\n options?: ObjOptions,\n ): RcType<T> => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n return rc_object(schema as any, options) as any\n }\n}\n","import { RcType, defaultProps, parse } from './runcheck'\n\nexport function rc_intersection<A, B>(a: RcType<A>, b: RcType<B>): RcType<A & B>\nexport function rc_intersection<A, B, C>(\n a: RcType<A>,\n b: RcType<B>,\n c: RcType<C>,\n): RcType<A & B & C>\nexport function rc_intersection<A, B, C, D>(\n a: RcType<A>,\n b: RcType<B>,\n c: RcType<C>,\n d: RcType<D>,\n): RcType<A & B & C & D>\nexport function rc_intersection(...types: RcType<any>[]): RcType<any> {\n let kind = ''\n let allIsObject = true\n\n for (const type of types) {\n if (kind) {\n kind += ' & '\n }\n\n if (!type._is_object_) {\n allIsObject = false\n }\n\n kind += type._kind_.includes('|') ? `(${type._kind_})` : type._kind_\n }\n\n return {\n ...defaultProps,\n _kind_: kind,\n _is_object_: allIsObject,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n let objResultData: Record<string, unknown> | null = null\n\n for (const type of types) {\n const result = type._parse_(input, ctx)\n\n if (!result.ok) {\n if (type._is_object_) {\n return result\n }\n\n return false\n } else {\n if (type._is_object_) {\n objResultData = { ...(objResultData || {}), ...result.data }\n }\n }\n }\n\n if (objResultData) {\n return {\n data: objResultData as any,\n errors: false,\n }\n }\n\n return true\n })\n },\n }\n}\n","import { RcObject, TypeOfObjectType, rc_object } from './rc_object'\n\nexport {\n rc_enable_obj_strict,\n rc_get_from_key_as_fallback,\n rc_get_obj_shape as rc_get_obj_schema,\n rc_obj_builder,\n rc_obj_extends,\n rc_obj_merge,\n rc_obj_omit,\n rc_obj_pick,\n rc_obj_strict,\n rc_object,\n} from './rc_object'\nexport { rc_intersection } from './rc_intersection'\n\nexport type RcParseResult<T> =\n | {\n error: false\n ok: true\n /** @deprecated use value instead */\n data: T\n value: T\n warnings: string[] | false\n }\n | {\n ok: false\n error: true\n errors: string[]\n }\n\nexport type RcInferType<T extends RcType<any>> =\n T extends RcType<infer U> ? U : never\n\ntype ParseResultCtx = {\n warnings_: string[]\n path_: string\n objErrShortCircuit_: boolean\n objErrKeyIndex_: number\n strictObj_: boolean\n noWarnings_: boolean\n noLooseArray_: boolean\n}\n\ntype InternalParseResult<T> =\n | { ok: true; data: T; errors: undefined }\n | { ok: false; errors: ErrorWithPath[]; data: undefined }\n\ntype WithFallback<T> = (fallback: T | (() => T)) => RcType<T>\n\nexport type RcOptionalKeyType<T> = RcBase<T, true>\n\nexport type RcType<T> = RcBase<T, false>\n\ntype Schema<T> = (t: T) => void\n\nexport type RcBase<T, RequiredKey extends boolean> = {\n __rc_type: Schema<T>\n readonly withFallback: WithFallback<T>\n readonly where: (predicate: (input: T) => boolean) => RcType<T>\n /** RcType | undefined */\n readonly optional: () => RcType<T | undefined>\n /** { key?: RcType | undefined } */\n readonly optionalKey: () => RcOptionalKeyType<T | undefined>\n /** RcType | null */\n readonly orNull: () => RcType<T | null>\n /** RcType | null | undefined */\n readonly orNullish: () => RcType<T | null | undefined>\n readonly withAutofix: (\n customAutofix: (input: unknown) => false | { fixed: T },\n ) => RcType<T>\n\n // This should not be stripped out because it is used in type inference\n readonly _optional_key_?: RequiredKey\n /** @internal */\n readonly _parse_: (\n input: unknown,\n ctx: ParseResultCtx,\n ) => InternalParseResult<T>\n /** @internal */\n readonly _kind_: string\n /** @internal */\n readonly _fallback_: T | (() => T) | undefined\n /** @internal */\n readonly _predicate_: ((input: T) => boolean) | undefined\n /** @internal */\n readonly _optional_: boolean\n /** @internal */\n readonly _orNullish_: boolean\n /** @internal */\n readonly _orNull_: boolean\n /** @internal */\n readonly _useAutFix_: boolean\n /** @internal */\n readonly _is_extend_obj_: boolean\n /** @internal */\n readonly _is_object_: boolean\n /** @internal */\n readonly _array_item_type_: RcType<any> | undefined\n /** @internal */\n readonly _show_value_in_error_: boolean\n /** @internal */\n readonly _alternative_key_: string | undefined\n /** @internal */\n readonly _obj_shape_: Record<string, RcType<any>> | undefined\n /** @internal */\n readonly _autoFix_: ((input: unknown) => false | { fixed: T }) | undefined\n}\n\nfunction withFallback(this: RcType<any>, fallback: any): RcType<any> {\n return {\n ...this,\n _fallback_: fallback,\n }\n}\n\n/** @internal */\nexport type ErrorWithPath = string & { __withPath: true }\ntype ErrorWithouPath = string & { __withPath?: never }\n\nexport function getWarningOrErrorWithPath(\n ctx: { path_: string },\n message: ErrorWithouPath,\n): ErrorWithPath {\n return `${ctx.path_ ? `$${ctx.path_}: ` : ''}${message}` as ErrorWithPath\n}\n\nfunction addWarning(ctx: ParseResultCtx, warning: string) {\n ctx.warnings_.push(\n warning.startsWith('$') ? warning : getWarningOrErrorWithPath(ctx, warning),\n )\n}\n\nfunction addWarnings(ctx: ParseResultCtx, warnings: string[]) {\n warnings.forEach((warning) => addWarning(ctx, warning))\n}\n\ntype IsValid<T> =\n | boolean\n | { data: T; errors: false }\n | { data: undefined; errors: ErrorWithPath[] }\n\nexport function parse<T>(\n type: RcType<T>,\n input: unknown,\n ctx: ParseResultCtx,\n checkIfIsValid: () => IsValid<T>,\n): InternalParseResult<T> {\n if (type._optional_) {\n if (input === undefined) {\n return { ok: true, data: input as T, errors: undefined }\n }\n }\n\n if (type._orNullish_) {\n if (input === null || input === undefined) {\n return { ok: true, data: input as T, errors: undefined }\n }\n }\n\n if (type._orNull_) {\n if (input === null) {\n return { ok: true, data: input as T, errors: undefined }\n }\n }\n\n const isValid = checkIfIsValid()\n\n if (isValid) {\n if (isValid === true || !isValid.errors) {\n const validResult = isValid === true ? (input as T) : isValid.data\n\n if (type._predicate_) {\n if (!type._predicate_(validResult)) {\n return {\n ok: false,\n data: undefined,\n errors: [\n getWarningOrErrorWithPath(\n ctx,\n `Predicate failed for type '${type._kind_}'`,\n ),\n ],\n }\n }\n }\n\n return { ok: true, data: validResult, errors: undefined }\n }\n }\n\n if (!ctx.noWarnings_) {\n const fb = type._fallback_\n\n if (fb !== undefined) {\n addWarning(\n ctx,\n `Fallback used, errors -> ${getResultErrors(\n isValid,\n ctx,\n type,\n input,\n )}`,\n )\n\n return { ok: true, data: isFn(fb) ? fb() : fb, errors: undefined }\n }\n\n if (type._useAutFix_ && type._autoFix_) {\n const autofixed = type._autoFix_(input)\n\n if (autofixed) {\n if (type._predicate_) {\n if (!type._predicate_(autofixed.fixed)) {\n return {\n ok: false,\n data: undefined,\n errors: [\n getWarningOrErrorWithPath(\n ctx,\n `Predicate failed for autofix in type '${type._kind_}'`,\n ),\n ],\n }\n }\n }\n\n addWarning(\n ctx,\n `Autofixed from error \"${getResultErrors(\n isValid,\n ctx,\n type,\n input,\n )}\"`,\n )\n\n return { ok: true, data: autofixed.fixed, errors: undefined }\n }\n }\n }\n\n return {\n ok: false,\n data: undefined,\n errors:\n isValid ?\n isValid.errors\n : [getWarningOrErrorWithPath(ctx, getErrorMsg(type, input))],\n }\n}\n\nfunction getResultErrors(\n isValid: false | { errors: string[] },\n ctx: ParseResultCtx,\n type: RcType<any>,\n input: unknown,\n) {\n return isValid ?\n isValid.errors.map((err) => err.replace(ctx.path_, '')).join('; ')\n : getErrorMsg(type, input)\n}\n\nfunction withAutofix(\n this: RcType<any>,\n customAutofix: (input: unknown) => any,\n): RcType<any> {\n return {\n ...this,\n _useAutFix_: true,\n _autoFix_: customAutofix,\n }\n}\n\nfunction where(\n this: RcType<any>,\n predicate: (input: any) => boolean,\n): RcType<any> {\n return {\n ...this,\n _predicate_: predicate,\n }\n}\n\nfunction optional(this: RcType<any>): RcType<any> {\n return {\n ...this,\n _optional_: true,\n _kind_: `${this._kind_}_optional`,\n }\n}\n\nfunction getErrorMsg(type: RcType<any>, input: unknown): string {\n return `Type '${normalizedTypeOf(\n input,\n !!type._show_value_in_error_,\n )}' is not assignable to '${type._kind_}'`\n}\n\nfunction orNull(this: RcType<any>): RcType<any> {\n return {\n ...this,\n _orNull_: true,\n _kind_: `${this._kind_}_or_null`,\n }\n}\n\nfunction orNullish(this: RcType<any>): RcType<any> {\n return {\n ...this,\n _orNullish_: true,\n _kind_: `${this._kind_}_or_nullish`,\n }\n}\n\nexport const defaultProps: Omit<RcType<any>, '_parse_' | '_kind_'> = {\n __rc_type: undefined as any,\n withFallback,\n where,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- perf improvement to avoid polymorphic deoptimaztions\n // @ts-ignore\n _parse_: undefined as any,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- perf improvement to avoid polymorphic deoptimaztions\n // @ts-ignore\n _kind_: undefined as any,\n optional,\n optionalKey: optional as any,\n orNullish,\n withAutofix,\n orNull,\n _array_item_type_: undefined,\n _fallback_: undefined,\n _predicate_: undefined,\n _optional_: false,\n _orNull_: false,\n _orNullish_: false,\n _useAutFix_: false,\n _show_value_in_error_: false,\n _alternative_key_: undefined,\n _autoFix_: undefined,\n _obj_shape_: undefined,\n _is_object_: false,\n _is_extend_obj_: false,\n}\n\nexport const rc_undefined: RcType<undefined> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => input === undefined)\n },\n _kind_: 'undefined',\n}\n\nexport const rc_null: RcType<null> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => input === null)\n },\n _kind_: 'null',\n}\n\nexport const rc_any: RcType<any> = {\n ...defaultProps,\n _parse_(input) {\n return { ok: true, data: input, errors: undefined }\n },\n _kind_: 'any',\n}\n\nexport const rc_unknown: RcType<unknown> = {\n ...defaultProps,\n _parse_(input) {\n return { ok: true, data: input, errors: undefined }\n },\n _kind_: 'unknown',\n}\n\nexport const rc_boolean: RcType<boolean> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => typeof input === 'boolean')\n },\n _kind_: 'boolean',\n}\n\nexport const rc_string: RcType<string> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => typeof input === 'string')\n },\n _kind_: 'string',\n}\n\nexport const rc_number: RcType<number> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(\n this,\n input,\n ctx,\n () => typeof input === 'number' && !Number.isNaN(input),\n )\n },\n _kind_: 'number',\n}\n\nexport const rc_date: RcType<Date> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n return (\n typeof input === 'object' &&\n input instanceof Date &&\n !Number.isNaN(input.getTime())\n )\n })\n },\n _kind_: 'date',\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function rc_instanceof<T extends Function>(classToCheck: T): RcType<T> {\n return {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n return input instanceof classToCheck\n })\n },\n _kind_: `instanceof_${classToCheck.name ? `_${classToCheck.name}` : ''}`,\n }\n}\n\nexport function rc_literals<T extends (string | number | boolean)[]>(\n ...literals: T\n): RcType<T[number]> {\n if (literals.length === 0) {\n throw new Error('rc_literal requires at least one literal')\n }\n\n return {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n for (const literal of literals) {\n if (input === literal) {\n return true\n }\n }\n\n return false\n })\n },\n _show_value_in_error_: true,\n _kind_:\n literals.length == 1 ?\n normalizedTypeOf(literals[0], true)\n : literals.map((literal) => normalizedTypeOf(literal, true)).join(' | '),\n }\n}\n\nconst maxShallowObjErrors = 1\n\nexport function rc_union<T extends RcType<any>[]>(\n ...types: T\n): RcType<RcInferType<T[number]>> {\n if (types.length === 0) {\n throw new Error('Unions should have at least one type')\n }\n\n return {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n const basePath = ctx.path_\n const shallowObjErrors: ErrorWithPath[] = []\n let shallowObjErrorsCount = 0\n let hasNonObjTypeMember = false\n const nonShallowObjErrors: ErrorWithPath[] = []\n\n let i = 0\n for (const type of types) {\n i += 1\n\n if (type._is_object_) {\n ctx.path_ = `${basePath}|union ${i}|`\n }\n\n const currentObjErrShortCircuit = ctx.objErrShortCircuit_\n ctx.objErrShortCircuit_ = true\n ctx.objErrKeyIndex_ = 0\n\n const parseResult = type._parse_(input, ctx)\n\n const objErrIndex = ctx.objErrKeyIndex_\n\n ctx.objErrShortCircuit_ = currentObjErrShortCircuit\n ctx.objErrKeyIndex_ = 0\n\n if (parseResult.ok) {\n return true\n } else if (type._is_object_ && objErrIndex !== -1) {\n if (objErrIndex > 0) {\n nonShallowObjErrors.push(...parseResult.errors)\n } else {\n if (shallowObjErrorsCount < maxShallowObjErrors) {\n shallowObjErrors.push(...parseResult.errors)\n }\n\n shallowObjErrorsCount += 1\n }\n } else {\n hasNonObjTypeMember = true\n }\n }\n\n ctx.path_ = basePath\n\n if (nonShallowObjErrors.length > 0 || shallowObjErrors.length > 0) {\n if (\n shallowObjErrorsCount > maxShallowObjErrors ||\n hasNonObjTypeMember\n ) {\n shallowObjErrors.push(\n getWarningOrErrorWithPath(\n ctx,\n 'not matches any other union member',\n ),\n )\n }\n\n return {\n errors: [...nonShallowObjErrors, ...shallowObjErrors],\n data: undefined,\n }\n }\n\n return false\n })\n },\n _kind_: types.map((type) => type._kind_).join(' | '),\n }\n}\n\ntype NotUndefined<T> = T extends undefined ? never : T\n\n/** Generate a schema with valid fallback value for undefined inputs */\nexport function rc_default<T>(\n schema: RcType<T>,\n defaultValue: NotUndefined<T> | (() => NotUndefined<T>),\n): RcType<NotUndefined<T>> {\n return {\n ...(schema as unknown as RcType<NotUndefined<T>>),\n _optional_: false,\n _orNullish_: false,\n _orNull_: false,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (input === undefined) {\n return getDefaultResult()\n }\n\n const parseResult = schema._parse_(input, ctx)\n\n if (parseResult.ok) {\n if (parseResult.data === undefined) {\n return getDefaultResult()\n }\n\n return { data: parseResult.data as NotUndefined<T>, errors: false }\n } else {\n return { data: undefined, errors: parseResult.errors }\n }\n })\n },\n _kind_: `${schema._kind_}_default`,\n }\n\n function getDefaultResult(): IsValid<NotUndefined<T>> {\n return {\n data: isFn(defaultValue) ? defaultValue() : defaultValue,\n errors: false,\n }\n }\n}\n\ntype NotNullish<T> = T extends null | undefined ? never : T\n\nexport function rc_nullish_default<T>(\n schema: RcType<T>,\n defaultValue: NotNullish<T> | (() => NotNullish<T>),\n): RcType<NotNullish<T>> {\n return {\n ...(schema as unknown as RcType<NotNullish<T>>),\n _optional_: false,\n _orNullish_: false,\n _orNull_: false,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (input === null || input === undefined) {\n return getDefaultResult()\n }\n\n const parseResult = schema._parse_(input, ctx)\n\n if (parseResult.ok) {\n if (parseResult.data === null || parseResult.data === undefined) {\n return getDefaultResult()\n }\n\n return { data: parseResult.data as NotNullish<T>, errors: false }\n } else {\n return { data: undefined, errors: parseResult.errors }\n }\n })\n },\n _kind_: `${schema._kind_}_nullish_default`,\n }\n\n function getDefaultResult(): IsValid<NotNullish<T>> {\n return {\n data: isFn(defaultValue) ? defaultValue() : defaultValue,\n errors: false,\n }\n }\n}\n\nexport function rc_record<V>(\n valueType: RcType<V>,\n {\n checkKey,\n looseCheck,\n }: { checkKey?: (key: string) => boolean; looseCheck?: boolean } = {},\n): RcType<Record<string, V>> {\n return {\n ...defaultProps,\n _kind_: `record<string, ${valueType._kind_}>`,\n _is_object_: true,\n _parse_(inputObj, ctx) {\n return parse<Record<string, V>>(this, inputObj, ctx, () => {\n if (!isObject(inputObj)) return false\n\n const resultObj: Record<any, string> = {} as any\n const resultErrors: ErrorWithPath[] = []\n\n const parentPath = ctx.path_\n\n for (const [key, inputValue] of Object.entries(inputObj)) {\n const subPath = `.${key}`\n\n const path = `${parentPath}${subPath}`\n ctx.path_ = path\n\n if (checkKey && !checkKey(key)) {\n resultErrors.push(\n getWarningOrErrorWithPath(ctx, `Key '${key}' is not allowed`),\n )\n continue\n }\n\n const input = inputObj[key]\n\n const parseResult = valueType._parse_(inputValue, ctx)\n\n if (parseResult.ok) {\n resultObj[key] = input\n }\n //\n else {\n const errors = parseResult.errors\n\n for (const subError of errors) {\n resultErrors.push(subError)\n }\n\n if (ctx.objErrShortCircuit_) {\n break\n }\n }\n }\n\n if (resultErrors.length > 0) {\n if (looseCheck) {\n addWarnings(ctx, resultErrors)\n } else {\n return { errors: resultErrors, data: undefined }\n }\n }\n\n ctx.path_ = parentPath\n\n return { errors: false, data: resultObj as any }\n })\n },\n }\n}\n\nexport function rc_discriminated_union<\n K extends string,\n T extends Record<string, RcObject>,\n>(\n discriminatorKey: K,\n types: T,\n): RcType<\n Prettify<\n { [P in keyof T]: { [Q in K]: P } & TypeOfObjectType<T[P]> }[keyof T]\n >\n> {\n const preComputedTypesShape = {} as Record<string, RcType<any>>\n\n for (const [key, type] of Object.entries(types)) {\n preComputedTypesShape[key] = rc_object(type) as any\n }\n\n return {\n ...defaultProps,\n _kind_: `discriminated_union`,\n _is_object_: true,\n _parse_(input, ctx) {\n return parse<any>(this, input, ctx, () => {\n if (!isObject(input)) {\n ctx.objErrKeyIndex_ = -1\n return false\n }\n\n const discriminator = input[discriminatorKey]\n\n const parentPath = ctx.path_\n\n const type = preComputedTypesShape[discriminator]\n\n if (!type) {\n const invalidValueType = normalizedTypeOf(discriminator, true)\n\n return {\n errors: [\n getWarningOrErrorWithPath(\n { path_: `${parentPath}.${discriminatorKey}` },\n `Type '${invalidValueType}' is not a valid discriminator`,\n ),\n ],\n data: undefined,\n }\n }\n\n ctx.path_ = `${parentPath}|${discriminatorKey}: ${discriminator}|`\n\n const parseResult = type._parse_(input, ctx)\n\n ctx.path_ = parentPath\n\n if (!parseResult.ok) {\n return { errors: parseResult.errors, data: undefined }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n parseResult.data[discriminatorKey] = discriminator\n\n return { errors: false, data: parseResult.data }\n })\n },\n }\n}\n\n/** instead of returning a general error, rejects invalid keys and returns warnings for these items */\nexport function rc_loose_record<V>(\n valueType: RcType<V>,\n { checkKey }: { checkKey?: (key: string) => boolean } = {},\n): RcType<Record<string, V>> {\n return rc_record(valueType, { checkKey, looseCheck: true })\n}\n\nfunction checkArrayItems(\n this: RcType<any>,\n input: any[],\n types: RcType<any> | readonly RcType<any>[],\n ctx: ParseResultCtx,\n _loose = false,\n options?: ArrayOptions<RcType<any>>,\n): IsValid<any[]> {\n const useLooseMode = _loose && !ctx.noWarnings_ && !ctx.noLooseArray_\n const unique = options?.unique\n\n const looseErrors: ErrorWithPath[][] = []\n const arrayResult: any[] = []\n const uniqueValues = unique ? new Set<any>() : undefined\n\n const parentPath = ctx.path_\n\n const isTuple = Array.isArray(types)\n\n let index = -1\n for (const _item of input) {\n index++\n\n const type: RcType<any> = isTuple ? types[index] : types\n\n const subPath = `[${index}]`\n\n const path = `${parentPath}${subPath}`\n\n ctx.path_ = path\n\n if (options?.filter) {\n const filterResult = options.filter(_item)\n\n if (typeof filterResult === 'boolean') {\n if (!filterResult) {\n continue\n }\n } else if ('errors' in filterResult) {\n if (!useLooseMode) {\n return { errors: filterResult.errors, data: undefined }\n } else {\n looseErrors.push(filterResult.errors)\n continue\n }\n }\n\n ctx.path_ = path\n }\n\n let parseResult = type._parse_(_item, ctx)\n\n ctx.path_ = path\n\n if (parseResult.ok && uniqueValues) {\n let uniqueValueToCheck = parseResult.data\n\n const isUniqueKey = typeof unique === 'string'\n\n if (isUniqueKey) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n uniqueValueToCheck = parseResult.data[unique]\n } else if (typeof unique === 'function') {\n uniqueValueToCheck = unique(parseResult.data)\n }\n\n if (uniqueValues.has(uniqueValueToCheck)) {\n if (isUniqueKey) {\n ctx.path_ = `${parentPath}${subPath}.${unique}`\n }\n\n parseResult = {\n ok: false,\n data: undefined,\n errors: [\n getWarningOrErrorWithPath(\n ctx,\n isUniqueKey ?\n `Type '${type._obj_shape_?.[unique]?._kind_}' with value \"${uniqueValueToCheck}\" is not unique`\n : typeof unique === 'function' ?\n `Type '${type._kind_}' unique fn return with value \"${uniqueValueToCheck}\" is not unique`\n : `${type._kind_} value is not unique`,\n ),\n ],\n }\n } else {\n uniqueValues.add(uniqueValueToCheck)\n }\n }\n\n if (!parseResult.ok) {\n if (!useLooseMode) {\n return {\n errors: parseResult.errors,\n data: undefined,\n }\n } else {\n looseErrors.push(parseResult.errors)\n continue\n }\n } else {\n arrayResult.push(parseResult.data)\n }\n }\n\n if (looseErrors.length > 0) {\n if (arrayResult.length === 0) {\n return { errors: looseErrors.slice(0, 5).flat(), data: undefined }\n } else {\n addWarnings(ctx, looseErrors.flat())\n }\n }\n\n return { errors: false, data: arrayResult }\n}\n\ntype ArrayOptions<T extends RcType<any>> = {\n unique?: RcInferType<T> extends Record<string, any> ?\n keyof RcInferType<T> | ((parsedItem: RcInferType<T>) => any)\n : boolean | ((parsedItem: RcInferType<T>) => any)\n filter?: (item: RcInferType<T>) => boolean | { errors: ErrorWithPath[] }\n}\n\nexport function rc_array<T extends RcType<any>>(\n type: T,\n options?: ArrayOptions<T>,\n): RcType<RcInferType<T>[]> {\n return {\n ...defaultProps,\n _kind_: `${type._kind_}[]`,\n _array_item_type_: type,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (!Array.isArray(input)) return false\n\n if (input.length === 0) return true\n\n return checkArrayItems.call(this, input, type, ctx, false, options)\n })\n },\n }\n}\n\nexport function rc_get_array_item_type<T>(type: RcType<T[]>): RcType<T> {\n if (!type._array_item_type_) {\n throw new Error(`Type does not have an item type`)\n }\n\n return type._array_item_type_\n}\n\nexport function rc_disable_loose_array<T extends RcType<any>>(\n type: T,\n { nonRecursive = false }: { nonRecursive?: boolean } = {},\n): T {\n if (nonRecursive) {\n if (!type._kind_.endsWith('[]')) {\n throw new Error(\n `rc_disable_loose_array: nonRecursive option can only be used with array types`,\n )\n }\n\n return {\n ...type,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (!Array.isArray(input)) return false\n\n if (input.length === 0) return true\n\n return checkArrayItems.call(this, input, type, ctx, false)\n })\n },\n }\n }\n\n return {\n ...type,\n _parse_(input, ctx) {\n const parentDisableLooseArray = ctx.noLooseArray_\n\n ctx.noLooseArray_ = true\n const result = type._parse_(input, ctx)\n ctx.noLooseArray_ = parentDisableLooseArray\n\n return result\n },\n }\n}\n\n/** instead of returning a general error, rejects invalid array items and returns warnings for these items */\nexport function rc_loose_array<T extends RcType<any>>(\n type: T,\n options?: ArrayOptions<T>,\n): RcType<RcInferType<T>[]> {\n return {\n ...defaultProps,\n _array_item_type_: type,\n _kind_: `${type._kind_}[]`,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (!Array.isArray(input)) return false\n\n if (input.length === 0) return true\n\n return checkArrayItems.call(this, input, type, ctx, true, options)\n })\n },\n }\n}\n\nexport function rc_array_filter_from_schema<B, T>(\n filterSchema: RcType<B>,\n filterFn: (item: B) => boolean,\n type: RcType<T>,\n options?: Omit<ArrayOptions<RcType<any>>, 'filter'> & {\n loose?: boolean\n },\n): RcType<T[]> {\n return {\n ...defaultProps,\n _array_item_type_: type,\n _kind_: `${type._kind_}[]`,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (!Array.isArray(input)) return false\n\n if (input.length === 0) return true\n\n return checkArrayItems.call(this, input, type, ctx, options?.loose, {\n ...options,\n filter(item) {\n const filterResult = filterSchema._parse_(item, ctx)\n\n if (!filterResult.ok) {\n return { errors: filterResult.errors }\n }\n\n return filterFn(filterResult.data)\n },\n })\n })\n },\n }\n}\n\ntype MapTupleToTypes<T extends readonly [...any[]]> = {\n -readonly [K in keyof T]: RcInferType<T[K]>\n}\n\n/**\n * Check for a tuple of types\n *\n * TS equivalent example: [string, number, boolean]\n */\nexport function rc_tuple<T extends readonly RcType<any>[]>(\n types: T,\n): RcType<MapTupleToTypes<T>> {\n return {\n ...defaultProps,\n _kind_: `[${types.map((type) => type._kind_).join(', ')}]`,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (!Array.isArray(input)) return false\n\n if (input.length !== types.length) return false\n\n return checkArrayItems.call(this, input, types, ctx) as boolean\n })\n },\n }\n}\n\ntype ParseOptions = {\n /** ignore fallback and autofix */\n noWarnings?: boolean\n}\n\n/**\n * Parse a runcheck type. If valid return the valid input, with warning for autofix\n * and fallback, or the errors if invalid\n */\nexport function rc_parse<S>(\n input: any,\n type: RcType<S>,\n { noWarnings = false }: ParseOptions = {},\n): RcParseResult<S> {\n const ctx: ParseResultCtx = {\n warnings_: [],\n path_: '',\n objErrShortCircuit_: false,\n objErrKeyIndex_: 0,\n noWarnings_: noWarnings,\n strictObj_: false,\n noLooseArray_: false,\n }\n\n const parseResult = type._parse_(input, ctx)\n\n if (parseResult.ok) {\n return {\n error: false,\n ok: true,\n data: parseResult.data,\n value: parseResult.data,\n warnings: ctx.warnings_.length > 0 ? ctx.warnings_ : false,\n }\n }\n\n return {\n ok: false,\n error: true,\n errors: parseResult.errors,\n }\n}\n\nexport type RcParser<T> = (input: any) => RcParseResult<T>\n\n/** create a reusable parser for a certain type */\nexport function rc_parser<S>(type: RcType<S>): RcParser<S> {\n return (input: any) => rc_parse(input, type)\n}\n\n/** @deprecated use rc_unwrap_or_null instead */\nexport function rc_loose_parse<S>(\n input: any,\n type: RcType<S>,\n options?: ParseOptions,\n): { data: S | null; errors: string[] | false; warnings: string[] | false } {\n const result = rc_parse(input, type, options)\n\n if (result.error) {\n return {\n data: null,\n errors: result.errors,\n warnings: false,\n }\n }\n\n return { data: result.value, errors: false, warnings: result.warnings }\n}\n\nexport function rc_unwrap_or_null<R>(result: RcParseResult<R>): {\n value: R | null\n errors: string[] | false\n warnings: string[] | false\n} {\n return rc_unwrap_or(result, null)\n}\n\nexport function rc_unwrap_or<R, F>(\n result: RcParseResult<R>,\n fallback: F,\n): {\n value: R | F\n errors: string[] | false\n warnings: string[] | false\n} {\n if (result.error) {\n return {\n value: fallback,\n errors: result.errors,\n warnings: false,\n }\n }\n\n return { value: result.value, errors: false, warnings: result.warnings }\n}\n\nexport class RcValidationError extends Error {\n constructor(public readonly errors: string[]) {\n super(errors.join('\\n'))\n }\n}\n\nexport function rc_unwrap<R>(result: RcParseResult<R>): {\n value: R\n warnings: string[] | false\n} {\n if (result.error) {\n throw new RcValidationError(result.errors)\n }\n\n return result\n}\n\nexport function rc_is_valid<S>(input: any, type: RcType<S>): input is S {\n const ctx: ParseResultCtx = {\n warnings_: [],\n path_: '',\n objErrShortCircuit_: false,\n objErrKeyIndex_: 0,\n noWarnings_: false,\n strictObj_: false,\n noLooseArray_: false,\n }\n\n return type._parse_(input, ctx).ok\n}\n\nexport function rc_validator<S>(type: RcType<S>) {\n return (input: any): input is S => rc_is_valid(input, type)\n}\n\nexport function rc_recursive<T>(type: () => RcType<T>): RcType<T> {\n return {\n ...defaultProps,\n _kind_: 'recursive',\n _parse_(input, ctx) {\n return type()._parse_(input, ctx)\n },\n }\n}\n\ntype TransformOptions<T> = {\n /** if the input type is invalid, the transform will be ignored and this schema will be used to validate the input */\n outputSchema?: RcType<T>\n disableStrictOutputSchema?: boolean\n}\n\nfunction validateTransformOutput<T>(\n ctx: ParseResultCtx,\n outputSchema: RcType<T>,\n input: any,\n disableStrictOutputSchema: boolean | undefined,\n): InternalParseResult<T> {\n const parentPath = ctx.path_\n const parentObjErrShortCircuit = ctx.objErrShortCircuit_\n const parentStrictObj = ctx.strictObj_\n const parentNoWarnings = ctx.noWarnings_\n\n ctx.objErrShortCircuit_ = true\n ctx.path_ = `${parentPath}|output|`\n\n if (!disableStrictOutputSchema) {\n ctx.strictObj_ = true\n ctx.noWarnings_ = true\n }\n\n const result = outputSchema._parse_(input, ctx)\n\n ctx.strictObj_ = parentStrictObj\n ctx.noWarnings_ = parentNoWarnings\n ctx.path_ = parentPath\n ctx.objErrShortCircuit_ = parentObjErrShortCircuit\n\n return result\n}\n\n/** validate a input or subset of input and transform the valid result */\nexport function rc_transform<Input, Transformed>(\n type: RcType<Input>,\n transform: (input: Input, inputSchema: RcType<Input>) => Transformed,\n {\n outputSchema,\n disableStrictOutputSchema,\n }: TransformOptions<Transformed> = {},\n): RcType<Transformed> {\n return {\n ...defaultProps,\n _kind_: `transform_from_${type._kind_}`,\n _parse_(input, ctx) {\n let outputResultErrors: ErrorWithPath[] | null = null\n\n if (outputSchema) {\n const parseResult = validateTransformOutput(\n ctx,\n outputSchema,\n input,\n disableStrictOutputSchema,\n )\n\n if (parseResult.ok) {\n return parseResult\n } else {\n outputResultErrors = parseResult.errors\n }\n }\n\n const parseResult = type._parse_(input, ctx)\n\n if (parseResult.ok) {\n return {\n ok: true,\n data: transform(parseResult.data, type),\n errors: undefined,\n }\n } else {\n return {\n ok: false,\n errors: [...(outputResultErrors || []), ...parseResult.errors],\n data: undefined,\n }\n }\n },\n }\n}\n\n/** Create transforms which result can be validated with the same schema */\nexport function rc_narrow<Input, Narrowed extends Input>(\n type: RcType<Input>,\n narrow: (input: Input, inputSchema: RcType<Input>) => Narrowed,\n): RcType<Narrowed> {\n return rc_transform(type, narrow)\n}\n\n/** Allows the transform function to return a error if transformation is invalid */\nexport function rc_unsafe_transform<Input, Transformed>(\n type: RcType<Input>,\n transform: (\n input: Input,\n inputSchema: RcType<Input>,\n ) =>\n | { ok: true; data: Transformed }\n | { ok: false; errors: string | string[] },\n {\n outputSchema,\n disableStrictOutputSchema,\n }: TransformOptions<Transformed> = {},\n): RcType<Transformed> {\n return {\n ...defaultProps,\n _kind_: `transform_from_${type._kind_}`,\n _parse_(input, ctx) {\n let outputResultErrors: ErrorWithPath[] | null = null\n\n if (outputSchema) {\n const parseResult = validateTransformOutput(\n ctx,\n outputSchema,\n input,\n disableStrictOutputSchema,\n )\n\n if (parseResult.ok) {\n return parseResult\n } else {\n outputResultErrors = parseResult.errors\n }\n }\n\n const parseResult = type._parse_(input, ctx)\n\n if (parseResult.ok) {\n const transformResult = transform(parseResult.data, type)\n\n if (transformResult.ok) {\n return { ok: true, data: transformResult.data, errors: undefined }\n } else {\n return {\n ok: false,\n errors:\n typeof transformResult.errors === 'string' ?\n [getWarningOrErrorWithPath(ctx, transformResult.errors)]\n : transformResult.errors.map((error) =>\n getWarningOrErrorWithPath(ctx, error),\n ),\n data: undefined,\n }\n }\n }\n\n return {\n ok: false,\n errors: [...(outputResultErrors || []), ...parseResult.errors],\n data: undefined,\n }\n },\n }\n}\n\nfunction normalizedTypeOf(input: unknown, showValueInError: boolean): string {\n const typeOf = typeof input\n\n const type = ((): string => {\n if (typeOf === 'object') {\n if (Array.isArray(input)) {\n return 'array'\n }\n\n if (!input) {\n return 'null'\n }\n }\n\n return typeOf\n })()\n\n return (\n showValueInError &&\n (type === 'string' || type === 'number' || type === 'boolean')\n ) ?\n `${type}(${input})`\n : type\n}\n\ntype NonArrayObject = {\n [x: string]: any\n [y: number]: never\n}\n\nexport function rc_assert_is_valid<S>(\n result: RcParseResult<S>,\n): asserts result is {\n ok: true\n error: false\n data: S\n value: S\n warnings: string[] | false\n} {\n if (result.error) {\n throw new Error(`invalid input: ${result.errors.join(', ')}`)\n }\n}\n\n/** @internal */\nexport function isObject(value: any): value is NonArrayObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\n/** @internal */\nexport function snakeCase(str: string): string {\n return str\n .replace(/\\W+/g, ' ')\n .split(/ |\\B(?=[A-Z])/)\n .map((word) => word.toLowerCase())\n .join('_')\n}\n\nexport function rc_parse_json<T>(\n jsonString: unknown,\n schema: RcType<T>,\n options?: ParseOptions,\n): RcParseResult<T> {\n try {\n if (typeof jsonString !== 'string') {\n return {\n ok: false,\n error: true,\n errors: [\n `expected a json string, got ${normalizedTypeOf(jsonString, true)}`,\n ],\n }\n }\n\n const parsed = JSON.parse(jsonString)\n\n return rc_parse(parsed, schema, options)\n } catch (err) {\n return {\n ok: false,\n error: true,\n errors: [`json parsing error: ${isObject(err) ? err.message : ''}`],\n }\n }\n}\n\nfunction isFn(value: any): value is () => any {\n return typeof value === 'function'\n}\n\ntype Prettify<T> =\n T extends Record<string, any> ?\n {\n [K in keyof T]: Prettify<T[K]>\n }\n : T\n\nexport type RcPrettyInferType<T extends RcType<any>> = Prettify<RcInferType<T>>\n"],"mappings":"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","names":["rc_get_from_key_as_fallback","fallbackKey","type","_alternative_key_","isRcType","value","isObject","unwrapToObjSchema","input","objSchema","key","rc_object","shape","normalizeKeysFrom","objShape","shapeEntries","defaultProps","_obj_shape_","_kind_","_is_object_","_parse_","inputObj","ctx","parse","objErrKeyIndex_","excessKeys","strictObj_","errors","objErrShortCircuit_","getWarningOrErrorWithPath","resultObj","resultErrors","parentPath","path_","i","shapeEntry","typekey","subPath","path","keyToDeleteFromExcessKeys","snakeCaseKey","snakeCase","parseResult","subError","_is_extend_obj_","rc_obj_extends","options","rc_get_obj_shape","rc_obj_strict","rc_enable_obj_strict","nonRecursive","parentStrictObj","result","rc_obj_merge","objs","finalShape","rc_obj_pick","obj","keys","keyShape","rc_obj_omit","rc_obj_builder","schema","rc_intersection","types","kind","allIsObject","type","_is_object_","_kind_","defaultProps","_parse_","input","ctx","parse","objResultData","result","withFallback","fallback","_fallback_","getWarningOrErrorWithPath","ctx","message","path_","addWarning","warning","warnings_","addWarnings","warnings","parse","type","input","checkIfIsValid","_optional_","_orNullish_","_orNull_","isValid","validResult","_predicate_","_kind_","noWarnings_","fb","getResultErrors","isFn","_useAutFix_","_autoFix_","autofixed","getErrorMsg","err","withAutofix","customAutofix","where","predicate","optional","normalizedTypeOf","_show_value_in_error_","orNull","orNullish","defaultProps","_parse_","_array_item_type_","_alternative_key_","_obj_shape_","_is_object_","_is_extend_obj_","rc_undefined","rc_null","rc_any","rc_unknown","rc_boolean","rc_string","rc_number","rc_date","rc_instanceof","classToCheck","rc_literals","literals","literal","maxShallowObjErrors","rc_union","types","basePath","shallowObjErrors","shallowObjErrorsCount","hasNonObjTypeMember","nonShallowObjErrors","i","currentObjErrShortCircuit","objErrShortCircuit_","objErrKeyIndex_","parseResult","objErrIndex","rc_default","schema","defaultValue","getDefaultResult","rc_nullish_default","rc_record","valueType","checkKey","looseCheck","inputObj","isObject","resultObj","resultErrors","parentPath","key","inputValue","subPath","path","errors","subError","rc_discriminated_union","discriminatorKey","preComputedTypesShape","rc_object","discriminator","invalidValueType","rc_loose_record","checkArrayItems","_loose","options","useLooseMode","noLooseArray_","unique","looseErrors","arrayResult","uniqueValues","isTuple","index","_item","filterResult","uniqueValueToCheck","isUniqueKey","rc_array","rc_get_array_item_type","rc_disable_loose_array","nonRecursive","parentDisableLooseArray","result","rc_loose_array","rc_array_filter_from_schema","filterSchema","filterFn","item","rc_tuple","rc_parse","noWarnings","strictObj_","rc_parser","rc_loose_parse","rc_unwrap_or_null","rc_unwrap_or","RcValidationError","rc_unwrap","rc_is_valid","rc_validator","rc_recursive","validateTransformOutput","outputSchema","disableStrictOutputSchema","parentObjErrShortCircuit","parentStrictObj","parentNoWarnings","rc_transform","transform","outputResultErrors","rc_narrow","narrow","rc_unsafe_transform","transformResult","error","showValueInError","typeOf","rc_assert_is_valid","value","snakeCase","str","word","rc_parse_json","jsonString","parsed"]}
package/dist/runcheck.cjs CHANGED
@@ -1,2 +1,3 @@
1
- "use strict";var I=Object.defineProperty;var se=Object.getOwnPropertyDescriptor;var ae=Object.getOwnPropertyNames;var ie=Object.prototype.hasOwnProperty;var ue=(e,r)=>{for(var n in r)I(e,n,{get:r[n],enumerable:!0})},ce=(e,r,n,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of ae(r))!ie.call(e,o)&&o!==n&&I(e,o,{get:()=>r[o],enumerable:!(t=se(r,o))||t.enumerable});return e};var ye=e=>ce(I({},"__esModule",{value:!0}),e);var ze={};ue(ze,{RcValidationError:()=>E,defaultProps:()=>l,getWarningOrErrorWithPath:()=>d,isObject:()=>g,parse:()=>y,rc_any:()=>be,rc_array:()=>N,rc_assert_is_valid:()=>De,rc_boolean:()=>je,rc_date:()=>me,rc_default:()=>Ee,rc_disable_loose_array:()=>ve,rc_discriminated_union:()=>$e,rc_enable_obj_strict:()=>M,rc_get_array_item_type:()=>Ke,rc_get_from_key_as_fallback:()=>F,rc_get_obj_schema:()=>U,rc_instanceof:()=>xe,rc_is_valid:()=>ne,rc_literals:()=>we,rc_loose_array:()=>W,rc_loose_parse:()=>We,rc_loose_record:()=>Ae,rc_narrow:()=>Ve,rc_null:()=>he,rc_nullish_default:()=>Se,rc_number:()=>ke,rc_obj_builder:()=>J,rc_obj_extends:()=>V,rc_obj_merge:()=>z,rc_obj_omit:()=>Q,rc_obj_pick:()=>L,rc_obj_strict:()=>D,rc_object:()=>R,rc_parse:()=>$,rc_parse_json:()=>Me,rc_parser:()=>Ne,rc_record:()=>ee,rc_recursive:()=>Fe,rc_string:()=>Oe,rc_transform:()=>oe,rc_tuple:()=>Ie,rc_undefined:()=>_e,rc_union:()=>Pe,rc_unknown:()=>ge,rc_unsafe_transform:()=>Ue,rc_unwrap:()=>Ce,rc_unwrap_or:()=>re,rc_unwrap_or_null:()=>qe,rc_validator:()=>Be,snakeCase:()=>q});module.exports=ye(ze);function F(e,r){return{...r,l:e}}function le(e){return g(e)&&"__rc_type"in e}function k(e){if(le(e))return e;if(g(e)){let r={};for(let[n,t]of Object.entries(e))r[n]=k(t);return R(r)}else if(Array.isArray(e)){let[r,n]=e;switch(r){case"optional":return k(n).optional();case"nullish_or":return k(n).orNullish();case"null_or":return k(n).orNull();case"array":return N(k(n));case"loose_array":return W(k(n))}}throw new Error(`invalid schema: ${e}`)}function R(e,{normalizeKeysFrom:r}={}){let n={};for(let[t,o]of Object.entries(e))n[t]=k(o);return{...l,t:n,e:"object",f:!0,u:Object.entries(n),r(t,o){return y(this,t,o,()=>{if(!g(t))return o.s=-1,!1;let s=this.e==="strict_obj"||o.a?new Set(Object.keys(t)):void 0;if(s&&s.size>this.u.length){o.s=-1;let p=[];if(o.o)return{data:void 0,errors:[d(o,`Expected strict object with ${this.u.length} keys but got ${s.size}`)]};for(let[f]of this.u)s.has(f)?s.delete(f):p.push(d(o,`Key '${f}' is missing`));for(let f of s)p.push(d(o,`Key '${f}' is not defined in the object shape`));return{data:void 0,errors:p}}let c={},i=[],u=o.n,T=-1;for(let[p,f]of this.u){let h=p;T+=1;let b=`.${p}`,j=`${u}${b}`;o.n=j;let _=t[p],O=p;if(_===void 0&&f.l&&(_=t[f.l],O=f.l),_===void 0&&r==="snake_case"){let x=q(p);_=t[x],O=x}s?.delete(O);let[A,m]=f.r(_,o);if(A)c[h]=m;else{for(let x of m)o.n=j,i.push(x);if(o.o){o.s=T;break}}}if(s&&s.size>0)for(let p of s)o.n=u,i.push(d(o,`Key '${p}' is not defined in the object shape`));return i.length>0?{errors:i,data:void 0}:this.b?{errors:!1,data:{...t,...c}}:{errors:!1,data:c}})}}}function V(e,r){return{...R(e,r),e:"extends_object",b:!0}}function U(e){if(!e.t)throw new Error("type does not have an object shape");return e.t}function D(e,r){return{...R(e,r),e:"strict_obj"}}function M(e,{nonRecursive:r}={}){if(r){if(!e.t)throw new Error("rc_enable_obj_strict: nonRecursive option can only be used on object types");return{...e,e:"strict_obj"}}return{...e,r(n,t){let o=t.a;t.a=!0;let a=e.r(n,t);return t.a=o,a}}}function z(...e){let r={};for(let n of e)Object.assign(r,n.t);return R(r)}function L(e,r){let n={};if(!e.t)throw new Error("rc_obj_pick: obj must be an object type");for(let t of r){let o=e.t[t];o&&(n[t]=o)}return R(n)}function Q(e,r){let n={};if(!e.t)throw new Error("rc_obj_omit: obj must be an object type");for(let t of Object.keys(e.t))r.includes(t)||(n[t]=e.t[t]);return R(n)}function J(){return(e,r)=>R(e,r)}function fe(e){return{...this,g:e}}function d(e,r){return`${e.n?`$${e.n}: `:""}${r}`}function C(e,r){e.T.push(r.startsWith("$")?r:d(e,r))}function X(e,r){r.forEach(n=>C(e,n))}function y(e,r,n,t){if(e.p&&r===void 0)return[!0,r];if(e.d&&r==null)return[!0,r];if(e.R&&r===null)return[!0,r];let o=t();if(o&&(o===!0||!o.errors)){let a=o===!0?r:o.data;return e.c&&!e.c(a)?[!1,[d(n,`Predicate failed for type '${e.e}'`)]]:[!0,a]}if(!n.i){let a=e.g;if(a!==void 0)return C(n,`Fallback used, errors -> ${Z(o,n,e,r)}`),[!0,B(a)?a():a];if(e.j&&e.h){let s=e.h(r);if(s)return e.c&&!e.c(s.fixed)?[!1,[d(n,`Predicate failed for autofix in type '${e.e}'`)]]:(C(n,`Autofixed from error "${Z(o,n,e,r)}"`),[!0,s.fixed])}}return[!1,o?o.errors:[d(n,Y(e,r))]]}function Z(e,r,n,t){return e?e.errors.map(o=>o.replace(r.n,"")).join("; "):Y(n,t)}function Te(e){return{...this,j:!0,h:e}}function pe(e){return{...this,c:e}}function G(){return{...this,p:!0,e:`${this.e}_optional`}}function Y(e,r){return`Type '${P(r,!!e.O)}' is not assignable to '${e.e}'`}function de(){return{...this,R:!0,e:`${this.e}_or_null`}}function Re(){return{...this,d:!0,e:`${this.e}_or_nullish`}}var l={__rc_type:void 0,withFallback:fe,where:pe,optional:G,optionalKey:G,orNullish:Re,withAutofix:Te,orNull:de,_:void 0,g:void 0,c:void 0,p:!1,R:!1,d:!1,j:!1,O:!1,l:void 0,h:void 0,t:void 0,f:!1,b:!1,u:[]},_e={...l,r(e,r){return y(this,e,r,()=>e===void 0)},e:"undefined"},he={...l,r(e,r){return y(this,e,r,()=>e===null)},e:"null"},be={...l,r(e,r){return y(this,e,r,()=>!0)},e:"any"},ge={...l,r(e,r){return y(this,e,r,()=>!0)},e:"unknown"},je={...l,r(e,r){return y(this,e,r,()=>typeof e=="boolean")},e:"boolean"},Oe={...l,r(e,r){return y(this,e,r,()=>typeof e=="string")},e:"string"},ke={...l,r(e,r){return y(this,e,r,()=>typeof e=="number"&&!Number.isNaN(e))},e:"number"},me={...l,r(e,r){return y(this,e,r,()=>typeof e=="object"&&e instanceof Date&&!Number.isNaN(e.getTime()))},e:"date"};function xe(e){return{...l,r(r,n){return y(this,r,n,()=>r instanceof e)},e:`instanceof_${e.name?`_${e.name}`:""}`}}function we(...e){if(e.length===0)throw new Error("rc_literal requires at least one literal");return{...l,r(r,n){return y(this,r,n,()=>{for(let t of e)if(r===t)return!0;return!1})},O:!0,e:e.length==1?P(e[0],!0):e.map(r=>P(r,!0)).join(" | ")}}var H=1;function Pe(...e){if(e.length===0)throw new Error("Unions should have at least one type");return{...l,r(r,n){return y(this,r,n,()=>{let t=n.n,o=[],a=0,s=!1,c=[],i=0;for(let u of e){i+=1,u.f&&(n.n=`${t}|union ${i}|`);let T=n.o;n.o=!0,n.s=0;let[p,f]=u.r(r,n),h=n.s;if(n.o=T,n.s=0,p)return!0;u.f&&h!==-1?h>0?c.push(...f):(a<H&&o.push(...f),a+=1):s=!0}return n.n=t,c.length>0||o.length>0?((a>H||s)&&o.push(d(n,"not matches any other union member")),{errors:[...c,...o],data:void 0}):!1})},e:e.map(r=>r.e).join(" | ")}}function Ee(e,r){return{...e,p:!1,d:!1,R:!1,r(t,o){return y(this,t,o,()=>{if(t===void 0)return n();let[a,s]=e.r(t,o);return a?s===void 0?n():{data:s,errors:!1}:{data:void 0,errors:s}})},e:`${e.e}_default`};function n(){return{data:B(r)?r():r,errors:!1}}}function Se(e,r){return{...e,p:!1,d:!1,R:!1,r(t,o){return y(this,t,o,()=>{if(t==null)return n();let[a,s]=e.r(t,o);return a?s==null?n():{data:s,errors:!1}:{data:void 0,errors:s}})},e:`${e.e}_nullish_default`};function n(){return{data:B(r)?r():r,errors:!1}}}function ee(e,{checkKey:r,looseCheck:n}={}){return{...l,e:`record<string, ${e.e}>`,r(t,o){return y(this,t,o,()=>{if(!g(t))return!1;let a={},s=[],c=o.n;for(let[i,u]of Object.entries(t)){let T=`.${i}`,p=`${c}${T}`;if(o.n=p,r&&!r(i)){s.push(d(o,`Key '${i}' is not allowed`));continue}let f=t[i],[h,b]=e.r(u,o);if(h)a[i]=f;else{let j=b;for(let _ of j)s.push(_);if(o.o)break}}if(s.length>0)if(n)X(o,s);else return{errors:s,data:void 0};return{errors:!1,data:a}})}}}function $e(e,r){let n={};for(let[t,o]of Object.entries(r))n[t]=R(o);return{...l,e:"discriminated_union",f:!0,r(t,o){return y(this,t,o,()=>{if(!g(t))return o.s=-1,!1;let a=t[e];o.n=`${o.n}.${e}`;let s=n[a];if(!s){let u=P(a,!0);return{errors:[d(o,`Type '${u}' is not a valid discriminator`)],data:void 0}}o.n=`${o.n}|${a}|`;let[c,i]=s.r(t,o);return c?(i[e]=a,{errors:!1,data:i}):{errors:i,data:void 0}})}}}function Ae(e,{checkKey:r}={}){return ee(e,{checkKey:r,looseCheck:!0})}function S(e,r,n,t=!1,o){let a=t&&!n.i&&!n.y,s=o?.unique,c=[],i=[],u=s?new Set:void 0,T=n.n,p=Array.isArray(r),f=-1;for(let h of e){f++;let b=p?r[f]:r,j=`[${f}]`,_=`${T}${j}`;n.n=_;let O=b.r(h,n),[A,m]=O;if(n.n=_,A&&u){let w=m,v=typeof s=="string";v?w=m[s]:typeof s=="function"&&(w=s(m)),u.has(w)?(v&&(n.n=`${T}${j}.${s}`),O=[!1,[d(n,v?`Type '${b.t?.[s]?.e}' with value "${w}" is not unique`:typeof s=="function"?`Type '${b.e}' unique fn return with value "${w}" is not unique`:`${b.e} value is not unique`)]]):u.add(w)}let[x,K]=O;if(x)i.push(K);else if(a){c.push(K);continue}else return{errors:K,data:void 0}}if(c.length>0){if(i.length===0)return{errors:c.slice(0,5).flat(),data:void 0};X(n,c.flat())}return{errors:!1,data:i}}function N(e,r){return{...l,e:`${e.e}[]`,_:e,r(n,t){return y(this,n,t,()=>Array.isArray(n)?n.length===0?!0:S.call(this,n,e,t,!1,r):!1)}}}function Ke(e){if(!e._)throw new Error("Type does not have an item type");return e._}function ve(e,{nonRecursive:r=!1}={}){if(r){if(!e.e.endsWith("[]"))throw new Error("rc_disable_loose_array: nonRecursive option can only be used with array types");return{...e,r(n,t){return y(this,n,t,()=>Array.isArray(n)?n.length===0?!0:S.call(this,n,e,t,!1):!1)}}}return{...e,r(n,t){let o=t.y;t.y=!0;let a=e.r(n,t);return t.y=o,a}}}function W(e,r){return{...l,_:e,e:`${e.e}[]`,r(n,t){return y(this,n,t,()=>Array.isArray(n)?n.length===0?!0:S.call(this,n,e,t,!0,r):!1)}}}function Ie(e){return{...l,e:`[${e.map(r=>r.e).join(", ")}]`,r(r,n){return y(this,r,n,()=>!Array.isArray(r)||r.length!==e.length?!1:S.call(this,r,e,n))}}}function $(e,r,{noWarnings:n=!1}={}){let t={T:[],n:"",o:!1,s:0,i:n,a:!1,y:!1},[o,a]=r.r(e,t);return o?{error:!1,ok:!0,data:a,value:a,warnings:t.T.length>0?t.T:!1}:{ok:!1,error:!0,errors:a}}function Ne(e){return r=>$(r,e)}function We(e,r,n){let t=$(e,r,n);return t.error?{data:null,errors:t.errors,warnings:!1}:{data:t.value,errors:!1,warnings:t.warnings}}function qe(e){return re(e,null)}function re(e,r){return e.error?{value:r,errors:e.errors,warnings:!1}:{value:e.value,errors:!1,warnings:e.warnings}}var E=class extends Error{constructor(n){super(n.join(`
2
- `));this.errors=n}};function Ce(e){if(e.error)throw new E(e.errors);return e}function ne(e,r){let n={T:[],n:"",o:!1,s:0,i:!1,a:!1,y:!1};return!!r.r(e,n)[0]}function Be(e){return r=>ne(r,e)}function Fe(e){return{...l,e:"recursive",r(r,n){return e().r(r,n)}}}function te(e,r,n,t){let o=e.n,a=e.o,s=e.a,c=e.i;e.o=!0,e.n=`${o}|output|`,t||(e.a=!0,e.i=!0);let i=r.r(n,e);return e.a=s,e.i=c,e.n=o,e.o=a,i}function oe(e,r,{outputSchema:n,disableStrictOutputSchema:t}={}){return{...l,e:`transform_from_${e.e}`,r(o,a){let s=null;if(n){let[u,T]=te(a,n,o,t);if(u)return[!0,T];s=T}let[c,i]=e.r(o,a);return c?[!0,r(i,e)]:[!1,[...s||[],...i]]}}}function Ve(e,r){return oe(e,r)}function Ue(e,r,{outputSchema:n,disableStrictOutputSchema:t}={}){return{...l,e:`transform_from_${e.e}`,r(o,a){let s=null;if(n){let[u,T]=te(a,n,o,t);if(u)return[!0,T];s=T}let[c,i]=e.r(o,a);if(c){let u=r(i,e);return u.ok?[!0,u.data]:[!1,typeof u.errors=="string"?[d(a,u.errors)]:u.errors.map(T=>d(a,T))]}return[!1,[...s||[],...i]]}}}function P(e,r){let n=typeof e,t=(()=>{if(n==="object"){if(Array.isArray(e))return"array";if(!e)return"null"}return n})();return r&&(t==="string"||t==="number"||t==="boolean")?`${t}(${e})`:t}function De(e){if(e.error)throw new Error(`invalid input: ${e.errors.join(", ")}`)}function g(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function q(e){return e.replace(/\W+/g," ").split(/ |\B(?=[A-Z])/).map(r=>r.toLowerCase()).join("_")}function Me(e,r,n){try{if(typeof e!="string")return{ok:!1,error:!0,errors:[`expected a json string, got ${P(e,!0)}`]};let t=JSON.parse(e);return $(t,r,n)}catch(t){return{ok:!1,error:!0,errors:[`json parsing error: ${g(t)?t.message:""}`]}}}function B(e){return typeof e=="function"}0&&(module.exports={RcValidationError,defaultProps,getWarningOrErrorWithPath,isObject,parse,rc_any,rc_array,rc_assert_is_valid,rc_boolean,rc_date,rc_default,rc_disable_loose_array,rc_discriminated_union,rc_enable_obj_strict,rc_get_array_item_type,rc_get_from_key_as_fallback,rc_get_obj_schema,rc_instanceof,rc_is_valid,rc_literals,rc_loose_array,rc_loose_parse,rc_loose_record,rc_narrow,rc_null,rc_nullish_default,rc_number,rc_obj_builder,rc_obj_extends,rc_obj_merge,rc_obj_omit,rc_obj_pick,rc_obj_strict,rc_object,rc_parse,rc_parse_json,rc_parser,rc_record,rc_recursive,rc_string,rc_transform,rc_tuple,rc_undefined,rc_union,rc_unknown,rc_unsafe_transform,rc_unwrap,rc_unwrap_or,rc_unwrap_or_null,rc_validator,snakeCase});
1
+ "use strict";var K=Object.defineProperty;var ne=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var oe=Object.prototype.hasOwnProperty;var se=(e,r)=>{for(var n in r)K(e,n,{get:r[n],enumerable:!0})},ae=(e,r,n,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of te(r))!oe.call(e,o)&&o!==n&&K(e,o,{get:()=>r[o],enumerable:!(t=ne(r,o))||t.enumerable});return e};var ie=e=>ae(K({},"__esModule",{value:!0}),e);var ze={};se(ze,{RcValidationError:()=>E,defaultProps:()=>c,getWarningOrErrorWithPath:()=>p,isObject:()=>g,parse:()=>f,rc_any:()=>Re,rc_array:()=>Ee,rc_array_filter_from_schema:()=>ve,rc_assert_is_valid:()=>Ve,rc_boolean:()=>he,rc_date:()=>ge,rc_default:()=>xe,rc_disable_loose_array:()=>$e,rc_discriminated_union:()=>Pe,rc_enable_obj_strict:()=>F,rc_get_array_item_type:()=>Se,rc_get_from_key_as_fallback:()=>W,rc_get_obj_schema:()=>C,rc_instanceof:()=>je,rc_intersection:()=>z,rc_is_valid:()=>Y,rc_literals:()=>Oe,rc_loose_array:()=>Ke,rc_loose_parse:()=>We,rc_loose_record:()=>Ae,rc_narrow:()=>Ue,rc_null:()=>pe,rc_nullish_default:()=>we,rc_number:()=>ke,rc_obj_builder:()=>M,rc_obj_extends:()=>q,rc_obj_merge:()=>U,rc_obj_omit:()=>V,rc_obj_pick:()=>D,rc_obj_strict:()=>B,rc_object:()=>h,rc_parse:()=>S,rc_parse_json:()=>Me,rc_parser:()=>Ne,rc_record:()=>H,rc_recursive:()=>Fe,rc_string:()=>be,rc_transform:()=>re,rc_tuple:()=>Ie,rc_undefined:()=>Te,rc_union:()=>me,rc_unknown:()=>_e,rc_unsafe_transform:()=>De,rc_unwrap:()=>Ce,rc_unwrap_or:()=>X,rc_unwrap_or_null:()=>qe,rc_validator:()=>Be,snakeCase:()=>v});module.exports=ie(ze);function W(e,r){return{...r,y:e}}function ue(e){return g(e)&&"__rc_type"in e}function x(e){if(ue(e))return e;if(g(e)){let r={};for(let[n,t]of Object.entries(e))r[n]=x(t);return h(r)}else if(Array.isArray(e)){let[r,n]=e;switch(r){case"optional":return x(n).optional();case"nullish_or":return x(n).orNullish();case"null_or":return x(n).orNull()}}throw new Error(`invalid schema: ${e}`)}function h(e,{normalizeKeysFrom:r}={}){let n={};for(let[o,s]of Object.entries(e))n[o]=x(s);let t=Object.entries(n).map(([o,s])=>({key:o,type:s}));return{...c,t:n,e:"object",s:!0,r(o,s){return f(this,o,s,()=>{if(!g(o))return s.a=-1,!1;let a=this.e==="strict_obj"||s.i?new Set(Object.keys(o)):void 0;if(a&&a.size>t.length){s.a=-1;let d=[];if(s.o)return{data:void 0,errors:[p(s,`Expected strict object with ${t.length} keys but got ${a.size}`)]};for(let{key:T}of t)a.has(T)?a.delete(T):d.push(p(s,`Key '${T}' is missing`));for(let T of a)d.push(p(s,`Key '${T}' is not defined in the object shape`));return{data:void 0,errors:d}}let u={},l=[],b=s.n,k=-1;for(let d of t){let T=d.key,_=d.type,O=T;k+=1;let m=`.${T}`,R=`${b}${m}`;s.n=R;let y=o[T],j=T;if(y===void 0&&_.y&&(y=o[_.y],j=_.y),y===void 0&&r==="snake_case"){let A=v(T);y=o[A],j=A}a?.delete(j);let $=_.r(y,s);if($.ok)u[O]=$.data;else{for(let A of $.errors)s.n=R,l.push(A);if(s.o){s.a=k;break}}}if(a&&a.size>0)for(let d of a)s.n=b,l.push(p(s,`Key '${d}' is not defined in the object shape`));return l.length>0?{errors:l,data:void 0}:(s.n=b,this.h?{errors:!1,data:{...o,...u}}:{errors:!1,data:u})})}}}function q(e,r){return{...h(e,r),e:"extends_object",h:!0}}function C(e){if(!e.t)throw new Error("type does not have an object shape");return e.t}function B(e,r){return{...h(e,r),e:"strict_obj"}}function F(e,{nonRecursive:r}={}){if(r){if(!e.t)throw new Error("rc_enable_obj_strict: nonRecursive option can only be used on object types");return{...e,e:"strict_obj"}}return{...e,r(n,t){let o=t.i;t.i=!0;let s=e.r(n,t);return t.i=o,s}}}function U(...e){let r={};for(let n of e)Object.assign(r,n.t);return h(r)}function D(e,r){let n={};if(!e.t)throw new Error("rc_obj_pick: obj must be an object type");for(let t of r){let o=e.t[t];o&&(n[t]=o)}return h(n)}function V(e,r){let n={};if(!e.t)throw new Error("rc_obj_omit: obj must be an object type");for(let t of Object.keys(e.t))r.includes(t)||(n[t]=e.t[t]);return h(n)}function M(){return(e,r)=>h(e,r)}function z(...e){let r="",n=!0;for(let t of e)r&&(r+=" & "),t.s||(n=!1),r+=t.e.includes("|")?`(${t.e})`:t.e;return{...c,e:r,s:n,r(t,o){return f(this,t,o,()=>{let s=null;for(let i of e){let a=i.r(t,o);if(a.ok)i.s&&(s={...s||{},...a.data});else return i.s?a:!1}return s?{data:s,errors:!1}:!0})}}}function ce(e){return{...this,b:e}}function p(e,r){return`${e.n?`$${e.n}: `:""}${r}`}function I(e,r){e.d.push(r.startsWith("$")?r:p(e,r))}function Z(e,r){r.forEach(n=>I(e,n))}function f(e,r,n,t){if(e.T&&r===void 0)return{ok:!0,data:r,errors:void 0};if(e.p&&r==null)return{ok:!0,data:r,errors:void 0};if(e.R&&r===null)return{ok:!0,data:r,errors:void 0};let o=t();if(o&&(o===!0||!o.errors)){let s=o===!0?r:o.data;return e.c&&!e.c(s)?{ok:!1,data:void 0,errors:[p(n,`Predicate failed for type '${e.e}'`)]}:{ok:!0,data:s,errors:void 0}}if(!n.u){let s=e.b;if(s!==void 0)return I(n,`Fallback used, errors -> ${L(o,n,e,r)}`),{ok:!0,data:N(s)?s():s,errors:void 0};if(e.k&&e._){let i=e._(r);if(i)return e.c&&!e.c(i.fixed)?{ok:!1,data:void 0,errors:[p(n,`Predicate failed for autofix in type '${e.e}'`)]}:(I(n,`Autofixed from error "${L(o,n,e,r)}"`),{ok:!0,data:i.fixed,errors:void 0})}}return{ok:!1,data:void 0,errors:o?o.errors:[p(n,G(e,r))]}}function L(e,r,n,t){return e?e.errors.map(o=>o.replace(r.n,"")).join("; "):G(n,t)}function fe(e){return{...this,k:!0,_:e}}function le(e){return{...this,c:e}}function Q(){return{...this,T:!0,e:`${this.e}_optional`}}function G(e,r){return`Type '${w(r,!!e.g)}' is not assignable to '${e.e}'`}function ye(){return{...this,R:!0,e:`${this.e}_or_null`}}function de(){return{...this,p:!0,e:`${this.e}_or_nullish`}}var c={__rc_type:void 0,withFallback:ce,where:le,r:void 0,e:void 0,optional:Q,optionalKey:Q,orNullish:de,withAutofix:fe,orNull:ye,f:void 0,b:void 0,c:void 0,T:!1,R:!1,p:!1,k:!1,g:!1,y:void 0,_:void 0,t:void 0,s:!1,h:!1},Te={...c,r(e,r){return f(this,e,r,()=>e===void 0)},e:"undefined"},pe={...c,r(e,r){return f(this,e,r,()=>e===null)},e:"null"},Re={...c,r(e){return{ok:!0,data:e,errors:void 0}},e:"any"},_e={...c,r(e){return{ok:!0,data:e,errors:void 0}},e:"unknown"},he={...c,r(e,r){return f(this,e,r,()=>typeof e=="boolean")},e:"boolean"},be={...c,r(e,r){return f(this,e,r,()=>typeof e=="string")},e:"string"},ke={...c,r(e,r){return f(this,e,r,()=>typeof e=="number"&&!Number.isNaN(e))},e:"number"},ge={...c,r(e,r){return f(this,e,r,()=>typeof e=="object"&&e instanceof Date&&!Number.isNaN(e.getTime()))},e:"date"};function je(e){return{...c,r(r,n){return f(this,r,n,()=>r instanceof e)},e:`instanceof_${e.name?`_${e.name}`:""}`}}function Oe(...e){if(e.length===0)throw new Error("rc_literal requires at least one literal");return{...c,r(r,n){return f(this,r,n,()=>{for(let t of e)if(r===t)return!0;return!1})},g:!0,e:e.length==1?w(e[0],!0):e.map(r=>w(r,!0)).join(" | ")}}var J=1;function me(...e){if(e.length===0)throw new Error("Unions should have at least one type");return{...c,r(r,n){return f(this,r,n,()=>{let t=n.n,o=[],s=0,i=!1,a=[],u=0;for(let l of e){u+=1,l.s&&(n.n=`${t}|union ${u}|`);let b=n.o;n.o=!0,n.a=0;let k=l.r(r,n),d=n.a;if(n.o=b,n.a=0,k.ok)return!0;l.s&&d!==-1?d>0?a.push(...k.errors):(s<J&&o.push(...k.errors),s+=1):i=!0}return n.n=t,a.length>0||o.length>0?((s>J||i)&&o.push(p(n,"not matches any other union member")),{errors:[...a,...o],data:void 0}):!1})},e:e.map(r=>r.e).join(" | ")}}function xe(e,r){return{...e,T:!1,p:!1,R:!1,r(t,o){return f(this,t,o,()=>{if(t===void 0)return n();let s=e.r(t,o);return s.ok?s.data===void 0?n():{data:s.data,errors:!1}:{data:void 0,errors:s.errors}})},e:`${e.e}_default`};function n(){return{data:N(r)?r():r,errors:!1}}}function we(e,r){return{...e,T:!1,p:!1,R:!1,r(t,o){return f(this,t,o,()=>{if(t==null)return n();let s=e.r(t,o);return s.ok?s.data===null||s.data===void 0?n():{data:s.data,errors:!1}:{data:void 0,errors:s.errors}})},e:`${e.e}_nullish_default`};function n(){return{data:N(r)?r():r,errors:!1}}}function H(e,{checkKey:r,looseCheck:n}={}){return{...c,e:`record<string, ${e.e}>`,s:!0,r(t,o){return f(this,t,o,()=>{if(!g(t))return!1;let s={},i=[],a=o.n;for(let[u,l]of Object.entries(t)){let b=`.${u}`,k=`${a}${b}`;if(o.n=k,r&&!r(u)){i.push(p(o,`Key '${u}' is not allowed`));continue}let d=t[u],T=e.r(l,o);if(T.ok)s[u]=d;else{let _=T.errors;for(let O of _)i.push(O);if(o.o)break}}if(i.length>0)if(n)Z(o,i);else return{errors:i,data:void 0};return o.n=a,{errors:!1,data:s}})}}}function Pe(e,r){let n={};for(let[t,o]of Object.entries(r))n[t]=h(o);return{...c,e:"discriminated_union",s:!0,r(t,o){return f(this,t,o,()=>{if(!g(t))return o.a=-1,!1;let s=t[e],i=o.n,a=n[s];if(!a){let l=w(s,!0);return{errors:[p({n:`${i}.${e}`},`Type '${l}' is not a valid discriminator`)],data:void 0}}o.n=`${i}|${e}: ${s}|`;let u=a.r(t,o);return o.n=i,u.ok?(u.data[e]=s,{errors:!1,data:u.data}):{errors:u.errors,data:void 0}})}}}function Ae(e,{checkKey:r}={}){return H(e,{checkKey:r,looseCheck:!0})}function P(e,r,n,t=!1,o){let s=t&&!n.u&&!n.l,i=o?.unique,a=[],u=[],l=i?new Set:void 0,b=n.n,k=Array.isArray(r),d=-1;for(let T of e){d++;let _=k?r[d]:r,O=`[${d}]`,m=`${b}${O}`;if(n.n=m,o?.filter){let y=o.filter(T);if(typeof y=="boolean"){if(!y)continue}else if("errors"in y)if(s){a.push(y.errors);continue}else return{errors:y.errors,data:void 0};n.n=m}let R=_.r(T,n);if(n.n=m,R.ok&&l){let y=R.data,j=typeof i=="string";j?y=R.data[i]:typeof i=="function"&&(y=i(R.data)),l.has(y)?(j&&(n.n=`${b}${O}.${i}`),R={ok:!1,data:void 0,errors:[p(n,j?`Type '${_.t?.[i]?.e}' with value "${y}" is not unique`:typeof i=="function"?`Type '${_.e}' unique fn return with value "${y}" is not unique`:`${_.e} value is not unique`)]}):l.add(y)}if(R.ok)u.push(R.data);else if(s){a.push(R.errors);continue}else return{errors:R.errors,data:void 0}}if(a.length>0){if(u.length===0)return{errors:a.slice(0,5).flat(),data:void 0};Z(n,a.flat())}return{errors:!1,data:u}}function Ee(e,r){return{...c,e:`${e.e}[]`,f:e,r(n,t){return f(this,n,t,()=>Array.isArray(n)?n.length===0?!0:P.call(this,n,e,t,!1,r):!1)}}}function Se(e){if(!e.f)throw new Error("Type does not have an item type");return e.f}function $e(e,{nonRecursive:r=!1}={}){if(r){if(!e.e.endsWith("[]"))throw new Error("rc_disable_loose_array: nonRecursive option can only be used with array types");return{...e,r(n,t){return f(this,n,t,()=>Array.isArray(n)?n.length===0?!0:P.call(this,n,e,t,!1):!1)}}}return{...e,r(n,t){let o=t.l;t.l=!0;let s=e.r(n,t);return t.l=o,s}}}function Ke(e,r){return{...c,f:e,e:`${e.e}[]`,r(n,t){return f(this,n,t,()=>Array.isArray(n)?n.length===0?!0:P.call(this,n,e,t,!0,r):!1)}}}function ve(e,r,n,t){return{...c,f:n,e:`${n.e}[]`,r(o,s){return f(this,o,s,()=>Array.isArray(o)?o.length===0?!0:P.call(this,o,n,s,t?.loose,{...t,filter(i){let a=e.r(i,s);return a.ok?r(a.data):{errors:a.errors}}}):!1)}}}function Ie(e){return{...c,e:`[${e.map(r=>r.e).join(", ")}]`,r(r,n){return f(this,r,n,()=>!Array.isArray(r)||r.length!==e.length?!1:P.call(this,r,e,n))}}}function S(e,r,{noWarnings:n=!1}={}){let t={d:[],n:"",o:!1,a:0,u:n,i:!1,l:!1},o=r.r(e,t);return o.ok?{error:!1,ok:!0,data:o.data,value:o.data,warnings:t.d.length>0?t.d:!1}:{ok:!1,error:!0,errors:o.errors}}function Ne(e){return r=>S(r,e)}function We(e,r,n){let t=S(e,r,n);return t.error?{data:null,errors:t.errors,warnings:!1}:{data:t.value,errors:!1,warnings:t.warnings}}function qe(e){return X(e,null)}function X(e,r){return e.error?{value:r,errors:e.errors,warnings:!1}:{value:e.value,errors:!1,warnings:e.warnings}}var E=class extends Error{constructor(n){super(n.join(`
2
+ `));this.errors=n}};function Ce(e){if(e.error)throw new E(e.errors);return e}function Y(e,r){let n={d:[],n:"",o:!1,a:0,u:!1,i:!1,l:!1};return r.r(e,n).ok}function Be(e){return r=>Y(r,e)}function Fe(e){return{...c,e:"recursive",r(r,n){return e().r(r,n)}}}function ee(e,r,n,t){let o=e.n,s=e.o,i=e.i,a=e.u;e.o=!0,e.n=`${o}|output|`,t||(e.i=!0,e.u=!0);let u=r.r(n,e);return e.i=i,e.u=a,e.n=o,e.o=s,u}function re(e,r,{outputSchema:n,disableStrictOutputSchema:t}={}){return{...c,e:`transform_from_${e.e}`,r(o,s){let i=null;if(n){let u=ee(s,n,o,t);if(u.ok)return u;i=u.errors}let a=e.r(o,s);return a.ok?{ok:!0,data:r(a.data,e),errors:void 0}:{ok:!1,errors:[...i||[],...a.errors],data:void 0}}}}function Ue(e,r){return re(e,r)}function De(e,r,{outputSchema:n,disableStrictOutputSchema:t}={}){return{...c,e:`transform_from_${e.e}`,r(o,s){let i=null;if(n){let u=ee(s,n,o,t);if(u.ok)return u;i=u.errors}let a=e.r(o,s);if(a.ok){let u=r(a.data,e);return u.ok?{ok:!0,data:u.data,errors:void 0}:{ok:!1,errors:typeof u.errors=="string"?[p(s,u.errors)]:u.errors.map(l=>p(s,l)),data:void 0}}return{ok:!1,errors:[...i||[],...a.errors],data:void 0}}}}function w(e,r){let n=typeof e,t=(()=>{if(n==="object"){if(Array.isArray(e))return"array";if(!e)return"null"}return n})();return r&&(t==="string"||t==="number"||t==="boolean")?`${t}(${e})`:t}function Ve(e){if(e.error)throw new Error(`invalid input: ${e.errors.join(", ")}`)}function g(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function v(e){return e.replace(/\W+/g," ").split(/ |\B(?=[A-Z])/).map(r=>r.toLowerCase()).join("_")}function Me(e,r,n){try{if(typeof e!="string")return{ok:!1,error:!0,errors:[`expected a json string, got ${w(e,!0)}`]};let t=JSON.parse(e);return S(t,r,n)}catch(t){return{ok:!1,error:!0,errors:[`json parsing error: ${g(t)?t.message:""}`]}}}function N(e){return typeof e=="function"}0&&(module.exports={RcValidationError,defaultProps,getWarningOrErrorWithPath,isObject,parse,rc_any,rc_array,rc_array_filter_from_schema,rc_assert_is_valid,rc_boolean,rc_date,rc_default,rc_disable_loose_array,rc_discriminated_union,rc_enable_obj_strict,rc_get_array_item_type,rc_get_from_key_as_fallback,rc_get_obj_schema,rc_instanceof,rc_intersection,rc_is_valid,rc_literals,rc_loose_array,rc_loose_parse,rc_loose_record,rc_narrow,rc_null,rc_nullish_default,rc_number,rc_obj_builder,rc_obj_extends,rc_obj_merge,rc_obj_omit,rc_obj_pick,rc_obj_strict,rc_object,rc_parse,rc_parse_json,rc_parser,rc_record,rc_recursive,rc_string,rc_transform,rc_tuple,rc_undefined,rc_union,rc_unknown,rc_unsafe_transform,rc_unwrap,rc_unwrap_or,rc_unwrap_or_null,rc_validator,snakeCase});
3
+ //# sourceMappingURL=runcheck.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runcheck.ts","../src/rc_object.ts","../src/rc_intersection.ts"],"sourcesContent":["import { RcObject, TypeOfObjectType, rc_object } from './rc_object'\n\nexport {\n rc_enable_obj_strict,\n rc_get_from_key_as_fallback,\n rc_get_obj_shape as rc_get_obj_schema,\n rc_obj_builder,\n rc_obj_extends,\n rc_obj_merge,\n rc_obj_omit,\n rc_obj_pick,\n rc_obj_strict,\n rc_object,\n} from './rc_object'\nexport { rc_intersection } from './rc_intersection'\n\nexport type RcParseResult<T> =\n | {\n error: false\n ok: true\n /** @deprecated use value instead */\n data: T\n value: T\n warnings: string[] | false\n }\n | {\n ok: false\n error: true\n errors: string[]\n }\n\nexport type RcInferType<T extends RcType<any>> =\n T extends RcType<infer U> ? U : never\n\ntype ParseResultCtx = {\n warnings_: string[]\n path_: string\n objErrShortCircuit_: boolean\n objErrKeyIndex_: number\n strictObj_: boolean\n noWarnings_: boolean\n noLooseArray_: boolean\n}\n\ntype InternalParseResult<T> =\n | { ok: true; data: T; errors: undefined }\n | { ok: false; errors: ErrorWithPath[]; data: undefined }\n\ntype WithFallback<T> = (fallback: T | (() => T)) => RcType<T>\n\nexport type RcOptionalKeyType<T> = RcBase<T, true>\n\nexport type RcType<T> = RcBase<T, false>\n\ntype Schema<T> = (t: T) => void\n\nexport type RcBase<T, RequiredKey extends boolean> = {\n __rc_type: Schema<T>\n readonly withFallback: WithFallback<T>\n readonly where: (predicate: (input: T) => boolean) => RcType<T>\n /** RcType | undefined */\n readonly optional: () => RcType<T | undefined>\n /** { key?: RcType | undefined } */\n readonly optionalKey: () => RcOptionalKeyType<T | undefined>\n /** RcType | null */\n readonly orNull: () => RcType<T | null>\n /** RcType | null | undefined */\n readonly orNullish: () => RcType<T | null | undefined>\n readonly withAutofix: (\n customAutofix: (input: unknown) => false | { fixed: T },\n ) => RcType<T>\n\n // This should not be stripped out because it is used in type inference\n readonly _optional_key_?: RequiredKey\n /** @internal */\n readonly _parse_: (\n input: unknown,\n ctx: ParseResultCtx,\n ) => InternalParseResult<T>\n /** @internal */\n readonly _kind_: string\n /** @internal */\n readonly _fallback_: T | (() => T) | undefined\n /** @internal */\n readonly _predicate_: ((input: T) => boolean) | undefined\n /** @internal */\n readonly _optional_: boolean\n /** @internal */\n readonly _orNullish_: boolean\n /** @internal */\n readonly _orNull_: boolean\n /** @internal */\n readonly _useAutFix_: boolean\n /** @internal */\n readonly _is_extend_obj_: boolean\n /** @internal */\n readonly _is_object_: boolean\n /** @internal */\n readonly _array_item_type_: RcType<any> | undefined\n /** @internal */\n readonly _show_value_in_error_: boolean\n /** @internal */\n readonly _alternative_key_: string | undefined\n /** @internal */\n readonly _obj_shape_: Record<string, RcType<any>> | undefined\n /** @internal */\n readonly _autoFix_: ((input: unknown) => false | { fixed: T }) | undefined\n}\n\nfunction withFallback(this: RcType<any>, fallback: any): RcType<any> {\n return {\n ...this,\n _fallback_: fallback,\n }\n}\n\n/** @internal */\nexport type ErrorWithPath = string & { __withPath: true }\ntype ErrorWithouPath = string & { __withPath?: never }\n\nexport function getWarningOrErrorWithPath(\n ctx: { path_: string },\n message: ErrorWithouPath,\n): ErrorWithPath {\n return `${ctx.path_ ? `$${ctx.path_}: ` : ''}${message}` as ErrorWithPath\n}\n\nfunction addWarning(ctx: ParseResultCtx, warning: string) {\n ctx.warnings_.push(\n warning.startsWith('$') ? warning : getWarningOrErrorWithPath(ctx, warning),\n )\n}\n\nfunction addWarnings(ctx: ParseResultCtx, warnings: string[]) {\n warnings.forEach((warning) => addWarning(ctx, warning))\n}\n\ntype IsValid<T> =\n | boolean\n | { data: T; errors: false }\n | { data: undefined; errors: ErrorWithPath[] }\n\nexport function parse<T>(\n type: RcType<T>,\n input: unknown,\n ctx: ParseResultCtx,\n checkIfIsValid: () => IsValid<T>,\n): InternalParseResult<T> {\n if (type._optional_) {\n if (input === undefined) {\n return { ok: true, data: input as T, errors: undefined }\n }\n }\n\n if (type._orNullish_) {\n if (input === null || input === undefined) {\n return { ok: true, data: input as T, errors: undefined }\n }\n }\n\n if (type._orNull_) {\n if (input === null) {\n return { ok: true, data: input as T, errors: undefined }\n }\n }\n\n const isValid = checkIfIsValid()\n\n if (isValid) {\n if (isValid === true || !isValid.errors) {\n const validResult = isValid === true ? (input as T) : isValid.data\n\n if (type._predicate_) {\n if (!type._predicate_(validResult)) {\n return {\n ok: false,\n data: undefined,\n errors: [\n getWarningOrErrorWithPath(\n ctx,\n `Predicate failed for type '${type._kind_}'`,\n ),\n ],\n }\n }\n }\n\n return { ok: true, data: validResult, errors: undefined }\n }\n }\n\n if (!ctx.noWarnings_) {\n const fb = type._fallback_\n\n if (fb !== undefined) {\n addWarning(\n ctx,\n `Fallback used, errors -> ${getResultErrors(\n isValid,\n ctx,\n type,\n input,\n )}`,\n )\n\n return { ok: true, data: isFn(fb) ? fb() : fb, errors: undefined }\n }\n\n if (type._useAutFix_ && type._autoFix_) {\n const autofixed = type._autoFix_(input)\n\n if (autofixed) {\n if (type._predicate_) {\n if (!type._predicate_(autofixed.fixed)) {\n return {\n ok: false,\n data: undefined,\n errors: [\n getWarningOrErrorWithPath(\n ctx,\n `Predicate failed for autofix in type '${type._kind_}'`,\n ),\n ],\n }\n }\n }\n\n addWarning(\n ctx,\n `Autofixed from error \"${getResultErrors(\n isValid,\n ctx,\n type,\n input,\n )}\"`,\n )\n\n return { ok: true, data: autofixed.fixed, errors: undefined }\n }\n }\n }\n\n return {\n ok: false,\n data: undefined,\n errors:\n isValid ?\n isValid.errors\n : [getWarningOrErrorWithPath(ctx, getErrorMsg(type, input))],\n }\n}\n\nfunction getResultErrors(\n isValid: false | { errors: string[] },\n ctx: ParseResultCtx,\n type: RcType<any>,\n input: unknown,\n) {\n return isValid ?\n isValid.errors.map((err) => err.replace(ctx.path_, '')).join('; ')\n : getErrorMsg(type, input)\n}\n\nfunction withAutofix(\n this: RcType<any>,\n customAutofix: (input: unknown) => any,\n): RcType<any> {\n return {\n ...this,\n _useAutFix_: true,\n _autoFix_: customAutofix,\n }\n}\n\nfunction where(\n this: RcType<any>,\n predicate: (input: any) => boolean,\n): RcType<any> {\n return {\n ...this,\n _predicate_: predicate,\n }\n}\n\nfunction optional(this: RcType<any>): RcType<any> {\n return {\n ...this,\n _optional_: true,\n _kind_: `${this._kind_}_optional`,\n }\n}\n\nfunction getErrorMsg(type: RcType<any>, input: unknown): string {\n return `Type '${normalizedTypeOf(\n input,\n !!type._show_value_in_error_,\n )}' is not assignable to '${type._kind_}'`\n}\n\nfunction orNull(this: RcType<any>): RcType<any> {\n return {\n ...this,\n _orNull_: true,\n _kind_: `${this._kind_}_or_null`,\n }\n}\n\nfunction orNullish(this: RcType<any>): RcType<any> {\n return {\n ...this,\n _orNullish_: true,\n _kind_: `${this._kind_}_or_nullish`,\n }\n}\n\nexport const defaultProps: Omit<RcType<any>, '_parse_' | '_kind_'> = {\n __rc_type: undefined as any,\n withFallback,\n where,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- perf improvement to avoid polymorphic deoptimaztions\n // @ts-ignore\n _parse_: undefined as any,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- perf improvement to avoid polymorphic deoptimaztions\n // @ts-ignore\n _kind_: undefined as any,\n optional,\n optionalKey: optional as any,\n orNullish,\n withAutofix,\n orNull,\n _array_item_type_: undefined,\n _fallback_: undefined,\n _predicate_: undefined,\n _optional_: false,\n _orNull_: false,\n _orNullish_: false,\n _useAutFix_: false,\n _show_value_in_error_: false,\n _alternative_key_: undefined,\n _autoFix_: undefined,\n _obj_shape_: undefined,\n _is_object_: false,\n _is_extend_obj_: false,\n}\n\nexport const rc_undefined: RcType<undefined> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => input === undefined)\n },\n _kind_: 'undefined',\n}\n\nexport const rc_null: RcType<null> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => input === null)\n },\n _kind_: 'null',\n}\n\nexport const rc_any: RcType<any> = {\n ...defaultProps,\n _parse_(input) {\n return { ok: true, data: input, errors: undefined }\n },\n _kind_: 'any',\n}\n\nexport const rc_unknown: RcType<unknown> = {\n ...defaultProps,\n _parse_(input) {\n return { ok: true, data: input, errors: undefined }\n },\n _kind_: 'unknown',\n}\n\nexport const rc_boolean: RcType<boolean> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => typeof input === 'boolean')\n },\n _kind_: 'boolean',\n}\n\nexport const rc_string: RcType<string> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => typeof input === 'string')\n },\n _kind_: 'string',\n}\n\nexport const rc_number: RcType<number> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(\n this,\n input,\n ctx,\n () => typeof input === 'number' && !Number.isNaN(input),\n )\n },\n _kind_: 'number',\n}\n\nexport const rc_date: RcType<Date> = {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n return (\n typeof input === 'object' &&\n input instanceof Date &&\n !Number.isNaN(input.getTime())\n )\n })\n },\n _kind_: 'date',\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function rc_instanceof<T extends Function>(classToCheck: T): RcType<T> {\n return {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n return input instanceof classToCheck\n })\n },\n _kind_: `instanceof_${classToCheck.name ? `_${classToCheck.name}` : ''}`,\n }\n}\n\nexport function rc_literals<T extends (string | number | boolean)[]>(\n ...literals: T\n): RcType<T[number]> {\n if (literals.length === 0) {\n throw new Error('rc_literal requires at least one literal')\n }\n\n return {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n for (const literal of literals) {\n if (input === literal) {\n return true\n }\n }\n\n return false\n })\n },\n _show_value_in_error_: true,\n _kind_:\n literals.length == 1 ?\n normalizedTypeOf(literals[0], true)\n : literals.map((literal) => normalizedTypeOf(literal, true)).join(' | '),\n }\n}\n\nconst maxShallowObjErrors = 1\n\nexport function rc_union<T extends RcType<any>[]>(\n ...types: T\n): RcType<RcInferType<T[number]>> {\n if (types.length === 0) {\n throw new Error('Unions should have at least one type')\n }\n\n return {\n ...defaultProps,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n const basePath = ctx.path_\n const shallowObjErrors: ErrorWithPath[] = []\n let shallowObjErrorsCount = 0\n let hasNonObjTypeMember = false\n const nonShallowObjErrors: ErrorWithPath[] = []\n\n let i = 0\n for (const type of types) {\n i += 1\n\n if (type._is_object_) {\n ctx.path_ = `${basePath}|union ${i}|`\n }\n\n const currentObjErrShortCircuit = ctx.objErrShortCircuit_\n ctx.objErrShortCircuit_ = true\n ctx.objErrKeyIndex_ = 0\n\n const parseResult = type._parse_(input, ctx)\n\n const objErrIndex = ctx.objErrKeyIndex_\n\n ctx.objErrShortCircuit_ = currentObjErrShortCircuit\n ctx.objErrKeyIndex_ = 0\n\n if (parseResult.ok) {\n return true\n } else if (type._is_object_ && objErrIndex !== -1) {\n if (objErrIndex > 0) {\n nonShallowObjErrors.push(...parseResult.errors)\n } else {\n if (shallowObjErrorsCount < maxShallowObjErrors) {\n shallowObjErrors.push(...parseResult.errors)\n }\n\n shallowObjErrorsCount += 1\n }\n } else {\n hasNonObjTypeMember = true\n }\n }\n\n ctx.path_ = basePath\n\n if (nonShallowObjErrors.length > 0 || shallowObjErrors.length > 0) {\n if (\n shallowObjErrorsCount > maxShallowObjErrors ||\n hasNonObjTypeMember\n ) {\n shallowObjErrors.push(\n getWarningOrErrorWithPath(\n ctx,\n 'not matches any other union member',\n ),\n )\n }\n\n return {\n errors: [...nonShallowObjErrors, ...shallowObjErrors],\n data: undefined,\n }\n }\n\n return false\n })\n },\n _kind_: types.map((type) => type._kind_).join(' | '),\n }\n}\n\ntype NotUndefined<T> = T extends undefined ? never : T\n\n/** Generate a schema with valid fallback value for undefined inputs */\nexport function rc_default<T>(\n schema: RcType<T>,\n defaultValue: NotUndefined<T> | (() => NotUndefined<T>),\n): RcType<NotUndefined<T>> {\n return {\n ...(schema as unknown as RcType<NotUndefined<T>>),\n _optional_: false,\n _orNullish_: false,\n _orNull_: false,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (input === undefined) {\n return getDefaultResult()\n }\n\n const parseResult = schema._parse_(input, ctx)\n\n if (parseResult.ok) {\n if (parseResult.data === undefined) {\n return getDefaultResult()\n }\n\n return { data: parseResult.data as NotUndefined<T>, errors: false }\n } else {\n return { data: undefined, errors: parseResult.errors }\n }\n })\n },\n _kind_: `${schema._kind_}_default`,\n }\n\n function getDefaultResult(): IsValid<NotUndefined<T>> {\n return {\n data: isFn(defaultValue) ? defaultValue() : defaultValue,\n errors: false,\n }\n }\n}\n\ntype NotNullish<T> = T extends null | undefined ? never : T\n\nexport function rc_nullish_default<T>(\n schema: RcType<T>,\n defaultValue: NotNullish<T> | (() => NotNullish<T>),\n): RcType<NotNullish<T>> {\n return {\n ...(schema as unknown as RcType<NotNullish<T>>),\n _optional_: false,\n _orNullish_: false,\n _orNull_: false,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (input === null || input === undefined) {\n return getDefaultResult()\n }\n\n const parseResult = schema._parse_(input, ctx)\n\n if (parseResult.ok) {\n if (parseResult.data === null || parseResult.data === undefined) {\n return getDefaultResult()\n }\n\n return { data: parseResult.data as NotNullish<T>, errors: false }\n } else {\n return { data: undefined, errors: parseResult.errors }\n }\n })\n },\n _kind_: `${schema._kind_}_nullish_default`,\n }\n\n function getDefaultResult(): IsValid<NotNullish<T>> {\n return {\n data: isFn(defaultValue) ? defaultValue() : defaultValue,\n errors: false,\n }\n }\n}\n\nexport function rc_record<V>(\n valueType: RcType<V>,\n {\n checkKey,\n looseCheck,\n }: { checkKey?: (key: string) => boolean; looseCheck?: boolean } = {},\n): RcType<Record<string, V>> {\n return {\n ...defaultProps,\n _kind_: `record<string, ${valueType._kind_}>`,\n _is_object_: true,\n _parse_(inputObj, ctx) {\n return parse<Record<string, V>>(this, inputObj, ctx, () => {\n if (!isObject(inputObj)) return false\n\n const resultObj: Record<any, string> = {} as any\n const resultErrors: ErrorWithPath[] = []\n\n const parentPath = ctx.path_\n\n for (const [key, inputValue] of Object.entries(inputObj)) {\n const subPath = `.${key}`\n\n const path = `${parentPath}${subPath}`\n ctx.path_ = path\n\n if (checkKey && !checkKey(key)) {\n resultErrors.push(\n getWarningOrErrorWithPath(ctx, `Key '${key}' is not allowed`),\n )\n continue\n }\n\n const input = inputObj[key]\n\n const parseResult = valueType._parse_(inputValue, ctx)\n\n if (parseResult.ok) {\n resultObj[key] = input\n }\n //\n else {\n const errors = parseResult.errors\n\n for (const subError of errors) {\n resultErrors.push(subError)\n }\n\n if (ctx.objErrShortCircuit_) {\n break\n }\n }\n }\n\n if (resultErrors.length > 0) {\n if (looseCheck) {\n addWarnings(ctx, resultErrors)\n } else {\n return { errors: resultErrors, data: undefined }\n }\n }\n\n ctx.path_ = parentPath\n\n return { errors: false, data: resultObj as any }\n })\n },\n }\n}\n\nexport function rc_discriminated_union<\n K extends string,\n T extends Record<string, RcObject>,\n>(\n discriminatorKey: K,\n types: T,\n): RcType<\n Prettify<\n { [P in keyof T]: { [Q in K]: P } & TypeOfObjectType<T[P]> }[keyof T]\n >\n> {\n const preComputedTypesShape = {} as Record<string, RcType<any>>\n\n for (const [key, type] of Object.entries(types)) {\n preComputedTypesShape[key] = rc_object(type) as any\n }\n\n return {\n ...defaultProps,\n _kind_: `discriminated_union`,\n _is_object_: true,\n _parse_(input, ctx) {\n return parse<any>(this, input, ctx, () => {\n if (!isObject(input)) {\n ctx.objErrKeyIndex_ = -1\n return false\n }\n\n const discriminator = input[discriminatorKey]\n\n const parentPath = ctx.path_\n\n const type = preComputedTypesShape[discriminator]\n\n if (!type) {\n const invalidValueType = normalizedTypeOf(discriminator, true)\n\n return {\n errors: [\n getWarningOrErrorWithPath(\n { path_: `${parentPath}.${discriminatorKey}` },\n `Type '${invalidValueType}' is not a valid discriminator`,\n ),\n ],\n data: undefined,\n }\n }\n\n ctx.path_ = `${parentPath}|${discriminatorKey}: ${discriminator}|`\n\n const parseResult = type._parse_(input, ctx)\n\n ctx.path_ = parentPath\n\n if (!parseResult.ok) {\n return { errors: parseResult.errors, data: undefined }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n parseResult.data[discriminatorKey] = discriminator\n\n return { errors: false, data: parseResult.data }\n })\n },\n }\n}\n\n/** instead of returning a general error, rejects invalid keys and returns warnings for these items */\nexport function rc_loose_record<V>(\n valueType: RcType<V>,\n { checkKey }: { checkKey?: (key: string) => boolean } = {},\n): RcType<Record<string, V>> {\n return rc_record(valueType, { checkKey, looseCheck: true })\n}\n\nfunction checkArrayItems(\n this: RcType<any>,\n input: any[],\n types: RcType<any> | readonly RcType<any>[],\n ctx: ParseResultCtx,\n _loose = false,\n options?: ArrayOptions<RcType<any>>,\n): IsValid<any[]> {\n const useLooseMode = _loose && !ctx.noWarnings_ && !ctx.noLooseArray_\n const unique = options?.unique\n\n const looseErrors: ErrorWithPath[][] = []\n const arrayResult: any[] = []\n const uniqueValues = unique ? new Set<any>() : undefined\n\n const parentPath = ctx.path_\n\n const isTuple = Array.isArray(types)\n\n let index = -1\n for (const _item of input) {\n index++\n\n const type: RcType<any> = isTuple ? types[index] : types\n\n const subPath = `[${index}]`\n\n const path = `${parentPath}${subPath}`\n\n ctx.path_ = path\n\n if (options?.filter) {\n const filterResult = options.filter(_item)\n\n if (typeof filterResult === 'boolean') {\n if (!filterResult) {\n continue\n }\n } else if ('errors' in filterResult) {\n if (!useLooseMode) {\n return { errors: filterResult.errors, data: undefined }\n } else {\n looseErrors.push(filterResult.errors)\n continue\n }\n }\n\n ctx.path_ = path\n }\n\n let parseResult = type._parse_(_item, ctx)\n\n ctx.path_ = path\n\n if (parseResult.ok && uniqueValues) {\n let uniqueValueToCheck = parseResult.data\n\n const isUniqueKey = typeof unique === 'string'\n\n if (isUniqueKey) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n uniqueValueToCheck = parseResult.data[unique]\n } else if (typeof unique === 'function') {\n uniqueValueToCheck = unique(parseResult.data)\n }\n\n if (uniqueValues.has(uniqueValueToCheck)) {\n if (isUniqueKey) {\n ctx.path_ = `${parentPath}${subPath}.${unique}`\n }\n\n parseResult = {\n ok: false,\n data: undefined,\n errors: [\n getWarningOrErrorWithPath(\n ctx,\n isUniqueKey ?\n `Type '${type._obj_shape_?.[unique]?._kind_}' with value \"${uniqueValueToCheck}\" is not unique`\n : typeof unique === 'function' ?\n `Type '${type._kind_}' unique fn return with value \"${uniqueValueToCheck}\" is not unique`\n : `${type._kind_} value is not unique`,\n ),\n ],\n }\n } else {\n uniqueValues.add(uniqueValueToCheck)\n }\n }\n\n if (!parseResult.ok) {\n if (!useLooseMode) {\n return {\n errors: parseResult.errors,\n data: undefined,\n }\n } else {\n looseErrors.push(parseResult.errors)\n continue\n }\n } else {\n arrayResult.push(parseResult.data)\n }\n }\n\n if (looseErrors.length > 0) {\n if (arrayResult.length === 0) {\n return { errors: looseErrors.slice(0, 5).flat(), data: undefined }\n } else {\n addWarnings(ctx, looseErrors.flat())\n }\n }\n\n return { errors: false, data: arrayResult }\n}\n\ntype ArrayOptions<T extends RcType<any>> = {\n unique?: RcInferType<T> extends Record<string, any> ?\n keyof RcInferType<T> | ((parsedItem: RcInferType<T>) => any)\n : boolean | ((parsedItem: RcInferType<T>) => any)\n filter?: (item: RcInferType<T>) => boolean | { errors: ErrorWithPath[] }\n}\n\nexport function rc_array<T extends RcType<any>>(\n type: T,\n options?: ArrayOptions<T>,\n): RcType<RcInferType<T>[]> {\n return {\n ...defaultProps,\n _kind_: `${type._kind_}[]`,\n _array_item_type_: type,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (!Array.isArray(input)) return false\n\n if (input.length === 0) return true\n\n return checkArrayItems.call(this, input, type, ctx, false, options)\n })\n },\n }\n}\n\nexport function rc_get_array_item_type<T>(type: RcType<T[]>): RcType<T> {\n if (!type._array_item_type_) {\n throw new Error(`Type does not have an item type`)\n }\n\n return type._array_item_type_\n}\n\nexport function rc_disable_loose_array<T extends RcType<any>>(\n type: T,\n { nonRecursive = false }: { nonRecursive?: boolean } = {},\n): T {\n if (nonRecursive) {\n if (!type._kind_.endsWith('[]')) {\n throw new Error(\n `rc_disable_loose_array: nonRecursive option can only be used with array types`,\n )\n }\n\n return {\n ...type,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (!Array.isArray(input)) return false\n\n if (input.length === 0) return true\n\n return checkArrayItems.call(this, input, type, ctx, false)\n })\n },\n }\n }\n\n return {\n ...type,\n _parse_(input, ctx) {\n const parentDisableLooseArray = ctx.noLooseArray_\n\n ctx.noLooseArray_ = true\n const result = type._parse_(input, ctx)\n ctx.noLooseArray_ = parentDisableLooseArray\n\n return result\n },\n }\n}\n\n/** instead of returning a general error, rejects invalid array items and returns warnings for these items */\nexport function rc_loose_array<T extends RcType<any>>(\n type: T,\n options?: ArrayOptions<T>,\n): RcType<RcInferType<T>[]> {\n return {\n ...defaultProps,\n _array_item_type_: type,\n _kind_: `${type._kind_}[]`,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (!Array.isArray(input)) return false\n\n if (input.length === 0) return true\n\n return checkArrayItems.call(this, input, type, ctx, true, options)\n })\n },\n }\n}\n\nexport function rc_array_filter_from_schema<B, T>(\n filterSchema: RcType<B>,\n filterFn: (item: B) => boolean,\n type: RcType<T>,\n options?: Omit<ArrayOptions<RcType<any>>, 'filter'> & {\n loose?: boolean\n },\n): RcType<T[]> {\n return {\n ...defaultProps,\n _array_item_type_: type,\n _kind_: `${type._kind_}[]`,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (!Array.isArray(input)) return false\n\n if (input.length === 0) return true\n\n return checkArrayItems.call(this, input, type, ctx, options?.loose, {\n ...options,\n filter(item) {\n const filterResult = filterSchema._parse_(item, ctx)\n\n if (!filterResult.ok) {\n return { errors: filterResult.errors }\n }\n\n return filterFn(filterResult.data)\n },\n })\n })\n },\n }\n}\n\ntype MapTupleToTypes<T extends readonly [...any[]]> = {\n -readonly [K in keyof T]: RcInferType<T[K]>\n}\n\n/**\n * Check for a tuple of types\n *\n * TS equivalent example: [string, number, boolean]\n */\nexport function rc_tuple<T extends readonly RcType<any>[]>(\n types: T,\n): RcType<MapTupleToTypes<T>> {\n return {\n ...defaultProps,\n _kind_: `[${types.map((type) => type._kind_).join(', ')}]`,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n if (!Array.isArray(input)) return false\n\n if (input.length !== types.length) return false\n\n return checkArrayItems.call(this, input, types, ctx) as boolean\n })\n },\n }\n}\n\ntype ParseOptions = {\n /** ignore fallback and autofix */\n noWarnings?: boolean\n}\n\n/**\n * Parse a runcheck type. If valid return the valid input, with warning for autofix\n * and fallback, or the errors if invalid\n */\nexport function rc_parse<S>(\n input: any,\n type: RcType<S>,\n { noWarnings = false }: ParseOptions = {},\n): RcParseResult<S> {\n const ctx: ParseResultCtx = {\n warnings_: [],\n path_: '',\n objErrShortCircuit_: false,\n objErrKeyIndex_: 0,\n noWarnings_: noWarnings,\n strictObj_: false,\n noLooseArray_: false,\n }\n\n const parseResult = type._parse_(input, ctx)\n\n if (parseResult.ok) {\n return {\n error: false,\n ok: true,\n data: parseResult.data,\n value: parseResult.data,\n warnings: ctx.warnings_.length > 0 ? ctx.warnings_ : false,\n }\n }\n\n return {\n ok: false,\n error: true,\n errors: parseResult.errors,\n }\n}\n\nexport type RcParser<T> = (input: any) => RcParseResult<T>\n\n/** create a reusable parser for a certain type */\nexport function rc_parser<S>(type: RcType<S>): RcParser<S> {\n return (input: any) => rc_parse(input, type)\n}\n\n/** @deprecated use rc_unwrap_or_null instead */\nexport function rc_loose_parse<S>(\n input: any,\n type: RcType<S>,\n options?: ParseOptions,\n): { data: S | null; errors: string[] | false; warnings: string[] | false } {\n const result = rc_parse(input, type, options)\n\n if (result.error) {\n return {\n data: null,\n errors: result.errors,\n warnings: false,\n }\n }\n\n return { data: result.value, errors: false, warnings: result.warnings }\n}\n\nexport function rc_unwrap_or_null<R>(result: RcParseResult<R>): {\n value: R | null\n errors: string[] | false\n warnings: string[] | false\n} {\n return rc_unwrap_or(result, null)\n}\n\nexport function rc_unwrap_or<R, F>(\n result: RcParseResult<R>,\n fallback: F,\n): {\n value: R | F\n errors: string[] | false\n warnings: string[] | false\n} {\n if (result.error) {\n return {\n value: fallback,\n errors: result.errors,\n warnings: false,\n }\n }\n\n return { value: result.value, errors: false, warnings: result.warnings }\n}\n\nexport class RcValidationError extends Error {\n constructor(public readonly errors: string[]) {\n super(errors.join('\\n'))\n }\n}\n\nexport function rc_unwrap<R>(result: RcParseResult<R>): {\n value: R\n warnings: string[] | false\n} {\n if (result.error) {\n throw new RcValidationError(result.errors)\n }\n\n return result\n}\n\nexport function rc_is_valid<S>(input: any, type: RcType<S>): input is S {\n const ctx: ParseResultCtx = {\n warnings_: [],\n path_: '',\n objErrShortCircuit_: false,\n objErrKeyIndex_: 0,\n noWarnings_: false,\n strictObj_: false,\n noLooseArray_: false,\n }\n\n return type._parse_(input, ctx).ok\n}\n\nexport function rc_validator<S>(type: RcType<S>) {\n return (input: any): input is S => rc_is_valid(input, type)\n}\n\nexport function rc_recursive<T>(type: () => RcType<T>): RcType<T> {\n return {\n ...defaultProps,\n _kind_: 'recursive',\n _parse_(input, ctx) {\n return type()._parse_(input, ctx)\n },\n }\n}\n\ntype TransformOptions<T> = {\n /** if the input type is invalid, the transform will be ignored and this schema will be used to validate the input */\n outputSchema?: RcType<T>\n disableStrictOutputSchema?: boolean\n}\n\nfunction validateTransformOutput<T>(\n ctx: ParseResultCtx,\n outputSchema: RcType<T>,\n input: any,\n disableStrictOutputSchema: boolean | undefined,\n): InternalParseResult<T> {\n const parentPath = ctx.path_\n const parentObjErrShortCircuit = ctx.objErrShortCircuit_\n const parentStrictObj = ctx.strictObj_\n const parentNoWarnings = ctx.noWarnings_\n\n ctx.objErrShortCircuit_ = true\n ctx.path_ = `${parentPath}|output|`\n\n if (!disableStrictOutputSchema) {\n ctx.strictObj_ = true\n ctx.noWarnings_ = true\n }\n\n const result = outputSchema._parse_(input, ctx)\n\n ctx.strictObj_ = parentStrictObj\n ctx.noWarnings_ = parentNoWarnings\n ctx.path_ = parentPath\n ctx.objErrShortCircuit_ = parentObjErrShortCircuit\n\n return result\n}\n\n/** validate a input or subset of input and transform the valid result */\nexport function rc_transform<Input, Transformed>(\n type: RcType<Input>,\n transform: (input: Input, inputSchema: RcType<Input>) => Transformed,\n {\n outputSchema,\n disableStrictOutputSchema,\n }: TransformOptions<Transformed> = {},\n): RcType<Transformed> {\n return {\n ...defaultProps,\n _kind_: `transform_from_${type._kind_}`,\n _parse_(input, ctx) {\n let outputResultErrors: ErrorWithPath[] | null = null\n\n if (outputSchema) {\n const parseResult = validateTransformOutput(\n ctx,\n outputSchema,\n input,\n disableStrictOutputSchema,\n )\n\n if (parseResult.ok) {\n return parseResult\n } else {\n outputResultErrors = parseResult.errors\n }\n }\n\n const parseResult = type._parse_(input, ctx)\n\n if (parseResult.ok) {\n return {\n ok: true,\n data: transform(parseResult.data, type),\n errors: undefined,\n }\n } else {\n return {\n ok: false,\n errors: [...(outputResultErrors || []), ...parseResult.errors],\n data: undefined,\n }\n }\n },\n }\n}\n\n/** Create transforms which result can be validated with the same schema */\nexport function rc_narrow<Input, Narrowed extends Input>(\n type: RcType<Input>,\n narrow: (input: Input, inputSchema: RcType<Input>) => Narrowed,\n): RcType<Narrowed> {\n return rc_transform(type, narrow)\n}\n\n/** Allows the transform function to return a error if transformation is invalid */\nexport function rc_unsafe_transform<Input, Transformed>(\n type: RcType<Input>,\n transform: (\n input: Input,\n inputSchema: RcType<Input>,\n ) =>\n | { ok: true; data: Transformed }\n | { ok: false; errors: string | string[] },\n {\n outputSchema,\n disableStrictOutputSchema,\n }: TransformOptions<Transformed> = {},\n): RcType<Transformed> {\n return {\n ...defaultProps,\n _kind_: `transform_from_${type._kind_}`,\n _parse_(input, ctx) {\n let outputResultErrors: ErrorWithPath[] | null = null\n\n if (outputSchema) {\n const parseResult = validateTransformOutput(\n ctx,\n outputSchema,\n input,\n disableStrictOutputSchema,\n )\n\n if (parseResult.ok) {\n return parseResult\n } else {\n outputResultErrors = parseResult.errors\n }\n }\n\n const parseResult = type._parse_(input, ctx)\n\n if (parseResult.ok) {\n const transformResult = transform(parseResult.data, type)\n\n if (transformResult.ok) {\n return { ok: true, data: transformResult.data, errors: undefined }\n } else {\n return {\n ok: false,\n errors:\n typeof transformResult.errors === 'string' ?\n [getWarningOrErrorWithPath(ctx, transformResult.errors)]\n : transformResult.errors.map((error) =>\n getWarningOrErrorWithPath(ctx, error),\n ),\n data: undefined,\n }\n }\n }\n\n return {\n ok: false,\n errors: [...(outputResultErrors || []), ...parseResult.errors],\n data: undefined,\n }\n },\n }\n}\n\nfunction normalizedTypeOf(input: unknown, showValueInError: boolean): string {\n const typeOf = typeof input\n\n const type = ((): string => {\n if (typeOf === 'object') {\n if (Array.isArray(input)) {\n return 'array'\n }\n\n if (!input) {\n return 'null'\n }\n }\n\n return typeOf\n })()\n\n return (\n showValueInError &&\n (type === 'string' || type === 'number' || type === 'boolean')\n ) ?\n `${type}(${input})`\n : type\n}\n\ntype NonArrayObject = {\n [x: string]: any\n [y: number]: never\n}\n\nexport function rc_assert_is_valid<S>(\n result: RcParseResult<S>,\n): asserts result is {\n ok: true\n error: false\n data: S\n value: S\n warnings: string[] | false\n} {\n if (result.error) {\n throw new Error(`invalid input: ${result.errors.join(', ')}`)\n }\n}\n\n/** @internal */\nexport function isObject(value: any): value is NonArrayObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\n/** @internal */\nexport function snakeCase(str: string): string {\n return str\n .replace(/\\W+/g, ' ')\n .split(/ |\\B(?=[A-Z])/)\n .map((word) => word.toLowerCase())\n .join('_')\n}\n\nexport function rc_parse_json<T>(\n jsonString: unknown,\n schema: RcType<T>,\n options?: ParseOptions,\n): RcParseResult<T> {\n try {\n if (typeof jsonString !== 'string') {\n return {\n ok: false,\n error: true,\n errors: [\n `expected a json string, got ${normalizedTypeOf(jsonString, true)}`,\n ],\n }\n }\n\n const parsed = JSON.parse(jsonString)\n\n return rc_parse(parsed, schema, options)\n } catch (err) {\n return {\n ok: false,\n error: true,\n errors: [`json parsing error: ${isObject(err) ? err.message : ''}`],\n }\n }\n}\n\nfunction isFn(value: any): value is () => any {\n return typeof value === 'function'\n}\n\ntype Prettify<T> =\n T extends Record<string, any> ?\n {\n [K in keyof T]: Prettify<T[K]>\n }\n : T\n\nexport type RcPrettyInferType<T extends RcType<any>> = Prettify<RcInferType<T>>\n","import {\n ErrorWithPath,\n RcBase,\n RcInferType,\n RcOptionalKeyType,\n RcType,\n defaultProps,\n getWarningOrErrorWithPath,\n isObject,\n parse,\n snakeCase,\n} from './runcheck'\n\n/**\n * If the schema key value is undefined uses a value from the fallback key as a safe value\n * Can be used to rename keys from input\n */\nexport function rc_get_from_key_as_fallback<T extends RcType<any>>(\n fallbackKey: string,\n type: T,\n): RcType<RcInferType<T>> {\n return {\n ...type,\n _alternative_key_: fallbackKey,\n }\n}\n\nexport type RcObject = {\n [key: string]: RcBase<any, any> | RcObject\n}\n\nexport type TypeOfObjectType<T extends RcObject> = Flatten<\n AddQuestionMarks<{\n [K in keyof T]: T[K] extends RcType<infer U> ? RequiredKey<U>\n : T[K] extends RcOptionalKeyType<infer W> ? W\n : T[K] extends RcObject ? RequiredKey<TypeOfObjectType<T[K]>>\n : never\n }>\n>\n\nexport type RcObjTypeReturn<T extends RcObject> = RcType<TypeOfObjectType<T>>\n\ntype RequiredKey<T> = { _required_key_: T }\n\ntype RequiredKeys<T extends object> = {\n [k in keyof T]: T[k] extends RequiredKey<any> ? k : never\n}[keyof T]\n\ntype AddQuestionMarks<\n T extends object,\n R extends keyof T = RequiredKeys<T>,\n> = Pick<Required<T>, R> & Partial<Omit<T, R>>\n\ntype Identity<T> = T\n\ntype Flatten<T> = Identity<{\n [k in keyof T]: T[k] extends RequiredKey<infer U> ? U : T[k]\n}>\n\nfunction isRcType(value: any): value is RcType<any> {\n return isObject(value) && '__rc_type' in value\n}\n\nfunction unwrapToObjSchema(input: unknown): RcType<any> {\n if (isRcType(input)) {\n return input\n } else if (isObject(input)) {\n const objSchema: Record<string, RcType<any>> = {}\n\n for (const [key, value] of Object.entries(input)) {\n objSchema[key] = unwrapToObjSchema(value)\n }\n\n return rc_object(objSchema)\n } else if (Array.isArray(input)) {\n const [type, value] = input\n\n switch (type) {\n case 'optional':\n return unwrapToObjSchema(value).optional()\n case 'nullish_or':\n return unwrapToObjSchema(value).orNullish()\n case 'null_or':\n return unwrapToObjSchema(value).orNull()\n }\n }\n\n throw new Error(`invalid schema: ${input}`)\n}\n\nexport type ObjOptions = {\n normalizeKeysFrom?: 'snake_case'\n}\n\nexport function rc_object<T extends RcObject>(\n shape: T,\n { normalizeKeysFrom }: ObjOptions = {},\n): RcObjTypeReturn<T> {\n const objShape: Record<string, RcType<any>> = {}\n\n for (const [key, value] of Object.entries(shape)) {\n objShape[key] = unwrapToObjSchema(value)\n }\n\n const shapeEntries = Object.entries(objShape).map(([key, type]) => {\n return { key, type }\n })\n\n return {\n ...defaultProps,\n _obj_shape_: objShape,\n _kind_: 'object',\n _is_object_: true,\n _parse_(inputObj, ctx) {\n return parse<TypeOfObjectType<T>>(this, inputObj, ctx, () => {\n if (!isObject(inputObj)) {\n ctx.objErrKeyIndex_ = -1\n return false\n }\n\n const isStrict = this._kind_ === 'strict_obj' || ctx.strictObj_\n\n const excessKeys =\n isStrict ? new Set<string>(Object.keys(inputObj)) : undefined\n\n if (excessKeys && excessKeys.size > shapeEntries.length) {\n ctx.objErrKeyIndex_ = -1\n const errors: ErrorWithPath[] = []\n\n if (ctx.objErrShortCircuit_) {\n return {\n data: undefined,\n errors: [\n getWarningOrErrorWithPath(\n ctx,\n `Expected strict object with ${shapeEntries.length} keys but got ${excessKeys.size}`,\n ),\n ],\n }\n }\n\n for (const { key } of shapeEntries) {\n if (!excessKeys.has(key)) {\n errors.push(\n getWarningOrErrorWithPath(ctx, `Key '${key}' is missing`),\n )\n } else {\n excessKeys.delete(key)\n }\n }\n\n for (const key of excessKeys) {\n errors.push(\n getWarningOrErrorWithPath(\n ctx,\n `Key '${key}' is not defined in the object shape`,\n ),\n )\n }\n\n return {\n data: undefined,\n errors,\n }\n }\n\n const resultObj: Record<any, string> = {} as any\n const resultErrors: ErrorWithPath[] = []\n\n const parentPath = ctx.path_\n\n let i = -1\n for (const shapeEntry of shapeEntries) {\n const key = shapeEntry.key\n const type = shapeEntry.type\n\n const typekey = key as keyof T\n i += 1\n\n const subPath = `.${key}`\n\n const path = `${parentPath}${subPath}`\n\n ctx.path_ = path\n\n let input = inputObj[key]\n let keyToDeleteFromExcessKeys = key\n\n if (input === undefined && type._alternative_key_) {\n input = inputObj[type._alternative_key_]\n keyToDeleteFromExcessKeys = type._alternative_key_\n }\n\n if (input === undefined && normalizeKeysFrom === 'snake_case') {\n const snakeCaseKey = snakeCase(key)\n\n input = inputObj[snakeCaseKey]\n keyToDeleteFromExcessKeys = snakeCaseKey\n }\n\n excessKeys?.delete(keyToDeleteFromExcessKeys)\n\n const parseResult = type._parse_(input, ctx)\n\n if (parseResult.ok) {\n resultObj[typekey] = parseResult.data\n }\n //\n else {\n for (const subError of parseResult.errors) {\n ctx.path_ = path\n resultErrors.push(subError)\n }\n\n if (ctx.objErrShortCircuit_) {\n ctx.objErrKeyIndex_ = i\n break\n }\n }\n }\n\n if (excessKeys) {\n if (excessKeys.size > 0) {\n for (const key of excessKeys) {\n ctx.path_ = parentPath\n\n resultErrors.push(\n getWarningOrErrorWithPath(\n ctx,\n `Key '${key}' is not defined in the object shape`,\n ),\n )\n }\n }\n }\n\n if (resultErrors.length > 0) {\n return { errors: resultErrors, data: undefined }\n }\n\n ctx.path_ = parentPath\n\n if (this._is_extend_obj_) {\n return {\n errors: false,\n data: {\n ...(inputObj as any),\n ...(resultObj as any),\n },\n }\n }\n\n return { errors: false, data: resultObj as any }\n })\n },\n }\n}\n\nexport function rc_obj_extends<T extends RcObject>(\n shape: T,\n options?: ObjOptions,\n): RcObjTypeReturn<T> {\n return {\n ...rc_object(shape, options),\n _kind_: `extends_object`,\n _is_extend_obj_: true,\n }\n}\n\nexport function rc_get_obj_shape<T extends RcObject>(\n type: RcObjTypeReturn<T>,\n): T {\n if (!type._obj_shape_) {\n throw new Error(`type does not have an object shape`)\n }\n\n return type._obj_shape_ as T\n}\n\n/** return an error if the obj has more keys than the expected type */\nexport function rc_obj_strict<T extends RcObject>(\n shape: T,\n options?: ObjOptions,\n): RcObjTypeReturn<T> {\n return {\n ...rc_object(shape, options),\n _kind_: `strict_obj`,\n }\n}\n\nexport function rc_enable_obj_strict<T extends RcType<any>>(\n type: T,\n {\n nonRecursive,\n }: {\n nonRecursive?: boolean\n } = {},\n): T {\n if (nonRecursive) {\n if (!type._obj_shape_) {\n throw new Error(\n `rc_enable_obj_strict: nonRecursive option can only be used on object types`,\n )\n }\n\n return {\n ...type,\n _kind_: `strict_obj`,\n }\n }\n\n return {\n ...type,\n _parse_(input, ctx) {\n const parentStrictObj = ctx.strictObj_\n ctx.strictObj_ = true\n const result = type._parse_(input, ctx)\n ctx.strictObj_ = parentStrictObj\n return result\n },\n }\n}\n\ntype AnyObj = Record<string, unknown>\n\ntype Extends<T extends AnyObj, W extends AnyObj> = Omit<T, keyof W> & W\n\nexport function rc_obj_merge<A extends AnyObj, B extends AnyObj>(\n ...objs: [RcType<A>, RcType<B>]\n): RcType<Extends<A, B>>\nexport function rc_obj_merge<\n A extends AnyObj,\n B extends AnyObj,\n C extends AnyObj,\n>(...objs: [RcType<A>, RcType<B>, RcType<C>]): RcType<Extends<Extends<A, B>, C>>\nexport function rc_obj_merge<\n A extends AnyObj,\n B extends AnyObj,\n C extends AnyObj,\n D extends AnyObj,\n>(\n ...objs: [RcType<A>, RcType<B>, RcType<C>, RcType<D>]\n): RcType<Extends<Extends<Extends<A, B>, C>, D>>\nexport function rc_obj_merge(\n ...objs: RcType<Record<string, unknown>>[]\n): RcType<any> {\n const finalShape = {} as any\n\n for (const objShape of objs) {\n Object.assign(finalShape, objShape._obj_shape_)\n }\n\n return rc_object(finalShape)\n}\n\nexport function rc_obj_pick<O extends AnyObj, K extends keyof O>(\n obj: RcType<O>,\n keys: K[],\n): RcType<Pick<O, K>> {\n const shape = {} as any\n\n if (!obj._obj_shape_) {\n throw new Error('rc_obj_pick: obj must be an object type')\n }\n\n for (const key of keys) {\n const keyShape = obj._obj_shape_[key as string]\n if (keyShape) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n shape[key] = keyShape\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return rc_object(shape) as any\n}\n\nexport function rc_obj_omit<O extends AnyObj, K extends keyof O>(\n obj: RcType<O>,\n keys: K[],\n): RcType<Pick<O, K>> {\n const shape = {} as any\n\n if (!obj._obj_shape_) {\n throw new Error('rc_obj_omit: obj must be an object type')\n }\n\n for (const key of Object.keys(obj._obj_shape_)) {\n if (!(keys as any[]).includes(key)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n shape[key] = obj._obj_shape_[key]\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return rc_object(shape) as any\n}\n\ntype ExpectedSchema<T> = (t: T) => void\n\ntype RcTypeWithSquemaEqualTo<T> = { __rc_type: ExpectedSchema<T> }\n\ntype StrictObjTypeToRcType<T> = {\n [K in keyof T]-?: StricTypeToRcType<T[K]>\n}\n\ntype StricTypeToRcType<T> =\n [T] extends [any[]] ? RcTypeWithSquemaEqualTo<T>\n : [T] extends [Record<string, any>] ?\n StrictObjTypeToRcType<T> | RcTypeWithSquemaEqualTo<T>\n : [T] extends [Record<string, any> | null] ?\n ['null_or', StrictObjTypeToRcType<T>] | RcTypeWithSquemaEqualTo<T>\n : [T] extends [Record<string, any> | undefined] ?\n ['optional', StrictObjTypeToRcType<T>] | RcTypeWithSquemaEqualTo<T>\n : [T] extends [Record<string, any> | null | undefined] ?\n ['nullish_or', StrictObjTypeToRcType<T>] | RcTypeWithSquemaEqualTo<T>\n : RcTypeWithSquemaEqualTo<T>\n\ntype StricTypeToRcTypeBase<T extends Record<string, any>> = {\n [K in keyof T]-?: StricTypeToRcType<T[K]>\n}\n\nexport function rc_obj_builder<T extends Record<string, any>>() {\n return <S extends StricTypeToRcTypeBase<T>>(\n schema: {\n [K in keyof S]: K extends keyof T ? S[K] : never\n },\n options?: ObjOptions,\n ): RcType<T> => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n return rc_object(schema as any, options) as any\n }\n}\n","import { RcType, defaultProps, parse } from './runcheck'\n\nexport function rc_intersection<A, B>(a: RcType<A>, b: RcType<B>): RcType<A & B>\nexport function rc_intersection<A, B, C>(\n a: RcType<A>,\n b: RcType<B>,\n c: RcType<C>,\n): RcType<A & B & C>\nexport function rc_intersection<A, B, C, D>(\n a: RcType<A>,\n b: RcType<B>,\n c: RcType<C>,\n d: RcType<D>,\n): RcType<A & B & C & D>\nexport function rc_intersection(...types: RcType<any>[]): RcType<any> {\n let kind = ''\n let allIsObject = true\n\n for (const type of types) {\n if (kind) {\n kind += ' & '\n }\n\n if (!type._is_object_) {\n allIsObject = false\n }\n\n kind += type._kind_.includes('|') ? `(${type._kind_})` : type._kind_\n }\n\n return {\n ...defaultProps,\n _kind_: kind,\n _is_object_: allIsObject,\n _parse_(input, ctx) {\n return parse(this, input, ctx, () => {\n let objResultData: Record<string, unknown> | null = null\n\n for (const type of types) {\n const result = type._parse_(input, ctx)\n\n if (!result.ok) {\n if (type._is_object_) {\n return result\n }\n\n return false\n } else {\n if (type._is_object_) {\n objResultData = { ...(objResultData || {}), ...result.data }\n }\n }\n }\n\n if (objResultData) {\n return {\n data: objResultData as any,\n errors: false,\n }\n }\n\n return true\n })\n },\n }\n}\n"],"mappings":"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","names":["runcheck_exports","__export","RcValidationError","defaultProps","getWarningOrErrorWithPath","isObject","parse","rc_any","rc_array","rc_array_filter_from_schema","rc_assert_is_valid","rc_boolean","rc_date","rc_default","rc_disable_loose_array","rc_discriminated_union","rc_enable_obj_strict","rc_get_array_item_type","rc_get_from_key_as_fallback","rc_get_obj_shape","rc_instanceof","rc_intersection","rc_is_valid","rc_literals","rc_loose_array","rc_loose_parse","rc_loose_record","rc_narrow","rc_null","rc_nullish_default","rc_number","rc_obj_builder","rc_obj_extends","rc_obj_merge","rc_obj_omit","rc_obj_pick","rc_obj_strict","rc_object","rc_parse","rc_parse_json","rc_parser","rc_record","rc_recursive","rc_string","rc_transform","rc_tuple","rc_undefined","rc_union","rc_unknown","rc_unsafe_transform","rc_unwrap","rc_unwrap_or","rc_unwrap_or_null","rc_validator","snakeCase","__toCommonJS","rc_get_from_key_as_fallback","fallbackKey","type","_alternative_key_","isRcType","value","isObject","unwrapToObjSchema","input","objSchema","key","rc_object","shape","normalizeKeysFrom","objShape","shapeEntries","defaultProps","_obj_shape_","_kind_","_is_object_","_parse_","inputObj","ctx","parse","objErrKeyIndex_","excessKeys","strictObj_","errors","objErrShortCircuit_","getWarningOrErrorWithPath","resultObj","resultErrors","parentPath","path_","i","shapeEntry","typekey","subPath","path","keyToDeleteFromExcessKeys","snakeCaseKey","snakeCase","parseResult","subError","_is_extend_obj_","rc_obj_extends","options","rc_get_obj_shape","rc_obj_strict","rc_enable_obj_strict","nonRecursive","parentStrictObj","result","rc_obj_merge","objs","finalShape","rc_obj_pick","obj","keys","keyShape","rc_obj_omit","rc_obj_builder","schema","rc_intersection","types","kind","allIsObject","type","_is_object_","_kind_","defaultProps","_parse_","input","ctx","parse","objResultData","result","withFallback","fallback","_fallback_","getWarningOrErrorWithPath","ctx","message","path_","addWarning","warning","warnings_","addWarnings","warnings","parse","type","input","checkIfIsValid","_optional_","_orNullish_","_orNull_","isValid","validResult","_predicate_","_kind_","noWarnings_","fb","getResultErrors","isFn","_useAutFix_","_autoFix_","autofixed","getErrorMsg","err","withAutofix","customAutofix","where","predicate","optional","normalizedTypeOf","_show_value_in_error_","orNull","orNullish","defaultProps","_parse_","_array_item_type_","_alternative_key_","_obj_shape_","_is_object_","_is_extend_obj_","rc_undefined","rc_null","rc_any","rc_unknown","rc_boolean","rc_string","rc_number","rc_date","rc_instanceof","classToCheck","rc_literals","literals","literal","maxShallowObjErrors","rc_union","types","basePath","shallowObjErrors","shallowObjErrorsCount","hasNonObjTypeMember","nonShallowObjErrors","i","currentObjErrShortCircuit","objErrShortCircuit_","objErrKeyIndex_","parseResult","objErrIndex","rc_default","schema","defaultValue","getDefaultResult","rc_nullish_default","rc_record","valueType","checkKey","looseCheck","inputObj","isObject","resultObj","resultErrors","parentPath","key","inputValue","subPath","path","errors","subError","rc_discriminated_union","discriminatorKey","preComputedTypesShape","rc_object","discriminator","invalidValueType","rc_loose_record","checkArrayItems","_loose","options","useLooseMode","noLooseArray_","unique","looseErrors","arrayResult","uniqueValues","isTuple","index","_item","filterResult","uniqueValueToCheck","isUniqueKey","rc_array","rc_get_array_item_type","rc_disable_loose_array","nonRecursive","parentDisableLooseArray","result","rc_loose_array","rc_array_filter_from_schema","filterSchema","filterFn","item","rc_tuple","rc_parse","noWarnings","strictObj_","rc_parser","rc_loose_parse","rc_unwrap_or_null","rc_unwrap_or","RcValidationError","rc_unwrap","rc_is_valid","rc_validator","rc_recursive","validateTransformOutput","outputSchema","disableStrictOutputSchema","parentObjErrShortCircuit","parentStrictObj","parentNoWarnings","rc_transform","transform","outputResultErrors","rc_narrow","narrow","rc_unsafe_transform","transformResult","error","showValueInError","typeOf","rc_assert_is_valid","value","snakeCase","str","word","rc_parse_json","jsonString","parsed"]}
@@ -4,10 +4,7 @@
4
4
  */
5
5
  declare function rc_get_from_key_as_fallback<T extends RcType<any>>(fallbackKey: string, type: T): RcType<RcInferType<T>>;
6
6
  type RcObject = {
7
- [key: string]: RcBase<any, any> | RcObject | [
8
- 'optional' | 'nullish_or' | 'null_or' | 'array' | 'loose_array',
9
- RcObject
10
- ];
7
+ [key: string]: RcBase<any, any> | RcObject;
11
8
  };
12
9
  type TypeOfObjectType<T extends RcObject> = Flatten<AddQuestionMarks<{
13
10
  [K in keyof T]: T[K] extends RcType<infer U> ? RequiredKey<U> : T[K] extends RcOptionalKeyType<infer W> ? W : T[K] extends RcObject ? RequiredKey<TypeOfObjectType<T[K]>> : never;
@@ -51,7 +48,7 @@ type StrictObjTypeToRcType<T> = {
51
48
  };
52
49
  type StricTypeToRcType<T> = [
53
50
  T
54
- ] extends [Record<string, any>[]] ? RcTypeWithSquemaEqualTo<T> | ['array' | 'loose_array', StrictObjTypeToRcType<T[number]>] : [T] extends [any[]] ? RcTypeWithSquemaEqualTo<T> : [T] extends [Record<string, any>] ? StrictObjTypeToRcType<T> | RcTypeWithSquemaEqualTo<T> : [T] extends [Record<string, any> | null] ? [
51
+ ] extends [any[]] ? RcTypeWithSquemaEqualTo<T> : [T] extends [Record<string, any>] ? StrictObjTypeToRcType<T> | RcTypeWithSquemaEqualTo<T> : [T] extends [Record<string, any> | null] ? [
55
52
  'null_or',
56
53
  StrictObjTypeToRcType<T>
57
54
  ] | RcTypeWithSquemaEqualTo<T> : [T] extends [Record<string, any> | undefined] ? [
@@ -66,6 +63,10 @@ type StricTypeToRcTypeBase<T extends Record<string, any>> = {
66
63
  };
67
64
  declare function rc_obj_builder<T extends Record<string, any>>(): <S extends StricTypeToRcTypeBase<T>>(schema: { [K in keyof S]: K extends keyof T ? S[K] : never; }, options?: ObjOptions) => RcType<T>;
68
65
 
66
+ declare function rc_intersection<A, B>(a: RcType<A>, b: RcType<B>): RcType<A & B>;
67
+ declare function rc_intersection<A, B, C>(a: RcType<A>, b: RcType<B>, c: RcType<C>): RcType<A & B & C>;
68
+ declare function rc_intersection<A, B, C, D>(a: RcType<A>, b: RcType<B>, c: RcType<C>, d: RcType<D>): RcType<A & B & C & D>;
69
+
69
70
  type RcParseResult<T> = {
70
71
  error: false;
71
72
  ok: true;
@@ -88,7 +89,15 @@ type ParseResultCtx = {
88
89
  noWarnings_: boolean;
89
90
  noLooseArray_: boolean;
90
91
  };
91
- type InternalParseResult<T> = [success: true, data: T] | [success: false, errors: ErrorWithPath[]];
92
+ type InternalParseResult<T> = {
93
+ ok: true;
94
+ data: T;
95
+ errors: undefined;
96
+ } | {
97
+ ok: false;
98
+ errors: ErrorWithPath[];
99
+ data: undefined;
100
+ };
92
101
  type WithFallback<T> = (fallback: T | (() => T)) => RcType<T>;
93
102
  type RcOptionalKeyType<T> = RcBase<T, true>;
94
103
  type RcType<T> = RcBase<T, false>;
@@ -113,7 +122,9 @@ type RcBase<T, RequiredKey extends boolean> = {
113
122
  type ErrorWithouPath = string & {
114
123
  __withPath?: never;
115
124
  };
116
- declare function getWarningOrErrorWithPath(ctx: ParseResultCtx, message: ErrorWithouPath): ErrorWithPath;
125
+ declare function getWarningOrErrorWithPath(ctx: {
126
+ path_: string;
127
+ }, message: ErrorWithouPath): ErrorWithPath;
117
128
  type IsValid<T> = boolean | {
118
129
  data: T;
119
130
  errors: false;
@@ -154,6 +165,9 @@ declare function rc_loose_record<V>(valueType: RcType<V>, { checkKey }?: {
154
165
  }): RcType<Record<string, V>>;
155
166
  type ArrayOptions<T extends RcType<any>> = {
156
167
  unique?: RcInferType<T> extends Record<string, any> ? keyof RcInferType<T> | ((parsedItem: RcInferType<T>) => any) : boolean | ((parsedItem: RcInferType<T>) => any);
168
+ filter?: (item: RcInferType<T>) => boolean | {
169
+ errors: ErrorWithPath[];
170
+ };
157
171
  };
158
172
  declare function rc_array<T extends RcType<any>>(type: T, options?: ArrayOptions<T>): RcType<RcInferType<T>[]>;
159
173
  declare function rc_get_array_item_type<T>(type: RcType<T[]>): RcType<T>;
@@ -162,6 +176,9 @@ declare function rc_disable_loose_array<T extends RcType<any>>(type: T, { nonRec
162
176
  }): T;
163
177
  /** instead of returning a general error, rejects invalid array items and returns warnings for these items */
164
178
  declare function rc_loose_array<T extends RcType<any>>(type: T, options?: ArrayOptions<T>): RcType<RcInferType<T>[]>;
179
+ declare function rc_array_filter_from_schema<B, T>(filterSchema: RcType<B>, filterFn: (item: B) => boolean, type: RcType<T>, options?: Omit<ArrayOptions<RcType<any>>, 'filter'> & {
180
+ loose?: boolean;
181
+ }): RcType<T[]>;
165
182
  type MapTupleToTypes<T extends readonly [...any[]]> = {
166
183
  -readonly [K in keyof T]: RcInferType<T[K]>;
167
184
  };
@@ -219,6 +236,7 @@ type TransformOptions<T> = {
219
236
  declare function rc_transform<Input, Transformed>(type: RcType<Input>, transform: (input: Input, inputSchema: RcType<Input>) => Transformed, { outputSchema, disableStrictOutputSchema, }?: TransformOptions<Transformed>): RcType<Transformed>;
220
237
  /** Create transforms which result can be validated with the same schema */
221
238
  declare function rc_narrow<Input, Narrowed extends Input>(type: RcType<Input>, narrow: (input: Input, inputSchema: RcType<Input>) => Narrowed): RcType<Narrowed>;
239
+ /** Allows the transform function to return a error if transformation is invalid */
222
240
  declare function rc_unsafe_transform<Input, Transformed>(type: RcType<Input>, transform: (input: Input, inputSchema: RcType<Input>) => {
223
241
  ok: true;
224
242
  data: Transformed;
@@ -239,4 +257,4 @@ type Prettify<T> = T extends Record<string, any> ? {
239
257
  } : T;
240
258
  type RcPrettyInferType<T extends RcType<any>> = Prettify<RcInferType<T>>;
241
259
 
242
- export { RcBase, RcInferType, RcOptionalKeyType, RcParseResult, RcParser, RcPrettyInferType, RcType, RcValidationError, defaultProps, getWarningOrErrorWithPath, parse, rc_any, rc_array, rc_assert_is_valid, rc_boolean, rc_date, rc_default, rc_disable_loose_array, rc_discriminated_union, rc_enable_obj_strict, rc_get_array_item_type, rc_get_from_key_as_fallback, rc_get_obj_shape as rc_get_obj_schema, rc_instanceof, rc_is_valid, rc_literals, rc_loose_array, rc_loose_parse, rc_loose_record, rc_narrow, rc_null, rc_nullish_default, rc_number, rc_obj_builder, rc_obj_extends, rc_obj_merge, rc_obj_omit, rc_obj_pick, rc_obj_strict, rc_object, rc_parse, rc_parse_json, rc_parser, rc_record, rc_recursive, rc_string, rc_transform, rc_tuple, rc_undefined, rc_union, rc_unknown, rc_unsafe_transform, rc_unwrap, rc_unwrap_or, rc_unwrap_or_null, rc_validator };
260
+ export { RcBase, RcInferType, RcOptionalKeyType, RcParseResult, RcParser, RcPrettyInferType, RcType, RcValidationError, defaultProps, getWarningOrErrorWithPath, parse, rc_any, rc_array, rc_array_filter_from_schema, rc_assert_is_valid, rc_boolean, rc_date, rc_default, rc_disable_loose_array, rc_discriminated_union, rc_enable_obj_strict, rc_get_array_item_type, rc_get_from_key_as_fallback, rc_get_obj_shape as rc_get_obj_schema, rc_instanceof, rc_intersection, rc_is_valid, rc_literals, rc_loose_array, rc_loose_parse, rc_loose_record, rc_narrow, rc_null, rc_nullish_default, rc_number, rc_obj_builder, rc_obj_extends, rc_obj_merge, rc_obj_omit, rc_obj_pick, rc_obj_strict, rc_object, rc_parse, rc_parse_json, rc_parser, rc_record, rc_recursive, rc_string, rc_transform, rc_tuple, rc_undefined, rc_union, rc_unknown, rc_unsafe_transform, rc_unwrap, rc_unwrap_or, rc_unwrap_or_null, rc_validator };
package/dist/runcheck.js CHANGED
@@ -1 +1,2 @@
1
- import{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}from"./chunk-65CFL2UP.js";export{N as RcValidationError,m as defaultProps,k as getWarningOrErrorWithPath,W as isObject,l as parse,p as rc_any,D as rc_array,V as rc_assert_is_valid,r as rc_boolean,u as rc_date,y as rc_default,F as rc_disable_loose_array,B as rc_discriminated_union,f as rc_enable_obj_strict,E as rc_get_array_item_type,a as rc_get_from_key_as_fallback,d as rc_get_obj_schema,v as rc_instanceof,P as rc_is_valid,w as rc_literals,G as rc_loose_array,K as rc_loose_parse,C as rc_loose_record,T as rc_narrow,o as rc_null,z as rc_nullish_default,t as rc_number,j as rc_obj_builder,c as rc_obj_extends,g as rc_obj_merge,i as rc_obj_omit,h as rc_obj_pick,e as rc_obj_strict,b as rc_object,I as rc_parse,Y as rc_parse_json,J as rc_parser,A as rc_record,R as rc_recursive,s as rc_string,S as rc_transform,H as rc_tuple,n as rc_undefined,x as rc_union,q as rc_unknown,U as rc_unsafe_transform,O as rc_unwrap,M as rc_unwrap_or,L as rc_unwrap_or_null,Q as rc_validator,X as snakeCase};
1
+ import{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}from"./chunk-ZV3N7RXM.js";export{P as RcValidationError,n as defaultProps,l as getWarningOrErrorWithPath,Y as isObject,m as parse,q as rc_any,E as rc_array,I as rc_array_filter_from_schema,X as rc_assert_is_valid,s as rc_boolean,v as rc_date,z as rc_default,G as rc_disable_loose_array,C as rc_discriminated_union,f as rc_enable_obj_strict,F as rc_get_array_item_type,a as rc_get_from_key_as_fallback,d as rc_get_obj_schema,w as rc_instanceof,k as rc_intersection,R as rc_is_valid,x as rc_literals,H as rc_loose_array,M as rc_loose_parse,D as rc_loose_record,V as rc_narrow,p as rc_null,A as rc_nullish_default,u as rc_number,j as rc_obj_builder,c as rc_obj_extends,g as rc_obj_merge,i as rc_obj_omit,h as rc_obj_pick,e as rc_obj_strict,b as rc_object,K as rc_parse,_ as rc_parse_json,L as rc_parser,B as rc_record,T as rc_recursive,t as rc_string,U as rc_transform,J as rc_tuple,o as rc_undefined,y as rc_union,r as rc_unknown,W as rc_unsafe_transform,Q as rc_unwrap,O as rc_unwrap_or,N as rc_unwrap_or_null,S as rc_validator,Z as snakeCase};
2
+ //# sourceMappingURL=runcheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "runcheck",
3
3
  "description": "A tiny (less than 2 KiB Gzipped) and treeshakable! lib for typescript runtime type checks with autofix support",
4
- "version": "0.54.1",
4
+ "version": "0.56.0",
5
5
  "license": "MIT",
6
6
  "files": [
7
7
  "dist"
@@ -46,7 +46,6 @@
46
46
  "tsm": "^2.3.0",
47
47
  "tsup": "^6.7.0",
48
48
  "typescript": "^5.0.3",
49
- "v8-profiler-next": "^1.9.0",
50
49
  "vite": "^4.3.9",
51
50
  "vitest": "1.0.0-beta.3",
52
51
  "zod": "^3.22.4"
@@ -56,12 +55,12 @@
56
55
  "test:run": "vitest run",
57
56
  "lint": "pnpm tsc && pnpm eslint",
58
57
  "tsc": "tsc -p tsconfig.prod.json",
59
- "benchmark": "tsm benchmarks/mitataBench.ts",
58
+ "benchmark": "tsm --no-warnings benchmarks/bench.ts",
60
59
  "benchmark:generate-profile": "tsm benchmarks/generateProfiles.ts",
61
60
  "eslint": "CI=true eslint --color --ext .jsx,.js,.ts,.tsx src/ tests/",
62
61
  "build": "pnpm test:run && pnpm lint && pnpm build:no-test",
63
62
  "build:no-test": "tsup --minify --dts",
64
63
  "build-test": "tsup --config tsup.test.config.ts",
65
- "pre-publish": "./scripts/check-if-is-sync.sh && pnpm build "
64
+ "pre-publish": "./scripts/check-if-is-sync.sh && pnpm build"
66
65
  }
67
66
  }
@@ -1,2 +0,0 @@
1
- function z(e,r){return{...r,y:e}}function L(e){return k(e)&&"__rc_type"in e}function O(e){if(L(e))return e;if(k(e)){let r={};for(let[n,t]of Object.entries(e))r[n]=O(t);return _(r)}else if(Array.isArray(e)){let[r,n]=e;switch(r){case"optional":return O(n).optional();case"nullish_or":return O(n).orNullish();case"null_or":return O(n).orNull();case"array":return W(O(n));case"loose_array":return q(O(n))}}throw new Error(`invalid schema: ${e}`)}function _(e,{normalizeKeysFrom:r}={}){let n={};for(let[t,o]of Object.entries(e))n[t]=O(o);return{...l,t:n,e:"object",f:!0,u:Object.entries(n),r(t,o){return y(this,t,o,()=>{if(!k(t))return o.s=-1,!1;let s=this.e==="strict_obj"||o.a?new Set(Object.keys(t)):void 0;if(s&&s.size>this.u.length){o.s=-1;let p=[];if(o.o)return{data:void 0,errors:[d(o,`Expected strict object with ${this.u.length} keys but got ${s.size}`)]};for(let[f]of this.u)s.has(f)?s.delete(f):p.push(d(o,`Key '${f}' is missing`));for(let f of s)p.push(d(o,`Key '${f}' is not defined in the object shape`));return{data:void 0,errors:p}}let c={},i=[],u=o.n,T=-1;for(let[p,f]of this.u){let h=p;T+=1;let b=`.${p}`,g=`${u}${b}`;o.n=g;let R=t[p],j=p;if(R===void 0&&f.y&&(R=t[f.y],j=f.y),R===void 0&&r==="snake_case"){let x=C(p);R=t[x],j=x}s?.delete(j);let[S,m]=f.r(R,o);if(S)c[h]=m;else{for(let x of m)o.n=g,i.push(x);if(o.o){o.s=T;break}}}if(s&&s.size>0)for(let p of s)o.n=u,i.push(d(o,`Key '${p}' is not defined in the object shape`));return i.length>0?{errors:i,data:void 0}:this.b?{errors:!1,data:{...t,...c}}:{errors:!1,data:c}})}}}function Q(e,r){return{..._(e,r),e:"extends_object",b:!0}}function J(e){if(!e.t)throw new Error("type does not have an object shape");return e.t}function Z(e,r){return{..._(e,r),e:"strict_obj"}}function G(e,{nonRecursive:r}={}){if(r){if(!e.t)throw new Error("rc_enable_obj_strict: nonRecursive option can only be used on object types");return{...e,e:"strict_obj"}}return{...e,r(n,t){let o=t.a;t.a=!0;let a=e.r(n,t);return t.a=o,a}}}function H(...e){let r={};for(let n of e)Object.assign(r,n.t);return _(r)}function X(e,r){let n={};if(!e.t)throw new Error("rc_obj_pick: obj must be an object type");for(let t of r){let o=e.t[t];o&&(n[t]=o)}return _(n)}function Y(e,r){let n={};if(!e.t)throw new Error("rc_obj_omit: obj must be an object type");for(let t of Object.keys(e.t))r.includes(t)||(n[t]=e.t[t]);return _(n)}function ee(){return(e,r)=>_(e,r)}function re(e){return{...this,g:e}}function d(e,r){return`${e.n?`$${e.n}: `:""}${r}`}function K(e,r){e.T.push(r.startsWith("$")?r:d(e,r))}function U(e,r){r.forEach(n=>K(e,n))}function y(e,r,n,t){if(e.d&&r===void 0)return[!0,r];if(e.p&&r==null)return[!0,r];if(e.R&&r===null)return[!0,r];let o=t();if(o&&(o===!0||!o.errors)){let a=o===!0?r:o.data;return e.c&&!e.c(a)?[!1,[d(n,`Predicate failed for type '${e.e}'`)]]:[!0,a]}if(!n.i){let a=e.g;if(a!==void 0)return K(n,`Fallback used, errors -> ${B(o,n,e,r)}`),[!0,N(a)?a():a];if(e.j&&e.h){let s=e.h(r);if(s)return e.c&&!e.c(s.fixed)?[!1,[d(n,`Predicate failed for autofix in type '${e.e}'`)]]:(K(n,`Autofixed from error "${B(o,n,e,r)}"`),[!0,s.fixed])}}return[!1,o?o.errors:[d(n,D(e,r))]]}function B(e,r,n,t){return e?e.errors.map(o=>o.replace(r.n,"")).join("; "):D(n,t)}function ne(e){return{...this,j:!0,h:e}}function te(e){return{...this,c:e}}function F(){return{...this,d:!0,e:`${this.e}_optional`}}function D(e,r){return`Type '${P(r,!!e.O)}' is not assignable to '${e.e}'`}function oe(){return{...this,R:!0,e:`${this.e}_or_null`}}function se(){return{...this,p:!0,e:`${this.e}_or_nullish`}}var l={__rc_type:void 0,withFallback:re,where:te,optional:F,optionalKey:F,orNullish:se,withAutofix:ne,orNull:oe,_:void 0,g:void 0,c:void 0,d:!1,R:!1,p:!1,j:!1,O:!1,y:void 0,h:void 0,t:void 0,f:!1,b:!1,u:[]},ge={...l,r(e,r){return y(this,e,r,()=>e===void 0)},e:"undefined"},je={...l,r(e,r){return y(this,e,r,()=>e===null)},e:"null"},Oe={...l,r(e,r){return y(this,e,r,()=>!0)},e:"any"},ke={...l,r(e,r){return y(this,e,r,()=>!0)},e:"unknown"},me={...l,r(e,r){return y(this,e,r,()=>typeof e=="boolean")},e:"boolean"},xe={...l,r(e,r){return y(this,e,r,()=>typeof e=="string")},e:"string"},we={...l,r(e,r){return y(this,e,r,()=>typeof e=="number"&&!Number.isNaN(e))},e:"number"},Pe={...l,r(e,r){return y(this,e,r,()=>typeof e=="object"&&e instanceof Date&&!Number.isNaN(e.getTime()))},e:"date"};function Ee(e){return{...l,r(r,n){return y(this,r,n,()=>r instanceof e)},e:`instanceof_${e.name?`_${e.name}`:""}`}}function Se(...e){if(e.length===0)throw new Error("rc_literal requires at least one literal");return{...l,r(r,n){return y(this,r,n,()=>{for(let t of e)if(r===t)return!0;return!1})},O:!0,e:e.length==1?P(e[0],!0):e.map(r=>P(r,!0)).join(" | ")}}var V=1;function $e(...e){if(e.length===0)throw new Error("Unions should have at least one type");return{...l,r(r,n){return y(this,r,n,()=>{let t=n.n,o=[],a=0,s=!1,c=[],i=0;for(let u of e){i+=1,u.f&&(n.n=`${t}|union ${i}|`);let T=n.o;n.o=!0,n.s=0;let[p,f]=u.r(r,n),h=n.s;if(n.o=T,n.s=0,p)return!0;u.f&&h!==-1?h>0?c.push(...f):(a<V&&o.push(...f),a+=1):s=!0}return n.n=t,c.length>0||o.length>0?((a>V||s)&&o.push(d(n,"not matches any other union member")),{errors:[...c,...o],data:void 0}):!1})},e:e.map(r=>r.e).join(" | ")}}function Ae(e,r){return{...e,d:!1,p:!1,R:!1,r(t,o){return y(this,t,o,()=>{if(t===void 0)return n();let[a,s]=e.r(t,o);return a?s===void 0?n():{data:s,errors:!1}:{data:void 0,errors:s}})},e:`${e.e}_default`};function n(){return{data:N(r)?r():r,errors:!1}}}function Ke(e,r){return{...e,d:!1,p:!1,R:!1,r(t,o){return y(this,t,o,()=>{if(t==null)return n();let[a,s]=e.r(t,o);return a?s==null?n():{data:s,errors:!1}:{data:void 0,errors:s}})},e:`${e.e}_nullish_default`};function n(){return{data:N(r)?r():r,errors:!1}}}function ae(e,{checkKey:r,looseCheck:n}={}){return{...l,e:`record<string, ${e.e}>`,r(t,o){return y(this,t,o,()=>{if(!k(t))return!1;let a={},s=[],c=o.n;for(let[i,u]of Object.entries(t)){let T=`.${i}`,p=`${c}${T}`;if(o.n=p,r&&!r(i)){s.push(d(o,`Key '${i}' is not allowed`));continue}let f=t[i],[h,b]=e.r(u,o);if(h)a[i]=f;else{let g=b;for(let R of g)s.push(R);if(o.o)break}}if(s.length>0)if(n)U(o,s);else return{errors:s,data:void 0};return{errors:!1,data:a}})}}}function ve(e,r){let n={};for(let[t,o]of Object.entries(r))n[t]=_(o);return{...l,e:"discriminated_union",f:!0,r(t,o){return y(this,t,o,()=>{if(!k(t))return o.s=-1,!1;let a=t[e];o.n=`${o.n}.${e}`;let s=n[a];if(!s){let u=P(a,!0);return{errors:[d(o,`Type '${u}' is not a valid discriminator`)],data:void 0}}o.n=`${o.n}|${a}|`;let[c,i]=s.r(t,o);return c?(i[e]=a,{errors:!1,data:i}):{errors:i,data:void 0}})}}}function Ie(e,{checkKey:r}={}){return ae(e,{checkKey:r,looseCheck:!0})}function E(e,r,n,t=!1,o){let a=t&&!n.i&&!n.l,s=o?.unique,c=[],i=[],u=s?new Set:void 0,T=n.n,p=Array.isArray(r),f=-1;for(let h of e){f++;let b=p?r[f]:r,g=`[${f}]`,R=`${T}${g}`;n.n=R;let j=b.r(h,n),[S,m]=j;if(n.n=R,S&&u){let w=m,A=typeof s=="string";A?w=m[s]:typeof s=="function"&&(w=s(m)),u.has(w)?(A&&(n.n=`${T}${g}.${s}`),j=[!1,[d(n,A?`Type '${b.t?.[s]?.e}' with value "${w}" is not unique`:typeof s=="function"?`Type '${b.e}' unique fn return with value "${w}" is not unique`:`${b.e} value is not unique`)]]):u.add(w)}let[x,$]=j;if(x)i.push($);else if(a){c.push($);continue}else return{errors:$,data:void 0}}if(c.length>0){if(i.length===0)return{errors:c.slice(0,5).flat(),data:void 0};U(n,c.flat())}return{errors:!1,data:i}}function W(e,r){return{...l,e:`${e.e}[]`,_:e,r(n,t){return y(this,n,t,()=>Array.isArray(n)?n.length===0?!0:E.call(this,n,e,t,!1,r):!1)}}}function Ne(e){if(!e._)throw new Error("Type does not have an item type");return e._}function We(e,{nonRecursive:r=!1}={}){if(r){if(!e.e.endsWith("[]"))throw new Error("rc_disable_loose_array: nonRecursive option can only be used with array types");return{...e,r(n,t){return y(this,n,t,()=>Array.isArray(n)?n.length===0?!0:E.call(this,n,e,t,!1):!1)}}}return{...e,r(n,t){let o=t.l;t.l=!0;let a=e.r(n,t);return t.l=o,a}}}function q(e,r){return{...l,_:e,e:`${e.e}[]`,r(n,t){return y(this,n,t,()=>Array.isArray(n)?n.length===0?!0:E.call(this,n,e,t,!0,r):!1)}}}function qe(e){return{...l,e:`[${e.map(r=>r.e).join(", ")}]`,r(r,n){return y(this,r,n,()=>!Array.isArray(r)||r.length!==e.length?!1:E.call(this,r,e,n))}}}function I(e,r,{noWarnings:n=!1}={}){let t={T:[],n:"",o:!1,s:0,i:n,a:!1,l:!1},[o,a]=r.r(e,t);return o?{error:!1,ok:!0,data:a,value:a,warnings:t.T.length>0?t.T:!1}:{ok:!1,error:!0,errors:a}}function Ce(e){return r=>I(r,e)}function Be(e,r,n){let t=I(e,r,n);return t.error?{data:null,errors:t.errors,warnings:!1}:{data:t.value,errors:!1,warnings:t.warnings}}function Fe(e){return ie(e,null)}function ie(e,r){return e.error?{value:r,errors:e.errors,warnings:!1}:{value:e.value,errors:!1,warnings:e.warnings}}var v=class extends Error{constructor(n){super(n.join(`
2
- `));this.errors=n}};function Ve(e){if(e.error)throw new v(e.errors);return e}function ue(e,r){let n={T:[],n:"",o:!1,s:0,i:!1,a:!1,l:!1};return!!r.r(e,n)[0]}function Ue(e){return r=>ue(r,e)}function De(e){return{...l,e:"recursive",r(r,n){return e().r(r,n)}}}function M(e,r,n,t){let o=e.n,a=e.o,s=e.a,c=e.i;e.o=!0,e.n=`${o}|output|`,t||(e.a=!0,e.i=!0);let i=r.r(n,e);return e.a=s,e.i=c,e.n=o,e.o=a,i}function ce(e,r,{outputSchema:n,disableStrictOutputSchema:t}={}){return{...l,e:`transform_from_${e.e}`,r(o,a){let s=null;if(n){let[u,T]=M(a,n,o,t);if(u)return[!0,T];s=T}let[c,i]=e.r(o,a);return c?[!0,r(i,e)]:[!1,[...s||[],...i]]}}}function Me(e,r){return ce(e,r)}function ze(e,r,{outputSchema:n,disableStrictOutputSchema:t}={}){return{...l,e:`transform_from_${e.e}`,r(o,a){let s=null;if(n){let[u,T]=M(a,n,o,t);if(u)return[!0,T];s=T}let[c,i]=e.r(o,a);if(c){let u=r(i,e);return u.ok?[!0,u.data]:[!1,typeof u.errors=="string"?[d(a,u.errors)]:u.errors.map(T=>d(a,T))]}return[!1,[...s||[],...i]]}}}function P(e,r){let n=typeof e,t=(()=>{if(n==="object"){if(Array.isArray(e))return"array";if(!e)return"null"}return n})();return r&&(t==="string"||t==="number"||t==="boolean")?`${t}(${e})`:t}function Le(e){if(e.error)throw new Error(`invalid input: ${e.errors.join(", ")}`)}function k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function C(e){return e.replace(/\W+/g," ").split(/ |\B(?=[A-Z])/).map(r=>r.toLowerCase()).join("_")}function Qe(e,r,n){try{if(typeof e!="string")return{ok:!1,error:!0,errors:[`expected a json string, got ${P(e,!0)}`]};let t=JSON.parse(e);return I(t,r,n)}catch(t){return{ok:!1,error:!0,errors:[`json parsing error: ${k(t)?t.message:""}`]}}}function N(e){return typeof e=="function"}export{z as a,_ as b,Q as c,J as d,Z as e,G as f,H as g,X as h,Y as i,ee as j,d as k,y as l,l as m,ge as n,je as o,Oe as p,ke as q,me as r,xe as s,we as t,Pe as u,Ee as v,Se as w,$e as x,Ae as y,Ke as z,ae as A,ve as B,Ie as C,W as D,Ne as E,We as F,q as G,qe as H,I,Ce as J,Be as K,Fe as L,ie as M,v as N,Ve as O,ue as P,Ue as Q,De as R,ce as S,Me as T,ze as U,Le as V,k as W,C as X,Qe as Y};