-
Notifications
You must be signed in to change notification settings - Fork 28.1k
/
Copy pathimage-config.ts
147 lines (118 loc) · 4.34 KB
/
image-config.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
export const VALID_LOADERS = [
'default',
'imgix',
'cloudinary',
'akamai',
'custom',
] as const
export type LoaderValue = (typeof VALID_LOADERS)[number]
export type ImageLoaderProps = {
src: string
width: number
quality?: number
}
export type ImageLoaderPropsWithConfig = ImageLoaderProps & {
config: Readonly<ImageConfig>
}
export type LocalPattern = {
/**
* Can be literal or wildcard.
* Single `*` matches a single path segment.
* Double `**` matches any number of path segments.
*/
pathname?: string
/**
* Can be literal query string such as `?v=1` or
* empty string meaning no query string.
*/
search?: string
}
export type RemotePattern = {
/**
* Must be `http` or `https`.
*/
protocol?: 'http' | 'https'
/**
* Can be literal or wildcard.
* Single `*` matches a single subdomain.
* Double `**` matches any number of subdomains.
*/
hostname: string
/**
* Can be literal port such as `8080` or empty string
* meaning no port.
*/
port?: string
/**
* Can be literal or wildcard.
* Single `*` matches a single path segment.
* Double `**` matches any number of path segments.
*/
pathname?: string
/**
* Can be literal query string such as `?v=1` or
* empty string meaning no query string.
*/
search?: string
}
type ImageFormat = 'image/avif' | 'image/webp'
/**
* Image configurations
*
* @see [Image configuration options](https://nextjs.org/docs/api-reference/next/image#configuration-options)
*/
export type ImageConfigComplete = {
/** @see [Device sizes documentation](https://nextjs.org/docs/api-reference/next/image#device-sizes) */
deviceSizes: number[]
/** @see [Image sizing documentation](https://nextjs.org/docs/app/building-your-application/optimizing/images#image-sizing) */
imageSizes: number[]
/** @see [Image loaders configuration](https://nextjs.org/docs/api-reference/next/legacy/image#loader) */
loader: LoaderValue
/** @see [Image loader configuration](https://nextjs.org/docs/api-reference/next/legacy/image#loader-configuration) */
path: string
/** @see [Image loader configuration](https://nextjs.org/docs/api-reference/next/image#loader-configuration) */
loaderFile: string
/**
* @deprecated Use `remotePatterns` instead.
*/
domains: string[]
/** @see [Disable static image import configuration](https://nextjs.org/docs/api-reference/next/image#disable-static-imports) */
disableStaticImages: boolean
/** @see [Cache behavior](https://nextjs.org/docs/api-reference/next/image#caching-behavior) */
minimumCacheTTL: number
/** @see [Acceptable formats](https://nextjs.org/docs/api-reference/next/image#acceptable-formats) */
formats: ImageFormat[]
/** @see [Dangerously Allow SVG](https://nextjs.org/docs/api-reference/next/image#dangerously-allow-svg) */
dangerouslyAllowSVG: boolean
/** @see [Dangerously Allow SVG](https://nextjs.org/docs/api-reference/next/image#dangerously-allow-svg) */
contentSecurityPolicy: string
/** @see [Dangerously Allow SVG](https://nextjs.org/docs/api-reference/next/image#dangerously-allow-svg) */
contentDispositionType: 'inline' | 'attachment'
/** @see [Remote Patterns](https://nextjs.org/docs/api-reference/next/image#remotepatterns) */
remotePatterns: Array<URL | RemotePattern>
/** @see [Remote Patterns](https://nextjs.org/docs/api-reference/next/image#localPatterns) */
localPatterns: LocalPattern[] | undefined
/** @see [Qualities](https://nextjs.org/docs/api-reference/next/image#qualities) */
qualities: number[] | undefined
/** @see [Unoptimized](https://nextjs.org/docs/api-reference/next/image#unoptimized) */
unoptimized: boolean
}
export type ImageConfig = Partial<ImageConfigComplete>
export const imageConfigDefault: ImageConfigComplete = {
deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
path: '/_next/image',
loader: 'default',
loaderFile: '',
domains: [],
disableStaticImages: false,
minimumCacheTTL: 60,
formats: ['image/webp'],
dangerouslyAllowSVG: false,
contentSecurityPolicy: `script-src 'none'; frame-src 'none'; sandbox;`,
contentDispositionType: 'attachment',
localPatterns: undefined, // default: allow all local images
remotePatterns: [], // default: allow no remote images
qualities: undefined, // default: allow all qualities
unoptimized: false,
}