# v1.0.0 Change Log

## Goals

This release aims to standardize library's property creation methodology.

* [x] Standardize on StateType use instead of mixing with explicit property creation parameters
* [x] Allow property class specType to be specialized
* [x] Add Collection support for specType
* [x] Add Collection endpoint support for stubbed data (PojoEndpointProperty)
* [x] Collection todo example
* [x] Remove stateSpec references (rely on type mechanism)
* [x] Remove KeyedProperty, StateTypes, and createXyzPropertyType() functions
* [x] Create IndexedApi class to mirror KeyedApi
* [x] Basic todo example
* [x] Tutorial based on todo example
* [x] Reduce memory footprint of ShadowImpl
* [ ] Unit tests: AutoShader, Property, PropertyFactoryShader, Shader, StateType, Store


## Documentation

* Overview document
* Tutorial under development


## Changes


### Libraries

* (uuid)[https://github.com/kelektiv/node-uuid]


### ArrayProperty

* `createClass(shadowType={}, specCallback, initialState=[])` signature changed


### IndexedProperty

* Constructor takes single argument of `StateType`
* `createClass(shadowType={}, specCallback, initialState=[])` signature changed


### IndexedShadowImpl

* Fixed `remove()` bug where state improperly set
* Fix f`ilter()` bug where undefined variable `v` was being used instead of this[i]
* Use `ShadowImpl.switchNames()` while remapping


### MapProperty

* `createClass(shadowType={}, specCallback, initialState=[])` signature changed


### ObjectProperty

* Constructor takes single argument of `StateType`
* Use `ObjectShadowImpl`
* `createClass(shadowType={}, specCallback, initialState=[])` signature changed


### Property

* Constructor takes single argument of `StateType`. If one not passed as parameter then default located in the property's prototype chain.


### PropertyFactoryShader

* Constructor signature: `constructor(stateType, parent)`
* Replaed s`etElementClass()` with `setElementType(stateType)`
* `addStateType()` -> `addProperty(name, stateType)`
* `addPropertyClass()` removed


### Shader

* `addStateType()` -> `addProperty(name, stateType)`
* `addPropertyClass()` removed


### StateType

* `computeInitialState()` now non-static and no arguments
* `shadowClassForProperty(defaultClass=Shadow)` signature changed and no longer static
* `initialStateWithDefaults(state)` signature changed and no longer static
* `from(prop)` static method to walk the prototype hieararchy looking for a `StateType` instance on the constructor: stateSpec or type properties in that order


### ShadowImpl

* `switchNames()` added to move `_nextName` to `_name` to be used during property remapping


### createPropertyClass()

* Signature changed: `createPropertyClass(shadowType, initialState, specCallback, PropertyClass, BaseShadowClass=Shadow)`


### Examples

* Todo basic example
* Todo with Collections
* Tutorial step examples


