@revealui/contracts 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +160 -0
- package/dist/a2a/index.d.ts +383 -0
- package/dist/a2a/index.d.ts.map +1 -0
- package/dist/a2a/index.js +276 -0
- package/dist/a2a/index.js.map +1 -0
- package/dist/actions/action-validator.d.ts +48 -0
- package/dist/actions/action-validator.d.ts.map +1 -0
- package/dist/actions/action-validator.js +288 -0
- package/dist/actions/action-validator.js.map +1 -0
- package/dist/actions/index.d.ts +7 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +7 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/agents/index.d.ts +628 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +511 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/types.d.ts +22 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/api/auth.d.ts +60 -0
- package/dist/api/auth.d.ts.map +1 -0
- package/dist/api/auth.js +84 -0
- package/dist/api/auth.js.map +1 -0
- package/dist/api/chat.d.ts +45 -0
- package/dist/api/chat.d.ts.map +1 -0
- package/dist/api/chat.js +55 -0
- package/dist/api/chat.js.map +1 -0
- package/dist/api/gdpr.d.ts +39 -0
- package/dist/api/gdpr.d.ts.map +1 -0
- package/dist/api/gdpr.js +53 -0
- package/dist/api/gdpr.js.map +1 -0
- package/dist/cms/collection.d.ts +108 -0
- package/dist/cms/collection.d.ts.map +1 -0
- package/dist/cms/collection.js +144 -0
- package/dist/cms/collection.js.map +1 -0
- package/dist/cms/compat.d.ts +128 -0
- package/dist/cms/compat.d.ts.map +1 -0
- package/dist/cms/compat.js +141 -0
- package/dist/cms/compat.js.map +1 -0
- package/dist/cms/config-contract.d.ts +278 -0
- package/dist/cms/config-contract.d.ts.map +1 -0
- package/dist/cms/config-contract.js +220 -0
- package/dist/cms/config-contract.js.map +1 -0
- package/dist/cms/config.d.ts +351 -0
- package/dist/cms/config.d.ts.map +1 -0
- package/dist/cms/config.js +50 -0
- package/dist/cms/config.js.map +1 -0
- package/dist/cms/errors.d.ts +122 -0
- package/dist/cms/errors.d.ts.map +1 -0
- package/dist/cms/errors.js +163 -0
- package/dist/cms/errors.js.map +1 -0
- package/dist/cms/extensibility.d.ts +211 -0
- package/dist/cms/extensibility.d.ts.map +1 -0
- package/dist/cms/extensibility.js +313 -0
- package/dist/cms/extensibility.js.map +1 -0
- package/dist/cms/field.d.ts +69 -0
- package/dist/cms/field.d.ts.map +1 -0
- package/dist/cms/field.js +94 -0
- package/dist/cms/field.js.map +1 -0
- package/dist/cms/functions.d.ts +466 -0
- package/dist/cms/functions.d.ts.map +1 -0
- package/dist/cms/functions.js +19 -0
- package/dist/cms/functions.js.map +1 -0
- package/dist/cms/global.d.ts +45 -0
- package/dist/cms/global.d.ts.map +1 -0
- package/dist/cms/global.js +62 -0
- package/dist/cms/global.js.map +1 -0
- package/dist/cms/index.d.ts +23 -0
- package/dist/cms/index.d.ts.map +1 -0
- package/dist/cms/index.js +42 -0
- package/dist/cms/index.js.map +1 -0
- package/dist/cms/structure.d.ts +1601 -0
- package/dist/cms/structure.d.ts.map +1 -0
- package/dist/cms/structure.js +757 -0
- package/dist/cms/structure.js.map +1 -0
- package/dist/content/index.d.ts +1542 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +522 -0
- package/dist/content/index.js.map +1 -0
- package/dist/database/bridge.d.ts +177 -0
- package/dist/database/bridge.d.ts.map +1 -0
- package/dist/database/bridge.js +139 -0
- package/dist/database/bridge.js.map +1 -0
- package/dist/database/index.d.ts +8 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +9 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/type-bridge.d.ts +178 -0
- package/dist/database/type-bridge.d.ts.map +1 -0
- package/dist/database/type-bridge.js +154 -0
- package/dist/database/type-bridge.js.map +1 -0
- package/dist/entities/agent-context.d.ts +280 -0
- package/dist/entities/agent-context.d.ts.map +1 -0
- package/dist/entities/agent-context.js +390 -0
- package/dist/entities/agent-context.js.map +1 -0
- package/dist/entities/agent-memory.d.ts +661 -0
- package/dist/entities/agent-memory.d.ts.map +1 -0
- package/dist/entities/agent-memory.js +544 -0
- package/dist/entities/agent-memory.js.map +1 -0
- package/dist/entities/board.d.ts +95 -0
- package/dist/entities/board.d.ts.map +1 -0
- package/dist/entities/board.js +99 -0
- package/dist/entities/board.js.map +1 -0
- package/dist/entities/code-provenance.d.ts +270 -0
- package/dist/entities/code-provenance.d.ts.map +1 -0
- package/dist/entities/code-provenance.js +339 -0
- package/dist/entities/code-provenance.js.map +1 -0
- package/dist/entities/index.d.ts +22 -0
- package/dist/entities/index.d.ts.map +1 -0
- package/dist/entities/index.js +22 -0
- package/dist/entities/index.js.map +1 -0
- package/dist/entities/media.d.ts +485 -0
- package/dist/entities/media.d.ts.map +1 -0
- package/dist/entities/media.js +606 -0
- package/dist/entities/media.js.map +1 -0
- package/dist/entities/page-revision.d.ts +390 -0
- package/dist/entities/page-revision.d.ts.map +1 -0
- package/dist/entities/page-revision.js +406 -0
- package/dist/entities/page-revision.js.map +1 -0
- package/dist/entities/page.d.ts +2349 -0
- package/dist/entities/page.d.ts.map +1 -0
- package/dist/entities/page.js +377 -0
- package/dist/entities/page.js.map +1 -0
- package/dist/entities/post.d.ts +619 -0
- package/dist/entities/post.d.ts.map +1 -0
- package/dist/entities/post.js +555 -0
- package/dist/entities/post.js.map +1 -0
- package/dist/entities/price.d.ts +772 -0
- package/dist/entities/price.d.ts.map +1 -0
- package/dist/entities/price.js +308 -0
- package/dist/entities/price.js.map +1 -0
- package/dist/entities/product.d.ts +753 -0
- package/dist/entities/product.d.ts.map +1 -0
- package/dist/entities/product.js +307 -0
- package/dist/entities/product.js.map +1 -0
- package/dist/entities/session.d.ts +222 -0
- package/dist/entities/session.d.ts.map +1 -0
- package/dist/entities/session.js +253 -0
- package/dist/entities/session.js.map +1 -0
- package/dist/entities/site.d.ts +387 -0
- package/dist/entities/site.d.ts.map +1 -0
- package/dist/entities/site.js +348 -0
- package/dist/entities/site.js.map +1 -0
- package/dist/entities/ticket-comment.d.ts +49 -0
- package/dist/entities/ticket-comment.d.ts.map +1 -0
- package/dist/entities/ticket-comment.js +58 -0
- package/dist/entities/ticket-comment.js.map +1 -0
- package/dist/entities/ticket-label.d.ts +64 -0
- package/dist/entities/ticket-label.d.ts.map +1 -0
- package/dist/entities/ticket-label.js +77 -0
- package/dist/entities/ticket-label.js.map +1 -0
- package/dist/entities/ticket.d.ts +204 -0
- package/dist/entities/ticket.d.ts.map +1 -0
- package/dist/entities/ticket.js +205 -0
- package/dist/entities/ticket.js.map +1 -0
- package/dist/entities/user.d.ts +336 -0
- package/dist/entities/user.d.ts.map +1 -0
- package/dist/entities/user.js +255 -0
- package/dist/entities/user.js.map +1 -0
- package/dist/foundation/contract.d.ts +221 -0
- package/dist/foundation/contract.d.ts.map +1 -0
- package/dist/foundation/contract.js +133 -0
- package/dist/foundation/contract.js.map +1 -0
- package/dist/foundation/index.d.ts +7 -0
- package/dist/foundation/index.d.ts.map +1 -0
- package/dist/foundation/index.js +7 -0
- package/dist/foundation/index.js.map +1 -0
- package/dist/generated/contracts.d.ts +1514 -0
- package/dist/generated/contracts.d.ts.map +1 -0
- package/dist/generated/contracts.js +959 -0
- package/dist/generated/contracts.js.map +1 -0
- package/dist/generated/database.d.ts +48 -0
- package/dist/generated/database.d.ts.map +1 -0
- package/dist/generated/database.js +17 -0
- package/dist/generated/database.js.map +1 -0
- package/dist/generated/zod-schemas.d.ts +14793 -0
- package/dist/generated/zod-schemas.d.ts.map +1 -0
- package/dist/generated/zod-schemas.js +547 -0
- package/dist/generated/zod-schemas.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +81 -0
- package/dist/index.js.map +1 -0
- package/dist/representation/index.d.ts +304 -0
- package/dist/representation/index.d.ts.map +1 -0
- package/dist/representation/index.js +280 -0
- package/dist/representation/index.js.map +1 -0
- package/package.json +117 -0
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PageRevision Entity Contract
|
|
3
|
+
*
|
|
4
|
+
* Manages page version history with content snapshots and change tracking.
|
|
5
|
+
* Revisions are immutable records capturing the state of a page at a specific point in time.
|
|
6
|
+
*
|
|
7
|
+
* Business Rules:
|
|
8
|
+
* - Revisions are immutable (no updates after creation)
|
|
9
|
+
* - Revision numbers auto-increment per page
|
|
10
|
+
* - Content snapshot includes title, blocks, and SEO metadata
|
|
11
|
+
* - Change descriptions are optional but recommended
|
|
12
|
+
* - Cascading deletion when parent page is deleted
|
|
13
|
+
* - createdBy tracks who made the change
|
|
14
|
+
*/
|
|
15
|
+
import { z } from 'zod/v4';
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// Constants
|
|
18
|
+
// =============================================================================
|
|
19
|
+
export const PAGE_REVISION_SCHEMA_VERSION = 1;
|
|
20
|
+
// Change types for categorizing revisions
|
|
21
|
+
export const CHANGE_TYPES = [
|
|
22
|
+
'create',
|
|
23
|
+
'edit',
|
|
24
|
+
'publish',
|
|
25
|
+
'unpublish',
|
|
26
|
+
'archive',
|
|
27
|
+
'restore',
|
|
28
|
+
'reorder',
|
|
29
|
+
'seo_update',
|
|
30
|
+
'block_add',
|
|
31
|
+
'block_remove',
|
|
32
|
+
'block_edit',
|
|
33
|
+
'manual_save',
|
|
34
|
+
];
|
|
35
|
+
// Revision retention policies
|
|
36
|
+
export const REVISION_RETENTION = {
|
|
37
|
+
MAX_REVISIONS_PER_PAGE: 100,
|
|
38
|
+
DAYS_TO_KEEP: 90,
|
|
39
|
+
ALWAYS_KEEP_PUBLISHED: true,
|
|
40
|
+
};
|
|
41
|
+
// =============================================================================
|
|
42
|
+
// Base Schemas
|
|
43
|
+
// =============================================================================
|
|
44
|
+
/**
|
|
45
|
+
* Block schema (simplified, matches Page blocks)
|
|
46
|
+
*/
|
|
47
|
+
export const BlockSchema = z.object({
|
|
48
|
+
id: z.string(),
|
|
49
|
+
type: z.string(),
|
|
50
|
+
data: z.record(z.string(), z.unknown()).optional(),
|
|
51
|
+
});
|
|
52
|
+
/**
|
|
53
|
+
* SEO metadata schema (matches Page seo)
|
|
54
|
+
*/
|
|
55
|
+
export const SeoMetadataSchema = z.object({
|
|
56
|
+
title: z.string().optional(),
|
|
57
|
+
description: z.string().optional(),
|
|
58
|
+
keywords: z.array(z.string()).optional(),
|
|
59
|
+
ogImage: z.string().optional(),
|
|
60
|
+
noIndex: z.boolean().optional(),
|
|
61
|
+
canonicalUrl: z.string().optional(),
|
|
62
|
+
});
|
|
63
|
+
// =============================================================================
|
|
64
|
+
// Base PageRevision Schema
|
|
65
|
+
// =============================================================================
|
|
66
|
+
/**
|
|
67
|
+
* Page Revision object schema
|
|
68
|
+
*/
|
|
69
|
+
export const PageRevisionObjectSchema = z.object({
|
|
70
|
+
id: z.string().min(1),
|
|
71
|
+
pageId: z.string().min(1, 'Page ID is required'),
|
|
72
|
+
createdBy: z.string().nullable().optional(),
|
|
73
|
+
revisionNumber: z.number().int().positive('Revision number must be positive'),
|
|
74
|
+
title: z.string().min(1, 'Title is required'),
|
|
75
|
+
blocks: z.array(BlockSchema).default([]),
|
|
76
|
+
seo: SeoMetadataSchema.nullable().optional(),
|
|
77
|
+
changeDescription: z.string().nullable().optional(),
|
|
78
|
+
createdAt: z.date(),
|
|
79
|
+
});
|
|
80
|
+
/**
|
|
81
|
+
* Page Revision schema with validation rules
|
|
82
|
+
*/
|
|
83
|
+
export const PageRevisionBaseSchema = PageRevisionObjectSchema.refine((data) => {
|
|
84
|
+
// Revision number must be >= 1
|
|
85
|
+
return data.revisionNumber >= 1;
|
|
86
|
+
}, {
|
|
87
|
+
message: 'Revision number must be at least 1',
|
|
88
|
+
path: ['revisionNumber'],
|
|
89
|
+
});
|
|
90
|
+
export const PageRevisionSchema = PageRevisionBaseSchema;
|
|
91
|
+
// =============================================================================
|
|
92
|
+
// Insert Schema
|
|
93
|
+
// =============================================================================
|
|
94
|
+
/**
|
|
95
|
+
* Schema for creating new page revisions
|
|
96
|
+
*/
|
|
97
|
+
export const PageRevisionInsertSchema = PageRevisionObjectSchema.omit({
|
|
98
|
+
createdAt: true,
|
|
99
|
+
}).extend({
|
|
100
|
+
createdAt: z.date().optional(),
|
|
101
|
+
});
|
|
102
|
+
// =============================================================================
|
|
103
|
+
// Revision Number Helpers
|
|
104
|
+
// =============================================================================
|
|
105
|
+
/**
|
|
106
|
+
* Check if this is the first revision
|
|
107
|
+
*/
|
|
108
|
+
export function isFirstRevision(revision) {
|
|
109
|
+
return revision.revisionNumber === 1;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get next revision number
|
|
113
|
+
*/
|
|
114
|
+
export function getNextRevisionNumber(currentRevision) {
|
|
115
|
+
return currentRevision.revisionNumber + 1;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Calculate revision number from count
|
|
119
|
+
*/
|
|
120
|
+
export function calculateRevisionNumber(existingCount) {
|
|
121
|
+
return existingCount + 1;
|
|
122
|
+
}
|
|
123
|
+
// =============================================================================
|
|
124
|
+
// Content Helpers
|
|
125
|
+
// =============================================================================
|
|
126
|
+
/**
|
|
127
|
+
* Count blocks in revision
|
|
128
|
+
*/
|
|
129
|
+
export function getBlockCount(revision) {
|
|
130
|
+
return revision.blocks.length;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Check if revision has blocks
|
|
134
|
+
*/
|
|
135
|
+
export function hasBlocks(revision) {
|
|
136
|
+
return revision.blocks.length > 0;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Check if revision has SEO metadata
|
|
140
|
+
*/
|
|
141
|
+
export function hasSeoMetadata(revision) {
|
|
142
|
+
return revision.seo !== null && revision.seo !== undefined;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Estimate word count from blocks (simplified)
|
|
146
|
+
*/
|
|
147
|
+
export function estimateWordCount(revision) {
|
|
148
|
+
let wordCount = 0;
|
|
149
|
+
// Count words in title
|
|
150
|
+
wordCount += revision.title.split(/\s+/).length;
|
|
151
|
+
// Count words in blocks (rough estimate from JSON)
|
|
152
|
+
for (const block of revision.blocks) {
|
|
153
|
+
if (block.data) {
|
|
154
|
+
const blockText = JSON.stringify(block.data);
|
|
155
|
+
wordCount += blockText.split(/\s+/).length / 2; // Rough estimate
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return Math.floor(wordCount);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get block by ID
|
|
162
|
+
*/
|
|
163
|
+
export function getBlockById(revision, blockId) {
|
|
164
|
+
return revision.blocks.find((block) => block.id === blockId);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get blocks by type
|
|
168
|
+
*/
|
|
169
|
+
export function getBlocksByType(revision, type) {
|
|
170
|
+
return revision.blocks.filter((block) => block.type === type);
|
|
171
|
+
}
|
|
172
|
+
// =============================================================================
|
|
173
|
+
// Change Description Helpers
|
|
174
|
+
// =============================================================================
|
|
175
|
+
/**
|
|
176
|
+
* Check if revision has change description
|
|
177
|
+
*/
|
|
178
|
+
export function hasChangeDescription(revision) {
|
|
179
|
+
return (revision.changeDescription !== null &&
|
|
180
|
+
revision.changeDescription !== undefined &&
|
|
181
|
+
revision.changeDescription.length > 0);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Parse change type from description
|
|
185
|
+
*/
|
|
186
|
+
export function inferChangeType(revision) {
|
|
187
|
+
if (!hasChangeDescription(revision))
|
|
188
|
+
return 'unknown';
|
|
189
|
+
const description = revision.changeDescription?.toLowerCase() ?? '';
|
|
190
|
+
if (description.includes('publish'))
|
|
191
|
+
return 'publish';
|
|
192
|
+
if (description.includes('unpublish'))
|
|
193
|
+
return 'unpublish';
|
|
194
|
+
if (description.includes('archive'))
|
|
195
|
+
return 'archive';
|
|
196
|
+
if (description.includes('restore'))
|
|
197
|
+
return 'restore';
|
|
198
|
+
if (description.includes('seo'))
|
|
199
|
+
return 'seo_update';
|
|
200
|
+
if (description.includes('add') && description.includes('block'))
|
|
201
|
+
return 'block_add';
|
|
202
|
+
if (description.includes('remove') && description.includes('block'))
|
|
203
|
+
return 'block_remove';
|
|
204
|
+
if (description.includes('edit') && description.includes('block'))
|
|
205
|
+
return 'block_edit';
|
|
206
|
+
if (description.includes('create'))
|
|
207
|
+
return 'create';
|
|
208
|
+
if (description.includes('reorder'))
|
|
209
|
+
return 'reorder';
|
|
210
|
+
return 'edit';
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Generate change description
|
|
214
|
+
*/
|
|
215
|
+
export function generateChangeDescription(changeType, details) {
|
|
216
|
+
const descriptions = {
|
|
217
|
+
create: 'Created page',
|
|
218
|
+
edit: 'Edited content',
|
|
219
|
+
publish: 'Published page',
|
|
220
|
+
unpublish: 'Unpublished page',
|
|
221
|
+
archive: 'Archived page',
|
|
222
|
+
restore: 'Restored page',
|
|
223
|
+
reorder: 'Reordered blocks',
|
|
224
|
+
seo_update: 'Updated SEO metadata',
|
|
225
|
+
block_add: 'Added block',
|
|
226
|
+
block_remove: 'Removed block',
|
|
227
|
+
block_edit: 'Edited block',
|
|
228
|
+
manual_save: 'Manual save',
|
|
229
|
+
};
|
|
230
|
+
const baseDescription = descriptions[changeType];
|
|
231
|
+
return details ? `${baseDescription}: ${details}` : baseDescription;
|
|
232
|
+
}
|
|
233
|
+
// =============================================================================
|
|
234
|
+
// Comparison Helpers
|
|
235
|
+
// =============================================================================
|
|
236
|
+
/**
|
|
237
|
+
* Compare two revisions to detect changes
|
|
238
|
+
*/
|
|
239
|
+
export function compareRevisions(oldRevision, newRevision) {
|
|
240
|
+
return {
|
|
241
|
+
titleChanged: oldRevision.title !== newRevision.title,
|
|
242
|
+
blocksChanged: JSON.stringify(oldRevision.blocks) !== JSON.stringify(newRevision.blocks),
|
|
243
|
+
seoChanged: JSON.stringify(oldRevision.seo) !== JSON.stringify(newRevision.seo),
|
|
244
|
+
blockCountChanged: oldRevision.blocks.length !== newRevision.blocks.length,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Detect what changed between revisions
|
|
249
|
+
*/
|
|
250
|
+
export function detectChanges(oldRevision, newRevision) {
|
|
251
|
+
const changes = [];
|
|
252
|
+
const comparison = compareRevisions(oldRevision, newRevision);
|
|
253
|
+
if (comparison.titleChanged) {
|
|
254
|
+
changes.push(`Title: "${oldRevision.title}" → "${newRevision.title}"`);
|
|
255
|
+
}
|
|
256
|
+
if (comparison.blockCountChanged) {
|
|
257
|
+
changes.push(`Blocks: ${oldRevision.blocks.length} → ${newRevision.blocks.length}`);
|
|
258
|
+
}
|
|
259
|
+
if (comparison.seoChanged) {
|
|
260
|
+
changes.push('SEO metadata updated');
|
|
261
|
+
}
|
|
262
|
+
return changes;
|
|
263
|
+
}
|
|
264
|
+
// =============================================================================
|
|
265
|
+
// Age & Timing Helpers
|
|
266
|
+
// =============================================================================
|
|
267
|
+
/**
|
|
268
|
+
* Get revision age in milliseconds
|
|
269
|
+
*/
|
|
270
|
+
export function getRevisionAge(revision) {
|
|
271
|
+
return Date.now() - revision.createdAt.getTime();
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Get revision age in days
|
|
275
|
+
*/
|
|
276
|
+
export function getRevisionAgeInDays(revision) {
|
|
277
|
+
return Math.floor(getRevisionAge(revision) / (1000 * 60 * 60 * 24));
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Check if revision is recent (< 24 hours)
|
|
281
|
+
*/
|
|
282
|
+
export function isRecentRevision(revision, hoursThreshold = 24) {
|
|
283
|
+
const ageInHours = getRevisionAge(revision) / (1000 * 60 * 60);
|
|
284
|
+
return ageInHours < hoursThreshold;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Check if revision is old enough to be cleaned up
|
|
288
|
+
*/
|
|
289
|
+
export function isEligibleForCleanup(revision, daysThreshold = REVISION_RETENTION.DAYS_TO_KEEP) {
|
|
290
|
+
return getRevisionAgeInDays(revision) > daysThreshold;
|
|
291
|
+
}
|
|
292
|
+
// =============================================================================
|
|
293
|
+
// Authorship Helpers
|
|
294
|
+
// =============================================================================
|
|
295
|
+
/**
|
|
296
|
+
* Check if revision has known author
|
|
297
|
+
*/
|
|
298
|
+
export function hasAuthor(revision) {
|
|
299
|
+
return revision.createdBy !== null && revision.createdBy !== undefined;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Check if revision was created by specific user
|
|
303
|
+
*/
|
|
304
|
+
export function isCreatedBy(revision, userId) {
|
|
305
|
+
return revision.createdBy === userId;
|
|
306
|
+
}
|
|
307
|
+
// =============================================================================
|
|
308
|
+
// Revision Creation
|
|
309
|
+
// =============================================================================
|
|
310
|
+
/**
|
|
311
|
+
* Create page revision insert data
|
|
312
|
+
*/
|
|
313
|
+
export function createPageRevisionInsert(pageId, revisionNumber, title, blocks, options) {
|
|
314
|
+
return {
|
|
315
|
+
id: options?.id ?? crypto.randomUUID(),
|
|
316
|
+
pageId,
|
|
317
|
+
revisionNumber,
|
|
318
|
+
title,
|
|
319
|
+
blocks,
|
|
320
|
+
seo: options?.seo ?? null,
|
|
321
|
+
changeDescription: options?.changeDescription ?? null,
|
|
322
|
+
createdBy: options?.createdBy ?? null,
|
|
323
|
+
createdAt: new Date(),
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Create revision from page snapshot
|
|
328
|
+
*/
|
|
329
|
+
export function createRevisionFromSnapshot(pageId, revisionNumber, snapshot, options) {
|
|
330
|
+
const changeDescription = options?.changeDescription ??
|
|
331
|
+
(options?.changeType ? generateChangeDescription(options.changeType) : null);
|
|
332
|
+
return createPageRevisionInsert(pageId, revisionNumber, snapshot.title, snapshot.blocks, {
|
|
333
|
+
seo: snapshot.seo,
|
|
334
|
+
changeDescription,
|
|
335
|
+
createdBy: options?.createdBy,
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Convert page revision to format with computed fields
|
|
340
|
+
*/
|
|
341
|
+
export function pageRevisionToHuman(revision) {
|
|
342
|
+
return {
|
|
343
|
+
...revision,
|
|
344
|
+
_computed: {
|
|
345
|
+
isFirstRevision: isFirstRevision(revision),
|
|
346
|
+
blockCount: getBlockCount(revision),
|
|
347
|
+
hasBlocks: hasBlocks(revision),
|
|
348
|
+
hasSeoMetadata: hasSeoMetadata(revision),
|
|
349
|
+
hasChangeDescription: hasChangeDescription(revision),
|
|
350
|
+
hasAuthor: hasAuthor(revision),
|
|
351
|
+
estimatedWordCount: estimateWordCount(revision),
|
|
352
|
+
ageInDays: getRevisionAgeInDays(revision),
|
|
353
|
+
isRecent: isRecentRevision(revision),
|
|
354
|
+
inferredChangeType: inferChangeType(revision),
|
|
355
|
+
},
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Convert page revision to agent-compatible format
|
|
360
|
+
*/
|
|
361
|
+
export function pageRevisionToAgent(revision) {
|
|
362
|
+
return {
|
|
363
|
+
...revision,
|
|
364
|
+
metadata: {
|
|
365
|
+
revisionNumber: revision.revisionNumber,
|
|
366
|
+
isFirstRevision: isFirstRevision(revision),
|
|
367
|
+
blockCount: getBlockCount(revision),
|
|
368
|
+
wordCount: estimateWordCount(revision),
|
|
369
|
+
hasAuthor: hasAuthor(revision),
|
|
370
|
+
ageMs: getRevisionAge(revision),
|
|
371
|
+
changeType: inferChangeType(revision),
|
|
372
|
+
},
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Zod schema for page revision with computed fields
|
|
377
|
+
*/
|
|
378
|
+
export const PageRevisionWithComputedSchema = PageRevisionSchema.and(z.object({
|
|
379
|
+
_computed: z.object({
|
|
380
|
+
isFirstRevision: z.boolean(),
|
|
381
|
+
blockCount: z.number().int(),
|
|
382
|
+
hasBlocks: z.boolean(),
|
|
383
|
+
hasSeoMetadata: z.boolean(),
|
|
384
|
+
hasChangeDescription: z.boolean(),
|
|
385
|
+
hasAuthor: z.boolean(),
|
|
386
|
+
estimatedWordCount: z.number().int(),
|
|
387
|
+
ageInDays: z.number(),
|
|
388
|
+
isRecent: z.boolean(),
|
|
389
|
+
inferredChangeType: z.enum([...CHANGE_TYPES, 'unknown']),
|
|
390
|
+
}),
|
|
391
|
+
}));
|
|
392
|
+
/**
|
|
393
|
+
* Zod schema for page revision with agent metadata
|
|
394
|
+
*/
|
|
395
|
+
export const PageRevisionAgentSchema = PageRevisionSchema.and(z.object({
|
|
396
|
+
metadata: z.object({
|
|
397
|
+
revisionNumber: z.number().int(),
|
|
398
|
+
isFirstRevision: z.boolean(),
|
|
399
|
+
blockCount: z.number().int(),
|
|
400
|
+
wordCount: z.number().int(),
|
|
401
|
+
hasAuthor: z.boolean(),
|
|
402
|
+
ageMs: z.number(),
|
|
403
|
+
changeType: z.enum([...CHANGE_TYPES, 'unknown']),
|
|
404
|
+
}),
|
|
405
|
+
}));
|
|
406
|
+
//# sourceMappingURL=page-revision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-revision.js","sourceRoot":"","sources":["../../src/entities/page-revision.ts"],"names":[],"mappings":"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"}
|