@bbckr/codeowners

A TypeScript library for parsing and composing CODEOWNERS files.
Features
- Supports both GitHub and GitLab CODEOWNERS syntax
- Preserves comments and whitespace
- Provides a way to get owners for a given file
- Parses CODEOWNERS files into an AST (Abstract Syntax Tree), allowing you to compose a CODEOWNERS file with entries, comments, and even sections (GitLab spec only)
Installation
npm install @bbckr/codeowners
yarn add @bbckr/codeowners
Usage
Parse a CODEOWNERS file
import { CodeOwnersParser } from "@bbckr/codeowners";
const input = `
# comment # same comment
/some/path owner1 @owner2
/path/2 # comment
`;
const parser = new CodeOwnersParser();
const codeowners = parser.parse(input);
Get the owners of a file
const owners = codeowners.getOwners("path/to/file");
Output
['@owner1', '@owner2']
Compose a CODEOWNERS file programatically
import { CodeOwners, PathNode, CommentNode } from "@bbckr/codeowners";
const codeowners = new CodeOwners([
new PathNode("/path/to/file", ["owner1", "@owner2"]),
new CommentNode("# comment"),
]);
Output
/path/to/file owner1 @owner2
# comment
Compose a GitLab CODEOWNERS file programatically
import {
CodeOwners,
CodeOwnersSpec,
PathNode,
SectionNode,
} from "@bbckr/codeowners";
const codeowners = new CodeOwners(
[
new PathNode("/path/to/file", ["owner1", "@owner2"]),
new SectionNode(
"README Owners", // section name
false, // optional section
[], // owners
undefined, // count
undefined, // comment
undefined, // parent, undefined for root of file
[
new PathNode("README.md", ["@user1", "@user2"]),
new PathNode("internal/README.md", ["@user4"]),
],
),
],
CodeOwnersSpec.Gitlab,
);
Output
/path/to/file owner1 @owner2
[README Owners]
README.md @user1 @user2
internal/README.md @user4