perlica
Version:
<h1 align="center">Perlica</h1>
343 lines (337 loc) • 7.88 kB
JavaScript
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/Result.ts
var Result_exports = {};
__export(Result_exports, {
ResultProto: () => ResultProto,
and: () => and,
andThen: () => andThen,
bind: () => bind,
err: () => err,
expect: () => expect,
expectErr: () => expectErr,
fromNullable: () => fromNullable,
fromOption: () => fromOption,
isErr: () => isErr,
isOk: () => isOk,
ok: () => ok,
tryCatch: () => tryCatch,
tryPromise: () => tryPromise,
unwrap: () => unwrap,
unwrapErr: () => unwrapErr,
unwrapOr: () => unwrapOr,
unwrapOrElse: () => unwrapOrElse
});
module.exports = __toCommonJS(Result_exports);
// src/Iterator.ts
var OnceIterator = class _OnceIterator {
constructor(value) {
this.value = value;
}
done = false;
next(value) {
if (this.done) {
return {
done: true,
value
};
}
this.done = true;
return {
done: false,
value: this.value
};
}
[Symbol.iterator]() {
return new _OnceIterator(this.value);
}
};
// src/Predicate/index.ts
var isNotNull = (value) => value !== null;
var isNotUndefined = (value) => value !== void 0;
var isNotNullable = (value) => isNotNull(value) && isNotUndefined(value);
// src/Option.ts
var isSome = (r) => r.tag === "some";
var isNone = (r) => r.tag === "none";
var OptionProto = () => ({
and(v) {
return isSome(this) ? v : none();
},
andThen(f) {
return isSome(this) ? f(this.value) : none();
},
expect(msg) {
if (isSome(this)) {
return this.value;
} else {
throw new Error(msg);
}
},
filter(f) {
return isNone(this) ? none() : f(this.value) ? this : none();
},
flatten() {
return isSome(this) ? this.value : none();
},
inspect(f) {
if (isSome(this)) {
f(this.value);
return some(this.value);
} else {
return none();
}
},
isNone() {
return isNone(this);
},
isNoneOr(f) {
return isNone(this) || f(this.value);
},
isSome() {
return isSome(this);
},
isSomeAnd(f) {
return isNone(this) ? false : f(this.value);
},
map(f) {
return isSome(this) ? some(f(this.value)) : none();
},
mapOr(def, f) {
return isSome(this) ? f(this.value) : def;
},
mapOrElse(d, f) {
return isSome(this) ? f(this.value) : d();
},
okOr(v) {
return isSome(this) ? ok(this.value) : err(v);
},
okOrElse(f) {
return isSome(this) ? ok(this.value) : err(f());
},
or(v) {
return isSome(this) ? this : v;
},
orElse(f) {
return isSome(this) ? this : f();
},
transpose() {
return isNone(this) ? ok(none()) : isErr(this.value) ? err(this.value.value) : ok(some(this.value.value));
},
unwrap() {
if (isSome(this)) {
return this.value;
} else {
throw new Error("called `Option.unwrap()` on a `None` value");
}
},
unwrapOr(def) {
return isSome(this) ? this.value : def;
},
unwrapOrElse(def) {
return isSome(this) ? this.value : def();
},
xor(v) {
return isSome(this) && isSome(v) ? this : isNone(this) && isSome(v) ? v : none();
},
[Symbol.iterator]() {
return new OnceIterator(this);
}
});
var some = (v) => {
const a = Object.create(OptionProto());
a.value = v;
a.tag = "some";
return a;
};
var none = () => {
const a = Object.create(OptionProto());
a.tag = "none";
return a;
};
// src/Result.ts
var and = (self, that) => self.and(that);
var andThen = (self, f) => self.andThen(f);
var expect = (self, msg) => self.expect(msg);
var expectErr = (self, msg) => self.expectErr(msg);
var isOk = (r) => r.tag === "ok";
var isErr = (r) => r.tag === "err";
var unwrap = (self) => self.unwrap();
var unwrapErr = (self) => self.unwrapErr();
var unwrapOr = (self, def) => self.unwrapOr(def);
var unwrapOrElse = (self, def) => self.unwrapOrElse(def);
var fromNullable = (v, f) => isNotNullable(v) ? ok(v) : err(f());
var fromOption = (self, f) => self.okOr(f());
var tryCatch = (f) => {
try {
return ok(f());
} catch (e) {
return err(e);
}
};
var tryPromise = async (v) => v.then((s) => ok(s)).catch((f) => err(f));
var bind = (fn) => {
const iter = fn();
let result = iter.next();
while (true) {
if (result.done) {
return ok(result.value);
}
if (isOk(result.value)) {
result = iter.next(result.value.value);
} else {
return result.value;
}
}
};
var ok = (v) => {
const a = Object.create(ResultProto());
a.value = v;
a.tag = "ok";
return a;
};
var err = (v) => {
const a = Object.create(ResultProto());
a.value = v;
a.tag = "err";
return a;
};
var ResultProto = () => ({
and(res) {
return isOk(this) ? res : err(this.value);
},
andThen(f) {
return isOk(this) ? f(this.value) : err(this.value);
},
err() {
return isErr(this) ? some(this.value) : none();
},
expect(msg) {
if (isOk(this)) {
return this.value;
} else {
throw new Error(msg);
}
},
expectErr(msg) {
if (isErr(this)) {
return this.value;
} else {
throw new Error(msg);
}
},
flatten() {
return this.andThen((v) => v);
},
inspect(f) {
if (isOk(this)) {
f(this.value);
return ok(this.value);
} else {
return err(this.value);
}
},
inspectErr(f) {
if (isErr(this)) {
f(this.value);
return err(this.value);
} else {
return ok(this.value);
}
},
isErr() {
return isErr(this);
},
isErrAnd(f) {
return isErr(this) && f(this.value);
},
isOk() {
return isOk(this);
},
isOkAnd(f) {
return isOk(this) && f(this.value);
},
map(f) {
return isOk(this) ? ok(f(this.value)) : err(this.value);
},
mapErr(f) {
return isErr(this) ? err(f(this.value)) : ok(this.value);
},
mapOr(def, f) {
return isOk(this) ? f(this.value) : def;
},
mapOrElse(def, f) {
return isOk(this) ? f(this.value) : def(this.value);
},
ok() {
return isOk(this) ? some(this.value) : none();
},
or(f) {
return isErr(this) ? err(f(this.value)) : ok(this.value);
},
orElse(f) {
return isErr(this) ? f(this.value) : ok(this.value);
},
transpose() {
return isErr(this) ? some(err(this.value)) : isNone(this.value) ? none() : some(ok(this.value.value));
},
unwrap() {
if (isOk(this)) {
return this.value;
} else {
throw new Error(`called \`Result.unwrap()\` on an \`Err\` value: ${String(this.value)}`);
}
},
unwrapErr() {
if (isErr(this)) {
return this.value;
} else {
throw new Error(`called \`Result.unwrapErr()\` on an \`Ok\` value: ${String(this.value)}`);
}
},
unwrapOr(def) {
return isOk(this) ? this.value : def;
},
unwrapOrElse(def) {
return isOk(this) ? this.value : def(this.value);
},
[Symbol.iterator]() {
return new OnceIterator(this);
}
});
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
ResultProto,
and,
andThen,
bind,
err,
expect,
expectErr,
fromNullable,
fromOption,
isErr,
isOk,
ok,
tryCatch,
tryPromise,
unwrap,
unwrapErr,
unwrapOr,
unwrapOrElse
});