@prenta/core 2.0.0 → 2.3.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.
Files changed (51) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/api/routes/media.d.ts.map +1 -1
  3. package/dist/api/routes/media.js +73 -104
  4. package/dist/api/routes/media.js.map +1 -1
  5. package/dist/appearance/resolve.js +1 -1
  6. package/dist/appearance/resolve.js.map +1 -1
  7. package/dist/db/model-types.d.ts +67 -26
  8. package/dist/db/model-types.d.ts.map +1 -1
  9. package/dist/generated/browser.d.ts +16 -0
  10. package/dist/generated/client.d.ts +16 -0
  11. package/dist/generated/commonInputTypes.d.ts +30 -0
  12. package/dist/generated/internal/class.d.ts +33 -0
  13. package/dist/generated/internal/class.js +4 -4
  14. package/dist/generated/internal/prismaNamespace.d.ts +294 -1
  15. package/dist/generated/internal/prismaNamespace.js +55 -1
  16. package/dist/generated/internal/prismaNamespaceBrowser.d.ts +60 -0
  17. package/dist/generated/internal/prismaNamespaceBrowser.js +55 -1
  18. package/dist/generated/models/DocumentCRDT.d.ts +1110 -0
  19. package/dist/generated/models/DocumentCRDT.js +1 -0
  20. package/dist/generated/models/DocumentComment.d.ts +1722 -0
  21. package/dist/generated/models/DocumentComment.js +1 -0
  22. package/dist/generated/models/DocumentNotification.d.ts +1289 -0
  23. package/dist/generated/models/DocumentNotification.js +1 -0
  24. package/dist/generated/models/User.d.ts +552 -0
  25. package/dist/generated/models.d.ts +3 -0
  26. package/dist/index.d.ts +5 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +4 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/media/index.d.ts +3 -0
  31. package/dist/media/index.d.ts.map +1 -1
  32. package/dist/media/index.js +2 -0
  33. package/dist/media/index.js.map +1 -1
  34. package/dist/media/optimize.d.ts.map +1 -1
  35. package/dist/media/optimize.js +19 -12
  36. package/dist/media/optimize.js.map +1 -1
  37. package/dist/media/reoptimize.d.ts +61 -0
  38. package/dist/media/reoptimize.d.ts.map +1 -0
  39. package/dist/media/reoptimize.js +380 -0
  40. package/dist/media/reoptimize.js.map +1 -0
  41. package/dist/media/rewrite-urls.d.ts +20 -0
  42. package/dist/media/rewrite-urls.d.ts.map +1 -0
  43. package/dist/media/rewrite-urls.js +92 -0
  44. package/dist/media/rewrite-urls.js.map +1 -0
  45. package/dist/next.d.ts +1 -0
  46. package/dist/next.d.ts.map +1 -1
  47. package/dist/next.js +22 -0
  48. package/dist/next.js.map +1 -1
  49. package/package.json +1 -1
  50. package/prisma/migrations/0013_document_collab_models/migration.sql +68 -0
  51. package/prisma/schema.prisma +66 -5
