@fable-org/fable-library-ts 1.0.0-beta-001

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/Array.ts +1362 -0
  2. package/Async.ts +207 -0
  3. package/AsyncBuilder.ts +222 -0
  4. package/BigInt.ts +337 -0
  5. package/BitConverter.ts +165 -0
  6. package/Boolean.ts +22 -0
  7. package/CHANGELOG.md +15 -0
  8. package/Char.ts +222 -0
  9. package/Choice.ts +300 -0
  10. package/Date.ts +495 -0
  11. package/DateOffset.ts +324 -0
  12. package/DateOnly.ts +146 -0
  13. package/Decimal.ts +250 -0
  14. package/Double.ts +55 -0
  15. package/Encoding.ts +170 -0
  16. package/Event.ts +119 -0
  17. package/FSharp.Collections.ts +34 -0
  18. package/FSharp.Core.CompilerServices.ts +37 -0
  19. package/FSharp.Core.ts +86 -0
  20. package/Global.ts +37 -0
  21. package/Guid.ts +143 -0
  22. package/Int32.ts +156 -0
  23. package/List.ts +1417 -0
  24. package/Long.ts +49 -0
  25. package/MailboxProcessor.ts +125 -0
  26. package/Map.ts +1552 -0
  27. package/MapUtil.ts +120 -0
  28. package/MutableMap.ts +344 -0
  29. package/MutableSet.ts +248 -0
  30. package/Native.ts +11 -0
  31. package/Numeric.ts +80 -0
  32. package/Observable.ts +156 -0
  33. package/Option.ts +137 -0
  34. package/README.md +3 -0
  35. package/Random.ts +196 -0
  36. package/Range.ts +56 -0
  37. package/Reflection.ts +539 -0
  38. package/RegExp.ts +143 -0
  39. package/Result.ts +196 -0
  40. package/Seq.ts +1526 -0
  41. package/Seq2.ts +129 -0
  42. package/Set.ts +1955 -0
  43. package/String.ts +589 -0
  44. package/System.Collections.Generic.ts +380 -0
  45. package/System.Text.ts +137 -0
  46. package/SystemException.ts +7 -0
  47. package/TimeOnly.ts +131 -0
  48. package/TimeSpan.ts +194 -0
  49. package/Timer.ts +80 -0
  50. package/Types.ts +231 -0
  51. package/Unicode.13.0.0.ts +4 -0
  52. package/Uri.ts +206 -0
  53. package/Util.ts +928 -0
  54. package/lib/big.d.ts +338 -0
  55. package/lib/big.js +1054 -0
  56. package/package.json +24 -0
  57. package/tsconfig.json +103 -0
