xanv 1.1.17 → 1.1.18
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/package.json +1 -1
- package/types/Array.cjs.map +1 -1
- package/types/Array.d.ts +3 -3
- package/types/Array.js.map +1 -1
- package/types.d.ts +3 -1
package/package.json
CHANGED
package/types/Array.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Array.cjs","sources":["../../src/types/Array.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nclass XVArray<T
|
|
1
|
+
{"version":3,"file":"Array.cjs","sources":["../../src/types/Array.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nclass XVArray<T extends XVType<any>> extends XVType<Infer<T>[]> {\r\n constructor(readonly type: T) {\r\n super()\r\n }\r\n\r\n protected check(input: unknown): Infer<T>[] {\r\n if (!Array.isArray(input)) throw new Error(\"Expected array\")\r\n const arr = input.map(v => this.type.parse(v))\r\n return arr as Infer<T>[]\r\n }\r\n\r\n min(length: number) {\r\n return this.set(\"min\", (v: unknown) => {\r\n const arr = v as Infer<T>[];\r\n if (arr.length < length) {\r\n throw new Error(`Array length should be at least ${length} items, received ${arr.length}`);\r\n }\r\n }, length);\r\n }\r\n\r\n\r\n max(length: number) {\r\n return this.set(\"max\", (v: unknown) => {\r\n const arr = v as Infer<T>[];\r\n if (arr.length > length) {\r\n throw new Error(`Array length should not exceed ${length} items, received ${arr.length}`);\r\n }\r\n }, length);\r\n }\r\n\r\n unique() {\r\n return this.set(\"unique\", (v: unknown) => {\r\n const arr = v as Infer<T>[];\r\n const seen = new Set<string>();\r\n\r\n for (const item of arr) {\r\n const key = JSON.stringify(item);\r\n if (seen.has(key)) {\r\n throw new Error(`Array items should be unique, found duplicate: ${key}`);\r\n }\r\n seen.add(key);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default XVArray;\r\n"],"names":[],"mappings":";;;;AAGA,MAAM,OAA+B,SAAQ,MAAkB,CAAA;AAC5D,IAAA,WAAA,CAAqB,IAAO,EAAA;AACzB,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,IAAI,GAAJ,IAAI;IAEzB;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;AAC5D,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9C,QAAA,OAAO,GAAiB;IAC3B;AAEA,IAAA,GAAG,CAAC,MAAc,EAAA;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAU,KAAI;YACnC,MAAM,GAAG,GAAG,CAAe;AAC3B,YAAA,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE;gBACtB,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,MAAM,CAAA,iBAAA,EAAoB,GAAG,CAAC,MAAM,CAAA,CAAE,CAAC;YAC7F;QACH,CAAC,EAAE,MAAM,CAAC;IACb;AAGA,IAAA,GAAG,CAAC,MAAc,EAAA;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAU,KAAI;YACnC,MAAM,GAAG,GAAG,CAAe;AAC3B,YAAA,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE;gBACtB,MAAM,IAAI,KAAK,CAAC,CAAA,+BAAA,EAAkC,MAAM,CAAA,iBAAA,EAAoB,GAAG,CAAC,MAAM,CAAA,CAAE,CAAC;YAC5F;QACH,CAAC,EAAE,MAAM,CAAC;IACb;IAEA,MAAM,GAAA;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAU,KAAI;YACtC,MAAM,GAAG,GAAG,CAAe;AAC3B,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAE9B,YAAA,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE;gBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAChC,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAChB,oBAAA,MAAM,IAAI,KAAK,CAAC,kDAAkD,GAAG,CAAA,CAAE,CAAC;gBAC3E;AACA,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAChB;AACH,QAAA,CAAC,CAAC;IACL;AACF;;;;"}
|
package/types/Array.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import XVType from '../XVType.js';
|
|
2
2
|
import { Infer } from '../types.js';
|
|
3
3
|
|
|
4
|
-
declare class XVArray<T
|
|
5
|
-
readonly type:
|
|
6
|
-
constructor(type:
|
|
4
|
+
declare class XVArray<T extends XVType<any>> extends XVType<Infer<T>[]> {
|
|
5
|
+
readonly type: T;
|
|
6
|
+
constructor(type: T);
|
|
7
7
|
protected check(input: unknown): Infer<T>[];
|
|
8
8
|
min(length: number): this;
|
|
9
9
|
max(length: number): this;
|
package/types/Array.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Array.js","sources":["../../src/types/Array.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nclass XVArray<T
|
|
1
|
+
{"version":3,"file":"Array.js","sources":["../../src/types/Array.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nclass XVArray<T extends XVType<any>> extends XVType<Infer<T>[]> {\r\n constructor(readonly type: T) {\r\n super()\r\n }\r\n\r\n protected check(input: unknown): Infer<T>[] {\r\n if (!Array.isArray(input)) throw new Error(\"Expected array\")\r\n const arr = input.map(v => this.type.parse(v))\r\n return arr as Infer<T>[]\r\n }\r\n\r\n min(length: number) {\r\n return this.set(\"min\", (v: unknown) => {\r\n const arr = v as Infer<T>[];\r\n if (arr.length < length) {\r\n throw new Error(`Array length should be at least ${length} items, received ${arr.length}`);\r\n }\r\n }, length);\r\n }\r\n\r\n\r\n max(length: number) {\r\n return this.set(\"max\", (v: unknown) => {\r\n const arr = v as Infer<T>[];\r\n if (arr.length > length) {\r\n throw new Error(`Array length should not exceed ${length} items, received ${arr.length}`);\r\n }\r\n }, length);\r\n }\r\n\r\n unique() {\r\n return this.set(\"unique\", (v: unknown) => {\r\n const arr = v as Infer<T>[];\r\n const seen = new Set<string>();\r\n\r\n for (const item of arr) {\r\n const key = JSON.stringify(item);\r\n if (seen.has(key)) {\r\n throw new Error(`Array items should be unique, found duplicate: ${key}`);\r\n }\r\n seen.add(key);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default XVArray;\r\n"],"names":[],"mappings":";;AAGA,MAAM,OAA+B,SAAQ,MAAkB,CAAA;AAC5D,IAAA,WAAA,CAAqB,IAAO,EAAA;AACzB,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,IAAI,GAAJ,IAAI;IAEzB;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;AAC5D,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9C,QAAA,OAAO,GAAiB;IAC3B;AAEA,IAAA,GAAG,CAAC,MAAc,EAAA;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAU,KAAI;YACnC,MAAM,GAAG,GAAG,CAAe;AAC3B,YAAA,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE;gBACtB,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,MAAM,CAAA,iBAAA,EAAoB,GAAG,CAAC,MAAM,CAAA,CAAE,CAAC;YAC7F;QACH,CAAC,EAAE,MAAM,CAAC;IACb;AAGA,IAAA,GAAG,CAAC,MAAc,EAAA;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAU,KAAI;YACnC,MAAM,GAAG,GAAG,CAAe;AAC3B,YAAA,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE;gBACtB,MAAM,IAAI,KAAK,CAAC,CAAA,+BAAA,EAAkC,MAAM,CAAA,iBAAA,EAAoB,GAAG,CAAC,MAAM,CAAA,CAAE,CAAC;YAC5F;QACH,CAAC,EAAE,MAAM,CAAC;IACb;IAEA,MAAM,GAAA;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAU,KAAI;YACtC,MAAM,GAAG,GAAG,CAAe;AAC3B,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAE9B,YAAA,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE;gBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAChC,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAChB,oBAAA,MAAM,IAAI,KAAK,CAAC,kDAAkD,GAAG,CAAA,CAAE,CAAC;gBAC3E;AACA,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAChB;AACH,QAAA,CAAC,CAAC;IACL;AACF;;;;"}
|
package/types.d.ts
CHANGED
|
@@ -31,7 +31,9 @@ type InferObject<T extends Record<string, XVType<any>>> = {
|
|
|
31
31
|
type Simplify<T> = T extends object ? {
|
|
32
32
|
[K in keyof T]: T[K];
|
|
33
33
|
} : T;
|
|
34
|
-
type Infer<T> = T extends
|
|
34
|
+
type Infer<T> = T extends Record<string, XVType<any>> ? Simplify<InferObject<T>> : T extends {
|
|
35
|
+
_type: infer R;
|
|
36
|
+
} ? R : never;
|
|
35
37
|
type XVCheckCallback<T> = (value: unknown) => T | void;
|
|
36
38
|
type XVDefaultValue<T> = T | (() => T);
|
|
37
39
|
type XVTransformCallback<T> = (v: T) => T;
|