1
+ /**
2
+ * Server-only Prismic image utilities
3
+ * These functions use Node.js APIs and can only run on the server
4
+ */
1
5
import type { BlogPageDocument , ExchangeDocument , NavigationDocument , PageDocument } from '~~/prismicio-types'
2
6
import { filter } from '@prismicio/client'
3
7
import consola from 'consola'
@@ -16,67 +20,7 @@ export interface ImageInfo {
16
20
17
21
const IMAGE_FOLDER = 'assets/images/prismic'
18
22
19
- // Transform Prismic URL to local URL
20
- export function transformImageUrl ( baseUrl : string , url : string ) : string {
21
- if ( ! url ?. includes ( 'prismic' ) )
22
- return url
23
-
24
- const fileName = normalizeFileName ( url . split ( '/' ) . pop ( ) || 'image' )
25
- return `${ baseUrl . replace ( / \/ $ / , '' ) } /${ IMAGE_FOLDER } /${ fileName } `
26
- }
27
-
28
- // Transform image field with responsive variants
29
- export function transformImageField ( baseUrl : string , field : any ) : any {
30
- const transformed = { ...field }
31
-
32
- if ( field . url ) {
33
- transformed . url = transformImageUrl ( baseUrl , field . url )
34
- }
35
-
36
- // Handle responsive variants
37
- const responsiveViews = [ 'Lg' , 'Md' , 'Sm' , 'Xs' ] as const
38
- for ( const view of responsiveViews ) {
39
- const variant = ( field as any ) [ view ]
40
- if ( variant ?. url ) {
41
- ( transformed as any ) [ view ] = {
42
- ...variant ,
43
- url : transformImageUrl ( baseUrl , variant . url ) ,
44
- }
45
- }
46
- }
47
-
48
- return transformed
49
- }
50
-
51
- // Generate srcSet from transformed field
52
- export function generateSrcSet ( field : any , widths ?: number [ ] | string ) : { src : string , srcSet : string } {
53
- const defaultWidths = [ 640 , 768 , 1024 , 1280 , 1536 ]
54
- const _targetWidths = widths || defaultWidths
55
-
56
- const src = field . url || ''
57
- const srcSetEntries : string [ ] = [ ]
58
-
59
- // Add main image
60
- if ( src && field . dimensions ?. width ) {
61
- srcSetEntries . push ( `${ src } ${ field . dimensions . width } w` )
62
- }
63
-
64
- // Add responsive variants
65
- const responsiveViews = [ 'Xs' , 'Sm' , 'Md' , 'Lg' ] as const
66
- for ( const view of responsiveViews ) {
67
- const variant = ( field as any ) [ view ]
68
- if ( variant ?. url && variant . dimensions ?. width ) {
69
- srcSetEntries . push ( `${ variant . url } ${ variant . dimensions . width } w` )
70
- }
71
- }
72
-
73
- return {
74
- src,
75
- srcSet : srcSetEntries . join ( ', ' ) ,
76
- }
77
- }
78
-
79
- // Extract all images from Prismic document
23
+ // Extract all images from Prismic document (server-only)
80
24
export function extractImagesFromDocument ( baseUrl : string , document : any ) : ImageInfo [ ] {
81
25
const images : ImageInfo [ ] = [ ]
82
26
@@ -152,7 +96,7 @@ function normalizeFileName(fileName: string): string {
152
96
. replace ( / ^ _ + | _ + $ / g, '' ) || 'image'
153
97
}
154
98
155
- // Fetch all Prismic data and extract images
99
+ // Fetch all Prismic data and extract images (server-only)
156
100
export async function fetchPrismicImages ( prismicAccessToken : string , showDrafts = false ) : Promise < ImageInfo [ ] > {
157
101
consola . info ( '🌐 Fetching Prismic data...' )
158
102
@@ -183,7 +127,7 @@ export async function fetchPrismicImages(prismicAccessToken: string, showDrafts
183
127
return uniqueImages
184
128
}
185
129
186
- // Download missing images
130
+ // Download missing images (server-only)
187
131
export async function downloadMissingImages ( images : ImageInfo [ ] ) : Promise < void > {
188
132
if ( import . meta. client )
189
133
return
@@ -271,7 +215,7 @@ async function findMissingImages(images: ImageInfo[]): Promise<ImageInfo[]> {
271
215
}
272
216
}
273
217
274
- // Prismic API helpers
218
+ // Prismic API helpers (server-only)
275
219
async function fetchDocuments < T > (
276
220
documentType : string ,
277
221
prismicAccessToken : string ,
@@ -306,7 +250,7 @@ async function fetchDocument<T>(
306
250
return response . results [ 0 ] || null
307
251
}
308
252
catch ( error ) {
309
- console . warn ( `⚠️ Failed to fetch ${ documentType } :` , error )
253
+ consola . warn ( `⚠️ Failed to fetch ${ documentType } :` , error )
310
254
return null
311
255
}
312
256
}
0 commit comments