or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

cli-tools.mdconfiguration.mdindex.mdlow-level-communication.mdmodule-setup.mdpush-notifications.mdtesting.mdupdate-management.md
tile.json

cli-tools.mddocs/

CLI Tools

Command-line tools for Angular Service Worker configuration generation and management.

Capabilities

ngsw-config Command

Command-line tool for generating service worker manifest files from configuration.

/**
 * Command-line interface: ngsw-config <dist-dir> <config-file> [base-href]
 * 
 * Generates ngsw.json manifest file from Angular service worker configuration
 * 
 * @param dist-dir - Path to the distribution directory containing built app files
 * @param config-file - Path to the ngsw-config.json configuration file  
 * @param base-href - Base href for the application (default: '/')
 */

Usage Examples:

# Basic usage with default base href
ngsw-config dist/my-app ngsw-config.json

# With custom base href
ngsw-config dist/my-app ngsw-config.json /my-app/

# Typical Angular CLI integration
ngsw-config dist/my-app src/ngsw-config.json

Configuration Generation API

Programmatic API for generating service worker configurations.

/**
 * Generator for creating service worker manifest files
 */
class Generator {
  /**
   * Create a generator instance
   * @param fs - Filesystem interface for reading files
   * @param baseHref - Base href for the application
   */
  constructor(fs: Filesystem, baseHref: string);
  
  /**
   * Process configuration and generate manifest
   * @param config - Service worker configuration object
   * @returns Promise resolving to generated manifest
   */
  process(config: Config): Promise<any>;
}

/**
 * Filesystem abstraction for file operations
 */
interface Filesystem {
  /**
   * List files in a directory matching a pattern
   * @param dir - Directory path
   * @param pattern - Glob pattern to match
   * @returns Promise resolving to array of file paths
   */
  list(dir: string, pattern: string): Promise<string[]>;
  
  /**
   * Read file contents
   * @param path - File path
   * @returns Promise resolving to file contents as string
   */
  read(path: string): Promise<string>;
  
  /**
   * Get file hash
   * @param path - File path  
   * @returns Promise resolving to file hash
   */
  hash(path: string): Promise<string>;
  
  /**
   * Write file contents
   * @param path - File path
   * @param contents - File contents
   * @returns Promise resolving when write completes
   */
  write(path: string, contents: string): Promise<void>;
}

Usage Examples:

import { Generator, Config } from '@angular/service-worker/config';
import { NodeFilesystem } from '@angular/service-worker/config';
import { MockFilesystem } from '@angular/service-worker/config/testing';
import * as fs from 'fs';

// Programmatic generation
async function generateManifest() {
  const config: Config = JSON.parse(
    fs.readFileSync('ngsw-config.json', 'utf8')
  );
  
  const filesystem = new NodeFilesystem('./dist');
  const generator = new Generator(filesystem, '/');
  
  const manifest = await generator.process(config);
  
  await filesystem.write('/ngsw.json', JSON.stringify(manifest, null, 2));
}

Types

Node Filesystem Implementation

/**
 * Node.js filesystem implementation
 */
class NodeFilesystem implements Filesystem {
  /**
   * Create filesystem instance for a base directory
   * @param base - Base directory path
   */
  constructor(base: string);
  
  list(dir: string, pattern: string): Promise<string[]>;
  read(path: string): Promise<string>;
  hash(path: string): Promise<string>;
  write(path: string, contents: string): Promise<void>;
}

Testing Filesystem Implementations

/**
 * Mock filesystem implementation for testing configuration generation
 */
class MockFilesystem implements Filesystem {
  /**
   * Create mock filesystem with predefined files
   * @param files - Object mapping file paths to contents
   */
  constructor(files: {[name: string]: string | undefined});
  
  list(dir: string): Promise<string[]>;
  read(path: string): Promise<string>;
  hash(path: string): Promise<string>;
  write(path: string, contents: string): Promise<void>;
}

/**
 * Mock filesystem that tracks hash operation concurrency for testing
 */
class HashTrackingMockFilesystem extends MockFilesystem {
  /**
   * Maximum number of concurrent hash operations observed
   */
  maxConcurrentHashings: number;
}