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):
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