This monorepo hosts packages that extend and integrate with the @codibre/fluent-iterable ecosystem. It contains small, focused utilities and integrations that make working with synchronous and asynchronous iterables more productive (concurrency helpers, adapters and small runtime utilities).
The repository is structured as a classic monorepo with lightweight packages under libs/. Each package is responsible for a small, well-defined area of functionality. The goal is to keep code modular, tests isolated, and developer tooling consistent across packages.
Key principles:
- Small, focused packages under
libs/ - Shared tooling and configuration at the repository root
- Fast builds and scoped scripts using Turbo and pnpm
Top-level packages live under libs/. Examples include integrations such as:
libs/fluent-iterable-async-sema—async-semaintegration that addsrunConcurrentlyto fluent iterables.- Other packages may provide helpers, adapters, or higher-level APIs that operate on iterables.
Each package should include its own package.json, src/, test/ and a README describing package-specific usage and API.
This repo uses a familiar toolchain to speed up development:
- Package manager: pnpm (workspace-aware)
- Build system: Turbo (turbo.json)
- Testing: Jest
- Linting: ESLint (+ Prettier)
- Commit validation: commitlint
- CI: GitHub Actions (recommended)
Shared configuration files live in the repository root. Individual packages may extend or override configs for package-specific needs.
Prerequisites:
- Node.js (current LTS or >= 18 recommended)
- pnpm >= 6
- Git
Quick setup:
# clone
git clone https://github.com/codibre/fluent-iterable-monorepo.git
cd fluent-iterable-monorepo
# install dependencies
pnpm installRun tests for all packages:
pnpm testBuild all packages:
pnpm buildLint everything:
pnpm lint
pnpm lint:fix # auto-fix common issuesTo operate on a single package use pnpm filters. Example (run tests only for async-sema package):
pnpm --filter @fluent-iterable/async-sema test- Keep changes focused per PR: prefer small, reviewable commits.
- Use conventional commits to allow automated changelog/versioning tools to work well (feat/fix/docs/test/chore/etc.).
- Don’t worry about formatting while coding — run
pnpm lint:fixbefore committing or rely on pre-commit hooks. - Add tests for new features and bug fixes. Follow Arrange/Act/Assert pattern in tests.
From the repository root you can run package-specific scripts. Example:
pnpm --filter @fluent-iterable/async-sema devCheck the package package.json for available scripts.
We welcome contributions. Here's a short guide to get your changes accepted quickly:
- Fork the repository.
- Create a descriptive branch (use a type prefix):
git checkout -b feat/your-feature-name- Install dependencies and run the test suite:
pnpm install
pnpm test-
Make changes, add tests and documentation. Keep commits small and meaningful.
-
Lint and format:
pnpm lint
pnpm lint:fix- Commit using Conventional Commits format, e.g.:
git add .
git commit -m "feat(async-sema): add runConcurrently extension"- Push your branch and open a Pull Request. In the PR description include:
- what the change does
- why it's needed
- any migration or breaking-change notes
- links to related issues (if applicable)
- Tests pass locally
- New functionality has tests
- Code is linted and formatted
- Documentation/README updated if applicable
- Commits follow conventional commit format
The repository is set up for automated CI and publishing. Typical CI jobs should run:
- Install deps
- Build packages (turbo)
- Run tests
- Lint
- Publish changed packages (when merging to main)
Publishing in this repo is automated when semantic commits determine a version bump; ensure commit messages correctly reflect the change type.
- Package source:
libs/fluent-iterable-async-sema/src - Package tests:
libs/fluent-iterable-async-sema/test - Shared configs:
package.json,pnpm-workspace.yaml,turbo.json,commitlint.config.js
This repository uses the MIT license — see the LICENSE file for full text.
Open issues on GitHub or contact the maintainers via repository discussions.
Built with care for fast, consistent tooling and collaborative development.