compostjs 0.0.11 → 0.0.12
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/fable_modules/fable-library-js.4.28.0/Array.d.ts +123 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Array.js +1242 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Async.d.ts +26 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Async.js +145 -0
- package/dist/fable_modules/fable-library-js.4.28.0/AsyncBuilder.d.ts +59 -0
- package/dist/fable_modules/fable-library-js.4.28.0/AsyncBuilder.js +183 -0
- package/dist/fable_modules/fable-library-js.4.28.0/BigInt.d.ts +115 -0
- package/dist/fable_modules/fable-library-js.4.28.0/BigInt.js +283 -0
- package/dist/fable_modules/fable-library-js.4.28.0/BitConverter.d.ts +27 -0
- package/dist/fable_modules/fable-library-js.4.28.0/BitConverter.js +138 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Boolean.d.ts +3 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Boolean.js +21 -0
- package/dist/fable_modules/fable-library-js.4.28.0/CHANGELOG.md +100 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Char.d.ts +65 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Char.js +169 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Choice.d.ts +121 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Choice.js +184 -0
- package/dist/fable_modules/fable-library-js.4.28.0/CollectionUtil.d.ts +7 -0
- package/dist/fable_modules/fable-library-js.4.28.0/CollectionUtil.js +182 -0
- package/dist/fable_modules/fable-library-js.4.28.0/ConditionalWeakTable.d.ts +9 -0
- package/dist/fable_modules/fable-library-js.4.28.0/ConditionalWeakTable.js +21 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Date.d.ts +70 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Date.js +748 -0
- package/dist/fable_modules/fable-library-js.4.28.0/DateOffset.d.ts +63 -0
- package/dist/fable_modules/fable-library-js.4.28.0/DateOffset.js +268 -0
- package/dist/fable_modules/fable-library-js.4.28.0/DateOnly.d.ts +18 -0
- package/dist/fable_modules/fable-library-js.4.28.0/DateOnly.js +124 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Decimal.d.ts +45 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Decimal.js +212 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Double.d.ts +11 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Double.js +46 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Encoding.d.ts +12 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Encoding.js +173 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Event.d.ts +31 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Event.js +93 -0
- package/dist/fable_modules/fable-library-js.4.28.0/FSharp.Collections.d.ts +7 -0
- package/dist/fable_modules/fable-library-js.4.28.0/FSharp.Collections.js +27 -0
- package/dist/fable_modules/fable-library-js.4.28.0/FSharp.Core.CompilerServices.d.ts +12 -0
- package/dist/fable_modules/fable-library-js.4.28.0/FSharp.Core.CompilerServices.js +27 -0
- package/dist/fable_modules/fable-library-js.4.28.0/FSharp.Core.d.ts +17 -0
- package/dist/fable_modules/fable-library-js.4.28.0/FSharp.Core.js +69 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Global.d.ts +24 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Global.js +8 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Guid.d.ts +10 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Guid.js +142 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Int32.d.ts +28 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Int32.js +135 -0
- package/dist/fable_modules/fable-library-js.4.28.0/List.d.ts +143 -0
- package/dist/fable_modules/fable-library-js.4.28.0/List.js +1273 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Long.d.ts +3 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Long.js +46 -0
- package/dist/fable_modules/fable-library-js.4.28.0/MailboxProcessor.d.ts +25 -0
- package/dist/fable_modules/fable-library-js.4.28.0/MailboxProcessor.js +93 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Map.d.ts +178 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Map.js +1396 -0
- package/dist/fable_modules/fable-library-js.4.28.0/MapUtil.d.ts +12 -0
- package/dist/fable_modules/fable-library-js.4.28.0/MapUtil.js +127 -0
- package/dist/fable_modules/fable-library-js.4.28.0/MutableMap.d.ts +52 -0
- package/dist/fable_modules/fable-library-js.4.28.0/MutableMap.js +327 -0
- package/dist/fable_modules/fable-library-js.4.28.0/MutableSet.d.ts +39 -0
- package/dist/fable_modules/fable-library-js.4.28.0/MutableSet.js +233 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Native.d.ts +2 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Native.js +8 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Numeric.d.ts +19 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Numeric.js +71 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Observable.d.ts +32 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Observable.js +113 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Option.d.ts +28 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Option.js +96 -0
- package/dist/fable_modules/fable-library-js.4.28.0/README.md +3 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Random.d.ts +37 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Random.js +170 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Range.d.ts +12 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Range.js +45 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Reflection.d.ts +119 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Reflection.js +461 -0
- package/dist/fable_modules/fable-library-js.4.28.0/RegExp.d.ts +10 -0
- package/dist/fable_modules/fable-library-js.4.28.0/RegExp.js +131 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Result.d.ts +37 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Result.js +165 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Seq.d.ts +165 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Seq.js +1378 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Seq2.d.ts +18 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Seq2.js +111 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Set.d.ts +190 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Set.js +1789 -0
- package/dist/fable_modules/fable-library-js.4.28.0/String.d.ts +58 -0
- package/dist/fable_modules/fable-library-js.4.28.0/String.js +554 -0
- package/dist/fable_modules/fable-library-js.4.28.0/System.Collections.Generic.d.ts +79 -0
- package/dist/fable_modules/fable-library-js.4.28.0/System.Collections.Generic.js +317 -0
- package/dist/fable_modules/fable-library-js.4.28.0/System.Text.d.ts +38 -0
- package/dist/fable_modules/fable-library-js.4.28.0/System.Text.js +162 -0
- package/dist/fable_modules/fable-library-js.4.28.0/SystemException.d.ts +5 -0
- package/dist/fable_modules/fable-library-js.4.28.0/SystemException.js +5 -0
- package/dist/fable_modules/fable-library-js.4.28.0/TimeOnly.d.ts +15 -0
- package/dist/fable_modules/fable-library-js.4.28.0/TimeOnly.js +122 -0
- package/dist/fable_modules/fable-library-js.4.28.0/TimeSpan.d.ts +34 -0
- package/dist/fable_modules/fable-library-js.4.28.0/TimeSpan.js +177 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Timer.d.ts +19 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Timer.js +67 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Types.d.ts +58 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Types.js +208 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Unicode.13.0.0.d.ts +2 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Unicode.13.0.0.js +4 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Uri.d.ts +31 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Uri.js +159 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Util.d.ts +210 -0
- package/dist/fable_modules/fable-library-js.4.28.0/Util.js +769 -0
- package/dist/fable_modules/fable-library-js.4.28.0/big.d.ts +338 -0
- package/dist/fable_modules/fable-library-js.4.28.0/lib/big.d.ts +5 -0
- package/dist/fable_modules/fable-library-js.4.28.0/lib/big.js +825 -0
- package/dist/fable_modules/fable-library-js.4.28.0/package.json +24 -0
- package/dist/fable_modules/project_cracked.json +1 -0
- package/package.json +4 -3
- package/.claude/settings.local.json +0 -11
- package/copy-latest.sh +0 -1
- package/dist/fable-library.2.10.1/Array.js +0 -1336
- package/dist/fable-library.2.10.1/Async.js +0 -121
- package/dist/fable-library.2.10.1/AsyncBuilder.js +0 -200
- package/dist/fable-library.2.10.1/Date.js +0 -501
- package/dist/fable-library.2.10.1/Decimal.js +0 -208
- package/dist/fable-library.2.10.1/Event.js +0 -193
- package/dist/fable-library.2.10.1/Int32.js +0 -157
- package/dist/fable-library.2.10.1/List.js +0 -1234
- package/dist/fable-library.2.10.1/Long.js +0 -155
- package/dist/fable-library.2.10.1/Map.js +0 -1292
- package/dist/fable-library.2.10.1/MutableMap.js +0 -360
- package/dist/fable-library.2.10.1/MutableSet.js +0 -279
- package/dist/fable-library.2.10.1/Observable.js +0 -131
- package/dist/fable-library.2.10.1/Option.js +0 -118
- package/dist/fable-library.2.10.1/Reflection.js +0 -345
- package/dist/fable-library.2.10.1/RegExp.js +0 -118
- package/dist/fable-library.2.10.1/Seq.js +0 -917
- package/dist/fable-library.2.10.1/Set.js +0 -1692
- package/dist/fable-library.2.10.1/String.js +0 -679
- package/dist/fable-library.2.10.1/Types.js +0 -308
- package/dist/fable-library.2.10.1/Util.js +0 -761
- package/dist/helpers.js +0 -31
- package/dist/lib/big.js +0 -905
- package/dist/lib/long.js +0 -1375
- package/index.html +0 -49
|
@@ -1,761 +0,0 @@
|
|
|
1
|
-
// tslint:disable:ban-types
|
|
2
|
-
export function bindThis(this$, source) {
|
|
3
|
-
for (const key of Object.keys(source)) {
|
|
4
|
-
if (typeof source[key] === "function") {
|
|
5
|
-
source[key] = source[key].bind(this$);
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
return source;
|
|
10
|
-
} // Object.assign flattens getters and setters
|
|
11
|
-
// See https://stackoverflow.com/questions/37054596/js-es5-how-to-assign-objects-with-setters-and-getters
|
|
12
|
-
|
|
13
|
-
export function extend(target, ...sources) {
|
|
14
|
-
for (const source of sources) {
|
|
15
|
-
for (const key of Object.keys(source)) {
|
|
16
|
-
const descr = Object.getOwnPropertyDescriptor(source, key);
|
|
17
|
-
|
|
18
|
-
if (descr) {
|
|
19
|
-
Object.defineProperty(target, key, descr);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return target;
|
|
25
|
-
}
|
|
26
|
-
export function isIterable(x) {
|
|
27
|
-
return x != null && typeof x === "object" && Symbol.iterator in x;
|
|
28
|
-
}
|
|
29
|
-
export function isArrayLike(x) {
|
|
30
|
-
return x != null && (Array.isArray(x) || ArrayBuffer.isView(x));
|
|
31
|
-
}
|
|
32
|
-
export function isComparer(x) {
|
|
33
|
-
return x != null && typeof x.Compare === "function";
|
|
34
|
-
}
|
|
35
|
-
export function isComparable(x) {
|
|
36
|
-
return x != null && typeof x.CompareTo === "function";
|
|
37
|
-
}
|
|
38
|
-
export function isEquatable(x) {
|
|
39
|
-
return x != null && typeof x.Equals === "function";
|
|
40
|
-
}
|
|
41
|
-
export function isHashable(x) {
|
|
42
|
-
return x != null && typeof x.GetHashCode === "function";
|
|
43
|
-
}
|
|
44
|
-
export function isDisposable(x) {
|
|
45
|
-
return x != null && typeof x.Dispose === "function";
|
|
46
|
-
}
|
|
47
|
-
export class Comparer {
|
|
48
|
-
constructor(f) {
|
|
49
|
-
this.Compare = f || compare;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
export function comparerFromEqualityComparer(comparer) {
|
|
54
|
-
// Sometimes IEqualityComparer also implements IComparer
|
|
55
|
-
if (isComparer(comparer)) {
|
|
56
|
-
return new Comparer(comparer.Compare);
|
|
57
|
-
} else {
|
|
58
|
-
return new Comparer((x, y) => {
|
|
59
|
-
const xhash = comparer.GetHashCode(x);
|
|
60
|
-
const yhash = comparer.GetHashCode(y);
|
|
61
|
-
|
|
62
|
-
if (xhash === yhash) {
|
|
63
|
-
return comparer.Equals(x, y) ? 0 : -1;
|
|
64
|
-
} else {
|
|
65
|
-
return xhash < yhash ? -1 : 1;
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
} // TODO: Move these three methods to Map and Set modules
|
|
70
|
-
|
|
71
|
-
export function containsValue(v, map) {
|
|
72
|
-
for (const kv of map) {
|
|
73
|
-
if (equals(v, kv[1])) {
|
|
74
|
-
return true;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
export function tryGetValue(map, key, defaultValue) {
|
|
81
|
-
return map.has(key) ? [true, map.get(key)] : [false, defaultValue];
|
|
82
|
-
}
|
|
83
|
-
export function addToSet(v, set) {
|
|
84
|
-
if (set.has(v)) {
|
|
85
|
-
return false;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
set.add(v);
|
|
89
|
-
return true;
|
|
90
|
-
}
|
|
91
|
-
export function assertEqual(actual, expected, msg) {
|
|
92
|
-
if (!equals(actual, expected)) {
|
|
93
|
-
throw Object.assign(new Error(msg || `Expected: ${expected} - Actual: ${actual}`), {
|
|
94
|
-
actual,
|
|
95
|
-
expected
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
export function assertNotEqual(actual, expected, msg) {
|
|
100
|
-
if (equals(actual, expected)) {
|
|
101
|
-
throw Object.assign(new Error(msg || `Expected: ${expected} - Actual: ${actual}`), {
|
|
102
|
-
actual,
|
|
103
|
-
expected
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
export class Lazy {
|
|
108
|
-
constructor(factory) {
|
|
109
|
-
this.factory = factory;
|
|
110
|
-
this.isValueCreated = false;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
get Value() {
|
|
114
|
-
if (!this.isValueCreated) {
|
|
115
|
-
this.createdValue = this.factory();
|
|
116
|
-
this.isValueCreated = true;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
return this.createdValue;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
get IsValueCreated() {
|
|
123
|
-
return this.isValueCreated;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
}
|
|
127
|
-
export function lazyFromValue(v) {
|
|
128
|
-
return new Lazy(() => v);
|
|
129
|
-
}
|
|
130
|
-
export function padWithZeros(i, length) {
|
|
131
|
-
let str = i.toString(10);
|
|
132
|
-
|
|
133
|
-
while (str.length < length) {
|
|
134
|
-
str = "0" + str;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
return str;
|
|
138
|
-
}
|
|
139
|
-
export function padLeftAndRightWithZeros(i, lengthLeft, lengthRight) {
|
|
140
|
-
let str = i.toString(10);
|
|
141
|
-
|
|
142
|
-
while (str.length < lengthLeft) {
|
|
143
|
-
str = "0" + str;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
while (str.length < lengthRight) {
|
|
147
|
-
str = str + "0";
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
return str;
|
|
151
|
-
}
|
|
152
|
-
export function dateOffset(date) {
|
|
153
|
-
const date1 = date;
|
|
154
|
-
return typeof date1.offset === "number" ? date1.offset : date.kind === 1
|
|
155
|
-
/* UTC */
|
|
156
|
-
? 0 : date.getTimezoneOffset() * -60000;
|
|
157
|
-
}
|
|
158
|
-
export function int16ToString(i, radix) {
|
|
159
|
-
i = i < 0 && radix != null && radix !== 10 ? 0xFFFF + i + 1 : i;
|
|
160
|
-
return i.toString(radix);
|
|
161
|
-
}
|
|
162
|
-
export function int32ToString(i, radix) {
|
|
163
|
-
i = i < 0 && radix != null && radix !== 10 ? 0xFFFFFFFF + i + 1 : i;
|
|
164
|
-
return i.toString(radix);
|
|
165
|
-
}
|
|
166
|
-
export class ObjectRef {
|
|
167
|
-
static id(o) {
|
|
168
|
-
if (!ObjectRef.idMap.has(o)) {
|
|
169
|
-
ObjectRef.idMap.set(o, ++ObjectRef.count);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
return ObjectRef.idMap.get(o);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
}
|
|
176
|
-
ObjectRef.idMap = new WeakMap();
|
|
177
|
-
ObjectRef.count = 0;
|
|
178
|
-
export function stringHash(s) {
|
|
179
|
-
let i = 0;
|
|
180
|
-
let h = 5381;
|
|
181
|
-
const len = s.length;
|
|
182
|
-
|
|
183
|
-
while (i < len) {
|
|
184
|
-
h = h * 33 ^ s.charCodeAt(i++);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
return h;
|
|
188
|
-
}
|
|
189
|
-
export function numberHash(x) {
|
|
190
|
-
return x * 2654435761 | 0;
|
|
191
|
-
} // From https://stackoverflow.com/a/37449594
|
|
192
|
-
|
|
193
|
-
export function combineHashCodes(hashes) {
|
|
194
|
-
if (hashes.length === 0) {
|
|
195
|
-
return 0;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
return hashes.reduce((h1, h2) => {
|
|
199
|
-
return (h1 << 5) + h1 ^ h2;
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
export function identityHash(x) {
|
|
203
|
-
if (x == null) {
|
|
204
|
-
return 0;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
switch (typeof x) {
|
|
208
|
-
case "boolean":
|
|
209
|
-
return x ? 1 : 0;
|
|
210
|
-
|
|
211
|
-
case "number":
|
|
212
|
-
return numberHash(x);
|
|
213
|
-
|
|
214
|
-
case "string":
|
|
215
|
-
return stringHash(x);
|
|
216
|
-
|
|
217
|
-
default:
|
|
218
|
-
return numberHash(ObjectRef.id(x));
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
export function structuralHash(x) {
|
|
222
|
-
if (x == null) {
|
|
223
|
-
return 0;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
switch (typeof x) {
|
|
227
|
-
case "boolean":
|
|
228
|
-
return x ? 1 : 0;
|
|
229
|
-
|
|
230
|
-
case "number":
|
|
231
|
-
return numberHash(x);
|
|
232
|
-
|
|
233
|
-
case "string":
|
|
234
|
-
return stringHash(x);
|
|
235
|
-
|
|
236
|
-
default:
|
|
237
|
-
{
|
|
238
|
-
if (isHashable(x)) {
|
|
239
|
-
return x.GetHashCode();
|
|
240
|
-
} else if (isArrayLike(x)) {
|
|
241
|
-
const len = x.length;
|
|
242
|
-
const hashes = new Array(len);
|
|
243
|
-
|
|
244
|
-
for (let i = 0; i < len; i++) {
|
|
245
|
-
hashes[i] = structuralHash(x[i]);
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
return combineHashCodes(hashes);
|
|
249
|
-
} else {
|
|
250
|
-
return stringHash(String(x));
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
export function equalArraysWith(x, y, eq) {
|
|
256
|
-
if (x == null) {
|
|
257
|
-
return y == null;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
if (y == null) {
|
|
261
|
-
return false;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
if (x.length !== y.length) {
|
|
265
|
-
return false;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
for (let i = 0; i < x.length; i++) {
|
|
269
|
-
if (!eq(x[i], y[i])) {
|
|
270
|
-
return false;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
return true;
|
|
275
|
-
}
|
|
276
|
-
export function equalArrays(x, y) {
|
|
277
|
-
return equalArraysWith(x, y, equals);
|
|
278
|
-
} // export function equalObjects(x: { [k: string]: any }, y: { [k: string]: any }): boolean {
|
|
279
|
-
// if (x == null) { return y == null; }
|
|
280
|
-
// if (y == null) { return false; }
|
|
281
|
-
// const xKeys = Object.keys(x);
|
|
282
|
-
// const yKeys = Object.keys(y);
|
|
283
|
-
// if (xKeys.length !== yKeys.length) {
|
|
284
|
-
// return false;
|
|
285
|
-
// }
|
|
286
|
-
// xKeys.sort();
|
|
287
|
-
// yKeys.sort();
|
|
288
|
-
// for (let i = 0; i < xKeys.length; i++) {
|
|
289
|
-
// if (xKeys[i] !== yKeys[i] || !equals(x[xKeys[i]], y[yKeys[i]])) {
|
|
290
|
-
// return false;
|
|
291
|
-
// }
|
|
292
|
-
// }
|
|
293
|
-
// return true;
|
|
294
|
-
// }
|
|
295
|
-
|
|
296
|
-
export function equals(x, y) {
|
|
297
|
-
if (x === y) {
|
|
298
|
-
return true;
|
|
299
|
-
} else if (x == null) {
|
|
300
|
-
return y == null;
|
|
301
|
-
} else if (y == null) {
|
|
302
|
-
return false;
|
|
303
|
-
} else if (typeof x !== "object") {
|
|
304
|
-
return false;
|
|
305
|
-
} else if (isEquatable(x)) {
|
|
306
|
-
return x.Equals(y);
|
|
307
|
-
} else if (isArrayLike(x)) {
|
|
308
|
-
return isArrayLike(y) && equalArrays(x, y);
|
|
309
|
-
} else if (x instanceof Date) {
|
|
310
|
-
return y instanceof Date && compareDates(x, y) === 0;
|
|
311
|
-
} else {
|
|
312
|
-
return false;
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
export function compareDates(x, y) {
|
|
316
|
-
let xtime;
|
|
317
|
-
let ytime; // DateTimeOffset and DateTime deals with equality differently.
|
|
318
|
-
|
|
319
|
-
if ("offset" in x && "offset" in y) {
|
|
320
|
-
xtime = x.getTime();
|
|
321
|
-
ytime = y.getTime();
|
|
322
|
-
} else {
|
|
323
|
-
xtime = x.getTime() + dateOffset(x);
|
|
324
|
-
ytime = y.getTime() + dateOffset(y);
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
return xtime === ytime ? 0 : xtime < ytime ? -1 : 1;
|
|
328
|
-
}
|
|
329
|
-
export function comparePrimitives(x, y) {
|
|
330
|
-
return x === y ? 0 : x < y ? -1 : 1;
|
|
331
|
-
}
|
|
332
|
-
export function compareArraysWith(x, y, comp) {
|
|
333
|
-
if (x == null) {
|
|
334
|
-
return y == null ? 0 : 1;
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
if (y == null) {
|
|
338
|
-
return -1;
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
if (x.length !== y.length) {
|
|
342
|
-
return x.length < y.length ? -1 : 1;
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
for (let i = 0, j = 0; i < x.length; i++) {
|
|
346
|
-
j = comp(x[i], y[i]);
|
|
347
|
-
|
|
348
|
-
if (j !== 0) {
|
|
349
|
-
return j;
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
return 0;
|
|
354
|
-
}
|
|
355
|
-
export function compareArrays(x, y) {
|
|
356
|
-
return compareArraysWith(x, y, compare);
|
|
357
|
-
}
|
|
358
|
-
export function compareObjects(x, y) {
|
|
359
|
-
if (x == null) {
|
|
360
|
-
return y == null ? 0 : 1;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
if (y == null) {
|
|
364
|
-
return -1;
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
const xKeys = Object.keys(x);
|
|
368
|
-
const yKeys = Object.keys(y);
|
|
369
|
-
|
|
370
|
-
if (xKeys.length !== yKeys.length) {
|
|
371
|
-
return xKeys.length < yKeys.length ? -1 : 1;
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
xKeys.sort();
|
|
375
|
-
yKeys.sort();
|
|
376
|
-
|
|
377
|
-
for (let i = 0, j = 0; i < xKeys.length; i++) {
|
|
378
|
-
const key = xKeys[i];
|
|
379
|
-
|
|
380
|
-
if (key !== yKeys[i]) {
|
|
381
|
-
return key < yKeys[i] ? -1 : 1;
|
|
382
|
-
} else {
|
|
383
|
-
j = compare(x[key], y[key]);
|
|
384
|
-
|
|
385
|
-
if (j !== 0) {
|
|
386
|
-
return j;
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
return 0;
|
|
392
|
-
}
|
|
393
|
-
export function compare(x, y) {
|
|
394
|
-
if (x === y) {
|
|
395
|
-
return 0;
|
|
396
|
-
} else if (x == null) {
|
|
397
|
-
return y == null ? 0 : -1;
|
|
398
|
-
} else if (y == null) {
|
|
399
|
-
return 1;
|
|
400
|
-
} else if (typeof x !== "object") {
|
|
401
|
-
return x < y ? -1 : 1;
|
|
402
|
-
} else if (isComparable(x)) {
|
|
403
|
-
return x.CompareTo(y);
|
|
404
|
-
} else if (isArrayLike(x) && isArrayLike(y)) {
|
|
405
|
-
return compareArrays(x, y);
|
|
406
|
-
} else if (x instanceof Date && y instanceof Date) {
|
|
407
|
-
return compareDates(x, y);
|
|
408
|
-
} else {
|
|
409
|
-
return 1;
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
export function min(comparer, x, y) {
|
|
413
|
-
return comparer(x, y) < 0 ? x : y;
|
|
414
|
-
}
|
|
415
|
-
export function max(comparer, x, y) {
|
|
416
|
-
return comparer(x, y) > 0 ? x : y;
|
|
417
|
-
}
|
|
418
|
-
export function createAtom(value) {
|
|
419
|
-
let atom = value;
|
|
420
|
-
return value => {
|
|
421
|
-
if (value === void 0) {
|
|
422
|
-
return atom;
|
|
423
|
-
} else {
|
|
424
|
-
atom = value;
|
|
425
|
-
return void 0;
|
|
426
|
-
}
|
|
427
|
-
};
|
|
428
|
-
}
|
|
429
|
-
const CaseRules = {
|
|
430
|
-
None: 0,
|
|
431
|
-
LowerFirst: 1,
|
|
432
|
-
SnakeCase: 2,
|
|
433
|
-
SnakeCaseAllCaps: 3,
|
|
434
|
-
KebabCase: 4
|
|
435
|
-
};
|
|
436
|
-
|
|
437
|
-
function dashify(str, separator) {
|
|
438
|
-
return str.replace(/[a-z]?[A-Z]/g, m => m.length === 1 ? m.toLowerCase() : m.charAt(0) + separator + m.charAt(1).toLowerCase());
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
function changeCase(str, caseRule) {
|
|
442
|
-
switch (caseRule) {
|
|
443
|
-
case CaseRules.LowerFirst:
|
|
444
|
-
return str.charAt(0).toLowerCase() + str.slice(1);
|
|
445
|
-
|
|
446
|
-
case CaseRules.SnakeCase:
|
|
447
|
-
return dashify(str, "_");
|
|
448
|
-
|
|
449
|
-
case CaseRules.SnakeCaseAllCaps:
|
|
450
|
-
return dashify(str, "_").toUpperCase();
|
|
451
|
-
|
|
452
|
-
case CaseRules.KebabCase:
|
|
453
|
-
return dashify(str, "-");
|
|
454
|
-
|
|
455
|
-
case CaseRules.None:
|
|
456
|
-
default:
|
|
457
|
-
return str;
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
export function createObj(fields, caseRule = CaseRules.None) {
|
|
462
|
-
function fail(kvPair) {
|
|
463
|
-
throw new Error("Cannot infer key and value of " + String(kvPair));
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
const o = {};
|
|
467
|
-
const definedCaseRule = caseRule;
|
|
468
|
-
|
|
469
|
-
for (let kvPair of fields) {
|
|
470
|
-
let caseRule = CaseRules.None;
|
|
471
|
-
|
|
472
|
-
if (kvPair == null) {
|
|
473
|
-
fail(kvPair);
|
|
474
|
-
} // Deflate unions and use the defined case rule
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
if (typeof kvPair.toJSON === "function") {
|
|
478
|
-
kvPair = kvPair.toJSON();
|
|
479
|
-
caseRule = definedCaseRule;
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
if (Array.isArray(kvPair)) {
|
|
483
|
-
switch (kvPair.length) {
|
|
484
|
-
case 0:
|
|
485
|
-
fail(kvPair);
|
|
486
|
-
break;
|
|
487
|
-
|
|
488
|
-
case 1:
|
|
489
|
-
o[changeCase(kvPair[0], caseRule)] = true;
|
|
490
|
-
break;
|
|
491
|
-
|
|
492
|
-
case 2:
|
|
493
|
-
const value = kvPair[1];
|
|
494
|
-
o[changeCase(kvPair[0], caseRule)] = value;
|
|
495
|
-
break;
|
|
496
|
-
|
|
497
|
-
default:
|
|
498
|
-
o[changeCase(kvPair[0], caseRule)] = kvPair.slice(1);
|
|
499
|
-
}
|
|
500
|
-
} else if (typeof kvPair === "string") {
|
|
501
|
-
o[changeCase(kvPair, caseRule)] = true;
|
|
502
|
-
} else {
|
|
503
|
-
fail(kvPair);
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
return o;
|
|
508
|
-
}
|
|
509
|
-
export function jsOptions(mutator) {
|
|
510
|
-
const opts = {};
|
|
511
|
-
mutator(opts);
|
|
512
|
-
return opts;
|
|
513
|
-
}
|
|
514
|
-
export function round(value, digits = 0) {
|
|
515
|
-
const m = Math.pow(10, digits);
|
|
516
|
-
const n = +(digits ? value * m : value).toFixed(8);
|
|
517
|
-
const i = Math.floor(n);
|
|
518
|
-
const f = n - i;
|
|
519
|
-
const e = 1e-8;
|
|
520
|
-
const r = f > 0.5 - e && f < 0.5 + e ? i % 2 === 0 ? i : i + 1 : Math.round(n);
|
|
521
|
-
return digits ? r / m : r;
|
|
522
|
-
}
|
|
523
|
-
export function sign(x) {
|
|
524
|
-
return x > 0 ? 1 : x < 0 ? -1 : 0;
|
|
525
|
-
}
|
|
526
|
-
export function randomNext(min, max) {
|
|
527
|
-
return Math.floor(Math.random() * (max - min)) + min;
|
|
528
|
-
}
|
|
529
|
-
export function randomBytes(buffer) {
|
|
530
|
-
if (buffer == null) {
|
|
531
|
-
throw new Error("Buffer cannot be null");
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
for (let i = 0; i < buffer.length; i += 6) {
|
|
535
|
-
// Pick random 48-bit number. Fill buffer in 2 24-bit chunks to avoid bitwise truncation.
|
|
536
|
-
let r = Math.floor(Math.random() * 281474976710656); // Low 24 bits = chunk 1.
|
|
537
|
-
|
|
538
|
-
const rhi = Math.floor(r / 16777216); // High 24 bits shifted via division = chunk 2.
|
|
539
|
-
|
|
540
|
-
for (let j = 0; j < 6 && i + j < buffer.length; j++) {
|
|
541
|
-
if (j === 3) {
|
|
542
|
-
r = rhi;
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
buffer[i + j] = r & 255;
|
|
546
|
-
r >>>= 8;
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
export function unescapeDataString(s) {
|
|
551
|
-
// https://stackoverflow.com/a/4458580/524236
|
|
552
|
-
return decodeURIComponent(s.replace(/\+/g, "%20"));
|
|
553
|
-
}
|
|
554
|
-
export function escapeDataString(s) {
|
|
555
|
-
return encodeURIComponent(s).replace(/!/g, "%21").replace(/'/g, "%27").replace(/\(/g, "%28").replace(/\)/g, "%29").replace(/\*/g, "%2A");
|
|
556
|
-
}
|
|
557
|
-
export function escapeUriString(s) {
|
|
558
|
-
return encodeURI(s);
|
|
559
|
-
} // ICollection.Clear and Count members can be called on Arrays
|
|
560
|
-
// or Dictionaries so we need a runtime check (see #1120)
|
|
561
|
-
|
|
562
|
-
export function count(col) {
|
|
563
|
-
if (isArrayLike(col)) {
|
|
564
|
-
return col.length;
|
|
565
|
-
} else {
|
|
566
|
-
let count = 0;
|
|
567
|
-
|
|
568
|
-
for (const _ of col) {
|
|
569
|
-
count++;
|
|
570
|
-
}
|
|
571
|
-
|
|
572
|
-
return count;
|
|
573
|
-
}
|
|
574
|
-
}
|
|
575
|
-
export function clear(col) {
|
|
576
|
-
if (isArrayLike(col)) {
|
|
577
|
-
col.splice(0);
|
|
578
|
-
} else {
|
|
579
|
-
col.clear();
|
|
580
|
-
}
|
|
581
|
-
}
|
|
582
|
-
const CURRIED_KEY = "__CURRIED__";
|
|
583
|
-
export function uncurry(arity, f) {
|
|
584
|
-
// f may be a function option with None value
|
|
585
|
-
if (f == null) {
|
|
586
|
-
return undefined;
|
|
587
|
-
} // The function is already uncurried
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
if (f.length > 1) {
|
|
591
|
-
// if (CURRIED_KEY in f) { // This doesn't always work
|
|
592
|
-
return f;
|
|
593
|
-
}
|
|
594
|
-
|
|
595
|
-
let uncurriedFn;
|
|
596
|
-
|
|
597
|
-
switch (arity) {
|
|
598
|
-
case 2:
|
|
599
|
-
uncurriedFn = (a1, a2) => f(a1)(a2);
|
|
600
|
-
|
|
601
|
-
break;
|
|
602
|
-
|
|
603
|
-
case 3:
|
|
604
|
-
uncurriedFn = (a1, a2, a3) => f(a1)(a2)(a3);
|
|
605
|
-
|
|
606
|
-
break;
|
|
607
|
-
|
|
608
|
-
case 4:
|
|
609
|
-
uncurriedFn = (a1, a2, a3, a4) => f(a1)(a2)(a3)(a4);
|
|
610
|
-
|
|
611
|
-
break;
|
|
612
|
-
|
|
613
|
-
case 5:
|
|
614
|
-
uncurriedFn = (a1, a2, a3, a4, a5) => f(a1)(a2)(a3)(a4)(a5);
|
|
615
|
-
|
|
616
|
-
break;
|
|
617
|
-
|
|
618
|
-
case 6:
|
|
619
|
-
uncurriedFn = (a1, a2, a3, a4, a5, a6) => f(a1)(a2)(a3)(a4)(a5)(a6);
|
|
620
|
-
|
|
621
|
-
break;
|
|
622
|
-
|
|
623
|
-
case 7:
|
|
624
|
-
uncurriedFn = (a1, a2, a3, a4, a5, a6, a7) => f(a1)(a2)(a3)(a4)(a5)(a6)(a7);
|
|
625
|
-
|
|
626
|
-
break;
|
|
627
|
-
|
|
628
|
-
case 8:
|
|
629
|
-
uncurriedFn = (a1, a2, a3, a4, a5, a6, a7, a8) => f(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8);
|
|
630
|
-
|
|
631
|
-
break;
|
|
632
|
-
|
|
633
|
-
default:
|
|
634
|
-
throw new Error("Uncurrying to more than 8-arity is not supported: " + arity);
|
|
635
|
-
}
|
|
636
|
-
|
|
637
|
-
uncurriedFn[CURRIED_KEY] = f;
|
|
638
|
-
return uncurriedFn;
|
|
639
|
-
}
|
|
640
|
-
export function curry(arity, f) {
|
|
641
|
-
if (f == null) {
|
|
642
|
-
return undefined;
|
|
643
|
-
}
|
|
644
|
-
|
|
645
|
-
if (CURRIED_KEY in f) {
|
|
646
|
-
return f[CURRIED_KEY];
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
switch (arity) {
|
|
650
|
-
case 2:
|
|
651
|
-
return a1 => a2 => f(a1, a2);
|
|
652
|
-
|
|
653
|
-
case 3:
|
|
654
|
-
return a1 => a2 => a3 => f(a1, a2, a3);
|
|
655
|
-
|
|
656
|
-
case 4:
|
|
657
|
-
return a1 => a2 => a3 => a4 => f(a1, a2, a3, a4);
|
|
658
|
-
|
|
659
|
-
case 5:
|
|
660
|
-
return a1 => a2 => a3 => a4 => a5 => f(a1, a2, a3, a4, a5);
|
|
661
|
-
|
|
662
|
-
case 6:
|
|
663
|
-
return a1 => a2 => a3 => a4 => a5 => a6 => f(a1, a2, a3, a4, a5, a6);
|
|
664
|
-
|
|
665
|
-
case 7:
|
|
666
|
-
return a1 => a2 => a3 => a4 => a5 => a6 => a7 => f(a1, a2, a3, a4, a5, a6, a7);
|
|
667
|
-
|
|
668
|
-
case 8:
|
|
669
|
-
return a1 => a2 => a3 => a4 => a5 => a6 => a7 => a8 => f(a1, a2, a3, a4, a5, a6, a7, a8);
|
|
670
|
-
|
|
671
|
-
default:
|
|
672
|
-
throw new Error("Currying to more than 8-arity is not supported: " + arity);
|
|
673
|
-
}
|
|
674
|
-
}
|
|
675
|
-
export function partialApply(arity, f, args) {
|
|
676
|
-
if (f == null) {
|
|
677
|
-
return undefined;
|
|
678
|
-
} else if (CURRIED_KEY in f) {
|
|
679
|
-
f = f[CURRIED_KEY];
|
|
680
|
-
|
|
681
|
-
for (let i = 0; i < args.length; i++) {
|
|
682
|
-
f = f(args[i]);
|
|
683
|
-
}
|
|
684
|
-
|
|
685
|
-
return f;
|
|
686
|
-
} else {
|
|
687
|
-
switch (arity) {
|
|
688
|
-
case 1:
|
|
689
|
-
// Wrap arguments to make sure .concat doesn't destruct arrays. Example
|
|
690
|
-
// [1,2].concat([3,4],5) --> [1,2,3,4,5] // fails
|
|
691
|
-
// [1,2].concat([[3,4],5]) --> [1,2,[3,4],5] // ok
|
|
692
|
-
return a1 => f.apply(undefined, args.concat([a1]));
|
|
693
|
-
|
|
694
|
-
case 2:
|
|
695
|
-
return a1 => a2 => f.apply(undefined, args.concat([a1, a2]));
|
|
696
|
-
|
|
697
|
-
case 3:
|
|
698
|
-
return a1 => a2 => a3 => f.apply(undefined, args.concat([a1, a2, a3]));
|
|
699
|
-
|
|
700
|
-
case 4:
|
|
701
|
-
return a1 => a2 => a3 => a4 => f.apply(undefined, args.concat([a1, a2, a3, a4]));
|
|
702
|
-
|
|
703
|
-
case 5:
|
|
704
|
-
return a1 => a2 => a3 => a4 => a5 => f.apply(undefined, args.concat([a1, a2, a3, a4, a5]));
|
|
705
|
-
|
|
706
|
-
case 6:
|
|
707
|
-
return a1 => a2 => a3 => a4 => a5 => a6 => f.apply(undefined, args.concat([a1, a2, a3, a4, a5, a6]));
|
|
708
|
-
|
|
709
|
-
case 7:
|
|
710
|
-
return a1 => a2 => a3 => a4 => a5 => a6 => a7 => f.apply(undefined, args.concat([a1, a2, a3, a4, a5, a6, a7]));
|
|
711
|
-
|
|
712
|
-
case 8:
|
|
713
|
-
return a1 => a2 => a3 => a4 => a5 => a6 => a7 => a8 => f.apply(undefined, args.concat([a1, a2, a3, a4, a5, a6, a7, a8]));
|
|
714
|
-
|
|
715
|
-
default:
|
|
716
|
-
throw new Error("Partially applying to more than 8-arity is not supported: " + arity);
|
|
717
|
-
}
|
|
718
|
-
}
|
|
719
|
-
}
|
|
720
|
-
export function mapCurriedArgs(fn, mappings) {
|
|
721
|
-
function mapArg(fn, arg, mappings, idx) {
|
|
722
|
-
const mapping = mappings[idx];
|
|
723
|
-
|
|
724
|
-
if (mapping !== 0) {
|
|
725
|
-
const expectedArity = mapping[0];
|
|
726
|
-
const actualArity = mapping[1];
|
|
727
|
-
|
|
728
|
-
if (expectedArity > 1) {
|
|
729
|
-
arg = curry(expectedArity, arg);
|
|
730
|
-
}
|
|
731
|
-
|
|
732
|
-
if (actualArity > 1) {
|
|
733
|
-
arg = uncurry(actualArity, arg);
|
|
734
|
-
}
|
|
735
|
-
}
|
|
736
|
-
|
|
737
|
-
const res = fn(arg);
|
|
738
|
-
|
|
739
|
-
if (idx + 1 === mappings.length) {
|
|
740
|
-
return res;
|
|
741
|
-
} else {
|
|
742
|
-
return arg => mapArg(res, arg, mappings, idx + 1);
|
|
743
|
-
}
|
|
744
|
-
}
|
|
745
|
-
|
|
746
|
-
return arg => mapArg(fn, arg, mappings, 0);
|
|
747
|
-
}
|
|
748
|
-
export function addToDict(dict, k, v) {
|
|
749
|
-
if (dict.has(k)) {
|
|
750
|
-
throw new Error("An item with the same key has already been added. Key: " + k);
|
|
751
|
-
}
|
|
752
|
-
|
|
753
|
-
dict.set(k, v);
|
|
754
|
-
}
|
|
755
|
-
export function getItemFromDict(map, key) {
|
|
756
|
-
if (map.has(key)) {
|
|
757
|
-
return map.get(key);
|
|
758
|
-
} else {
|
|
759
|
-
throw new Error(`The given key '${key}' was not present in the dictionary.`);
|
|
760
|
-
}
|
|
761
|
-
}
|