From c60fdbaf0de3a19a1c623950146c7eda8028a8c0 Mon Sep 17 00:00:00 2001 From: Moshe Kolodny Date: Wed, 12 Jun 2019 21:57:05 -0400 Subject: [PATCH] Support set on Maps --- .travis.yml | 2 +- index.d.ts | 4 ++++ index.ts | 3 ++- package.json | 2 +- test.ts | 7 +++++++ 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 597a7f4..1fea5b5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ language: node_js node_js: - - '6' - '8' - '10' + - '12' - 'lts/*' # Send coverage data to Coveralls after_script: "cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js" diff --git a/index.d.ts b/index.d.ts index 47c4810..3909c3d 100644 --- a/index.d.ts +++ b/index.d.ts @@ -30,6 +30,10 @@ declare type MapSpec = { $add: Array<[K, V]>; } | { $remove: K[]; +} | { + [key: string]: { + $set: V; + }; }; declare type SetSpec = { $add: T[]; diff --git a/index.ts b/index.ts index fad6c5d..41b948a 100644 --- a/index.ts +++ b/index.ts @@ -343,7 +343,8 @@ type ArraySpec> = type MapSpec = | { $add: Array<[K, V]> } - | { $remove: K[] }; + | { $remove: K[] } + | { [key: string]: { $set: V } }; type SetSpec = | { $add: T[] } diff --git a/package.json b/package.json index a455984..51c12f0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "immutability-helper", - "version": "3.0.0", + "version": "3.0.1", "description": "mutate a copy of data without changing the original source", "main": "index.js", "typings": "index.d.ts", diff --git a/test.ts b/test.ts index 7f3d174..411057f 100644 --- a/test.ts +++ b/test.ts @@ -163,6 +163,13 @@ describe('immutability-helper module', () => { expect(result).toEqual({a: 1, b: undefined}); expect(Object.keys(result).length).toEqual(2); }); + it('works on Map (E2E)', () => { + const state = new Map([['foo', 'FOO'], ['bar', 'BAR']]); + const modified = update(state, {foo: {$set: 'OFO' }}); + expect(state).toEqual(new Map([['foo', 'FOO'], ['bar', 'BAR']])); + expect(modified).toEqual(new Map([['foo', 'OFO'], ['bar', 'BAR']])); + expect(state).not.toBe(modified); + }); }); describe('$toggle', () => {