@@ -22,6 +22,7 @@ type GetOptimizeResultProps = {
22
22
cacheMeasurement : ( ) => void
23
23
nonCacheMeasurement : ( ) => void
24
24
errorMeasurement : ( ) => void
25
+ pushInvalidFormatAssets : ( asset : string ) => void
25
26
cliProgressBarIncrement : ( ) => void
26
27
originalFilePath : string
27
28
sharpOptions ?: Config [ 'sharpOptions' ]
@@ -36,6 +37,7 @@ export const getOptimizeResult: GetOptimizeResult = async ({
36
37
cacheMeasurement,
37
38
nonCacheMeasurement,
38
39
errorMeasurement,
40
+ pushInvalidFormatAssets,
39
41
cliProgressBarIncrement,
40
42
originalFilePath,
41
43
output,
@@ -102,13 +104,23 @@ export const getOptimizeResult: GetOptimizeResult = async ({
102
104
cliProgressBarIncrement ( )
103
105
} catch ( error ) {
104
106
console . warn ( error )
107
+ cliProgressBarIncrement ( )
105
108
errorMeasurement ( )
106
109
}
107
110
} else {
108
- console . warn (
109
- `${ originalFilePath } : Not an allowed format.\`${ extension } \`\nGive \`unoptimize\`prop to /next/image to disable optimization.`
110
- )
111
- errorMeasurement ( )
111
+ try {
112
+ const filePath = path . join ( destDir , output )
113
+ await fs . ensureFile ( filePath )
114
+
115
+ await fs . copy ( originalFilePath , filePath )
116
+
117
+ pushInvalidFormatAssets ( originalFilePath )
118
+ cliProgressBarIncrement ( )
119
+ } catch ( error ) {
120
+ console . warn ( error )
121
+ cliProgressBarIncrement ( )
122
+ errorMeasurement ( )
123
+ }
112
124
}
113
125
}
114
126
@@ -137,6 +149,8 @@ export const optimizeImages = async ({ manifestJsonPath, noCache, config, terse
137
149
}
138
150
139
151
if ( ! terse ) {
152
+ // eslint-disable-next-line no-console
153
+ console . log ( `\n- Image Optimization -` )
140
154
cliProgressBarStart ( manifest . length )
141
155
}
142
156
@@ -152,10 +166,12 @@ export const optimizeImages = async ({ manifestJsonPath, noCache, config, terse
152
166
let measuredCache = 0
153
167
let measuredNonCache = 0
154
168
let measuredError = 0
169
+ const invalidFormatAssets = new Set < string > ( [ ] )
155
170
156
171
const cacheMeasurement = ( ) => ( measuredCache += 1 )
157
172
const nonCacheMeasurement = ( ) => ( measuredNonCache += 1 )
158
173
const errorMeasurement = ( ) => ( measuredError += 1 )
174
+ const pushInvalidFormatAssets = ( asset : string ) => invalidFormatAssets . add ( asset )
159
175
160
176
for ( const item of manifest ) {
161
177
const originalFilePath = path . join ( destDir , item . src )
@@ -169,6 +185,7 @@ export const optimizeImages = async ({ manifestJsonPath, noCache, config, terse
169
185
cacheMeasurement,
170
186
nonCacheMeasurement,
171
187
errorMeasurement,
188
+ pushInvalidFormatAssets,
172
189
cliProgressBarIncrement : terse ? ( ) => undefined : cliProgressBarIncrement ,
173
190
originalFilePath,
174
191
sharpOptions : config . sharpOptions ?? { } ,
@@ -185,11 +202,18 @@ export const optimizeImages = async ({ manifestJsonPath, noCache, config, terse
185
202
186
203
if ( ! terse ) {
187
204
// eslint-disable-next-line no-console
188
- console . log (
189
- `Cache assets: ${ measuredCache } , NonCache assets: ${ measuredNonCache } , Error assets: ${ measuredError } \n` ,
190
- '\x1b[35m\nSuccessful optimization!' ,
191
- '\x1b[39m'
192
- )
205
+ console . log ( `Cache assets: ${ measuredCache } , NonCache assets: ${ measuredNonCache } , Error assets: ${ measuredError } ` )
206
+
207
+ if ( invalidFormatAssets . size !== 0 ) {
208
+ // eslint-disable-next-line no-console
209
+ console . log (
210
+ `\nThe following images is in a non-optimized format and a simple copy was applied.\n` ,
211
+ Array . from ( invalidFormatAssets ) . join ( '\n' )
212
+ )
213
+ }
214
+
215
+ // eslint-disable-next-line no-console
216
+ console . log ( '\x1b[35m\nSuccessful optimization!' , '\x1b[39m' )
193
217
}
194
218
}
195
219
0 commit comments