123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.nullsafeVisitor = exports.mapObject = exports.partitionRecord = exports.partition = exports.assertExhaustive = exports.zipIn = exports.zip = exports.reduceFlat = exports.flatten = exports.flattenArray = exports.flattenObject = void 0;
- function* flattenObject(obj) {
- function* helper(path, obj) {
- for (const [k, v] of Object.entries(obj)) {
- if (typeof v !== "object" || v === null) {
- yield [[...path, k].join("."), v];
- }
- else {
- yield* helper([...path, k], v);
- }
- }
- }
- yield* helper([], obj);
- }
- exports.flattenObject = flattenObject;
- function* flattenArray(arr) {
- for (const val of arr) {
- if (Array.isArray(val)) {
- yield* flattenArray(val);
- }
- else {
- yield val;
- }
- }
- }
- exports.flattenArray = flattenArray;
- function flatten(objOrArr) {
- if (Array.isArray(objOrArr)) {
- return flattenArray(objOrArr);
- }
- else {
- return flattenObject(objOrArr);
- }
- }
- exports.flatten = flatten;
- function reduceFlat(accum, next) {
- return [...(accum || []), ...flatten([next])];
- }
- exports.reduceFlat = reduceFlat;
- function* zip(left, right) {
- if (left.length !== right.length) {
- throw new Error("Cannot zip between two lists of differen lengths");
- }
- for (let i = 0; i < left.length; i++) {
- yield [left[i], right[i]];
- }
- }
- exports.zip = zip;
- const zipIn = (other) => (elem, ndx) => {
- return [elem, other[ndx]];
- };
- exports.zipIn = zipIn;
- function assertExhaustive(val) {
- throw new Error(`Never has a value (${val}). This should be impossible`);
- }
- exports.assertExhaustive = assertExhaustive;
- function partition(arr, predicate) {
- return arr.reduce((acc, elem) => {
- acc[predicate(elem) ? 0 : 1].push(elem);
- return acc;
- }, [[], []]);
- }
- exports.partition = partition;
- function partitionRecord(rec, predicate) {
- return Object.entries(rec).reduce((acc, [key, val]) => {
- acc[predicate(key, val) ? 0 : 1][key] = val;
- return acc;
- }, [{}, {}]);
- }
- exports.partitionRecord = partitionRecord;
- function mapObject(input, transform) {
- const result = {};
- for (const [k, v] of Object.entries(input)) {
- result[k] = transform(v);
- }
- return result;
- }
- exports.mapObject = mapObject;
- const nullsafeVisitor = (func, ...rest) => (first) => {
- if (first === null) {
- return null;
- }
- return func(first, ...rest);
- };
- exports.nullsafeVisitor = nullsafeVisitor;
|