@brandlab-digital/site-core 1.0.8 → 1.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"google-reviews.js","sourceRoot":"","sources":["../src/google-reviews.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"google-reviews.js","sourceRoot":"","sources":["../src/google-reviews.ts"],"names":[],"mappings":"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","sourcesContent":["export const GOOGLE_PLACE_DETAILS_ENDPOINT = 'https://places.googleapis.com/v1/places'\nexport const GOOGLE_PLACE_REVIEWS_SUMMARY_FIELD_MASK =\n 'id,displayName,googleMapsUri,rating,userRatingCount,attributions'\nexport const GOOGLE_PLACE_REVIEWS_FULL_FIELD_MASK =\n 'id,displayName,googleMapsUri,rating,userRatingCount,attributions,reviews.authorAttribution,reviews.relativePublishTimeDescription,reviews.rating,reviews.text,reviews.originalText,reviews.publishTime,reviews.googleMapsUri,reviews.flagContentUri'\nexport const GOOGLE_MAPS_ATTRIBUTION_LABEL = 'Google Maps'\nexport const GOOGLE_MAPS_ATTRIBUTION_TEXT = 'Google Maps'\nexport const GOOGLE_PLACE_REVIEWS_MAX_REVIEWS = 5\nexport const GOOGLE_PLACE_FEATURED_REVIEWS_MAX_REVIEWS = 3\n\nexport type GooglePlaceReviewsMode = 'summary' | 'full'\nexport type GooglePlaceReviewsSelection = 'relevance' | 'five-star-featured'\n\nexport type GooglePlaceReviewsUnavailableReason =\n | 'missing-api-key'\n | 'missing-place-id'\n | 'api-error'\n | 'invalid-response'\n\nexport interface GooglePlaceText {\n text?: string\n languageCode?: string\n}\n\nexport interface GooglePlaceDisplayName {\n text?: string\n languageCode?: string\n}\n\nexport interface GooglePlaceReviewAuthorAttribution {\n displayName?: string\n uri?: string\n photoUri?: string\n}\n\nexport interface GooglePlaceReviewApiReview {\n name?: string\n relativePublishTimeDescription?: string\n rating?: number\n text?: GooglePlaceText\n originalText?: GooglePlaceText\n authorAttribution?: GooglePlaceReviewAuthorAttribution\n publishTime?: string\n googleMapsUri?: string\n flagContentUri?: string\n}\n\nexport interface GooglePlaceDetailsApiResponse {\n id?: string\n displayName?: GooglePlaceDisplayName\n googleMapsUri?: string\n rating?: number\n userRatingCount?: number\n attributions?: GooglePlaceApiAttribution[]\n reviews?: GooglePlaceReviewApiReview[]\n}\n\nexport interface GooglePlaceApiAttribution {\n provider?: string\n providerUri?: string\n}\n\nexport interface GooglePlaceAttribution {\n provider: string\n providerUri?: string\n}\n\nexport interface GooglePlaceReview {\n authorName: string\n authorUri?: string\n authorPhotoUri?: string\n rating?: number\n text: string\n relativePublishTimeDescription?: string\n publishTime?: string\n googleMapsUri: string\n flagContentUri?: string\n}\n\nexport interface GooglePlaceReviewsAttribution {\n label: typeof GOOGLE_MAPS_ATTRIBUTION_LABEL\n text: typeof GOOGLE_MAPS_ATTRIBUTION_TEXT\n}\n\nexport interface GooglePlaceReviewsAvailableSnapshot {\n status: 'available'\n mode: GooglePlaceReviewsMode\n businessName: string\n googleMapsUri: string\n rating?: number\n userRatingCount?: number\n reviews: GooglePlaceReview[]\n thirdPartyAttributions: GooglePlaceAttribution[]\n attribution: GooglePlaceReviewsAttribution\n}\n\nexport interface GooglePlaceReviewsUnavailableSnapshot {\n status: 'unavailable'\n mode: GooglePlaceReviewsMode\n reason: GooglePlaceReviewsUnavailableReason\n googleMapsUri?: string\n attribution: GooglePlaceReviewsAttribution\n}\n\nexport type GooglePlaceReviewsSnapshot =\n | GooglePlaceReviewsAvailableSnapshot\n | GooglePlaceReviewsUnavailableSnapshot\n\nconst GOOGLE_PLACE_REVIEWS_UNAVAILABLE_REASONS = new Set<GooglePlaceReviewsUnavailableReason>([\n 'missing-api-key',\n 'missing-place-id',\n 'api-error',\n 'invalid-response',\n])\n\nexport interface GooglePlaceDetailsRequest {\n url: string\n headers: Record<string, string>\n}\n\nexport interface FetchGooglePlaceReviewsOptions {\n apiKey?: string | null\n placeId?: string | null\n /** Summary avoids the higher-priced reviews field; full returns up to five reviews. */\n mode?: GooglePlaceReviewsMode\n maxReviews?: number\n fallbackGoogleMapsUri?: string | null\n fetcher?: typeof fetch\n /** Bounded upstream timeout; defaults to five seconds. */\n timeoutMs?: number\n}\n\nconst attribution: GooglePlaceReviewsAttribution = {\n label: GOOGLE_MAPS_ATTRIBUTION_LABEL,\n text: GOOGLE_MAPS_ATTRIBUTION_TEXT,\n}\n\nexport function createGooglePlaceReviewsUnavailableSnapshot(\n reason: GooglePlaceReviewsUnavailableReason,\n googleMapsUri?: string | null,\n mode: GooglePlaceReviewsMode = 'full',\n): GooglePlaceReviewsUnavailableSnapshot {\n const safeGoogleMapsUri = normalizeGooglePlacePublicUrl(googleMapsUri)\n return {\n status: 'unavailable',\n mode,\n reason,\n ...(safeGoogleMapsUri ? { googleMapsUri: safeGoogleMapsUri } : {}),\n attribution,\n }\n}\n\nfunction trimToUndefined(value: string | null | undefined) {\n const trimmed = value?.trim()\n return trimmed ? trimmed : undefined\n}\n\nexport function normalizeGooglePlacePublicUrl(value: string | null | undefined) {\n const trimmed = trimToUndefined(value)\n if (!trimmed) return undefined\n\n try {\n const url = new URL(trimmed)\n return url.protocol === 'https:' && !url.username && !url.password ? url.href : undefined\n } catch {\n return undefined\n }\n}\n\nfunction normalizeRating(value: number | null | undefined) {\n return typeof value === 'number' && Number.isFinite(value) && value > 0 && value <= 5\n ? value\n : undefined\n}\n\nfunction normalizeCount(value: number | null | undefined) {\n return typeof value === 'number' && Number.isInteger(value) && value >= 0 ? value : undefined\n}\n\nfunction clampReviewLimit(value: number | null | undefined) {\n if (typeof value !== 'number' || !Number.isFinite(value)) return GOOGLE_PLACE_REVIEWS_MAX_REVIEWS\n return Math.max(0, Math.min(GOOGLE_PLACE_REVIEWS_MAX_REVIEWS, Math.floor(value)))\n}\n\nexport function normalizeGooglePlaceReviewsMode(\n value: GooglePlaceReviewsMode | null | undefined,\n): GooglePlaceReviewsMode {\n return value === 'summary' ? 'summary' : 'full'\n}\n\nexport function normalizeGooglePlaceReviewsSelection(\n value: GooglePlaceReviewsSelection | null | undefined,\n): GooglePlaceReviewsSelection {\n return value === 'five-star-featured' ? 'five-star-featured' : 'relevance'\n}\n\n/**\n * Selects the approved presentation subset without altering Google's live\n * aggregate rating, review total, or relevance order.\n */\nexport function selectGooglePlaceReviewsSnapshot(\n snapshot: GooglePlaceReviewsAvailableSnapshot,\n selection: GooglePlaceReviewsSelection = 'relevance',\n): GooglePlaceReviewsAvailableSnapshot {\n if (\n snapshot.mode !== 'full' ||\n normalizeGooglePlaceReviewsSelection(selection) === 'relevance'\n ) {\n return snapshot\n }\n\n return {\n ...snapshot,\n reviews: snapshot.reviews\n .filter((review) => review.rating === 5)\n .slice(0, GOOGLE_PLACE_FEATURED_REVIEWS_MAX_REVIEWS),\n }\n}\n\nexport function normalizeGooglePlaceId(placeId: string | null | undefined) {\n const trimmed = trimToUndefined(placeId)\n if (!trimmed) return undefined\n\n return trimmed.replace(/^places\\//, '')\n}\n\nexport function buildGooglePlaceDetailsRequest(options: {\n apiKey: string\n placeId: string\n mode?: GooglePlaceReviewsMode\n}): GooglePlaceDetailsRequest {\n const normalizedPlaceId = normalizeGooglePlaceId(options.placeId)\n const apiKey = trimToUndefined(options.apiKey)\n\n if (!apiKey) {\n throw new Error('GOOGLE_MAPS_PLATFORM_API_KEY is required')\n }\n\n if (!normalizedPlaceId) {\n throw new Error('Google Place ID is required')\n }\n\n return {\n url: `${GOOGLE_PLACE_DETAILS_ENDPOINT}/${encodeURIComponent(normalizedPlaceId)}`,\n headers: {\n 'X-Goog-Api-Key': apiKey,\n // The only supported masks are platform-owned. Full mode keeps review,\n // author, source, report and provider attribution inseparable; summary\n // mode avoids requesting the higher-priced reviews field entirely.\n 'X-Goog-FieldMask': normalizeGooglePlaceReviewsMode(options.mode) === 'summary'\n ? GOOGLE_PLACE_REVIEWS_SUMMARY_FIELD_MASK\n : GOOGLE_PLACE_REVIEWS_FULL_FIELD_MASK,\n },\n }\n}\n\nexport function normalizeGooglePlaceReview(\n review: GooglePlaceReviewApiReview,\n): GooglePlaceReview | null {\n const authorName = trimToUndefined(review.authorAttribution?.displayName)\n const authorUri = normalizeGooglePlacePublicUrl(review.authorAttribution?.uri)\n const authorPhotoUri = normalizeGooglePlacePublicUrl(review.authorAttribution?.photoUri)\n const rating = normalizeRating(review.rating)\n const relativePublishTimeDescription = trimToUndefined(review.relativePublishTimeDescription)\n const publishTime = trimToUndefined(review.publishTime)\n const googleMapsUri = normalizeGooglePlacePublicUrl(review.googleMapsUri)\n const flagContentUri = normalizeGooglePlacePublicUrl(review.flagContentUri)\n const text = trimToUndefined(review.text?.text)\n\n if (!authorName || !text || !googleMapsUri) {\n return null\n }\n\n return {\n authorName,\n ...(authorUri ? { authorUri } : {}),\n ...(authorPhotoUri ? { authorPhotoUri } : {}),\n ...(rating ? { rating } : {}),\n text,\n ...(relativePublishTimeDescription ? { relativePublishTimeDescription } : {}),\n ...(publishTime ? { publishTime } : {}),\n googleMapsUri,\n ...(flagContentUri ? { flagContentUri } : {}),\n }\n}\n\nexport function normalizeGooglePlaceReviewsResponse(\n response: GooglePlaceDetailsApiResponse,\n options: {\n mode?: GooglePlaceReviewsMode\n maxReviews?: number\n fallbackGoogleMapsUri?: string | null\n } = {},\n): GooglePlaceReviewsSnapshot {\n const businessName = trimToUndefined(response.displayName?.text)\n const mode = normalizeGooglePlaceReviewsMode(options.mode)\n const googleMapsUri = normalizeGooglePlacePublicUrl(response.googleMapsUri) ??\n normalizeGooglePlacePublicUrl(options.fallbackGoogleMapsUri)\n const rating = normalizeRating(response.rating)\n const userRatingCount = normalizeCount(response.userRatingCount)\n\n if (!businessName || !googleMapsUri) {\n return createGooglePlaceReviewsUnavailableSnapshot('invalid-response', googleMapsUri, mode)\n }\n\n const reviews = (mode === 'full' ? response.reviews ?? [] : [])\n .map((review) => normalizeGooglePlaceReview(review))\n .filter((review): review is GooglePlaceReview => Boolean(review))\n .slice(0, clampReviewLimit(options.maxReviews))\n const thirdPartyAttributions = (response.attributions ?? [])\n .map((item): GooglePlaceAttribution | null => {\n const provider = trimToUndefined(item.provider)\n if (!provider) return null\n const providerUri = normalizeGooglePlacePublicUrl(item.providerUri)\n return { provider, ...(providerUri ? { providerUri } : {}) }\n })\n .filter((item): item is GooglePlaceAttribution => Boolean(item))\n\n return {\n status: 'available',\n mode,\n businessName,\n googleMapsUri,\n ...(rating ? { rating } : {}),\n ...(userRatingCount !== undefined ? { userRatingCount } : {}),\n reviews,\n thirdPartyAttributions,\n attribution,\n }\n}\n\n/**\n * Treats the public route response as untrusted input before it reaches React.\n * Unknown fields are discarded and incomplete review attribution is omitted.\n */\nexport function parseGooglePlaceReviewsSnapshot(\n value: unknown,\n expectedMode?: GooglePlaceReviewsMode,\n): GooglePlaceReviewsSnapshot | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null\n const record = value as Record<string, unknown>\n const mode = record.mode === 'summary' || record.mode === 'full'\n ? record.mode\n : null\n if (!mode || (expectedMode && mode !== expectedMode)) return null\n if (\n !record.attribution ||\n typeof record.attribution !== 'object' ||\n Array.isArray(record.attribution)\n ) {\n return null\n }\n const rawAttribution = record.attribution as Record<string, unknown>\n if (\n rawAttribution.label !== GOOGLE_MAPS_ATTRIBUTION_LABEL ||\n rawAttribution.text !== GOOGLE_MAPS_ATTRIBUTION_TEXT\n ) {\n return null\n }\n\n if (record.status === 'unavailable') {\n if (\n typeof record.reason !== 'string' ||\n !GOOGLE_PLACE_REVIEWS_UNAVAILABLE_REASONS.has(\n record.reason as GooglePlaceReviewsUnavailableReason,\n )\n ) {\n return null\n }\n return createGooglePlaceReviewsUnavailableSnapshot(\n record.reason as GooglePlaceReviewsUnavailableReason,\n typeof record.googleMapsUri === 'string' ? record.googleMapsUri : undefined,\n mode,\n )\n }\n if (record.status !== 'available') return null\n\n const businessName = typeof record.businessName === 'string'\n ? trimToUndefined(record.businessName)\n : undefined\n const googleMapsUri = typeof record.googleMapsUri === 'string'\n ? normalizeGooglePlacePublicUrl(record.googleMapsUri)\n : undefined\n if (!businessName || !googleMapsUri) return null\n const rating = typeof record.rating === 'number' ? normalizeRating(record.rating) : undefined\n const userRatingCount = typeof record.userRatingCount === 'number'\n ? normalizeCount(record.userRatingCount)\n : undefined\n const rawReviews = Array.isArray(record.reviews) ? record.reviews : null\n const rawAttributions = Array.isArray(record.thirdPartyAttributions)\n ? record.thirdPartyAttributions\n : null\n if (!rawReviews || !rawAttributions || (mode === 'summary' && rawReviews.length > 0)) {\n return null\n }\n\n const reviews = rawReviews\n .map((item): GooglePlaceReview | null => {\n if (!item || typeof item !== 'object' || Array.isArray(item)) return null\n const review = item as Record<string, unknown>\n return normalizeGooglePlaceReview({\n authorAttribution: {\n displayName: typeof review.authorName === 'string' ? review.authorName : undefined,\n uri: typeof review.authorUri === 'string' ? review.authorUri : undefined,\n photoUri: typeof review.authorPhotoUri === 'string' ? review.authorPhotoUri : undefined,\n },\n rating: typeof review.rating === 'number' ? review.rating : undefined,\n text: { text: typeof review.text === 'string' ? review.text : undefined },\n relativePublishTimeDescription:\n typeof review.relativePublishTimeDescription === 'string'\n ? review.relativePublishTimeDescription\n : undefined,\n publishTime: typeof review.publishTime === 'string' ? review.publishTime : undefined,\n googleMapsUri:\n typeof review.googleMapsUri === 'string' ? review.googleMapsUri : undefined,\n flagContentUri:\n typeof review.flagContentUri === 'string' ? review.flagContentUri : undefined,\n })\n })\n .filter((review): review is GooglePlaceReview => Boolean(review))\n .slice(0, GOOGLE_PLACE_REVIEWS_MAX_REVIEWS)\n if (mode === 'full' && reviews.length !== rawReviews.length) return null\n\n const thirdPartyAttributions = rawAttributions\n .map((item): GooglePlaceAttribution | null => {\n if (!item || typeof item !== 'object' || Array.isArray(item)) return null\n const raw = item as Record<string, unknown>\n const provider = typeof raw.provider === 'string' ? trimToUndefined(raw.provider) : undefined\n if (!provider) return null\n const providerUri = typeof raw.providerUri === 'string'\n ? normalizeGooglePlacePublicUrl(raw.providerUri)\n : undefined\n return { provider, ...(providerUri ? { providerUri } : {}) }\n })\n .filter((item): item is GooglePlaceAttribution => Boolean(item))\n if (thirdPartyAttributions.length !== rawAttributions.length) return null\n\n return {\n status: 'available',\n mode,\n businessName,\n googleMapsUri,\n ...(rating ? { rating } : {}),\n ...(userRatingCount !== undefined ? { userRatingCount } : {}),\n reviews,\n thirdPartyAttributions,\n attribution,\n }\n}\n\nexport async function fetchGooglePlaceReviewsSnapshot(\n options: FetchGooglePlaceReviewsOptions,\n): Promise<GooglePlaceReviewsSnapshot> {\n const apiKey = trimToUndefined(options.apiKey)\n const placeId = normalizeGooglePlaceId(options.placeId)\n const mode = normalizeGooglePlaceReviewsMode(options.mode)\n\n if (!apiKey) {\n return createGooglePlaceReviewsUnavailableSnapshot(\n 'missing-api-key',\n options.fallbackGoogleMapsUri,\n mode,\n )\n }\n\n if (!placeId) {\n return createGooglePlaceReviewsUnavailableSnapshot(\n 'missing-place-id',\n options.fallbackGoogleMapsUri,\n mode,\n )\n }\n\n try {\n const request = buildGooglePlaceDetailsRequest({\n apiKey,\n placeId,\n mode,\n })\n const fetcher = options.fetcher ?? fetch\n const timeoutMs = options.timeoutMs ?? 5_000\n if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 100 || timeoutMs > 20_000) {\n throw new Error('Google Places timeout must be between 100 and 20000 milliseconds.')\n }\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), timeoutMs)\n let response: Response\n try {\n response = await fetcher(request.url, {\n cache: 'no-store',\n headers: request.headers,\n signal: controller.signal,\n })\n } finally {\n clearTimeout(timeout)\n }\n\n if (!response.ok) {\n return createGooglePlaceReviewsUnavailableSnapshot(\n 'api-error',\n options.fallbackGoogleMapsUri,\n mode,\n )\n }\n\n const json = (await response.json()) as GooglePlaceDetailsApiResponse\n\n return normalizeGooglePlaceReviewsResponse(json, {\n mode,\n maxReviews: options.maxReviews,\n fallbackGoogleMapsUri: options.fallbackGoogleMapsUri,\n })\n } catch {\n return createGooglePlaceReviewsUnavailableSnapshot(\n 'api-error',\n options.fallbackGoogleMapsUri,\n mode,\n )\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"locations.js","sourceRoot":"","sources":["../src/locations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"locations.js","sourceRoot":"","sources":["../src/locations.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Location publication and geography-registry contracts.\n *\n * Brandlab owns route correctness and shared geography. Projects own their\n * content, evidence and publication decisions.\n */\n\n/**\n * The preferred location publication contract. A project owner explicitly\n * decides whether a route is indexable after checking customer usefulness,\n * geographic correctness and available evidence.\n */\nexport interface BrandlabLocationRouteDecision {\n indexing: 'index' | 'noindex-follow'\n rationale: string\n reviewedAt?: string\n}\n\nexport function defineLocationRouteDecision<const T extends BrandlabLocationRouteDecision>(\n input: T,\n): T {\n if (input.indexing !== 'index' && input.indexing !== 'noindex-follow') {\n throw new Error('Location route indexing must be \"index\" or \"noindex-follow\".')\n }\n if (!input.rationale.trim()) {\n throw new Error('Location route decision requires a concise rationale.')\n }\n if (input.reviewedAt && Number.isNaN(Date.parse(input.reviewedAt))) {\n throw new Error('Location route decision reviewedAt must be a valid date.')\n }\n return input\n}\n\nexport function resolveLocationRouteIndexing(\n decision: BrandlabLocationRouteDecision | null | undefined,\n): 'index' | 'noindex-follow' {\n if (!decision) {\n throw new Error('Location route decision is required.')\n }\n return defineLocationRouteDecision(decision).indexing\n}\n\n// ---------------------------------------------------------------------------\n// Geography registries (standards/registry/*-geography.json)\n// ---------------------------------------------------------------------------\n\nexport interface RegistryRegion {\n slug: string\n name: string\n /** Preferred query-facing region label for titles and primary headings. */\n seoName: string\n /** Recognised search/display variants; these never create additional URLs. */\n alternateNames?: readonly string[]\n /** 'the' → copy reads \"the Eastern Suburbs\"; 'none' → \"Western Sydney\". */\n articleForm: 'the' | 'none'\n councilSlugs: readonly string[]\n}\n\nexport interface RegistrySubRegion {\n slug: string\n name: string\n parentRegionSlug: string\n /** Council-combo sub-region membership. */\n councilSlugs?: readonly string[]\n /** Explicit suburb membership for district-style sub-regions. */\n suburbSlugs?: readonly string[]\n /** Provenance for promoted project districts or audited groupings. */\n source?: string\n}\n\n/**\n * Internal service-coverage partition. Coverage groups have no public name,\n * route, metadata, schema, sitemap, breadcrumb, navigation, or page model.\n */\nexport interface RegistryCoverageGroup {\n slug: string\n /** Maintainer-facing label; never render this value as customer copy. */\n adminLabel: string\n regionSlug: string\n visibility: 'internal'\n}\n\nexport interface RegistryCouncil {\n slug: string\n name: string\n}\n\nexport interface RegistrySuburb {\n name: string\n slug: string\n regionSlug: string\n /** Internal service-coverage partition; never a page parent or URL segment. */\n coverageGroupSlug?: string\n councilSlug: string\n /** Secondary council memberships for split localities. */\n sharedCouncilSlugs?: readonly string[]\n /** Australia Post-matched postcode. */\n postcode: string\n /** Stewardship notes for boundary bindings and corrections. */\n notes?: string\n}\n\nexport type RegistryNonSuburbEntityType =\n | 'rural-locality'\n | 'natural-area'\n | 'protected-area'\n | 'waterbody'\n\n/**\n * Official NSW geography retained for spatial and council completeness but\n * excluded from the normal website suburb catalog.\n */\nexport interface RegistryNonSuburbLocality {\n name: string\n slug: string\n regionSlug: string\n councilSlug: string\n sharedCouncilSlugs?: readonly string[]\n postcode: null\n entityType: RegistryNonSuburbEntityType\n officialUrbanity: 'R'\n defaultWebsiteEligibility: false\n eligibilityReason: string\n notes?: string\n}\n\nexport type RegistryOfficialLocality = RegistrySuburb | RegistryNonSuburbLocality\n\nexport interface GeographyRegistry {\n version: string\n generated: string\n /** Provenance: where the registry data was derived from. */\n sources?: readonly string[]\n /** Stewardship notes for maintainers. */\n notes?: string\n regions: readonly RegistryRegion[]\n subRegions: readonly RegistrySubRegion[]\n /** Backend-only groupings used to select served suburbs. */\n coverageGroups: readonly RegistryCoverageGroup[]\n /** Legacy slug → canonical slug. */\n aliases: Readonly<Record<string, string>>\n councils: readonly RegistryCouncil[]\n /** Postcode-backed candidates only; this does not itself approve pages. */\n suburbs: readonly RegistrySuburb[]\n /** Official non-suburb geography excluded from default website locations. */\n nonSuburbLocalities: readonly RegistryNonSuburbLocality[]\n}\n\nexport type RegistryEntityKind = 'region' | 'subRegion' | 'council' | 'suburb'\n\n/** Canonical Brandlab slugify — identical to the benchmark implementation. */\nexport function toLocationSlug(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '')\n}\n\n/**\n * Resolve a possibly-legacy slug within an explicit registry entity kind.\n *\n * Entity context is required because canonical suburb slugs such as\n * `blacktown`, `hornsby`, `randwick`, and `willoughby` are also legacy council\n * aliases. A canonical slug for the requested kind always wins over an alias.\n */\nexport function resolveRegistryAlias(\n slug: string,\n registry: GeographyRegistry,\n kind: RegistryEntityKind | readonly RegistryEntityKind[],\n): string {\n const kinds = Array.isArray(kind) ? kind : [kind]\n const canonicalSets = kinds.map((entityKind) => getRegistrySlugSet(registry, entityKind))\n\n if (canonicalSets.some((slugSet) => slugSet.has(slug))) return slug\n\n const target = registry.aliases[slug]\n if (!target) return slug\n\n return canonicalSets.some((slugSet) => slugSet.has(target)) ? target : slug\n}\n\nexport interface CatalogRegistryIssue {\n kind:\n | 'unknown-region'\n | 'unknown-coverage-group'\n | 'unknown-council'\n | 'unknown-suburb'\n | 'excluded-website-locality'\n | 'suburb-region-mismatch'\n | 'suburb-coverage-group-mismatch'\n | 'suburb-council-mismatch'\n slug: string\n detail: string\n}\n\nexport interface CatalogForValidation {\n regionSlugs: readonly string[]\n /** Backend coverage selectors; these are never treated as region/page slugs. */\n coverageGroupSlugs?: readonly string[]\n suburbs: readonly {\n slug: string\n regionSlug: string\n coverageGroupSlug?: string\n councilSlug?: string\n }[]\n}\n\n/**\n * Expand internal coverage selectors to canonical suburb slugs.\n *\n * This helper only answers where a business serves. It does not approve pages,\n * static params, sitemap entries, schema nodes, or internal links.\n */\nexport function getCoverageGroupSuburbSlugs(\n coverageGroupSlugs: readonly string[],\n registry: GeographyRegistry,\n): string[] {\n const knownCoverageGroupSlugs = new Set(registry.coverageGroups.map((group) => group.slug))\n const unknownCoverageGroupSlug = coverageGroupSlugs.find(\n (slug) => !knownCoverageGroupSlugs.has(slug),\n )\n if (unknownCoverageGroupSlug) {\n throw new Error(`Unknown registry coverage group \"${unknownCoverageGroupSlug}\".`)\n }\n\n const selected = new Set(coverageGroupSlugs)\n return registry.suburbs\n .filter(\n (suburb) => suburb.coverageGroupSlug && selected.has(suburb.coverageGroupSlug),\n )\n .map((suburb) => suburb.slug)\n}\n\n/**\n * Validate a project catalog subset against the shared registry. Alias slugs\n * are resolved before comparison so migrated repos that kept live URLs can\n * still pass. Returns an empty array when the subset is clean.\n */\nexport function validateCatalogAgainstRegistry(\n catalog: CatalogForValidation,\n registry: GeographyRegistry,\n): CatalogRegistryIssue[] {\n const issues: CatalogRegistryIssue[] = []\n const regionSlugSet = new Set(registry.regions.map((region) => region.slug))\n const subRegionSlugSet = new Set(registry.subRegions.map((subRegion) => subRegion.slug))\n const coverageGroupSlugSet = new Set(registry.coverageGroups.map((group) => group.slug))\n const councilSlugSet = new Set(registry.councils.map((council) => council.slug))\n const suburbBySlug = new Map(registry.suburbs.map((suburb) => [suburb.slug, suburb]))\n const nonSuburbLocalityBySlug = new Map(\n registry.nonSuburbLocalities.map((locality) => [locality.slug, locality]),\n )\n\n for (const rawRegionSlug of catalog.regionSlugs) {\n const regionSlug = resolveRegistryAlias(rawRegionSlug, registry, ['region', 'subRegion'])\n if (!regionSlugSet.has(regionSlug) && !subRegionSlugSet.has(regionSlug)) {\n issues.push({\n kind: 'unknown-region',\n slug: rawRegionSlug,\n detail: `Region slug \"${rawRegionSlug}\" is not a registry region, sub-region, or alias.`,\n })\n }\n }\n\n for (const coverageGroupSlug of catalog.coverageGroupSlugs ?? []) {\n if (!coverageGroupSlugSet.has(coverageGroupSlug)) {\n issues.push({\n kind: 'unknown-coverage-group',\n slug: coverageGroupSlug,\n detail: `Coverage group slug \"${coverageGroupSlug}\" is not an internal registry coverage group.`,\n })\n }\n }\n\n for (const suburb of catalog.suburbs) {\n const resolvedSuburbSlug = suburbBySlug.has(suburb.slug)\n ? suburb.slug\n : resolveRegistryAlias(suburb.slug, registry, 'suburb')\n const registrySuburb = suburbBySlug.get(resolvedSuburbSlug)\n\n if (!registrySuburb) {\n const excludedLocality = nonSuburbLocalityBySlug.get(suburb.slug)\n if (excludedLocality) {\n issues.push({\n kind: 'excluded-website-locality',\n slug: suburb.slug,\n detail: `Official locality \"${suburb.slug}\" is classified as ${excludedLocality.entityType} and excluded from the normal website suburb catalog: ${excludedLocality.eligibilityReason}`,\n })\n continue\n }\n issues.push({\n kind: 'unknown-suburb',\n slug: suburb.slug,\n detail: `Suburb slug \"${suburb.slug}\" is not in the registry (not gazetted, or needs adding to the registry first).`,\n })\n continue\n }\n\n const regionSlug = resolveRegistryAlias(suburb.regionSlug, registry, ['region', 'subRegion'])\n const regionMatches =\n registrySuburb.regionSlug === regionSlug ||\n registry.subRegions.some(\n (subRegion) =>\n subRegion.slug === regionSlug &&\n subRegion.parentRegionSlug === registrySuburb.regionSlug &&\n (subRegion.suburbSlugs?.includes(registrySuburb.slug) ||\n subRegion.councilSlugs?.some(\n (councilSlug) =>\n councilSlug === registrySuburb.councilSlug ||\n registrySuburb.sharedCouncilSlugs?.includes(councilSlug),\n )),\n )\n\n if (!regionMatches) {\n issues.push({\n kind: 'suburb-region-mismatch',\n slug: suburb.slug,\n detail: `Suburb \"${suburb.slug}\" is assigned to \"${suburb.regionSlug}\" but the registry places it in \"${registrySuburb.regionSlug}\".`,\n })\n }\n\n if (suburb.coverageGroupSlug) {\n if (!coverageGroupSlugSet.has(suburb.coverageGroupSlug)) {\n issues.push({\n kind: 'unknown-coverage-group',\n slug: suburb.coverageGroupSlug,\n detail: `Coverage group slug \"${suburb.coverageGroupSlug}\" is not an internal registry coverage group.`,\n })\n } else if (registrySuburb.coverageGroupSlug !== suburb.coverageGroupSlug) {\n issues.push({\n kind: 'suburb-coverage-group-mismatch',\n slug: suburb.slug,\n detail: `Suburb \"${suburb.slug}\" is assigned to coverage group \"${suburb.coverageGroupSlug}\" but the registry places it under \"${registrySuburb.coverageGroupSlug ?? 'none'}\".`,\n })\n }\n }\n\n if (suburb.councilSlug) {\n const councilSlug = resolveRegistryAlias(suburb.councilSlug, registry, 'council')\n if (!councilSlugSet.has(councilSlug)) {\n issues.push({\n kind: 'unknown-council',\n slug: suburb.councilSlug,\n detail: `Council slug \"${suburb.councilSlug}\" is not a registry council or alias.`,\n })\n } else if (\n registrySuburb.councilSlug !== councilSlug &&\n !registrySuburb.sharedCouncilSlugs?.includes(councilSlug)\n ) {\n issues.push({\n kind: 'suburb-council-mismatch',\n slug: suburb.slug,\n detail: `Suburb \"${suburb.slug}\" is assigned to council \"${suburb.councilSlug}\" but the registry places it under \"${registrySuburb.councilSlug}\".`,\n })\n }\n }\n }\n\n return issues\n}\n\nfunction getRegistrySlugSet(\n registry: GeographyRegistry,\n kind: RegistryEntityKind,\n): ReadonlySet<string> {\n switch (kind) {\n case 'region':\n return new Set(registry.regions.map((region) => region.slug))\n case 'subRegion':\n return new Set(registry.subRegions.map((subRegion) => subRegion.slug))\n case 'council':\n return new Set(registry.councils.map((council) => council.slug))\n case 'suburb':\n return new Set(registry.suburbs.map((suburb) => suburb.slug))\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n normalizeBrandlabRoutePath,\n type BrandlabIndexingDirective,\n} from './routes.js'\n\nexport type BrandlabMetadataTitleMode = 'templated' | 'absolute'\n\nexport interface BrandlabSocialImage {\n url: string\n twitterUrl?: string\n width?: number\n height?: number\n alt?: string\n}\n\nexport interface BuildSeoMetadataInput {\n brandName: string\n siteUrl: string\n locale: string\n titleTemplate: string\n defaultSocialImage: BrandlabSocialImage\n title: string\n description: string\n pathname: string\n titleMode?: BrandlabMetadataTitleMode\n indexing: BrandlabIndexingDirective\n keywords?: string[]\n article?: {\n publishedTime?: string\n modifiedTime?: string\n authors?: string[]\n }\n socialImage?: BrandlabSocialImage\n}\n\nexport type BuildBrandlabMetadataInput = BuildSeoMetadataInput\n\nexport interface BrandlabSeoMetadata {\n title: string | { absolute: string }\n resolvedTitle: string\n description: string\n canonicalPath: string\n canonicalUrl: string\n alternates: { canonical: string }\n keywords?: string[]\n robots?: {\n index: boolean\n follow: boolean\n googleBot: { index: boolean; follow: boolean }\n }\n openGraph: {\n title: string\n description: string\n url: string\n siteName: string\n locale: string\n type: 'website' | 'article'\n images: BrandlabSocialImage[]\n publishedTime?: string\n modifiedTime?: string\n authors?: string[]\n }\n twitter: {\n card: 'summary_large_image'\n title: string\n description: string\n images: string[]\n }\n}\n\nconst BRANDLAB_INDEXING_DIRECTIVES = new Set<BrandlabIndexingDirective>([\n 'index',\n 'noindex-follow',\n 'noindex-nofollow',\n])\n\nfunction assertMetadataText(\n value: unknown,\n field: string,\n maximum: number,\n) {\n if (\n typeof value !== 'string' ||\n !value.trim() ||\n value.trim() !== value ||\n value.length > maximum ||\n /[\\u0000-\\u001f\\u007f]/.test(value)\n ) {\n throw new Error(`${field} must be bounded, trimmed, single-line text.`)\n }\n}\n\nfunction assertSocialImage(image: BrandlabSocialImage, field: string) {\n if (!image || typeof image !== 'object' || Array.isArray(image)) {\n throw new Error(`${field} must be a social image record.`)\n }\n assertMetadataText(image.url, `${field}.url`, 2_048)\n if (image.twitterUrl !== undefined) {\n assertMetadataText(image.twitterUrl, `${field}.twitterUrl`, 2_048)\n }\n if ((image.width === undefined) !== (image.height === undefined)) {\n throw new Error(`${field}.width and height must be supplied together.`)\n }\n for (const [name, value] of [\n ['width', image.width],\n ['height', image.height],\n ] as const) {\n if (\n value !== undefined &&\n (!Number.isSafeInteger(value) || value < 1 || value > 10_000)\n ) {\n throw new Error(`${field}.${name} must be an integer between 1 and 10000.`)\n }\n }\n if (image.alt !== undefined) assertMetadataText(image.alt, `${field}.alt`, 300)\n}\n\nfunction assertMetadataDate(value: string, field: string) {\n if (\n !/^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?Z)?$/.test(value) ||\n Number.isNaN(Date.parse(value))\n ) {\n throw new Error(`${field} must be an ISO date or UTC timestamp.`)\n }\n}\n\nfunction assertBrandlabMetadataInput(input: BuildBrandlabMetadataInput) {\n assertMetadataText(input.brandName, 'brandName', 160)\n assertMetadataText(input.title, 'title', 160)\n assertMetadataText(input.description, 'description', 320)\n assertMetadataText(input.locale, 'locale', 20)\n if (!/^[a-z]{2}(?:_[A-Z]{2})?$/.test(input.locale)) {\n throw new Error('locale must use a language or language_REGION identifier.')\n }\n assertMetadataText(input.titleTemplate, 'titleTemplate', 240)\n if ((input.titleTemplate.match(/%s/g) ?? []).length !== 1) {\n throw new Error('titleTemplate must contain exactly one %s placeholder.')\n }\n if (!BRANDLAB_INDEXING_DIRECTIVES.has(input.indexing)) {\n throw new Error('indexing must use one explicit Brandlab indexing directive.')\n }\n if (input.pathname.includes('?') || input.pathname.includes('#')) {\n throw new Error('pathname must not contain a query string or hash.')\n }\n assertSocialImage(input.defaultSocialImage, 'defaultSocialImage')\n if (input.socialImage) assertSocialImage(input.socialImage, 'socialImage')\n if (input.keywords) {\n if (!Array.isArray(input.keywords) || input.keywords.length > 20) {\n throw new Error('keywords must contain no more than 20 reviewed values.')\n }\n input.keywords.forEach((keyword, index) =>\n assertMetadataText(keyword, `keywords[${index}]`, 100),\n )\n const normalized = input.keywords.map((keyword) => keyword.toLowerCase())\n if (new Set(normalized).size !== normalized.length) {\n throw new Error('keywords must not contain duplicate values.')\n }\n }\n if (input.article) {\n if (!input.article.publishedTime) {\n throw new Error('article.publishedTime is required for article metadata.')\n }\n assertMetadataDate(input.article.publishedTime, 'article.publishedTime')\n if (input.article.modifiedTime) {\n assertMetadataDate(input.article.modifiedTime, 'article.modifiedTime')\n if (\n Date.parse(input.article.modifiedTime) <\n Date.parse(input.article.publishedTime)\n ) {\n throw new Error('article.modifiedTime cannot precede article.publishedTime.')\n }\n }\n if (!input.article.authors?.length) {\n throw new Error('article.authors requires at least one reviewed author.')\n }\n input.article.authors.forEach((author, index) =>\n assertMetadataText(author, `article.authors[${index}]`, 160),\n )\n }\n}\n\nexport function normalizeMetadataTitle(\n title: string,\n options: { brandName: string; titleMode?: BrandlabMetadataTitleMode },\n) {\n const normalizedTitle = title.trim()\n\n if (!normalizedTitle) {\n throw new Error('Metadata title cannot be empty.')\n }\n\n const brandSuffix = `| ${options.brandName}`.toLowerCase()\n const brandName = options.brandName.trim().toLowerCase()\n\n if (\n options.titleMode !== 'absolute' &&\n normalizedTitle.toLowerCase().includes(brandSuffix)\n ) {\n throw new Error(\n `Metadata title \"${normalizedTitle}\" already includes the brand suffix. Pass a page-specific title only.`,\n )\n }\n\n if (\n options.titleMode !== 'absolute' &&\n brandName &&\n normalizedTitle.toLowerCase().includes(brandName)\n ) {\n throw new Error(\n `Metadata title \"${normalizedTitle}\" already includes the brand name. Pass a page-specific title only or use titleMode: \"absolute\".`,\n )\n }\n\n return normalizedTitle\n}\n\nexport function applyTitleTemplate(title: string, template: string) {\n return template.replace('%s', title)\n}\n\nexport function normalizeCanonicalPath(pathname: string) {\n if (!pathname) {\n throw new Error('pathname is required.')\n }\n\n if (/^https?:/i.test(pathname)) {\n throw new Error(`Canonical pathname must be root-relative: \"${pathname}\".`)\n }\n try {\n return normalizeBrandlabRoutePath(pathname.split(/[?#]/, 1)[0] ?? '')\n } catch {\n throw new Error(`Canonical pathname must be root-relative: \"${pathname}\".`)\n }\n}\n\nexport function getAbsoluteUrl(siteUrl: string, pathname: string) {\n let base: URL\n try {\n base = new URL(siteUrl)\n } catch {\n throw new Error(`siteUrl must be an absolute HTTPS origin: \"${siteUrl}\".`)\n }\n\n if (\n base.protocol !== 'https:' ||\n base.username ||\n base.password ||\n base.search ||\n base.hash ||\n (base.pathname !== '/' && base.pathname !== '')\n ) {\n throw new Error(`siteUrl must be an absolute HTTPS origin: \"${siteUrl}\".`)\n }\n\n const path = normalizeCanonicalPath(pathname)\n const resolved = new URL(path, base.origin)\n if (resolved.origin !== base.origin) {\n throw new Error(`Canonical pathname must remain on ${base.origin}: \"${pathname}\".`)\n }\n return resolved.href\n}\n\nfunction normalizeSocialImageUrl(siteUrl: string, imageUrl: string) {\n let resolved: URL\n try {\n resolved = new URL(imageUrl, getAbsoluteUrl(siteUrl, '/'))\n } catch {\n throw new Error(`Social image URL must resolve to absolute HTTPS: \"${imageUrl}\".`)\n }\n if (resolved.protocol !== 'https:' || resolved.username || resolved.password) {\n throw new Error(`Social image URL must resolve to absolute HTTPS: \"${imageUrl}\".`)\n }\n return resolved.href\n}\n\nexport function buildSeoMetadata(input: BuildSeoMetadataInput): BrandlabSeoMetadata {\n const titleMode = input.titleMode ?? 'templated'\n const pageTitle = normalizeMetadataTitle(input.title, {\n brandName: input.brandName,\n titleMode,\n })\n const resolvedTitle =\n titleMode === 'absolute' ? pageTitle : applyTitleTemplate(pageTitle, input.titleTemplate)\n const canonicalPath = normalizeCanonicalPath(input.pathname)\n const canonicalUrl = getAbsoluteUrl(input.siteUrl, canonicalPath)\n const defaultSocialImage = {\n ...input.defaultSocialImage,\n url: normalizeSocialImageUrl(input.siteUrl, input.defaultSocialImage.url),\n ...(input.defaultSocialImage.twitterUrl\n ? {\n twitterUrl: normalizeSocialImageUrl(\n input.siteUrl,\n input.defaultSocialImage.twitterUrl,\n ),\n }\n : {}),\n }\n const socialImage = input.socialImage\n ? {\n ...input.socialImage,\n url: normalizeSocialImageUrl(input.siteUrl, input.socialImage.url),\n }\n : defaultSocialImage\n const twitterImage = input.socialImage\n ? socialImage.url\n : defaultSocialImage.twitterUrl ?? defaultSocialImage.url\n const robots =\n input.indexing === 'index'\n ? undefined\n : {\n index: false,\n follow: input.indexing === 'noindex-follow',\n googleBot: {\n index: false,\n follow: input.indexing === 'noindex-follow',\n },\n }\n\n return {\n title: { absolute: resolvedTitle },\n resolvedTitle,\n description: input.description,\n canonicalPath,\n canonicalUrl,\n alternates: {\n canonical: canonicalUrl,\n },\n ...(input.keywords && input.keywords.length > 0 ? { keywords: input.keywords } : {}),\n ...(robots ? { robots } : {}),\n openGraph: {\n title: resolvedTitle,\n description: input.description,\n url: canonicalUrl,\n siteName: input.brandName,\n locale: input.locale,\n type: input.article ? 'article' : 'website',\n images: [socialImage],\n ...(input.article?.publishedTime ? { publishedTime: input.article.publishedTime } : {}),\n ...(input.article?.modifiedTime ? { modifiedTime: input.article.modifiedTime } : {}),\n ...(input.article?.authors && input.article.authors.length > 0\n ? { authors: input.article.authors }\n : {}),\n },\n twitter: {\n card: 'summary_large_image',\n title: resolvedTitle,\n description: input.description,\n images: [twitterImage],\n },\n }\n}\n\nexport function buildBrandlabMetadata(\n input: BuildBrandlabMetadataInput,\n): BrandlabSeoMetadata {\n assertBrandlabMetadataInput(input)\n return buildSeoMetadata(input)\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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","sourcesContent":["import { normalizeBrandlabRoutePath } from './routes.js'\nimport { assertBrandlabCanonicalEntityId } from './entity-id.js'\nimport type { GooglePlaceReviewsSelection } from './google-reviews.js'\n\nexport type BrandlabProjectProfile =\n | 'next-local-service'\n | 'next-root-level'\n\nexport type BrandlabRouteFamily =\n | 'services'\n | 'locations'\n | 'service-locations'\n | 'blog'\n | 'projects'\n | 'legal'\n\nexport type BrandlabBlogAdapter = 'none' | 'mdx' | 'structured'\nexport type BrandlabContactAttachmentMode =\n | 'none'\n | 'images-optional'\n | 'images-required'\nexport type BrandlabLocationStrategy =\n | 'none'\n | 'approved-service-area'\n | 'physical-location'\n | 'multi-location'\nexport type BrandlabReviewsProvider = 'google-places' | 'project-owned'\nexport type BrandlabGoogleReviewsMode = 'link-only' | 'summary' | 'full'\n\nexport type BrandlabReviewsCapability =\n | { provider: 'project-owned' }\n | {\n provider: 'google-places'\n mode: BrandlabGoogleReviewsMode\n /** Optional presentation policy. Five-star selection is valid only in full mode. */\n selection?: GooglePlaceReviewsSelection\n /** Stable route IDs where review proof is intentionally presented. */\n routeIds: readonly string[]\n }\n\nexport interface BrandlabRouteAlias {\n from: string\n to: string\n status?: 301 | 308\n}\n\nexport interface BrandlabException {\n ruleId: string\n rationale: string\n owner: 'Romie'\n evidence: string\n expiresAt?: string\n reviewTrigger: string\n}\n\nexport type BrandlabSitemapConfig =\n | { mode: 'single' }\n | {\n mode: 'split'\n families: readonly string[]\n reason: string\n }\n\nexport interface BrandlabProjectConfig {\n projectId: string\n profile: BrandlabProjectProfile\n routes: {\n families: readonly BrandlabRouteFamily[]\n aliases?: readonly BrandlabRouteAlias[]\n }\n capabilities?: {\n blog?: { adapter: BrandlabBlogAdapter }\n contact?: {\n fieldProfile: string\n attachments: BrandlabContactAttachmentMode\n }\n locations?: { strategy: BrandlabLocationStrategy }\n reviews?: BrandlabReviewsCapability\n }\n sitemap?: BrandlabSitemapConfig\n searchCertification: {\n representativeRoutes: {\n home: string\n contact?: string\n service?: string\n location?: string\n blog?: string\n }\n }\n exceptions?: readonly BrandlabException[]\n}\n\nconst PROJECT_PROFILES = new Set<BrandlabProjectProfile>([\n 'next-local-service',\n 'next-root-level',\n])\nconst ROUTE_FAMILIES = new Set<BrandlabRouteFamily>([\n 'services',\n 'locations',\n 'service-locations',\n 'blog',\n 'projects',\n 'legal',\n])\nconst BLOG_ADAPTERS = new Set<BrandlabBlogAdapter>(['none', 'mdx', 'structured'])\nconst ATTACHMENT_MODES = new Set<BrandlabContactAttachmentMode>([\n 'none',\n 'images-optional',\n 'images-required',\n])\nconst LOCATION_STRATEGIES = new Set<BrandlabLocationStrategy>([\n 'none',\n 'approved-service-area',\n 'physical-location',\n 'multi-location',\n])\nconst REVIEWS_PROVIDERS = new Set<BrandlabReviewsProvider>([\n 'google-places',\n 'project-owned',\n])\nconst GOOGLE_REVIEWS_MODES = new Set<BrandlabGoogleReviewsMode>([\n 'link-only',\n 'summary',\n 'full',\n])\nconst GOOGLE_REVIEWS_SELECTIONS = new Set<GooglePlaceReviewsSelection>([\n 'relevance',\n 'five-star-featured',\n])\n\nfunction assertNonEmpty(value: string, field: string) {\n if (!value.trim()) {\n throw new Error(`${field} cannot be empty.`)\n }\n}\n\nfunction assertRootRelativePath(path: string, field: string) {\n try {\n normalizeBrandlabRoutePath(path)\n } catch {\n throw new Error(`${field} must be a root-relative path without a query string or hash.`)\n }\n}\n\nfunction assertUnique(values: readonly string[], field: string) {\n const duplicate = values.find((value, index) => values.indexOf(value) !== index)\n if (duplicate) {\n throw new Error(`${field} contains duplicate value \"${duplicate}\".`)\n }\n}\n\n/**\n * Defines project-owned variation only. Runtime versions and global Brandlab\n * policy deliberately do not belong in this object.\n */\nexport function defineBrandlabProject<const T extends BrandlabProjectConfig>(config: T): T {\n assertNonEmpty(config.projectId, 'projectId')\n\n assertBrandlabCanonicalEntityId(config.projectId)\n if (!PROJECT_PROFILES.has(config.profile)) {\n throw new Error(`Unsupported project profile \"${String(config.profile)}\".`)\n }\n\n assertUnique(config.routes.families, 'routes.families')\n config.routes.families.forEach((family, index) => {\n if (!ROUTE_FAMILIES.has(family)) {\n throw new Error(`routes.families[${index}] is unsupported.`)\n }\n })\n\n const aliases = config.routes.aliases ?? []\n const normalizedAliases = aliases.map((alias) => ({\n ...alias,\n from: normalizeBrandlabRoutePath(alias.from),\n to: normalizeBrandlabRoutePath(alias.to),\n }))\n assertUnique(\n normalizedAliases.map((alias) => alias.from),\n 'routes.aliases.from',\n )\n\n aliases.forEach((alias, index) => {\n assertRootRelativePath(alias.from, `routes.aliases[${index}].from`)\n assertRootRelativePath(alias.to, `routes.aliases[${index}].to`)\n if (alias.status !== undefined && alias.status !== 301 && alias.status !== 308) {\n throw new Error(`routes.aliases[${index}].status must be 301 or 308.`)\n }\n if (normalizedAliases[index]!.from === normalizedAliases[index]!.to) {\n throw new Error(`routes.aliases[${index}] cannot redirect a path to itself.`)\n }\n })\n\n const aliasTargets = new Set(normalizedAliases.map((alias) => alias.to))\n const chainedAlias = normalizedAliases.find((alias) => aliasTargets.has(alias.from))\n if (chainedAlias) {\n throw new Error(`Route alias \"${chainedAlias.from}\" creates a redirect chain or cycle.`)\n }\n\n const representativeRoutes = config.searchCertification.representativeRoutes\n Object.entries(representativeRoutes).forEach(([name, path]) => {\n if (path) assertRootRelativePath(path, `searchCertification.representativeRoutes.${name}`)\n })\n if (representativeRoutes.home !== '/') {\n throw new Error('searchCertification.representativeRoutes.home must be \"/\".')\n }\n\n if (config.capabilities?.contact) {\n assertNonEmpty(config.capabilities.contact.fieldProfile, 'contact.fieldProfile')\n if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(config.capabilities.contact.fieldProfile)) {\n throw new Error('contact.fieldProfile must be lowercase kebab-case.')\n }\n if (!ATTACHMENT_MODES.has(config.capabilities.contact.attachments)) {\n throw new Error('contact.attachments is unsupported.')\n }\n }\n if (\n config.capabilities?.blog &&\n !BLOG_ADAPTERS.has(config.capabilities.blog.adapter)\n ) {\n throw new Error('blog.adapter is unsupported.')\n }\n if (\n config.capabilities?.locations &&\n !LOCATION_STRATEGIES.has(config.capabilities.locations.strategy)\n ) {\n throw new Error('locations.strategy is unsupported.')\n }\n if (\n config.capabilities?.reviews &&\n !REVIEWS_PROVIDERS.has(config.capabilities.reviews.provider)\n ) {\n throw new Error('reviews.provider is unsupported.')\n }\n if (\n config.capabilities?.reviews?.provider === 'google-places' &&\n !config.routes.families.includes('legal')\n ) {\n throw new Error('Google Places reviews require the legal route family.')\n }\n if (config.capabilities?.reviews?.provider === 'google-places') {\n const reviews = config.capabilities.reviews\n if (!GOOGLE_REVIEWS_MODES.has(reviews.mode)) {\n throw new Error('reviews.mode is unsupported.')\n }\n if (reviews.selection && !GOOGLE_REVIEWS_SELECTIONS.has(reviews.selection)) {\n throw new Error('reviews.selection is unsupported.')\n }\n if (reviews.selection === 'five-star-featured' && reviews.mode !== 'full') {\n throw new Error('Five-star featured reviews require full mode.')\n }\n if (!Array.isArray(reviews.routeIds) || reviews.routeIds.length === 0) {\n throw new Error('Google Places reviews require at least one approved route ID.')\n }\n assertUnique(reviews.routeIds, 'reviews.routeIds')\n reviews.routeIds.forEach((routeId, index) => {\n if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(routeId)) {\n throw new Error(`reviews.routeIds[${index}] must be lowercase kebab-case.`)\n }\n })\n }\n\n if (config.sitemap?.mode === 'split') {\n if (config.sitemap.families.length === 0) {\n throw new Error('Split sitemap configuration requires at least one family.')\n }\n assertUnique(config.sitemap.families, 'sitemap.families')\n config.sitemap.families.forEach((path, index) =>\n assertRootRelativePath(path, `sitemap.families[${index}]`),\n )\n assertNonEmpty(config.sitemap.reason, 'sitemap.reason')\n }\n\n assertUnique(\n (config.exceptions ?? []).map((exception) => exception.ruleId),\n 'exceptions.ruleId',\n )\n\n ;(config.exceptions ?? []).forEach((exception, index) => {\n assertNonEmpty(exception.ruleId, `exceptions[${index}].ruleId`)\n assertNonEmpty(exception.rationale, `exceptions[${index}].rationale`)\n assertNonEmpty(exception.evidence, `exceptions[${index}].evidence`)\n assertNonEmpty(exception.reviewTrigger, `exceptions[${index}].reviewTrigger`)\n if (exception.owner !== 'Romie') {\n throw new Error(`exceptions[${index}].owner must be \"Romie\".`)\n }\n\n if (exception.expiresAt && Number.isNaN(Date.parse(exception.expiresAt))) {\n throw new Error(`exceptions[${index}].expiresAt must be a valid date.`)\n }\n })\n\n return config\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"reviews.js","sourceRoot":"","sources":["../src/reviews.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reviews.js","sourceRoot":"","sources":["../src/reviews.ts"],"names":[],"mappings":"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","sourcesContent":["export type BrandlabReviewSource = 'direct' | 'google' | 'facebook' | 'industry-platform' | 'other'\n\nconst REVIEW_SOURCES = new Set<BrandlabReviewSource>([\n 'direct',\n 'google',\n 'facebook',\n 'industry-platform',\n 'other',\n])\nconst REVIEW_VISIBILITIES = new Set(['public', 'internal'] as const)\nconst REVIEW_RECORD_KEYS = new Set([\n 'id',\n 'reviewerName',\n 'text',\n 'rating',\n 'publishedAt',\n 'source',\n 'sourceName',\n 'sourceUrl',\n 'visibility',\n])\n\nexport interface BrandlabReviewRecord {\n id: string\n reviewerName: string\n text: string\n rating?: number\n publishedAt?: string\n source: BrandlabReviewSource\n sourceName: string\n sourceUrl?: string\n visibility: 'public' | 'internal'\n}\n\nfunction assertPlainExactRecord(\n value: unknown,\n field: string,\n allowedKeys: ReadonlySet<string>,\n) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error(`${field} must be a plain object.`)\n }\n const prototype = Object.getPrototypeOf(value)\n if (prototype !== Object.prototype && prototype !== null) {\n throw new Error(`${field} must be a plain object.`)\n }\n const keys = Reflect.ownKeys(value)\n if (keys.some((key) => typeof key !== 'string' || !allowedKeys.has(key))) {\n throw new Error(`${field} contains unsupported fields.`)\n }\n const descriptors = Object.getOwnPropertyDescriptors(value)\n if (Object.values(descriptors).some((descriptor) => descriptor.get || descriptor.set)) {\n throw new Error(`${field} must contain data properties only.`)\n }\n}\n\nfunction assertNonEmpty(value: unknown, field: string) {\n if (typeof value !== 'string' || !value.trim()) {\n throw new Error(`${field} cannot be empty.`)\n }\n}\n\nfunction assertValidDate(value: unknown, field: string) {\n if (value !== undefined && (typeof value !== 'string' || Number.isNaN(Date.parse(value)))) {\n throw new Error(`${field} must be a valid date.`)\n }\n}\n\nexport function defineReviewRecord<const T extends BrandlabReviewRecord>(review: T): T {\n assertPlainExactRecord(review, 'review', REVIEW_RECORD_KEYS)\n assertNonEmpty(review.id, 'id')\n if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(review.id)) {\n throw new Error('id must be lowercase kebab-case.')\n }\n assertNonEmpty(review.reviewerName, 'reviewerName')\n assertNonEmpty(review.text, 'text')\n assertNonEmpty(review.sourceName, 'sourceName')\n if (!REVIEW_SOURCES.has(review.source)) {\n throw new Error('source must use a supported review source.')\n }\n if (!REVIEW_VISIBILITIES.has(review.visibility)) {\n throw new Error('visibility must be public or internal.')\n }\n assertValidDate(review.publishedAt, 'publishedAt')\n\n if (\n review.rating !== undefined &&\n (!Number.isFinite(review.rating) || review.rating < 1 || review.rating > 5)\n ) {\n throw new Error('rating must be between 1 and 5.')\n }\n\n if (review.sourceUrl !== undefined) {\n if (\n typeof review.sourceUrl !== 'string' ||\n review.sourceUrl.trim() !== review.sourceUrl\n ) {\n throw new Error('sourceUrl must use absolute HTTPS.')\n }\n let url: URL\n try {\n url = new URL(review.sourceUrl)\n } catch {\n throw new Error('sourceUrl must use absolute HTTPS.')\n }\n if (url.protocol !== 'https:' || url.username || url.password) {\n throw new Error('sourceUrl must use absolute HTTPS.')\n }\n }\n if (review.visibility === 'public' && review.source !== 'direct' && !review.sourceUrl) {\n throw new Error('Public third-party reviews require an attributable sourceUrl.')\n }\n\n return review\n}\n\nexport function isPublicReviewRecord(\n review: BrandlabReviewRecord,\n): review is BrandlabReviewRecord & { visibility: 'public' } {\n try {\n defineReviewRecord(review)\n return review.visibility === 'public'\n } catch {\n return false\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"rich-text.js","sourceRoot":"","sources":["../src/rich-text.ts"],"names":[],"mappings":"AAMA,MAAM,yBAAyB,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAU,CAAA;AACxE,MAAM,yBAAyB,GAAG,uBAAuB,CAAA;AACzD,MAAM,oCAAoC,GAAG,mBAAmB,CAAA;AAEhE,SAAS,yBAAyB,CAAC,SAA4B;IAC7D,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;AACrE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,EACE,gBAAgB,GAAG,yBAAyB,EAC5C,kBAAkB,GAAG,IAAI,EACzB,cAAc,GAAG,IAAI,MACC,EAAE;IAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAEzB,IACE,CAAC,KAAK;QACN,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC;QACrC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC,EAChD,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,cAAc,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,kBAAkB,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;IAC9C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;QAC1B,OAAO,CAAC,GAAG,CAAC,QAAQ;YAClB,CAAC,GAAG,CAAC,QAAQ;YACb,yBAAyB,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC3E,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,IAAI,CAAA;IACV,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,MAA2B;IAC9E,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAExD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;IAChD,CAAC;IAED,OAAO,aAAa,CAAA;AACtB,CAAC"}
1
+ {"version":3,"file":"rich-text.js","sourceRoot":"","sources":["../src/rich-text.ts"],"names":[],"mappings":"AAMA,MAAM,yBAAyB,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAU,CAAA;AACxE,MAAM,yBAAyB,GAAG,uBAAuB,CAAA;AACzD,MAAM,oCAAoC,GAAG,mBAAmB,CAAA;AAEhE,SAAS,yBAAyB,CAAC,SAA4B;IAC7D,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;AACrE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,EACE,gBAAgB,GAAG,yBAAyB,EAC5C,kBAAkB,GAAG,IAAI,EACzB,cAAc,GAAG,IAAI,MACC,EAAE;IAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAEzB,IACE,CAAC,KAAK;QACN,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC;QACrC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC,EAChD,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,cAAc,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,kBAAkB,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;IAC9C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;QAC1B,OAAO,CAAC,GAAG,CAAC,QAAQ;YAClB,CAAC,GAAG,CAAC,QAAQ;YACb,yBAAyB,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC3E,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,IAAI,CAAA;IACV,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,MAA2B;IAC9E,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAExD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;IAChD,CAAC;IAED,OAAO,aAAa,CAAA;AACtB,CAAC","sourcesContent":["export interface RichTextHrefPolicy {\n allowedProtocols?: readonly string[]\n allowInternalPaths?: boolean\n allowHashLinks?: boolean\n}\n\nconst DEFAULT_ALLOWED_PROTOCOLS = ['https:', 'mailto:', 'tel:'] as const\nconst CONTROL_CHARACTER_PATTERN = /[\\u0000-\\u001f\\u007f]/\nconst ENCODED_SEPARATOR_OR_CONTROL_PATTERN = /%(?:0a|0d|2f|5c)/i\n\nfunction normalizeAllowedProtocols(protocols: readonly string[]) {\n return new Set(protocols.map((protocol) => protocol.toLowerCase()))\n}\n\nexport function sanitizeRichTextHref(\n href: string,\n {\n allowedProtocols = DEFAULT_ALLOWED_PROTOCOLS,\n allowInternalPaths = true,\n allowHashLinks = true,\n }: RichTextHrefPolicy = {},\n): string | null {\n const value = href.trim()\n\n if (\n !value ||\n CONTROL_CHARACTER_PATTERN.test(value) ||\n value.includes('\\\\') ||\n ENCODED_SEPARATOR_OR_CONTROL_PATTERN.test(value)\n ) {\n return null\n }\n\n if (allowHashLinks && value.startsWith('#')) {\n return value\n }\n\n if (allowInternalPaths && value.startsWith('/')) {\n return value.startsWith('//') ? null : value\n }\n\n try {\n const url = new URL(value)\n return !url.username &&\n !url.password &&\n normalizeAllowedProtocols(allowedProtocols).has(url.protocol.toLowerCase())\n ? value\n : null\n } catch {\n return null\n }\n}\n\nexport function assertSafeRichTextHref(href: string, policy?: RichTextHrefPolicy) {\n const sanitizedHref = sanitizeRichTextHref(href, policy)\n\n if (!sanitizedHref) {\n throw new Error('Unsafe rich text link href.')\n }\n\n return sanitizedHref\n}\n"]}
package/dist/routes.d.ts CHANGED
@@ -1,12 +1,11 @@
1
1
  import { type BrandlabLocationRouteDecision } from './locations.js';
2
2
  export type BrandlabIndexingDirective = 'index' | 'noindex-follow' | 'noindex-nofollow';
3
- export type BrandlabLegalRoutePurpose = 'terms' | 'privacy' | 'other';
3
+ export type BrandlabLegalRoutePurpose = 'terms' | 'privacy';
4
4
  export type BrandlabLegalReference = 'google-maps-platform-terms' | 'google-privacy-policy';
5
5
  export declare const BRANDLAB_LEGAL_REFERENCE_URLS: Readonly<Record<BrandlabLegalReference, string>>;
6
- export type BrandlabRouteKind = 'home' | 'service-index' | 'service' | 'location-index' | 'location' | 'service-location' | 'blog-index' | 'blog-post' | 'project-index' | 'project' | 'contact' | 'legal' | 'thank-you';
7
- export interface BrandlabRoute {
6
+ export type BrandlabRouteKind = 'home' | 'service-index' | 'service' | 'location-index' | 'location' | 'service-location' | 'blog-index' | 'blog-post' | 'project-index' | 'project' | 'content' | 'contact' | 'legal' | 'utility' | 'thank-you';
7
+ interface BrandlabRouteBase {
8
8
  id: string;
9
- kind: BrandlabRouteKind;
10
9
  path: string;
11
10
  breadcrumbLabel: string;
12
11
  parentId?: string;
@@ -15,10 +14,18 @@ export interface BrandlabRoute {
15
14
  lastSignificantChange?: string;
16
15
  /** Preferred explicit publication decision for location routes. */
17
16
  locationDecision?: BrandlabLocationRouteDecision;
17
+ }
18
+ export type BrandlabRoute = (BrandlabRouteBase & {
19
+ kind: 'legal';
18
20
  /** Machine-identifiable legal surface used by provider policy binding. */
19
- legalPurpose?: BrandlabLegalRoutePurpose;
21
+ legalPurpose: BrandlabLegalRoutePurpose;
20
22
  legalReferences?: readonly BrandlabLegalReference[];
21
- }
23
+ }) | (BrandlabRouteBase & {
24
+ kind: Exclude<BrandlabRouteKind, 'legal'>;
25
+ /** Legal policy fields are reserved for legal routes. */
26
+ legalPurpose?: never;
27
+ legalReferences?: never;
28
+ });
22
29
  export type BrandlabRouteCatalog = readonly BrandlabRoute[];
23
30
  export declare function resolveBrandlabRouteIndexing(route: BrandlabRoute): BrandlabIndexingDirective;
24
31
  export declare function normalizeBrandlabRoutePath(path: string): string;
@@ -31,4 +38,5 @@ export declare function getBrandlabRoutePathIdentity(path: string): string;
31
38
  export declare function defineRouteCatalog<const T extends BrandlabRouteCatalog>(routes: T): T;
32
39
  export declare function getRouteById(routes: BrandlabRouteCatalog, routeId: string): BrandlabRoute | undefined;
33
40
  export declare function getRouteByPath(routes: BrandlabRouteCatalog, path: string): BrandlabRoute | undefined;
41
+ export {};
34
42
  //# sourceMappingURL=routes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,6BAA6B,EACnC,MAAM,gBAAgB,CAAA;AAEvB,MAAM,MAAM,yBAAyB,GACjC,OAAO,GACP,gBAAgB,GAChB,kBAAkB,CAAA;AAEtB,MAAM,MAAM,yBAAyB,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAA;AACrE,MAAM,MAAM,sBAAsB,GAC9B,4BAA4B,GAC5B,uBAAuB,CAAA;AAE3B,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAGzF,CAAA;AAEF,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN,eAAe,GACf,SAAS,GACT,gBAAgB,GAChB,UAAU,GACV,kBAAkB,GAClB,YAAY,GACZ,WAAW,GACX,eAAe,GACf,SAAS,GACT,SAAS,GACT,OAAO,GACP,WAAW,CAAA;AA4Bf,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,iBAAiB,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,yBAAyB,CAAA;IACnC,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,6BAA6B,CAAA;IAChD,0EAA0E;IAC1E,YAAY,CAAC,EAAE,yBAAyB,CAAA;IACxC,eAAe,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAA;CACpD;AAED,MAAM,MAAM,oBAAoB,GAAG,SAAS,aAAa,EAAE,CAAA;AAE3D,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,aAAa,GAAG,yBAAyB,CAK5F;AAUD,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,UAyBtD;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,UAOxD;AA0CD,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,CAAC,SAAS,oBAAoB,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAqHrF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,6BAEzE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,6BAKxE"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,6BAA6B,EACnC,MAAM,gBAAgB,CAAA;AAEvB,MAAM,MAAM,yBAAyB,GACjC,OAAO,GACP,gBAAgB,GAChB,kBAAkB,CAAA;AAEtB,MAAM,MAAM,yBAAyB,GAAG,OAAO,GAAG,SAAS,CAAA;AAC3D,MAAM,MAAM,sBAAsB,GAC9B,4BAA4B,GAC5B,uBAAuB,CAAA;AAE3B,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAGzF,CAAA;AAEF,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN,eAAe,GACf,SAAS,GACT,gBAAgB,GAChB,UAAU,GACV,kBAAkB,GAClB,YAAY,GACZ,WAAW,GACX,eAAe,GACf,SAAS,GACT,SAAS,GACT,SAAS,GACT,OAAO,GACP,SAAS,GACT,WAAW,CAAA;AA6Bf,UAAU,iBAAiB;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,yBAAyB,CAAA;IACnC,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,6BAA6B,CAAA;CACjD;AAED,MAAM,MAAM,aAAa,GACrB,CAAC,iBAAiB,GAAG;IACnB,IAAI,EAAE,OAAO,CAAA;IACb,0EAA0E;IAC1E,YAAY,EAAE,yBAAyB,CAAA;IACvC,eAAe,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAA;CACpD,CAAC,GACF,CAAC,iBAAiB,GAAG;IACnB,IAAI,EAAE,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAA;IACzC,yDAAyD;IACzD,YAAY,CAAC,EAAE,KAAK,CAAA;IACpB,eAAe,CAAC,EAAE,KAAK,CAAA;CACxB,CAAC,CAAA;AAEN,MAAM,MAAM,oBAAoB,GAAG,SAAS,aAAa,EAAE,CAAA;AAE3D,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,aAAa,GAAG,yBAAyB,CAK5F;AAUD,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,UAyBtD;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,UAOxD;AA0CD,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,CAAC,SAAS,oBAAoB,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CA+HrF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,6BAEzE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,6BAKxE"}
package/dist/routes.js CHANGED
@@ -14,8 +14,10 @@ const BRANDLAB_ROUTE_KINDS = new Set([
14
14
  'blog-post',
15
15
  'project-index',
16
16
  'project',
17
+ 'content',
17
18
  'contact',
18
19
  'legal',
20
+ 'utility',
19
21
  'thank-you',
20
22
  ]);
21
23
  const BRANDLAB_INDEXING_DIRECTIVES = new Set([
@@ -26,7 +28,6 @@ const BRANDLAB_INDEXING_DIRECTIVES = new Set([
26
28
  const BRANDLAB_LEGAL_PURPOSES = new Set([
27
29
  'terms',
28
30
  'privacy',
29
- 'other',
30
31
  ]);
31
32
  export function resolveBrandlabRouteIndexing(route) {
32
33
  assertRouteRuntimeEnums(route);
@@ -176,22 +177,24 @@ export function defineRouteCatalog(routes) {
176
177
  else if (route.locationDecision !== undefined) {
177
178
  throw new Error(`Route "${route.id}" cannot declare location publication data for kind "${route.kind}".`);
178
179
  }
179
- if (route.kind === 'legal') {
180
- if (!route.legalPurpose) {
181
- throw new Error(`Legal route "${route.id}" requires legalPurpose.`);
180
+ const runtimeLegalRoute = route;
181
+ if (runtimeLegalRoute.kind === 'legal') {
182
+ if (!runtimeLegalRoute.legalPurpose) {
183
+ throw new Error(`Legal route "${runtimeLegalRoute.id}" requires legalPurpose.`);
182
184
  }
183
- const legalReferences = route.legalReferences ?? [];
185
+ const legalReferences = runtimeLegalRoute.legalReferences ?? [];
184
186
  const unsupportedReference = legalReferences.find((reference) => !Object.hasOwn(BRANDLAB_LEGAL_REFERENCE_URLS, reference));
185
187
  if (unsupportedReference) {
186
- throw new Error(`Legal route "${route.id}" has unsupported reference "${unsupportedReference}".`);
188
+ throw new Error(`Legal route "${runtimeLegalRoute.id}" has unsupported reference "${unsupportedReference}".`);
187
189
  }
188
190
  const duplicateReference = findDuplicate(legalReferences);
189
191
  if (duplicateReference) {
190
- throw new Error(`Legal route "${route.id}" repeats legal reference "${duplicateReference}".`);
192
+ throw new Error(`Legal route "${runtimeLegalRoute.id}" repeats legal reference "${duplicateReference}".`);
191
193
  }
192
194
  }
193
- else if (route.legalPurpose !== undefined || route.legalReferences !== undefined) {
194
- throw new Error(`Route "${route.id}" cannot declare legal policy fields for kind "${route.kind}".`);
195
+ else if (runtimeLegalRoute.legalPurpose !== undefined ||
196
+ runtimeLegalRoute.legalReferences !== undefined) {
197
+ throw new Error(`Route "${runtimeLegalRoute.id}" cannot declare legal policy fields for kind "${runtimeLegalRoute.kind}".`);
195
198
  }
196
199
  if (route.parentId && !routeById.has(route.parentId)) {
197
200
  throw new Error(`Route "${route.id}" references unknown parent "${route.parentId}".`);
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n resolveLocationRouteIndexing,\n type BrandlabLocationRouteDecision,\n} from './locations.js'\n\nexport type BrandlabIndexingDirective =\n | 'index'\n | 'noindex-follow'\n | 'noindex-nofollow'\n\nexport type BrandlabLegalRoutePurpose = 'terms' | 'privacy'\nexport type BrandlabLegalReference =\n | 'google-maps-platform-terms'\n | 'google-privacy-policy'\n\nexport const BRANDLAB_LEGAL_REFERENCE_URLS: Readonly<Record<BrandlabLegalReference, string>> = Object.freeze({\n 'google-maps-platform-terms': 'https://cloud.google.com/maps-platform/terms',\n 'google-privacy-policy': 'https://policies.google.com/privacy',\n})\n\nexport type BrandlabRouteKind =\n | 'home'\n | 'service-index'\n | 'service'\n | 'location-index'\n | 'location'\n | 'service-location'\n | 'blog-index'\n | 'blog-post'\n | 'project-index'\n | 'project'\n | 'content'\n | 'contact'\n | 'legal'\n | 'utility'\n | 'thank-you'\n\nconst BRANDLAB_ROUTE_KINDS = new Set<BrandlabRouteKind>([\n 'home',\n 'service-index',\n 'service',\n 'location-index',\n 'location',\n 'service-location',\n 'blog-index',\n 'blog-post',\n 'project-index',\n 'project',\n 'content',\n 'contact',\n 'legal',\n 'utility',\n 'thank-you',\n])\nconst BRANDLAB_INDEXING_DIRECTIVES = new Set<BrandlabIndexingDirective>([\n 'index',\n 'noindex-follow',\n 'noindex-nofollow',\n])\nconst BRANDLAB_LEGAL_PURPOSES = new Set<BrandlabLegalRoutePurpose>([\n 'terms',\n 'privacy',\n])\n\ninterface BrandlabRouteBase {\n id: string\n path: string\n breadcrumbLabel: string\n parentId?: string\n canonicalPath?: string\n indexing: BrandlabIndexingDirective\n lastSignificantChange?: string\n /** Preferred explicit publication decision for location routes. */\n locationDecision?: BrandlabLocationRouteDecision\n}\n\nexport type BrandlabRoute =\n | (BrandlabRouteBase & {\n kind: 'legal'\n /** Machine-identifiable legal surface used by provider policy binding. */\n legalPurpose: BrandlabLegalRoutePurpose\n legalReferences?: readonly BrandlabLegalReference[]\n })\n | (BrandlabRouteBase & {\n kind: Exclude<BrandlabRouteKind, 'legal'>\n /** Legal policy fields are reserved for legal routes. */\n legalPurpose?: never\n legalReferences?: never\n })\n\nexport type BrandlabRouteCatalog = readonly BrandlabRoute[]\n\nexport function resolveBrandlabRouteIndexing(route: BrandlabRoute): BrandlabIndexingDirective {\n assertRouteRuntimeEnums(route)\n return route.kind === 'location' || route.kind === 'service-location'\n ? resolveLocationRouteIndexing(route.locationDecision)\n : route.indexing\n}\n\nfunction isUnsafeRouteSegment(segment: string) {\n if (segment === '.' || segment === '..') return true\n if (/%(?:25)*(?:2f|5c)/i.test(segment)) return true\n if (/%(?:25)*(?:0[0-9a-f]|1[0-9a-f]|23|3f|7f)/i.test(segment)) return true\n const decodedDots = segment.replace(/%(?:25)*2e/gi, '.')\n return decodedDots === '.' || decodedDots === '..'\n}\n\nexport function normalizeBrandlabRoutePath(path: string) {\n if (typeof path !== 'string') {\n throw new Error('Route path must be a string.')\n }\n const trimmed = path.trim()\n if (\n trimmed !== path ||\n !trimmed.startsWith('/') ||\n trimmed.startsWith('//') ||\n trimmed.includes('\\\\') ||\n /%(?![0-9a-f]{2})/i.test(trimmed) ||\n /[\\u0000-\\u001f\\u007f]/.test(trimmed) ||\n trimmed.includes('?') ||\n trimmed.includes('#') ||\n trimmed.split('/').some(isUnsafeRouteSegment)\n ) {\n throw new Error(`Route path must be root-relative without a query string or hash: \"${path}\".`)\n }\n\n const normalized = trimmed.replace(/\\/{2,}/g, '/')\n const canonical = normalized === '/' ? '/' : normalized.replace(/\\/+$/, '')\n if (new URL(canonical, 'https://brandlab.invalid').pathname !== canonical) {\n throw new Error(`Route path must use its canonical URL encoding: \"${path}\".`)\n }\n return canonical\n}\n\n/**\n * Browser/server ownership key used only for collision and lookup checks. It\n * preserves the declared canonical spelling while preventing an encoded form\n * of the same path from becoming a second route owner.\n */\nexport function getBrandlabRoutePathIdentity(path: string) {\n const normalized = normalizeBrandlabRoutePath(path)\n try {\n return decodeURIComponent(normalized).normalize('NFC')\n } catch {\n throw new Error(`Route path contains invalid URL encoding: \"${path}\".`)\n }\n}\n\nfunction assertNonEmpty(value: string, field: string) {\n if (!value.trim()) throw new Error(`${field} cannot be empty.`)\n}\n\nfunction findDuplicate(values: readonly string[]) {\n return values.find((value, index) => values.indexOf(value) !== index)\n}\n\nfunction assertRouteRuntimeEnums(route: BrandlabRoute, index?: number) {\n const label = index === undefined ? 'Route' : `routes[${index}]`\n if (!route || typeof route !== 'object' || Array.isArray(route)) {\n throw new Error(`${label} must be a route record.`)\n }\n if (!BRANDLAB_ROUTE_KINDS.has(route.kind)) {\n throw new Error(`${label}.kind must use a supported Brandlab route kind.`)\n }\n if (!BRANDLAB_INDEXING_DIRECTIVES.has(route.indexing)) {\n throw new Error(`${label}.indexing must use an explicit Brandlab indexing directive.`)\n }\n if (\n route.legalPurpose !== undefined &&\n !BRANDLAB_LEGAL_PURPOSES.has(route.legalPurpose)\n ) {\n throw new Error(`${label}.legalPurpose is unsupported.`)\n }\n if (route.legalReferences !== undefined) {\n if (!Array.isArray(route.legalReferences)) {\n throw new Error(`${label}.legalReferences must be an array.`)\n }\n const hasUnsupported = (route.legalReferences as readonly unknown[]).some(\n (reference) =>\n typeof reference !== 'string' ||\n !Object.hasOwn(BRANDLAB_LEGAL_REFERENCE_URLS, reference),\n )\n if (hasUnsupported) {\n throw new Error(`${label}.legalReferences contains an unsupported value.`)\n }\n }\n}\n\nexport function defineRouteCatalog<const T extends BrandlabRouteCatalog>(routes: T): T {\n if (!Array.isArray(routes)) throw new Error('Route catalog must be an array.')\n if (routes.length === 0) throw new Error('Route catalog cannot be empty.')\n routes.forEach((route, index) => assertRouteRuntimeEnums(route, index))\n\n const ids = routes.map((route) => route.id)\n const paths = routes.map((route) => getBrandlabRoutePathIdentity(route.path))\n const effectiveCanonicalPaths = routes.map((route) =>\n getBrandlabRoutePathIdentity(route.canonicalPath ?? route.path),\n )\n const duplicateId = findDuplicate(ids)\n const duplicatePath = findDuplicate(paths)\n const duplicateCanonicalPath = findDuplicate(effectiveCanonicalPaths)\n\n if (duplicateId) throw new Error(`Route catalog contains duplicate ID \"${duplicateId}\".`)\n if (duplicatePath) throw new Error(`Route catalog contains duplicate path \"${duplicatePath}\".`)\n if (duplicateCanonicalPath) {\n throw new Error(`Route catalog contains duplicate canonical path \"${duplicateCanonicalPath}\".`)\n }\n\n const homeRoutes = routes.filter((route) => route.kind === 'home')\n if (homeRoutes.length !== 1) {\n throw new Error('Route catalog must contain exactly one home route.')\n }\n if (normalizeBrandlabRoutePath(homeRoutes[0]!.path) !== '/' || homeRoutes[0]!.parentId) {\n throw new Error('The home route must use path \"/\" and cannot have a parent.')\n }\n\n const routeById = new Map(routes.map((route) => [route.id, route]))\n const protectedLegalPurposes = routes\n .filter((route): route is typeof route & { legalPurpose: 'terms' | 'privacy' } =>\n route.kind === 'legal' &&\n (route.legalPurpose === 'terms' || route.legalPurpose === 'privacy'),\n )\n .map((route) => route.legalPurpose)\n const duplicateLegalPurpose = findDuplicate(protectedLegalPurposes)\n if (duplicateLegalPurpose) {\n throw new Error(`Route catalog contains duplicate legal purpose \"${duplicateLegalPurpose}\".`)\n }\n\n routes.forEach((route, index) => {\n assertNonEmpty(route.id, `routes[${index}].id`)\n assertNonEmpty(route.breadcrumbLabel, `routes[${index}].breadcrumbLabel`)\n if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(route.id)) {\n throw new Error(`routes[${index}].id must be lowercase kebab-case.`)\n }\n\n if (route.kind !== 'home' && normalizeBrandlabRoutePath(route.path) === '/') {\n throw new Error('Only the home route may use path \"/\".')\n }\n if (route.kind !== 'home' && !route.parentId) {\n throw new Error(\n `Route \"${route.id}\" requires a parentId so its semantic hierarchy reaches Home.`,\n )\n }\n if (route.kind === 'thank-you' && route.indexing === 'index') {\n throw new Error('Thank-you routes must not be indexable.')\n }\n if (route.kind === 'location' || route.kind === 'service-location') {\n if (route.locationDecision === undefined) {\n throw new Error(`Route \"${route.id}\" requires an explicit locationDecision.`)\n }\n const expectedIndexing = resolveBrandlabRouteIndexing(route)\n if (route.indexing !== expectedIndexing) {\n throw new Error(\n `Route \"${route.id}\" indexing must match its location publication decision.`,\n )\n }\n } else if (route.locationDecision !== undefined) {\n throw new Error(\n `Route \"${route.id}\" cannot declare location publication data for kind \"${route.kind}\".`,\n )\n }\n const runtimeLegalRoute = route as BrandlabRouteBase & {\n kind: BrandlabRouteKind\n legalPurpose?: BrandlabLegalRoutePurpose\n legalReferences?: readonly BrandlabLegalReference[]\n }\n if (runtimeLegalRoute.kind === 'legal') {\n if (!runtimeLegalRoute.legalPurpose) {\n throw new Error(`Legal route \"${runtimeLegalRoute.id}\" requires legalPurpose.`)\n }\n const legalReferences = runtimeLegalRoute.legalReferences ?? []\n const unsupportedReference = legalReferences.find(\n (reference) => !Object.hasOwn(BRANDLAB_LEGAL_REFERENCE_URLS, reference),\n )\n if (unsupportedReference) {\n throw new Error(`Legal route \"${runtimeLegalRoute.id}\" has unsupported reference \"${unsupportedReference}\".`)\n }\n const duplicateReference = findDuplicate(legalReferences)\n if (duplicateReference) {\n throw new Error(`Legal route \"${runtimeLegalRoute.id}\" repeats legal reference \"${duplicateReference}\".`)\n }\n } else if (\n runtimeLegalRoute.legalPurpose !== undefined ||\n runtimeLegalRoute.legalReferences !== undefined\n ) {\n throw new Error(\n `Route \"${runtimeLegalRoute.id}\" cannot declare legal policy fields for kind \"${runtimeLegalRoute.kind}\".`,\n )\n }\n\n if (route.parentId && !routeById.has(route.parentId)) {\n throw new Error(`Route \"${route.id}\" references unknown parent \"${route.parentId}\".`)\n }\n if (route.parentId === route.id) {\n throw new Error(`Route \"${route.id}\" cannot be its own parent.`)\n }\n if (\n route.lastSignificantChange &&\n Number.isNaN(Date.parse(route.lastSignificantChange))\n ) {\n throw new Error(`Route \"${route.id}\" has an invalid lastSignificantChange date.`)\n }\n\n const visited = new Set([route.id])\n let parentId = route.parentId\n while (parentId) {\n if (visited.has(parentId)) {\n throw new Error(`Route catalog contains a parent cycle involving \"${route.id}\".`)\n }\n visited.add(parentId)\n parentId = routeById.get(parentId)?.parentId\n }\n })\n\n return routes\n}\n\nexport function getRouteById(routes: BrandlabRouteCatalog, routeId: string) {\n return routes.find((route) => route.id === routeId)\n}\n\nexport function getRouteByPath(routes: BrandlabRouteCatalog, path: string) {\n const identity = getBrandlabRoutePathIdentity(path)\n return routes.find(\n (route) => getBrandlabRoutePathIdentity(route.path) === identity,\n )\n}\n"]}