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
|
import type { LocalImageService } from 'astro';
import { baseService } from 'astro/assets';
import { sharedValidateOptions } from './shared.js';
export const baseDevService: Omit<LocalImageService, 'transform'> = {
...baseService,
validateOptions: (options, serviceOptions) =>
sharedValidateOptions(options, serviceOptions.service.config, 'development'),
getURL(options) {
const fileSrc = typeof options.src === 'string' ? options.src : options.src.src;
const searchParams = new URLSearchParams();
searchParams.append('href', fileSrc);
options.width && searchParams.append('w', options.width.toString());
options.quality && searchParams.append('q', options.quality.toString());
return '/_image?' + searchParams;
},
parseURL(url) {
const params = url.searchParams;
if (!params.has('href')) {
return undefined;
}
const transform = {
src: params.get('href')!,
width: params.has('w') ? Number.parseInt(params.get('w')!) : undefined,
quality: params.get('q'),
};
return transform;
},
};
|