An isomorphic JavaScript class for building composite structures. Suitable for use as a super class or mixin.
npm install composite-class





An isomorphic, load-anywhere JavaScript class for building composite structures. Suitable for use as a super class or mixin.
The Composite class implements the composite design pattern, useful for building and traversing tree structures. For example, build a composite structure representing the French government:
``js
const Composite = require('composite-class')
class Person extends Composite {
constructor (name, role) {
super()
this.name = name
this.role = role
}
toString () {
return ${this.name} [${this.role}]
}
}
const government = new Person('Gouvernement de la République française', 'Government')
const headOfState = new Person('Emmanuel Macron', 'Head of State')
const primeMinister = new Person('Édouard Philippe', 'Prime Minister')
const ministerArmedForces = new Person('Florence Parly', 'Minister of the Armed Forces')
const ministerEconomy = new Person('Bruno Le Maire', 'Minister of Finance and the Economy')
government.add(headOfState)
headOfState.add(primeMinister)
primeMinister.add(ministerArmedForces)
primeMinister.add(ministerEconomy)
console.log(government.tree())
`
Output.
``
- Gouvernement de la République française [Government]
- Emmanuel Macron [Head of State]
- Édouard Philippe [Prime Minister]
- Florence Parly [Minister of the Armed Forces]
- Bruno Le Maire [Minister of Finance and the Economy]
The Composite class implements an iterable interface, therefore can be iterated using standard JavaScript methods.
`js`
for (const person of government) {
console.log('Processing:', person.name)
}
Output.
``
Processing: Gouvernement de la République française
Processing: Emmanuel Macron
Processing: Édouard Philippe
Processing: Florence Parly
Processing: Bruno Le Maire
Example
`js`
const Composite = require('composite-class')
* composite-class
* Composite ⏏
* _instance_
* .children : Array
* .parent : Composite
* .add(child) ⇒ Composite
* .append(child) ⇒ Composite
* .prepend(child) ⇒ Composite
* .remove(child) ⇒ Composite
* .level() ⇒ number
* .getDescendentCount() ⇒ number
* .tree() ⇒ string
* .root() ⇒ Composite
* .Symbol.iterator()
* .inspect()
* .parents() ⇒ Array.<Composite>
* _static_
* .mixInto(target)
#### composite.children : Array
Children
Kind: instance property of Composite
#### composite.parent : Composite
Parent
Kind: instance property of Composite
#### composite.add(child) ⇒ Composite
Add a child
Kind: instance method of Composite
| Param | Type | Description |
| --- | --- | --- |
| child | Composite | the child node to add |
#### composite.append(child) ⇒ Composite
Kind: instance method of Composite
| Param | Type | Description |
| --- | --- | --- |
| child | Composite | the child node to append |
#### composite.prepend(child) ⇒ Composite
Kind: instance method of Composite
| Param | Type | Description |
| --- | --- | --- |
| child | Composite | the child node to prepend |
#### composite.remove(child) ⇒ Composite
Kind: instance method of Composite
| Param | Type | Description |
| --- | --- | --- |
| child | Composite | the child node to remove |
#### composite.level() ⇒ number
depth level in the tree, 0 being root.
Kind: instance method of Composite
#### composite.getDescendentCount() ⇒ number
Kind: instance method of Composite
#### composite.tree() ⇒ string
prints a tree using the .toString() representation of each node in the tree
Kind: instance method of Composite
#### composite.root() ⇒ Composite
Returns the root instance of this tree.
Kind: instance method of Composite
#### composite.Symbol.iterator()
default iteration strategy
Kind: instance method of Composite
#### composite.inspect()
Used by node's util.inspect.
Kind: instance method of Composite
#### composite.parents() ⇒ Array.<Composite>
Returns an array of ancestors
Kind: instance method of Composite
#### Composite.mixInto(target)
Kind: static method of Composite
| Param | Type | Description |
| --- | --- | --- |
| target | object | The target class (or constructor function) to receive the state machine behaviour. |
This library is compatible with Node.js, the Web and any style of module loader. It can be loaded anywhere, natively without transpilation.
Node.js:
`js`
const Composite = require('composite-class')
Within Node.js with ECMAScript Module support enabled:
`js`
import Composite from 'composite-class'
Within an modern browser ECMAScript Module:
`js`
import Composite from './node_modules/composite-class/index.mjs'
Old browser (adds window.Composite):
`html``
*
© 2016-24 Lloyd Brookes \<75pound@gmail.com\>.
Test suite by test-runner. Documented by jsdoc-to-markdown.