Skip to content

Commit

Permalink
option
Browse files Browse the repository at this point in the history
  • Loading branch information
hazae41 committed Apr 23, 2023
1 parent 5cf12c6 commit 3014199
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 28 deletions.
29 changes: 29 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@
"test": "node ./dist/test/index.test.mjs",
"prepare": "npm run build"
},
"dependencies": {
"@hazae41/option": "^1.0.0"
},
"devDependencies": {
"@hazae41/phobos": "^1.0.10",
"@rollup/plugin-typescript": "^11.0.0",
Expand Down
2 changes: 1 addition & 1 deletion src/index.test.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from "mods/index.test.js";
export * from "./mods/index.test.js";
31 changes: 16 additions & 15 deletions src/mods/result/data.ts
Original file line number Diff line number Diff line change
@@ -1,50 +1,51 @@
import { None, Some } from "@hazae41/option"
import { Promiseable } from "libs/promises/promises.js"
import { Err } from "./error.js"

export class Ok<D> {
export class Ok<T> {

constructor(
readonly inner: D
readonly inner: T
) { }

static new<D>(inner: D) {
static new<T>(inner: T) {
return new this(inner)
}

/**
* Type guard for Ok
* @returns
*/
isOk(): this is Ok<D> {
isOk(): this is Ok<T> {
return true
}

isErr(): false {
return false
}

ok() {
unwrap() {
return this.inner
}

err() {
return undefined
unwrapOr(or: unknown) {
return this.inner
}

unwrap() {
return this.inner
ok() {
return new Some(this.inner)
}

unwrapOr(or: unknown) {
return this.inner
err() {
return new None()
}

/**
* Map this data into another, throwing if mapper throws
* @param mutator
* @returns
*/
async map<M>(mapper: (data: D) => Promiseable<M>) {
async map<M>(mapper: (inner: T) => Promiseable<M>) {
return new Ok<M>(await mapper(this.inner))
}

Expand All @@ -53,7 +54,7 @@ export class Ok<D> {
* @param mapper
* @returns
*/
async tryMap<M>(mapper: (data: D) => Promiseable<M>) {
async tryMap<M>(mapper: (inner: T) => Promiseable<M>) {
try {
return await this.map(mapper)
} catch (error: unknown) {
Expand All @@ -66,7 +67,7 @@ export class Ok<D> {
* @param mutator
* @returns
*/
mapSync<M>(mapper: (data: D) => M) {
mapSync<M>(mapper: (inner: T) => M) {
return new Ok<M>(mapper(this.inner))
}

Expand All @@ -75,7 +76,7 @@ export class Ok<D> {
* @param mapper
* @returns
*/
tryMapSync<M>(mapper: (data: D) => M) {
tryMapSync<M>(mapper: (inner: T) => M) {
try {
return this.mapSync(mapper)
} catch (error: unknown) {
Expand Down
25 changes: 13 additions & 12 deletions src/mods/result/error.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { None, Some } from "@hazae41/option"

export class Err<E = unknown> {
export class Err<T = unknown> {

constructor(
readonly inner: E
readonly inner: T
) { }

static new<E>(inner: E) {
static new<T>(inner: T) {
return new this(inner)
}

Expand All @@ -21,18 +22,10 @@ export class Err<E = unknown> {
* Type guard for Err
* @returns
*/
isErr(): this is Err<E> {
isErr(): this is Err<T> {
return true
}

ok() {
return undefined
}

err() {
return this.inner
}

unwrap(): never {
throw this.inner
}
Expand All @@ -41,6 +34,14 @@ export class Err<E = unknown> {
return or
}

ok() {
return new None()
}

err() {
return new Some(this.inner)
}

map(mapper: unknown) {
return this
}
Expand Down

0 comments on commit 3014199

Please sign in to comment.