Website/node_modules/symbol-tree/api.md

442 lines
18 KiB
Markdown
Raw Normal View History

<a name="module_symbol-tree"></a>
## symbol-tree
**Author:** Joris van der Wel <joris@jorisvanderwel.com>
* [symbol-tree](#module_symbol-tree)
* [SymbolTree](#exp_module_symbol-tree--SymbolTree) ⏏
* [new SymbolTree([description])](#new_module_symbol-tree--SymbolTree_new)
* [.initialize(object)](#module_symbol-tree--SymbolTree+initialize) ⇒ <code>Object</code>
* [.hasChildren(object)](#module_symbol-tree--SymbolTree+hasChildren) ⇒ <code>Boolean</code>
* [.firstChild(object)](#module_symbol-tree--SymbolTree+firstChild) ⇒ <code>Object</code>
* [.lastChild(object)](#module_symbol-tree--SymbolTree+lastChild) ⇒ <code>Object</code>
* [.previousSibling(object)](#module_symbol-tree--SymbolTree+previousSibling) ⇒ <code>Object</code>
* [.nextSibling(object)](#module_symbol-tree--SymbolTree+nextSibling) ⇒ <code>Object</code>
* [.parent(object)](#module_symbol-tree--SymbolTree+parent) ⇒ <code>Object</code>
* [.lastInclusiveDescendant(object)](#module_symbol-tree--SymbolTree+lastInclusiveDescendant) ⇒ <code>Object</code>
* [.preceding(object, [options])](#module_symbol-tree--SymbolTree+preceding) ⇒ <code>Object</code>
* [.following(object, [options])](#module_symbol-tree--SymbolTree+following) ⇒ <code>Object</code>
* [.childrenToArray(parent, [options])](#module_symbol-tree--SymbolTree+childrenToArray) ⇒ <code>Array.&lt;Object&gt;</code>
* [.ancestorsToArray(object, [options])](#module_symbol-tree--SymbolTree+ancestorsToArray) ⇒ <code>Array.&lt;Object&gt;</code>
* [.treeToArray(root, [options])](#module_symbol-tree--SymbolTree+treeToArray) ⇒ <code>Array.&lt;Object&gt;</code>
* [.childrenIterator(parent, [options])](#module_symbol-tree--SymbolTree+childrenIterator) ⇒ <code>Object</code>
* [.previousSiblingsIterator(object)](#module_symbol-tree--SymbolTree+previousSiblingsIterator) ⇒ <code>Object</code>
* [.nextSiblingsIterator(object)](#module_symbol-tree--SymbolTree+nextSiblingsIterator) ⇒ <code>Object</code>
* [.ancestorsIterator(object)](#module_symbol-tree--SymbolTree+ancestorsIterator) ⇒ <code>Object</code>
* [.treeIterator(root, options)](#module_symbol-tree--SymbolTree+treeIterator) ⇒ <code>Object</code>
* [.index(child)](#module_symbol-tree--SymbolTree+index) ⇒ <code>Number</code>
* [.childrenCount(parent)](#module_symbol-tree--SymbolTree+childrenCount) ⇒ <code>Number</code>
* [.compareTreePosition(left, right)](#module_symbol-tree--SymbolTree+compareTreePosition) ⇒ <code>Number</code>
* [.remove(removeObject)](#module_symbol-tree--SymbolTree+remove) ⇒ <code>Object</code>
* [.insertBefore(referenceObject, newObject)](#module_symbol-tree--SymbolTree+insertBefore) ⇒ <code>Object</code>
* [.insertAfter(referenceObject, newObject)](#module_symbol-tree--SymbolTree+insertAfter) ⇒ <code>Object</code>
* [.prependChild(referenceObject, newObject)](#module_symbol-tree--SymbolTree+prependChild) ⇒ <code>Object</code>
* [.appendChild(referenceObject, newObject)](#module_symbol-tree--SymbolTree+appendChild) ⇒ <code>Object</code>
<a name="exp_module_symbol-tree--SymbolTree"></a>
### SymbolTree ⏏
**Kind**: Exported class
<a name="new_module_symbol-tree--SymbolTree_new"></a>
#### new SymbolTree([description])
| Param | Default | Description |
| --- | --- | --- |
| [description] | <code>&#x27;SymbolTree data&#x27;</code> | Description used for the Symbol |
<a name="module_symbol-tree--SymbolTree+initialize"></a>
#### symbolTree.initialize(object) ⇒ <code>Object</code>
You can optionally initialize an object after its creation,
to take advantage of V8's fast properties. Also useful if you would like to
freeze your object.
`O(1)`
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
**Returns**: <code>Object</code> - object
| Param | Type |
| --- | --- |
| object | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+hasChildren"></a>
#### symbolTree.hasChildren(object) ⇒ <code>Boolean</code>
Returns `true` if the object has any children. Otherwise it returns `false`.
`O(1)`
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
| Param | Type |
| --- | --- |
| object | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+firstChild"></a>
#### symbolTree.firstChild(object) ⇒ <code>Object</code>
Return the first child of the given object.
`O(1)`
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
| Param | Type |
| --- | --- |
| object | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+lastChild"></a>
#### symbolTree.lastChild(object) ⇒ <code>Object</code>
Return the last child of the given object.
`O(1)`
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
| Param | Type |
| --- | --- |
| object | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+previousSibling"></a>
#### symbolTree.previousSibling(object) ⇒ <code>Object</code>
Return the previous sibling of the given object.
`O(1)`
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
| Param | Type |
| --- | --- |
| object | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+nextSibling"></a>
#### symbolTree.nextSibling(object) ⇒ <code>Object</code>
Return the nextSibling sibling of the given object.
`O(1)`
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
| Param | Type |
| --- | --- |
| object | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+parent"></a>
#### symbolTree.parent(object) ⇒ <code>Object</code>
Return the parent of the given object.
`O(1)`
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
| Param | Type |
| --- | --- |
| object | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+lastInclusiveDescendant"></a>
#### symbolTree.lastInclusiveDescendant(object) ⇒ <code>Object</code>
Find the inclusive descendant that is last in tree order of the given object.
`O(n)` (worst case) where n is the depth of the subtree of `object`
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
| Param | Type |
| --- | --- |
| object | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+preceding"></a>
#### symbolTree.preceding(object, [options]) ⇒ <code>Object</code>
Find the preceding object (A) of the given object (B).
An object A is preceding an object B if A and B are in the same tree
and A comes before B in tree order.
`O(n)` (worst case) <br>
`O(1)` (amortized when walking the entire tree)
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
| Param | Type | Description |
| --- | --- | --- |
| object | <code>Object</code> | |
| [options] | <code>Object</code> | |
| [options.root] | <code>Object</code> | If set, `root` must be an inclusive ancestor of the return value (or else null is returned). This check _assumes_ that `root` is also an inclusive ancestor of the given `node` |
<a name="module_symbol-tree--SymbolTree+following"></a>
#### symbolTree.following(object, [options]) ⇒ <code>Object</code>
Find the following object (A) of the given object (B).
An object A is following an object B if A and B are in the same tree
and A comes after B in tree order.
`O(n)` (worst case) where n is the amount of objects in the entire tree<br>
`O(1)` (amortized when walking the entire tree)
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| object | <code>Object</code> | | |
| [options] | <code>Object</code> | | |
| [options.root] | <code>Object</code> | | If set, `root` must be an inclusive ancestor of the return value (or else null is returned). This check _assumes_ that `root` is also an inclusive ancestor of the given `node` |
| [options.skipChildren] | <code>Boolean</code> | <code>false</code> | If set, ignore the children of `object` |
<a name="module_symbol-tree--SymbolTree+childrenToArray"></a>
#### symbolTree.childrenToArray(parent, [options]) ⇒ <code>Array.&lt;Object&gt;</code>
Append all children of the given object to an array.
`O(n)` where n is the amount of children of the given `parent`
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| parent | <code>Object</code> | | |
| [options] | <code>Object</code> | | |
| [options.array] | <code>Array.&lt;Object&gt;</code> | <code>[]</code> | |
| [options.filter] | <code>function</code> | | Function to test each object before it is added to the array. Invoked with arguments (object). Should return `true` if an object is to be included. |
| [options.thisArg] | <code>\*</code> | | Value to use as `this` when executing `filter`. |
<a name="module_symbol-tree--SymbolTree+ancestorsToArray"></a>
#### symbolTree.ancestorsToArray(object, [options]) ⇒ <code>Array.&lt;Object&gt;</code>
Append all inclusive ancestors of the given object to an array.
`O(n)` where n is the amount of ancestors of the given `object`
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| object | <code>Object</code> | | |
| [options] | <code>Object</code> | | |
| [options.array] | <code>Array.&lt;Object&gt;</code> | <code>[]</code> | |
| [options.filter] | <code>function</code> | | Function to test each object before it is added to the array. Invoked with arguments (object). Should return `true` if an object is to be included. |
| [options.thisArg] | <code>\*</code> | | Value to use as `this` when executing `filter`. |
<a name="module_symbol-tree--SymbolTree+treeToArray"></a>
#### symbolTree.treeToArray(root, [options]) ⇒ <code>Array.&lt;Object&gt;</code>
Append all descendants of the given object to an array (in tree order).
`O(n)` where n is the amount of objects in the sub-tree of the given `object`
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| root | <code>Object</code> | | |
| [options] | <code>Object</code> | | |
| [options.array] | <code>Array.&lt;Object&gt;</code> | <code>[]</code> | |
| [options.filter] | <code>function</code> | | Function to test each object before it is added to the array. Invoked with arguments (object). Should return `true` if an object is to be included. |
| [options.thisArg] | <code>\*</code> | | Value to use as `this` when executing `filter`. |
<a name="module_symbol-tree--SymbolTree+childrenIterator"></a>
#### symbolTree.childrenIterator(parent, [options]) ⇒ <code>Object</code>
Iterate over all children of the given object
`O(1)` for a single iteration
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
**Returns**: <code>Object</code> - An iterable iterator (ES6)
| Param | Type | Default |
| --- | --- | --- |
| parent | <code>Object</code> | |
| [options] | <code>Object</code> | |
| [options.reverse] | <code>Boolean</code> | <code>false</code> |
<a name="module_symbol-tree--SymbolTree+previousSiblingsIterator"></a>
#### symbolTree.previousSiblingsIterator(object) ⇒ <code>Object</code>
Iterate over all the previous siblings of the given object. (in reverse tree order)
`O(1)` for a single iteration
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
**Returns**: <code>Object</code> - An iterable iterator (ES6)
| Param | Type |
| --- | --- |
| object | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+nextSiblingsIterator"></a>
#### symbolTree.nextSiblingsIterator(object) ⇒ <code>Object</code>
Iterate over all the next siblings of the given object. (in tree order)
`O(1)` for a single iteration
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
**Returns**: <code>Object</code> - An iterable iterator (ES6)
| Param | Type |
| --- | --- |
| object | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+ancestorsIterator"></a>
#### symbolTree.ancestorsIterator(object) ⇒ <code>Object</code>
Iterate over all inclusive ancestors of the given object
`O(1)` for a single iteration
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
**Returns**: <code>Object</code> - An iterable iterator (ES6)
| Param | Type |
| --- | --- |
| object | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+treeIterator"></a>
#### symbolTree.treeIterator(root, options) ⇒ <code>Object</code>
Iterate over all descendants of the given object (in tree order).
where n is the amount of objects in the sub-tree of the given `root`:
`O(n)` (worst case for a single iterator)
`O(n)` (amortized, when completing the iterator)<br>
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
**Returns**: <code>Object</code> - An iterable iterator (ES6)
| Param | Type | Default |
| --- | --- | --- |
| root | <code>Object</code> | |
| options | <code>Object</code> | |
| [options.reverse] | <code>Boolean</code> | <code>false</code> |
<a name="module_symbol-tree--SymbolTree+index"></a>
#### symbolTree.index(child) ⇒ <code>Number</code>
Find the index of the given object (the number of preceding siblings).
`O(n)` where n is the amount of preceding siblings<br>
`O(1)` (amortized, if the tree is not modified)
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
**Returns**: <code>Number</code> - The number of preceding siblings, or -1 if the object has no parent
| Param | Type |
| --- | --- |
| child | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+childrenCount"></a>
#### symbolTree.childrenCount(parent) ⇒ <code>Number</code>
Calculate the number of children.
`O(n)` where n is the amount of children<br>
`O(1)` (amortized, if the tree is not modified)
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
| Param | Type |
| --- | --- |
| parent | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+compareTreePosition"></a>
#### symbolTree.compareTreePosition(left, right) ⇒ <code>Number</code>
Compare the position of an object relative to another object. A bit set is returned:
<ul>
<li>DISCONNECTED : 1</li>
<li>PRECEDING : 2</li>
<li>FOLLOWING : 4</li>
<li>CONTAINS : 8</li>
<li>CONTAINED_BY : 16</li>
</ul>
The semantics are the same as compareDocumentPosition in DOM, with the exception that
DISCONNECTED never occurs with any other bit.
where n and m are the amount of ancestors of `left` and `right`;
where o is the amount of children of the lowest common ancestor of `left` and `right`:
`O(n + m + o)` (worst case)
`O(n + m) (amortized, if the tree is not modified)
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
| Param | Type |
| --- | --- |
| left | <code>Object</code> |
| right | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+remove"></a>
#### symbolTree.remove(removeObject) ⇒ <code>Object</code>
Remove the object from this tree.
Has no effect if already removed.
`O(1)`
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
**Returns**: <code>Object</code> - removeObject
| Param | Type |
| --- | --- |
| removeObject | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+insertBefore"></a>
#### symbolTree.insertBefore(referenceObject, newObject) ⇒ <code>Object</code>
Insert the given object before the reference object.
`newObject` is now the previous sibling of `referenceObject`.
`O(1)`
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
**Returns**: <code>Object</code> - newObject
**Throws**:
- <code>Error</code> If the newObject is already present in this SymbolTree
| Param | Type |
| --- | --- |
| referenceObject | <code>Object</code> |
| newObject | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+insertAfter"></a>
#### symbolTree.insertAfter(referenceObject, newObject) ⇒ <code>Object</code>
Insert the given object after the reference object.
`newObject` is now the next sibling of `referenceObject`.
`O(1)`
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
**Returns**: <code>Object</code> - newObject
**Throws**:
- <code>Error</code> If the newObject is already present in this SymbolTree
| Param | Type |
| --- | --- |
| referenceObject | <code>Object</code> |
| newObject | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+prependChild"></a>
#### symbolTree.prependChild(referenceObject, newObject) ⇒ <code>Object</code>
Insert the given object as the first child of the given reference object.
`newObject` is now the first child of `referenceObject`.
`O(1)`
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
**Returns**: <code>Object</code> - newObject
**Throws**:
- <code>Error</code> If the newObject is already present in this SymbolTree
| Param | Type |
| --- | --- |
| referenceObject | <code>Object</code> |
| newObject | <code>Object</code> |
<a name="module_symbol-tree--SymbolTree+appendChild"></a>
#### symbolTree.appendChild(referenceObject, newObject) ⇒ <code>Object</code>
Insert the given object as the last child of the given reference object.
`newObject` is now the last child of `referenceObject`.
`O(1)`
**Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code>
**Returns**: <code>Object</code> - newObject
**Throws**:
- <code>Error</code> If the newObject is already present in this SymbolTree
| Param | Type |
| --- | --- |
| referenceObject | <code>Object</code> |
| newObject | <code>Object</code> |