ts-fortress 11.1.0 → 11.2.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.
Files changed (50) hide show
  1. package/README.md +11 -8
  2. package/dist/entry-point.mjs +2 -0
  3. package/dist/entry-point.mjs.map +1 -1
  4. package/dist/enum/index.d.mts +2 -0
  5. package/dist/enum/index.d.mts.map +1 -1
  6. package/dist/enum/index.mjs +2 -0
  7. package/dist/enum/index.mjs.map +1 -1
  8. package/dist/enum/int-range-inclusive.d.mts +13 -0
  9. package/dist/enum/int-range-inclusive.d.mts.map +1 -0
  10. package/dist/enum/int-range-inclusive.mjs +61 -0
  11. package/dist/enum/int-range-inclusive.mjs.map +1 -0
  12. package/dist/enum/int-range.d.mts +7 -8
  13. package/dist/enum/int-range.d.mts.map +1 -1
  14. package/dist/enum/int-range.mjs +16 -7
  15. package/dist/enum/int-range.mjs.map +1 -1
  16. package/dist/enum/uint-range-inclusive.d.mts +13 -0
  17. package/dist/enum/uint-range-inclusive.d.mts.map +1 -0
  18. package/dist/enum/uint-range-inclusive.mjs +61 -0
  19. package/dist/enum/uint-range-inclusive.mjs.map +1 -0
  20. package/dist/enum/uint-range.d.mts +6 -3
  21. package/dist/enum/uint-range.d.mts.map +1 -1
  22. package/dist/enum/uint-range.mjs +16 -7
  23. package/dist/enum/uint-range.mjs.map +1 -1
  24. package/dist/index.mjs +2 -0
  25. package/dist/index.mjs.map +1 -1
  26. package/dist/predefined/int8.d.mts.map +1 -1
  27. package/dist/predefined/int8.mjs +1 -5
  28. package/dist/predefined/int8.mjs.map +1 -1
  29. package/dist/predefined/uint8.d.mts.map +1 -1
  30. package/dist/predefined/uint8.mjs +1 -5
  31. package/dist/predefined/uint8.mjs.map +1 -1
  32. package/dist/utils/validation-error.d.mts +4 -0
  33. package/dist/utils/validation-error.d.mts.map +1 -1
  34. package/dist/utils/validation-error.mjs +2 -0
  35. package/dist/utils/validation-error.mjs.map +1 -1
  36. package/package.json +2 -2
  37. package/src/compose/intersection.test.mts +2 -2
  38. package/src/enum/index.mts +2 -0
  39. package/src/enum/int-range-inclusive.mts +106 -0
  40. package/src/enum/int-range-inclusive.test.mts +112 -0
  41. package/src/enum/int-range.mts +48 -71
  42. package/src/enum/int-range.test.mts +1 -3
  43. package/src/enum/uint-range-inclusive.mts +106 -0
  44. package/src/enum/uint-range-inclusive.test.mts +159 -0
  45. package/src/enum/uint-range.mts +50 -15
  46. package/src/enum/uint-range.test.mts +1 -3
  47. package/src/predefined/int8.mts +1 -5
  48. package/src/predefined/uint8.mts +1 -5
  49. package/src/utils/validation-error.formatting.test.mts +10 -0
  50. package/src/utils/validation-error.mts +8 -0
package/README.md CHANGED
@@ -909,14 +909,15 @@ const ColorEnum = t.enumType(['red', 'green', 'blue']);
909
909
 
910
910
  type Color = t.TypeOf<typeof ColorEnum>; // 'red' | 'green' | 'blue'
911
911
 
912
- // Numeric ranges
913
- const DiceRoll = t.uintRange({
914
- start: 1,
915
- end: 7,
916
- defaultValue: 1,
917
- }); // integers from 1 to 6
912
+ // Numeric ranges (end is exclusive)
913
+ const DiceRoll = t.uintRange(1, 7, { defaultValue: 1 }); // integers from 1 to 6
918
914
 
919
915
  type DiceRoll = t.TypeOf<typeof DiceRoll>; // 1 | 2 | 3 | 4 | 5 | 6
