UNPKG

sums-up

Version:

👍 Sums Up ===

52 lines (51 loc) 1.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function arrayEquals(a, b) { if (a === b) return true; if (a == null || b == null) return false; if (a.length != b.length) return false; for (var i = 0; i < a.length; ++i) { if (a[i] !== b[i]) return false; } return true; } class SumType { constructor(...args) { let [variantName, ...data] = args; this.variantName = variantName; this.data = data; } // @deprecated get kind() { return this.variantName; } // Semi FSA compliancy get type() { return this.variantName; } caseOf(pattern) { if (this.variantName in pattern) { return pattern[this.variantName](...this.data); } else if (pattern._) { return pattern._(); } else { throw new Error(`caseOf pattern is missing a function for ${this.variantName}`); } } equals(that) { return (this.variantName === that.variantName && arrayEquals(this.data, that.data)); } toString() { if (this.data.length) { return `${this.variantName} ${JSON.stringify(this.data)}`; } return `${this.variantName}`; } } exports.default = SumType;