nalloc 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +282 -0
- package/build/devtools.cjs +79 -0
- package/build/devtools.cjs.map +1 -0
- package/build/devtools.d.ts +82 -0
- package/build/devtools.js +43 -0
- package/build/devtools.js.map +1 -0
- package/build/index.cjs +76 -0
- package/build/index.cjs.map +1 -0
- package/build/index.d.ts +4 -0
- package/build/index.js +5 -0
- package/build/index.js.map +1 -0
- package/build/option.cjs +279 -0
- package/build/option.cjs.map +1 -0
- package/build/option.d.ts +356 -0
- package/build/option.js +157 -0
- package/build/option.js.map +1 -0
- package/build/result.cjs +381 -0
- package/build/result.cjs.map +1 -0
- package/build/result.d.ts +442 -0
- package/build/result.js +229 -0
- package/build/result.js.map +1 -0
- package/build/safe.cjs +88 -0
- package/build/safe.cjs.map +1 -0
- package/build/safe.d.ts +29 -0
- package/build/safe.js +18 -0
- package/build/safe.js.map +1 -0
- package/build/testing.cjs +111 -0
- package/build/testing.cjs.map +1 -0
- package/build/testing.d.ts +85 -0
- package/build/testing.js +81 -0
- package/build/testing.js.map +1 -0
- package/build/types.cjs +78 -0
- package/build/types.cjs.map +1 -0
- package/build/types.d.ts +137 -0
- package/build/types.js +36 -0
- package/build/types.js.map +1 -0
- package/build/unsafe.cjs +82 -0
- package/build/unsafe.cjs.map +1 -0
- package/build/unsafe.d.ts +27 -0
- package/build/unsafe.js +11 -0
- package/build/unsafe.js.map +1 -0
- package/package.json +93 -0
- package/src/__tests__/index.ts +13 -0
- package/src/__tests__/option.ts +610 -0
- package/src/__tests__/option.types.ts +120 -0
- package/src/__tests__/result.ts +721 -0
- package/src/__tests__/result.types.ts +249 -0
- package/src/__tests__/safe.ts +24 -0
- package/src/__tests__/tooling.ts +86 -0
- package/src/__tests__/unsafe.ts +24 -0
- package/src/devtools.ts +97 -0
- package/src/index.ts +18 -0
- package/src/option.ts +510 -0
- package/src/result.ts +676 -0
- package/src/safe.ts +58 -0
- package/src/testing.ts +159 -0
- package/src/types.ts +201 -0
- package/src/unsafe.ts +47 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { assert, type Not, type Equals } from 'tsafe';
|
|
2
|
+
import {
|
|
3
|
+
of,
|
|
4
|
+
isSome,
|
|
5
|
+
isNone,
|
|
6
|
+
map,
|
|
7
|
+
filter,
|
|
8
|
+
okOr,
|
|
9
|
+
okOrElse,
|
|
10
|
+
filterMap,
|
|
11
|
+
fromNullable,
|
|
12
|
+
unwrapOrReturn,
|
|
13
|
+
assertSome,
|
|
14
|
+
satisfiesOption
|
|
15
|
+
} from '../option.js';
|
|
16
|
+
import { Some, None, Option, some, none, type InferSome } from '../types.js';
|
|
17
|
+
import { Result, isOk, isErr } from '../result.js';
|
|
18
|
+
|
|
19
|
+
type TRUE = true;
|
|
20
|
+
type FALSE = false;
|
|
21
|
+
|
|
22
|
+
const someValue = of<number>(5);
|
|
23
|
+
assert<Equals<typeof someValue, Some<number>>>;
|
|
24
|
+
assert<Not<Equals<typeof someValue, None>>>;
|
|
25
|
+
|
|
26
|
+
const explicitSome = some<number>(42);
|
|
27
|
+
assert<Equals<typeof explicitSome, Some<number>>>;
|
|
28
|
+
|
|
29
|
+
const noneValue = none;
|
|
30
|
+
assert<Equals<typeof noneValue, None>>;
|
|
31
|
+
|
|
32
|
+
const optValue: Option<number> = Math.random() > 0 ? of(5) : none;
|
|
33
|
+
if (isSome(optValue)) {
|
|
34
|
+
assert<Equals<typeof optValue, Some<number>>>;
|
|
35
|
+
const directAccess: number = optValue;}
|
|
36
|
+
if (isNone(optValue)) {
|
|
37
|
+
assert<Equals<typeof optValue, None>>;
|
|
38
|
+
}
|
|
39
|
+
const mapped = map(someValue, (v) => v * 2);assert<Equals<typeof mapped, Option<number>>>;
|
|
40
|
+
const maybeNullMapped = map(someValue, (v): number | null => v > 10 ? v : null);
|
|
41
|
+
assert<Equals<typeof maybeNullMapped, Option<number>>>;
|
|
42
|
+
const filtered = filter(someValue, (v) => v > 0);
|
|
43
|
+
assert<Equals<typeof filtered, Option<number>>>;
|
|
44
|
+
const noneFromNull = of(null);
|
|
45
|
+
assert<Equals<typeof noneFromNull, None>>;
|
|
46
|
+
assert<Not<Equals<typeof noneFromNull, Some<any>>>>;
|
|
47
|
+
const noneFromUndefined = of(undefined);
|
|
48
|
+
assert<Equals<typeof noneFromUndefined, None>>;
|
|
49
|
+
const noneResult = map(noneFromNull, () => 42);
|
|
50
|
+
assert<Equals<typeof noneResult, None>>;
|
|
51
|
+
|
|
52
|
+
const noneFiltered = filter(noneFromNull, () => true);
|
|
53
|
+
assert<Equals<typeof noneFiltered, None>>;
|
|
54
|
+
const unknownOption: Option<number> = Math.random() > 0.5 ? of(42) : none;
|
|
55
|
+
|
|
56
|
+
if (isSome(unknownOption)) {
|
|
57
|
+
assert<Equals<typeof unknownOption, Some<number>>>;
|
|
58
|
+
const value: number = unknownOption;
|
|
59
|
+
} else {
|
|
60
|
+
assert<Equals<typeof unknownOption, None>>;
|
|
61
|
+
}
|
|
62
|
+
const someNumber: Some<number> = of(100) as Some<number>;
|
|
63
|
+
const plainNumber: number = someNumber;const result = map(
|
|
64
|
+
filter(
|
|
65
|
+
of(10),
|
|
66
|
+
x => x > 5
|
|
67
|
+
),
|
|
68
|
+
x => x * 2
|
|
69
|
+
);
|
|
70
|
+
assert<Equals<typeof result, Option<number>>>;
|
|
71
|
+
const knownSome = of(123);
|
|
72
|
+
const isSomeOnSome = isSome(knownSome);
|
|
73
|
+
assert<Equals<typeof isSomeOnSome, true>>;
|
|
74
|
+
assert<Not<Equals<typeof isSomeOnSome, false>>>;
|
|
75
|
+
assert<Not<Equals<typeof isSomeOnSome, boolean>>>;
|
|
76
|
+
const knownNone = none;
|
|
77
|
+
const isSomeOnNone = isSome(knownNone);
|
|
78
|
+
assert<Equals<typeof isSomeOnNone, false>>;
|
|
79
|
+
assert<Not<Equals<typeof isSomeOnNone, true>>>;
|
|
80
|
+
assert<Not<Equals<typeof isSomeOnNone, boolean>>>;
|
|
81
|
+
const isNoneOnSome = isNone(knownSome);
|
|
82
|
+
assert<Equals<typeof isNoneOnSome, false>>;
|
|
83
|
+
assert<Not<Equals<typeof isNoneOnSome, true>>>;
|
|
84
|
+
assert<Not<Equals<typeof isNoneOnSome, boolean>>>;
|
|
85
|
+
const isNoneOnNone = isNone(knownNone);
|
|
86
|
+
assert<Equals<typeof isNoneOnNone, true>>;
|
|
87
|
+
assert<Not<Equals<typeof isNoneOnNone, false>>>;
|
|
88
|
+
assert<Not<Equals<typeof isNoneOnNone, boolean>>>;
|
|
89
|
+
const nestedOption: Option<Option<number>> = of(of(42));
|
|
90
|
+
|
|
91
|
+
const optToResult = okOr(of(42), 'error');
|
|
92
|
+
// optToResult is Result<number, string>
|
|
93
|
+
|
|
94
|
+
const noneToResult = okOr(none, 'error');
|
|
95
|
+
// noneToResult is Result<never, string>
|
|
96
|
+
|
|
97
|
+
const lazyErrorResult = okOrElse(none, () => new Error('computed'));
|
|
98
|
+
// lazyErrorResult is Result<never, Error>
|
|
99
|
+
|
|
100
|
+
const optionArray: Option<number>[] = [of(1), none, of(3)];
|
|
101
|
+
const mappedArray = filterMap(optionArray, opt => opt);
|
|
102
|
+
assert<Equals<typeof mappedArray, number[]>>;
|
|
103
|
+
|
|
104
|
+
const nullable = fromNullable(5);
|
|
105
|
+
assert<Equals<typeof nullable, Option<number>>>;
|
|
106
|
+
|
|
107
|
+
const fallback = unwrapOrReturn(of(2), () => 'fallback');
|
|
108
|
+
assert<Equals<typeof fallback, number | string>>;
|
|
109
|
+
|
|
110
|
+
declare const unknownOptionValue: Option<number>;
|
|
111
|
+
assertSome(unknownOptionValue);
|
|
112
|
+
const narrowedSome: Some<number> = unknownOptionValue;
|
|
113
|
+
|
|
114
|
+
let candidate: Option<number> | number = of(5);
|
|
115
|
+
satisfiesOption(candidate);
|
|
116
|
+
type CandidateIsOption = typeof candidate extends Option<number> ? TRUE : FALSE;
|
|
117
|
+
assert<Equals<CandidateIsOption, true>>;
|
|
118
|
+
|
|
119
|
+
type ExtractedSome = InferSome<Option<number>>;
|
|
120
|
+
assert<Equals<ExtractedSome, Some<number>>>;
|