From 90831844e2798ddfd13070f7d57ead43f5c8e20c Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Wed, 29 Jan 2025 17:17:49 -0500 Subject: [PATCH] upgrade remeda --- .changeset/perfect-ads-teach.md | 5 +++++ package.json | 2 +- src/filter.ts | 4 ++-- src/if.ts | 4 ++-- src/map.ts | 2 +- src/pick.test.ts | 2 +- src/pick.ts | 12 +++++++++++- src/reject.test.ts | 12 +++++++----- src/reject.ts | 7 ++++--- src/update.ts | 4 ++-- 10 files changed, 36 insertions(+), 18 deletions(-) create mode 100644 .changeset/perfect-ads-teach.md diff --git a/.changeset/perfect-ads-teach.md b/.changeset/perfect-ads-teach.md new file mode 100644 index 0000000..5a7ae26 --- /dev/null +++ b/.changeset/perfect-ads-teach.md @@ -0,0 +1,5 @@ +--- +"@yanick/updeep-remeda": minor +--- + +update Remeda dependency diff --git a/package.json b/package.json index 73fb33c..5207fe0 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ }, "scripts": {}, "dependencies": { - "remeda": "^1.3.0" + "remeda": "^2.20.0" }, "devDependencies": { "@changesets/cli": "^2.27.1", diff --git a/src/filter.ts b/src/filter.ts index d8ec76f..16faa7c 100644 --- a/src/filter.ts +++ b/src/filter.ts @@ -6,8 +6,8 @@ import wrap from "./wrap.js"; const sizeOf = (obj) => obj.length; function filter(dataIn, predicate) { - const result = _filter.indexed(dataIn, buildPredicate(predicate)); + const result = _filter(dataIn, buildPredicate(predicate)); return sizeOf(result) === sizeOf(dataIn) ? dataIn : result; } -export default wrap(filter) as typeof _filter.indexed; +export default wrap(filter) as typeof _filter; diff --git a/src/if.ts b/src/if.ts index 5979521..8332b89 100644 --- a/src/if.ts +++ b/src/if.ts @@ -1,8 +1,8 @@ -import { identity } from "remeda"; - import ifElse from "./ifElse.js"; import wrap from "./wrap.js"; +const identity = (x: unknown) => x; + export interface If { (object, predicate, trueUpdates): unknown; (predicate, trueUpdates): (unknown) => unknown; diff --git a/src/map.ts b/src/map.ts index 5e7fba2..18c96bd 100644 --- a/src/map.ts +++ b/src/map.ts @@ -13,7 +13,7 @@ function shallowEqual(object, otherObject) { function map(object, 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 equal = shallowEqual(object, newObject); diff --git a/src/pick.test.ts b/src/pick.test.ts index bc88c7a..57c3126 100644 --- a/src/pick.test.ts +++ b/src/pick.test.ts @@ -18,6 +18,6 @@ it("freezes the result", () => { it("doesn't change the obj if nothing is modified", () => { const orig = { a: 1 }; - const result = pick(["a"])(orig); + const result = pick(["a"])(orig); expect(result).to.be.equal(orig); }); diff --git a/src/pick.ts b/src/pick.ts index bdb3313..a3b44a4 100644 --- a/src/pick.ts +++ b/src/pick.ts @@ -4,9 +4,19 @@ import wrap from "./wrap.js"; const sizeOf = (obj) => Object.keys(obj).length; +export interface UPick { + ( + keys: S[] + ): (dataIn: O) => Pick; + ( + dataIn: O, + keys: S[] + ): Pick; +} + function pick(dataIn, keys) { const result = _pick(dataIn, keys); return sizeOf(result) === sizeOf(dataIn) ? dataIn : result; } -export default wrap(pick) as typeof _pick; +export default wrap(pick) as UPick; diff --git a/src/reject.test.ts b/src/reject.test.ts index e6ad518..ec3dbca 100644 --- a/src/reject.test.ts +++ b/src/reject.test.ts @@ -1,20 +1,22 @@ -import { expect, it } from "vitest"; +import { expect, test } from "vitest"; import reject from "./reject.js"; import u from "./index.js"; -it("can reject", () => { - const result = u({ foo: reject((v, k) => k === 1) })({ +test("can reject", () => { + const result = u({ + foo: reject((_, k) => k === 1), + })({ foo: ["a", "b"], }); expect(result).to.eql({ foo: ["a"] }); }); -it("freezes the result", () => { +test("freezes the result", () => { 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 result = reject(() => false)(orig); expect(result).to.be.equal(orig); diff --git a/src/reject.ts b/src/reject.ts index 24d495b..47df8f6 100644 --- a/src/reject.ts +++ b/src/reject.ts @@ -1,4 +1,4 @@ -import { reject as _reject } from "remeda"; +import { filter } from "remeda"; import { buildPredicate } from "./predicate.js"; import wrap from "./wrap.js"; @@ -6,8 +6,9 @@ import wrap from "./wrap.js"; const sizeOf = (obj) => obj.length; 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; } -export default wrap(reject) as typeof _reject.indexed; +export default wrap(reject) as typeof filter; diff --git a/src/update.ts b/src/update.ts index 6bb44fb..5796f73 100644 --- a/src/update.ts +++ b/src/update.ts @@ -2,7 +2,7 @@ import wrap from "./wrap.js"; import constant from "./constant.js"; import * as R from "remeda"; -import { omitBy, isObject, merge } from "remeda"; +import { omitBy, merge } from "remeda"; const innerOmitted = { __skip: true }; export const skip = constant(innerOmitted); @@ -78,7 +78,7 @@ function update(object, updates) { 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)) { return updates;