diff options
Diffstat (limited to 'packages/astro/src/assets/utils/remotePattern.ts')
-rw-r--r-- | packages/astro/src/assets/utils/remotePattern.ts | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/packages/astro/src/assets/utils/remotePattern.ts b/packages/astro/src/assets/utils/remotePattern.ts index 7708b42e7..3384e313e 100644 --- a/packages/astro/src/assets/utils/remotePattern.ts +++ b/packages/astro/src/assets/utils/remotePattern.ts @@ -1,3 +1,6 @@ +import { isRemotePath } from '@astrojs/internal-helpers/path'; +import type { AstroConfig } from '../../@types/astro.js'; + export type RemotePattern = { hostname?: string; pathname?: string; @@ -61,3 +64,19 @@ export function matchPathname(url: URL, pathname?: string, allowWildcard?: boole return false; } + +export function isRemoteAllowed( + src: string, + { + domains = [], + remotePatterns = [], + }: Partial<Pick<AstroConfig['image'], 'domains' | 'remotePatterns'>> +): boolean { + if (!isRemotePath(src)) return false; + + const url = new URL(src); + return ( + domains.some((domain) => matchHostname(url, domain)) || + remotePatterns.some((remotePattern) => matchPattern(url, remotePattern)) + ); +} |