UNPKG

eulejs

Version:

Euler's diagrams are non-empty Venn's diagrams.

57 lines (56 loc) 2.61 kB
(() => { "use strict"; var e = { d: (t, r) => { for (var o in r) e.o(r, o) && !e.o(t, o) && Object.defineProperty(t, o, { enumerable: !0, get: r[o] }) }, o: (e, t) => Object.prototype.hasOwnProperty.call(e, t), r: e => { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }) } }, t = {}; e.r(t), e.d(t, { euler: () => i, eulerGen: () => c }); const r = require("lodash"), o = (e, t, o) => Object.entries(r.cloneDeep(e)).reduce(((e, [r, o]) => t(e, r, o)), o), n = e => [...new Set(e)]; function* l(e) { if (e.constructor !== {}.constructor && e.constructor !== [].constructor) throw new TypeError("Ill-conditioned input. It must be either a json-like or array of arrays object!"); let t = !0; for (const r of Object.values(e)) t &= n(r).length === r.length; if (t || (console.warn("Each array MUST NOT have duplicates"), e = o(e, ((t, r, o) => (t[o] = n(e[o]), t)), {})), 0 === Object.values(e).length) throw new TypeError("There must at least ONE set!"); 1 === Object.values(e).length && (yield Object.entries(e)[0]); const c = e => Object.keys(e).filter((t => 0 !== e[t].length)); let i = [], f = "", s = [], a = "", d = [], u = [], h = {}, y = c(e); for (const t of y) if (i = r.difference(y, [t]).filter((t => 0 !== e[t].length)).map((e => String(e))), 0 !== i.length && 0 !== e[t].length) { h = o(i, ((t, r, o) => (t[o] = e[o], t)), {}); for (const o of l(h)) f = o[0], s = o[1], u = r.difference(s, e[t]), 0 !== u.length && (yield [f, u], f.split(",").forEach((t => { e[t] = r.difference(e[t], u) })), e[t] = r.difference(e[t], u)), d = r.intersection(s, e[t]), 0 !== d.length && (a = [t].concat(f.split(",")).join(","), yield [a, d], f.split(",").forEach((t => { e[t] = r.difference(e[t], d) })), e[t] = r.difference(e[t], d)), y = c(e); 0 !== e[t].length && (yield [String(t), e[t]], e[t] = []) } } let c = l, i = e => Object.fromEntries([...l(e)]); module.exports = t })();