CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-yeoman-environment

Handles the lifecycle and bootstrapping of generators in a specific environment

Overview
Eval results
Files

module-lookup.mddocs/

Module Lookup

Module and package discovery utilities for finding generators in npm packages and file systems.

Capabilities

Synchronous Module Lookup

Search for modules and packages synchronously using patterns and search paths.

/**
 * Search for npm packages synchronously using glob patterns
 * @param patterns - Glob patterns to search for (string or array)
 * @param options - Lookup configuration options
 * @returns Single result or array of found package paths
 */
function moduleLookupSync(patterns: string | string[], options?: {
  /** Return package.json instead of main entry point */
  packageJson?: boolean;
  /** Return single result instead of array */
  singleResult?: boolean;
  /** Custom lookup paths to search */
  lookups?: string[];
  /** Specific npm paths to search */
  npmPaths?: string | string[];
}): string | string[];

Usage Examples:

import { moduleLookupSync } from "yeoman-environment";

// Find all generator packages
const generators = moduleLookupSync("generator-*");
console.log("Found generators:", generators);

// Find specific generator with package.json
const webapp = moduleLookupSync("generator-webapp", {
  packageJson: true,
  singleResult: true
});

// Search in custom paths
const custom = moduleLookupSync("generator-*", {
  lookups: ["/custom/path/node_modules"],
  npmPaths: ["/usr/local/lib/node_modules"]
});

Package Discovery

Find packages in specific search paths with pattern matching.

/**
 * Find packages matching patterns in given search paths
 * @param patterns - Glob patterns to match against
 * @param searchPaths - Array of paths to search in
 * @returns Array of found package paths
 */
function findPackagesIn(
  patterns: string | string[],
  searchPaths: string[]
): string[];

Usage Examples:

import { findPackagesIn } from "yeoman-environment";

// Find generators in specific directories
const paths = [
  "/usr/local/lib/node_modules",
  "./node_modules",
  "~/.npm-global/lib/node_modules"
];

const packages = findPackagesIn("generator-*", paths);
console.log("Found packages:", packages);

// Find multiple patterns
const allPackages = findPackagesIn([
  "generator-*",
  "@*/generator-*",
  "yeoman-generator"
], paths);

NPM Path Resolution

Get npm-related lookup directories for package discovery.

/**
 * Get npm lookup directories including global and local paths
 * @param paths - Additional paths to include (optional)
 * @returns Array of npm-related search paths
 */
function getNpmPaths(paths?: string | string[]): string[];

Usage Examples:

import { getNpmPaths } from "yeoman-environment";

// Get standard npm paths
const npmPaths = getNpmPaths();
console.log("NPM search paths:", npmPaths);
// Typical output: [
//   "/usr/local/lib/node_modules",
//   "/home/user/.npm-global/lib/node_modules",
//   "./node_modules"
// ]

// Include custom paths
const customPaths = getNpmPaths([
  "/custom/node_modules",
  "/another/path/node_modules"
]);

Integration with Environment

These module lookup functions are used internally by the Environment system for generator discovery, but can also be used directly for custom discovery logic.

import { createEnv, moduleLookupSync, findPackagesIn } from "yeoman-environment";

const env = createEnv();

// Manual discovery before environment lookup
const manualGenerators = moduleLookupSync("generator-*");
console.log("Available generators:", manualGenerators);

// Register discovered generators
for (const generatorPath of manualGenerators) {
  try {
    env.register(generatorPath);
  } catch (error) {
    console.warn(`Failed to register ${generatorPath}:`, error.message);
  }
}

// Now use environment lookup for automatic discovery
await env.lookup();

Lookup Options

interface ModuleLookupOptions {
  /** Return package.json instead of main entry point */
  packageJson?: boolean;
  /** Return single result instead of array */
  singleResult?: boolean;
  /** Custom lookup paths to search */
  lookups?: string[];
  /** Specific npm paths to search */
  npmPaths?: string | string[];
  /** File patterns to match */
  filePatterns?: string | string[];
  /** Package patterns to match */
  packagePatterns?: string | string[];
}

Install with Tessl CLI

npx tessl i tessl/npm-yeoman-environment

docs

cli.md

environment.md

filesystem.md

generator-discovery.md

generator-management.md

index.md

module-lookup.md

tile.json