Mono-repository for thi.ng TypeScript/ES6 projects, a wide collection of largely data transformation oriented packages and building blocks for:
- functional programming (composition, memoization, transducers, multi-methods)
- stream based, reactive programming, dataflow graphs / pipelines
- data structures & data transformations for wide range of use cases
- data driven UI components, event & side effect handling
- immutable data handling
- geometry generation, processing & visualization
- vector & matrix implementations with optional support for strided layouts
- low-level tooling for binary data, shared memory / WASM / WebGL interop
- etc. (see package overview below)
...all with a keen eye on simplicity, re-use & minimalism without sacrificing flexibility.
This project is NOT a framework, provides no turn-key, one-size-fits-all approach and instead encourages a mix & match philosophy for various key aspects of application design (in & outside the browser). Most customization points only expect certain interfaces rather than concrete implementations.
Most packages:
- have detailed, individual README files w/ small usage examples
- are versioned independently
- distributed in ES6 syntax and multiple format (ESM, CommonJS, UMD) with 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 (40+) of standalone examples (different complexities, often combining functionality from several packages) in the examples directory.
-
"Of umbrellas, transducers, reactive streams & mushrooms" (ongoing series):
Several new packages are being developed in parallel on various feature branches, which will be merged back into develop
and master
once ready. Currently, the most noteworthy of those can be found the feature/webgl
branch, which is a few hundred commits ahead of master:
Project | Version | Changelog | Description |
---|---|---|---|
@thi.ng/api |
changelog | Common types, decorators, mixins | |
@thi.ng/bench |
changelog | Basic benchmarking helpers | |
@thi.ng/checks |
changelog | Type & value checks | |
@thi.ng/compare |
changelog | Comparator | |
@thi.ng/compose |
changelog | Functional composition helpers | |
@thi.ng/defmulti |
changelog | Dynamic multiple dispatch | |
@thi.ng/dsp |
changelog | DSP utils, oscillators | |
@thi.ng/equiv |
changelog | Deep value equivalence checking | |
@thi.ng/errors |
changelog | Custom error types | |
@thi.ng/math |
changelog | Assorted common math functions & utilities | |
@thi.ng/memoize |
changelog | Function memoization w/ customizable caching | |
@thi.ng/paths |
changelog | Immutable nested object accessors | |
@thi.ng/random |
changelog | Seedable PRNG implementations w/ unified API | |
@thi.ng/strings |
changelog | Higher-order string formatting utils |
Project | Version | Changelog | Description |
---|---|---|---|
@thi.ng/csp |
changelog | Channel based async ops | |
@thi.ng/fsm |
changelog | FSM / parser primitives | |
@thi.ng/iterators |
changelog | ES6 generators / iterators | |
@thi.ng/sax |
changelog | SAX-like XML parser / transducer | |
@thi.ng/transducers |
changelog | Composable data transformations | |
@thi.ng/transducers-binary |
changelog | Binary data related transducers | |
@thi.ng/transducers-fsm |
changelog | Finite state transducer | |
@thi.ng/transducers-hdom |
changelog | Transducer based hdom UI updates | |
@thi.ng/transducers-stats |
changelog | Technical / statistical analysis |
Project | Version | Changelog | Description |
---|---|---|---|
@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-log-file |
changelog | Log-file output handler | |
@thi.ng/rstream-query |
changelog | Triple store & query engine |
Project | Version | Changelog | Description |
---|---|---|---|
@thi.ng/adjacency |
changelog | Adjacency matrices & graph algorithms | |
@thi.ng/arrays |
changelog | Array utilities | |
@thi.ng/associative |
changelog | Alt Set & Map implementations | |
@thi.ng/atom |
changelog | Immutable value wrappers, views, history | |
@thi.ng/bitfield |
changelog | 1D/2D bit field implementations | |
@thi.ng/cache |
changelog | In-memory caches / strategies | |
@thi.ng/dcons |
changelog | Doubly-linked list | |
@thi.ng/diff |
changelog | Array & object diffing | |
@thi.ng/dgraph |
changelog | Dependency graph | |
@thi.ng/heaps |
changelog | Binary & d-ary heap impls | |
@thi.ng/intervals |
changelog | Open/closed intervals, queries, set ops | |
@thi.ng/quad-edge |
changelog | Quad-edge, dual-graph data structure | |
@thi.ng/resolve-map |
changelog | DAG computations & value resolution | |
@thi.ng/sparse |
changelog | Sparse matrix & vector impls |
Project | Version | Changelog | Description |
---|---|---|---|
@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/hdom-mock |
changelog | hdom mock implementation (testing / prototyping) | |
@thi.ng/hiccup |
changelog | S-expression based HTML/XML serialization | |
@thi.ng/hiccup-carbon-icons |
changelog | IBM Carbon icons in hiccup format | |
@thi.ng/hiccup-css |
changelog | CSS from nested JS data structures | |
@thi.ng/hiccup-markdown |
changelog | Hiccup-to-Markdown serialization | |
@thi.ng/hiccup-svg |
changelog | hiccup based SVG vocab | |
@thi.ng/interceptors |
changelog | Composable event handlers & processor | |
@thi.ng/router |
changelog | Customizable browser & non-browser router |
Project | Version | Changelog | Description |
---|---|---|---|
@thi.ng/color |
changelog | Color | |
@thi.ng/dot |
changelog | Graphviz DOM & export | |
@thi.ng/geom |
changelog | 2D only geometry types & ops | |
@thi.ng/geom-accel |
changelog | Spatial indexing data structures | |
@thi.ng/geom-api |
changelog | Shared types & interfaces | |
@thi.ng/geom-arc |
changelog | 2D elliptic arc utils | |
@thi.ng/geom-clip |
changelog | 2D convex line/shape clipping | |
@thi.ng/geom-closest-point |
changelog | Closest point helpers | |
@thi.ng/geom-hull |
changelog | 2D convex hull (Graham scan) | |
@thi.ng/geom-isec |
changelog | Point & shape intersection tests | |
@thi.ng/geom-isoline |
changelog | 2D contour line extraction | |
@thi.ng/geom-poly-utils |
changelog | 2D polygon helpers | |
@thi.ng/geom-resample |
changelog | nD polyline / curve resampling | |
@thi.ng/geom-splines |
changelog | nD cubic / quadratic spline ops | |
@thi.ng/geom-subdiv-curve |
changelog | nD iterative subdivision curves | |
@thi.ng/geom-tessellate |
changelog | nD convex polygon tessellators | |
@thi.ng/geom-voronoi |
changelog | 2D iterative delaunay/voronoi | |
@thi.ng/iges |
changelog | IGES format geometry serialization | |
@thi.ng/lsys |
changelog | Extensible L-System architecture | |
@thi.ng/matrices |
changelog | Matrix operations | |
@thi.ng/poisson |
changelog | nD Poisson disk sampling | |
@thi.ng/vectors |
changelog | Fixed & arbitrary-length vector ops |
Project | Version | Changelog | Description |
---|---|---|---|
@thi.ng/bencode |
changelog | Bencode binary format encoding | |
@thi.ng/binary |
changelog | Assorted binary / bitwise ops, utilities | |
@thi.ng/bitstream |
changelog | Bitwise input / output streams | |
@thi.ng/dlogic |
changelog | Digital logic ops / constructs | |
@thi.ng/malloc |
changelog | Raw & typed array memory pool & allocator | |
@thi.ng/morton |
changelog | Z-order-curve / Morton coding | |
@thi.ng/range-coder |
changelog | Binary data Range encoder / decoder | |
@thi.ng/rle-pack |
changelog | Run-length encoding data compression | |
@thi.ng/unionstruct |
changelog | Wrapper for C-like structs / unions | |
@thi.ng/vector-pools |
changelog | data structures for memory mapped vectors |
Project | Version | Changelog | Description |
---|---|---|---|
@thi.ng/pointfree |
changelog | Stack-based DSL & functional composition | |
@thi.ng/pointfree-lang |
changelog | Forth-like syntax layer for @thi.ng/pointfree |
git clone https://github.com/thi-ng/umbrella.git
cd umbrella
yarn install
yarn build
Once the entire mono-repo has been built, individual packages can be built like so:
lerna run build --scope @thi.ng/transducers
Please see the example build instructions in the wiki for further details.
(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
© 2018 Karsten Schmidt // Apache Software License 2.0