@@ -0,0 +1,380 @@
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
+ import { rewriteDocumentsForMediaUrl } from './rewrite-urls.js';
21
+ const log = createLogger('media-reoptimize');
22
+ const PRESERVE_FORMATS = new Set(['image/svg+xml', 'image/gif']);
23
+ export class MediaSourceError extends Error {
24
+ constructor(message = 'Could not retrieve the original file for optimization') {
25
+ super(message);
26
+ this.name = 'MediaSourceError';
27
+ }
28
+ }
29
+ export class MediaStoreError extends Error {
30
+ constructor(message = 'Could not store the optimized file. The original is unchanged — check media storage configuration and retry.') {
31
+ super(message);
32
+ this.name = 'MediaStoreError';
33
+ }
34
+ }
35
+ export class MediaOptimizeError extends Error {
36
+ constructor(message) {
37
+ super(message);
38
+ this.name = 'MediaOptimizeError';
39
+ }
40
+ }
41
+ function isFetchableUrl(url) {
42
+ if (!validateWebhookUrl(url).valid)
43
+ return false;
44
+ try {
45
+ return !new URL(url).hostname.toLowerCase().endsWith('.local');
46
+ }
47
+ catch {
48
+ return false;
49
+ }
50
+ }
51
+ function uniqueUrls(...values) {
52
+ const out = [];
53
+ for (const value of values) {
54
+ if (typeof value === 'string' && value.trim() && !out.includes(value))
55
+ out.push(value);
56
+ }
57
+ return out;
58
+ }
59
+ async function importBlobStorage() {
60
+ const mod = '@vercel/' + 'blob';
61
+ return import(/* webpackIgnore: true */ mod);
62
+ }
63
+ export async function fetchMediaBytes(media) {
64
+ const candidates = uniqueUrls(media.storageKey, media.publicUrl);
65
+ const storage = getStorageAdapter();
66
+ if (storage) {
67
+ for (const key of candidates) {
68
+ try {
69
+ const bytes = await storage.download(key);
70
+ if (bytes.byteLength > 0)
71
+ return bytes;
72
+ }
73
+ catch {
74
+ /* try the next candidate / public fetch */
75
+ }
76
+ }
77
+ }
78
+ for (const url of candidates) {
79
+ if (!isFetchableUrl(url))
80
+ continue;
81
+ try {
82
+ const response = await safeFetch(url, {
83
+ method: 'GET',
84
+ timeoutMs: 15000,
85
+ followRedirects: true,
86
+ });
87
+ if (!response.ok)
88
+ continue;
89
+ const bytes = Buffer.from(await response.arrayBuffer());
90
+ if (bytes.byteLength > 0)
91
+ return bytes;
92
+ }
93
+ catch {
94
+ /* try next */
95
+ }
96
+ }
97
+ throw new MediaSourceError();
98
+ }
99
+ export async function storeMediaBytes(key, buffer, mimeType) {
100
+ const storage = getStorageAdapter();
101
+ if (storage) {
102
+ try {
103
+ return await storage.upload(key, buffer, mimeType);
104
+ }
105
+ catch (err) {
106
+ log.error('Storage adapter upload failed during optimize', {
107
+ error: err instanceof Error ? err.message : String(err),
108
+ });
109
+ throw new MediaStoreError();
110
+ }
111
+ }
112
+ try {
113
+ const blob = await importBlobStorage();
114
+ const result = await blob.put(key, buffer, {
115
+ access: 'public',
116
+ contentType: mimeType,
117
+ });
118
+ return result.url;
119
+ }
120
+ catch (err) {
121
+ log.error('Vercel Blob upload failed during optimize', {
122
+ error: err instanceof Error ? err.message : String(err),
123
+ });
124
+ throw new MediaStoreError();
125
+ }
126
+ }
127
+ async function deleteStoredBytes(key) {
128
+ const storage = getStorageAdapter();
129
+ if (storage) {
130
+ try {
131
+ await storage.delete(key);
132
+ }
133
+ catch {
134
+ /* best-effort */
135
+ }
136
+ return;
137
+ }
138
+ try {
139
+ const blob = await importBlobStorage();
140
+ await blob.del(key);
141
+ }
142
+ catch {
143
+ /* best-effort */
144
+ }
145
+ }
146
+ function summary(originalSize, optimizedSize, originalFormat, outputFormat, extra = {}) {
147
+ const savings = originalSize > 0 ? Math.max(0, Math.round((1 - optimizedSize / originalSize) * 100)) : 0;
148
+ return {
149
+ originalSize,
150
+ optimizedSize,
151
+ savings,
152
+ originalFormat,
153
+ outputFormat,
154
+ originalSizeFormatted: formatBytes(originalSize),
155
+ optimizedSizeFormatted: formatBytes(optimizedSize),
156
+ ...extra,
157
+ };
158
+ }
159
+ function needsDimensionWrite(media, next) {
160
+ if (next.width && next.width !== media.width)
161
+ return true;
162
+ if (next.height && next.height !== media.height)
163
+ return true;
164
+ if (next.blurHash && next.blurHash !== media.blurHash)
165
+ return true;
166
+ return false;
167
+ }
168
+ async function persistMetadata(db, media, next) {
169
+ if (!needsDimensionWrite(media, next))
170
+ return media;
171
+ return db.media.update({
172
+ where: { id: media.id },
173
+ data: {
174
+ ...(next.width ? { width: next.width } : {}),
175
+ ...(next.height ? { height: next.height } : {}),
176
+ ...(next.blurHash ? { blurHash: next.blurHash } : {}),
177
+ },
178
+ });
179
+ }
180
+ async function probeAndPersist(db, media, bytes) {
181
+ let meta;
182
+ try {
183
+ meta = await getImageMetadata(bytes);
184
+ }
185
+ catch (err) {
186
+ throw new MediaOptimizeError(err instanceof Error
187
+ ? err.message
188
+ : 'Image metadata probe failed. Add `sharp` as a direct dependency and redeploy.');
189
+ }
190
+ if (!meta?.width && !meta?.height) {
191
+ throw new MediaOptimizeError('Image metadata probe returned no dimensions. Add `sharp` as a direct dependency (`npm install sharp`) and redeploy.');
192
+ }
193
+ const updated = await persistMetadata(db, media, {
194
+ width: meta.width,
195
+ height: meta.height,
196
+ });
197
+ const wrote = updated !== media;
198
+ return {
199
+ status: wrote ? 'probed' : 'unchanged',
200
+ media: updated,
201
+ optimization: summary(bytes.byteLength, bytes.byteLength, media.mimeType, media.mimeType, {
202
+ alreadyOptimized: true,
203
+ probed: wrote,
204
+ }),
205
+ };
206
+ }
207
+ /**
208
+ * Re-encode or probe one media row. Never leaves the record pointing at a
209
+ * dead URL: store failures throw before the row is updated.
210
+ */
211
+ export async function reoptimizeMedia(db, media, options = {}) {
212
+ if (!media.mimeType.startsWith('image/')) {
213
+ return {
214
+ status: 'skipped',
215
+ media,
216
+ optimization: summary(media.fileSize, media.fileSize, media.mimeType, media.mimeType, {
217
+ skipped: true,
218
+ reason: 'not-image',
219
+ alreadyOptimized: true,
220
+ }),
221
+ };
222
+ }
223
+ const bytes = await fetchMediaBytes(media);
224
+ const probeOnly = options.probeOnly === true || PRESERVE_FORMATS.has(media.mimeType);
225
+ if (probeOnly) {
226
+ return probeAndPersist(db, media, bytes);
227
+ }
228
+ // WebP is already the pipeline output. Still probe when dimensions are
229
+ // missing — that is the common leftover from a sharp-less upload.
230
+ if (media.mimeType === 'image/webp' && media.width && media.height) {
231
+ return {
232
+ status: 'unchanged',
233
+ media,
234
+ optimization: summary(bytes.byteLength, bytes.byteLength, media.mimeType, media.mimeType, {
235
+ alreadyOptimized: true,
236
+ }),
237
+ };
238
+ }
239
+ let result;
240
+ try {
241
+ result = await optimizeImage(bytes, media.filename, media.mimeType);
242
+ }
243
+ catch (err) {
244
+ log.warn('Image optimization failed — falling back to a dimension probe', {
245
+ mediaId: media.id,
246
+ error: err instanceof Error ? err.message : String(err),
247
+ });
248
+ try {
249
+ return await probeAndPersist(db, media, bytes);
250
+ }
251
+ catch {
252
+ throw new MediaOptimizeError('Image optimization failed. Add `sharp` as a direct dependency (`npm install sharp`) and redeploy.');
253
+ }
254
+ }
255
+ if (result.savings > 0) {
256
+ const sanitizedName = result.filename.replace(/[^a-zA-Z0-9._-]/g, '_');
257
+ const newKey = `prenta/media/${Date.now()}-${sanitizedName}`;
258
+ const oldKey = media.storageKey;
259
+ const oldUrls = uniqueUrls(oldKey, media.publicUrl);
260
+ const newUrl = await storeMediaBytes(newKey, result.buffer, result.mimeType);
261
+ // Documents store a copy of the public URL. Rewrite those first so the
262
+ // live page never points at a blob we are about to delete.
263
+ await rewriteDocumentsForMediaUrl(db, oldUrls, newUrl, {
264
+ width: result.width || null,
265
+ height: result.height || null,
266
+ });
267
+ const updated = await db.media.update({
268
+ where: { id: media.id },
269
+ data: {
270
+ filename: result.filename,
271
+ storageKey: newUrl,
272
+ publicUrl: newUrl,
273
+ mimeType: result.mimeType,
274
+ fileSize: result.optimizedSize,
275
+ width: result.width || undefined,
276
+ height: result.height || undefined,
277
+ blurHash: result.blurHash ?? undefined,
278
+ contentHash: hashMediaContent(result.buffer),
279
+ },
280
+ });
281
+ await deleteStoredBytes(oldKey);
282
+ return {
283
+ status: 'reencoded',
284
+ media: updated,
285
+ optimization: summary(result.originalSize, result.optimizedSize, media.mimeType, result.mimeType),
286
+ };
287
+ }
288
+ const updated = await persistMetadata(db, media, {
289
+ width: result.width || null,
290
+ height: result.height || null,
291
+ blurHash: result.blurHash ?? null,
292
+ });
293
+ const wrote = updated !== media;
294
+ return {
295
+ status: wrote ? 'probed' : 'unchanged',
296
+ media: updated,
297
+ optimization: summary(result.originalSize, result.optimizedSize, media.mimeType, result.mimeType, {
298
+ alreadyOptimized: true,
299
+ probed: wrote,
300
+ }),
301
+ };
302
+ }
303
+ function shouldScan(media, onlyMissingDimensions) {
304
+ if (!media.mimeType.startsWith('image/'))
305
+ return false;
306
+ if (!onlyMissingDimensions)
307
+ return true;
308
+ return !media.width || !media.height;
309
+ }
310
+ /** Walk image rows and re-run optimize / probe. Idempotent. */
311
+ export async function backfillMediaOptimization(db, options = {}) {
312
+ const dryRun = options.dryRun ?? false;
313
+ const probeOnly = options.probeOnly ?? false;
314
+ const onlyMissingDimensions = options.onlyMissingDimensions ?? false;
315
+ const batchSize = options.batchSize && options.batchSize > 0 ? options.batchSize : 50;
316
+ const result = {
317
+ scanned: 0,
318
+ reencoded: 0,
319
+ probed: 0,
320
+ unchanged: 0,
321
+ skipped: 0,
322
+ failed: 0,
323
+ errors: [],
324
+ };
325
+ let cursor;
326
+ for (;;) {
327
+ const batch = await db.media.findMany({
328
+ where: { deletedAt: null },
329
+ orderBy: { id: 'asc' },
330
+ take: batchSize,
331
+ ...(cursor ? { skip: 1, cursor: { id: cursor } } : {}),
332
+ });
333
+ if (batch.length === 0)
334
+ break;
335
+ cursor = batch[batch.length - 1].id;
336
+ for (const row of batch) {
337
+ if (!shouldScan(row, onlyMissingDimensions)) {
338
+ result.skipped++;
339
+ continue;
340
+ }
341
+ result.scanned++;
342
+ if (dryRun) {
343
+ result.unchanged++;
344
+ continue;
345
+ }
346
+ try {
347
+ const outcome = await reoptimizeMedia(db, row, { probeOnly });
348
+ switch (outcome.status) {
349
+ case 'reencoded':
350
+ result.reencoded++;
351
+ break;
352
+ case 'probed':
353
+ result.probed++;
354
+ break;
355
+ case 'unchanged':
356
+ result.unchanged++;
357
+ break;
358
+ case 'skipped':
359
+ result.skipped++;
360
+ break;
361
+ default: {
362
+ const _never = outcome.status;
363
+ void _never;
364
+ }
365
+ }
366
+ }
367
+ catch (err) {
368
+ result.failed++;
369
+ result.errors.push({
370
+ id: row.id,
371
+ message: err instanceof Error ? err.message : String(err),
372
+ });
373
+ }
374
+ }
375
+ if (batch.length < batchSize)
376
+ break;
377
+ }
378
+ return result;
379
+ }
380
+ //# 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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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Rewrite denormalized media URLs in stored document JSON.
3
+ *
4
+ * Editors persist `{ id, url, alt, width, height }` (and section `imageUrl`
5
+ * strings). Optimizing to WebP uploads a new blob and used to delete the old
6
+ * one without touching those copies — live pages 404'd. Walk document `data`
7
+ * and replace the old URL before the original blob is deleted.
8
+ */
9
+ import type { PrentaDB } from '../db/client-types.js';
10
+ export interface RewriteMediaUrlPatch {
11
+ width?: number | null;
12
+ height?: number | null;
13
+ }
14
+ export declare function rewriteStoredMediaUrls(value: unknown, fromUrl: string, toUrl: string, patch?: RewriteMediaUrlPatch): {
15
+ value: unknown;
16
+ changed: boolean;
17
+ };
18
+ /** Replace `fromUrls` with `toUrl` in every non-deleted document's `data`. */
19
+ export declare function rewriteDocumentsForMediaUrl(db: PrentaDB, fromUrls: string[], toUrl: string, patch?: RewriteMediaUrlPatch): Promise<number>;
20
+ //# sourceMappingURL=rewrite-urls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rewrite-urls.d.ts","sourceRoot":"","sources":["../../src/media/rewrite-urls.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAKrD,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,oBAAoB,GAC3B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CA2CtC;AAED,8EAA8E;AAC9E,wBAAsB,2BAA2B,CAC/C,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,oBAAoB,GAC3B,OAAO,CAAC,MAAM,CAAC,CA0CjB"}
@@ -0,0 +1,92 @@
1
+ const MEDIA_URL_KEYS = new Set(['url', 'publicUrl', 'src', 'imageUrl']);
2
+ const HTML_LIKE = /<\/?[a-z][\s\S]*>/i;
3
+ export function rewriteStoredMediaUrls(value, fromUrl, toUrl, patch) {
4
+ if (!fromUrl || fromUrl === toUrl)
5
+ return { value, changed: false };
6
+ if (typeof value === 'string') {
7
+ if (value === fromUrl)
8
+ return { value: toUrl, changed: true };
9
+ if (HTML_LIKE.test(value) && value.includes(fromUrl)) {
10
+ return { value: value.split(fromUrl).join(toUrl), changed: true };
11
+ }
12
+ return { value, changed: false };
13
+ }
14
+ if (Array.isArray(value)) {
15
+ let changed = false;
16
+ const next = value.map((item) => {
17
+ const rewritten = rewriteStoredMediaUrls(item, fromUrl, toUrl, patch);
18
+ if (rewritten.changed)
19
+ changed = true;
20
+ return rewritten.value;
21
+ });
22
+ return { value: changed ? next : value, changed };
23
+ }
24
+ if (value && typeof value === 'object') {
25
+ const obj = value;
26
+ let changed = false;
27
+ const next = { ...obj };
28
+ for (const [key, nested] of Object.entries(obj)) {
29
+ if (MEDIA_URL_KEYS.has(key) && nested === fromUrl) {
30
+ next[key] = toUrl;
31
+ changed = true;
32
+ if (typeof patch?.width === 'number')
33
+ next.width = patch.width;
34
+ if (typeof patch?.height === 'number')
35
+ next.height = patch.height;
36
+ continue;
37
+ }
38
+ const rewritten = rewriteStoredMediaUrls(nested, fromUrl, toUrl, patch);
39
+ if (rewritten.changed) {
40
+ next[key] = rewritten.value;
41
+ changed = true;
42
+ }
43
+ }
44
+ return { value: changed ? next : value, changed };
45
+ }
46
+ return { value, changed: false };
47
+ }
48
+ /** Replace `fromUrls` with `toUrl` in every non-deleted document's `data`. */
49
+ export async function rewriteDocumentsForMediaUrl(db, fromUrls, toUrl, patch) {
50
+ const uniqueFrom = [...new Set(fromUrls.filter((url) => url && url !== toUrl))];
51
+ if (uniqueFrom.length === 0)
52
+ return 0;
53
+ if (typeof db.document?.findMany !== 'function')
54
+ return 0;
55
+ let rewritten = 0;
56
+ let cursor;
57
+ const batchSize = 100;
58
+ for (;;) {
59
+ const batch = await db.document.findMany({
60
+ where: { deletedAt: null },
61
+ orderBy: { id: 'asc' },
62
+ take: batchSize,
63
+ ...(cursor ? { skip: 1, cursor: { id: cursor } } : {}),
64
+ select: { id: true, data: true },
65
+ });
66
+ if (batch.length === 0)
67
+ break;
68
+ cursor = batch[batch.length - 1].id;
69
+ for (const doc of batch) {
70
+ let data = doc.data;
71
+ let changed = false;
72
+ for (const fromUrl of uniqueFrom) {
73
+ const result = rewriteStoredMediaUrls(data, fromUrl, toUrl, patch);
74
+ if (result.changed) {
75
+ data = result.value;
76
+ changed = true;
77
+ }
78
+ }
79
+ if (!changed)
80
+ continue;
81
+ await db.document.update({
82
+ where: { id: doc.id },
83
+ data: { data: data },
84
+ });
85
+ rewritten++;
86
+ }
87
+ if (batch.length < batchSize)
88
+ break;
89
+ }
90
+ return rewritten;
91
+ }
92
+ //# sourceMappingURL=rewrite-urls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rewrite-urls.js","sourceRoot":"","sources":["../../src/media/rewrite-urls.ts"],"names":[],"mappings":"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"}
package/dist/next.d.ts CHANGED
@@ -19,6 +19,7 @@ export interface WithPrentaCMSOptions {
19
19
  export interface NextConfigLike {
20
20
  serverExternalPackages?: string[];
21
21
  transpilePackages?: string[];
22
+ outputFileTracingIncludes?: Record<string, string[]>;
22
23
  experimental?: unknown;
23
24
  images?: unknown;
24
25
  webpack?: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAGxD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAA;IACjC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACxC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAkFD,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,CAAC,SAAS,cAAc,EACpD,SAAS,EAAE,eAAe,GAAG,oBAAoB,EACjD,UAAU,GAAE,CAAW,GACtB,CAAC,CAmFH;AAED,qEAAqE;AACrE,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
1
+ {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAGxD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAA;IACjC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,yBAAyB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IACpD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACxC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAiGD,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,CAAC,SAAS,cAAc,EACpD,SAAS,EAAE,eAAe,GAAG,oBAAoB,EACjD,UAAU,GAAE,CAAW,GACtB,CAAC,CA+FH;AAED,qEAAqE;AACrE,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
package/dist/next.js CHANGED
@@ -63,6 +63,20 @@ const VERCEL_BLOB_REMOTE_PATTERN = {
63
63
  protocol: 'https',
64
64
  hostname: '**.blob.vercel-storage.com',
65
65
  };
66
+ /**
67
+ * cms-core loads `sharp` via dynamic `import(/* webpackIgnore *\/)`, so Next
68
+ * output-file tracing cannot see it. Vercel then ships the serverless bundle
69
+ * without the native binary even when `sharp` is a direct dependency and
70
+ * listed in `serverExternalPackages`. A bare `import 'sharp'` in the route
71
+ * does not help — Turbopack drops side-effect imports of externals.
72
+ */
73
+ const SHARP_TRACE_GLOBS = [
74
+ './node_modules/sharp/**',
75
+ './node_modules/@img/**',
76
+ './node_modules/detect-libc/**',
77
+ './node_modules/semver/**',
78
+ ];
79
+ const SHARP_TRACE_ROUTES = ['/api/cms/**', '/api/cms/[[...cms]]'];
66
80
  function hasRemotePattern(patterns, hostname) {
67
81
  return patterns.some((pattern) => {
68
82
  return (!!pattern &&
@@ -79,6 +93,13 @@ export function withPrentaCMS(cmsConfig, nextConfig = {}) {
79
93
  const mergedTranspile = [...new Set([...existingTranspile, ...PRENTA_PACKAGES])].filter((pkg) => !mergedExternals.includes(pkg));
80
94
  const existingExperimental = (nextConfig.experimental ?? {});
81
95
  const existingServerActions = (existingExperimental.serverActions ?? {});
96
+ const existingTraceIncludes = (nextConfig.outputFileTracingIncludes ?? {});
97
+ const mergedTraceIncludes = { ...existingTraceIncludes };
98
+ for (const route of SHARP_TRACE_ROUTES) {
99
+ mergedTraceIncludes[route] = [
100
+ ...new Set([...(existingTraceIncludes[route] ?? []), ...SHARP_TRACE_GLOBS]),
101
+ ];
102
+ }
82
103
  const existingImages = (nextConfig.images ?? {});
83
104
  const existingRemotePatterns = (existingImages.remotePatterns ?? []);
84
105
  const remotePatterns = hasRemotePattern(existingRemotePatterns, VERCEL_BLOB_REMOTE_PATTERN.hostname)
@@ -93,6 +114,7 @@ export function withPrentaCMS(cmsConfig, nextConfig = {}) {
93
114
  ...nextConfig,
94
115
  serverExternalPackages: mergedExternals,
95
116
  transpilePackages: mergedTranspile,
117
+ outputFileTracingIncludes: mergedTraceIncludes,
96
118
  experimental: {
97
119
  ...existingExperimental,
98
120
  serverActions: {
package/dist/next.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"next.js","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAA;AA6B7E,MAAM,kBAAkB,GAAG,QAAQ,CAAA;AAEnC;;;;;;;;;;;;GAYG;AACH,MAAM,uBAAuB,GAAG,CAAC,GAAG,8BAA8B,CAAC,CAAA;AAEnE;;;;;;;;;;GAUG;AACH,MAAM,qBAAqB,GAAG;IAC5B,oBAAoB;IACpB,iBAAiB;IACjB,mBAAmB;IACnB,wBAAwB;IACxB,mCAAmC;IACnC,yBAAyB;IACzB,kCAAkC;IAClC,mCAAmC;IACnC,2BAA2B;IAC3B,uBAAuB;CACxB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ,MAAM,qBAAqB,GAAG;IAC5B,cAAc;IACd,OAAO;IACP,MAAM;IACN,IAAI;IACJ,gBAAgB;IAChB,oBAAoB;CACrB,CAAA;AAED,MAAM,eAAe,GAAG;IACtB,eAAe;IACf,yBAAyB;IACzB,sBAAsB;IACtB,oBAAoB;IACpB,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,uBAAuB;IACvB,2BAA2B;IAC3B,0BAA0B;IAC1B,mBAAmB;IACnB,yBAAyB;CAC1B,CAAA;AAED,MAAM,0BAA0B,GAAG;IACjC,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE,4BAA4B;CACvC,CAAA;AAED,SAAS,gBAAgB,CAAC,QAAmB,EAAE,QAAgB;IAC7D,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QAC/B,OAAO,CACL,CAAC,CAAC,OAAO;YACT,OAAO,OAAO,KAAK,QAAQ;YAC1B,OAAmC,CAAC,QAAQ,KAAK,QAAQ,CAC3D,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,aAAa,CAC3B,SAAiD,EACjD,aAAgB,EAAO;IAEvB,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,IAAI,kBAAkB,CAAA;IAC7D,MAAM,iBAAiB,GAAG,UAAU,CAAC,sBAAsB,IAAI,EAAE,CAAA;IACjE,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,iBAAiB,EAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAA;IACtF,MAAM,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,IAAI,EAAE,CAAA;IAC5D,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,iBAAiB,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CACrF,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CACxC,CAAA;IAED,MAAM,oBAAoB,GAAG,CAAC,UAAU,CAAC,YAAY,IAAI,EAAE,CAA4B,CAAA;IACvF,MAAM,qBAAqB,GAAG,CAAC,oBAAoB,CAAC,aAAa,IAAI,EAAE,CAGtE,CAAA;IACD,MAAM,cAAc,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAA4B,CAAA;IAC3E,MAAM,sBAAsB,GAAG,CAAC,cAAc,CAAC,cAAc,IAAI,EAAE,CAAc,CAAA;IACjF,MAAM,cAAc,GAAG,gBAAgB,CACrC,sBAAsB,EACtB,0BAA0B,CAAC,QAAQ,CACpC;QACC,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,CAAC,GAAG,sBAAsB,EAAE,0BAA0B,CAAC,CAAA;IAC3D,MAAM,eAAe,GAAG,UAAU,CAAC,OAKtB,CAAA;IAEb,wEAAwE;IACxE,4EAA4E;IAC5E,sEAAsE;IACtE,qDAAqD;IACrD,MAAM,OAAO,GAAG;QACd,GAAG,UAAU;QACb,sBAAsB,EAAE,eAAe;QACvC,iBAAiB,EAAE,eAAe;QAClC,YAAY,EAAE;YACZ,GAAG,oBAAoB;YACvB,aAAa,EAAE;gBACb,GAAG,qBAAqB;aACzB;SACF;QACD,MAAM,EAAE;YACN,GAAG,cAAc;YACjB,cAAc;SACf;QACD,GAAG,EAAE;YACH,GAAG,UAAU,CAAC,GAAG;YACjB,iBAAiB,EAAE,SAAS;YAC5B,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACtE,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;SAC/D;QACD,4EAA4E;QAC5E,6EAA6E;QAC7E,8EAA8E;QAC9E,4EAA4E;QAC5E,kBAAkB;QAClB,KAAK,CAAC,OAAO;YACX,MAAM,QAAQ,GACZ,OAAO,UAAU,CAAC,OAAO,KAAK,UAAU;gBACtC,CAAC,CAAC,CAAC,CAAC,MAAO,UAAU,CAAC,OAAoC,EAAE,CAAC,IAAI,EAAE,CAAC;gBACpE,CAAC,CAAC,EAAE,CAAA;YACR,OAAO;gBACL,GAAI,QAAsB;gBAC1B,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,uBAAuB,EAAE;gBACvD;oBACE,uEAAuE;oBACvE,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS;oBAChD,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,qCAAqC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;iBACxF;aACF,CAAA;QACH,CAAC;KACG,CAAA;IAEN,IAAI,eAAe,EAAE,CAAC;QACpB,CAAC;QAAC,OAA0B,CAAC,OAAO,GAAG,CACrC,MAA+B,EAC/B,OAAgC,EAChC,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,kBAAkB,CAAA;AAC5D,CAAC"}
1
+ {"version":3,"file":"next.js","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prenta/core",
3
- "version": "2.0.0",
3
+ "version": "2.3.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",