package/Uri.ts ADDED
@@ -0,0 +1,206 @@
1
+ import { FSharpRef, Result } from "./Types.js";
2
+
3
+ export const enum UriKind {
4
+ RelativeOrAbsolute = 0,
5
+ Absolute = 1,
6
+ Relative = 2,
7
+ }
8
+
9
+ type State =
10
+ | { original: string; value: URL; kind: UriKind.Absolute }
11
+ | { original: string; value: string; kind: UriKind.Relative };
12
+
13
+ const ok = <T>(value: T): Result<T> => ({
14
+ tag: "ok",
15
+ value,
16
+ });
17
+
18
+ const error = <T>(error: string): Result<T> => ({ tag: "error", error });
19
+
20
+ export class Uri {
21
+ private uri: State;
22
+
23
+ private constructor(state: State) {
24
+ this.uri = state;
25
+ }
26
+
27
+ private static isAbsoluteUri(uri: string): boolean {
28
+ try {
29
+ // tslint:disable-next-line no-unused-expression
30
+ new URL(uri);
31
+ return true;
32
+ } catch {
33
+ return false;
34
+ }
35
+ }
36
+
37
+ private static tryCreateWithKind(uri: string, kind: UriKind): Result<Uri> {
38
+ switch (kind) {
39
+ case UriKind.Absolute:
40
+ return Uri.isAbsoluteUri(uri)
41
+ ? ok(new Uri({ original: uri, value: new URL(uri), kind }))
42
+ : error(
43
+ "Invalid URI: The format of the URI could not be determined."
44
+ );
45
+ case UriKind.Relative:
46
+ return Uri.isAbsoluteUri(uri)
47
+ ? error("URI is not a relative path.")
48
+ : ok(new Uri({ original: uri, value: uri, kind }));
49
+ case UriKind.RelativeOrAbsolute:
50
+ return Uri.isAbsoluteUri(uri)
51
+ ? ok(new Uri({ original: uri, value: new URL(uri), kind: UriKind.Absolute }))
52
+ : ok(new Uri({ original: uri, value: uri, kind: UriKind.Relative }));
53
+ default:
54
+ const never: never = kind;
55
+ return never;
56
+ }
57
+ }
58
+
59
+ private static tryCreateWithBase(
60
+ baseUri: Uri,
61
+ relativeUri: string | Uri
62
+ ): Result<Uri> {
63
+ return baseUri.uri.kind !== UriKind.Absolute
64
+ ? error("Base URI should have Absolute kind")
65
+ : typeof relativeUri === "string"
66
+ ? ok(
67
+ new Uri({
68
+ original: new URL(relativeUri, baseUri.uri.value).toString(),
69
+ value: new URL(relativeUri, baseUri.uri.value),
70
+ kind: UriKind.Absolute,
71
+ })
72
+ )
73
+ : relativeUri.uri.kind === UriKind.Relative
74
+ ? ok(
75
+ new Uri({
76
+ original: new URL(relativeUri.uri.value, baseUri.uri.value).toString(),
77
+ value: new URL(relativeUri.uri.value, baseUri.uri.value),
78
+ kind: UriKind.Absolute,
79
+ })
80
+ )
81
+ : ok(baseUri);
82
+ }
83
+
84
+ private static tryCreateImpl(
85
+ value: string | Uri,
86
+ kindOrUri: UriKind | string | Uri = UriKind.Absolute
87
+ ): Result<Uri> {
88
+ return typeof value === "string"
89
+ ? typeof kindOrUri !== "number"
90
+ ? error("Kind must be specified when the baseUri is a string.")
91
+ : Uri.tryCreateWithKind(value, kindOrUri)
92
+ : typeof kindOrUri === "number"
93
+ ? error(
94
+ "Kind should not be specified when the baseUri is an absolute Uri."
95
+ )
96
+ : Uri.tryCreateWithBase(value, kindOrUri);
97
+ }
98
+
99
+ public static create(
100
+ value: string | Uri,
101
+ kindOrUri: UriKind | string | Uri = UriKind.Absolute
102
+ ): Uri {
103
+ const result = Uri.tryCreateImpl(value, kindOrUri);
104
+ switch (result.tag) {
105
+ case "ok":
106
+ return result.value;
107
+ case "error":
108
+ throw new Error(result.error);
109
+ default:
110
+ const never: never = result;
111
+ return never;
112
+ }
113
+ }
114
+
115
+ public static tryCreate(
116
+ baseUri: Uri,
117
+ relativeUri: string | Uri,
118
+ result: FSharpRef<Uri>
119
+ ): boolean;
120
+ public static tryCreate(
121
+ uriString: string,
122
+ uriKind: UriKind,
123
+ result: FSharpRef<Uri>
124
+ ): boolean;
125
+ public static tryCreate(
126
+ value: string | Uri,
127
+ kindOrUri: UriKind | string | Uri = UriKind.Absolute,
128
+ out: FSharpRef<Uri>
129
+ ): boolean {
130
+ const result = Uri.tryCreateImpl(value, kindOrUri);
131
+ switch (result.tag) {
132
+ case "ok":
133
+ out.contents = result.value;
134
+ return true;
135
+ case "error":
136
+ return false;
137
+ default:
138
+ const never: never = result;
139
+ return never;
140
+ }
141
+ }
142
+
143
+ public toString() {
144
+ switch (this.uri.kind) {
145
+ case UriKind.Absolute:
146
+ return decodeURIComponent(this.asUrl().toString());
147
+ case UriKind.Relative:
148
+ return this.uri.value;
149
+ default:
150
+ const never: never = this.uri;
151
+ return never;
152
+ }
153
+ }
154
+
155
+ private asUrl(): URL {
156
+ switch (this.uri.kind) {
157
+ case UriKind.Absolute:
158
+ return this.uri.value;
159
+ case UriKind.Relative:
160
+ throw new Error("This operation is not supported for a relative URI.");
161
+ default:
162
+ const never: never = this.uri;
163
+ return never;
164
+ }
165
+ }
166
+
167
+ get isAbsoluteUri() {
168
+ return this.uri.kind === UriKind.Absolute;
169
+ }
170
+
171
+ get absoluteUri(): string {
172
+ return this.asUrl().href;
173
+ }
174
+
175
+ get scheme() {
176
+ const protocol = this.asUrl().protocol;
177
+ return protocol.slice(0, protocol.length - 1);
178
+ }
179
+
180
+ get host() {
181
+ return this.asUrl().host;
182
+ }
183
+
184
+ get absolutePath() {
185
+ return this.asUrl().pathname;
186
+ }
187
+
188
+ get query() {
189
+ return this.asUrl().search;
190
+ }
191
+
192
+ get pathAndQuery() {
193
+ const url = this.asUrl();
194
+ return url.pathname + url.search;
195
+ }
196
+
197
+ get fragment() {
198
+ return this.asUrl().hash;
199
+ }
200
+
201
+ get originalString(): string {
202
+ return this.uri.original;
203
+ }
204
+ }
205
+
206
+ export default Uri;