Skip to content

Repository files navigation

zemd/js

Node.js pnpm Turborepo fast-check

A monorepo of small, focused libraries for JavaScript environments — browsers, Node.js, and other modern runtimes.

Everything here is written in TypeScript and ships with type definitions, so you get autocompletion and type safety out of the box whether your own project uses TypeScript or plain JavaScript. The packages are ESM-only, tree-shakeable, and keep external dependencies to a minimum, so you only pay for what you actually import.

Each package is published independently to npm, using the @zemd and @logtown scopes where applicable — pick just the one you need.

Packages

Libraries

Package Version License Description
@zemd/color npm Apache-2.0 Typed sRGB, OKLab, and OKLCH color utilities
@zemd/std-modules npm BlueOak-1.0.0 Standalone ECMAScript modules for diverse use cases
@zemd/http-client npm Apache-2.0 A lightweight framework to build your custom fetch
@zemd/openapi npm Apache-2.0 OpenAPI TypeScript definitions and tools
@zemd/testing npm Apache-2.0 Focused helpers for Node.js tests and benchmarks
@zemd/tsconfig npm MIT Shared TypeScript configs with strict defaults
logtown npm Apache-2.0 Versatile logging wrapper for JavaScript projects
@logtown/hono npm Apache-2.0 Hono middleware for logging with logtown

Integrations

Package Version License Description
@zemd/nestjs-pino-logger npm BlueOak-1.0.0 NestJS logger powered by Pino

HTTP clients

Package Version License Description
@zemd/figma-rest-api npm Apache-2.0 Lightweight, fetch-based, type-safe Figma REST API client
@zemd/flickr-rest-api npm Apache-2.0 Flickr API client simplified

Getting started

git clone https://github.com/zemd/js.git
cd js
pnpm install

A normal install also configures this checkout's local core.hooksPath to .githooks. CI sets CI=true, so dependency installation there skips local Git hook configuration.

Note

The repository uses pnpm workspaces. Install it with corepack enable or follow the pnpm installation guide.

Dev Container

The checked-in Dev Container configuration provides the repository's pinned Node.js, pnpm, and zizmor versions. In VS Code, run Dev Containers: Reopen in Container. The first container creation installs the frozen workspace dependencies and the Chromium build used by Playwright tests.

Scripts

All tasks are orchestrated by Turborepo and run across every workspace package.

Command Description
pnpm test-bench Run package benchmarks with Node.js performance APIs
pnpm build Build all packages
pnpm test Run unit tests with Node.js's native test runner
pnpm test-coverage Run unit tests and write native LCOV reports
pnpm test-browser Run browser tests with Playwright
pnpm test-browser-setup Download the Chromium build used by browser tests
pnpm test-git-hooks Test the native Git hook behavior
pnpm typecheck Type-check all packages
pnpm format Format the codebase with oxfmt
pnpm format-check Verify formatting without writing changes
pnpm lint-fix Run type-aware linting and auto-fix with oxlint
pnpm lint-check Run type-aware linting and fail on warnings
pnpm lint-actions Audit GitHub Actions with zizmor
pnpm lint-publish Validate publishable package metadata (publint)
pnpm pre-commit Format, lint-fix, validate, and stage all files
pnpm pre-push Run the complete local pre-push validation graph
pnpm run git-hooks-install Install this checkout's native Git hooks

When BENCHER_OUTPUT_DIR is set, the selected package benchmarks write namespaced Bencher Metric Format JSON files there instead of console tables. The reusable benchmark workflow uses those files to maintain performance history without changing the local pnpm test-bench experience.

pnpm lint-actions requires zizmor 1.29.0, matching the exact version pinned by CI. Set GH_TOKEN (for example, from gh auth token) to include online audits when running it locally.

To run a script for a single package, use the workspace filter:

pnpm --filter @zemd/http-client build

Security

To report a vulnerability, follow SECURITY.md.

Contributing

Issues and pull requests are welcome. Native hooks install automatically during pnpm install. The pre-commit hook runs repository-wide lint fixes and formatting, runs optional workspace pre-commit scripts, then stages all resulting changes.

The pre-commit and pre-push coordinators are executable extensionless Bash hooks under .githooks; the installer is .githooks/install.sh.

Packages opt into additional hook validation by defining a pre-commit or pre-push script in their package.json. Turbo discovers each matching package task once. These package tasks must be deterministic and read-only; central format and lint-fix are the only mutating pre-commit tasks. Any future task with side effects must also disable Turbo caching explicitly.

The pre-push hook runs builds, type checks, publication metadata checks, tests, and package pre-push tasks. Hooks can be bypassed, so CI remains authoritative. Before opening a PR, please make sure that pnpm lint-check, pnpm lint-actions, pnpm format-check, pnpm typecheck, pnpm build, pnpm test, pnpm lint-publish, and pnpm test-browser all pass.

License

Each package declares its own license — see the table above and the LICENSE file inside every package directory. Unless stated otherwise, packages are released under Apache-2.0 😇.

💙 💛 Donate

About

A monorepo of small, focused libraries for JavaScript environments.

Topics

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages