https://github.com/arlac77/hinted-tree-merger
merges two trees guided with hints
https://github.com/arlac77/hinted-tree-merger
Last synced: 8 months ago
JSON representation
merges two trees guided with hints
- Host: GitHub
- URL: https://github.com/arlac77/hinted-tree-merger
- Owner: arlac77
- License: 0bsd
- Created: 2019-08-09T22:55:54.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2025-03-19T02:39:54.000Z (about 1 year ago)
- Last Synced: 2025-03-21T08:46:59.564Z (about 1 year ago)
- Language: JavaScript
- Size: 2.57 MB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://www.npmjs.com/package/hinted-tree-merger)
[](https://spdx.org/licenses/0BSD.html)
[](https://typescriptlang.org)
[](https://bundlejs.com/?q=hinted-tree-merger)
[](https://npmjs.org/package/hinted-tree-merger)
[](https://github.com/arlac77/hinted-tree-merger/issues)
[](https://actions-badge.atrox.dev/arlac77/hinted-tree-merger/goto)
[](https://github.com/prettier/prettier)
[](http://commitizen.github.io/cz-cli/)
[](https://snyk.io/test/github/arlac77/hinted-tree-merger)
[](https://coveralls.io/github/arlac77/hinted-tree-merger)
# hinted-tree-merger
merges two trees guided with hints
# usage
### merge array having entries identified by key
```js
import { merge } from "hinted-tree-merger";
const r = merge(
[{ k:1, e:1}, { k:2}],
[{ k:1, e:2}, { k:3}], // 2nd. array has precedence
"",
undefined,
{
"": { key: "k" } // identify slots by property "k"
});
// r := [{ k:1 e:2 }, { k:2 }, { k:3 }]
```
### deep copy
```js
import { merge } from "hinted-tree-merger";
const r = merge( undefined, [ { k:1, e:2}, { k:3 }]);
// r := [{ k:1 e:2 }, { k:2 }, { k:3 }]
```
# API
### Table of Contents
* [hintFor](#hintfor)
* [Parameters](#parameters)
* [Actions](#actions)
* [Parameters](#parameters-1)
* [mergeSkip](#mergeskip)
* [Parameters](#parameters-2)
* [mergeArrays](#mergearrays)
* [Parameters](#parameters-3)
* [merge](#merge)
* [Parameters](#parameters-4)
* [hasDeleteHint](#hasdeletehint)
* [Parameters](#parameters-5)
* [isToBeRemoved](#istoberemoved)
* [Parameters](#parameters-6)
* [hintFreeValue](#hintfreevalue)
* [Parameters](#parameters-7)
* [indexFor](#indexfor)
* [Parameters](#parameters-8)
* [keyFor](#keyfor)
* [Parameters](#parameters-9)
* [sortObjectsByKeys](#sortobjectsbykeys)
* [Parameters](#parameters-10)
* [compareWithDefinedOrder](#comparewithdefinedorder)
* [Parameters](#parameters-11)
* [matchingIndex](#matchingindex)
* [Parameters](#parameters-12)
* [match](#match)
* [cmp](#cmp)
* [Parameters](#parameters-13)
* [compareVersion](#compareversion)
* [Parameters](#parameters-14)
* [unionVersion](#unionversion)
* [Parameters](#parameters-15)
* [VersionMapper](#versionmapper)
* [mergeVersionsWithFilter](#mergeversionswithfilter)
* [Parameters](#parameters-16)
* [mergeVersions](#mergeversions)
* [Parameters](#parameters-17)
* [mergeVersionsPreferNumeric](#mergeversionsprefernumeric)
* [Parameters](#parameters-18)
* [walk](#walk)
* [Parameters](#parameters-19)
## hintFor
Construct hint for a given path.
### Parameters
* `hints` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
* `path` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**
## Actions
Type: [Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)
### Parameters
* `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
* `hints` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
## mergeSkip
Skip merging use left side always.
### Parameters
* `a`
* `b`
* `path`
* `actions`
* `hints`
## mergeArrays
### Parameters
* `a` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)**
* `b` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)**
* `path` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**
* `actions` **[Actions](#actions)** (optional, default `nullAction`)
* `hints` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
## merge
Merge to values.
### Parameters
* `a` **any**
* `b` **any**
* `path`
* `actions` **[Actions](#actions)** (optional, default `nullAction`)
* `hints` **any**
Returns **any** merged value
## hasDeleteHint
### Parameters
* `value` **any**
* `expected` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function))**
Returns **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean))**
## isToBeRemoved
Should value be removed.
### Parameters
* `value` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**
* `fromTemplate` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**
Returns **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** true if fromTemplate tells is to delete value
## hintFreeValue
Remove hint(s) form a value.
### Parameters
* `value` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | any)**
Returns **any** value without hint
## indexFor
Find best insertion point for b\[i] in a.
### Parameters
* `b` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)\**
* `i` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
* `a` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)\**
## keyFor
Deliver key value to identify object.
### Parameters
* `object` **any**
* `hint` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
Returns **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [undefined](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined))**
## sortObjectsByKeys
Sort keys in source.
### Parameters
* `source` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
* `compare`
Returns **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** source with keys orderd by compare function
## compareWithDefinedOrder
### Parameters
* `a` **any**
* `b` **any**
* `definedOrder`
## matchingIndex
### Parameters
* `value` **any**
Returns **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
## match
url means highest version
## cmp
### Parameters
* `a` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)>**
* `b` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)>**
Returns **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
## compareVersion
Compare two versions.
### Parameters
* `a` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number))**
* `b` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number))**
Returns **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** -1 if a < b, 0 if a == b and 1 if a > b
## unionVersion
Forms union of two versions.
### Parameters
* `a` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number))**
* `b` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number))**
Returns **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number))**
## VersionMapper
maps version values (to number)
Type: [Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)
## mergeVersionsWithFilter
Merge and filter two sets of version (expressions).
### Parameters
* `a` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)> | [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)>)**
* `b` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)> | [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)>)**
* `path` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** location in the tree
* `actions` **[Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)** cb to notify about the actual selection (optional, default `nullAction`)
* `hints` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
* `filter` **[VersionMapper](#versionmapper)**
Returns **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)> | [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)>)** merged set of version expressions
## mergeVersions
merge two sets of version (expressions)
### Parameters
* `a` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)> | [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)>)**
* `b` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)> | [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)>)**
* `path` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** location in the tree
* `actions` **[Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)** cb to notify about the actual selection
* `hints` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
Returns **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)> | [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)>)** merged set of version expressions
## mergeVersionsPreferNumeric
Same as mergeVersions but merge result are converted into
numbers if possible
### Parameters
* `a` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)> | [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)>)**
* `b` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)> | [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)>)**
* `path` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** location in the tree
* `actions` **[Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)** cb to notify about the actual selection
* `hints` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
Returns **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)> | [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number) | [Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)>)** merged set of version expressions
## walk
Iterates over all members.
### Parameters
* `value` **any**
* `path` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)\** (optional, default `[]`)
* `parents` (optional, default `[]`)
# install
With [npm](http://npmjs.org) do:
```shell
npm install hinted-tree-merger
```
# license
BSD-2-Clause