@prenta/core 1.1.1 → 2.2.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/CHANGELOG.md +18 -0
- package/dist/api/handlers.d.ts.map +1 -1
- package/dist/api/handlers.js +0 -2
- package/dist/api/handlers.js.map +1 -1
- package/dist/api/routes/media.d.ts.map +1 -1
- package/dist/api/routes/media.js +73 -104
- package/dist/api/routes/media.js.map +1 -1
- package/dist/api/routes/saved-sections.d.ts.map +1 -1
- package/dist/api/routes/saved-sections.js +20 -300
- package/dist/api/routes/saved-sections.js.map +1 -1
- package/dist/appearance/resolve.js +1 -1
- package/dist/appearance/resolve.js.map +1 -1
- package/dist/collections/presets.d.ts +2 -2
- package/dist/collections/presets.js +2 -2
- package/dist/config/runtime.d.ts +1 -2
- package/dist/config/runtime.d.ts.map +1 -1
- package/dist/config/runtime.js.map +1 -1
- package/dist/config/types.d.ts +0 -3
- package/dist/config/types.d.ts.map +1 -1
- package/dist/db/model-types.d.ts +67 -26
- package/dist/db/model-types.d.ts.map +1 -1
- package/dist/generated/browser.d.ts +16 -0
- package/dist/generated/client.d.ts +16 -0
- package/dist/generated/commonInputTypes.d.ts +30 -0
- package/dist/generated/internal/class.d.ts +33 -0
- package/dist/generated/internal/class.js +4 -4
- package/dist/generated/internal/prismaNamespace.d.ts +294 -1
- package/dist/generated/internal/prismaNamespace.js +55 -1
- package/dist/generated/internal/prismaNamespaceBrowser.d.ts +60 -0
- package/dist/generated/internal/prismaNamespaceBrowser.js +55 -1
- package/dist/generated/models/DocumentCRDT.d.ts +1110 -0
- package/dist/generated/models/DocumentCRDT.js +1 -0
- package/dist/generated/models/DocumentComment.d.ts +1722 -0
- package/dist/generated/models/DocumentComment.js +1 -0
- package/dist/generated/models/DocumentNotification.d.ts +1289 -0
- package/dist/generated/models/DocumentNotification.js +1 -0
- package/dist/generated/models/User.d.ts +552 -0
- package/dist/generated/models.d.ts +3 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/media/index.d.ts +2 -0
- package/dist/media/index.d.ts.map +1 -1
- package/dist/media/index.js +1 -0
- package/dist/media/index.js.map +1 -1
- package/dist/media/optimize.d.ts.map +1 -1
- package/dist/media/optimize.js +19 -12
- package/dist/media/optimize.js.map +1 -1
- package/dist/media/reoptimize.d.ts +61 -0
- package/dist/media/reoptimize.d.ts.map +1 -0
- package/dist/media/reoptimize.js +371 -0
- package/dist/media/reoptimize.js.map +1 -0
- package/dist/sections/index.d.ts +1 -2
- package/dist/sections/index.d.ts.map +1 -1
- package/dist/sections/index.js +1 -2
- package/dist/sections/index.js.map +1 -1
- package/dist/sections/types.d.ts +2 -3
- package/dist/sections/types.d.ts.map +1 -1
- package/dist/sections/types.js +2 -3
- package/dist/sections/types.js.map +1 -1
- package/dist/security/api-key-enhanced.d.ts +2 -2
- package/package.json +1 -6
- package/prisma/migrations/0013_document_collab_models/migration.sql +68 -0
- package/prisma/schema.prisma +66 -5
- package/dist/api/routes/page-templates.d.ts +0 -3
- package/dist/api/routes/page-templates.d.ts.map +0 -1
- package/dist/api/routes/page-templates.js +0 -265
- package/dist/api/routes/page-templates.js.map +0 -1
- package/dist/page-builder/a11y-fix.d.ts +0 -20
- package/dist/page-builder/a11y-fix.d.ts.map +0 -1
- package/dist/page-builder/a11y-fix.js +0 -182
- package/dist/page-builder/a11y-fix.js.map +0 -1
- package/dist/page-builder/ai-pipeline.d.ts +0 -43
- package/dist/page-builder/ai-pipeline.d.ts.map +0 -1
- package/dist/page-builder/ai-pipeline.js +0 -165
- package/dist/page-builder/ai-pipeline.js.map +0 -1
- package/dist/page-builder/blocks.d.ts +0 -27
- package/dist/page-builder/blocks.d.ts.map +0 -1
- package/dist/page-builder/blocks.js +0 -313
- package/dist/page-builder/blocks.js.map +0 -1
- package/dist/page-builder/design-scorer.d.ts +0 -27
- package/dist/page-builder/design-scorer.d.ts.map +0 -1
- package/dist/page-builder/design-scorer.js +0 -612
- package/dist/page-builder/design-scorer.js.map +0 -1
- package/dist/page-builder/index.d.ts +0 -16
- package/dist/page-builder/index.d.ts.map +0 -1
- package/dist/page-builder/index.js +0 -18
- package/dist/page-builder/index.js.map +0 -1
- package/dist/page-builder/schema.d.ts +0 -107
- package/dist/page-builder/schema.d.ts.map +0 -1
- package/dist/page-builder/schema.js +0 -90
- package/dist/page-builder/schema.js.map +0 -1
- package/dist/page-builder/templates.d.ts +0 -9
- package/dist/page-builder/templates.d.ts.map +0 -1
- package/dist/page-builder/templates.js +0 -742
- package/dist/page-builder/templates.js.map +0 -1
- package/dist/page-builder/tree.d.ts +0 -17
- package/dist/page-builder/tree.d.ts.map +0 -1
- package/dist/page-builder/tree.js +0 -160
- package/dist/page-builder/tree.js.map +0 -1
- package/dist/page-builder/types.d.ts +0 -112
- package/dist/page-builder/types.d.ts.map +0 -1
- package/dist/page-builder/types.js +0 -4
- package/dist/page-builder/types.js.map +0 -1
- package/dist/page-builder/validate.d.ts +0 -6
- package/dist/page-builder/validate.d.ts.map +0 -1
- package/dist/page-builder/validate.js +0 -87
- package/dist/page-builder/validate.js.map +0 -1
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-run the image pipeline on an existing media row.
|
|
3
|
+
*
|
|
4
|
+
* Upload already degrades when `sharp` is missing (store original, log a
|
|
5
|
+
* warning, leave width/height null). This module is the recovery path:
|
|
6
|
+
* `POST /media/:id/optimize`, `POST /media/:id/probe`, and
|
|
7
|
+
* `prenta migrate:media-optimize` all go through `reoptimizeMedia`.
|
|
8
|
+
*
|
|
9
|
+
* Fetch and store prefer the registered storage adapter (same as upload).
|
|
10
|
+
* Falling through to a public-URL fetch / `@vercel/blob` keeps hosts that
|
|
11
|
+
* never registered an adapter working. Optimize-only talking to blob while
|
|
12
|
+
* upload used the adapter is what 500'd every `/optimize` on those hosts.
|
|
13
|
+
*/
|
|
14
|
+
import { createLogger } from '../diagnostics/logger.js';
|
|
15
|
+
import { safeFetch } from '../security/safe-fetch.js';
|
|
16
|
+
import { validateWebhookUrl } from '../security/webhook.js';
|
|
17
|
+
import { getStorageAdapter } from '../storage/index.js';
|
|
18
|
+
import { hashMediaContent } from './content-hash.js';
|
|
19
|
+
import { formatBytes, getImageMetadata, optimizeImage } from './optimize.js';
|
|
20
|
+
const log = createLogger('media-reoptimize');
|
|
21
|
+
const PRESERVE_FORMATS = new Set(['image/svg+xml', 'image/gif']);
|
|
22
|
+
export class MediaSourceError extends Error {
|
|
23
|
+
constructor(message = 'Could not retrieve the original file for optimization') {
|
|
24
|
+
super(message);
|
|
25
|
+
this.name = 'MediaSourceError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export class MediaStoreError extends Error {
|
|
29
|
+
constructor(message = 'Could not store the optimized file. The original is unchanged — check media storage configuration and retry.') {
|
|
30
|
+
super(message);
|
|
31
|
+
this.name = 'MediaStoreError';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export class MediaOptimizeError extends Error {
|
|
35
|
+
constructor(message) {
|
|
36
|
+
super(message);
|
|
37
|
+
this.name = 'MediaOptimizeError';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function isFetchableUrl(url) {
|
|
41
|
+
if (!validateWebhookUrl(url).valid)
|
|
42
|
+
return false;
|
|
43
|
+
try {
|
|
44
|
+
return !new URL(url).hostname.toLowerCase().endsWith('.local');
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function uniqueUrls(...values) {
|
|
51
|
+
const out = [];
|
|
52
|
+
for (const value of values) {
|
|
53
|
+
if (typeof value === 'string' && value.trim() && !out.includes(value))
|
|
54
|
+
out.push(value);
|
|
55
|
+
}
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
58
|
+
async function importBlobStorage() {
|
|
59
|
+
const mod = '@vercel/' + 'blob';
|
|
60
|
+
return import(/* webpackIgnore: true */ mod);
|
|
61
|
+
}
|
|
62
|
+
export async function fetchMediaBytes(media) {
|
|
63
|
+
const candidates = uniqueUrls(media.storageKey, media.publicUrl);
|
|
64
|
+
const storage = getStorageAdapter();
|
|
65
|
+
if (storage) {
|
|
66
|
+
for (const key of candidates) {
|
|
67
|
+
try {
|
|
68
|
+
const bytes = await storage.download(key);
|
|
69
|
+
if (bytes.byteLength > 0)
|
|
70
|
+
return bytes;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
/* try the next candidate / public fetch */
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
for (const url of candidates) {
|
|
78
|
+
if (!isFetchableUrl(url))
|
|
79
|
+
continue;
|
|
80
|
+
try {
|
|
81
|
+
const response = await safeFetch(url, {
|
|
82
|
+
method: 'GET',
|
|
83
|
+
timeoutMs: 15000,
|
|
84
|
+
followRedirects: true,
|
|
85
|
+
});
|
|
86
|
+
if (!response.ok)
|
|
87
|
+
continue;
|
|
88
|
+
const bytes = Buffer.from(await response.arrayBuffer());
|
|
89
|
+
if (bytes.byteLength > 0)
|
|
90
|
+
return bytes;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
/* try next */
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
throw new MediaSourceError();
|
|
97
|
+
}
|
|
98
|
+
export async function storeMediaBytes(key, buffer, mimeType) {
|
|
99
|
+
const storage = getStorageAdapter();
|
|
100
|
+
if (storage) {
|
|
101
|
+
try {
|
|
102
|
+
return await storage.upload(key, buffer, mimeType);
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
log.error('Storage adapter upload failed during optimize', {
|
|
106
|
+
error: err instanceof Error ? err.message : String(err),
|
|
107
|
+
});
|
|
108
|
+
throw new MediaStoreError();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
const blob = await importBlobStorage();
|
|
113
|
+
const result = await blob.put(key, buffer, {
|
|
114
|
+
access: 'public',
|
|
115
|
+
contentType: mimeType,
|
|
116
|
+
});
|
|
117
|
+
return result.url;
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
log.error('Vercel Blob upload failed during optimize', {
|
|
121
|
+
error: err instanceof Error ? err.message : String(err),
|
|
122
|
+
});
|
|
123
|
+
throw new MediaStoreError();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async function deleteStoredBytes(key) {
|
|
127
|
+
const storage = getStorageAdapter();
|
|
128
|
+
if (storage) {
|
|
129
|
+
try {
|
|
130
|
+
await storage.delete(key);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
/* best-effort */
|
|
134
|
+
}
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
const blob = await importBlobStorage();
|
|
139
|
+
await blob.del(key);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
/* best-effort */
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function summary(originalSize, optimizedSize, originalFormat, outputFormat, extra = {}) {
|
|
146
|
+
const savings = originalSize > 0 ? Math.max(0, Math.round((1 - optimizedSize / originalSize) * 100)) : 0;
|
|
147
|
+
return {
|
|
148
|
+
originalSize,
|
|
149
|
+
optimizedSize,
|
|
150
|
+
savings,
|
|
151
|
+
originalFormat,
|
|
152
|
+
outputFormat,
|
|
153
|
+
originalSizeFormatted: formatBytes(originalSize),
|
|
154
|
+
optimizedSizeFormatted: formatBytes(optimizedSize),
|
|
155
|
+
...extra,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function needsDimensionWrite(media, next) {
|
|
159
|
+
if (next.width && next.width !== media.width)
|
|
160
|
+
return true;
|
|
161
|
+
if (next.height && next.height !== media.height)
|
|
162
|
+
return true;
|
|
163
|
+
if (next.blurHash && next.blurHash !== media.blurHash)
|
|
164
|
+
return true;
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
async function persistMetadata(db, media, next) {
|
|
168
|
+
if (!needsDimensionWrite(media, next))
|
|
169
|
+
return media;
|
|
170
|
+
return db.media.update({
|
|
171
|
+
where: { id: media.id },
|
|
172
|
+
data: {
|
|
173
|
+
...(next.width ? { width: next.width } : {}),
|
|
174
|
+
...(next.height ? { height: next.height } : {}),
|
|
175
|
+
...(next.blurHash ? { blurHash: next.blurHash } : {}),
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
async function probeAndPersist(db, media, bytes) {
|
|
180
|
+
let meta;
|
|
181
|
+
try {
|
|
182
|
+
meta = await getImageMetadata(bytes);
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
throw new MediaOptimizeError(err instanceof Error
|
|
186
|
+
? err.message
|
|
187
|
+
: 'Image metadata probe failed. Add `sharp` as a direct dependency and redeploy.');
|
|
188
|
+
}
|
|
189
|
+
if (!meta?.width && !meta?.height) {
|
|
190
|
+
throw new MediaOptimizeError('Image metadata probe returned no dimensions. Add `sharp` as a direct dependency (`npm install sharp`) and redeploy.');
|
|
191
|
+
}
|
|
192
|
+
const updated = await persistMetadata(db, media, {
|
|
193
|
+
width: meta.width,
|
|
194
|
+
height: meta.height,
|
|
195
|
+
});
|
|
196
|
+
const wrote = updated !== media;
|
|
197
|
+
return {
|
|
198
|
+
status: wrote ? 'probed' : 'unchanged',
|
|
199
|
+
media: updated,
|
|
200
|
+
optimization: summary(bytes.byteLength, bytes.byteLength, media.mimeType, media.mimeType, {
|
|
201
|
+
alreadyOptimized: true,
|
|
202
|
+
probed: wrote,
|
|
203
|
+
}),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Re-encode or probe one media row. Never leaves the record pointing at a
|
|
208
|
+
* dead URL: store failures throw before the row is updated.
|
|
209
|
+
*/
|
|
210
|
+
export async function reoptimizeMedia(db, media, options = {}) {
|
|
211
|
+
if (!media.mimeType.startsWith('image/')) {
|
|
212
|
+
return {
|
|
213
|
+
status: 'skipped',
|
|
214
|
+
media,
|
|
215
|
+
optimization: summary(media.fileSize, media.fileSize, media.mimeType, media.mimeType, {
|
|
216
|
+
skipped: true,
|
|
217
|
+
reason: 'not-image',
|
|
218
|
+
alreadyOptimized: true,
|
|
219
|
+
}),
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
const bytes = await fetchMediaBytes(media);
|
|
223
|
+
const probeOnly = options.probeOnly === true || PRESERVE_FORMATS.has(media.mimeType);
|
|
224
|
+
if (probeOnly) {
|
|
225
|
+
return probeAndPersist(db, media, bytes);
|
|
226
|
+
}
|
|
227
|
+
// WebP is already the pipeline output. Still probe when dimensions are
|
|
228
|
+
// missing — that is the common leftover from a sharp-less upload.
|
|
229
|
+
if (media.mimeType === 'image/webp' && media.width && media.height) {
|
|
230
|
+
return {
|
|
231
|
+
status: 'unchanged',
|
|
232
|
+
media,
|
|
233
|
+
optimization: summary(bytes.byteLength, bytes.byteLength, media.mimeType, media.mimeType, {
|
|
234
|
+
alreadyOptimized: true,
|
|
235
|
+
}),
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
let result;
|
|
239
|
+
try {
|
|
240
|
+
result = await optimizeImage(bytes, media.filename, media.mimeType);
|
|
241
|
+
}
|
|
242
|
+
catch (err) {
|
|
243
|
+
log.warn('Image optimization failed — falling back to a dimension probe', {
|
|
244
|
+
mediaId: media.id,
|
|
245
|
+
error: err instanceof Error ? err.message : String(err),
|
|
246
|
+
});
|
|
247
|
+
try {
|
|
248
|
+
return await probeAndPersist(db, media, bytes);
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
throw new MediaOptimizeError('Image optimization failed. Add `sharp` as a direct dependency (`npm install sharp`) and redeploy.');
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
if (result.savings > 0) {
|
|
255
|
+
const sanitizedName = result.filename.replace(/[^a-zA-Z0-9._-]/g, '_');
|
|
256
|
+
const newKey = `prenta/media/${Date.now()}-${sanitizedName}`;
|
|
257
|
+
const newUrl = await storeMediaBytes(newKey, result.buffer, result.mimeType);
|
|
258
|
+
await deleteStoredBytes(media.storageKey);
|
|
259
|
+
const updated = await db.media.update({
|
|
260
|
+
where: { id: media.id },
|
|
261
|
+
data: {
|
|
262
|
+
filename: result.filename,
|
|
263
|
+
storageKey: newUrl,
|
|
264
|
+
publicUrl: newUrl,
|
|
265
|
+
mimeType: result.mimeType,
|
|
266
|
+
fileSize: result.optimizedSize,
|
|
267
|
+
width: result.width || undefined,
|
|
268
|
+
height: result.height || undefined,
|
|
269
|
+
blurHash: result.blurHash ?? undefined,
|
|
270
|
+
contentHash: hashMediaContent(result.buffer),
|
|
271
|
+
},
|
|
272
|
+
});
|
|
273
|
+
return {
|
|
274
|
+
status: 'reencoded',
|
|
275
|
+
media: updated,
|
|
276
|
+
optimization: summary(result.originalSize, result.optimizedSize, media.mimeType, result.mimeType),
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
const updated = await persistMetadata(db, media, {
|
|
280
|
+
width: result.width || null,
|
|
281
|
+
height: result.height || null,
|
|
282
|
+
blurHash: result.blurHash ?? null,
|
|
283
|
+
});
|
|
284
|
+
const wrote = updated !== media;
|
|
285
|
+
return {
|
|
286
|
+
status: wrote ? 'probed' : 'unchanged',
|
|
287
|
+
media: updated,
|
|
288
|
+
optimization: summary(result.originalSize, result.optimizedSize, media.mimeType, result.mimeType, {
|
|
289
|
+
alreadyOptimized: true,
|
|
290
|
+
probed: wrote,
|
|
291
|
+
}),
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
function shouldScan(media, onlyMissingDimensions) {
|
|
295
|
+
if (!media.mimeType.startsWith('image/'))
|
|
296
|
+
return false;
|
|
297
|
+
if (!onlyMissingDimensions)
|
|
298
|
+
return true;
|
|
299
|
+
return !media.width || !media.height;
|
|
300
|
+
}
|
|
301
|
+
/** Walk image rows and re-run optimize / probe. Idempotent. */
|
|
302
|
+
export async function backfillMediaOptimization(db, options = {}) {
|
|
303
|
+
const dryRun = options.dryRun ?? false;
|
|
304
|
+
const probeOnly = options.probeOnly ?? false;
|
|
305
|
+
const onlyMissingDimensions = options.onlyMissingDimensions ?? false;
|
|
306
|
+
const batchSize = options.batchSize && options.batchSize > 0 ? options.batchSize : 50;
|
|
307
|
+
const result = {
|
|
308
|
+
scanned: 0,
|
|
309
|
+
reencoded: 0,
|
|
310
|
+
probed: 0,
|
|
311
|
+
unchanged: 0,
|
|
312
|
+
skipped: 0,
|
|
313
|
+
failed: 0,
|
|
314
|
+
errors: [],
|
|
315
|
+
};
|
|
316
|
+
let cursor;
|
|
317
|
+
for (;;) {
|
|
318
|
+
const batch = await db.media.findMany({
|
|
319
|
+
where: { deletedAt: null },
|
|
320
|
+
orderBy: { id: 'asc' },
|
|
321
|
+
take: batchSize,
|
|
322
|
+
...(cursor ? { skip: 1, cursor: { id: cursor } } : {}),
|
|
323
|
+
});
|
|
324
|
+
if (batch.length === 0)
|
|
325
|
+
break;
|
|
326
|
+
cursor = batch[batch.length - 1].id;
|
|
327
|
+
for (const row of batch) {
|
|
328
|
+
if (!shouldScan(row, onlyMissingDimensions)) {
|
|
329
|
+
result.skipped++;
|
|
330
|
+
continue;
|
|
331
|
+
}
|
|
332
|
+
result.scanned++;
|
|
333
|
+
if (dryRun) {
|
|
334
|
+
result.unchanged++;
|
|
335
|
+
continue;
|
|
336
|
+
}
|
|
337
|
+
try {
|
|
338
|
+
const outcome = await reoptimizeMedia(db, row, { probeOnly });
|
|
339
|
+
switch (outcome.status) {
|
|
340
|
+
case 'reencoded':
|
|
341
|
+
result.reencoded++;
|
|
342
|
+
break;
|
|
343
|
+
case 'probed':
|
|
344
|
+
result.probed++;
|
|
345
|
+
break;
|
|
346
|
+
case 'unchanged':
|
|
347
|
+
result.unchanged++;
|
|
348
|
+
break;
|
|
349
|
+
case 'skipped':
|
|
350
|
+
result.skipped++;
|
|
351
|
+
break;
|
|
352
|
+
default: {
|
|
353
|
+
const _never = outcome.status;
|
|
354
|
+
void _never;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
catch (err) {
|
|
359
|
+
result.failed++;
|
|
360
|
+
result.errors.push({
|
|
361
|
+
id: row.id,
|
|
362
|
+
message: err instanceof Error ? err.message : String(err),
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
if (batch.length < batchSize)
|
|
367
|
+
break;
|
|
368
|
+
}
|
|
369
|
+
return result;
|
|
370
|
+
}
|
|
371
|
+
//# sourceMappingURL=reoptimize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reoptimize.js","sourceRoot":"","sources":["../../src/media/reoptimize.ts"],"names":[],"mappings":"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"}
|
package/dist/sections/index.d.ts
CHANGED
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
* the REST API, and the MCP server.
|
|
4
4
|
*
|
|
5
5
|
* Exposed as the `@prenta/core/page-sections` subpath (NOT the
|
|
6
|
-
* package root)
|
|
7
|
-
* which already exports `SectionSettings` / `createSection` from the root.
|
|
6
|
+
* package root) so section types stay a dedicated public contract.
|
|
8
7
|
*/
|
|
9
8
|
export { SECTION_TYPES, SECTION_TYPE_LIST, getSectionType, getSectionTypesForScope, getAllSectionTypes, sectionTypeLabel, isKnownSectionType, registerSectionTypes, resetCustomSectionTypes, resolveCustomSectionTypes, } from './registry.js';
|
|
10
9
|
export { generateSectionId, createSection, buildSection, addSection, removeSection, duplicateSection, toggleSectionVisibility, setSectionVisibility, moveSection, reorderSections, updateSectionContent, getContentAtPath, setContentAtPath, updateSectionContentAtPath, updateSectionSettings, updateSectionMeta, coerceSections, coerceSectionsWithReport, UnknownSectionTypeError, type CoerceSectionsOptions, type CoerceSectionsReport, type UnknownSectionStrategy, type UnknownSectionRef, defaultPostHeader, coercePostHeader, computeReadingTime, createPostTemplate, coercePostTemplate, } from './helpers.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sections/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sections/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,0BAA0B,EAC1B,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,wBAAwB,EACxB,uBAAuB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEhG,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAEtD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,KAAK,gBAAgB,EACrB,KAAK,WAAW,GACjB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAErE,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAC7F,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAC7F,YAAY,EACV,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,EACX,aAAa,GACd,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,kCAAkC,GACnC,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAEjG,YAAY,EACV,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,gBAAgB,GACtB,MAAM,yBAAyB,CAAA"}
|
package/dist/sections/index.js
CHANGED
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
* the REST API, and the MCP server.
|
|
4
4
|
*
|
|
5
5
|
* Exposed as the `@prenta/core/page-sections` subpath (NOT the
|
|
6
|
-
* package root)
|
|
7
|
-
* which already exports `SectionSettings` / `createSection` from the root.
|
|
6
|
+
* package root) so section types stay a dedicated public contract.
|
|
8
7
|
*/
|
|
9
8
|
export { SECTION_TYPES, SECTION_TYPE_LIST, getSectionType, getSectionTypesForScope, getAllSectionTypes, sectionTypeLabel, isKnownSectionType, registerSectionTypes, resetCustomSectionTypes, resolveCustomSectionTypes, } from './registry.js';
|
|
10
9
|
export { generateSectionId, createSection, buildSection, addSection, removeSection, duplicateSection, toggleSectionVisibility, setSectionVisibility, moveSection, reorderSections, updateSectionContent, getContentAtPath, setContentAtPath, updateSectionContentAtPath, updateSectionSettings, updateSectionMeta, coerceSections, coerceSectionsWithReport, UnknownSectionTypeError, defaultPostHeader, coercePostHeader, computeReadingTime, createPostTemplate, coercePostTemplate, } from './helpers.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sections/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sections/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,0BAA0B,EAC1B,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,wBAAwB,EACxB,uBAAuB,EAKvB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEhG,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAEtD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,aAAa,GAGd,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAErE,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAG7F,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAS7F,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,kCAAkC,GACnC,MAAM,mBAAmB,CAAA;AAmB1B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GAEjB,MAAM,yBAAyB,CAAA"}
|
package/dist/sections/types.d.ts
CHANGED
|
@@ -13,9 +13,8 @@
|
|
|
13
13
|
* This module lives in `cms-core` (not `cms-admin`) so the admin editor,
|
|
14
14
|
* the REST API, and the MCP server all validate against ONE definition.
|
|
15
15
|
*
|
|
16
|
-
* NOTE:
|
|
17
|
-
*
|
|
18
|
-
* node tree; this one is a flat list of named, schema-driven sections.
|
|
16
|
+
* NOTE: leftover page-builder `_layout` trees still compile to this
|
|
17
|
+
* model via `layoutTreeToSections`. New pages are `data.sections` only.
|
|
19
18
|
*/
|
|
20
19
|
/**
|
|
21
20
|
* Stable ids for the built-in section types.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sections/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sections/types.ts"],"names":[],"mappings":"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"}
|
package/dist/sections/types.js
CHANGED
|
@@ -13,9 +13,8 @@
|
|
|
13
13
|
* This module lives in `cms-core` (not `cms-admin`) so the admin editor,
|
|
14
14
|
* the REST API, and the MCP server all validate against ONE definition.
|
|
15
15
|
*
|
|
16
|
-
* NOTE:
|
|
17
|
-
*
|
|
18
|
-
* node tree; this one is a flat list of named, schema-driven sections.
|
|
16
|
+
* NOTE: leftover page-builder `_layout` trees still compile to this
|
|
17
|
+
* model via `layoutTreeToSections`. New pages are `data.sections` only.
|
|
19
18
|
*/
|
|
20
19
|
export {};
|
|
21
20
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sections/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sections/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
|
|
@@ -24,8 +24,8 @@ export interface ApiKeyScope {
|
|
|
24
24
|
/** When true, the key can upload/manage media. */
|
|
25
25
|
media?: boolean;
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
27
|
+
* Legacy scope flag. `/page-builder/*` endpoints are retired; the field
|
|
28
|
+
* remains so existing API keys still parse. Prefer collection/admin scopes.
|
|
29
29
|
*/
|
|
30
30
|
pageBuilder?: boolean;
|
|
31
31
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prenta/core",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -120,11 +120,6 @@
|
|
|
120
120
|
"import": "./dist/auth/roles.js",
|
|
121
121
|
"default": "./dist/auth/roles.js"
|
|
122
122
|
},
|
|
123
|
-
"./page-builder": {
|
|
124
|
-
"types": "./dist/page-builder/index.d.ts",
|
|
125
|
-
"import": "./dist/page-builder/index.js",
|
|
126
|
-
"default": "./dist/page-builder/index.js"
|
|
127
|
-
},
|
|
128
123
|
"./page-sections": {
|
|
129
124
|
"types": "./dist/sections/index.d.ts",
|
|
130
125
|
"import": "./dist/sections/index.js",
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
-- Collab / comments / notifications models that cms-core already queries
|
|
2
|
+
-- (#729). Hosts that declared these by hand keep their data; IF NOT EXISTS
|
|
3
|
+
-- lets migrate deploy succeed when the unmapped tables already exist under
|
|
4
|
+
-- Prisma's default names — those hosts should rename onto the prenta_* maps
|
|
5
|
+
-- in a follow-up if they still use the old names.
|
|
6
|
+
|
|
7
|
+
CREATE TABLE IF NOT EXISTS "prenta_document_crdts" (
|
|
8
|
+
"documentId" TEXT NOT NULL,
|
|
9
|
+
"state" BYTEA NOT NULL,
|
|
10
|
+
"stateVector" BYTEA NOT NULL,
|
|
11
|
+
"version" INTEGER NOT NULL DEFAULT 0,
|
|
12
|
+
"lastUpdatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
13
|
+
"lastUpdatedById" TEXT,
|
|
14
|
+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
15
|
+
|
|
16
|
+
CONSTRAINT "prenta_document_crdts_pkey" PRIMARY KEY ("documentId")
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
CREATE INDEX IF NOT EXISTS "prenta_document_crdts_lastUpdatedAt_idx" ON "prenta_document_crdts"("lastUpdatedAt");
|
|
20
|
+
|
|
21
|
+
CREATE TABLE IF NOT EXISTS "prenta_document_comments" (
|
|
22
|
+
"id" TEXT NOT NULL,
|
|
23
|
+
"documentId" TEXT NOT NULL,
|
|
24
|
+
"parentId" TEXT,
|
|
25
|
+
"userId" TEXT,
|
|
26
|
+
"body" TEXT NOT NULL,
|
|
27
|
+
"anchor" JSONB,
|
|
28
|
+
"resolvedAt" TIMESTAMP(3),
|
|
29
|
+
"resolvedById" TEXT,
|
|
30
|
+
"deletedAt" TIMESTAMP(3),
|
|
31
|
+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
32
|
+
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
33
|
+
|
|
34
|
+
CONSTRAINT "prenta_document_comments_pkey" PRIMARY KEY ("id")
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
CREATE INDEX IF NOT EXISTS "prenta_document_comments_documentId_idx" ON "prenta_document_comments"("documentId");
|
|
38
|
+
CREATE INDEX IF NOT EXISTS "prenta_document_comments_documentId_resolvedAt_idx" ON "prenta_document_comments"("documentId", "resolvedAt");
|
|
39
|
+
CREATE INDEX IF NOT EXISTS "prenta_document_comments_parentId_idx" ON "prenta_document_comments"("parentId");
|
|
40
|
+
CREATE INDEX IF NOT EXISTS "prenta_document_comments_userId_idx" ON "prenta_document_comments"("userId");
|
|
41
|
+
CREATE INDEX IF NOT EXISTS "prenta_document_comments_createdAt_idx" ON "prenta_document_comments"("createdAt");
|
|
42
|
+
|
|
43
|
+
ALTER TABLE "prenta_document_comments" DROP CONSTRAINT IF EXISTS "prenta_document_comments_parentId_fkey";
|
|
44
|
+
ALTER TABLE "prenta_document_comments" ADD CONSTRAINT "prenta_document_comments_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "prenta_document_comments"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
45
|
+
|
|
46
|
+
ALTER TABLE "prenta_document_comments" DROP CONSTRAINT IF EXISTS "prenta_document_comments_userId_fkey";
|
|
47
|
+
ALTER TABLE "prenta_document_comments" ADD CONSTRAINT "prenta_document_comments_userId_fkey" FOREIGN KEY ("userId") REFERENCES "prenta_users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
48
|
+
|
|
49
|
+
CREATE TABLE IF NOT EXISTS "prenta_document_notifications" (
|
|
50
|
+
"id" TEXT NOT NULL,
|
|
51
|
+
"userId" TEXT NOT NULL,
|
|
52
|
+
"kind" TEXT NOT NULL,
|
|
53
|
+
"documentId" TEXT,
|
|
54
|
+
"commentId" TEXT,
|
|
55
|
+
"payload" JSONB NOT NULL,
|
|
56
|
+
"readAt" TIMESTAMP(3),
|
|
57
|
+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
58
|
+
|
|
59
|
+
CONSTRAINT "prenta_document_notifications_pkey" PRIMARY KEY ("id")
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
CREATE INDEX IF NOT EXISTS "prenta_document_notifications_userId_readAt_idx" ON "prenta_document_notifications"("userId", "readAt");
|
|
63
|
+
CREATE INDEX IF NOT EXISTS "prenta_document_notifications_userId_createdAt_idx" ON "prenta_document_notifications"("userId", "createdAt");
|
|
64
|
+
CREATE INDEX IF NOT EXISTS "prenta_document_notifications_documentId_idx" ON "prenta_document_notifications"("documentId");
|
|
65
|
+
CREATE INDEX IF NOT EXISTS "prenta_document_notifications_commentId_idx" ON "prenta_document_notifications"("commentId");
|
|
66
|
+
|
|
67
|
+
ALTER TABLE "prenta_document_notifications" DROP CONSTRAINT IF EXISTS "prenta_document_notifications_userId_fkey";
|
|
68
|
+
ALTER TABLE "prenta_document_notifications" ADD CONSTRAINT "prenta_document_notifications_userId_fkey" FOREIGN KEY ("userId") REFERENCES "prenta_users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|