@bernierllc/content-versions-service
v1.0.4
Published
Content version control service managing historical snapshots, diffs, and rollback operations
Readme
@bernierllc/content-versions-service
Content version control service managing historical snapshots, diffs, and rollback operations.
Installation
npm install @bernierllc/content-versions-serviceFeatures
- Version History - Track all content changes with full history
- Diff Generation - Compare versions to see what changed
- Rollback Support - Restore content to any previous version
- Automatic Cleanup - Configurable max versions with automatic cleanup
- Caching - Optional caching for improved performance
- Event Emission - Emit events for version lifecycle
Usage
import { ContentVersionsService } from '@bernierllc/content-versions-service';
const service = new ContentVersionsService({
supabaseUrl: process.env.SUPABASE_URL!,
supabaseAnonKey: process.env.SUPABASE_ANON_KEY!,
maxVersions: 50,
cacheEnabled: true
});
// Create a version
const result = await service.createVersion({
contentId: 'content-123',
content: 'My content',
metadata: { title: 'My Title' },
userId: 'user-456'
});
if (result.success) {
console.log('Version created:', result.version?.versionId);
}
// Get version history
const history = await service.getVersionHistory('content-123');
console.log(`Found ${history.length} versions`);
// Compare versions
const diff = await service.compareVersions('content-123', 1, 2);
console.log('Changes:', diff.changes);
console.log('Summary:', diff.summary);
// Rollback to a version
const rollbackContent = await service.rollbackToVersion('content-123', 'content-123-v2');
console.log('Rolled back to:', rollbackContent);API
ContentVersionsService
Constructor
new ContentVersionsService(config: ContentVersionsServiceConfig)Config Options:
supabaseUrl(required) - Supabase project URLsupabaseAnonKey(required) - Supabase anonymous keymaxVersions(optional) - Maximum versions to keep (default: 50)compressionEnabled(optional) - Enable compression (default: false)cacheEnabled(optional) - Enable caching (default: true)cacheTTL(optional) - Cache TTL in seconds (default: 3600)
Methods
createVersion(content: EditorContent, previousVersion?: ContentVersion): Promise<VersionResult>getVersionHistory(contentId: string): Promise<ContentVersion[]>compareVersions(contentId: string, version1: number, version2: number): Promise<VersionDiff>rollbackToVersion(contentId: string, versionId: string): Promise<EditorContent>getEventEmitter(): EventEmitter
Events
The service emits events via the event emitter:
version.created- When a new version is createdversion.rollback- When content is rolled back to a previous version
const emitter = service.getEventEmitter();
emitter.on('version.created', (event) => {
console.log('Version created:', event.versionId);
});Database Schema
The service expects a content_versions table in Supabase:
CREATE TABLE content_versions (
version_id TEXT PRIMARY KEY,
content_id TEXT NOT NULL,
version INTEGER NOT NULL,
content TEXT NOT NULL,
metadata JSONB,
changes JSONB,
created_at TIMESTAMPTZ NOT NULL,
created_by TEXT NOT NULL
);
CREATE INDEX idx_content_versions_content_id ON content_versions(content_id);
CREATE INDEX idx_content_versions_version ON content_versions(content_id, version);Integration Status
- Logger: ✅ Integrated - Uses
@bernierllc/loggerfor all logging operations - Docs-Suite: ✅ Ready - Full TypeDoc API documentation available
- NeverHub: ⚠️ Required - Can emit version events to NeverHub event bus for distributed observability
License
Copyright (c) 2025 Bernier LLC. All rights reserved.
