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
|
import {
removeLeadingForwardSlash,
removeTrailingForwardSlash,
} from '@astrojs/internal-helpers/path';
import { resolveInjectedRoute } from '../../core/routing/manifest/create.js';
import { getPattern } from '../../core/routing/manifest/pattern.js';
import type { AstroSettings, ManifestData } from '../../types/astro.js';
import type { RouteData } from '../../types/public/internal.js';
export function injectImageEndpoint(
settings: AstroSettings,
manifest: ManifestData,
mode: 'dev' | 'build',
cwd?: string,
) {
manifest.routes.unshift(getImageEndpointData(settings, mode, cwd));
}
export function ensureImageEndpointRoute(
settings: AstroSettings,
manifest: ManifestData,
mode: 'dev' | 'build',
cwd?: string,
) {
if (!manifest.routes.some((route) => route.route === settings.config.image.endpoint.route)) {
manifest.routes.unshift(getImageEndpointData(settings, mode, cwd));
}
}
function getImageEndpointData(
settings: AstroSettings,
mode: 'dev' | 'build',
cwd?: string,
): RouteData {
const endpointEntrypoint =
settings.config.image.endpoint.entrypoint === undefined // If not set, use default endpoint
? mode === 'dev'
? 'astro/assets/endpoint/node'
: 'astro/assets/endpoint/generic'
: settings.config.image.endpoint.entrypoint;
const segments = [
[
{
content: removeTrailingForwardSlash(
removeLeadingForwardSlash(settings.config.image.endpoint.route),
),
dynamic: false,
spread: false,
},
],
];
return {
type: 'endpoint',
isIndex: false,
route: settings.config.image.endpoint.route,
pattern: getPattern(segments, settings.config.base, settings.config.trailingSlash),
segments,
params: [],
component: resolveInjectedRoute(endpointEntrypoint, settings.config.root, cwd).component,
generate: () => '',
pathname: settings.config.image.endpoint.route,
prerender: false,
fallbackRoutes: [],
origin: 'internal',
};
}
|