Command-line tools for Angular Service Worker configuration generation and management.
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.jsonProgrammatic 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));
}/**
* 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>;
}/**
* 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;
}