Mono-repository for thi.ng TypeScript/ES6 projects, a collection of largely data transformation oriented packages and building blocks for functional programming, reactive applications, dataflow graphs / pipelines, components (not just UI related), all with a keen eye on simplicity & minimalism without sacrificing flexibility.
This project is NOT a framework, provides no one-size-fits-all approach and instead encourages a mix & match philosophy for various key aspects of (web) application design. Most customization points only expect certain interfaces rather than concrete implementations.
All / most packages:
- have detailed, individual README files w/ small usage examples
- are versioned independently
- distributed in ES6 syntax (as CommonJS modules) with doc comments (incl. example code snippets), bundled TypeScript typings & changelogs
- highly modular with largely only a few closely related functions or single function / class per file to help w/ tree shaking
- provide re-exports of all their publics for full library imports
- have either none or only @thi.ng internal runtime dependencies
- have been used in production
- declare public interfaces, enums & types in an
src/api.ts
file (larger packages only) - auto-generated online documentation at docs.thi.ng
- licensed under Apache Software License 2.0
There's a steadily growing number (30+) of standalone examples (different difficulties, many combining functionality from several packages) in the examples directory.
Projects | Version | Changelog | Description |
---|---|---|---|
@thi.ng/api |
changelog | Common types, decorators, mixins | |
@thi.ng/associative |
changelog | Alt Set & Map implementations | |
@thi.ng/atom |
changelog | Immutable value wrappers, views, history | |
@thi.ng/bench |
changelog | Basic benchmarking helpers | |
@thi.ng/binary |
changelog | Assorted binary / bitwise ops, utilities | |
@thi.ng/bitstream |
changelog | Bitwise input / output streams | |
@thi.ng/cache |
changelog | In-memory caches / strategies | |
@thi.ng/checks |
changelog | Type & value checks | |
@thi.ng/compare |
changelog | Comparator | |
@thi.ng/csp |
changelog | Channel based async ops | |
@thi.ng/dcons |
changelog | Doubly-linked list | |
@thi.ng/defmulti |
changelog | Dynamic multiple dispatch | |
@thi.ng/dgraph |
changelog | Dependency graph | |
@thi.ng/diff |
changelog | Array & object diffing | |
@thi.ng/dlogic |
changelog | Digital logic ops / constructs | |
@thi.ng/dot |
changelog | Graphviz DOM & export | |
@thi.ng/dsp |
changelog | DSP utils, oscillators | |
@thi.ng/equiv |
changelog | Deep value equivalence checking | |
@thi.ng/errors |
changelog | Custom error types | |
@thi.ng/geom |
changelog | 2D geometry types & operations | |
@thi.ng/geom-accel |
changelog | Spatial indexing data structures | |
@thi.ng/hdom |
changelog | Hiccup based VDOM & diffing | |
@thi.ng/hdom-canvas |
changelog | hdom based declarative canvas drawing | |
@thi.ng/hdom-components |
changelog | hdom based UI components | |
@thi.ng/heaps |
changelog | Binary & d-ary heap impls | |
@thi.ng/hiccup |
changelog | S-expression based HTML/XML serialization | |
@thi.ng/hiccup-css |
changelog | CSS from nested JS data structures | |
@thi.ng/hiccup-svg |
changelog | hiccup based SVG vocab | |
@thi.ng/iges |
changelog | IGES format geometry serialization | |
@thi.ng/interceptors |
changelog | Composable event handlers & processor | |
@thi.ng/iterators |
changelog | ES6 generators / iterators | |
@thi.ng/malloc |
changelog | Raw & typed array memory pool & allocator | |
@thi.ng/math |
changelog | Assorted common math functions & utilities | |
@thi.ng/memoize |
changelog | Function memoization w/ customizable caching | |
@thi.ng/morton |
changelog | Z-order-curve / Morton coding | |
@thi.ng/paths |
changelog | Immutable nested object accessors | |
@thi.ng/pointfree |
changelog | stack-based DSL & functional composition | |
@thi.ng/pointfree-lang |
changelog | Forth-like syntax layer for @thi.ng/pointfree | |
@thi.ng/range-coder |
changelog | Binary data Range encoder / decoder | |
@thi.ng/rle-pack |
changelog | Run-length encoding data compression | |
@thi.ng/resolve-map |
changelog | DAG computations & value resolution | |
@thi.ng/router |
changelog | Customizable browser & non-browser router | |
@thi.ng/rstream |
changelog | Push-based, reactive event stream primitves | |
@thi.ng/rstream-csp |
changelog | Adapter bridge CSP -> rstream | |
@thi.ng/rstream-dot |
changelog | Graphviz visualization of rstream topologies | |
@thi.ng/rstream-gestures |
changelog | Mouse & touch event stream abstraction | |
@thi.ng/rstream-graph |
changelog | Declarative dataflow graph construction | |
@thi.ng/rstream-log |
changelog | Hierarchical structured data logging | |
@thi.ng/rstream-query |
changelog | Triple store & query engine | |
@thi.ng/sax |
changelog | SAX-like XML parser / transducer | |
@thi.ng/strings |
changelog | Higher-order string formatting utils | |
@thi.ng/transducers |
changelog | Composable data transformations | |
@thi.ng/transducers-fsm |
changelog | Finite State Machine | |
@thi.ng/transducers-hdom |
changelog | Transducer based hdom UI updates | |
@thi.ng/transducers-stats |
changelog | Technical / statistical analysis | |
@thi.ng/unionstruct |
changelog | Wrapper for C-like structs / unions | |
@thi.ng/vectors |
changelog | Memory-mapped vector & matrix operations |
git clone https://github.com/thi-ng/umbrella.git
cd umbrella
yarn build
The below yarn examples
command assumes you have the
parcel bundler &
terser minifier globally
installed, if not then please first run:
yarn global add parcel-bundler terser
# build all examples (from project root)
yarn examples
# build a single example (production mode)
scripts/build-examples example-name
# in example dir
yarn build
(TODO most but not all packages have tests)
yarn test
# or individually
lerna run test --scope @thi.ng/rstream
The resulting reports will be saved under /packages/*/coverage/lcov-report/
.
yarn cover
Autogenerated documentation (using
TypeDoc) will be saved under
/packages/*/doc/
and is also available at docs.thi.ng.
yarn doc