@thi.ng/geom-tessellate
@thi.ng/geom-tessellate
npm i @thi.ng/geom-tessellate
@thi.ng/geom-tessellate

@thi.ng/geom-tessellate

β›± Broadly scoped ecosystem & mono-repository of 179 TypeScript projects for general purpose, functional, data driven development

by thi-ng

2.1.52 (see all)License:Apache-2.0TypeScript:Built-In
npm i @thi.ng/geom-tessellate
Readme

thi.ng/umbrella

GitHub Workflow Status Code Climate Become a patron Mastodon Follow

About

"A collection of functional programming libraries that can be composed together. Unlike a framework, thi.ng is a suite of instruments and you (the user) must be the composer of. Geared towards versatility, not any specific type of music." β€” @loganpowell via Twitter

Please visit thi.ng for additional information & topic based search of packages relevant to your use cases...

This project is NOT a framework! This mono-repository is home to currently 179 individual TypeScript/ES6 projects (and ~120 example projects), a wide and jointly developed collection of packages, tools and general purpose building blocks for (non-exhaustive list of topics, see package overview below):

  • Functional programming (ES6 iterators/generators, composition, memoization, transducers, multi-methods)
  • Reactive programming, stream / transducer based dataflow graphs / pipelines / DOM
  • Data structures & data transformations for wide range of use cases (maps, sets, heaps, queues, graphs etc.)
  • WebAssembly bridge APIs & data structure bindings code generators for multiple target languages
  • PEG-style functional parser combinators w/ (optional) custom grammar definition language
  • 2D geometry generation, shape primitives, math, manipulation, intersections, conversions & visualizations
  • Canvas abstractions, pixel buffers & SVG serialization/conversion
  • Vector, matrix (dense & sparse), ECS implementations with optional support for strided memory layouts
  • Semi-declarative WebGL 1/2 abstraction layer
  • DSL for shader functions defined in TypeScript and cross-compilation to GLSL, JS, VEX etc.
  • Value-based equivalence (vs. native object identity)
  • DSP building blocks: oscillators, noise generators, filters, 1D FFT/IFFT, muxers, rate converters
  • Immutable data handling, state containers, transacted state updates, Undo-Redo history
  • Data driven UI component toolkits (DOM-based, canvas-based, immediate-mode, multiple approaches...)
  • Multi-format, multi-channel pixel buffers (int & float based), conversions, dithering, Porter-Duff alpha-blending operators
  • Color space/format conversions, matrix based color manipulation, gradient generators, color palettes
  • Date-time abstraction, relative dates, iterators, formatters, math
  • WebWorker workflow abstractions
  • Forth-style pointfree DSL for functional composition and DSL development/extension
  • S-expression parser & runtime (interpreter) infrastructure for custom DSL creation
  • SIMD batch-processing of vector data
  • Pen-plotter (AxiDraw) toolchain & geometry conversions
  • Various interpolations, math helpers, automatic differentiation (Dual numbers)
  • etc.

Once more, 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). Customization points are provided wherever possible and usually only expect certain interfaces/type signatures rather than concrete implementations.

All packages:

  • are versioned independently
  • released via thi.ng/monopub
  • distributed as ESM modules (ES2020 syntax) with export maps, TypeScript typings & change logs
  • highly modular with largely only a single function / class (only closely related functions) per file to help w/ selective imports and tree shaking
  • provide re-exports of all their publics for full library imports
  • have either none or only @thi.ng internal runtime dependencies (w/ very few exceptions!)
  • declare public interfaces, enums & types in an api.ts file
  • have auto-generated online documentation at docs.thi.ng
  • licensed under Apache Software License 2.0

Getting started

The sheer number and varied nature & purpose of these packages makes it impossible to provide traditional "Getting started" tutorials. To compensate, this repo provides ~120 example projects, detailed readmes (at the very least for all the larger and/or more important packages) and hundreds of small usage examples/snippets in various docstrings.

If unsure about something, please reach out!

Project templates

You might find one of the following template repos an useful starting point:

  • tpl-umbrella-basic: Bare-bones template repo for browser-based projects
  • tpl-umbrella-fxhash: Project template repo for generative art projects on the fx(hash) platform
  • tpl-umbrella-zig: Minimal browser project template for hybrid TypeScript & Zig (WebAssembly) apps

