ts-fortress 2.4.0 → 2.5.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.
@@ -1,3 +1,4 @@
1
1
  export * from './enum.mjs';
2
+ export * from './int-range.mjs';
2
3
  export * from './uint-range.mjs';
3
4
  //# 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,kBAAkB,CAAC"}
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,3 +1,4 @@
1
1
  export { enumType } from './enum.mjs';
2
+ export { intRange } from './int-range.mjs';
2
3
  export { uintRange } from './uint-range.mjs';
3
4
  //# 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 Type } from '../type.mjs';
2
+ export declare const intRange: <Start extends Int8 | -128, End extends Int8 | 128>({ start, end, ...options }: Readonly<{
3
+ typeName?: string;
4
+ start: Start;
5
+ end: End;
6
+ defaultValue?: IntRange<Start, End>;
7
+ }>) => Type<IntRange<Start, End>>;
8
+ type NegativeRange = NegativeIndex<128>;
9
+ type PositiveRange = IndexInclusive<128>;
10
+ type IntRange<Start extends Int8 | -128, 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;
11
+ type NegativeToPositive<N extends number> = `${N}` extends `-${infer D extends number}` ? D : never;
12
+ export {};
13
+ //# sourceMappingURL=int-range.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"int-range.d.mts","sourceRoot":"","sources":["../../src/enum/int-range.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAQxC,eAAO,MAAM,QAAQ,GAAI,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,GAAG,GAAG,EAAE,4BAIzE,QAAQ,CAAC;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,GAAG,CAAC;IACT,YAAY,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;CACrC,CAAC,KAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAwC7B,CAAC;AAEF,KAAK,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;AACxC,KAAK,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;AAEzC,KAAK,QAAQ,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,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"}
@@ -0,0 +1,40 @@
1
+ import { 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
+
6
+ const intRange = ({ start, end, ...options }) => {
7
+ const typeNameFilled = options.typeName ?? `intRange(${start}, ${end})`;
8
+ const defaultValue = options.defaultValue ??
9
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
10
+ start;
11
+ const validate = (a) => {
12
+ if (!(isNumber(a) && Number.isInteger(a) && Num.isInRange(start, end)(a))) {
13
+ return Result.err([
14
+ {
15
+ path: [],
16
+ actualValue: a,
17
+ expectedType: typeNameFilled,
18
+ message: `The value is expected to be an integer between ${start} and ${end - 1}`,
19
+ typeName: typeNameFilled,
20
+ },
21
+ ]);
22
+ }
23
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
24
+ return Result.ok(a);
25
+ };
26
+ const is = createIsFn(validate);
27
+ const fill = (a) => (is(a) ? a : defaultValue);
28
+ return {
29
+ typeName: typeNameFilled,
30
+ defaultValue,
31
+ fill,
32
+ validate,
33
+ is,
34
+ assertIs: createAssertFn(validate),
35
+ cast: createCastFn(validate),
36
+ };
37
+ };
38
+
39
+ export { intRange };
40
+ //# sourceMappingURL=int-range.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"int-range.mjs","sources":["../../src/enum/int-range.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AASO,MAAM,QAAQ,GAAG,CAAoD,EAC1E,KAAK,EACL,GAAG,EACH,GAAG,OAAO,EAMV,KAAgC;IAGhC,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAA,SAAA,EAAY,KAAK,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG;AAEvE,IAAA,MAAM,YAAY,GAChB,OAAO,CAAC,YAAY;;AAEnB,QAAA,KAAW;AAEd,IAAA,MAAM,QAAQ,GAAwB,CAAC,CAAC,KAAI;QAC1C,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YACzE,OAAO,MAAM,CAAC,GAAG,CAAC;AAChB,gBAAA;AACE,oBAAA,IAAI,EAAE,EAAE;AACR,oBAAA,WAAW,EAAE,CAAC;AACd,oBAAA,YAAY,EAAE,cAAc;AAC5B,oBAAA,OAAO,EAAE,CAAA,+CAAA,EAAkD,KAAK,QAAQ,GAAG,GAAG,CAAC,CAAA,CAAE;AACjF,oBAAA,QAAQ,EAAE,cAAc;AACY,iBAAA;AACvC,aAAA,CAAC;;;AAIJ,QAAA,OAAO,MAAM,CAAC,EAAE,CAAC,CAAM,CAAC;AAC1B,IAAA,CAAC;AAED,IAAA,MAAM,EAAE,GAAG,UAAU,CAAI,QAAQ,CAAC;IAElC,MAAM,IAAI,GAAoB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;IAE/D,OAAO;AACL,QAAA,QAAQ,EAAE,cAAc;QACxB,YAAY;QACZ,IAAI;QACJ,QAAQ;QACR,EAAE;AACF,QAAA,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC;KAC7B;AACH;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { type Type } from '../type.mjs';
2
- export declare const uintRange: <Start extends Uint8, End extends Exclude<Uint8, Start>>({ start, end, ...options }: Readonly<{
2
+ export declare const uintRange: <Start extends Uint8, End extends Exclude<Uint8 | 256, Start>>({ start, end, ...options }: Readonly<{
3
3
  typeName?: string;
4
4
  start: Start;
5
5
  end: End;
@@ -1 +1 @@
1
- {"version":3,"file":"uint-range.d.mts","sourceRoot":"","sources":["../../src/enum/uint-range.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAQxC,eAAO,MAAM,SAAS,GACpB,KAAK,SAAS,KAAK,EACnB,GAAG,SAAS,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EACjC,4BAIC,QAAQ,CAAC;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,GAAG,CAAC;IACT,YAAY,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;CACtC,CAAC,KAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAwC9B,CAAC"}
1
+ {"version":3,"file":"uint-range.d.mts","sourceRoot":"","sources":["../../src/enum/uint-range.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAQxC,eAAO,MAAM,SAAS,GACpB,KAAK,SAAS,KAAK,EACnB,GAAG,SAAS,OAAO,CAAC,KAAK,GAAG,GAAG,EAAE,KAAK,CAAC,EACvC,4BAIC,QAAQ,CAAC;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,GAAG,CAAC;IACT,YAAY,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;CACtC,CAAC,KAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAwC9B,CAAC"}
package/dist/index.mjs CHANGED
@@ -26,8 +26,11 @@ export { mergeRecords } from './compose/merge-records.mjs';
26
26
  export { recursion } from './compose/recursion.mjs';
27
27
  export { union } from './compose/union.mjs';
28
28
  export { enumType } from './enum/enum.mjs';
29
+ export { intRange } from './enum/int-range.mjs';
29
30
  export { uintRange } from './enum/uint-range.mjs';
31
+ export { int8 } from './predefined/int8.mjs';
30
32
  export { JsonObject, JsonPrimitive, JsonValue } from './predefined/json.mjs';
33
+ export { uint8 } from './predefined/uint8.mjs';
31
34
  export { bigint, bigintLiteral } from './primitives/bigint.mjs';
32
35
  export { boolean, booleanLiteral } from './primitives/boolean.mjs';
33
36
  export { nullType } from './primitives/null.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,2 +1,4 @@
1
+ export * from './int8.mjs';
1
2
  export * from './json.mjs';
3
+ export * from './uint8.mjs';
2
4
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/predefined/index.mts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/predefined/index.mts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
@@ -1,2 +1,4 @@
1
+ export { int8 } from './int8.mjs';
1
2
  export { JsonObject, JsonPrimitive, JsonValue } from './json.mjs';
3
+ export { uint8 } from './uint8.mjs';
2
4
  //# 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,3 @@
1
+ import { type Type } from '../type.mjs';
2
+ export declare const int8: (defaultValue?: Int8) => Type<Int8>;
3
+ //# sourceMappingURL=int8.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"int8.d.mts","sourceRoot":"","sources":["../../src/predefined/int8.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,eAAO,MAAM,IAAI,GAAI,eAAc,IAAQ,KAAG,IAAI,CAAC,IAAI,CAKnD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import 'ts-data-forge';
2
+ import { intRange } from '../enum/int-range.mjs';
3
+
4
+ const int8 = (defaultValue = 0) => intRange({
5
+ start: -128,
6
+ end: 128,
7
+ defaultValue,
8
+ });
9
+
10
+ export { int8 };
11
+ //# sourceMappingURL=int8.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"int8.mjs","sources":["../../src/predefined/int8.mts"],"sourcesContent":[null],"names":[],"mappings":";;;AAGO,MAAM,IAAI,GAAG,CAAC,YAAA,GAAqB,CAAC,KACzC,QAAQ,CAAC;IACP,KAAK,EAAE,IAAI;AACX,IAAA,GAAG,EAAE,GAAG;IACR,YAAY;AACb,CAAA;;;;"}
@@ -0,0 +1,3 @@
1
+ import { type Type } from '../type.mjs';
2
+ export declare const uint8: (defaultValue?: Uint8) => Type<Uint8>;
3
+ //# sourceMappingURL=uint8.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uint8.d.mts","sourceRoot":"","sources":["../../src/predefined/uint8.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,eAAO,MAAM,KAAK,GAAI,eAAc,KAAS,KAAG,IAAI,CAAC,KAAK,CAKtD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import 'ts-data-forge';
2
+ import { uintRange } from '../enum/uint-range.mjs';
3
+
4
+ const uint8 = (defaultValue = 0) => uintRange({
5
+ start: 0,
6
+ end: 256,
7
+ defaultValue,
8
+ });
9
+
10
+ export { uint8 };
11
+ //# sourceMappingURL=uint8.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uint8.mjs","sources":["../../src/predefined/uint8.mts"],"sourcesContent":[null],"names":[],"mappings":";;;AAGO,MAAM,KAAK,GAAG,CAAC,YAAA,GAAsB,CAAC,KAC3C,SAAS,CAAC;AACR,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,GAAG,EAAE,GAAG;IACR,YAAY;AACb,CAAA;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-fortress",
3
- "version": "2.4.0",
3
+ "version": "2.5.0",
4
4
  "private": false,
5
5
  "keywords": [
6
6
  "typescript"
@@ -57,7 +57,7 @@
57
57
  "ts-type-forge": "^2.2.0"
58
58
  },
59
59
  "devDependencies": {
60
- "@eslint/js": "^9.33.0",
60
+ "@eslint/js": "^9.34.0",
61
61
  "@rollup/plugin-replace": "^6.0.2",
62
62
  "@rollup/plugin-strip": "^3.0.4",
63
63
  "@rollup/plugin-typescript": "^12.1.4",
@@ -73,7 +73,7 @@
73
73
  "@vitest/ui": "^3.2.4",
74
74
  "conventional-changelog-conventionalcommits": "^9.1.0",
75
75
  "cspell": "^9.2.0",
76
- "eslint": "^9.33.0",
76
+ "eslint": "^9.34.0",
77
77
  "eslint-import-resolver-typescript": "4.4.4",
78
78
  "eslint-plugin-array-func": "5.0.2",
79
79
  "eslint-plugin-functional": "9.0.2",
@@ -89,7 +89,7 @@
89
89
  "prettier": "^3.6.2",
90
90
  "prettier-plugin-organize-imports": "^4.2.0",
91
91
  "prettier-plugin-packagejson": "^2.5.19",
92
- "rollup": "^4.46.2",
92
+ "rollup": "^4.48.0",
93
93
  "semantic-release": "^24.2.7",
94
94
  "ts-repo-utils": "^6.0.3",
95
95
  "tslib": "^2.8.1",
@@ -97,8 +97,8 @@
97
97
  "typedoc": "^0.28.10",
98
98
  "typedoc-plugin-markdown": "^4.8.1",
99
99
  "typescript": "^5.9.2",
100
- "typescript-eslint": "^8.39.1",
100
+ "typescript-eslint": "^8.40.0",
101
101
  "vitest": "^3.2.4",
102
- "zod": "^4.0.17"
102
+ "zod": "^4.1.0"
103
103
  }
104
104
  }
@@ -1,2 +1,3 @@
1
1
  export * from './enum.mjs';
2
+ export * from './int-range.mjs';
2
3
  export * from './uint-range.mjs';
@@ -0,0 +1,98 @@
1
+ import { expectType, isNumber, Num, Result } from 'ts-data-forge';
2
+ import { type Type } from '../type.mjs';
3
+ import {
4
+ createAssertFn,
5
+ createCastFn,
6
+ createIsFn,
7
+ type ValidationErrorWithMessage,
8
+ } from '../utils/index.mjs';
9
+
10
+ export const intRange = <Start extends Int8 | -128, End extends Int8 | 128>({
11
+ start,
12
+ end,
13
+ ...options
14
+ }: Readonly<{
15
+ typeName?: string;
16
+ start: Start;
17
+ end: End;
18
+ defaultValue?: IntRange<Start, End>;
19
+ }>): Type<IntRange<Start, End>> => {
20
+ type T = IntRange<Start, End>;
21
+
22
+ const typeNameFilled = options.typeName ?? `intRange(${start}, ${end})`;
23
+
24
+ const defaultValue: T =
25
+ options.defaultValue ??
26
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
27
+ (start as T);
28
+
29
+ const validate: Type<T>['validate'] = (a) => {
30
+ if (!(isNumber(a) && Number.isInteger(a) && Num.isInRange(start, end)(a))) {
31
+ return Result.err([
32
+ {
33
+ path: [],
34
+ actualValue: a,
35
+ expectedType: typeNameFilled,
36
+ message: `The value is expected to be an integer between ${start} and ${end - 1}`,
37
+ typeName: typeNameFilled,
38
+ } satisfies ValidationErrorWithMessage,
39
+ ]);
40
+ }
41
+
42
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
43
+ return Result.ok(a as T);
44
+ };
45
+
46
+ const is = createIsFn<T>(validate);
47
+
48
+ const fill: Type<T>['fill'] = (a) => (is(a) ? a : defaultValue);
49
+
50
+ return {
51
+ typeName: typeNameFilled,
52
+ defaultValue,
53
+ fill,
54
+ validate,
55
+ is,
56
+ assertIs: createAssertFn(validate),
57
+ cast: createCastFn(validate),
58
+ };
59
+ };
60
+
61
+ type NegativeRange = NegativeIndex<128>;
62
+ type PositiveRange = IndexInclusive<128>;
63
+
64
+ type IntRange<Start extends Int8 | -128, End extends Int8 | 128> =
65
+ BoolAnd<
66
+ TypeExtends<Start, PositiveRange>,
67
+ TypeExtends<End, PositiveRange>
68
+ > extends true
69
+ ? UintRange<Start, End>
70
+ : BoolAnd<
71
+ TypeExtends<Start, NegativeRange>,
72
+ TypeExtends<End, PositiveRange>
73
+ > extends true
74
+ ? NegativeIndex<NegativeToPositive<Start>> | Index<End>
75
+ : BoolAnd<
76
+ TypeExtends<Start, PositiveRange>,
77
+ TypeExtends<End, NegativeRange>
78
+ > extends true
79
+ ? never
80
+ : BoolAnd<
81
+ TypeExtends<Start, NegativeRange>,
82
+ TypeExtends<End, NegativeRange>
83
+ > extends true
84
+ ? Exclude<
85
+ NegativeIndex<NegativeToPositive<Start>>,
86
+ NegativeIndex<NegativeToPositive<End>>
87
+ >
88
+ : never;
89
+
90
+ type NegativeToPositive<N extends number> =
91
+ `${N}` extends `-${infer D extends number}` ? D : never;
92
+
93
+ expectType<NegativeToPositive<-3>, 3>('=');
94
+
95
+ expectType<IntRange<1, 5>, 1 | 2 | 3 | 4>('=');
96
+ expectType<IntRange<-3, 3>, -3 | -2 | -1 | 0 | 1 | 2>('=');
97
+ expectType<IntRange<3, -3>, never>('=');
98
+ expectType<IntRange<-5, -1>, -5 | -4 | -3 | -2>('=');
@@ -9,7 +9,7 @@ import {
9
9
 
10
10
  export const uintRange = <
11
11
  Start extends Uint8,
12
- End extends Exclude<Uint8, Start>,
12
+ End extends Exclude<Uint8 | 256, Start>,
13
13
  >({
14
14
  start,
15
15
  end,
@@ -1 +1,3 @@
1
+ export * from './int8.mjs';
1
2
  export * from './json.mjs';
3
+ export * from './uint8.mjs';
@@ -0,0 +1,9 @@
1
+ import { intRange } from '../enum/index.mjs';
2
+ import { type Type } from '../type.mjs';
3
+
4
+ export const int8 = (defaultValue: Int8 = 0): Type<Int8> =>
5
+ intRange({
6
+ start: -128,
7
+ end: 128,
8
+ defaultValue,
9
+ });
@@ -0,0 +1,9 @@
1
+ import { uintRange } from '../enum/index.mjs';
2
+ import { type Type } from '../type.mjs';
3
+
4
+ export const uint8 = (defaultValue: Uint8 = 0): Type<Uint8> =>
5
+ uintRange({
6
+ start: 0,
7
+ end: 256,
8
+ defaultValue,
9
+ });