Content version control service managing historical snapshots, diffs, and rollback operations
npm install @bernierllc/content-versions-serviceContent version control service managing historical snapshots, diffs, and rollback operations.
``bash`
npm install @bernierllc/content-versions-service
- 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
`typescript
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);
`
#### Constructor
`typescript`
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): PromisegetVersionHistory(contentId: string): Promise
- compareVersions(contentId: string, version1: number, version2: number): Promise
- rollbackToVersion(contentId: string, versionId: string): Promise
- getEventEmitter(): EventEmitter
-
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
`typescript`
const emitter = service.getEventEmitter();
emitter.on('version.created', (event) => {
console.log('Version created:', event.versionId);
});
The service expects a content_versions table in Supabase:
`sql
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);
`
- Logger: ✅ Integrated - Uses @bernierllc/logger` for all logging operations
- Docs-Suite: ✅ Ready - Full TypeDoc API documentation available
- NeverHub: ⚠️ Required - Can emit version events to NeverHub event bus for distributed observability
Copyright (c) 2025 Bernier LLC. All rights reserved.