From 5816bf779d424ef8b200114dfb77a84eec50fc78 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Wed, 7 Oct 2020 15:09:36 +0300 Subject: [PATCH] more docs and refactoring... Signed-off-by: Alex A. Naanou --- README.md | 23 +++++++++++++++++++++++ containers.js | 12 +++++++++--- package.json | 2 +- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d93bce7..b5fad11 100644 --- a/README.md +++ b/README.md @@ -49,11 +49,13 @@ A library of JavaScript type extensions, types and type utilities. - [`.set(..)`](#unique-key-mapset) - [`.reset(..)`](#unique-key-mapreset) - [`.rename(..)`](#unique-key-maprename) + - [`.orderedRename(..)`](#unique-key-maporderedrename) - [`.unorderedRename(..)`](#unique-key-mapunorderedrename) - [`.keysOf(..)`](#unique-key-mapkeysof) - [`.originalKey(..)`](#unique-key-maporiginalkey) - [`.uniqueKey(..)`](#unique-key-mapuniquekey) - [`.__key_pattern__`](#unique-key-map__key_pattern__) + - [`.__unordered_rename__`](#unique-key-map__unordered_rename__) - [License](#license) ## Installation @@ -329,6 +331,25 @@ Explicitly write an `` under `` as-is, this is like `Map`'s `.set(..) #### `.rename(..)` +``` +.rename(, ) + -> + +.rename(, , true) + -> +``` + +Rename item key from `` to ``. + +Same mechanics apply as for [`.set(..)`](#unique-key-mapset) for key uniqueness. + +Note, if [`.__unordered_rename__`](#unique-key-map__unordered_rename__) is +`false` (default) this calls [`.orderedRename(..)`](#unique-key-maporderedrename) +otherwise [`.unorderedRename(..)`](#unique-key-mapunorderedrename) is called. + + +#### `.orderedRename(..)` + #### `.unorderedRename(..)` #### `.keysOf(..)` @@ -339,6 +360,8 @@ Explicitly write an `` under `` as-is, this is like `Map`'s `.set(..) #### `.__key_pattern__` +#### `.__unordered_rename__` + ## License diff --git a/containers.js b/containers.js index 54c694d..48fc817 100644 --- a/containers.js +++ b/containers.js @@ -58,7 +58,6 @@ module.UniqueKeyMap = object.Constructor('UniqueKeyMap', Map, { // __unique_key_value__: false, - __unorderd_writes__: false, // helpers... @@ -154,12 +153,13 @@ module.UniqueKeyMap = object.Constructor('UniqueKeyMap', Map, { s.size == 0 && this.__keys.delete(this.get(key)) } return object.parentCall(UniqueKeyMap.prototype, 'delete', this, key) }, + // NOTE: this maintains the item order. This is done by rewriting // items in sequence, this may be slow and trigger lots of write // observer callbacks. to avoid this use .unOrderedRename(..) // XXX do not see how can we avoid rewriting the map if we want to // keep order... - rename: function(from, to, return_key=false){ + orderedRename: function(from, to, return_key=false){ var keys = [...this.keys()] // rename the element... var e = this.get(from) @@ -171,11 +171,17 @@ module.UniqueKeyMap = object.Constructor('UniqueKeyMap', Map, { return return_key ? n : this }, - // NOTE: this affects order... + // NOTE: the renamed item is appended to the map... unorderedRename: function(from, to, return_key=false){ var e = this.get(from) this.delete(from) return this.set(to, e, return_key) }, + + __unorderd_rename__: false, + rename: function(from, to, return_key=false){ + return this.__unorderd_writes__ ? + this.unorderedRename(...arguments) + : this.orderedRename(...arguments) }, }) diff --git a/package.json b/package.json index 900154e..cc8365d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ig-types", - "version": "2.0.11", + "version": "2.0.12", "description": "Generic JavaScript types and type extensions...", "main": "main.js", "scripts": {