@fable-org/fable-library-js 1.5.0 → 1.7.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/Async.d.ts CHANGED
@@ -1,32 +1,27 @@
1
1
  import { Continuation, Continuations } from "./AsyncBuilder.js";
2
- import { CancellationToken } from "./AsyncBuilder.js";
3
- import { IAsync } from "./AsyncBuilder.js";
4
- import { IAsyncContext } from "./AsyncBuilder.js";
2
+ import { Async, IAsyncContext, CancellationToken } from "./AsyncBuilder.js";
5
3
  import { FSharpChoice$2_$union } from "./Choice.js";
6
- export declare class Async<_T> {
7
- }
8
- export declare function makeAsync<T>(body: IAsync<T>): IAsync<T>;
9
- export declare function invoke<T>(computation: IAsync<T>, ctx: IAsyncContext<T>): void;
10
- export declare function callThenInvoke<T, U>(ctx: IAsyncContext<T>, result1: U, part2: (x: U) => IAsync<T>): void;
11
- export declare function bind<T, U>(ctx: IAsyncContext<T>, part1: IAsync<U>, part2: (x: U) => IAsync<T>): void;
4
+ export declare function makeAsync<T>(body: Async<T>): Async<T>;
5
+ export declare function invoke<T>(computation: Async<T>, ctx: IAsyncContext<T>): void;
6
+ export declare function callThenInvoke<T, U>(ctx: IAsyncContext<T>, result1: U, part2: (x: U) => Async<T>): void;
7
+ export declare function bind<T, U>(ctx: IAsyncContext<T>, part1: Async<U>, part2: (x: U) => Async<T>): void;
12
8
  export declare function createCancellationToken(arg?: boolean | number): CancellationToken;
13
9
  export declare function cancel(token: CancellationToken): void;
14
10
  export declare function cancelAfter(token: CancellationToken, ms: number): void;
15
11
  export declare function isCancellationRequested(token: CancellationToken): boolean;
16
12
  export declare function throwIfCancellationRequested(token: CancellationToken): void;
17
- export declare function startChild<T>(computation: IAsync<T>, ms?: number): IAsync<IAsync<T>>;
13
+ export declare function startChild<T>(computation: Async<T>, ms?: number): Async<Async<T>>;
18
14
  export declare function awaitPromise<T>(p: Promise<T>): (ctx: IAsyncContext<T>) => void;
19
15
  export declare function cancellationToken(): (ctx: IAsyncContext<CancellationToken>) => void;
20
16
  export declare const defaultCancellationToken: CancellationToken;
21
- export declare function catchAsync<T>(work: IAsync<T>): (ctx: IAsyncContext<FSharpChoice$2_$union<T, Error>>) => void;
17
+ export declare function catchAsync<T>(work: Async<T>): (ctx: IAsyncContext<FSharpChoice$2_$union<T, Error>>) => void;
22
18
  export declare function fromContinuations<T>(f: (conts: Continuations<T>) => void): (ctx: IAsyncContext<T>) => void;
23
- export declare function ignore<T>(computation: IAsync<T>): (ctx: IAsyncContext<undefined>) => void;
24
- export declare function parallel<T>(computations: Iterable<IAsync<T>>): (ctx: IAsyncContext<Awaited<T>[]>) => void;
25
- export declare function sequential<T>(computations: Iterable<IAsync<T>>): (ctx: IAsyncContext<T[]>) => void;
19
+ export declare function ignore<T>(computation: Async<T>): (ctx: IAsyncContext<undefined>) => void;
20
+ export declare function parallel<T>(computations: Iterable<Async<T>>): (ctx: IAsyncContext<Awaited<T>[]>) => void;
21
+ export declare function sequential<T>(computations: Iterable<Async<T>>): (ctx: IAsyncContext<T[]>) => void;
26
22
  export declare function sleep(millisecondsDueTime: number): (ctx: IAsyncContext<void>) => void;
27
23
  export declare function runSynchronously(): never;
