diff --git a/.changeset/tough-spiders-wish.md b/.changeset/tough-spiders-wish.md new file mode 100644 index 000000000000..d83fd11f2991 --- /dev/null +++ b/.changeset/tough-spiders-wish.md @@ -0,0 +1,6 @@ +--- +'@astrojs/cloudflare': patch +--- + +Updates assets handling to use `@astrojs/internal-helpers` + diff --git a/packages/integrations/cloudflare/src/utils/assets.ts b/packages/integrations/cloudflare/src/utils/assets.ts index 4b784f865a98..39e0b6e36d5f 100644 --- a/packages/integrations/cloudflare/src/utils/assets.ts +++ b/packages/integrations/cloudflare/src/utils/assets.ts @@ -1,64 +1,10 @@ import { isRemotePath } from '@astrojs/internal-helpers/path'; -import type { AstroConfig, RemotePattern } from 'astro'; +import { + matchHostname, + matchPattern, +} from '@astrojs/internal-helpers/remote'; +import type { AstroConfig } from 'astro'; -function matchHostname(url: URL, hostname?: string, allowWildcard?: boolean) { - if (!hostname) { - return true; - } - if (!allowWildcard || !hostname.startsWith('*')) { - return hostname === url.hostname; - } - if (hostname.startsWith('**.')) { - const slicedHostname = hostname.slice(2); // ** length - return slicedHostname !== url.hostname && url.hostname.endsWith(slicedHostname); - } - if (hostname.startsWith('*.')) { - const slicedHostname = hostname.slice(1); // * length - const additionalSubdomains = url.hostname - .replace(slicedHostname, '') - .split('.') - .filter(Boolean); - return additionalSubdomains.length === 1; - } - - return false; -} -function matchPort(url: URL, port?: string) { - return !port || port === url.port; -} -function matchProtocol(url: URL, protocol?: string) { - return !protocol || protocol === url.protocol.slice(0, -1); -} -function matchPathname(url: URL, pathname?: string, allowWildcard?: boolean) { - if (!pathname) { - return true; - } - if (!allowWildcard || !pathname.endsWith('*')) { - return pathname === url.pathname; - } - if (pathname.endsWith('/**')) { - const slicedPathname = pathname.slice(0, -2); // ** length - return slicedPathname !== url.pathname && url.pathname.startsWith(slicedPathname); - } - if (pathname.endsWith('/*')) { - const slicedPathname = pathname.slice(0, -1); // * length - const additionalPathChunks = url.pathname - .replace(slicedPathname, '') - .split('/') - .filter(Boolean); - return additionalPathChunks.length === 1; - } - - return false; -} -function matchPattern(url: URL, remotePattern: RemotePattern) { - return ( - matchProtocol(url, remotePattern.protocol) && - matchHostname(url, remotePattern.hostname, true) && - matchPort(url, remotePattern.port) && - matchPathname(url, remotePattern.pathname, true) - ); -} export function isRemoteAllowed( src: string, {