Skip to content

platform-resources

Multi-strategy resource management for NestJS applications. Loads files from the file system, embedded buffers, or blob storage with MIME type detection and optional caching. Extracted from platform-core to provide a focused, independently versionable resource module.

Package: @breadstone/archipel-platform-resources

npm install @breadstone/archipel-platform-resources

Installation

typescript
import {
  ResourceModule,
  ResourceManager,
  FileResourceStrategy,
  BlobResourceStrategy,
  EmbeddedResourceStrategy,
  ResourceNotFoundError,
} from '@breadstone/archipel-platform-resources';

Module Registration

Register the module with one or more resource strategies:

typescript
import { Module } from '@nestjs/common';
import { ResourceModule, FileResourceStrategy, EmbeddedResourceStrategy } from '@breadstone/archipel-platform-resources';
import { join } from 'node:path';

@Module({
  imports: [
    ResourceModule.forRoot({
      strategies: [
        new FileResourceStrategy({
          basePath: join(__dirname, '..', 'assets'),
        }),
        new EmbeddedResourceStrategy([
          { name: 'fallback.html', buffer: Buffer.from('<html>Fallback</html>') },
        ]),
      ],
    }),
  ],
})
export class AppModule {}

Using ResourceManager

Inject and use ResourceManager to load resources at runtime:

typescript
import { Injectable } from '@nestjs/common';
import { ResourceManager } from '@breadstone/archipel-platform-resources';

@Injectable()
export class TemplateService {
  constructor(private readonly _resourceManager: ResourceManager) {}

  public async loadTemplate(name: string): Promise<string> {
    const result = await this._resourceManager.get(name);
    return result.buffer.toString('utf-8');
  }
}

Strategies

StrategyDescription
FileResourceStrategyLoads resources from the local file system with glob support
BlobResourceStrategyLoads resources from a blob storage adapter (Vercel, Azure, S3)
EmbeddedResourceStrategyServes pre-loaded in-memory buffers

BlobResourceStrategy

For loading resources from cloud blob storage, provide an adapter that implements IBlobServiceAdapter:

typescript
import { BlobResourceStrategy, type IBlobServiceAdapter } from '@breadstone/archipel-platform-resources';

const blobStrategy = new BlobResourceStrategy({
  adapter: myBlobAdapter,
  containerName: 'templates',
});

Custom Strategies

Implement IResourceStrategy to create your own resource loading strategy:

typescript
import type { IResourceStrategy, IResourceResult } from '@breadstone/archipel-platform-resources';

export class CustomStrategy implements IResourceStrategy {
  public async get(name: string): Promise<IResourceResult | undefined> {
    // Custom loading logic
  }
}

Interfaces

InterfaceDescription
IResourceResultResult object with buffer and metadata
IResourceMetadataMetadata including mimeType and size
IResourceStrategyStrategy contract for resource loading
IBlobServiceAdapterAdapter contract for blob storage access

Error Classes

ErrorDescription
ResourceNotFoundErrorThrown when a requested resource is not found

API Reference

The auto-generated API reference is published when API docs are generated for this package.

Released under the MIT License.