Compare commits

..

No commits in common. "9051b3549182dd777ea0dd5390047c25748c4ecd" and "69d4788f6462a576d8feea30d13e4e06e93e93f3" have entirely different histories.

5 changed files with 45 additions and 53 deletions

View file

@ -16,4 +16,4 @@ jobs:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Publish package - name: Publish package
run: npx jsr publish run: npx jsr publish --allow-slow-types

63
grip.ts
View file

@ -1,6 +1,6 @@
interface Status { interface Status {
message?: string; message?: string;
cause?: unknown; cause?: any;
Ok(): boolean; Ok(): boolean;
ok(): boolean; ok(): boolean;
Fail(): boolean; Fail(): boolean;
@ -13,25 +13,25 @@ interface Status {
* Error result * Error result
*/ */
export class Err extends Error { export class Err extends Error {
Ok(): boolean { Ok() {
return false; return false;
} }
ok(): boolean { ok() {
return this.Ok(); return this.Ok();
} }
Fail(): boolean { Fail() {
return true; return true;
} }
fail(): boolean { fail() {
return this.Fail(); return this.Fail();
} }
Of(cls: any): boolean { Of(cls: any) {
return this.cause instanceof cls || this instanceof cls; return this.cause instanceof cls || this instanceof cls;
} }
of(cls: any): boolean { of(cls: any) {
return this.Of(cls); return this.Of(cls);
} }
static fromCatch(error: any): Status { 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;
e.stack = error.stack; e.stack = error.stack;
@ -43,25 +43,25 @@ export class Err extends Error {
* Successful result * Successful result
*/ */
export class Ok { export class Ok {
Ok(): boolean { Ok() {
return true; return true;
} }
ok(): boolean { ok() {
return this.Ok(); return this.Ok();
} }
Fail(): boolean { Fail() {
return false; return false;
} }
fail(): boolean { fail() {
return this.Fail(); return this.Fail();
} }
Of(cls: any): boolean { Of(cls: any) {
return this instanceof cls; return this instanceof cls;
} }
of(cls: any): boolean { of(cls: any) {
return this.Of(cls); return this.Of(cls);
} }
toString(): string { toString() {
return "Ok"; return "Ok";
} }
} }
@ -76,15 +76,6 @@ interface IResult<T> {
Fail(): boolean; Fail(): boolean;
} }
type IterResult<T> = {
[Symbol.asyncIterator](): AsyncGenerator<
Awaited<SafeResult<T>>,
void,
unknown
>;
[Symbol.iterator](): Generator<SafeResult<T>, void, unknown>;
};
class Result<T> extends Array<T | Status> implements IResult<T> { class Result<T> extends Array<T | Status> implements IResult<T> {
0: T; 0: T;
1: Status; 1: Status;
@ -93,31 +84,31 @@ class Result<T> extends Array<T | Status> implements IResult<T> {
this[0] = result; this[0] = result;
this[1] = status; this[1] = status;
} }
get value(): T { get value() {
return this[0]; return this[0];
} }
get status(): Status { get status() {
return this[1]; return this[1];
} }
Ok(): boolean { Ok() {
return (this[1] as Status).Ok(); return (this[1] as Status).Ok();
} }
ok(): boolean { ok() {
return this.Ok(); return this.Ok();
} }
Fail(): boolean { Fail() {
return (this[1] as Status).Fail(); return (this[1] as Status).Fail();
} }
fail(): boolean { fail() {
return this.Fail(); return this.Fail();
} }
Of(cls: any): boolean { Of(cls: any) {
return (this[1] as Status).Of(cls); return (this[1] as Status).Of(cls);
} }
of(cls: any): boolean { of(cls: any) {
return this.Of(cls); return this.Of(cls);
} }
Iter(): IterResult<T> { Iter() {
const value = this.value; const value = this.value;
const that = this; const that = this;
if ( if (
@ -145,7 +136,7 @@ class Result<T> extends Array<T | Status> implements IResult<T> {
}, },
}; };
} }
iter(): IterResult<T> { iter() {
return this.Iter(); return this.Iter();
} }
} }
@ -192,8 +183,8 @@ export function grip<T>(action: T): SafeResult<T> {
if (result instanceof Promise) { if (result instanceof Promise) {
return promise<T>(result) as SafeResult<T>; return promise<T>(result) as SafeResult<T>;
} }
return new Result<T>(result as T, new Ok()) as SafeResult<T>; return new Result<T>(result, new Ok()) as SafeResult<T>;
} catch (err) { } catch (err: any) {
return new Result<T>( return new Result<T>(
null as never, null as never,
Err.fromCatch(err), Err.fromCatch(err),

View file

@ -1,4 +1,19 @@
// grip.ts // grip.ts
function grip(action) {
if (action instanceof Promise) {
return promise(action);
}
try {
const result = action();
if (result instanceof Promise) {
return promise(result);
}
return new Result(result, new Ok);
} catch (err) {
return new Result(null, Err.fromCatch(err));
}
}
class Err extends Error { class Err extends Error {
Ok() { Ok() {
return false; return false;
@ -108,20 +123,6 @@ class Result extends Array {
return this.Iter(); return this.Iter();
} }
} }
function grip(action) {
if (action instanceof Promise) {
return promise(action);
}
try {
const result = action();
if (result instanceof Promise) {
return promise(result);
}
return new Result(result, new Ok);
} catch (err) {
return new Result(null, Err.fromCatch(err));
}
}
var promise = async (result) => { var promise = async (result) => {
try { try {
return new Result(await result, new Ok); return new Result(await result, new Ok);

View file

@ -1,5 +1,5 @@
{ {
"name": "@nesterow/grip", "name": "@nesterow/grip",
"version": "0.0.3", "version": "0.0.2",
"exports": "./mod.ts" "exports": "./mod.ts"
} }

View file

@ -1,5 +1,5 @@
{ {
"version": "0.0.3", "version": "0.0.2",
"author": { "author": {
"name": "Anton Nesterov", "name": "Anton Nesterov",
"url": "https://github.com/nesterow" "url": "https://github.com/nesterow"