- Monoduck is a Typescript-first, monolithic repository of subpackages.
- To avoid bloat, it has absolutely no
dependencies
, and allpeerDependencies
are optional. - And to keep things tree-shakable, only named exports are used.
- Monoduck is not generally ready for production use, but it's getting there.
- However, it should be stable enough for use in internal apps, and POCs.
- Lookduck: React state manager with automatic dependency management for derived state.
- Tapiduck: End-to-end type-safe APIs with fullstack intillisense. Simple and restful-ish.
- Patchduck: TS-first, React-friendly utility for deep-patching (deep-spreading) objects.
- Utilduck: Commonly used, Underscore-style, typed utils like
_.map
,_.deepClone
, etc. - Sqlduck: A thin Sequelize wrapper. Plays well with Zod. Prioritizes simplicity & type-safety.
- Roqsduck: Intentionally simple, query-string based, client-side routing for React apps.
Monoduck uses ts-standard
for code-styling and linting. This way, one needn't manually configure lint rules. The codebase also has a few additional conventions, listed below. While most of these conventions are not strict requirements, the codebase tries to follow all of them.
- Prefer functions over classes.
- Mildly prefer interfaces over types, but prefer types for functions.
- Avoid
this
. If unavoidable, go withconst self = this
and useself
. - Prefer
function
over=>
. (Latter is OK for one-liners likex => x + 1
) - Prefer named exports over default exports, and avoid
*
imports. - Prefer
unknown
overany
. For return types, prefervoid
overunknown
. - Prefer
const
overlet
, and don't usevar
. - Bool vars should begin with
is
,has
, etc. (eg.isAdmin
,hasAccess
) - Functions that return bools should end with
is
,has
, etc. (eg.oddIs
) - Strictly prefer
===
over==
. Never use==
, not even== null
. - Prefer
if
..else
overswitch
. (Latter is OK if eachcase
just returns.)