0.9.17-alpha • Published 4 years ago
aelastics-types v0.9.17-alpha
AelasticS Types
Types dynamically created at run time - 0.x.x-Alpha version
- Arbitrarily data structures - supported both tree and graph recursive/cyclic structures
- Data validation and serialization/deserialization
- Map-reduce processing and general traversals
Highlights
Types and Type schemas
Simple types (number, string, boolean, literal and user defined semantic domains/types)
Complex types (object types, subtypes, array, map, date type, union, tagged union, intersection)
- Special types (optional, object reference, link)
- Recursive/cyclic types
- Type schemas as containers of type definitions to manage complexity
- Special meta-type operators to deduce Typescript type declarations used for typechecking by compiler
- Intellisence in code editors (similar to React prop-types library)
Validation
- Lot of predefined chainable operators for constraining string and number values
- User supplied validate functions for specifying value constrains on arbitrarily complex types
- User defined error message specifications for violated constrains
- Extensive error reports collected during data validations
Serialization/Deserialization
- Graph cyclic data structures are transformed to/from Data Transfer Objects (JSON tree data structures)
- Inheritance (subtyping) supported
- Graph cyclic data structures are supported as an out-of-the-box feature
- No decorators/annotations are needed
- Support for types not supported by JSON such as maps, unions, dates, object references, etc.
Structure Traversal/Processing
- General traversal of graph cyclic structures in a depth-first or bread-first manner
- Map and Reduce processing of graph cyclic structures, a generalization of the well-known Map/Reduce processing of arrays and lists
- Both type and instance level traversals/processing are supported
Example
import * as t from "aelastics-types";
export const AgeType = t.number.derive('Human age').int8.positive.inRange(1, 120);
export const WorkerType = t.object({
name: t.string,
age: t.optional(AgeType),
sex: t.unionOf([t.literal('male'), t.literal("female")],"sexType"),
birthPlace: t.object({name: t.string, state: t.string}),
children: t.listOf(t.object({name: t.string}, "Child"))
}, 'WorkerType');
0.9.17-alpha
4 years ago
0.9.16-alpha
4 years ago
0.9.14-alpha
4 years ago
0.9.15-alpha
4 years ago
0.9.13-alpha
4 years ago
0.9.12-alpha
4 years ago
0.9.11-alpha
4 years ago
0.9.10-alpha
4 years ago
0.9.9-alpha
4 years ago
0.9.6-alpha
4 years ago
0.9.5-alpha
4 years ago
0.9.3-alpha
4 years ago
0.9.4-alpha
4 years ago
0.9.1-alpha
4 years ago
0.9.2-alpha
4 years ago
0.8.0
4 years ago
0.7.2
4 years ago
0.7.1
4 years ago
0.7.3
4 years ago
0.7.0
4 years ago
0.6.5
4 years ago
0.6.4
4 years ago
0.6.1
4 years ago
0.4.1
4 years ago
0.4.2
4 years ago
0.4.0
4 years ago
0.3.5
4 years ago
0.3.4
4 years ago
0.3.3
4 years ago
0.3.2
4 years ago
0.3.1
4 years ago
0.3.0
4 years ago
0.2.0
4 years ago
0.1.1
4 years ago
0.1.0
4 years ago