Examples & Showcase

There's a steadily growing number (~120) of standalone examples of different complexities (often combining functionality from several packages) in the examples directory.

Example screenshots(small selection)

awesome.thi.ng

Due to other priorities still very much in its infancy & planning stage, but please help to document your own usage of these packages by contributing project information to the awesome.thi.ng repo, which will be used to build a showcase site... Thank you!

Generative art projects

Several generative art projects by Karsten Schmidt on fx(hash) have been created exclusively with libraries from this collection.

De/Frag series
QuasiflockC-SCAPEASCII-SCAPE

Blog posts

Videos

Community, contributing, getting help

Join the (still new) discussions here on Github, get in touch via Mastodon or use the issue tracker. If you'd like to contribute in other ways, please first read this document.

In general, we welcome contributions of all kinds (docs, examples, bug fixes, feature requests, financial contributions etc.). You can find a fairly detailed overview for contributors here: CONTRIBUTING.md.

Note: The default branch for this repo is develop and all PRs should be based on this branch. This too means, the README files on this branch might refer to yet-unreleased features or packages. Please use the main branch for viewing the most recently released version(s)!.

Wiki

So far the wiki has only been updated sporadically, but please be sure to check it out for project-wide glossary, information, cookbooks, useful snippets etc.

Projects

Latest updates

As of: 2023-03-22

StatusPackageVersionChangelog
@thi.ng/axidrawversionchangelog
@thi.ng/geomversionchangelog
@thi.ng/geom-axidrawversionchangelog
@thi.ng/transducersversionchangelog
@thi.ng/unitsversionchangelog

Fundamentals

ProjectVersionChangelogDescription
@thi.ng/argsversionchangelogDeclarative & functional CLI arg parsing & coercions
@thi.ng/apiversionchangelogCommon types, decorators, mixins
@thi.ng/benchversionchangelogBasic benchmarking helpers
@thi.ng/checksversionchangelogType & value checks
@thi.ng/compareversionchangelogComparators
@thi.ng/composeversionchangelogFunctional composition helpers
@thi.ng/dateversionchangelogDate/time iterators, formatters, rounding
@thi.ng/defmultiversionchangelogDynamic multiple dispatch
@thi.ng/distanceversionchangelogn-D distance metrics & K-nearest neighborhoods
@thi.ng/equivversionchangelogDeep value equivalence checking
@thi.ng/errorsversionchangelogCustom error types
@thi.ng/exposeversionchangelogConditional global variable exposition
@thi.ng/hexversionchangelogHex value formatters for U4-64 words
@thi.ng/loggerversionchangelogBasis infrastructure for arbitrary logging
@thi.ng/memoizeversionchangelogFunction memoization w/ customizable caching
@thi.ng/oqueryversionchangelogPattern based query engine for JS objects
@thi.ng/parseversionchangelogParser combinators & AST generator/transformer
@thi.ng/pathsversionchangelogImmutable nested object accessors
@thi.ng/stringsversionchangelogHigher-order string formatting utils
@thi.ng/systemversionchangelogMinimal life cycle container for stateful app components
@thi.ng/testamentversionchangelogMinimal test runner
@thi.ng/transcludeversionchangelogTemplate engine for text document generation
@thi.ng/unitsversionchangelogExtensible SI unit conversions

Maths

ProjectVersionChangelogDescription
@thi.ng/dual-algebraversionchangelogDual number algebra / automatic differentiation
@thi.ng/dspversionchangelogDSP utils, composable signal gens/processors
@thi.ng/fuzzyversionchangelogFuzzy logic primitives & rule inference engine
@thi.ng/intervalsversionchangelogOpen/closed intervals, queries, set ops
@thi.ng/mathversionchangelogAssorted common math functions & utilities
@thi.ng/matricesversionchangelogMatrix operations
@thi.ng/sparseversionchangelogSparse matrix & vector impls
@thi.ng/vectorsversionchangelogFixed & arbitrary-length vector ops

Randomness

ProjectVersionChangelogDescription
@thi.ng/colored-noiseversionchangelog1D colored noise generators
@thi.ng/ksuidversionchangelogK-sortable unique identifiers, binary & base-N encoded
@thi.ng/lowdiscversionchangelogn-D Low discrepancy sequence generators
@thi.ng/randomversionchangelogSeedable PRNG implementations, distributions & utilities
@thi.ng/random-fxhashversionchangelogPRNG impl & utilities for fxhash projects

