or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.md
tile.json

tessl/npm-pnpm--catalogs-config

Utility for parsing and normalizing catalog configurations from pnpm workspace manifests

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/@pnpm/catalogs.config@1000.0.x

To install, run

npx @tessl/cli install tessl/npm-pnpm--catalogs-config@1000.0.0

index.mddocs/

PNPM Catalogs Config

PNPM Catalogs Config is a TypeScript utility library that provides functionality for parsing and normalizing catalog configurations from pnpm workspace manifest files (pnpm-workspace.yaml). It exports a single main function to handle both implicit default catalogs (via the 'catalog' field) and explicit named catalogs (via the 'catalogs' field), with built-in validation to prevent duplicate default catalog definitions.

Package Information

  • Package Name: @pnpm/catalogs.config
  • Package Type: npm
  • Language: TypeScript
  • Installation: npm install @pnpm/catalogs.config

Core Imports

import { getCatalogsFromWorkspaceManifest } from "@pnpm/catalogs.config";

For CommonJS:

const { getCatalogsFromWorkspaceManifest } = require("@pnpm/catalogs.config");

Basic Usage

import { getCatalogsFromWorkspaceManifest } from "@pnpm/catalogs.config";

// Process workspace manifest with implicit default catalog
const workspaceManifest = {
  catalog: {
    react: "^18.0.0",
    typescript: "^5.0.0"
  },
  catalogs: {
    dev: {
      jest: "^29.0.0",
      eslint: "^8.0.0"
    }
  }
};

const normalizedCatalogs = getCatalogsFromWorkspaceManifest(workspaceManifest);
// Result: 
// {
//   default: { react: "^18.0.0", typescript: "^5.0.0" },
//   dev: { jest: "^29.0.0", eslint: "^8.0.0" }
// }

// Handle missing workspace manifest
const emptyCatalogs = getCatalogsFromWorkspaceManifest(undefined);
// Result: {}

Capabilities

Catalog Normalization

Main function that creates a normalized catalogs configuration from pnpm workspace manifest data.

/**
 * Creates normalized catalogs config from pnpm workspace manifest data
 * @param workspaceManifest - Workspace manifest object with catalog and/or catalogs fields
 * @returns Normalized catalogs object
 */
function getCatalogsFromWorkspaceManifest(
  workspaceManifest: Pick<WorkspaceManifest, 'catalog' | 'catalogs'> | undefined
): Catalogs;

Behavior:

  • Returns empty object {} when workspaceManifest is null or undefined
  • Merges implicit default catalog (from 'catalog' field) with explicit named catalogs (from 'catalogs' field)
  • Sets default catalog from either manifest.catalog or manifest.catalogs.default
  • Validates that default catalog is not defined in both places
  • Throws PnpmError with code 'INVALID_CATALOGS_CONFIGURATION' if validation fails

Types

interface Catalogs {
  /**
   * The default catalog - can be defined via top-level "catalog" field
   * or explicitly named "default" catalog under "catalogs" map
   */
  readonly default?: Catalog;
  
  /**
   * Named catalogs - additional catalog configurations
   */
  readonly [catalogName: string]: Catalog | undefined;
}

interface Catalog {
  readonly [dependencyName: string]: string | undefined;
}

interface WorkspaceManifest {
  /**
   * The default catalog - package manifests may refer to dependencies
   * through the `catalog:default` or `catalog:` specifier
   */
  catalog?: WorkspaceCatalog;
  
  /**
   * Named catalogs - package manifests may refer to dependencies
   * through the `catalog:<name>` specifier
   */
  catalogs?: WorkspaceNamedCatalogs;
}

type WorkspaceCatalog = {
  readonly [dependencyName: string]: string | undefined;
};

type WorkspaceNamedCatalogs = {
  readonly [catalogName: string]: WorkspaceCatalog | undefined;
};

Error Handling

The package throws one specific error when validation fails:

class PnpmError extends Error {
  public readonly code: string;
  public readonly hint?: string;
  constructor(code: string, message: string, opts?: { hint?: string });
}

Error Code:

  • ERR_PNPM_INVALID_CATALOGS_CONFIGURATION: Thrown when both 'catalog' field and 'catalogs.default' field are defined in the workspace manifest

Example Error Handling:

import { getCatalogsFromWorkspaceManifest } from "@pnpm/catalogs.config";

try {
  const catalogs = getCatalogsFromWorkspaceManifest({
    catalog: { react: "^18.0.0" },
    catalogs: {
      default: { vue: "^3.0.0" }  // This will cause an error
    }
  });
} catch (error) {
  if (error.code === 'ERR_PNPM_INVALID_CATALOGS_CONFIGURATION') {
    console.error('Default catalog defined multiple times');
  }
}