add aliases for capitalized methods

This commit is contained in:
Anton Nesterov 2024-10-17 10:03:07 +02:00
parent 1f799bbf13
commit 635d2aea06
No known key found for this signature in database
GPG key ID: 59121E8AE2851FB5
4 changed files with 81 additions and 5 deletions

View file

@ -12,10 +12,10 @@ Instead of returning a nullish error, Grip always returns a consistent status ob
```javascript ```javascript
const [value, status] = grip(callable) const [value, status] = grip(callable)
if (status.Of(MySpecificError)) { if (status.of(MySpecificError)) {
// handle specific error // handle specific error
} }
if (status.Fail()) { if (status.fail()) {
// handle any error // handle any error
} }
``` ```
@ -24,10 +24,10 @@ The call result is better than tuple:
```javascript ```javascript
const result = grip(callable) const result = grip(callable)
if (result.Fail()) { if (result.fail()) {
// handle any error // handle any error
} }
if (result.Of(MySpecificError)) { if (result.of(MySpecificError)) {
// handle specific error // handle specific error
} }

30
dist/grip.js vendored
View file

@ -18,12 +18,21 @@ class Err extends Error {
Ok() { Ok() {
return false; return false;
} }
ok() {
return this.Ok();
}
Fail() { Fail() {
return true; return true;
} }
fail() {
return this.Fail();
}
Of(cls) { Of(cls) {
return this.cause instanceof cls || this instanceof cls; return this.cause instanceof cls || this instanceof cls;
} }
of(cls) {
return this.Of(cls);
}
static fromCatch(error) { static fromCatch(error) {
const e = new Err(typeof error === "string" ? error : error.message); const e = new Err(typeof error === "string" ? error : error.message);
e.cause = error; e.cause = error;
@ -36,12 +45,21 @@ class Ok {
Ok() { Ok() {
return true; return true;
} }
ok() {
return this.Ok();
}
Fail() { Fail() {
return false; return false;
} }
fail() {
return this.Fail();
}
Of(cls) { Of(cls) {
return this instanceof cls; return this instanceof cls;
} }
of(cls) {
return this.Of(cls);
}
toString() { toString() {
return "Ok"; return "Ok";
} }
@ -64,12 +82,21 @@ class Result extends Array {
Ok() { Ok() {
return this[1].Ok(); return this[1].Ok();
} }
ok() {
return this.Ok();
}
Fail() { Fail() {
return this[1].Fail(); return this[1].Fail();
} }
fail() {
return this.Fail();
}
Of(cls) { Of(cls) {
return this[1].Of(cls); return this[1].Of(cls);
} }
of(cls) {
return this.Of(cls);
}
Iter() { Iter() {
const value = this.value; const value = this.value;
const that = this; const that = this;
@ -92,6 +119,9 @@ class Result extends Array {
} }
}; };
} }
iter() {
return this.Iter();
}
} }
var promise = (result) => { var promise = (result) => {
return result.then((res) => new Result(res, new Ok)).catch((err) => new Result(null, Err.fromCatch(err))); return result.then((res) => new Result(res, new Ok)).catch((err) => new Result(null, Err.fromCatch(err)));

View file

@ -49,7 +49,7 @@ test("fetch err", async () => {
const [result, status] = await grip(fetch("https://localhost:30012")); const [result, status] = await grip(fetch("https://localhost:30012"));
expect(status.Ok()).toBe(false); expect(status.Ok()).toBe(false);
expect(result === null).toBe(true); expect(result === null).toBe(true);
expect(status.Of(Error)).toBe(true); expect(status.of(Error)).toBe(true);
}); });
test("fetch json", async () => { test("fetch json", async () => {

46
grip.ts
View file

@ -2,20 +2,38 @@ interface Status {
message?: string; message?: string;
cause?: any; cause?: any;
Ok(): boolean; Ok(): boolean;
/* alias Ok */
ok(): boolean;
Fail(): boolean; Fail(): boolean;
/* alias Fail */
fail(): boolean;
Of(cls: any): boolean; Of(cls: any): boolean;
/* alias Of */
of(cls: any): boolean;
} }
export class Err extends Error { export class Err extends Error {
Ok() { Ok() {
return false; return false;
} }
/* alias Ok */
ok() {
return this.Ok();
}
Fail() { Fail() {
return true; return true;
} }
/* alias Fail */
fail() {
return this.Fail();
}
Of(cls: any) { Of(cls: any) {
return this.cause instanceof cls || this instanceof cls; return this.cause instanceof cls || this instanceof cls;
} }
/* alias Of */
of(cls: any) {
return this.Of(cls);
}
static fromCatch(error: any) { static fromCatch(error: any) {
const e = new Err(typeof error === "string" ? error : error.message); const e = new Err(typeof error === "string" ? error : error.message);
e.cause = error; e.cause = error;
@ -28,12 +46,24 @@ export class Ok {
Ok() { Ok() {
return true; return true;
} }
/* alias Ok */
ok() {
return this.Ok();
}
Fail() { Fail() {
return false; return false;
} }
/* alias Fail */
fail() {
return this.Fail();
}
Of(cls: any) { Of(cls: any) {
return this instanceof cls; return this instanceof cls;
} }
/* alias Of */
of(cls: any) {
return this.Of(cls);
}
toString() { toString() {
return "Ok"; return "Ok";
} }
@ -66,12 +96,24 @@ class Result<T> extends Array<T | Status> implements IResult<T> {
Ok() { Ok() {
return (this[1] as Status).Ok(); return (this[1] as Status).Ok();
} }
/* alias Ok */
ok() {
return this.Ok();
}
Fail() { Fail() {
return (this[1] as Status).Fail(); return (this[1] as Status).Fail();
} }
/* alias Fail */
fail() {
return this.Fail();
}
Of(cls: any) { Of(cls: any) {
return (this[1] as Status).Of(cls); return (this[1] as Status).Of(cls);
} }
/* alias Of */
of(cls: any) {
return this.Of(cls);
}
Iter() { Iter() {
const value = this.value; const value = this.value;
const that = this; const that = this;
@ -100,6 +142,10 @@ class Result<T> extends Array<T | Status> implements IResult<T> {
}, },
}; };
} }
/* alias Iter */
iter() {
return this.Iter();
}
} }
type Unwrap<T> = type Unwrap<T> =