Skip to content

@web-engine-dev/asset-pipeline

Build-time asset processing pipeline for game engines. Supports importers, processors, and incremental builds.

Features

  • Asset Importers: Load various asset formats
  • Asset Processors: Transform and optimize assets
  • Incremental Builds: Only rebuild changed assets
  • Dependency Tracking: Automatic rebuild on deps change
  • Plugin System: Extensible importer/processor plugins

Installation

bash
npm install @web-engine-dev/asset-pipeline
# or
pnpm add @web-engine-dev/asset-pipeline

Quick Start

typescript
import { AssetPipeline, TextureImporter, TextureProcessor } from '@web-engine-dev/asset-pipeline';

// Create pipeline
const pipeline = new AssetPipeline({
  inputDir: './assets',
  outputDir: './dist/assets',
  cacheDir: './.asset-cache',
});

// Register importers
pipeline.registerImporter('.png', new TextureImporter());
pipeline.registerImporter('.jpg', new TextureImporter());

// Register processors
pipeline.registerProcessor(
  'texture',
  new TextureProcessor({
    maxSize: 2048,
    generateMipmaps: true,
    compress: true,
  })
);

// Build all assets
await pipeline.build();

// Watch for changes
pipeline.watch();

API Overview

Asset Pipeline

MethodDescription
registerImporter()Add file type importer
registerProcessor()Add asset processor
build()Build all assets
buildFile(path)Build single file
watch()Watch and rebuild on change
clean()Clear cache and outputs

Custom Importer

typescript
class ModelImporter implements AssetImporter {
  async import(path: string): Promise<AssetData> {
    const data = await loadGLTF(path);
    return {
      type: 'model',
      data: data,
      dependencies: data.textures,
    };
  }
}

Custom Processor

typescript
class TextureProcessor implements AssetProcessor {
  async process(asset: AssetData): Promise<ProcessedAsset> {
    const optimized = await optimizeTexture(asset.data);
    return {
      ...asset,
      data: optimized,
      metadata: { format: 'webp', mips: 8 },
    };
  }
}

Incremental Builds

typescript
// First build - processes all assets
await pipeline.build();

// Second build - only processes changed files
await pipeline.build();

// Force full rebuild
await pipeline.build({ force: true });

Proprietary software. All rights reserved.