0.9.17-alpha • Published 4 years ago

aelastics-types v0.9.17-alpha

Weekly downloads
3
License
MIT
Repository
github
Last release
4 years ago

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