File / file format / hardware support

ProjectVersionChangelogDescription
@thi.ng/axidrawversionchangelogMinimal, declarative AxiDraw plotter controller
@thi.ng/bencodeversionchangelogBencode binary format encoding
@thi.ng/csvversionchangelogCustomizable CSV parser/object mapper
@thi.ng/dotversionchangelogGraphviz DOM & export
@thi.ng/dsp-io-wavversionchangelogWAV file format exporter
@thi.ng/file-ioversionchangelogAssorted file I/O utils for NodeJS
@thi.ng/geom-io-objversionchangelogWavefront OBJ model parser
@thi.ng/hiccup-cssversionchangelogCSS from nested JS data structures
@thi.ng/hiccup-htmlversionchangelogType-checked HTML5 element wrappers for hiccup
@thi.ng/hiccup-markdownversionchangelogHiccup-to-Markdown serialization
@thi.ng/hiccup-svgversionchangeloghiccup based SVG vocab
@thi.ng/igesversionchangelogIGES format geometry serialization
@thi.ng/markdown-tableversionchangelogMarkdown table generator / formatter
@thi.ng/mimeversionchangelogFile extension to MIME type mappings
@thi.ng/pixel-io-geotiffversionchangelogGeoTIFF reader support for thi.ng/pixel
@thi.ng/pixel-io-netpbmversionchangelog1/8/16/24bit NetPBM image format reader/writer
@thi.ng/prefixesversionchangelogLinked Data, RDF & xmlns prefixes/URLs
@thi.ng/saxversionchangelogSAX-like XML parser / transducer
@thi.ng/tangleversionchangelogLiterate programming utilities

Iterator, stream & sequence processing

ProjectVersionChangelogDescription
@thi.ng/cspversionchangelogChannel based async ops
@thi.ng/fsmversionchangelogFSM / parser primitives
@thi.ng/grid-iteratorsversionchangelog2D grid iterator strategies
@thi.ng/iteratorsversionchangelogES6 generators / iterators
@thi.ng/seqversionchangelogLisp/Clojure-style sequence abstraction
@thi.ng/transducersversionchangelogComposable data transformations
@thi.ng/transducers-binaryversionchangelogBinary data related transducers
@thi.ng/transducers-fsmversionchangelogFinite state transducer
@thi.ng/transducers-hdomversionchangelogTransducer based hdom UI updates
@thi.ng/transducers-patchversionchangelogPatch-based, array & object editing
@thi.ng/transducers-statsversionchangelogTechnical / statistical analysis

Reactive programming

ProjectVersionChangelogDescription
@thi.ng/rstreamversionchangelogPush-based, reactive event stream primitves
@thi.ng/rstream-cspversionchangelogAdapter bridge CSP -> rstream
@thi.ng/rstream-dotversionchangelogGraphviz visualization of rstream topologies
@thi.ng/rstream-gesturesversionchangelogMouse & touch event stream abstraction
@thi.ng/rstream-graphversionchangelogDeclarative dataflow graph construction
@thi.ng/rstream-logversionchangelogHierarchical structured data logging
@thi.ng/rstream-log-fileversionchangelogLog-file output handler
@thi.ng/rstream-queryversionchangelogTriple store & query engine

Algorithms & data structures

ProjectVersionChangelogDescription
@thi.ng/adjacencyversionchangelogAdjacency matrices & graph algorithms
@thi.ng/arraysversionchangelogArray utilities
@thi.ng/associativeversionchangelogAlt Set & Map implementations
@thi.ng/atomversionchangelogImmutable value wrappers, views, history
@thi.ng/bitfieldversionchangelog1D/2D bit field implementations
@thi.ng/cacheversionchangelogIn-memory caches / strategies
@thi.ng/cellularversionchangelogHighly configurable 1D Cellular automata
@thi.ng/dconsversionchangelogDoubly-linked list
@thi.ng/diffversionchangelogArray & object diffing
@thi.ng/dgraphversionchangelogDependency graph
@thi.ng/ecsversionchangelogEntity-Component System
@thi.ng/egfversionchangelogExtensible Graph Format
@thi.ng/gpversionchangelogGenetic programming helpers / AST gen
@thi.ng/heapsversionchangelogBinary & d-ary heap impls
@thi.ng/idgenversionchangelogVersioned ID generation / free-list
@thi.ng/k-meansversionchangelogK-means clustering of n-D data
@thi.ng/rampversionchangelogParametric, interpolated lookup tables
@thi.ng/quad-edgeversionchangelogQuad-edge, dual-graph data structure
@thi.ng/resolve-mapversionchangelogDAG computations & value resolution
@thi.ng/vclockversionchangelogVector clock functions / comparators
@thi.ng/zipperversionchangelogImmutable tree editing / navigation

