Merge branch 'remeda-update'
This commit is contained in:
commit
fca80060d6
5
.changeset/perfect-ads-teach.md
Normal file
5
.changeset/perfect-ads-teach.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"@yanick/updeep-remeda": minor
|
||||||
|
---
|
||||||
|
|
||||||
|
update Remeda dependency
|
@ -36,7 +36,7 @@
|
|||||||
},
|
},
|
||||||
"scripts": {},
|
"scripts": {},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"remeda": "^1.3.0"
|
"remeda": "^2.20.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@changesets/cli": "^2.27.1",
|
"@changesets/cli": "^2.27.1",
|
||||||
|
@ -6,8 +6,8 @@ import wrap from "./wrap.js";
|
|||||||
const sizeOf = (obj) => obj.length;
|
const sizeOf = (obj) => obj.length;
|
||||||
|
|
||||||
function filter(dataIn, predicate) {
|
function filter(dataIn, predicate) {
|
||||||
const result = _filter.indexed(dataIn, buildPredicate(predicate));
|
const result = _filter(dataIn, buildPredicate(predicate));
|
||||||
return sizeOf(result) === sizeOf(dataIn) ? dataIn : result;
|
return sizeOf(result) === sizeOf(dataIn) ? dataIn : result;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default wrap(filter) as typeof _filter.indexed;
|
export default wrap(filter) as typeof _filter;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { identity } from "remeda";
|
|
||||||
|
|
||||||
import ifElse from "./ifElse.js";
|
import ifElse from "./ifElse.js";
|
||||||
import wrap from "./wrap.js";
|
import wrap from "./wrap.js";
|
||||||
|
|
||||||
|
const identity = (x: unknown) => x;
|
||||||
|
|
||||||
export interface If {
|
export interface If {
|
||||||
(object, predicate, trueUpdates): unknown;
|
(object, predicate, trueUpdates): unknown;
|
||||||
(predicate, trueUpdates): (unknown) => unknown;
|
(predicate, trueUpdates): (unknown) => unknown;
|
||||||
|
@ -13,7 +13,7 @@ function shallowEqual(object, otherObject) {
|
|||||||
function map(object, iteratee) {
|
function map(object, iteratee) {
|
||||||
const updater = typeof iteratee === "function" ? iteratee : update(iteratee);
|
const updater = typeof iteratee === "function" ? iteratee : update(iteratee);
|
||||||
|
|
||||||
const mapper = Array.isArray(object) ? _map.indexed : mapValues;
|
const mapper: any = Array.isArray(object) ? _map : mapValues;
|
||||||
|
|
||||||
const newObject = mapper(object, updater);
|
const newObject = mapper(object, updater);
|
||||||
const equal = shallowEqual(object, newObject);
|
const equal = shallowEqual(object, newObject);
|
||||||
|
@ -18,6 +18,6 @@ it("freezes the result", () => {
|
|||||||
|
|
||||||
it("doesn't change the obj if nothing is modified", () => {
|
it("doesn't change the obj if nothing is modified", () => {
|
||||||
const orig = { a: 1 };
|
const orig = { a: 1 };
|
||||||
const result = pick<any, string>(["a"])(orig);
|
const result = pick(["a"])(orig);
|
||||||
expect(result).to.be.equal(orig);
|
expect(result).to.be.equal(orig);
|
||||||
});
|
});
|
||||||
|
12
src/pick.ts
12
src/pick.ts
@ -4,9 +4,19 @@ import wrap from "./wrap.js";
|
|||||||
|
|
||||||
const sizeOf = (obj) => Object.keys(obj).length;
|
const sizeOf = (obj) => Object.keys(obj).length;
|
||||||
|
|
||||||
|
export interface UPick {
|
||||||
|
<S extends string | number | symbol>(
|
||||||
|
keys: S[]
|
||||||
|
): <O>(dataIn: O) => Pick<O, S & keyof O>;
|
||||||
|
<S extends string | number | symbol, O>(
|
||||||
|
dataIn: O,
|
||||||
|
keys: S[]
|
||||||
|
): Pick<O, S & keyof O>;
|
||||||
|
}
|
||||||
|
|
||||||
function pick(dataIn, keys) {
|
function pick(dataIn, keys) {
|
||||||
const result = _pick(dataIn, keys);
|
const result = _pick(dataIn, keys);
|
||||||
return sizeOf(result) === sizeOf(dataIn) ? dataIn : result;
|
return sizeOf(result) === sizeOf(dataIn) ? dataIn : result;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default wrap(pick) as typeof _pick;
|
export default wrap(pick) as UPick;
|
||||||
|
@ -1,20 +1,22 @@
|
|||||||
import { expect, it } from "vitest";
|
import { expect, test } from "vitest";
|
||||||
import reject from "./reject.js";
|
import reject from "./reject.js";
|
||||||
import u from "./index.js";
|
import u from "./index.js";
|
||||||
|
|
||||||
it("can reject", () => {
|
test("can reject", () => {
|
||||||
const result = u({ foo: reject((v, k) => k === 1) })({
|
const result = u({
|
||||||
|
foo: reject((_, k) => k === 1),
|
||||||
|
})({
|
||||||
foo: ["a", "b"],
|
foo: ["a", "b"],
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(result).to.eql({ foo: ["a"] });
|
expect(result).to.eql({ foo: ["a"] });
|
||||||
});
|
});
|
||||||
|
|
||||||
it("freezes the result", () => {
|
test("freezes the result", () => {
|
||||||
expect(Object.isFrozen(reject([1], () => true))).to.be.true;
|
expect(Object.isFrozen(reject([1], () => true))).to.be.true;
|
||||||
});
|
});
|
||||||
|
|
||||||
it("doesn't change the obj if nothing is modified", () => {
|
test("doesn't change the obj if nothing is modified", () => {
|
||||||
const orig = [1, 2, 3];
|
const orig = [1, 2, 3];
|
||||||
const result = reject(() => false)(orig);
|
const result = reject(() => false)(orig);
|
||||||
expect(result).to.be.equal(orig);
|
expect(result).to.be.equal(orig);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { reject as _reject } from "remeda";
|
import { filter } from "remeda";
|
||||||
import { buildPredicate } from "./predicate.js";
|
import { buildPredicate } from "./predicate.js";
|
||||||
|
|
||||||
import wrap from "./wrap.js";
|
import wrap from "./wrap.js";
|
||||||
@ -6,8 +6,9 @@ import wrap from "./wrap.js";
|
|||||||
const sizeOf = (obj) => obj.length;
|
const sizeOf = (obj) => obj.length;
|
||||||
|
|
||||||
function reject(dataIn, predicate) {
|
function reject(dataIn, predicate) {
|
||||||
const result = _reject.indexed(dataIn, buildPredicate(predicate));
|
const pred = buildPredicate(predicate);
|
||||||
|
const result = filter(dataIn, (...args) => !pred(...args));
|
||||||
return sizeOf(result) === sizeOf(dataIn) ? dataIn : result;
|
return sizeOf(result) === sizeOf(dataIn) ? dataIn : result;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default wrap(reject) as typeof _reject.indexed;
|
export default wrap(reject) as typeof filter;
|
||||||
|
@ -2,7 +2,7 @@ import wrap from "./wrap.js";
|
|||||||
import constant from "./constant.js";
|
import constant from "./constant.js";
|
||||||
import * as R from "remeda";
|
import * as R from "remeda";
|
||||||
|
|
||||||
import { omitBy, isObject, merge } from "remeda";
|
import { omitBy, merge } from "remeda";
|
||||||
|
|
||||||
const innerOmitted = { __skip: true };
|
const innerOmitted = { __skip: true };
|
||||||
export const skip = constant(innerOmitted);
|
export const skip = constant(innerOmitted);
|
||||||
@ -78,7 +78,7 @@ function update(object, updates) {
|
|||||||
return updates(object);
|
return updates(object);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Array.isArray(object) && R.equals(object, updates)) return object;
|
if (Array.isArray(object) && R.isDeepEqual(object, updates)) return object;
|
||||||
|
|
||||||
if (!isPlainObject(updates)) {
|
if (!isPlainObject(updates)) {
|
||||||
return updates;
|
return updates;
|
||||||
|
Loading…
Reference in New Issue
Block a user