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-resourcesInstallation
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
| Strategy | Description |
|---|---|
FileResourceStrategy | Loads resources from the local file system with glob support |
BlobResourceStrategy | Loads resources from a blob storage adapter (Vercel, Azure, S3) |
EmbeddedResourceStrategy | Serves 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
| Interface | Description |
|---|---|
IResourceResult | Result object with buffer and metadata |
IResourceMetadata | Metadata including mimeType and size |
IResourceStrategy | Strategy contract for resource loading |
IBlobServiceAdapter | Adapter contract for blob storage access |
Error Classes
| Error | Description |
|---|---|
ResourceNotFoundError | Thrown when a requested resource is not found |
API Reference
The auto-generated API reference is published when API docs are generated for this package.