Frontend / UI

ProjectVersionChangelogDescription
@thi.ng/adapt-dpiversionchangelogHDPI canvas adaptation / styling util
@thi.ng/dl-assetversionchangelogAsset/canvas/file download helpers
@thi.ng/emojiversionchangelogBi-directional emoji lookup tables (names/chars)
@thi.ng/hdiffversionchangelogString diffing w/ hiccup output (includes CLI)
@thi.ng/hdomversionchangelogHiccup based VDOM & diffing
@thi.ng/hdom-canvasversionchangeloghdom adapter for hiccup-canvas
@thi.ng/hdom-componentsversionchangeloghdom based UI components
@thi.ng/hdom-mockversionchangeloghdom mock implementation (testing / prototyping)
@thi.ng/hiccupversionchangelogS-expression based HTML/XML serialization
@thi.ng/hiccup-canvasversionchangeloghiccup interpreter for canvas api
@thi.ng/hiccup-carbon-iconsversionchangelogIBM Carbon icons in hiccup format
@thi.ng/imguiversionchangelogImmediate mode GUI
@thi.ng/interceptorsversionchangelogComposable event handlers & processor
@thi.ng/rdomversionchangelogReactive, diff-less, async UI components
@thi.ng/rdom-canvasversionchangelogrdom component wrapper for thi.ng/hiccup-canvas
@thi.ng/rdom-componentsversionchangelogUnstyled, customizable component collection
@thi.ng/routerversionchangelogCustomizable browser & non-browser router
@thi.ng/text-canvasversionchangelogText-mode canvas, drawing, tables, charts
@thi.ng/text-formatversionchangelogColor text formatting w/ ANSI & HTML presets

Geometry, image & visualization

ProjectVersionChangelogDescription
@thi.ng/colorversionchangelogColor conversions, gradients
@thi.ng/color-palettesversionchangelogCollection of image-based color palettes
@thi.ng/dgraph-dotversionchangelogDependency graph -> Graphviz
@thi.ng/distance-transformversionchangelogImage based distance field generation
@thi.ng/fuzzy-vizversionchangelogVisualization, instrumentation for @thi.ng/fuzzy
@thi.ng/geomversionchangelog2D only geometry types & ops
@thi.ng/geom-accelversionchangelogSpatial indexing data structures
@thi.ng/geom-apiversionchangelogShared types & interfaces
@thi.ng/geom-axidrawversionchangelogShape conversions for AxiDraw pen plotter
@thi.ng/geom-arcversionchangelog2D elliptic arc utils
@thi.ng/geom-clip-lineversionchangelog2D line clipping
@thi.ng/geom-clip-polyversionchangelog2D convex polygon clipping
@thi.ng/geom-closest-pointversionchangelogClosest point helpers
@thi.ng/geom-fuzzversionchangelogFuzzy 2D shape drawing / filling
@thi.ng/geom-hullversionchangelog2D convex hull (Graham scan)
@thi.ng/geom-isecversionchangelogPoint & shape intersection tests
@thi.ng/geom-isolineversionchangelog2D contour line extraction
@thi.ng/geom-poly-utilsversionchangelog2D polygon helpers
@thi.ng/geom-resampleversionchangelognD polyline / curve resampling
@thi.ng/geom-sdfversionchangelog2D SDF creation, conversions, operators, utilities
@thi.ng/geom-splinesversionchangelognD cubic / quadratic spline ops
@thi.ng/geom-subdiv-curveversionchangelognD iterative subdivision curves
@thi.ng/geom-tessellateversionchangelognD convex polygon tessellators
@thi.ng/geom-trace-bitmapversionchangelogbitmap image to vector conversion
@thi.ng/geom-voronoiversionchangelog2D iterative delaunay/voronoi
@thi.ng/lsysversionchangelogExtensible L-System architecture
@thi.ng/pixelversionchangelogMulti-format pixel buffers
@thi.ng/pixel-ditherversionchangelogImage dithering w/ various algorithm presets
@thi.ng/poissonversionchangelognD Poisson disk sampling
@thi.ng/porter-duffversionchangelogAlpha blending / compositing ops
@thi.ng/rasterizeversionchangelogShape drawing, filling & rasterization
@thi.ng/scenegraphversionchangelogExtensible 2D/3D scenegraph
@thi.ng/simdversionchangelogWebAssembly SIMD vector batch processing
@thi.ng/vizversionchangelogDeclarative & functional data visualization toolkit