916
+
917
+ // Numeric ranges (end is inclusive)
918
+ const DiceRoll2 = t.uintRangeInclusive(1, 6, { defaultValue: 1 }); // integers from 1 to 6
919
+
920
+ type DiceRoll2 = t.TypeOf<typeof DiceRoll2>; // 1 | 2 | 3 | 4 | 5 | 6
920
921
  ```
921
922
 
922
923
  Tips: It is often better to use `uintRange` instead of `enumType` when possible, because `enumType` stores a Set of the sizes of its members as data, while `uintRange` only stores the range, resulting in smaller memory usage.
@@ -1077,8 +1078,10 @@ type ValidationError = Readonly<{
1077
1078
 
1078
1079
  - `t.TypeOf<T>` - Extract TypeScript type from validator
1079
1080
  - `t.enumType(values)` - Enum validation
1080
- - `t.uintRange({ start, end, defaultValue? })` - Non-negative integer range validation
1081
- - `t.intRange({ start, end, defaultValue? })` - Integer range validation
1081
+ - `t.uintRange(start, end, { defaultValue? })` - Non-negative integer range validation (`end` is exclusive)
1082
+ - `t.intRange(start, end, { defaultValue? })` - Integer range validation (`end` is exclusive)
1083
+ - `t.uintRangeInclusive(start, end, { defaultValue? })` - Non-negative integer range validation (`end` is inclusive)
1084
+ - `t.intRangeInclusive(start, end, { defaultValue? })` - Integer range validation (`end` is inclusive)
1082
1085
  - `t.unknown` - Unknown Type
1083
1086
  - `t.recursion(typeName, definition)` - Define recursive type
1084
1087
 
@@ -16,7 +16,9 @@ export { brandedString, simpleBrandedString } from './brand/branded-string.mjs';
16
16
  export { intersection } from './compose/intersection.mjs';
17
17
  export { union } from './compose/union.mjs';
18
18
  export { enumType } from './enum/enum.mjs';
19
+ export { intRangeInclusive } from './enum/int-range-inclusive.mjs';
19
20
  export { intRange } from './enum/int-range.mjs';
21
+ export { uintRangeInclusive } from './enum/uint-range-inclusive.mjs';
20
22
  export { uintRange } from './enum/uint-range.mjs';
21
23
  export { literal } from './other-types/literal.mjs';
22
24
  export { MapType } from './other-types/map.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"entry-point.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"entry-point.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,4 +1,6 @@
1
1
  export * from './enum.mjs';
2
+ export * from './int-range-inclusive.mjs';
2
3
  export * from './int-range.mjs';
4
+ export * from './uint-range-inclusive.mjs';
3
5
  export * from './uint-range.mjs';
4
6
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/enum/index.mts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/enum/index.mts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC"}
@@ -1,4 +1,6 @@
1
1
  export { enumType } from './enum.mjs';
2
+ export { intRangeInclusive } from './int-range-inclusive.mjs';
2
3
  export { intRange } from './int-range.mjs';
4
+ export { uintRangeInclusive } from './uint-range-inclusive.mjs';
3
5
  export { uintRange } from './uint-range.mjs';
4
6
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,13 @@
1
+ import { type Int11, type IntRangeInclusive } from 'ts-type-forge';
2
+ import { type Type } from '../type.mjs';
3
+ export type { IntRangeInclusive } from 'ts-type-forge';
4
+ export declare const intRangeInclusive: <Start extends Int11, End extends Int11>(...args: readonly [start: Start, end: End, options?: Readonly<{
5
+ typeName?: string;
6
+ defaultValue?: IntRangeInclusive<Start, End>;
7
+ }>] | readonly [options: Readonly<{
8
+ start: Start;
9
+ end: End;
10
+ typeName?: string;
11
+ defaultValue?: IntRangeInclusive<Start, End>;
12
+ }>]) => Type<IntRangeInclusive<Start, End>>;
13
+ //# sourceMappingURL=int-range-inclusive.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"int-range-inclusive.d.mts","sourceRoot":"","sources":["../../src/enum/int-range-inclusive.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAQxC,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD,eAAO,MAAM,iBAAiB,GAAI,KAAK,SAAS,KAAK,EAAE,GAAG,SAAS,KAAK,WAElE,SAAS,CACP,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE,QAAQ,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;CAC9C,CAAC,CACH,GACD,SAAS,CACP,OAAO,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;CAC9C,CAAC,CACH,KACJ,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAcpC,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { memoizeFunction, isNumber, Num, Result } from 'ts-data-forge';
2
+ import { createAssertFn } from '../utils/create-assert-fn.mjs';
3
+ import { createCastFn } from '../utils/create-cast-fn.mjs';
4
+ import { createIsFn } from '../utils/create-is-fn.mjs';
5
+ import '@sindresorhus/is';
6
+
7
+ const intRangeInclusive = (...args) => {
8
+ switch (args.length) {
9
+ case 1:
10
+ return intRangeInclusiveImpl(args[0].start, args[0].end, {
11
+ defaultValue: args[0].defaultValue,
12
+ typeName: args[0].typeName
13
+ });
14
+ case 2:
15
+ return intRangeInclusiveImpl(args[0], args[1]);
16
+ case 3:
17
+ return intRangeInclusiveImpl(args[0], args[1], args[2]);
18
+ }
19
+ };
20
+ const intRangeInclusiveImpl = (start, end, options) => {
21
+ const typeNameFilled = options?.typeName ?? `intRangeInclusive(${start}, ${end})`;
22
+ const getDefaultValue = memoizeFunction(
23
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
24
+ () => options?.defaultValue ?? start
25
+ );
26
+ const validate = (a) => {
27
+ if (!(isNumber(a) && Number.isSafeInteger(a) && Num.isInRangeInclusive(start, end)(a))) {
28
+ return Result.err([
29
+ {
30
+ path: [],
31
+ actualValue: a,
32
+ expectedType: typeNameFilled,
33
+ typeName: typeNameFilled,
34
+ details: {
35
+ kind: "integer-range-inclusive",
36
+ start,
37
+ endInclusive: end
38
+ }
39
+ }
40
+ ]);
41
+ }
42
+ return Result.ok(a);
43
+ };
44
+ const is = createIsFn(validate);
45
+ const fill = (a) => is(a) ? a : getDefaultValue();
46
+ return {
47
+ typeName: typeNameFilled,
48
+ get defaultValue() {
49
+ return getDefaultValue();
50
+ },
51
+ fill,
52
+ prune: (a) => a,
53
+ validate,
54
+ is,
55
+ assertIs: createAssertFn(validate),
56
+ cast: createCastFn(validate)
57
+ };
58
+ };
59
+
60
+ export { intRangeInclusive };
61
+ //# sourceMappingURL=int-range-inclusive.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"int-range-inclusive.mjs","sources":["../../src/enum/int-range-inclusive.mts"],"sourcesContent":["import { isNumber, memoizeFunction, Num, Result } from 'ts-data-forge';\nimport { type Int11, type IntRangeInclusive } from 'ts-type-forge';\nimport { type Type } from '../type.mjs';\nimport {\n createAssertFn,\n createCastFn,\n createIsFn,\n type ValidationError,\n} from '../utils/index.mjs';\n\nexport type { IntRangeInclusive } from 'ts-type-forge';\n\nexport const intRangeInclusive = <Start extends Int11, End extends Int11>(\n ...args:\n | readonly [\n start: Start,\n end: End,\n options?: Readonly<{\n typeName?: string;\n defaultValue?: IntRangeInclusive<Start, End>;\n }>,\n ]\n | readonly [\n options: Readonly<{\n start: Start;\n end: End;\n typeName?: string;\n defaultValue?: IntRangeInclusive<Start, End>;\n }>,\n ]\n): Type<IntRangeInclusive<Start, End>> => {\n switch (args.length) {\n case 1:\n return intRangeInclusiveImpl(args[0].start, args[0].end, {\n defaultValue: args[0].defaultValue,\n typeName: args[0].typeName,\n });\n\n case 2:\n return intRangeInclusiveImpl(args[0], args[1]);\n\n case 3:\n return intRangeInclusiveImpl(args[0], args[1], args[2]);\n }\n};\n\nconst intRangeInclusiveImpl = <Start extends Int11, End extends Int11>(\n start: Start,\n end: End,\n options?: Readonly<{\n typeName?: string;\n defaultValue?: IntRangeInclusive<Start, End>;\n }>,\n): Type<IntRangeInclusive<Start, End>> => {\n type T = IntRangeInclusive<Start, End>;\n\n const typeNameFilled =\n options?.typeName ?? `intRangeInclusive(${start}, ${end})`;\n\n const getDefaultValue = memoizeFunction(\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n (): T => options?.defaultValue ?? (start as T),\n );\n\n const validate: Type<T>['validate'] = (a) => {\n if (!(\n isNumber(a) &&\n Number.isSafeInteger(a) &&\n Num.isInRangeInclusive(start, end)(a)\n )) {\n return Result.err([\n {\n path: [],\n actualValue: a,\n expectedType: typeNameFilled,\n typeName: typeNameFilled,\n details: {\n kind: 'integer-range-inclusive',\n start,\n endInclusive: end,\n },\n } satisfies ValidationError,\n ]);\n }\n\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n return Result.ok(a as T);\n };\n\n const is = createIsFn<T>(validate);\n\n const fill: Type<T>['fill'] = (a) => (is(a) ? a : getDefaultValue());\n\n return {\n typeName: typeNameFilled,\n get defaultValue() {\n return getDefaultValue();\n },\n fill,\n prune: (a) => a,\n validate,\n is,\n assertIs: createAssertFn(validate),\n cast: createCastFn(validate),\n };\n};\n"],"names":[],"mappings":";;;;;;AAYO,MAAM,iBAAA,GAAoB,IAC5B,IAAA,KAiBqC;AACxC,EAAA,QAAQ,KAAK,MAAA;AAAQ,IACnB,KAAK,CAAA;AACH,MAAA,OAAO,qBAAA,CAAsB,KAAK,CAAC,CAAA,CAAE,OAAO,IAAA,CAAK,CAAC,EAAE,GAAA,EAAK;AAAA,QACvD,YAAA,EAAc,IAAA,CAAK,CAAC,CAAA,CAAE,YAAA;AAAA,QACtB,QAAA,EAAU,IAAA,CAAK,CAAC,CAAA,CAAE;AAAA,OACnB,CAAA;AAAA,IAEH,KAAK,CAAA;AACH,MAAA,OAAO,sBAAsB,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,IAE/C,KAAK,CAAA;AACH,MAAA,OAAO,qBAAA,CAAsB,KAAK,CAAC,CAAA,EAAG,KAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA;AAE5D;AAEA,MAAM,qBAAA,GAAwB,CAC5B,KAAA,EACA,GAAA,EACA,OAAA,KAIwC;AAGxC,EAAA,MAAM,iBACJ,OAAA,EAAS,QAAA,IAAY,CAAA,kBAAA,EAAqB,KAAK,KAAK,GAAG,CAAA,CAAA,CAAA;AAEzD,EAAA,MAAM,eAAA,GAAkB,eAAA;AAAA;AAAA,IAEtB,MAAS,SAAS,YAAA,IAAiB;AAAA,GACrC;AAEA,EAAA,MAAM,QAAA,GAAgC,CAAC,CAAA,KAAM;AAC3C,IAAA,IAAI,EACF,QAAA,CAAS,CAAC,CAAA,IACV,OAAO,aAAA,CAAc,CAAC,CAAA,IACtB,GAAA,CAAI,kBAAA,CAAmB,KAAA,EAAO,GAAG,CAAA,CAAE,CAAC,CAAA,CAAA,EACnC;AACD,MAAA,OAAO,OAAO,GAAA,CAAI;AAAA,QAChB;AAAA,UACE,MAAM,EAAC;AAAA,UACP,WAAA,EAAa,CAAA;AAAA,UACb,YAAA,EAAc,cAAA;AAAA,UACd,QAAA,EAAU,cAAA;AAAA,UACV,OAAA,EAAS;AAAA,YACP,IAAA,EAAM,yBAAA;AAAA,YACN,KAAA;AAAA,YACA,YAAA,EAAc;AAAA;AAChB;AACF,OACD,CAAA;AAAA,IACH;AAGA,IAAA,OAAO,MAAA,CAAO,GAAG,CAAM,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,EAAA,GAAK,WAAc,QAAQ,CAAA;AAEjC,EAAA,MAAM,OAAwB,CAAC,CAAA,KAAO,GAAG,CAAC,CAAA,GAAI,IAAI,eAAA,EAAgB;AAElE,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,cAAA;AAAA,IACV,IAAI,YAAA,GAAe;AACjB,MAAA,OAAO,eAAA,EAAgB;AAAA,IACzB,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA;AAAA,IACd,QAAA;AAAA,IACA,EAAA;AAAA,IACA,QAAA,EAAU,eAAe,QAAQ,CAAA;AAAA,IACjC,IAAA,EAAM,aAAa,QAAQ;AAAA,GAC7B;AACF,CAAA;;;;"}
@@ -1,14 +1,13 @@
1
- import { type BoolAnd, type Index, type IndexInclusive, type Int8, type NegativeIndex, type TypeExtends, type UintRange } from 'ts-type-forge';
1
+ import { type Int11, type IntRange } from 'ts-type-forge';
2
2
  import { type Type } from '../type.mjs';
3
- export declare const intRange: <Start extends Int8, End extends Int8 | 128>({ end, start, ...options }: Readonly<{
3
+ export type { IntRange } from 'ts-type-forge';
4
+ export declare const intRange: <Start extends Int11, End extends Int11 | 1024>(...args: readonly [start: Start, end: End, options?: Readonly<{
5
+ typeName?: string;
6
+ defaultValue?: IntRange<Start, End>;
7
+ }>] | readonly [options: Readonly<{
4
8
  start: Start;
5
9
  end: End;
6
10
  typeName?: string;
7
11
  defaultValue?: IntRange<Start, End>;
8
- }>) => Type<IntRange<Start, End>>;
9
- type NegativeRange = NegativeIndex<128>;
10
- type PositiveRange = IndexInclusive<128>;
11
- export type IntRange<Start extends Int8, End extends Int8 | 128> = BoolAnd<TypeExtends<Start, PositiveRange>, TypeExtends<End, PositiveRange>> extends true ? UintRange<Start, End> : BoolAnd<TypeExtends<Start, NegativeRange>, TypeExtends<End, PositiveRange>> extends true ? NegativeIndex<NegativeToPositive<Start>> | Index<End> : BoolAnd<TypeExtends<Start, PositiveRange>, TypeExtends<End, NegativeRange>> extends true ? never : BoolAnd<TypeExtends<Start, NegativeRange>, TypeExtends<End, NegativeRange>> extends true ? Exclude<NegativeIndex<NegativeToPositive<Start>>, NegativeIndex<NegativeToPositive<End>>> : never;
12
- type NegativeToPositive<N extends number> = `${N}` extends `-${infer D extends number}` ? D : never;
13
- export {};
12
+ }>]) => Type<IntRange<Start, End>>;
14
13
  //# sourceMappingURL=int-range.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"int-range.d.mts","sourceRoot":"","sources":["../../src/enum/int-range.mts"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,cAAc,EACnB,KAAK,IAAI,EACT,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAQxC,eAAO,MAAM,QAAQ,GAAI,KAAK,SAAS,IAAI,EAAE,GAAG,SAAS,IAAI,GAAG,GAAG,8BAIhE,QAAQ,CAAC;IACV,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;CACrC,CAAC,KAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAmD7B,CAAC;AAEF,KAAK,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;AAExC,KAAK,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;AAEzC,MAAM,MAAM,QAAQ,CAAC,KAAK,SAAS,IAAI,EAAE,GAAG,SAAS,IAAI,GAAG,GAAG,IAC7D,OAAO,CACL,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,EACjC,WAAW,CAAC,GAAG,EAAE,aAAa,CAAC,CAChC,SAAS,IAAI,GACV,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,GACrB,OAAO,CACH,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,EACjC,WAAW,CAAC,GAAG,EAAE,aAAa,CAAC,CAChC,SAAS,IAAI,GACd,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GACrD,OAAO,CACH,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,EACjC,WAAW,CAAC,GAAG,EAAE,aAAa,CAAC,CAChC,SAAS,IAAI,GACd,KAAK,GACL,OAAO,CACH,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,EACjC,WAAW,CAAC,GAAG,EAAE,aAAa,CAAC,CAChC,SAAS,IAAI,GACd,OAAO,CACL,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,EACxC,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CACvC,GACD,KAAK,CAAC;AAElB,KAAK,kBAAkB,CAAC,CAAC,SAAS,MAAM,IACtC,GAAG,CAAC,EAAE,SAAS,IAAI,MAAM,CAAC,SAAS,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"int-range.d.mts","sourceRoot":"","sources":["../../src/enum/int-range.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAQxC,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,eAAO,MAAM,QAAQ,GAAI,KAAK,SAAS,KAAK,EAAE,GAAG,SAAS,KAAK,GAAG,IAAI,WAEhE,SAAS,CACP,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE,QAAQ,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;CACrC,CAAC,CACH,GACD,SAAS,CACP,OAAO,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;CACrC,CAAC,CACH,KACJ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAc3B,CAAC"}
@@ -4,15 +4,24 @@ import { createCastFn } from '../utils/create-cast-fn.mjs';
4
4
  import { createIsFn } from '../utils/create-is-fn.mjs';
5
5
  import '@sindresorhus/is';
6
6
 
7
- const intRange = ({
8
- end,
9
- start,
10
- ...options
11
- }) => {
12
- const typeNameFilled = options.typeName ?? `intRange(${start}, ${end})`;
7
+ const intRange = (...args) => {
8
+ switch (args.length) {
9
+ case 1:
10
+ return intRangeImpl(args[0].start, args[0].end, {
11
+ defaultValue: args[0].defaultValue,
12
+ typeName: args[0].typeName
13
+ });
14
+ case 2:
15
+ return intRangeImpl(args[0], args[1]);
16
+ case 3:
17
+ return intRangeImpl(args[0], args[1], args[2]);
18
+ }
19
+ };
20
+ const intRangeImpl = (start, end, options) => {
21
+ const typeNameFilled = options?.typeName ?? `intRange(${start}, ${end})`;
13
22
  const getDefaultValue = memoizeFunction(
14
23
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
15
- () => options.defaultValue ?? start
24
+ () => options?.defaultValue ?? start
16
25
  );
17
26
  const validate = (a) => {
18
27
  if (!(isNumber(a) && Number.isSafeInteger(a) && Num.isInRange(start, end)(a))) {
@@ -1 +1 @@
1
- {"version":3,"file":"int-range.mjs","sources":["../../src/enum/int-range.mts"],"sourcesContent":["import {\n expectType,\n isNumber,\n memoizeFunction,\n Num,\n Result,\n} from 'ts-data-forge';\nimport {\n type BoolAnd,\n type Index,\n type IndexInclusive,\n type Int8,\n type NegativeIndex,\n type TypeExtends,\n type UintRange,\n} from 'ts-type-forge';\nimport { type Type } from '../type.mjs';\nimport {\n createAssertFn,\n createCastFn,\n createIsFn,\n type ValidationError,\n} from '../utils/index.mjs';\n\nexport const intRange = <Start extends Int8, End extends Int8 | 128>({\n end,\n start,\n ...options\n}: Readonly<{\n start: Start;\n end: End;\n typeName?: string;\n defaultValue?: IntRange<Start, End>;\n}>): Type<IntRange<Start, End>> => {\n type T = IntRange<Start, End>;\n\n const typeNameFilled = options.typeName ?? `intRange(${start}, ${end})`;\n\n const getDefaultValue = memoizeFunction(\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n (): T => options.defaultValue ?? (start as T),\n );\n\n const validate: Type<T>['validate'] = (a) => {\n if (!(\n isNumber(a) &&\n Number.isSafeInteger(a) &&\n Num.isInRange(start, end)(a)\n )) {\n return Result.err([\n {\n path: [],\n actualValue: a,\n expectedType: typeNameFilled,\n typeName: typeNameFilled,\n details: {\n kind: 'integer-range',\n start,\n endExclusive: end,\n },\n } satisfies ValidationError,\n ]);\n }\n\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n return Result.ok(a as T);\n };\n\n const is = createIsFn<T>(validate);\n\n const fill: Type<T>['fill'] = (a) => (is(a) ? a : getDefaultValue());\n\n return {\n typeName: typeNameFilled,\n get defaultValue() {\n return getDefaultValue();\n },\n fill,\n prune: (a) => a,\n validate,\n is,\n assertIs: createAssertFn(validate),\n cast: createCastFn(validate),\n };\n};\n\ntype NegativeRange = NegativeIndex<128>;\n\ntype PositiveRange = IndexInclusive<128>;\n\nexport type IntRange<Start extends Int8, End extends Int8 | 128> =\n BoolAnd<\n TypeExtends<Start, PositiveRange>,\n TypeExtends<End, PositiveRange>\n > extends true\n ? UintRange<Start, End>\n : BoolAnd<\n TypeExtends<Start, NegativeRange>,\n TypeExtends<End, PositiveRange>\n > extends true\n ? NegativeIndex<NegativeToPositive<Start>> | Index<End>\n : BoolAnd<\n TypeExtends<Start, PositiveRange>,\n TypeExtends<End, NegativeRange>\n > extends true\n ? never\n : BoolAnd<\n TypeExtends<Start, NegativeRange>,\n TypeExtends<End, NegativeRange>\n > extends true\n ? Exclude<\n NegativeIndex<NegativeToPositive<Start>>,\n NegativeIndex<NegativeToPositive<End>>\n >\n : never;\n\ntype NegativeToPositive<N extends number> =\n `${N}` extends `-${infer D extends number}` ? D : never;\n\nexpectType<NegativeToPositive<-3>, 3>('=');\n\nexpectType<IntRange<1, 5>, 1 | 2 | 3 | 4>('=');\n\nexpectType<IntRange<-3, 3>, -3 | -2 | -1 | 0 | 1 | 2>('=');\n\nexpectType<IntRange<3, -3>, never>('=');\n\nexpectType<IntRange<-5, -1>, -5 | -4 | -3 | -2>('=');\n"],"names":[],"mappings":";;;;;;AAwBO,MAAM,WAAW,CAA6C;AAAA,EACnE,GAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,KAKmC;AAGjC,EAAA,MAAM,iBAAiB,OAAA,CAAQ,QAAA,IAAY,CAAA,SAAA,EAAY,KAAK,KAAK,GAAG,CAAA,CAAA,CAAA;AAEpE,EAAA,MAAM,eAAA,GAAkB,eAAA;AAAA;AAAA,IAEtB,MAAS,QAAQ,YAAA,IAAiB;AAAA,GACpC;AAEA,EAAA,MAAM,QAAA,GAAgC,CAAC,CAAA,KAAM;AAC3C,IAAA,IAAI,EACF,QAAA,CAAS,CAAC,CAAA,IACV,OAAO,aAAA,CAAc,CAAC,CAAA,IACtB,GAAA,CAAI,SAAA,CAAU,KAAA,EAAO,GAAG,CAAA,CAAE,CAAC,CAAA,CAAA,EAC1B;AACD,MAAA,OAAO,OAAO,GAAA,CAAI;AAAA,QAChB;AAAA,UACE,MAAM,EAAC;AAAA,UACP,WAAA,EAAa,CAAA;AAAA,UACb,YAAA,EAAc,cAAA;AAAA,UACd,QAAA,EAAU,cAAA;AAAA,UACV,OAAA,EAAS;AAAA,YACP,IAAA,EAAM,eAAA;AAAA,YACN,KAAA;AAAA,YACA,YAAA,EAAc;AAAA;AAChB;AACF,OACD,CAAA;AAAA,IAAA;AAIH,IAAA,OAAO,MAAA,CAAO,GAAG,CAAM,CAAA;AAAA,EAAA,CACzB;AAEA,EAAA,MAAM,EAAA,GAAK,WAAc,QAAQ,CAAA;AAEjC,EAAA,MAAM,OAAwB,CAAC,CAAA,KAAO,GAAG,CAAC,CAAA,GAAI,IAAI,eAAA,EAAgB;AAElE,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,cAAA;AAAA,IACV,IAAI,YAAA,GAAe;AACjB,MAAA,OAAO,eAAA,EAAgB;AAAA,IAAA,CACzB;AAAA,IACA,IAAA;AAAA,IACA,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA;AAAA,IACd,QAAA;AAAA,IACA,EAAA;AAAA,IACA,QAAA,EAAU,eAAe,QAAQ,CAAA;AAAA,IACjC,IAAA,EAAM,aAAa,QAAQ;AAAA,GAC7B;AACF;;;;"}
1
+ {"version":3,"file":"int-range.mjs","sources":["../../src/enum/int-range.mts"],"sourcesContent":["import { isNumber, memoizeFunction, Num, Result } from 'ts-data-forge';\nimport { type Int11, type IntRange } from 'ts-type-forge';\nimport { type Type } from '../type.mjs';\nimport {\n createAssertFn,\n createCastFn,\n createIsFn,\n type ValidationError,\n} from '../utils/index.mjs';\n\nexport type { IntRange } from 'ts-type-forge';\n\nexport const intRange = <Start extends Int11, End extends Int11 | 1024>(\n ...args:\n | readonly [\n start: Start,\n end: End,\n options?: Readonly<{\n typeName?: string;\n defaultValue?: IntRange<Start, End>;\n }>,\n ]\n | readonly [\n options: Readonly<{\n start: Start;\n end: End;\n typeName?: string;\n defaultValue?: IntRange<Start, End>;\n }>,\n ]\n): Type<IntRange<Start, End>> => {\n switch (args.length) {\n case 1:\n return intRangeImpl(args[0].start, args[0].end, {\n defaultValue: args[0].defaultValue,\n typeName: args[0].typeName,\n });\n\n case 2:\n return intRangeImpl(args[0], args[1]);\n\n case 3:\n return intRangeImpl(args[0], args[1], args[2]);\n }\n};\n\nconst intRangeImpl = <Start extends Int11, End extends Int11 | 1024>(\n start: Start,\n end: End,\n options?: Readonly<{\n typeName?: string;\n defaultValue?: IntRange<Start, End>;\n }>,\n): Type<IntRange<Start, End>> => {\n type T = IntRange<Start, End>;\n\n const typeNameFilled = options?.typeName ?? `intRange(${start}, ${end})`;\n\n const getDefaultValue = memoizeFunction(\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n (): T => options?.defaultValue ?? (start as T),\n );\n\n const validate: Type<T>['validate'] = (a) => {\n if (!(\n isNumber(a) &&\n Number.isSafeInteger(a) &&\n Num.isInRange(start, end)(a)\n )) {\n return Result.err([\n {\n path: [],\n actualValue: a,\n expectedType: typeNameFilled,\n typeName: typeNameFilled,\n details: {\n kind: 'integer-range',\n start,\n endExclusive: end,\n },\n } satisfies ValidationError,\n ]);\n }\n\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n return Result.ok(a as T);\n };\n\n const is = createIsFn<T>(validate);\n\n const fill: Type<T>['fill'] = (a) => (is(a) ? a : getDefaultValue());\n\n return {\n typeName: typeNameFilled,\n get defaultValue() {\n return getDefaultValue();\n },\n fill,\n prune: (a) => a,\n validate,\n is,\n assertIs: createAssertFn(validate),\n cast: createCastFn(validate),\n };\n};\n"],"names":[],"mappings":";;;;;;AAYO,MAAM,QAAA,GAAW,IACnB,IAAA,KAiB4B;AAC/B,EAAA,QAAQ,KAAK,MAAA;AAAQ,IACnB,KAAK,CAAA;AACH,MAAA,OAAO,YAAA,CAAa,KAAK,CAAC,CAAA,CAAE,OAAO,IAAA,CAAK,CAAC,EAAE,GAAA,EAAK;AAAA,QAC9C,YAAA,EAAc,IAAA,CAAK,CAAC,CAAA,CAAE,YAAA;AAAA,QACtB,QAAA,EAAU,IAAA,CAAK,CAAC,CAAA,CAAE;AAAA,OACnB,CAAA;AAAA,IAEH,KAAK,CAAA;AACH,MAAA,OAAO,aAAa,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,IAEtC,KAAK,CAAA;AACH,MAAA,OAAO,YAAA,CAAa,KAAK,CAAC,CAAA,EAAG,KAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA;AAEnD;AAEA,MAAM,YAAA,GAAe,CACnB,KAAA,EACA,GAAA,EACA,OAAA,KAI+B;AAG/B,EAAA,MAAM,iBAAiB,OAAA,EAAS,QAAA,IAAY,CAAA,SAAA,EAAY,KAAK,KAAK,GAAG,CAAA,CAAA,CAAA;AAErE,EAAA,MAAM,eAAA,GAAkB,eAAA;AAAA;AAAA,IAEtB,MAAS,SAAS,YAAA,IAAiB;AAAA,GACrC;AAEA,EAAA,MAAM,QAAA,GAAgC,CAAC,CAAA,KAAM;AAC3C,IAAA,IAAI,EACF,QAAA,CAAS,CAAC,CAAA,IACV,OAAO,aAAA,CAAc,CAAC,CAAA,IACtB,GAAA,CAAI,SAAA,CAAU,KAAA,EAAO,GAAG,CAAA,CAAE,CAAC,CAAA,CAAA,EAC1B;AACD,MAAA,OAAO,OAAO,GAAA,CAAI;AAAA,QAChB;AAAA,UACE,MAAM,EAAC;AAAA,UACP,WAAA,EAAa,CAAA;AAAA,UACb,YAAA,EAAc,cAAA;AAAA,UACd,QAAA,EAAU,cAAA;AAAA,UACV,OAAA,EAAS;AAAA,YACP,IAAA,EAAM,eAAA;AAAA,YACN,KAAA;AAAA,YACA,YAAA,EAAc;AAAA;AAChB;AACF,OACD,CAAA;AAAA,IACH;AAGA,IAAA,OAAO,MAAA,CAAO,GAAG,CAAM,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,EAAA,GAAK,WAAc,QAAQ,CAAA;AAEjC,EAAA,MAAM,OAAwB,CAAC,CAAA,KAAO,GAAG,CAAC,CAAA,GAAI,IAAI,eAAA,EAAgB;AAElE,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,cAAA;AAAA,IACV,IAAI,YAAA,GAAe;AACjB,MAAA,OAAO,eAAA,EAAgB;AAAA,IACzB,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA;AAAA,IACd,QAAA;AAAA,IACA,EAAA;AAAA,IACA,QAAA,EAAU,eAAe,QAAQ,CAAA;AAAA,IACjC,IAAA,EAAM,aAAa,QAAQ;AAAA,GAC7B;AACF,CAAA;;;;"}
@@ -0,0 +1,13 @@
1
+ import { type Uint11, type UintRangeInclusive } from 'ts-type-forge';
2
+ import { type Type } from '../type.mjs';
3
+ export type { UintRangeInclusive } from 'ts-type-forge';
4
+ export declare const uintRangeInclusive: <Start extends Uint11, End extends Uint11>(...args: readonly [start: Start, end: End, options?: Readonly<{
5
+ typeName?: string;
6
+ defaultValue?: UintRangeInclusive<Start, End>;
7
+ }>] | readonly [options: Readonly<{
8
+ start: Start;
9
+ end: End;
10
+ typeName?: string;
11
+ defaultValue?: UintRangeInclusive<Start, End>;
12
+ }>]) => Type<UintRangeInclusive<Start, End>>;
13
+ //# sourceMappingURL=uint-range-inclusive.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uint-range-inclusive.d.mts","sourceRoot":"","sources":["../../src/enum/uint-range-inclusive.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAQxC,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,eAAO,MAAM,kBAAkB,GAAI,KAAK,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,WAErE,SAAS,CACP,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE,QAAQ,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;CAC/C,CAAC,CACH,GACD,SAAS,CACP,OAAO,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;CAC/C,CAAC,CACH,KACJ,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAcrC,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { memoizeFunction, isNumber, Num, Result } from 'ts-data-forge';
2
+ import { createAssertFn } from '../utils/create-assert-fn.mjs';
3
+ import { createCastFn } from '../utils/create-cast-fn.mjs';
4
+ import { createIsFn } from '../utils/create-is-fn.mjs';
5
+ import '@sindresorhus/is';
6
+
7
+ const uintRangeInclusive = (...args) => {
8
+ switch (args.length) {
9
+ case 1:
10
+ return uintRangeInclusiveImpl(args[0].start, args[0].end, {
11
+ defaultValue: args[0].defaultValue,
12
+ typeName: args[0].typeName
13
+ });
14
+ case 2:
15
+ return uintRangeInclusiveImpl(args[0], args[1]);
16
+ case 3:
17
+ return uintRangeInclusiveImpl(args[0], args[1], args[2]);
18
+ }
19
+ };
20
+ const uintRangeInclusiveImpl = (start, end, options) => {
21
+ const typeNameFilled = options?.typeName ?? `uintRangeInclusive(${start}, ${end})`;
22
+ const getDefaultValue = memoizeFunction(
23
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
24
+ () => options?.defaultValue ?? start
25
+ );
26
+ const validate = (a) => {
27
+ if (!(isNumber(a) && Number.isSafeInteger(a) && Num.isInRangeInclusive(start, end)(a))) {
28
+ return Result.err([
29
+ {
30
+ path: [],
31
+ actualValue: a,
32
+ expectedType: typeNameFilled,
33
+ typeName: typeNameFilled,
34
+ details: {
35
+ kind: "integer-range-inclusive",
36
+ start,
37
+ endInclusive: end
38
+ }
39
+ }
40
+ ]);
41
+ }
42
+ return Result.ok(a);
43
+ };
44
+ const is = createIsFn(validate);
45
+ const fill = (a) => is(a) ? a : getDefaultValue();
46
+ return {
47
+ typeName: typeNameFilled,
48
+ get defaultValue() {
49
+ return getDefaultValue();
50
+ },
51
+ fill,
52
+ prune: (a) => a,
53
+ validate,
54
+ is,
55
+ assertIs: createAssertFn(validate),
56
+ cast: createCastFn(validate)
57
+ };
58
+ };
59
+
60
+ export { uintRangeInclusive };
61
+ //# sourceMappingURL=uint-range-inclusive.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uint-range-inclusive.mjs","sources":["../../src/enum/uint-range-inclusive.mts"],"sourcesContent":["import { isNumber, memoizeFunction, Num, Result } from 'ts-data-forge';\nimport { type Uint11, type UintRangeInclusive } from 'ts-type-forge';\nimport { type Type } from '../type.mjs';\nimport {\n createAssertFn,\n createCastFn,\n createIsFn,\n type ValidationError,\n} from '../utils/index.mjs';\n\nexport type { UintRangeInclusive } from 'ts-type-forge';\n\nexport const uintRangeInclusive = <Start extends Uint11, End extends Uint11>(\n ...args:\n | readonly [\n start: Start,\n end: End,\n options?: Readonly<{\n typeName?: string;\n defaultValue?: UintRangeInclusive<Start, End>;\n }>,\n ]\n | readonly [\n options: Readonly<{\n start: Start;\n end: End;\n typeName?: string;\n defaultValue?: UintRangeInclusive<Start, End>;\n }>,\n ]\n): Type<UintRangeInclusive<Start, End>> => {\n switch (args.length) {\n case 1:\n return uintRangeInclusiveImpl(args[0].start, args[0].end, {\n defaultValue: args[0].defaultValue,\n typeName: args[0].typeName,\n });\n\n case 2:\n return uintRangeInclusiveImpl(args[0], args[1]);\n\n case 3:\n return uintRangeInclusiveImpl(args[0], args[1], args[2]);\n }\n};\n\nconst uintRangeInclusiveImpl = <Start extends Uint11, End extends Uint11>(\n start: Start,\n end: End,\n options?: Readonly<{\n typeName?: string;\n defaultValue?: UintRangeInclusive<Start, End>;\n }>,\n): Type<UintRangeInclusive<Start, End>> => {\n type T = UintRangeInclusive<Start, End>;\n\n const typeNameFilled =\n options?.typeName ?? `uintRangeInclusive(${start}, ${end})`;\n\n const getDefaultValue = memoizeFunction(\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n (): T => options?.defaultValue ?? (start as T),\n );\n\n const validate: Type<T>['validate'] = (a) => {\n if (!(\n isNumber(a) &&\n Number.isSafeInteger(a) &&\n Num.isInRangeInclusive(start, end)(a)\n )) {\n return Result.err([\n {\n path: [],\n actualValue: a,\n expectedType: typeNameFilled,\n typeName: typeNameFilled,\n details: {\n kind: 'integer-range-inclusive',\n start,\n endInclusive: end,\n },\n } satisfies ValidationError,\n ]);\n }\n\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n return Result.ok(a as T);\n };\n\n const is = createIsFn<T>(validate);\n\n const fill: Type<T>['fill'] = (a) => (is(a) ? a : getDefaultValue());\n\n return {\n typeName: typeNameFilled,\n get defaultValue() {\n return getDefaultValue();\n },\n fill,\n prune: (a) => a,\n validate,\n is,\n assertIs: createAssertFn(validate),\n cast: createCastFn(validate),\n };\n};\n"],"names":[],"mappings":";;;;;;AAYO,MAAM,kBAAA,GAAqB,IAC7B,IAAA,KAiBsC;AACzC,EAAA,QAAQ,KAAK,MAAA;AAAQ,IACnB,KAAK,CAAA;AACH,MAAA,OAAO,sBAAA,CAAuB,KAAK,CAAC,CAAA,CAAE,OAAO,IAAA,CAAK,CAAC,EAAE,GAAA,EAAK;AAAA,QACxD,YAAA,EAAc,IAAA,CAAK,CAAC,CAAA,CAAE,YAAA;AAAA,QACtB,QAAA,EAAU,IAAA,CAAK,CAAC,CAAA,CAAE;AAAA,OACnB,CAAA;AAAA,IAEH,KAAK,CAAA;AACH,MAAA,OAAO,uBAAuB,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,IAEhD,KAAK,CAAA;AACH,MAAA,OAAO,sBAAA,CAAuB,KAAK,CAAC,CAAA,EAAG,KAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA;AAE7D;AAEA,MAAM,sBAAA,GAAyB,CAC7B,KAAA,EACA,GAAA,EACA,OAAA,KAIyC;AAGzC,EAAA,MAAM,iBACJ,OAAA,EAAS,QAAA,IAAY,CAAA,mBAAA,EAAsB,KAAK,KAAK,GAAG,CAAA,CAAA,CAAA;AAE1D,EAAA,MAAM,eAAA,GAAkB,eAAA;AAAA;AAAA,IAEtB,MAAS,SAAS,YAAA,IAAiB;AAAA,GACrC;AAEA,EAAA,MAAM,QAAA,GAAgC,CAAC,CAAA,KAAM;AAC3C,IAAA,IAAI,EACF,QAAA,CAAS,CAAC,CAAA,IACV,OAAO,aAAA,CAAc,CAAC,CAAA,IACtB,GAAA,CAAI,kBAAA,CAAmB,KAAA,EAAO,GAAG,CAAA,CAAE,CAAC,CAAA,CAAA,EACnC;AACD,MAAA,OAAO,OAAO,GAAA,CAAI;AAAA,QAChB;AAAA,UACE,MAAM,EAAC;AAAA,UACP,WAAA,EAAa,CAAA;AAAA,UACb,YAAA,EAAc,cAAA;AAAA,UACd,QAAA,EAAU,cAAA;AAAA,UACV,OAAA,EAAS;AAAA,YACP,IAAA,EAAM,yBAAA;AAAA,YACN,KAAA;AAAA,YACA,YAAA,EAAc;AAAA;AAChB;AACF,OACD,CAAA;AAAA,IACH;AAGA,IAAA,OAAO,MAAA,CAAO,GAAG,CAAM,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,EAAA,GAAK,WAAc,QAAQ,CAAA;AAEjC,EAAA,MAAM,OAAwB,CAAC,CAAA,KAAO,GAAG,CAAC,CAAA,GAAI,IAAI,eAAA,EAAgB;AAElE,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,cAAA;AAAA,IACV,IAAI,YAAA,GAAe;AACjB,MAAA,OAAO,eAAA,EAAgB;AAAA,IACzB,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA;AAAA,IACd,QAAA;AAAA,IACA,EAAA;AAAA,IACA,QAAA,EAAU,eAAe,QAAQ,CAAA;AAAA,IACjC,IAAA,EAAM,aAAa,QAAQ;AAAA,GAC7B;AACF,CAAA;;;;"}
@@ -1,10 +1,13 @@
1
- import { type Uint8, type UintRange } from 'ts-type-forge';
1
+ import { type Uint11, type UintRange } from 'ts-type-forge';
2
2
  import { type Type } from '../type.mjs';
3
3
  export type { UintRange } from 'ts-type-forge';
4
- export declare const uintRange: <Start extends Uint8, End extends Exclude<Uint8 | 256, Start>>({ end, start, ...options }: Readonly<{
4
+ export declare const uintRange: <Start extends Uint11, End extends Exclude<Uint11 | 2048, Start>>(...args: readonly [start: Start, end: End, options?: Readonly<{
5
+ typeName?: string;
6
+ defaultValue?: UintRange<Start, End>;
7
+ }>] | readonly [options: Readonly<{
5
8
  start: Start;
6
9
  end: End;
7
10
  typeName?: string;
8
11
  defaultValue?: UintRange<Start, End>;
9
- }>) => Type<UintRange<Start, End>>;
12
+ }>]) => Type<UintRange<Start, End>>;
10
13
  //# sourceMappingURL=uint-range.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uint-range.d.mts","sourceRoot":"","sources":["../../src/enum/uint-range.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAQxC,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,eAAO,MAAM,SAAS,GACpB,KAAK,SAAS,KAAK,EACnB,GAAG,SAAS,OAAO,CAAC,KAAK,GAAG,GAAG,EAAE,KAAK,CAAC,8BAKtC,QAAQ,CAAC;IACV,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;CACtC,CAAC,KAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAmD9B,CAAC"}
1
+ {"version":3,"file":"uint-range.d.mts","sourceRoot":"","sources":["../../src/enum/uint-range.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAQxC,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,eAAO,MAAM,SAAS,GACpB,KAAK,SAAS,MAAM,EACpB,GAAG,SAAS,OAAO,CAAC,MAAM,GAAG,IAAI,EAAE,KAAK,CAAC,WAGrC,SAAS,CACP,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE,QAAQ,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;CACtC,CAAC,CACH,GACD,SAAS,CACP,OAAO,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;CACtC,CAAC,CACH,KACJ,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAc5B,CAAC"}
@@ -4,15 +4,24 @@ import { createCastFn } from '../utils/create-cast-fn.mjs';
4
4
  import { createIsFn } from '../utils/create-is-fn.mjs';
5
5
  import '@sindresorhus/is';
6
6
 
7
- const uintRange = ({
8
- end,
9
- start,
10
- ...options
11
- }) => {
12
- const typeNameFilled = options.typeName ?? `uintRange(${start}, ${end})`;
7
+ const uintRange = (...args) => {
8
+ switch (args.length) {
9
+ case 1:
10
+ return uintRangeImpl(args[0].start, args[0].end, {
11
+ defaultValue: args[0].defaultValue,
12
+ typeName: args[0].typeName
13
+ });
14
+ case 2:
15
+ return uintRangeImpl(args[0], args[1]);
16
+ case 3:
17
+ return uintRangeImpl(args[0], args[1], args[2]);
18
+ }
19
+ };
20
+ const uintRangeImpl = (start, end, options) => {
21
+ const typeNameFilled = options?.typeName ?? `uintRange(${start}, ${end})`;
13
22
  const getDefaultValue = memoizeFunction(
14
23
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
15
- () => options.defaultValue ?? start
24
+ () => options?.defaultValue ?? start
16
25
  );
17
26
  const validate = (a) => {
18
27
  if (!(isNumber(a) && Number.isSafeInteger(a) && Num.isInRange(start, end)(a))) {
@@ -1 +1 @@
1
- {"version":3,"file":"uint-range.mjs","sources":["../../src/enum/uint-range.mts"],"sourcesContent":["import { isNumber, memoizeFunction, Num, Result } from 'ts-data-forge';\nimport { type Uint8, type UintRange } from 'ts-type-forge';\nimport { type Type } from '../type.mjs';\nimport {\n createAssertFn,\n createCastFn,\n createIsFn,\n type ValidationError,\n} from '../utils/index.mjs';\n\nexport type { UintRange } from 'ts-type-forge';\n\nexport const uintRange = <\n Start extends Uint8,\n End extends Exclude<Uint8 | 256, Start>,\n>({\n end,\n start,\n ...options\n}: Readonly<{\n start: Start;\n end: End;\n typeName?: string;\n defaultValue?: UintRange<Start, End>;\n}>): Type<UintRange<Start, End>> => {\n type T = UintRange<Start, End>;\n\n const typeNameFilled = options.typeName ?? `uintRange(${start}, ${end})`;\n\n const getDefaultValue = memoizeFunction(\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n (): T => options.defaultValue ?? (start as T),\n );\n\n const validate: Type<T>['validate'] = (a) => {\n if (!(\n isNumber(a) &&\n Number.isSafeInteger(a) &&\n Num.isInRange(start, end)(a)\n )) {\n return Result.err([\n {\n path: [],\n actualValue: a,\n expectedType: typeNameFilled,\n typeName: typeNameFilled,\n details: {\n kind: 'integer-range',\n start,\n endExclusive: end,\n },\n } satisfies ValidationError,\n ]);\n }\n\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n return Result.ok(a as T);\n };\n\n const is = createIsFn<T>(validate);\n\n const fill: Type<T>['fill'] = (a) => (is(a) ? a : getDefaultValue());\n\n return {\n typeName: typeNameFilled,\n get defaultValue() {\n return getDefaultValue();\n },\n fill,\n prune: (a) => a,\n validate,\n is,\n assertIs: createAssertFn(validate),\n cast: createCastFn(validate),\n };\n};\n"],"names":[],"mappings":";;;;;;AAYO,MAAM,YAAY,CAGvB;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,KAKoC;AAGlC,EAAA,MAAM,iBAAiB,OAAA,CAAQ,QAAA,IAAY,CAAA,UAAA,EAAa,KAAK,KAAK,GAAG,CAAA,CAAA,CAAA;AAErE,EAAA,MAAM,eAAA,GAAkB,eAAA;AAAA;AAAA,IAEtB,MAAS,QAAQ,YAAA,IAAiB;AAAA,GACpC;AAEA,EAAA,MAAM,QAAA,GAAgC,CAAC,CAAA,KAAM;AAC3C,IAAA,IAAI,EACF,QAAA,CAAS,CAAC,CAAA,IACV,OAAO,aAAA,CAAc,CAAC,CAAA,IACtB,GAAA,CAAI,SAAA,CAAU,KAAA,EAAO,GAAG,CAAA,CAAE,CAAC,CAAA,CAAA,EAC1B;AACD,MAAA,OAAO,OAAO,GAAA,CAAI;AAAA,QAChB;AAAA,UACE,MAAM,EAAC;AAAA,UACP,WAAA,EAAa,CAAA;AAAA,UACb,YAAA,EAAc,cAAA;AAAA,UACd,QAAA,EAAU,cAAA;AAAA,UACV,OAAA,EAAS;AAAA,YACP,IAAA,EAAM,eAAA;AAAA,YACN,KAAA;AAAA,YACA,YAAA,EAAc;AAAA;AAChB;AACF,OACD,CAAA;AAAA,IACH;AAGA,IAAA,OAAO,MAAA,CAAO,GAAG,CAAM,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,EAAA,GAAK,WAAc,QAAQ,CAAA;AAEjC,EAAA,MAAM,OAAwB,CAAC,CAAA,KAAO,GAAG,CAAC,CAAA,GAAI,IAAI,eAAA,EAAgB;AAElE,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,cAAA;AAAA,IACV,IAAI,YAAA,GAAe;AACjB,MAAA,OAAO,eAAA,EAAgB;AAAA,IACzB,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA;AAAA,IACd,QAAA;AAAA,IACA,EAAA;AAAA,IACA,QAAA,EAAU,eAAe,QAAQ,CAAA;AAAA,IACjC,IAAA,EAAM,aAAa,QAAQ;AAAA,GAC7B;AACF;;;;"}
1
+ {"version":3,"file":"uint-range.mjs","sources":["../../src/enum/uint-range.mts"],"sourcesContent":["import { isNumber, memoizeFunction, Num, Result } from 'ts-data-forge';\nimport { type Uint11, type UintRange } from 'ts-type-forge';\nimport { type Type } from '../type.mjs';\nimport {\n createAssertFn,\n createCastFn,\n createIsFn,\n type ValidationError,\n} from '../utils/index.mjs';\n\nexport type { UintRange } from 'ts-type-forge';\n\nexport const uintRange = <\n Start extends Uint11,\n End extends Exclude<Uint11 | 2048, Start>,\n>(\n ...args:\n | readonly [\n start: Start,\n end: End,\n options?: Readonly<{\n typeName?: string;\n defaultValue?: UintRange<Start, End>;\n }>,\n ]\n | readonly [\n options: Readonly<{\n start: Start;\n end: End;\n typeName?: string;\n defaultValue?: UintRange<Start, End>;\n }>,\n ]\n): Type<UintRange<Start, End>> => {\n switch (args.length) {\n case 1:\n return uintRangeImpl(args[0].start, args[0].end, {\n defaultValue: args[0].defaultValue,\n typeName: args[0].typeName,\n });\n\n case 2:\n return uintRangeImpl(args[0], args[1]);\n\n case 3:\n return uintRangeImpl(args[0], args[1], args[2]);\n }\n};\n\nconst uintRangeImpl = <\n Start extends Uint11,\n End extends Exclude<Uint11 | 2048, Start>,\n>(\n start: Start,\n end: End,\n options?: Readonly<{\n typeName?: string;\n defaultValue?: UintRange<Start, End>;\n }>,\n): Type<UintRange<Start, End>> => {\n type T = UintRange<Start, End>;\n\n const typeNameFilled = options?.typeName ?? `uintRange(${start}, ${end})`;\n\n const getDefaultValue = memoizeFunction(\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n (): T => options?.defaultValue ?? (start as T),\n );\n\n const validate: Type<T>['validate'] = (a) => {\n if (!(\n isNumber(a) &&\n Number.isSafeInteger(a) &&\n Num.isInRange(start, end)(a)\n )) {\n return Result.err([\n {\n path: [],\n actualValue: a,\n expectedType: typeNameFilled,\n typeName: typeNameFilled,\n details: {\n kind: 'integer-range',\n start,\n endExclusive: end,\n },\n } satisfies ValidationError,\n ]);\n }\n\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n return Result.ok(a as T);\n };\n\n const is = createIsFn<T>(validate);\n\n const fill: Type<T>['fill'] = (a) => (is(a) ? a : getDefaultValue());\n\n return {\n typeName: typeNameFilled,\n get defaultValue() {\n return getDefaultValue();\n },\n fill,\n prune: (a) => a,\n validate,\n is,\n assertIs: createAssertFn(validate),\n cast: createCastFn(validate),\n };\n};\n"],"names":[],"mappings":";;;;;;AAYO,MAAM,SAAA,GAAY,IAIpB,IAAA,KAiB6B;AAChC,EAAA,QAAQ,KAAK,MAAA;AAAQ,IACnB,KAAK,CAAA;AACH,MAAA,OAAO,aAAA,CAAc,KAAK,CAAC,CAAA,CAAE,OAAO,IAAA,CAAK,CAAC,EAAE,GAAA,EAAK;AAAA,QAC/C,YAAA,EAAc,IAAA,CAAK,CAAC,CAAA,CAAE,YAAA;AAAA,QACtB,QAAA,EAAU,IAAA,CAAK,CAAC,CAAA,CAAE;AAAA,OACnB,CAAA;AAAA,IAEH,KAAK,CAAA;AACH,MAAA,OAAO,cAAc,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,IAEvC,KAAK,CAAA;AACH,MAAA,OAAO,aAAA,CAAc,KAAK,CAAC,CAAA,EAAG,KAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA;AAEpD;AAEA,MAAM,aAAA,GAAgB,CAIpB,KAAA,EACA,GAAA,EACA,OAAA,KAIgC;AAGhC,EAAA,MAAM,iBAAiB,OAAA,EAAS,QAAA,IAAY,CAAA,UAAA,EAAa,KAAK,KAAK,GAAG,CAAA,CAAA,CAAA;AAEtE,EAAA,MAAM,eAAA,GAAkB,eAAA;AAAA;AAAA,IAEtB,MAAS,SAAS,YAAA,IAAiB;AAAA,GACrC;AAEA,EAAA,MAAM,QAAA,GAAgC,CAAC,CAAA,KAAM;AAC3C,IAAA,IAAI,EACF,QAAA,CAAS,CAAC,CAAA,IACV,OAAO,aAAA,CAAc,CAAC,CAAA,IACtB,GAAA,CAAI,SAAA,CAAU,KAAA,EAAO,GAAG,CAAA,CAAE,CAAC,CAAA,CAAA,EAC1B;AACD,MAAA,OAAO,OAAO,GAAA,CAAI;AAAA,QAChB;AAAA,UACE,MAAM,EAAC;AAAA,UACP,WAAA,EAAa,CAAA;AAAA,UACb,YAAA,EAAc,cAAA;AAAA,UACd,QAAA,EAAU,cAAA;AAAA,UACV,OAAA,EAAS;AAAA,YACP,IAAA,EAAM,eAAA;AAAA,YACN,KAAA;AAAA,YACA,YAAA,EAAc;AAAA;AAChB;AACF,OACD,CAAA;AAAA,IACH;AAGA,IAAA,OAAO,MAAA,CAAO,GAAG,CAAM,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,EAAA,GAAK,WAAc,QAAQ,CAAA;AAEjC,EAAA,MAAM,OAAwB,CAAC,CAAA,KAAO,GAAG,CAAC,CAAA,GAAI,IAAI,eAAA,EAAgB;AAElE,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,cAAA;AAAA,IACV,IAAI,YAAA,GAAe;AACjB,MAAA,OAAO,eAAA,EAAgB;AAAA,IACzB,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA;AAAA,IACd,QAAA;AAAA,IACA,EAAA;AAAA,IACA,QAAA,EAAU,eAAe,QAAQ,CAAA;AAAA,IACjC,IAAA,EAAM,aAAa,QAAQ;AAAA,GAC7B;AACF,CAAA;;;;"}
package/dist/index.mjs CHANGED
@@ -15,7 +15,9 @@ export { brandedString, simpleBrandedString } from './brand/branded-string.mjs';
15
15
  export { intersection } from './compose/intersection.mjs';
16
16
  export { union } from './compose/union.mjs';
17
17
  export { enumType } from './enum/enum.mjs';
18
+ export { intRangeInclusive } from './enum/int-range-inclusive.mjs';
18
19
  export { intRange } from './enum/int-range.mjs';
20
+ export { uintRangeInclusive } from './enum/uint-range-inclusive.mjs';
19
21
  export { uintRange } from './enum/uint-range.mjs';
20
22
  export { literal } from './other-types/literal.mjs';
21
23
  export { MapType } from './other-types/map.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"int8.d.mts","sourceRoot":"","sources":["../../src/predefined/int8.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,eAAO,MAAM,IAAI,kBAAkB,IAAI,KAAO,IAAI,CAAC,IAAI,CAKnD,CAAC"}
1
+ {"version":3,"file":"int8.d.mts","sourceRoot":"","sources":["../../src/predefined/int8.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,eAAO,MAAM,IAAI,kBAAkB,IAAI,KAAO,IAAI,CAAC,IAAI,CAChB,CAAC"}
@@ -3,11 +3,7 @@ import '@sindresorhus/is';
3
3
  import '../other-types/unknown.mjs';
4
4
  import { intRange } from '../enum/int-range.mjs';
5
5
 
6
- const int8 = (defaultValue = 0) => intRange({
7
- start: -128,
8
- end: 128,
9
- defaultValue
10
- });
6
+ const int8 = (defaultValue = 0) => intRange(-128, 128, { defaultValue });
11
7
 
12
8
  export { int8 };
13
9
  //# sourceMappingURL=int8.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"int8.mjs","sources":["../../src/predefined/int8.mts"],"sourcesContent":["import { type Int8 } from 'ts-type-forge';\nimport { intRange } from '../enum/index.mjs';\nimport { type Type } from '../type.mjs';\n\nexport const int8 = (defaultValue: Int8 = 0): Type<Int8> =>\n intRange({\n start: -128,\n end: 128,\n defaultValue,\n });\n"],"names":[],"mappings":";;;;;AAIO,MAAM,IAAA,GAAO,CAAC,YAAA,GAAqB,CAAA,KACxC,QAAA,CAAS;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,GAAA,EAAK,GAAA;AAAA,EACL;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"int8.mjs","sources":["../../src/predefined/int8.mts"],"sourcesContent":["import { type Int8 } from 'ts-type-forge';\nimport { intRange } from '../enum/index.mjs';\nimport { type Type } from '../type.mjs';\n\nexport const int8 = (defaultValue: Int8 = 0): Type<Int8> =>\n intRange(-128, 128, { defaultValue });\n"],"names":[],"mappings":";;;;;AAIO,MAAM,IAAA,GAAO,CAAC,YAAA,GAAqB,CAAA,KACxC,SAAS,IAAA,EAAM,GAAA,EAAK,EAAE,YAAA,EAAc;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"uint8.d.mts","sourceRoot":"","sources":["../../src/predefined/uint8.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,eAAO,MAAM,KAAK,kBAAkB,KAAK,KAAO,IAAI,CAAC,KAAK,CAKtD,CAAC"}
1
+ {"version":3,"file":"uint8.d.mts","sourceRoot":"","sources":["../../src/predefined/uint8.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,eAAO,MAAM,KAAK,kBAAkB,KAAK,KAAO,IAAI,CAAC,KAAK,CACrB,CAAC"}
@@ -3,11 +3,7 @@ import '@sindresorhus/is';
3
3
  import '../other-types/unknown.mjs';
4
4
  import { uintRange } from '../enum/uint-range.mjs';
5
5
 
6
- const uint8 = (defaultValue = 0) => uintRange({
7
- start: 0,
8
- end: 256,
9
- defaultValue
10
- });
6
+ const uint8 = (defaultValue = 0) => uintRange(0, 256, { defaultValue });
11
7
 
12
8
  export { uint8 };
13
9
  //# sourceMappingURL=uint8.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"uint8.mjs","sources":["../../src/predefined/uint8.mts"],"sourcesContent":["import { type Uint8 } from 'ts-type-forge';\nimport { uintRange } from '../enum/index.mjs';\nimport { type Type } from '../type.mjs';\n\nexport const uint8 = (defaultValue: Uint8 = 0): Type<Uint8> =>\n uintRange({\n start: 0,\n end: 256,\n defaultValue,\n });\n"],"names":[],"mappings":";;;;;AAIO,MAAM,KAAA,GAAQ,CAAC,YAAA,GAAsB,CAAA,KAC1C,SAAA,CAAU;AAAA,EACR,KAAA,EAAO,CAAA;AAAA,EACP,GAAA,EAAK,GAAA;AAAA,EACL;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"uint8.mjs","sources":["../../src/predefined/uint8.mts"],"sourcesContent":["import { type Uint8 } from 'ts-type-forge';\nimport { uintRange } from '../enum/index.mjs';\nimport { type Type } from '../type.mjs';\n\nexport const uint8 = (defaultValue: Uint8 = 0): Type<Uint8> =>\n uintRange(0, 256, { defaultValue });\n"],"names":[],"mappings":";;;;;AAIO,MAAM,KAAA,GAAQ,CAAC,YAAA,GAAsB,CAAA,KAC1C,UAAU,CAAA,EAAG,GAAA,EAAK,EAAE,YAAA,EAAc;;;;"}
@@ -10,6 +10,10 @@ export type ValidationErrorDetails = Readonly<{
10
10
  kind: 'integer-range';
11
11
  start: number;
12
12
  endExclusive: number;
13
+ } | {
14
+ kind: 'integer-range-inclusive';
15
+ start: number;
16
+ endInclusive: number;
13
17
  } | {
14
18
  kind: 'tuple-length';
15
19
  expectedLength: number;
@@ -1 +1 @@
1
- {"version":3,"file":"validation-error.d.mts","sourceRoot":"","sources":["../../src/utils/validation-error.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation-error.d.mts","sourceRoot":"","sources":["../../src/utils/validation-error.mts"],"names":[],"mappings":"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"}
@@ -46,6 +46,8 @@ const createDetailsMessage = (error, actualValue) => {
46
46
  return `expected <${error.expectedType}> but ${typedValueClause(actualValue)} was passed.`;
47
47
  case "integer-range":
48
48
  return `expected an integer between ${error.details.start} and ${error.details.endExclusive - 1} but ${bareValueClause(actualValue)} was passed.`;
49
+ case "integer-range-inclusive":
50
+ return `expected an integer between ${error.details.start} and ${error.details.endInclusive} but ${bareValueClause(actualValue)} was passed.`;
49
51
  case "tuple-length":
50
52
  return `expected tuple of length ${error.details.expectedLength} but length ${error.details.actualLength} was passed.`;
51
53
  case "array-length":