Skip to content

Commit 062e0f8

Browse files
committed
refactor(cloudflare/ruleset): use shared zone resolver
1 parent 96da633 commit 062e0f8

1 file changed

Lines changed: 12 additions & 33 deletions

File tree

packages/alchemy/src/Cloudflare/Ruleset/Ruleset.ts

Lines changed: 12 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
import * as rulesets from "@distilled.cloud/cloudflare/rulesets";
2-
import * as zones from "@distilled.cloud/cloudflare/zones";
32
import * as Effect from "effect/Effect";
4-
import * as Option from "effect/Option";
5-
import * as Stream from "effect/Stream";
63
import { deepEqual, isResolved } from "../../Diff.ts";
74
import { createPhysicalName } from "../../PhysicalName.ts";
85
import * as Provider from "../../Provider.ts";
96
import { Resource } from "../../Resource.ts";
107
import { CloudflareEnvironment } from "../CloudflareEnvironment.ts";
118
import type { Providers } from "../Providers.ts";
9+
import {
10+
isZoneId,
11+
resolveZoneId as resolveCloudflareZoneId,
12+
type ZoneReference,
13+
} from "../Zone.ts";
1214
import { toRulesetAttributes } from "./attributes.ts";
1315

1416
export type RulesetPhase = rulesets.CreateRulesetForZoneRequest["phase"];
@@ -20,7 +22,7 @@ export type RulesetOutputRule = Omit<
2022
"lastUpdated" | "version"
2123
>;
2224

23-
export type RulesetZone = string | { zoneId: string; name?: string };
25+
export type RulesetZone = ZoneReference;
2426

2527
export type RulesetProps<Phase extends RulesetPhase = RulesetPhase> = {
2628
/**
@@ -97,11 +99,6 @@ const isNotFoundError = (error: unknown): boolean =>
9799
const zoneRef = (zone: RulesetZone): string =>
98100
typeof zone === "string" ? zone : zone.zoneId;
99101

100-
const isZoneIdString = (zone: string): boolean => /^[a-f0-9]{32}$/i.test(zone);
101-
102-
const matchesHostname = (zoneName: string, hostname: string): boolean =>
103-
hostname === zoneName || hostname.endsWith(`.${zoneName}`);
104-
105102
export const RulesetProvider = () =>
106103
Provider.effect(
107104
Ruleset,
@@ -116,27 +113,10 @@ export const RulesetProvider = () =>
116113
});
117114

118115
const resolveZoneId = (zone: RulesetZone) =>
119-
Effect.gen(function* () {
120-
if (typeof zone !== "string") return zone.zoneId;
121-
if (isZoneIdString(zone)) return zone;
122-
123-
const matches = yield* zones.listZones.items({}).pipe(
124-
Stream.filter(
125-
(candidate) =>
126-
candidate.account.id === accountId &&
127-
matchesHostname(candidate.name, zone),
128-
),
129-
Stream.runCollect,
130-
);
131-
const match = [...matches].sort(
132-
(a, b) => b.name.length - a.name.length,
133-
)[0];
134-
if (!match) {
135-
return yield* Effect.fail(
136-
new Error(`Cloudflare zone not found for ${zone}`),
137-
);
138-
}
139-
return match.id;
116+
resolveCloudflareZoneId({
117+
accountId,
118+
zone,
119+
hostname: typeof zone === "string" ? zone : (zone.name ?? ""),
140120
});
141121

142122
return {
@@ -145,13 +125,12 @@ export const RulesetProvider = () =>
145125
if (!isResolved(news)) return undefined;
146126
const desiredZone = zoneRef(news.zone);
147127
const desiredZoneId =
148-
typeof news.zone !== "string" || isZoneIdString(news.zone)
128+
typeof news.zone !== "string" || isZoneId(news.zone)
149129
? desiredZone
150130
: undefined;
151131
const oldZone = olds.zone ? zoneRef(olds.zone) : undefined;
152132
const oldZoneId =
153-
olds.zone &&
154-
(typeof olds.zone !== "string" || isZoneIdString(olds.zone))
133+
olds.zone && (typeof olds.zone !== "string" || isZoneId(olds.zone))
155134
? oldZone
156135
: undefined;
157136

0 commit comments

Comments
 (0)