WebGL / GPGPU

ProjectVersionChangelogDescription
@thi.ng/shader-astversionchangelogAST DSL for x-platform shader code
@thi.ng/shader-ast-glslversionchangelogGLSL code generator
@thi.ng/shader-ast-jsversionchangelogJS code generator
@thi.ng/shader-ast-optimizeversionchangelogAST code optimization strategies
@thi.ng/shader-ast-stdlibversionchangelog100+ useful AST shader functions
@thi.ng/webglversionchangelogWebGL 1/2 / GPGPU facilities
@thi.ng/webgl-msdfversionchangelogMSDF font rendering
@thi.ng/webgl-shadertoyversionchangelogShadertoy-like WebGL setup

Low-level, binary, memory management, interop

ProjectVersionChangelogDescription
@thi.ng/base-nversionchangelogArbitrary base-n encoding/decoding with presets
@thi.ng/binaryversionchangelogAssorted binary / bitwise ops, utilities
@thi.ng/bitstreamversionchangelogBitwise input / output streams
@thi.ng/dlogicversionchangelogDigital logic ops / constructs
@thi.ng/leb128versionchangelogWASM based LEB128 varint encoder / decoder
@thi.ng/mallocversionchangelogRaw & typed array memory pool & allocator
@thi.ng/mortonversionchangelogZ-order-curve / Morton coding
@thi.ng/range-coderversionchangelogBinary data Range encoder / decoder
@thi.ng/rle-packversionchangelogRun-length encoding data compression
@thi.ng/soaversionchangelogMemory mapped data structures & serialization
@thi.ng/unionstructversionchangelogWrapper for C-like structs / unions
@thi.ng/vector-poolsversionchangelogData structures for memory mapped vectors
@thi.ng/wasm-apiversionchangelogModular, extensible JS/WebAssembly bridge API
@thi.ng/wasm-api-bindgenversionchangelogPolyglot bindings code generator for C/Zig/TS
@thi.ng/wasm-api-canvasversionchangelogWASM-side Canvas2D API bindings
@thi.ng/wasm-api-domversionchangelogWASM-side DOM manipulation
@thi.ng/wasm-api-scheduleversionchangelogWASM-side delayed code execution/scheduling

DSLs

ProjectVersionChangelogDescription
@thi.ng/pointfreeversionchangelogStack-based DSL & functional composition
@thi.ng/pointfree-langversionchangelogForth-like syntax layer for @thi.ng/pointfree
@thi.ng/sexprversionchangelogS-Expression parser & runtime infrastructure

Building

git clone https://github.com/thi-ng/umbrella.git
cd umbrella

yarn install
yarn build

Once the entire mono-repo has been fully built at least once before, individual packages can then be (re)built like so:

yarn workspace @thi.ng/transducers run build

# or

(cd packages/transducers && yarn build)

Building example projects

Please see the example build instructions in the wiki for further details.

Testing

(Most, but not all packages have tests)

Due to various build/config issues/complexities, we're now using our own minimal test runner @thi.ng/testament

yarn test

# or individually
yarn workspace @thi.ng/rstream run test

Documentation

