Abstract data type library using ES5 classes
npm install fadtFunctional Abstract Data-types



This is a simple library for definining immutable data-only classes, no
methods allowed. It also provides a "copy" method to create a modified copy of
an instance with the provided changes applied.
``javascript
const createDataType = require('fadt');
const isUndefined = require('lodash.isundefined');
const MyBaseDataType = createDataType(function (params) {
if (!isUndefinedl(params.fooCount)) throw new TypeError('"fooCount" is required');
this.fooCount = params.fooCount;
this.isBar = params.isBar || false;
this.bazDescription = params.bazDescription || 'This is some serious baz!';
});
const MyChildDataType = createDataType(function (params) {
if (!isUndefined(params.subObject)) throw new TypeError('"subObject" is required');
this.subObject = params.subObject;
this.children = params.children || [];
this.bazDescription = 'We only using the finest, artisinal baz'
}, MyBaseDataType);
`
try {
const myData = new MyBaseDataType({
fooCount: 1,
isBar: true,
bazDescription: 'I am baz!'
}); console.log(
isBar(${myData.isBar}), ${myData.fooCount}); // bar(true), 1 const myNextData = myData.next({ isBar: false });
console.log(
bar(${myNextData.isBar}), ${myNextData.fooCount}); // bar(false), 1
} catch (e) {
console.error(Oh no! ${e.message});
}
`API Reference
ADT
* ADT
* [~createDataType(ctr, [ParentClass])](#module_ADT..createDataType) ⇒ function
* ~Constructor : function
$3
Generate Abstract Data Type constructorKind: inner method of ADT
Returns: function - Constructor
| Param | Type | Description |
| --- | --- | --- |
| ctr | Constructor | constructor function for validating/setting given params |
| [ParentClass] | function | constructor for parent class to inherit from |
$3
Kind: inner typedef of ADT
Throws:- TypeError error thrown for any type validation
| Param | Type | Description |
| --- | --- | --- |
| params | object | key/value parameters for instance consruction |
FAQ
$3
The astute reader will indeed notice that this library is using ES5 class
syntax. The reason for this is that the base constructor needs to fire last,
after all it's child classes have initialized in order to properly freeze the
instance. ES2015 classes require that the
super method be invoked before any
other code in a constructor`.