28
- export declare function start<T>(computation: IAsync<T>, cancellationToken?: CancellationToken): void;
29
- export declare function startImmediate<T>(computation: IAsync<T>, cancellationToken?: CancellationToken): void;
30
- export declare function startWithContinuations<T>(computation: IAsync<T>, continuation?: Continuation<T> | CancellationToken, exceptionContinuation?: Continuation<any>, cancellationContinuation?: Continuation<any>, cancelToken?: CancellationToken): void;
31
- export declare function startAsPromise<T>(computation: IAsync<T>, cancellationToken?: CancellationToken): Promise<T>;
32
- export default Async;
24
+ export declare function start<T>(computation: Async<T>, cancellationToken?: CancellationToken): void;
25
+ export declare function startImmediate<T>(computation: Async<T>, cancellationToken?: CancellationToken): void;
26
+ export declare function startWithContinuations<T>(computation: Async<T>, continuation?: Continuation<T> | CancellationToken, exceptionContinuation?: Continuation<any>, cancellationContinuation?: Continuation<any>, cancelToken?: CancellationToken): void;
27
+ export declare function startAsPromise<T>(computation: Async<T>, cancellationToken?: CancellationToken): Promise<T>;
package/Async.js CHANGED
@@ -1,13 +1,8 @@
1
1
  import { OperationCanceledError, Trampoline } from "./AsyncBuilder.js";
2
2
  import { CancellationToken } from "./AsyncBuilder.js";
3
- import { protectedCont } from "./AsyncBuilder.js";
4
- import { protectedBind } from "./AsyncBuilder.js";
5
- import { protectedReturn } from "./AsyncBuilder.js";
3
+ import { protectedCont, protectedBind, protectedReturn } from "./AsyncBuilder.js";
6
4
  import { Choice_makeChoice1Of2, Choice_makeChoice2Of2 } from "./Choice.js";
7
5
  import { TimeoutException } from "./SystemException.js";
8
- // Implemented just for type references
9
- export class Async {
10
- }
11
6
  function emptyContinuation(_x) {
12
7
  // NOP
13
8
  }
