summaryrefslogtreecommitdiff
path: root/packages/astro/src/assets/utils/remotePattern.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/astro/src/assets/utils/remotePattern.ts')
-rw-r--r--packages/astro/src/assets/utils/remotePattern.ts19
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))
+ );
+}