JSPM

@bbckr/codeowners

1.0.0
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • Downloads 4
    • Score
      100M100P100Q37392F
    • License MIT

    A way to manage CODEOWNERS files programatically

    Package Exports

    • @bbckr/codeowners
    • @bbckr/codeowners/dist/index.js

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@bbckr/codeowners) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    @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