@@ -155,4 +150,3 @@ export function startWithContinuations(computation, continuation, exceptionConti
155
150
  export function startAsPromise(computation, cancellationToken) {
156
151
  return new Promise((resolve, reject) => startWithContinuations(computation, resolve, reject, reject, cancellationToken ? cancellationToken : defaultCancellationToken));
157
152
  }
158
- export default Async;
package/AsyncBuilder.d.ts CHANGED
@@ -39,21 +39,21 @@ export interface IAsyncContext<T> {
39
39
  cancelToken: CancellationToken;
40
40
  trampoline: Trampoline;
41
41
  }
42
- export type IAsync<T> = (x: IAsyncContext<T>) => void;
43
- export declare function protectedCont<T>(f: IAsync<T>): (ctx: IAsyncContext<T>) => void;
44
- export declare function protectedBind<T, U>(computation: IAsync<T>, binder: (x: T) => IAsync<U>): (ctx: IAsyncContext<U>) => void;
42
+ export type Async<T> = (x: IAsyncContext<T>) => void;
43
+ export declare function protectedCont<T>(f: Async<T>): (ctx: IAsyncContext<T>) => void;
44
+ export declare function protectedBind<T, U>(computation: Async<T>, binder: (x: T) => Async<U>): (ctx: IAsyncContext<U>) => void;
45
45
  export declare function protectedReturn<T>(value: T): (ctx: IAsyncContext<T>) => void;
46
46
  export declare class AsyncBuilder {
47
- Bind<T, U>(computation: IAsync<T>, binder: (x: T) => IAsync<U>): (ctx: IAsyncContext<U>) => void;
48
- Combine<T>(computation1: IAsync<void>, computation2: IAsync<T>): (ctx: IAsyncContext<T>) => void;
49
- Delay<T>(generator: () => IAsync<T>): (ctx: IAsyncContext<T>) => void;
50
- For<T>(sequence: Iterable<T>, body: (x: T) => IAsync<void>): IAsync<void>;
51
- Return<T>(value?: T): (ctx: IAsyncContext<T | undefined>) => void;
52
- ReturnFrom<T>(computation: IAsync<T>): IAsync<T>;
53
- TryFinally<T>(computation: IAsync<T>, compensation: () => void): (ctx: IAsyncContext<T>) => void;
54
- TryWith<T>(computation: IAsync<T>, catchHandler: (e: any) => IAsync<T>): (ctx: IAsyncContext<T>) => void;
55
- Using<T extends IDisposable, U>(resource: T, binder: (x: T) => IAsync<U>): (ctx: IAsyncContext<U>) => void;
56
- While(guard: () => boolean, computation: IAsync<void>): IAsync<void>;
47
+ Bind<T, U>(computation: Async<T>, binder: (x: T) => Async<U>): (ctx: IAsyncContext<U>) => void;
48
+ Combine<T>(computation1: Async<void>, computation2: Async<T>): (ctx: IAsyncContext<T>) => void;
49
+ Delay<T>(generator: () => Async<T>): (ctx: IAsyncContext<T>) => void;
50
+ For<T>(sequence: Iterable<T>, body: (x: T) => Async<void>): Async<void>;
51
+ Return<T>(value: T): (ctx: IAsyncContext<T>) => void;
52
+ ReturnFrom<T>(computation: Async<T>): Async<T>;
53
+ TryFinally<T>(computation: Async<T>, compensation: () => void): (ctx: IAsyncContext<T>) => void;
54
+ TryWith<T>(computation: Async<T>, catchHandler: (e: any) => Async<T>): (ctx: IAsyncContext<T>) => void;
55
+ Using<T extends IDisposable, U>(resource: T, binder: (x: T) => Async<U>): (ctx: IAsyncContext<U>) => void;
56
+ While(guard: () => boolean, computation: Async<void>): Async<void>;
57
57
  Zero(): (ctx: IAsyncContext<void>) => void;
58
58
  }
59
59
  export declare const singleton: AsyncBuilder;
package/CHANGELOG.md CHANGED
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## Unreleased
9
9
 
10
+ ## 1.7.0 - 2024-11-19
11
+
12
+ ### Fixed
13
+
14
+ * [JS/TS] Added missing IReadOnlyCollection helpers (#3953)
15
+
16
+ ## 1.6.0 - 2024-10-02
17
+
18
+ ### Removed
19
+
20
+ * Remove `Async` (from `Async.ts`) class (by @MangelMaxime)
21
+
22
+ ### Changed
23
+
24
+ * Renamed `IAsync` to `Async` in `AsyncBuilder.ts` (#3906) (by @ncave)
25
+
10
26
  ## 1.5.0 - 2024-09-19
11
27
 
12
28
  ### Added
@@ -0,0 +1,7 @@
1
+ export declare function count<T>(col: Iterable<T>): number;
2
+ export declare function isReadOnly<T>(col: Iterable<T>): boolean;
3
+ export declare function copyTo<T>(col: Iterable<T>, array: T[], arrayIndex: number): void;
4
+ export declare function contains<T>(col: Iterable<T>, item: T): boolean;
5
+ export declare function add<T>(col: Iterable<T>, item: T): void;
6
+ export declare function remove<T>(col: Iterable<T>, item: T): boolean;
7
+ export declare function clear<T>(col: Iterable<T>): void;
@@ -0,0 +1,182 @@
1
+ import { equals, isArrayLike } from "./Util.js";
2
+ export function count(col) {
3
+ if (typeof col["System.Collections.Generic.ICollection`1.get_Count"] === "function") {
4
+ return col["System.Collections.Generic.ICollection`1.get_Count"](); // collection
5
+ }
6
+ else {
7
+ if (typeof col["System.Collections.Generic.IReadOnlyCollection`1.get_Count"] === "function") {
8
+ return col["System.Collections.Generic.IReadOnlyCollection`1.get_Count"](); // collection
9
+ }
10
+ else {
11
+ if (isArrayLike(col)) {
12
+ return col.length; // array, resize array
13
+ }
14
+ else {
15
+ if (typeof col.size === "number") {
16
+ return col.size; // map, set
17
+ }
18
+ else {
19
+ let count = 0;
20
+ for (const _ of col) {
21
+ count++;
22
+ }
23
+ return count; // other collections
24
+ }
25
+ }
26
+ }
27
+ }
28
+ }
29
+ export function isReadOnly(col) {
30
+ if (typeof col["System.Collections.Generic.ICollection`1.get_IsReadOnly"] === "function") {
31
+ return col["System.Collections.Generic.ICollection`1.get_IsReadOnly"](); // collection
32
+ }
33
+ else {
34
+ if (isArrayLike(col)) {
35
+ return ArrayBuffer.isView(col); // true for typed arrays, false for other arrays
36
+ }
37
+ else {
38
+ if (typeof col.size === "number") {
39
+ return false; // map, set
40
+ }
41
+ else {
42
+ return true; // other collections
43
+ }
44
+ }
45
+ }
46
+ }
47
+ export function copyTo(col, array, arrayIndex) {
48
+ if (typeof col["System.Collections.Generic.ICollection`1.CopyToZ3B4C077E"] === "function") {
49
+ col["System.Collections.Generic.ICollection`1.CopyToZ3B4C077E"](array, arrayIndex); // collection
50
+ }
51
+ else {
52
+ let i = arrayIndex;
53
+ for (const v of col) {
54
+ array[i] = v;
55
+ i++;
56
+ }
57
+ }
58
+ }
59
+ export function contains(col, item) {
60
+ if (typeof col["System.Collections.Generic.ICollection`1.Contains2B595"] === "function") {
61
+ return col["System.Collections.Generic.ICollection`1.Contains2B595"](item); // collection
62
+ }
63
+ else {
64
+ if (isArrayLike(col)) {
65
+ let i = col.findIndex(x => equals(x, item)); // array, resize array
66
+ return i >= 0;
67
+ }
68
+ else {
69
+ if (typeof col.has === "function") {
70
+ if (typeof col.set === "function" && isArrayLike(item)) {
71
+ return col.has(item[0]) && equals(col.get(item[0]), item[1]); // map
72
+ }
73
+ else {
74
+ return col.has(item); // set
75
+ }
76
+ }
77
+ else {
78
+ return false; // other collections
79
+ }
80
+ }
81
+ }
82
+ }
83
+ export function add(col, item) {
84
+ if (typeof col["System.Collections.Generic.ICollection`1.Add2B595"] === "function") {
85
+ return col["System.Collections.Generic.ICollection`1.Add2B595"](item); // collection
86
+ }
87
+ else {
88
+ if (isArrayLike(col)) {
89
+ if (ArrayBuffer.isView(col)) {
90
+ // TODO: throw for typed arrays?
91
+ }
92
+ else {
93
+ col.push(item); // array, resize array
94
+ }
95
+ }
96
+ else {
97
+ if (typeof col.add === "function") {
98
+ return col.add(item); // set
99
+ }
100
+ else {
101
+ if (typeof col.has === "function"
102
+ && typeof col.set === "function"
103
+ && isArrayLike(item)) {
104
+ if (col.has(item[0]) === false) {
105
+ col.set(item[0], item[1]); // map
106
+ }
107
+ else {
108
+ throw new Error("An item with the same key has already been added. Key: " + item[0]);
109
+ }
110
+ }
111
+ else {
112
+ // TODO: throw for other collections?
113
+ }
114
+ }
115
+ }
116
+ }
117
+ }
118
+ export function remove(col, item) {
119
+ if (typeof col["System.Collections.Generic.ICollection`1.Remove2B595"] === "function") {
120
+ return col["System.Collections.Generic.ICollection`1.Remove2B595"](item); // collection
121
+ }
122
+ else {
123
+ if (isArrayLike(col)) {
124
+ if (ArrayBuffer.isView(col)) {
125
+ // TODO: throw for typed arrays
126
+ return false;
127
+ }
128
+ else {
129
+ let i = col.findIndex(x => equals(x, item));
130
+ if (i >= 0) {
131
+ col.splice(i, 1); // array, resize array
132
+ return true;
133
+ }
134
+ else {
135
+ return false;
136
+ }
137
+ }
138
+ }
139
+ else {
140
+ if (typeof col.delete === "function") {
141
+ if (typeof col.set === "function" && isArrayLike(item)) {
142
+ if (col.has(item[0]) && equals(col.get(item[0]), item[1])) {
143
+ return col.delete(item[0]); // map
144
+ }
145
+ else {
146
+ return false;
147
+ }
148
+ }
149
+ else {
150
+ return col.delete(item); // set
151
+ }
152
+ }
153
+ else {
154
+ // TODO: throw for other collections?
155
+ return false; // other collections
156
+ }
157
+ }
158
+ }
159
+ }
160
+ export function clear(col) {
161
+ if (typeof col["System.Collections.Generic.ICollection`1.Clear"] === "function") {
162
+ return col["System.Collections.Generic.ICollection`1.Clear"](); // collection
163
+ }
164
+ else {
165
+ if (isArrayLike(col)) {
166
+ if (ArrayBuffer.isView(col)) {
167
+ // TODO: throw for typed arrays?
168
+ }
169
+ else {
170
+ col.splice(0); // array, resize array
171
+ }
172
+ }
173
+ else {
174
+ if (typeof col.clear === "function") {
175
+ col.clear(); // map, set
176
+ }
177
+ else {
178
+ // TODO: throw for other collections?
179
+ }
180
+ }
181
+ }
182
+ }
@@ -1,4 +1,4 @@
1
- import { IAsync } from "./AsyncBuilder.js";
1
+ import { Async } from "./AsyncBuilder.js";
2
2
  import { Continuation } from "./AsyncBuilder.js";
3
3
  import { CancellationToken } from "./AsyncBuilder.js";
4
4
  declare class MailboxQueue<Msg> {
@@ -6,7 +6,7 @@ declare class MailboxQueue<Msg> {
6
6
  add(message: Msg): void;
7
7
  tryGet(): Msg | undefined;
8
8
  }
9
- export type MailboxBody<Msg> = (m: MailboxProcessor<Msg>) => IAsync<void>;
9
+ export type MailboxBody<Msg> = (m: MailboxProcessor<Msg>) => Async<void>;
10
10
  export interface AsyncReplyChannel<Reply> {
11
11
  reply: (r: Reply) => void;
12
12
  }
package/String.d.ts CHANGED
@@ -1,8 +1,16 @@
1
+ declare const enum StringComparison {
2
+ CurrentCulture = 0,
3
+ CurrentCultureIgnoreCase = 1,
4
+ InvariantCulture = 2,
5
+ InvariantCultureIgnoreCase = 3,
6
+ Ordinal = 4,
7
+ OrdinalIgnoreCase = 5
8
+ }
1
9
  export declare function compare(...args: any[]): number;
2
10
  export declare function compareOrdinal(x: string, y: string): number;
3
11
  export declare function compareTo(x: string, y: string): number;
4
- export declare function startsWith(str: string, pattern: string, ic: number): boolean;
5
- export declare function endsWith(str: string, pattern: string, ic: number): boolean;
12
+ export declare function startsWith(str: string, pattern: string, ic: boolean | StringComparison): boolean;
13
+ export declare function endsWith(str: string, pattern: string, ic: boolean | StringComparison): boolean;
6
14
  export declare function indexOfAny(str: string, anyOf: string[], ...args: number[]): number;
7
15
  export type IPrintfFormatContinuation = (f: (x: string) => any) => any;
8
16
  export interface IPrintfFormat {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "private": false,
4
4
  "type": "module",
5
5
  "name": "@fable-org/fable-library-js",
6
- "version": "1.5.0",
6
+ "version": "1.7.0",
7
7
  "description": "Core library used by F# projects compiled with fable.io",
8
8
  "author": "Fable Contributors",
9
9
  "license": "MIT",