Autogenerated documentation (using TypeDoc) will be saved under /packages/*/doc/ and is also available at docs.thi.ng.

yarn doc

Furthermore, an experimental tsdoc-based documentation repo provides an alternative markdown output including cross-references between all packages, but currently isn't frequently updated (only every few months):

https://github.com/thi-ng/umbrella-docs-temp

Acknowledgements

Maintaining a large monorepo like this requires a lot of infrastructure and I'm grateful for the tooling provided by the following projects to simplify those tasks:

License

Β© 2015 - 2023 Karsten Schmidt // Apache Software License 2.0

Contributors ✨

Thanks goes to these wonderful people (emoji key):

Karsten Schmidt
Karsten Schmidt

πŸ’» πŸ“– 🚧 πŸ’΅
Alberto
Alberto

πŸ’» πŸ’‘ πŸ› πŸ€” πŸ’΅
Arthur Carabott
Arthur Carabott

πŸ’» πŸ€” πŸ’‘ πŸ“ πŸ’΅
AndrΓ© Wachter
AndrΓ© Wachter

πŸ’» πŸ€” πŸ›
Gavin Cannizzaro
Gavin Cannizzaro

πŸ’» πŸ› πŸ€”
Logan Powell
Logan Powell

πŸ“– πŸ› πŸ€” πŸ’΅
Marcin Ignac
Marcin Ignac

πŸ›
arcticnoah
arcticnoah

πŸ’»
allforabit
allforabit

πŸ› πŸ’» πŸ€” πŸ’΅
Yifan Wu
Yifan Wu

πŸ› πŸ“–
stwind
stwind

πŸ’» πŸ›
evilive
evilive

πŸ’»
Bnaya Peretz
Bnaya Peretz

πŸ’» πŸ› πŸ€”
oljeger
oljeger

πŸ›
Nik Shevchenko
Nik Shevchenko

πŸ› πŸ’»
Matei Adriel
Matei Adriel

πŸ’» πŸ› πŸ€”
Pierre Grimaud
Pierre Grimaud

πŸ“–
Matt Huebert
Matt Huebert

πŸ’΅
Raphael Saunier
Raphael Saunier

πŸ’΅
Eric Ihli
Eric Ihli

πŸ’΅
David Pham
David Pham

πŸ’΅
TBD
TBD

πŸ› πŸ€”
Pedro Henriques dos Santos Teixeira
Pedro Henriques dos Santos Teixeira

πŸ’΅
Jamie Owen
Jamie Owen

πŸ’» πŸ›
Robert Kesteson
Robert Kesteson

πŸ› πŸ’»
Chancy Kennedy
Chancy Kennedy

πŸ’΅
Jarred Sumner
Jarred Sumner

πŸ›
Jamie Slome
Jamie Slome

πŸ› πŸ›‘οΈ
d3v53c
d3v53c

πŸ› πŸ›‘οΈ
Jannis Pohlmann
Jannis Pohlmann

πŸ›
Shakthi Prasad G S
Shakthi Prasad G S

πŸ› πŸ’»
Robin Gower
Robin Gower

πŸ›
Michael Latzoni
Michael Latzoni

πŸ›
Z Yin
Z Yin

πŸ›
Damien Seguin
Damien Seguin

πŸ› πŸ’»
Rui Gil
Rui Gil

πŸ›
Ja|nz
Ja|nz

πŸ’» πŸš‡ 🚧
Tyler Freeman
Tyler Freeman

πŸ› πŸ’»
blackhuman
blackhuman

πŸ›
David Negstad
David Negstad

πŸ’»
Muhammad Ridho
Muhammad Ridho

πŸ› πŸ’»
MarcusWagberg
MarcusWagberg

πŸ’»
Masashi Yoshikawa
Masashi Yoshikawa

πŸ›
Guido Schmidt
Guido Schmidt

πŸ› πŸ’΅
tsukamotohideki
tsukamotohideki

πŸ’΅
Dave Meehan
Dave Meehan

πŸ’» πŸ€”
AurΓ©lien Bottazini
AurΓ©lien Bottazini

πŸ›
Alex
Alex

πŸ› πŸ’΅
Ross Cairns
Ross Cairns

πŸ’΅
Ruslan Prakapchuk
Ruslan Prakapchuk

πŸ’΅
Jarrod Davis
Jarrod Davis

πŸ’΅

This project follows the all-contributors specification. Contributions of any kind welcome!

No alternatives found
No tutorials found
Add a tutorial
No dependencies found

Rate & Review

100
No reviews found
Be the first to rate