UNPKG

perlica

Version:

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

476 lines (469 loc) 9.98 kB
"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/Task/Task.ts var Task_exports = {}; __export(Task_exports, { Task: () => Task, createTask: () => createTask }); module.exports = __toCommonJS(Task_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/Result.ts var isOk = (r) => r.tag === "ok"; var isErr = (r) => r.tag === "err"; 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/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/Task/functions.ts 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 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 and = (that) => (task) => { return createTask(async () => { await task.unsafeRun(); return await that.unsafeRun(); }); }; var expect = (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 or = (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 unwrap = (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 unwrapOr = (def) => (task) => { return createTask(async () => { try { const a = await task.unsafeRun(); return a; } catch { return def; } }); }; var unwrapOrElse = (f) => (task) => { return createTask(async () => { try { const a = await task.unsafeRun(); return a; } catch { return f(); } }); }; var safeRun = async (task) => { try { const v = await task.unsafeRun(); return ok(v); } catch (e) { return err(e); } }; // 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 and(that)(this); } expect(msg) { return expect(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 or(that)(this); } orElse(f) { return orElse(f)(this); } unwrap() { return unwrap(this); } unwrapOr(def) { return unwrapOr(def)(this); } unwrapOrElse(f) { return unwrapOrElse(f)(this); } safeRun() { return safeRun(this); } [Symbol.iterator]() { return new OnceIterator(this); } }; var createTask = (f) => { return new Task(f); }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { Task, createTask });