ts-fortress 2.10.0 → 3.0.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/dist/branded/brand.d.mts +2 -2
- package/dist/branded/brand.d.mts.map +1 -1
- package/dist/branded/brand.mjs +7 -7
- package/dist/branded/brand.mjs.map +1 -1
- package/dist/branded/number/finite-number.mjs +1 -1
- package/dist/branded/number/finite-number.mjs.map +1 -1
- package/dist/branded/number/int.mjs +1 -1
- package/dist/branded/number/int.mjs.map +1 -1
- package/dist/branded/number/int16.mjs +1 -1
- package/dist/branded/number/int16.mjs.map +1 -1
- package/dist/branded/number/int32.mjs +1 -1
- package/dist/branded/number/int32.mjs.map +1 -1
- package/dist/branded/number/non-negative-finite-number.mjs +1 -1
- package/dist/branded/number/non-negative-finite-number.mjs.map +1 -1
- package/dist/branded/number/non-zero-finite-number.mjs +1 -1
- package/dist/branded/number/non-zero-finite-number.mjs.map +1 -1
- package/dist/branded/number/non-zero-int.mjs +1 -1
- package/dist/branded/number/non-zero-int.mjs.map +1 -1
- package/dist/branded/number/non-zero-safe-int.mjs +1 -1
- package/dist/branded/number/non-zero-safe-int.mjs.map +1 -1
- package/dist/branded/number/positive-finite-number.mjs +1 -1
- package/dist/branded/number/positive-finite-number.mjs.map +1 -1
- package/dist/branded/number/positive-int.mjs +1 -1
- package/dist/branded/number/positive-int.mjs.map +1 -1
- package/dist/branded/number/positive-safe-int.mjs +1 -1
- package/dist/branded/number/positive-safe-int.mjs.map +1 -1
- package/dist/branded/number/safe-int.mjs +1 -1
- package/dist/branded/number/safe-int.mjs.map +1 -1
- package/dist/branded/number/safe-uint.mjs +1 -1
- package/dist/branded/number/safe-uint.mjs.map +1 -1
- package/dist/branded/number/uint.mjs +1 -1
- package/dist/branded/number/uint.mjs.map +1 -1
- package/dist/branded/number/uint16.mjs +1 -1
- package/dist/branded/number/uint16.mjs.map +1 -1
- package/dist/branded/number/uint32.mjs +1 -1
- package/dist/branded/number/uint32.mjs.map +1 -1
- package/dist/branded/simple-branded-number.d.mts +5 -1
- package/dist/branded/simple-branded-number.d.mts.map +1 -1
- package/dist/branded/simple-branded-number.mjs +3 -3
- package/dist/branded/simple-branded-number.mjs.map +1 -1
- package/dist/branded/simple-branded-string.d.mts +5 -1
- package/dist/branded/simple-branded-string.d.mts.map +1 -1
- package/dist/branded/simple-branded-string.mjs +3 -3
- package/dist/branded/simple-branded-string.mjs.map +1 -1
- package/package.json +1 -1
- package/src/branded/brand.mts +9 -9
- package/src/branded/number/finite-number.mts +1 -1
- package/src/branded/number/int.mts +1 -1
- package/src/branded/number/int16.mts +1 -1
- package/src/branded/number/int32.mts +1 -1
- package/src/branded/number/non-negative-finite-number.mts +1 -1
- package/src/branded/number/non-zero-finite-number.mts +1 -1
- package/src/branded/number/non-zero-int.mts +1 -1
- package/src/branded/number/non-zero-safe-int.mts +1 -1
- package/src/branded/number/positive-finite-number.mts +1 -1
- package/src/branded/number/positive-int.mts +1 -1
- package/src/branded/number/positive-safe-int.mts +1 -1
- package/src/branded/number/safe-int.mts +1 -1
- package/src/branded/number/safe-uint.mts +1 -1
- package/src/branded/number/uint.mts +1 -1
- package/src/branded/number/uint16.mts +1 -1
- package/src/branded/number/uint32.mts +1 -1
- package/src/branded/simple-branded-number.mts +12 -7
- package/src/branded/simple-branded-number.test.mts +12 -3
- package/src/branded/simple-branded-string.mts +12 -7
- package/src/branded/simple-branded-string.test.mts +20 -5
package/dist/branded/brand.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type Type } from '../type.mjs';
|
|
2
2
|
type ArrayToUnion<A extends readonly unknown[]> = A extends readonly [] ? never : A[number];
|
|
3
|
-
export declare const brand: <const A extends Primitive, const BrandTrueKeys extends readonly string[], const BrandFalseKeys extends readonly string[] = []>({
|
|
4
|
-
|
|
3
|
+
export declare const brand: <const A extends Primitive, const BrandTrueKeys extends readonly string[], const BrandFalseKeys extends readonly string[] = []>({ baseType, is, defaultValue, typeName, brandKeys, brandFalseKeys, }: Readonly<{
|
|
4
|
+
baseType: Type<A>;
|
|
5
5
|
is: (a: A) => a is Brand<A, ArrayToUnion<BrandTrueKeys>, ArrayToUnion<BrandFalseKeys>>;
|
|
6
6
|
defaultValue: Brand<A, ArrayToUnion<BrandTrueKeys>, ArrayToUnion<BrandFalseKeys>>;
|
|
7
7
|
typeName?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand.d.mts","sourceRoot":"","sources":["../../src/branded/brand.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAGxC,KAAK,YAAY,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,IAAI,CAAC,SAAS,SAAS,EAAE,GACnE,KAAK,GACL,CAAC,CAAC,MAAM,CAAC,CAAC;AAEd,eAAO,MAAM,KAAK,GAChB,KAAK,CAAC,CAAC,SAAS,SAAS,EACzB,KAAK,CAAC,aAAa,SAAS,SAAS,MAAM,EAAE,EAC7C,KAAK,CAAC,cAAc,SAAS,SAAS,MAAM,EAAE,GAAG,EAAE,EACnD,
|
|
1
|
+
{"version":3,"file":"brand.d.mts","sourceRoot":"","sources":["../../src/branded/brand.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAGxC,KAAK,YAAY,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,IAAI,CAAC,SAAS,SAAS,EAAE,GACnE,KAAK,GACL,CAAC,CAAC,MAAM,CAAC,CAAC;AAEd,eAAO,MAAM,KAAK,GAChB,KAAK,CAAC,CAAC,SAAS,SAAS,EACzB,KAAK,CAAC,aAAa,SAAS,SAAS,MAAM,EAAE,EAC7C,KAAK,CAAC,cAAc,SAAS,SAAS,MAAM,EAAE,GAAG,EAAE,EACnD,sEAOC,QAAQ,CAAC;IACV,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,EAAE,EAAE,CACF,CAAC,EAAE,CAAC,KACD,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC;IAC9E,YAAY,EAAE,KAAK,CACjB,CAAC,EACD,YAAY,CAAC,aAAa,CAAC,EAC3B,YAAY,CAAC,cAAc,CAAC,CAC7B,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,aAAa,CAAC;IACzB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,CAAC,KAAG,IAAI,CACP,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC,CAuCpE,CAAC"}
|
package/dist/branded/brand.mjs
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { pipe, Result } from 'ts-data-forge';
|
|
2
2
|
import { createType } from '../utils/create-type.mjs';
|
|
3
3
|
|
|
4
|
-
const brand = ({
|
|
4
|
+
const brand = ({ baseType, is, defaultValue, typeName, brandKeys, brandFalseKeys, }) => {
|
|
5
5
|
const brandKeysStr = [
|
|
6
6
|
...brandKeys.map((s) => `"${s}"`),
|
|
7
7
|
...(brandFalseKeys?.map((s) => `not("${s}")`) ?? []),
|
|
8
8
|
].join(' & ');
|
|
9
9
|
const typeNameFilled = typeName ?? brandKeysStr;
|
|
10
10
|
const validate = (a) => pipe(a)
|
|
11
|
-
.map(
|
|
12
|
-
.map((
|
|
13
|
-
?
|
|
14
|
-
: is(
|
|
15
|
-
? Result.ok(
|
|
11
|
+
.map(baseType.validate)
|
|
12
|
+
.map((res) => Result.isErr(res)
|
|
13
|
+
? res
|
|
14
|
+
: is(res.value)
|
|
15
|
+
? Result.ok(res.value)
|
|
16
16
|
: Result.err([
|
|
17
17
|
{
|
|
18
18
|
path: [],
|
|
19
|
-
actualValue:
|
|
19
|
+
actualValue: res.value,
|
|
20
20
|
expectedType: typeNameFilled,
|
|
21
21
|
typeName: brandKeysStr,
|
|
22
22
|
message: typeName === undefined
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand.mjs","sources":["../../src/branded/brand.mts"],"sourcesContent":[null],"names":[],"mappings":";;;AAQO,MAAM,KAAK,GAAG,CAInB,EACA,
|
|
1
|
+
{"version":3,"file":"brand.mjs","sources":["../../src/branded/brand.mts"],"sourcesContent":[null],"names":[],"mappings":";;;AAQO,MAAM,KAAK,GAAG,CAInB,EACA,QAAQ,EACR,EAAE,EACF,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,cAAc,GAcd,KAEE;AAGF,IAAA,MAAM,YAAY,GAAG;AACnB,QAAA,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAG,CAAC;AACjC,QAAA,IAAI,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAA,EAAA,CAAI,CAAC,IAAI,EAAE,CAAC;AACrD,KAAA,CAAC,IAAI,CAAC,KAAK,CAAC;AAEb,IAAA,MAAM,cAAc,GAAG,QAAQ,IAAI,YAAY;IAE/C,MAAM,QAAQ,GAAwB,CAAC,CAAC,KACtC,IAAI,CAAC,CAAC;AACH,SAAA,GAAG,CAAC,QAAQ,CAAC,QAAQ;SACrB,GAAG,CACF,CAAC,GAAG,KACF,MAAM,CAAC,KAAK,CAAC,GAAG;AACd,UAAE;AACF,UAAE,EAAE,CAAC,GAAG,CAAC,KAAK;cACV,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAiB;AACjC,cAAE,MAAM,CAAC,GAAG,CAAC;AACT,gBAAA;AACE,oBAAA,IAAI,EAAE,EAAE;oBACR,WAAW,EAAE,GAAG,CAAC,KAAK;AACtB,oBAAA,YAAY,EAAE,cAAc;AAC5B,oBAAA,QAAQ,EAAE,YAAY;oBACtB,OAAO,EACL,QAAQ,KAAK;0BACT,CAAA,wEAAA,EAA2E,YAAY,CAAA,CAAA;AACzF,0BAAE,SAAS;AACU,iBAAA;aAC5B,CAAC,CACX,CAAC,KAAK;AAEX,IAAA,OAAO,UAAU,CAAC;AAChB,QAAA,QAAQ,EAAE,YAAY;QACtB,YAAY;QACZ,QAAQ;AACT,KAAA,CAAC;AACJ;;;;"}
|
|
@@ -3,7 +3,7 @@ import { number } from '../../primitives/number.mjs';
|
|
|
3
3
|
import { brand } from '../brand.mjs';
|
|
4
4
|
|
|
5
5
|
const finiteNumber = (defaultValue = asFiniteNumber(0)) => brand({
|
|
6
|
-
|
|
6
|
+
baseType: number(defaultValue),
|
|
7
7
|
is: FiniteNumber.is,
|
|
8
8
|
defaultValue,
|
|
9
9
|
brandKeys: ['Finite'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finite-number.mjs","sources":["../../../src/branded/number/finite-number.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,YAAY,GAAG,CAC1B,YAAA,GAA6B,cAAc,CAAC,CAAC,CAAC,KAE9C,KAAK,CAAC;AACJ,IAAA,
|
|
1
|
+
{"version":3,"file":"finite-number.mjs","sources":["../../../src/branded/number/finite-number.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,YAAY,GAAG,CAC1B,YAAA,GAA6B,cAAc,CAAC,CAAC,CAAC,KAE9C,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;IAC9B,EAAE,EAAE,YAAY,CAAC,EAAE;IACnB,YAAY;IACZ,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,cAAc,EAAE,CAAC,UAAU,CAAC;AAC5B,IAAA,QAAQ,EAAE,cAAc;AACzB,CAAA;;;;"}
|
|
@@ -3,7 +3,7 @@ import { number } from '../../primitives/number.mjs';
|
|
|
3
3
|
import { brand } from '../brand.mjs';
|
|
4
4
|
|
|
5
5
|
const int = (defaultValue = asInt(0)) => brand({
|
|
6
|
-
|
|
6
|
+
baseType: number(defaultValue),
|
|
7
7
|
is: Int.is,
|
|
8
8
|
defaultValue,
|
|
9
9
|
brandKeys: ['Finite', 'Int'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"int.mjs","sources":["../../../src/branded/number/int.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,GAAG,GAAG,CAAC,YAAA,GAAoB,KAAK,CAAC,CAAC,CAAC,KAC9C,KAAK,CAAC;AACJ,IAAA,
|
|
1
|
+
{"version":3,"file":"int.mjs","sources":["../../../src/branded/number/int.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,GAAG,GAAG,CAAC,YAAA,GAAoB,KAAK,CAAC,CAAC,CAAC,KAC9C,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;IAC9B,EAAE,EAAE,GAAG,CAAC,EAAE;IACV,YAAY;AACZ,IAAA,SAAS,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;IAC5B,cAAc,EAAE,CAAC,UAAU,CAAC;AAC5B,IAAA,QAAQ,EAAE,KAAK;AAChB,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"int16.mjs","sources":["../../../src/branded/number/int16.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,KAAK,GAAG,CAAC,YAAA,GAAsB,OAAO,CAAC,CAAC,CAAC,KACpD,KAAK,CAAC;AACJ,IAAA,
|
|
1
|
+
{"version":3,"file":"int16.mjs","sources":["../../../src/branded/number/int16.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,KAAK,GAAG,CAAC,YAAA,GAAsB,OAAO,CAAC,CAAC,CAAC,KACpD,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;AAC9B,IAAA,EAAE,EAAE,OAAO;IACX,YAAY;AACZ,IAAA,SAAS,EAAE;QACT,QAAQ;QACR,KAAK;QACL,SAAS;QACT,SAAS;QACT,UAAU;QACV,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,UAAU;AACX,KAAA;IACD,cAAc,EAAE,CAAC,UAAU,CAAC;AAC5B,IAAA,QAAQ,EAAE,OAAO;AAClB,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"int32.mjs","sources":["../../../src/branded/number/int32.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,KAAK,GAAG,CAAC,YAAA,GAAsB,OAAO,CAAC,CAAC,CAAC,KACpD,KAAK,CAAC;AACJ,IAAA,
|
|
1
|
+
{"version":3,"file":"int32.mjs","sources":["../../../src/branded/number/int32.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,KAAK,GAAG,CAAC,YAAA,GAAsB,OAAO,CAAC,CAAC,CAAC,KACpD,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;AAC9B,IAAA,EAAE,EAAE,OAAO;IACX,YAAY;AACZ,IAAA,SAAS,EAAE;QACT,QAAQ;QACR,KAAK;QACL,SAAS;QACT,SAAS;QACT,UAAU;QACV,QAAQ;QACR,QAAQ;AACT,KAAA;IACD,cAAc,EAAE,CAAC,UAAU,CAAC;AAC5B,IAAA,QAAQ,EAAE,OAAO;AAClB,CAAA;;;;"}
|
|
@@ -3,7 +3,7 @@ import { number } from '../../primitives/number.mjs';
|
|
|
3
3
|
import { brand } from '../brand.mjs';
|
|
4
4
|
|
|
5
5
|
const nonNegativeFiniteNumber = (defaultValue = asNonNegativeFiniteNumber(0)) => brand({
|
|
6
|
-
|
|
6
|
+
baseType: number(defaultValue),
|
|
7
7
|
is: isNonNegativeFiniteNumber,
|
|
8
8
|
defaultValue,
|
|
9
9
|
brandKeys: ['>=0', '> -2^16', '> -2^32', '>= -2^15', '>= -2^31', 'Finite'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"non-negative-finite-number.mjs","sources":["../../../src/branded/number/non-negative-finite-number.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAQO,MAAM,uBAAuB,GAAG,CACrC,YAAA,GAAwC,yBAAyB,CAAC,CAAC,CAAC,KAEpE,KAAK,CAAC;AACJ,IAAA,
|
|
1
|
+
{"version":3,"file":"non-negative-finite-number.mjs","sources":["../../../src/branded/number/non-negative-finite-number.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAQO,MAAM,uBAAuB,GAAG,CACrC,YAAA,GAAwC,yBAAyB,CAAC,CAAC,CAAC,KAEpE,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;AAC9B,IAAA,EAAE,EAAE,yBAAyB;IAC7B,YAAY;AACZ,IAAA,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC;IAC1E,cAAc,EAAE,CAAC,UAAU,CAAC;AAC5B,IAAA,QAAQ,EAAE,yBAAyB;AACpC,CAAA;;;;"}
|
|
@@ -3,7 +3,7 @@ import { number } from '../../primitives/number.mjs';
|
|
|
3
3
|
import { brand } from '../brand.mjs';
|
|
4
4
|
|
|
5
5
|
const nonZeroFiniteNumber = (defaultValue) => brand({
|
|
6
|
-
|
|
6
|
+
baseType: number(defaultValue),
|
|
7
7
|
is: isNonZeroFiniteNumber,
|
|
8
8
|
defaultValue,
|
|
9
9
|
brandKeys: ['!=0', 'Finite'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"non-zero-finite-number.mjs","sources":["../../../src/branded/number/non-zero-finite-number.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,mBAAmB,GAAG,CACjC,YAAiC,KAEjC,KAAK,CAAC;AACJ,IAAA,
|
|
1
|
+
{"version":3,"file":"non-zero-finite-number.mjs","sources":["../../../src/branded/number/non-zero-finite-number.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,mBAAmB,GAAG,CACjC,YAAiC,KAEjC,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;AAC9B,IAAA,EAAE,EAAE,qBAAqB;IACzB,YAAY;AACZ,IAAA,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC;IAC5B,cAAc,EAAE,CAAC,UAAU,CAAC;AAC5B,IAAA,QAAQ,EAAE,qBAAqB;AAChC,CAAA;;;;"}
|
|
@@ -3,7 +3,7 @@ import { number } from '../../primitives/number.mjs';
|
|
|
3
3
|
import { brand } from '../brand.mjs';
|
|
4
4
|
|
|
5
5
|
const nonZeroInt = (defaultValue = asNonZeroInt(0)) => brand({
|
|
6
|
-
|
|
6
|
+
baseType: number(defaultValue),
|
|
7
7
|
is: isNonZeroInt,
|
|
8
8
|
defaultValue,
|
|
9
9
|
brandKeys: ['Finite', 'Int', '!=0'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"non-zero-int.mjs","sources":["../../../src/branded/number/non-zero-int.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,UAAU,GAAG,CACxB,YAAA,GAA2B,YAAY,CAAC,CAAC,CAAC,KAE1C,KAAK,CAAC;AACJ,IAAA,
|
|
1
|
+
{"version":3,"file":"non-zero-int.mjs","sources":["../../../src/branded/number/non-zero-int.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,UAAU,GAAG,CACxB,YAAA,GAA2B,YAAY,CAAC,CAAC,CAAC,KAE1C,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;AAC9B,IAAA,EAAE,EAAE,YAAY;IAChB,YAAY;AACZ,IAAA,SAAS,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC;IACnC,cAAc,EAAE,CAAC,UAAU,CAAC;AAC5B,IAAA,QAAQ,EAAE,YAAY;AACvB,CAAA;;;;"}
|
|
@@ -3,7 +3,7 @@ import { number } from '../../primitives/number.mjs';
|
|
|
3
3
|
import { brand } from '../brand.mjs';
|
|
4
4
|
|
|
5
5
|
const nonZeroSafeInt = (defaultValue) => brand({
|
|
6
|
-
|
|
6
|
+
baseType: number(defaultValue),
|
|
7
7
|
is: isNonZeroSafeInt,
|
|
8
8
|
defaultValue,
|
|
9
9
|
brandKeys: ['Finite', 'Int', 'SafeInt', '!=0'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"non-zero-safe-int.mjs","sources":["../../../src/branded/number/non-zero-safe-int.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,cAAc,GAAG,CAC5B,YAA4B,KAE5B,KAAK,CAAC;AACJ,IAAA,
|
|
1
|
+
{"version":3,"file":"non-zero-safe-int.mjs","sources":["../../../src/branded/number/non-zero-safe-int.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,cAAc,GAAG,CAC5B,YAA4B,KAE5B,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;AAC9B,IAAA,EAAE,EAAE,gBAAgB;IACpB,YAAY;IACZ,SAAS,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC;IAC9C,cAAc,EAAE,CAAC,UAAU,CAAC;AAC5B,IAAA,QAAQ,EAAE,gBAAgB;AAC3B,CAAA;;;;"}
|
|
@@ -3,7 +3,7 @@ import { number } from '../../primitives/number.mjs';
|
|
|
3
3
|
import { brand } from '../brand.mjs';
|
|
4
4
|
|
|
5
5
|
const positiveFiniteNumber = (defaultValue) => brand({
|
|
6
|
-
|
|
6
|
+
baseType: number(defaultValue),
|
|
7
7
|
is: isPositiveFiniteNumber,
|
|
8
8
|
defaultValue,
|
|
9
9
|
brandKeys: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"positive-finite-number.mjs","sources":["../../../src/branded/number/positive-finite-number.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,oBAAoB,GAAG,CAClC,YAAkC,KAElC,KAAK,CAAC;AACJ,IAAA,
|
|
1
|
+
{"version":3,"file":"positive-finite-number.mjs","sources":["../../../src/branded/number/positive-finite-number.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,oBAAoB,GAAG,CAClC,YAAkC,KAElC,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;AAC9B,IAAA,EAAE,EAAE,sBAAsB;IAC1B,YAAY;AACZ,IAAA,SAAS,EAAE;QACT,KAAK;QACL,SAAS;QACT,SAAS;QACT,UAAU;QACV,UAAU;QACV,QAAQ;QACR,KAAK;AACN,KAAA;IACD,cAAc,EAAE,CAAC,UAAU,CAAC;AAC5B,IAAA,QAAQ,EAAE,sBAAsB;AACjC,CAAA;;;;"}
|
|
@@ -3,7 +3,7 @@ import { number } from '../../primitives/number.mjs';
|
|
|
3
3
|
import { brand } from '../brand.mjs';
|
|
4
4
|
|
|
5
5
|
const positiveInt = (defaultValue = asPositiveInt(1)) => brand({
|
|
6
|
-
|
|
6
|
+
baseType: number(defaultValue),
|
|
7
7
|
is: isPositiveInt,
|
|
8
8
|
defaultValue,
|
|
9
9
|
brandKeys: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"positive-int.mjs","sources":["../../../src/branded/number/positive-int.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,WAAW,GAAG,CACzB,YAAA,GAA4B,aAAa,CAAC,CAAC,CAAC,KAE5C,KAAK,CAAC;AACJ,IAAA,
|
|
1
|
+
{"version":3,"file":"positive-int.mjs","sources":["../../../src/branded/number/positive-int.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,WAAW,GAAG,CACzB,YAAA,GAA4B,aAAa,CAAC,CAAC,CAAC,KAE5C,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;AAC9B,IAAA,EAAE,EAAE,aAAa;IACjB,YAAY;AACZ,IAAA,SAAS,EAAE;QACT,QAAQ;QACR,KAAK;QACL,SAAS;QACT,UAAU;QACV,SAAS;QACT,UAAU;QACV,KAAK;QACL,KAAK;AACN,KAAA;IACD,cAAc,EAAE,CAAC,UAAU,CAAC;AAC5B,IAAA,QAAQ,EAAE,aAAa;AACxB,CAAA;;;;"}
|
|
@@ -3,7 +3,7 @@ import { number } from '../../primitives/number.mjs';
|
|
|
3
3
|
import { brand } from '../brand.mjs';
|
|
4
4
|
|
|
5
5
|
const positiveSafeInt = (defaultValue = asPositiveSafeInt(1)) => brand({
|
|
6
|
-
|
|
6
|
+
baseType: number(defaultValue),
|
|
7
7
|
is: isPositiveSafeInt,
|
|
8
8
|
defaultValue,
|
|
9
9
|
brandKeys: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"positive-safe-int.mjs","sources":["../../../src/branded/number/positive-safe-int.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,eAAe,GAAG,CAC7B,YAAA,GAAgC,iBAAiB,CAAC,CAAC,CAAC,KAEpD,KAAK,CAAC;AACJ,IAAA,
|
|
1
|
+
{"version":3,"file":"positive-safe-int.mjs","sources":["../../../src/branded/number/positive-safe-int.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,eAAe,GAAG,CAC7B,YAAA,GAAgC,iBAAiB,CAAC,CAAC,CAAC,KAEpD,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;AAC9B,IAAA,EAAE,EAAE,iBAAiB;IACrB,YAAY;AACZ,IAAA,SAAS,EAAE;QACT,QAAQ;QACR,KAAK;QACL,SAAS;QACT,SAAS;QACT,UAAU;QACV,SAAS;QACT,UAAU;QACV,KAAK;QACL,KAAK;AACN,KAAA;IACD,cAAc,EAAE,CAAC,UAAU,CAAC;AAC5B,IAAA,QAAQ,EAAE,iBAAiB;AAC5B,CAAA;;;;"}
|
|
@@ -3,7 +3,7 @@ import { number } from '../../primitives/number.mjs';
|
|
|
3
3
|
import { brand } from '../brand.mjs';
|
|
4
4
|
|
|
5
5
|
const safeInt = (defaultValue = asSafeInt(0)) => brand({
|
|
6
|
-
|
|
6
|
+
baseType: number(defaultValue),
|
|
7
7
|
is: SafeInt.is,
|
|
8
8
|
defaultValue,
|
|
9
9
|
brandKeys: ['Finite', 'Int', 'SafeInt'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe-int.mjs","sources":["../../../src/branded/number/safe-int.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,OAAO,GAAG,CAAC,YAAA,GAAwB,SAAS,CAAC,CAAC,CAAC,KAC1D,KAAK,CAAC;AACJ,IAAA,
|
|
1
|
+
{"version":3,"file":"safe-int.mjs","sources":["../../../src/branded/number/safe-int.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,OAAO,GAAG,CAAC,YAAA,GAAwB,SAAS,CAAC,CAAC,CAAC,KAC1D,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;IAC9B,EAAE,EAAE,OAAO,CAAC,EAAE;IACd,YAAY;AACZ,IAAA,SAAS,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC;IACvC,cAAc,EAAE,CAAC,UAAU,CAAC;AAC5B,IAAA,QAAQ,EAAE,SAAS;AACpB,CAAA;;;;"}
|
|
@@ -3,7 +3,7 @@ import { number } from '../../primitives/number.mjs';
|
|
|
3
3
|
import { brand } from '../brand.mjs';
|
|
4
4
|
|
|
5
5
|
const safeUint = (defaultValue = asSafeUint(0)) => brand({
|
|
6
|
-
|
|
6
|
+
baseType: number(defaultValue),
|
|
7
7
|
is: isSafeUint,
|
|
8
8
|
defaultValue,
|
|
9
9
|
brandKeys: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe-uint.mjs","sources":["../../../src/branded/number/safe-uint.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,QAAQ,GAAG,CACtB,YAAA,GAAyB,UAAU,CAAC,CAAC,CAAC,KAEtC,KAAK,CAAC;AACJ,IAAA,
|
|
1
|
+
{"version":3,"file":"safe-uint.mjs","sources":["../../../src/branded/number/safe-uint.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,QAAQ,GAAG,CACtB,YAAA,GAAyB,UAAU,CAAC,CAAC,CAAC,KAEtC,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;AAC9B,IAAA,EAAE,EAAE,UAAU;IACd,YAAY;AACZ,IAAA,SAAS,EAAE;QACT,QAAQ;QACR,KAAK;QACL,SAAS;QACT,SAAS;QACT,SAAS;QACT,UAAU;QACV,UAAU;QACV,KAAK;AACN,KAAA;IACD,cAAc,EAAE,CAAC,UAAU,CAAC;AAC5B,IAAA,QAAQ,EAAE,UAAU;AACrB,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uint.mjs","sources":["../../../src/branded/number/uint.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,IAAI,GAAG,CAAC,YAAA,GAAqB,MAAM,CAAC,CAAC,CAAC,KACjD,KAAK,CAAC;AACJ,IAAA,
|
|
1
|
+
{"version":3,"file":"uint.mjs","sources":["../../../src/branded/number/uint.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,IAAI,GAAG,CAAC,YAAA,GAAqB,MAAM,CAAC,CAAC,CAAC,KACjD,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;AAC9B,IAAA,EAAE,EAAE,MAAM;IACV,YAAY;AACZ,IAAA,SAAS,EAAE;QACT,QAAQ;QACR,KAAK;QACL,SAAS;QACT,UAAU;QACV,SAAS;QACT,UAAU;QACV,KAAK;AACN,KAAA;IACD,cAAc,EAAE,CAAC,UAAU,CAAC;AAC5B,IAAA,QAAQ,EAAE,MAAM;AACjB,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uint16.mjs","sources":["../../../src/branded/number/uint16.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,MAAM,GAAG,CAAC,YAAA,GAAuB,QAAQ,CAAC,CAAC,CAAC,KACvD,KAAK,CAAC;AACJ,IAAA,
|
|
1
|
+
{"version":3,"file":"uint16.mjs","sources":["../../../src/branded/number/uint16.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,MAAM,GAAG,CAAC,YAAA,GAAuB,QAAQ,CAAC,CAAC,CAAC,KACvD,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;AAC9B,IAAA,EAAE,EAAE,QAAQ;IACZ,YAAY;AACZ,IAAA,SAAS,EAAE;QACT,QAAQ;QACR,KAAK;QACL,SAAS;QACT,SAAS;QACT,SAAS;QACT,UAAU;QACV,UAAU;QACV,KAAK;QACL,QAAQ;QACR,QAAQ;QACR,QAAQ;AACT,KAAA;IACD,cAAc,EAAE,CAAC,UAAU,CAAC;AAC5B,IAAA,QAAQ,EAAE,QAAQ;AACnB,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uint32.mjs","sources":["../../../src/branded/number/uint32.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,MAAM,GAAG,CAAC,YAAA,GAAuB,QAAQ,CAAC,CAAC,CAAC,KACvD,KAAK,CAAC;AACJ,IAAA,
|
|
1
|
+
{"version":3,"file":"uint32.mjs","sources":["../../../src/branded/number/uint32.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,MAAM,GAAG,CAAC,YAAA,GAAuB,QAAQ,CAAC,CAAC,CAAC,KACvD,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;AAC9B,IAAA,EAAE,EAAE,QAAQ;IACZ,YAAY;AACZ,IAAA,SAAS,EAAE;QACT,QAAQ;QACR,KAAK;QACL,SAAS;QACT,SAAS;QACT,SAAS;QACT,UAAU;QACV,UAAU;QACV,KAAK;QACL,QAAQ;AACT,KAAA;IACD,cAAc,EAAE,CAAC,UAAU,CAAC;AAC5B,IAAA,QAAQ,EAAE,QAAQ;AACnB,CAAA;;;;"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import { type Type } from '../type.mjs';
|
|
2
|
-
export declare const simpleBrandedNumber: <
|
|
2
|
+
export declare const simpleBrandedNumber: <K extends string>({ typeName, defaultValue, is, }: Readonly<{
|
|
3
|
+
typeName: K;
|
|
4
|
+
defaultValue: number;
|
|
5
|
+
is?: (u: number) => u is Brand<number, K>;
|
|
6
|
+
}>) => Type<Brand<number, K>>;
|
|
3
7
|
//# sourceMappingURL=simple-branded-number.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simple-branded-number.d.mts","sourceRoot":"","sources":["../../src/branded/simple-branded-number.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAGxC,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"simple-branded-number.d.mts","sourceRoot":"","sources":["../../src/branded/simple-branded-number.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAGxC,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,MAAM,EAAE,iCAInD,QAAQ,CAAC;IACV,QAAQ,EAAE,CAAC,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;CAC3C,CAAC,KAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAUtB,CAAC"}
|
|
@@ -2,12 +2,12 @@ import 'ts-data-forge';
|
|
|
2
2
|
import { number } from '../primitives/number.mjs';
|
|
3
3
|
import { brand } from './brand.mjs';
|
|
4
4
|
|
|
5
|
-
const simpleBrandedNumber = (typeName, defaultValue =
|
|
6
|
-
|
|
5
|
+
const simpleBrandedNumber = ({ typeName, defaultValue, is = (_u) => true, }) => brand({
|
|
6
|
+
baseType: number(defaultValue),
|
|
7
7
|
defaultValue:
|
|
8
8
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
9
9
|
defaultValue,
|
|
10
|
-
is
|
|
10
|
+
is,
|
|
11
11
|
brandKeys: [typeName],
|
|
12
12
|
});
|
|
13
13
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simple-branded-number.mjs","sources":["../../src/branded/simple-branded-number.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"simple-branded-number.mjs","sources":["../../src/branded/simple-branded-number.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;MAIa,mBAAmB,GAAG,CAAmB,EACpD,QAAQ,EACR,YAAY,EACZ,EAAE,GAAG,CAAC,EAAE,KAA6B,IAAI,GAKzC,KACA,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;IAE9B,YAAY;;IAEV,YAAgC;IAElC,EAAE;IACF,SAAS,EAAE,CAAC,QAAQ,CAAC;AACtB,CAAA;;;;"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import { type Type } from '../type.mjs';
|
|
2
|
-
export declare const simpleBrandedString: <
|
|
2
|
+
export declare const simpleBrandedString: <K extends string>({ typeName, defaultValue, is, }: Readonly<{
|
|
3
|
+
typeName: K;
|
|
4
|
+
defaultValue: string;
|
|
5
|
+
is?: (u: string) => u is Brand<string, K>;
|
|
6
|
+
}>) => Type<Brand<string, K>>;
|
|
3
7
|
//# sourceMappingURL=simple-branded-string.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simple-branded-string.d.mts","sourceRoot":"","sources":["../../src/branded/simple-branded-string.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAGxC,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"simple-branded-string.d.mts","sourceRoot":"","sources":["../../src/branded/simple-branded-string.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAGxC,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,MAAM,EAAE,iCAInD,QAAQ,CAAC;IACV,QAAQ,EAAE,CAAC,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;CAC3C,CAAC,KAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAUtB,CAAC"}
|
|
@@ -2,12 +2,12 @@ import 'ts-data-forge';
|
|
|
2
2
|
import { string } from '../primitives/string.mjs';
|
|
3
3
|
import { brand } from './brand.mjs';
|
|
4
4
|
|
|
5
|
-
const simpleBrandedString = (typeName, defaultValue =
|
|
6
|
-
|
|
5
|
+
const simpleBrandedString = ({ typeName, defaultValue, is = (_u) => true, }) => brand({
|
|
6
|
+
baseType: string(defaultValue),
|
|
7
7
|
defaultValue:
|
|
8
8
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
9
9
|
defaultValue,
|
|
10
|
-
is
|
|
10
|
+
is,
|
|
11
11
|
brandKeys: [typeName],
|
|
12
12
|
});
|
|
13
13
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simple-branded-string.mjs","sources":["../../src/branded/simple-branded-string.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"simple-branded-string.mjs","sources":["../../src/branded/simple-branded-string.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;MAIa,mBAAmB,GAAG,CAAmB,EACpD,QAAQ,EACR,YAAY,EACZ,EAAE,GAAG,CAAC,EAAE,KAA6B,IAAI,GAKzC,KACA,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;IAE9B,YAAY;;IAEV,YAAgC;IAElC,EAAE;IACF,SAAS,EAAE,CAAC,QAAQ,CAAC;AACtB,CAAA;;;;"}
|
package/package.json
CHANGED
package/src/branded/brand.mts
CHANGED
|
@@ -11,14 +11,14 @@ export const brand = <
|
|
|
11
11
|
const BrandTrueKeys extends readonly string[],
|
|
12
12
|
const BrandFalseKeys extends readonly string[] = [],
|
|
13
13
|
>({
|
|
14
|
-
|
|
14
|
+
baseType,
|
|
15
15
|
is,
|
|
16
16
|
defaultValue,
|
|
17
17
|
typeName,
|
|
18
18
|
brandKeys,
|
|
19
19
|
brandFalseKeys,
|
|
20
20
|
}: Readonly<{
|
|
21
|
-
|
|
21
|
+
baseType: Type<A>;
|
|
22
22
|
is: (
|
|
23
23
|
a: A,
|
|
24
24
|
) => a is Brand<A, ArrayToUnion<BrandTrueKeys>, ArrayToUnion<BrandFalseKeys>>;
|
|
@@ -44,17 +44,17 @@ export const brand = <
|
|
|
44
44
|
|
|
45
45
|
const validate: Type<T>['validate'] = (a) =>
|
|
46
46
|
pipe(a)
|
|
47
|
-
.map(
|
|
47
|
+
.map(baseType.validate)
|
|
48
48
|
.map(
|
|
49
|
-
(
|
|
50
|
-
Result.isErr(
|
|
51
|
-
?
|
|
52
|
-
: is(
|
|
53
|
-
? Result.ok(
|
|
49
|
+
(res): Result<T, readonly ValidationError[]> =>
|
|
50
|
+
Result.isErr(res)
|
|
51
|
+
? res
|
|
52
|
+
: is(res.value)
|
|
53
|
+
? Result.ok(res.value satisfies T)
|
|
54
54
|
: Result.err([
|
|
55
55
|
{
|
|
56
56
|
path: [],
|
|
57
|
-
actualValue:
|
|
57
|
+
actualValue: res.value,
|
|
58
58
|
expectedType: typeNameFilled,
|
|
59
59
|
typeName: brandKeysStr,
|
|
60
60
|
message:
|
|
@@ -10,7 +10,7 @@ export const nonNegativeFiniteNumber = (
|
|
|
10
10
|
defaultValue: NonNegativeFiniteNumber = asNonNegativeFiniteNumber(0),
|
|
11
11
|
): Type<NonNegativeFiniteNumber> =>
|
|
12
12
|
brand({
|
|
13
|
-
|
|
13
|
+
baseType: number(defaultValue),
|
|
14
14
|
is: isNonNegativeFiniteNumber,
|
|
15
15
|
defaultValue,
|
|
16
16
|
brandKeys: ['>=0', '> -2^16', '> -2^32', '>= -2^15', '>= -2^31', 'Finite'],
|
|
@@ -5,7 +5,7 @@ import { brand } from '../brand.mjs';
|
|
|
5
5
|
|
|
6
6
|
export const safeInt = (defaultValue: SafeInt = asSafeInt(0)): Type<SafeInt> =>
|
|
7
7
|
brand({
|
|
8
|
-
|
|
8
|
+
baseType: number(defaultValue),
|
|
9
9
|
is: SafeInt.is,
|
|
10
10
|
defaultValue,
|
|
11
11
|
brandKeys: ['Finite', 'Int', 'SafeInt'],
|
|
@@ -2,17 +2,22 @@ import { number } from '../primitives/index.mjs';
|
|
|
2
2
|
import { type Type } from '../type.mjs';
|
|
3
3
|
import { brand } from './brand.mjs';
|
|
4
4
|
|
|
5
|
-
export const simpleBrandedNumber = <
|
|
6
|
-
typeName
|
|
7
|
-
defaultValue
|
|
8
|
-
):
|
|
5
|
+
export const simpleBrandedNumber = <K extends string>({
|
|
6
|
+
typeName,
|
|
7
|
+
defaultValue,
|
|
8
|
+
is = (_u): _u is Brand<number, K> => true,
|
|
9
|
+
}: Readonly<{
|
|
10
|
+
typeName: K;
|
|
11
|
+
defaultValue: number;
|
|
12
|
+
is?: (u: number) => u is Brand<number, K>;
|
|
13
|
+
}>): Type<Brand<number, K>> =>
|
|
9
14
|
brand({
|
|
10
|
-
|
|
15
|
+
baseType: number(defaultValue),
|
|
11
16
|
|
|
12
17
|
defaultValue:
|
|
13
18
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
14
|
-
defaultValue as Brand<number,
|
|
19
|
+
defaultValue as Brand<number, K>,
|
|
15
20
|
|
|
16
|
-
is
|
|
21
|
+
is,
|
|
17
22
|
brandKeys: [typeName],
|
|
18
23
|
});
|
|
@@ -5,7 +5,10 @@ import { simpleBrandedNumber } from './simple-branded-number.mjs';
|
|
|
5
5
|
|
|
6
6
|
describe('simpleBrandedNumber', () => {
|
|
7
7
|
describe('with default value', () => {
|
|
8
|
-
const userIdType = simpleBrandedNumber(
|
|
8
|
+
const userIdType = simpleBrandedNumber({
|
|
9
|
+
typeName: 'UserId',
|
|
10
|
+
defaultValue: 0,
|
|
11
|
+
});
|
|
9
12
|
|
|
10
13
|
type UserId = TypeOf<typeof userIdType>;
|
|
11
14
|
|
|
@@ -97,7 +100,10 @@ describe('simpleBrandedNumber', () => {
|
|
|
97
100
|
});
|
|
98
101
|
|
|
99
102
|
describe('with custom default value', () => {
|
|
100
|
-
const scoreType = simpleBrandedNumber(
|
|
103
|
+
const scoreType = simpleBrandedNumber({
|
|
104
|
+
typeName: 'Score',
|
|
105
|
+
defaultValue: 100,
|
|
106
|
+
});
|
|
101
107
|
|
|
102
108
|
type Score = TypeOf<typeof scoreType>;
|
|
103
109
|
|
|
@@ -160,7 +166,10 @@ describe('simpleBrandedNumber', () => {
|
|
|
160
166
|
});
|
|
161
167
|
|
|
162
168
|
describe('type assertions and narrowing', () => {
|
|
163
|
-
const priceType = simpleBrandedNumber(
|
|
169
|
+
const priceType = simpleBrandedNumber({
|
|
170
|
+
typeName: 'Price',
|
|
171
|
+
defaultValue: 0,
|
|
172
|
+
});
|
|
164
173
|
|
|
165
174
|
test('type narrowing works correctly', () => {
|
|
166
175
|
const x: unknown = 29.99;
|
|
@@ -2,17 +2,22 @@ import { string } from '../primitives/index.mjs';
|
|
|
2
2
|
import { type Type } from '../type.mjs';
|
|
3
3
|
import { brand } from './brand.mjs';
|
|
4
4
|
|
|
5
|
-
export const simpleBrandedString = <
|
|
6
|
-
typeName
|
|
7
|
-
defaultValue
|
|
8
|
-
):
|
|
5
|
+
export const simpleBrandedString = <K extends string>({
|
|
6
|
+
typeName,
|
|
7
|
+
defaultValue,
|
|
8
|
+
is = (_u): _u is Brand<string, K> => true,
|
|
9
|
+
}: Readonly<{
|
|
10
|
+
typeName: K;
|
|
11
|
+
defaultValue: string;
|
|
12
|
+
is?: (u: string) => u is Brand<string, K>;
|
|
13
|
+
}>): Type<Brand<string, K>> =>
|
|
9
14
|
brand({
|
|
10
|
-
|
|
15
|
+
baseType: string(defaultValue),
|
|
11
16
|
|
|
12
17
|
defaultValue:
|
|
13
18
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
14
|
-
defaultValue as Brand<string,
|
|
19
|
+
defaultValue as Brand<string, K>,
|
|
15
20
|
|
|
16
|
-
is
|
|
21
|
+
is,
|
|
17
22
|
brandKeys: [typeName],
|
|
18
23
|
});
|
|
@@ -5,7 +5,10 @@ import { simpleBrandedString } from './simple-branded-string.mjs';
|
|
|
5
5
|
|
|
6
6
|
describe('simpleBrandedString', () => {
|
|
7
7
|
describe('with default value', () => {
|
|
8
|
-
const userNameType = simpleBrandedString(
|
|
8
|
+
const userNameType = simpleBrandedString({
|
|
9
|
+
typeName: 'UserName',
|
|
10
|
+
defaultValue: '',
|
|
11
|
+
});
|
|
9
12
|
|
|
10
13
|
type UserName = TypeOf<typeof userNameType>;
|
|
11
14
|
|
|
@@ -98,7 +101,10 @@ describe('simpleBrandedString', () => {
|
|
|
98
101
|
});
|
|
99
102
|
|
|
100
103
|
describe('with custom default value', () => {
|
|
101
|
-
const categoryType = simpleBrandedString(
|
|
104
|
+
const categoryType = simpleBrandedString({
|
|
105
|
+
typeName: 'Category',
|
|
106
|
+
defaultValue: 'general',
|
|
107
|
+
});
|
|
102
108
|
|
|
103
109
|
type Category = TypeOf<typeof categoryType>;
|
|
104
110
|
|
|
@@ -161,7 +167,10 @@ describe('simpleBrandedString', () => {
|
|
|
161
167
|
});
|
|
162
168
|
|
|
163
169
|
describe('type assertions and narrowing', () => {
|
|
164
|
-
const emailType = simpleBrandedString(
|
|
170
|
+
const emailType = simpleBrandedString({
|
|
171
|
+
typeName: 'Email',
|
|
172
|
+
defaultValue: '',
|
|
173
|
+
});
|
|
165
174
|
|
|
166
175
|
test('type narrowing works correctly', () => {
|
|
167
176
|
const x: unknown = 'user@example.com';
|
|
@@ -178,8 +187,14 @@ describe('simpleBrandedString', () => {
|
|
|
178
187
|
});
|
|
179
188
|
|
|
180
189
|
describe('different brand types', () => {
|
|
181
|
-
const firstNameType = simpleBrandedString(
|
|
182
|
-
|
|
190
|
+
const firstNameType = simpleBrandedString({
|
|
191
|
+
typeName: 'FirstName',
|
|
192
|
+
defaultValue: '',
|
|
193
|
+
});
|
|
194
|
+
const lastNameType = simpleBrandedString({
|
|
195
|
+
typeName: 'LastName',
|
|
196
|
+
defaultValue: '',
|
|
197
|
+
});
|
|
183
198
|
|
|
184
199
|
test('creates distinct branded types', () => {
|
|
185
200
|
type FirstName = TypeOf<typeof firstNameType>;
|