1.0.0 • Published 8 months ago

@bbckr/codeowners v1.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
8 months ago

@bbckr/codeowners

license GitHub Workflow Status Codecov

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
1.0.0

8 months ago