UNPKG

perlica

Version:

<h1 align="center">Perlica</h1>

723 lines (713 loc) 17 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all2) => { for (var name in all2) __defProp(target, name, { get: all2[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/index.ts var index_exports = {}; __export(index_exports, { Iterator: () => Iterator_exports, Option: () => Option_exports, Predicate: () => Predicate_exports, Result: () => Result_exports, Task: () => Task_exports }); module.exports = __toCommonJS(index_exports); // src/Result.ts var Result_exports = {}; __export(Result_exports, { ResultProto: () => ResultProto, and: () => and2, andThen: () => andThen, bind: () => bind2, err: () => err, expect: () => expect, expectErr: () => expectErr, fromNullable: () => fromNullable2, fromOption: () => fromOption, isErr: () => isErr, isOk: () => isOk, ok: () => ok, tryCatch: () => tryCatch2, tryPromise: () => tryPromise2, unwrap: () => unwrap, unwrapErr: () => unwrapErr, unwrapOr: () => unwrapOr, unwrapOrElse: () => unwrapOrElse }); // src/Iterator.ts var Iterator_exports = {}; __export(Iterator_exports, { OnceIterator: () => OnceIterator }); 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 Predicate_exports = {}; __export(Predicate_exports, { all: () => all, and: () => and, any: () => any, eq: () => eq, hasProperty: () => hasProperty, isArray: () => isArray, isAsyncIterable: () => isAsyncIterable, isBigInt: () => isBigInt, isBoolean: () => isBoolean, isDate: () => isDate, isError: () => isError, isFunction: () => isFunction, isInteger: () => isInteger, isIterable: () => isIterable, isMap: () => isMap, isNotNull: () => isNotNull, isNotNullable: () => isNotNullable, isNotUndefined: () => isNotUndefined, isNull: () => isNull, isNullable: () => isNullable, isNumber: () => isNumber, isObject: () => isObject, isPromise: () => isPromise, isRecordOrArray: () => isRecordOrArray, isRegExp: () => isRegExp, isSet: () => isSet, isString: () => isString, isSymbol: () => isSymbol, isTruthy: () => isTruthy, isUndefined: () => isUndefined, ne: () => ne, not: () => not, or: () => or }); var not = (self) => (value) => !self(value); var and = (self, that) => (value) => self(value) && that(value); var or = (self, that) => (value) => self(value) || that(value); var all = (predicates) => { return (value) => { for (const p of predicates) { if (p(value) === false) { return false; } } return true; }; }; var any = (predicates) => { return (value) => { for (const p of predicates) { if (p(value) === true) { return true; } } return false; }; }; var eq = (that) => (value) => value === that; var ne = (that) => (value) => value !== that; var isTruthy = (value) => !!value; var isNull = (value) => value === null; var isNotNull = (value) => value !== null; var isUndefined = (value) => value === void 0; var isNotUndefined = (value) => value !== void 0; var isBoolean = (value) => typeof value === "boolean"; var isNumber = (value) => typeof value === "number"; var isInteger = (value) => Number.isInteger(value); var isBigInt = (value) => typeof value === "bigint"; var isString = (value) => typeof value === "string"; var isArray = (value) => Array.isArray(value); var isFunction = (value) => typeof value === "function"; var isSymbol = (value) => typeof value === "symbol"; var isSet = (value) => value instanceof Set; var isMap = (value) => value instanceof Map; var isRegExp = (value) => value instanceof RegExp; var isError = (value) => value instanceof Error; var isNullable = (value) => isNull(value) || isUndefined(value); var isNotNullable = (value) => isNotNull(value) && isNotUndefined(value); var isPromise = (value) => hasProperty(value, "then") && hasProperty(value, "catch") && isFunction(value.then) && isFunction(value.catch); var isDate = (value) => value instanceof Date; var isRecordOrArray = (value) => typeof value === "object" && isNotNull(value); var isObject = (value) => isRecordOrArray(value) || isFunction(value); var hasProperty = (value, property) => isObject(value) && property in value; var isIterable = (value) => hasProperty(value, Symbol.iterator); var isAsyncIterable = (value) => hasProperty(value, Symbol.asyncIterator); // src/Option.ts var Option_exports = {}; __export(Option_exports, { OptionProto: () => OptionProto, bind: () => bind, fromNullable: () => fromNullable, fromResult: () => fromResult, isNone: () => isNone, isSome: () => isSome, none: () => none, some: () => some, tryCatch: () => tryCatch, tryPromise: () => tryPromise }); 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 fromNullable = (v) => isNotNullable(v) ? some(v) : none(); var fromResult = (v) => v.ok(); var tryCatch = (f) => { try { return some(f()); } catch (_) { return none(); } }; var tryPromise = async (v) => v.then((s) => some(s)).catch((_) => none()); 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; }; var bind = (fn) => { const iter = fn(); let result = iter.next(); while (true) { if (result.done) { return some(result.value); } if (isSome(result.value)) { result = iter.next(result.value.value); } else { return result.value; } } }; // src/Result.ts var and2 = (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 fromNullable2 = (v, f) => isNotNullable(v) ? ok(v) : err(f()); var fromOption = (self, f) => self.okOr(f()); var tryCatch2 = (f) => { try { return ok(f()); } catch (e) { return err(e); } }; var tryPromise2 = async (v) => v.then((s) => ok(s)).catch((f) => err(f)); var bind2 = (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); } }); // src/Task/index.ts var Task_exports = {}; __export(Task_exports, { Task: () => Task, and: () => and3, bind: () => bind3, createTask: () => createTask, expect: () => expect2, filter: () => filter, flatMap: () => flatMap, flatten: () => flatten, inspect: () => inspect, map: () => map, mapOr: () => mapOr, mapOrElse: () => mapOrElse, of: () => of, okOr: () => okOr, okOrElse: () => okOrElse, or: () => or2, orElse: () => orElse, safeRun: () => safeRun, toResult: () => toResult, unwrap: () => unwrap2, unwrapOr: () => unwrapOr2, unwrapOrElse: () => unwrapOrElse2 }); // src/Task/Task.ts var Task = class { constructor(f) { this.f = f; } unsafeRun() { return this.f(); } map(f) { return map(f)(this); } flatMap(f) { return flatMap(f)(this); } filter(predicate) { return filter(predicate)(this); } and(that) { return and3(that)(this); } expect(msg) { return expect2(msg)(this); } inspect(f) { return inspect(f)(this); } mapOr(def, f) { return mapOr(def, f)(this); } mapOrElse(d, f) { return mapOrElse(d, f)(this); } okOr(error) { return okOr(error)(this); } okOrElse(f) { return okOrElse(f)(this); } or(that) { return or2(that)(this); } orElse(f) { return orElse(f)(this); } unwrap() { return unwrap2(this); } unwrapOr(def) { return unwrapOr2(def)(this); } unwrapOrElse(f) { return unwrapOrElse2(f)(this); } safeRun() { return safeRun(this); } [Symbol.iterator]() { return new OnceIterator(this); } }; var createTask = (f) => { return new Task(f); }; // src/Task/functions.ts var of = (value) => createTask(async () => value); var map = (f) => (task) => { return createTask(async () => { const a = await task.unsafeRun(); return f(a); }); }; var flatMap = (f) => (task) => { return createTask(async () => { const a = await task.unsafeRun(); const b = f(a); return await b.unsafeRun(); }); }; var flatten = (task) => { return createTask(async () => { const inner = await task.unsafeRun(); return await inner.unsafeRun(); }); }; var okOr = (error) => (task) => { return createTask(async () => { try { const v = await task.unsafeRun(); return ok(v); } catch { return err(error); } }); }; var okOrElse = (f) => (task) => { return createTask(async () => { try { const v = await task.unsafeRun(); return ok(v); } catch { return err(f()); } }); }; var and3 = (that) => (task) => { return createTask(async () => { await task.unsafeRun(); return await that.unsafeRun(); }); }; var expect2 = (msg) => (task) => { return createTask(async () => { const v = await task.unsafeRun(); if (v === null || v === void 0) { throw new Error(msg); } return v; }); }; var filter = (f) => (task) => { return createTask(async () => { const v = await task.unsafeRun(); return f(v) ? some(v) : none(); }); }; var inspect = (f) => (task) => { return createTask(async () => { const v = await task.unsafeRun(); f(v); return v; }); }; var mapOr = (def, f) => (task) => { return createTask(async () => { try { const a = await task.unsafeRun(); return f(a); } catch { return def; } }); }; var mapOrElse = (d, f) => (task) => { return createTask(async () => { try { const a = await task.unsafeRun(); return f(a); } catch { return d(); } }); }; var or2 = (that) => (task) => { return createTask(async () => { try { return await task.unsafeRun(); } catch { return await that.unsafeRun(); } }); }; var orElse = (f) => (task) => { return createTask(async () => { try { return await task.unsafeRun(); } catch { return await f().unsafeRun(); } }); }; var unwrap2 = (task) => { return createTask(async () => { const v = await task.unsafeRun(); if (v === null || v === void 0) { throw new Error(`called \`Task.unwrap()\` on a null value`); } return v; }); }; var unwrapOr2 = (def) => (task) => { return createTask(async () => { try { const a = await task.unsafeRun(); return a; } catch { return def; } }); }; var unwrapOrElse2 = (f) => (task) => { return createTask(async () => { try { const a = await task.unsafeRun(); return a; } catch { return f(); } }); }; var toResult = (task) => { return createTask(async () => { try { const v = await task.unsafeRun(); return ok(v); } catch (e) { return err(e); } }); }; var safeRun = async (task) => { try { const v = await task.unsafeRun(); return ok(v); } catch (e) { return err(e); } }; var bind3 = (fn) => { return createTask(async () => { const iter = fn(); let result = iter.next(); while (true) { if (result.done) { return result.value; } result = await result.value.map((t) => iter.next(t)).unsafeRun(); } }); }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { Iterator, Option, Predicate, Result, Task });