Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,32 @@
## Code style

- Pure functions preferred; side effects only at I/O boundaries
- Name files after what they do: `parse-pnpm-lockfile.ts`, `resolve-affected-packages.ts`
- No force casts (`as Foo`) — use type guards and narrowing
- Imports require `.js` extensions (NodeNext module resolution)
- Conventional commits for commit messages

## Architecture

Vertical slice — one package per concern:

- `@lockfile-affected/core` — pure domain logic, cli and adapter agnostic
- `@lockfile-affected/lockfile-*` — one package per lockfile format
- `@lockfile-affected/cli` — I/O boundary, orchestration

## Adding a lockfile format

1. Create `packages/lockfile-<format>/`
2. Export a `LockfileParser` from `@lockfile-affected/core`
3. Write tests against fixture content before implementing
4. Register the parser in `@lockfile-affected/cli`

## Feedback loop

After every change:

```
pnpm test && pnpm typecheck && pnpm format:check
pnpm test && pnpm typecheck && pnpm format:check && pnpm lint
```

Write tests before implementation. One logical change per commit.
2 changes: 2 additions & 0 deletions packages/cli/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
[![CI](https://github.com/split/lockfile-affected/actions/workflows/ci.yml/badge.svg)](https://github.com/split/lockfile-affected/actions/workflows/ci.yml)
[![npm version](https://img.shields.io/npm/v/lockfile-affected)](https://www.npmjs.com/package/lockfile-affected)

> **Warning:** This tool is still in early development. The API may change, and some features are incomplete or not yet fully tested. Use in production at your own risk.

Find which workspace packages are affected by lockfile changes.

## Purpose
Expand Down
26 changes: 26 additions & 0 deletions packages/cli/e2e/fixtures/bun-root-deps-affect-all/after-bun.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"lockfileVersion": 1,
"configVersion": 1,
"workspaces": {
"": {
"name": "test-monorepo",
"dependencies": {
"lodash": "^4.17.0"
},
"devDependencies": {
"vitest": "^1.0.0"
}
},
"packages/pkg-a": {
"name": "pkg-a",
"version": "1.0.0",
"dependencies": {}
}
},
"packages": {
"lodash": ["lodash@4.17.22", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZbet2yk9dzQ1uFR5/0w=="],
"lodash@4.17.22": ["lodash@4.17.22", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZbet2yk9dzQ1uFR5/0w=="],
"vitest": ["vitest@1.0.0", "", {}, "sha512-dummy"],
"vitest@1.0.0": ["vitest@1.0.0", "", {}, "sha100-dummy"]
}
}
26 changes: 26 additions & 0 deletions packages/cli/e2e/fixtures/bun-root-deps-affect-all/before-bun.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"lockfileVersion": 1,
"configVersion": 1,
"workspaces": {
"": {
"name": "test-monorepo",
"dependencies": {
"lodash": "^4.17.0"
},
"devDependencies": {
"vitest": "^1.0.0"
}
},
"packages/pkg-a": {
"name": "pkg-a",
"version": "1.0.0",
"dependencies": {}
}
},
"packages": {
"lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZbet2yk9dzQ1uFR5/0w=="],
"lodash@4.17.21": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZbet2yk9dzQ1uFR5/0w=="],
"vitest": ["vitest@1.0.0", "", {}, "sha512-dummy"],
"vitest@1.0.0": ["vitest@1.0.0", "", {}, "sha512-dummy"]
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"name": "test-monorepo",
"private": true,
"workspaces": [
"packages/*"
],
"dependencies": {
"lodash": "^4.17.0"
},
"devDependencies": {
"vitest": "^1.0.0"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "pkg-a",
"version": "1.0.0",
"dependencies": {
"lodash": "^4.17.0"
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"name": "test-monorepo",
"private": true,
"workspaces": [
"packages/*"
],
"dependencies": {
"lodash": "^4.17.0"
},
"devDependencies": {
"vitest": "^1.0.0"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "pkg-a",
"version": "1.0.0",
"dependencies": {
"lodash": "^4.17.0"
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"name": "test-monorepo",
"private": true,
"workspaces": [
"packages/*"
],
"dependencies": {
"lodash": "^4.17.0"
},
"devDependencies": {
"vitest": "^1.0.0"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "pkg-a",
"version": "1.0.0",
"dependencies": {
"lodash": "^4.17.0"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# yarn.lock - Yarn Berry (v4) format

__metadata:
version: 6
cacheKey: 8

"lodash@npm:^4.17.20":
version: 4.17.22
resolution: "lodash@npm:4.17.22"
checksum: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZbet2yk9dzQ1uFR5/0w==
languageName: node
linkType: hard

"vitest@npm:^1.0.0":
version: 1.0.0
resolution: "vitest@npm:1.0.0"
checksum: sha512-dummy
languageName: node
linkType: hard

"pkg-a@workspace:packages/pkg-a":
version: 1.0.0
resolution: "pkg-a@workspace:packages/pkg-a"
checksum: sha512-pkg-a-1-0-0
languageName: node
linkType: soft
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# yarn.lock - Yarn Berry (v4) format

__metadata:
version: 6
cacheKey: 8

"lodash@npm:^4.17.20":
version: 4.17.21
resolution: "lodash@npm:4.17.21"
checksum: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZbet2yk9dzQ1uFR5/0w==
languageName: node
linkType: hard

"vitest@npm:^1.0.0":
version: 1.0.0
resolution: "vitest@npm:1.0.0"
checksum: sha512-dummy
languageName: node
linkType: hard

"pkg-a@workspace:packages/pkg-a":
version: 1.0.0
resolution: "pkg-a@workspace:packages/pkg-a"
checksum: sha512-pkg-a-1-0-0
languageName: node
linkType: soft
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"name": "test-monorepo",
"private": true,
"workspaces": [
"packages/*"
],
"dependencies": {
"lodash": "^4.17.0"
},
"devDependencies": {
"vitest": "^1.0.0"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "pkg-a",
"version": "1.0.0",
"dependencies": {
"lodash": "^4.17.0"
}
}
Loading
Loading