📦
@simbo/monorepo-packages-list
A utility library that generates a list of monorepo packages with metadata.
It works with npm and
pnpm workspaces and is built on top of
@simbo/monorepo-utils
.
See @simbo/monorepo-packages-list-cli for the corresponding CLI.
Collects workspace metadata from npm or pnpm monorepos
Fully customizable output via templates and hooks
Supports filtering, sorting, and URL generation for each package
Handles inserting content before and after the list for complete page sections
Async, Promise-based API
Fully typed with TypeScript
Install @simbo/monorepo-packages-list
from the npm registry:
npm i [-D] @simbo/monorepo-packages-list
monorepoPackagesList()
uses metadata from your monorepo and returns a Markdown list as string.
🎨 The output can be completely customized.
For a complete API reference, see the documentation.
Assume you have two packages in your monorepo: @scope/pkg-a
and @scope/pkg-b
import { monorepoPackagesList } from '@simbo/monorepo-packages-list';
const list = await monorepoPackagesList();
console.log(list);
Produces:
There are currently _**2**_ packages managed in this repository:
- 📂 **`pkg-a`**
- **Package A**
> A sample package
📦 `@scope/pkg-a` @ `1.2.3`
- 📂 **`pkg-b`**
- **Package B**
> Another sample package
📦 `@scope/pkg-b` @ `3.2.1`
You can provide URL functions via the templateData
option:
import {
monorepoPackagesList,
type WorkspaceMetadata,
} from '@simbo/monorepo-packages-list';
const list = await monorepoPackagesList({
templateData: {
repoUrlFn: (workspace: WorkspaceMetadata) =>
`https://github.com/user/repo/tree/main/${workspace.relativePath}/`,
packageUrlFn: (workspace: WorkspaceMetadata) =>
`https://www.npmjs.com/package/${workspace.name}`,
docsUrlFn: (workspace: WorkspaceMetadata) =>
`https://user.github.io/repo/modules/${workspace.name.replaceAll(/[^\da-z-]/gi, '_')}`,
readmeUrlFn: (workspace: WorkspaceMetadata) =>
`https://github.com/user/repo/blob/main/${workspace.relativePath}/README.md`,
changelogUrlFn: (workspace: WorkspaceMetadata) =>
`https://github.com/user/repo/blob/main/${workspace.relativePath}/CHANGELOG.md`,
},
});
Produces a list with clickable links:
There are currently _**2**_ packages managed in this repository:
- 📂 [**`pkg-a`**](https://github.com/user/repo/tree/main/packages/pkg-a/)
- **Package A**
> A sample package
📦 [`@scope/pkg-a`](https://www.npmjs.com/package/@scope/pkg-a) @ `1.2.3`
[README.md](https://github.com/user/repo/blob/main/packages/pkg-a/README.md)  •Â
[CHANGELOG.md](https://github.com/user/repo/blob/main/packages/pkg-a/CHANGELOG.md)  •Â
[Documentation](https://user.github.io/repo/modules/_scope_pkg-a)
- 📂 [**`pkg-b`**](https://github.com/user/repo/tree/main/packages/pkg-b/)
- **Package B**
> Another sample package
📦 [`@scope/pkg-b`](https://www.npmjs.com/package/@scope/pkg-b) @ `3.2.1`
[README.md](https://github.com/user/repo/blob/main/packages/pkg-b/README.md)  •Â
[CHANGELOG.md](https://github.com/user/repo/blob/main/packages/pkg-b/CHANGELOG.md)  •Â
[Documentation](https://user.github.io/repo/modules/_scope_pkg-b)