or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.mdmetadata-management.mdpackage-resolution.mdversion-selection.md
tile.json

tessl/npm-pnpm--npm-resolver

Resolver for npm-hosted packages with caching, offline support, and registry authentication

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/@pnpm/npm-resolver@2.2.x

To install, run

npx @tessl/cli install tessl/npm-pnpm--npm-resolver@2.2.0

index.mddocs/

@pnpm/npm-resolver

@pnpm/npm-resolver is a TypeScript library that provides comprehensive package resolution for npm-hosted packages. It handles package metadata fetching, caching, version selection, offline support, and registry authentication as part of the pnpm ecosystem.

Package Information

  • Package Name: @pnpm/npm-resolver
  • Package Type: npm
  • Language: TypeScript
  • Installation: npm install @pnpm/npm-resolver
  • Peer Dependencies: @pnpm/logger@^1.0.0 || ^2.0.0

Core Imports

ES6/TypeScript:

import createResolveFromNpm, { PackageMeta, PackageMetaCache } from '@pnpm/npm-resolver';
import type { ResolveResult, LocalPackages } from '@pnpm/resolver-base';
import type { PackageJson } from '@pnpm/types';

CommonJS:

const createResolveFromNpm = require('@pnpm/npm-resolver').default;
const { PackageMeta, PackageMetaCache } = require('@pnpm/npm-resolver');

Basic Usage

import createResolveFromNpm from '@pnpm/npm-resolver';

// Create resolver with configuration
const resolve = createResolveFromNpm({
  metaCache: new Map(),
  store: '.store',
  offline: false,
  rawNpmConfig: {
    registry: 'https://registry.npmjs.org/',
  },
});

// Resolve a package
const result = await resolve(
  { alias: 'is-positive', pref: '1.0.0' },
  { 
    registry: 'https://registry.npmjs.org/',
    prefix: process.cwd()
  }
);

console.log(result.id);           // 'registry.npmjs.org/is-positive/1.0.0'
console.log(result.latest);       // '3.1.0'
console.log(result.resolvedVia);  // 'npm-registry'

Architecture

The resolver follows a factory pattern where createResolveFromNpm creates a configured resolver function. Key components include:

  • Registry Fetcher: Handles HTTP requests to npm registries with authentication
  • Metadata Cache: Caches package metadata to reduce registry requests
  • Version Picker: Selects appropriate package versions based on preferences
  • Local Package Fallback: Falls back to local packages when registry resolution fails
  • Offline Support: Works with cached metadata when offline

Capabilities

Package Resolution

Creates a resolver function that can resolve npm packages by name and version preference.

function createResolveFromNpm(opts: ResolverOptions): ResolveFunction;

interface ResolverOptions {
  cert?: string;
  fullMetadata?: boolean;
  key?: string;
  ca?: string;
  strictSsl?: boolean;
  rawNpmConfig: object;
  metaCache: PackageMetaCache;
  store: string;
  proxy?: string;
  httpsProxy?: string;
  localAddress?: string;
  userAgent?: string;
  offline?: boolean;
  preferOffline?: boolean;
  fetchRetries?: number;
  fetchRetryFactor?: number;
  fetchRetryMintimeout?: number;
  fetchRetryMaxtimeout?: number;
}

type ResolveFunction = (
  wantedDependency: WantedDependency,
  opts: ResolveOptions
) => Promise<ResolveResult | null>;

Package Resolution

Metadata Management

Package metadata caching and retrieval from npm registries.

interface PackageMetaCache {
  get(key: string): PackageMeta | undefined;
  set(key: string, meta: PackageMeta): void;
  has(key: string): boolean;
}

interface PackageMeta {
  'dist-tags': { [name: string]: string };
  versions: { [name: string]: PackageInRegistry };
  cachedAt?: number;
}

Metadata Management

Version Selection

Intelligent package version selection based on preferences and constraints.

interface WantedDependency {
  alias?: string;
  pref?: string;
}

interface ResolveOptions {
  defaultTag?: string;
  dryRun?: boolean;
  registry: string;
  preferredVersions?: {
    [packageName: string]: {
      selector: string;
      type: 'version' | 'range' | 'tag';
    };
  };
  prefix: string;
  localPackages?: LocalPackages;
}

Version Selection

Core Types

Note: ResolveResult and LocalPackages are imported from @pnpm/resolver-base, PackageJson from @pnpm/types, and PackageManifest from @pnpm/types.

interface ResolveResult {
  id: string;
  latest: string;
  normalizedPref?: string;
  package: PackageInRegistry;
  resolution: {
    integrity: string;
    registry: string;
    tarball: string;
  } | {
    directory: string;
    type: 'directory';
  };
  resolvedVia: 'npm-registry' | 'local-filesystem';
}

interface RegistryPackageSpec {
  type: 'tag' | 'version' | 'range';
  name: string;
  fetchSpec: string;
  normalizedPref?: string;
}

type PackageInRegistry = PackageManifest & {
  dist: {
    integrity?: string;
    shasum: string;
    tarball: string;
  };
};

interface LocalPackages {
  [packageName: string]: {
    [version: string]: {
      directory: string;
      package: PackageJson;
    };
  };
}