fansunited-data-layer 0.17.0 → 0.17.2
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.
|
@@ -18,6 +18,12 @@ export declare function resolveTranslation(translations: RawTranslation[], lang:
|
|
|
18
18
|
};
|
|
19
19
|
/**
|
|
20
20
|
* Map [{key: "LOGO", value: "url"}] → { logo: "url" }
|
|
21
|
+
*
|
|
22
|
+
* Defensively skips entries whose `key` or `value` is null/undefined.
|
|
23
|
+
* The {@link RawAsset} type declares both as non-nullable strings, but the
|
|
24
|
+
* Search API occasionally returns `{ key: null, … }` — without this guard,
|
|
25
|
+
* a single bad asset throws inside `toLowerCase()` and aborts the entire
|
|
26
|
+
* transform chain (crashing every consumer pulling entities across sports).
|
|
21
27
|
*/
|
|
22
28
|
export declare function resolveAssets(assets: RawAsset[]): Record<string, string>;
|
|
23
29
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/fansunited/search/transformer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACR,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EACf,UAAU,EACV,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,KAAK,EACR,cAAc,EACd,QAAQ,EACR,UAAU,EACV,cAAc,EACd,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,OAAO,EACP,UAAU,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACX,MAAM,aAAa,CAAC;AAMrB;;;GAGG;AACH,wBAAgB,kBAAkB,CAC9B,YAAY,EAAE,cAAc,EAAE,EAC9B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,GAClC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CA0BtC;AAED
|
|
1
|
+
{"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/fansunited/search/transformer.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,7 @@ function resolveTranslation(translations, lang, fallbackName, fallbackShortName)
|
|
|
26
26
|
function resolveAssets(assets) {
|
|
27
27
|
const result = {};
|
|
28
28
|
for (const asset of assets) {
|
|
29
|
+
if (typeof asset?.key !== "string" || typeof asset.value !== "string") continue;
|
|
29
30
|
result[asset.key.toLowerCase()] = asset.value;
|
|
30
31
|
}
|
|
31
32
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformer.js","sources":["../../../../src/lib/api/fansunited/search/transformer.ts"],"sourcesContent":["/**\n * Raw → Canonical transformer for Search API entities.\n *\n * Resolves translations to a target language (with EN fallback),\n * maps raw snake_case fields to canonical camelCase types,\n * and hydrates related entries (country + related) one level deep from cache.\n */\n\nimport { memoryStore, CACHE_KEY_PREFIX } from \"../../../cache\";\nimport type {\n FUSportsCompetition,\n FUSportsTeamCompetitor,\n FUSportsPlayerCompetitor,\n FUSportsCountry,\n FUSportsVenue,\n FUSportsCoach,\n FUSportsRelated,\n FUBranding,\n FUSportsCompetitionSummary,\n FUSportsTeamSummary,\n FUSportsPlayerSummary,\n FUSportsCountrySummary,\n FUSportsVenueSummary,\n FUSportsCoachSummary,\n} from \"../../../types/canonical/base.types\";\nimport type { SearchEntityResult, SearchEntitySummary } from \"./types\";\nimport type {\n RawTranslation,\n RawAsset,\n RawRelated,\n RawProviderRef,\n RawBranding,\n RawTeamBranding,\n RawSearchEntityBase,\n RawCompetition,\n RawTeam,\n RawAthlete,\n RawCountry,\n RawVenue,\n RawCoach,\n} from \"./raw-types\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve name/shortName in target language.\n * Fallback order: target lang → EN → raw name.\n */\nexport function resolveTranslation(\n translations: RawTranslation[],\n lang: string,\n fallbackName: string,\n fallbackShortName?: string | null\n): { name: string; shortName?: string } {\n const upperLang = lang.toUpperCase();\n\n const target = translations.find((t) => t.language.toUpperCase() === upperLang);\n if (target) {\n return {\n name: target.name,\n shortName: target.short_name ?? fallbackShortName ?? undefined,\n };\n }\n\n // Fallback to EN\n if (upperLang !== \"EN\") {\n const en = translations.find((t) => t.language.toUpperCase() === \"EN\");\n if (en) {\n return {\n name: en.name,\n shortName: en.short_name ?? fallbackShortName ?? undefined,\n };\n }\n }\n\n return {\n name: fallbackName,\n shortName: fallbackShortName ?? undefined,\n };\n}\n\n/**\n * Map [{key: \"LOGO\", value: \"url\"}] → { logo: \"url\" }\n */\nexport function resolveAssets(assets: RawAsset[]): Record<string, string> {\n const result: Record<string, string> = {};\n for (const asset of assets) {\n result[asset.key.toLowerCase()] = asset.value;\n }\n return result;\n}\n\n/**\n * Map raw branding snake_case → canonical FUBranding camelCase.\n */\nexport function resolveBranding(raw: RawBranding | RawTeamBranding | undefined | null): FUBranding | undefined {\n if (!raw) return undefined;\n\n const branding: FUBranding = {};\n if (raw.primary_color) branding.primaryColor = raw.primary_color;\n if (raw.secondary_color) branding.secondaryColor = raw.secondary_color;\n if (raw.text_color) branding.textColor = raw.text_color;\n if (raw.background_color) branding.backgroundColor = raw.background_color;\n if (raw.background_gradient_from_color) branding.backgroundGradientFromColor = raw.background_gradient_from_color;\n if (raw.background_gradient_to_color) branding.backgroundGradientToColor = raw.background_gradient_to_color;\n if (raw.background_image) branding.backgroundImage = raw.background_image;\n\n return Object.keys(branding).length > 0 ? branding : undefined;\n}\n\n/** Map raw provider_ref → canonical providerRef */\nexport function resolveProviderRef(refs: RawProviderRef[]): { provider: string; id: string }[] {\n return refs.map((r) => ({ provider: r.provider, id: r.id }));\n}\n\n/** Extract related IDs by relationship type */\nexport function getRelatedIds(related: RawRelated[], relationship: string): string[] {\n return related.filter((r) => r.relationship === relationship).map((r) => r.related_id);\n}\n\n/**\n * Resolve a country from cache (one level deep).\n * Returns FUSportsCountry with name in target lang if cached, or { id } if not.\n */\nexport function resolveCountry(\n countryId: string | null | undefined,\n related: RawRelated[],\n lang: string\n): FUSportsCountry | undefined {\n // Determine the country ID — from direct field or related array\n const id = countryId || getRelatedIds(related, \"COUNTRY\")[0];\n if (!id) return undefined;\n\n // Try cache lookup\n const cachedEntry = memoryStore.get<RawCountry>(id) ?? memoryStore.get<RawCountry>(`${CACHE_KEY_PREFIX}entity:${id}`);\n\n if (cachedEntry?.data) {\n const raw = cachedEntry.data;\n return transformCountrySummary(raw, lang);\n }\n\n // Not in cache — return partial\n return { id, name: id };\n}\n\n// ---------------------------------------------------------------------------\n// Summary transforms — used for list/search views AND one-level-deep related\n// entity hydration. These do NOT populate `related` or `providerRef`.\n// ---------------------------------------------------------------------------\n\nexport function transformCountrySummary(raw: RawCountry, lang: string): FUSportsCountrySummary {\n const { name, shortName } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const assets = resolveAssets(raw.assets ?? []);\n\n return {\n id: raw.id,\n name,\n ...(raw.country_code ? { code: raw.country_code } : {}),\n ...(assets.flag ? { flag: assets.flag } : {}),\n ...(shortName ? { shortName } : {}),\n };\n}\n\nexport function transformCompetitionSummary(raw: RawCompetition, lang: string): FUSportsCompetitionSummary {\n const { name, shortName } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const assets = resolveAssets(raw.assets ?? []);\n const branding = resolveBranding(raw.branding);\n const country = resolveCountry(null, raw.related ?? [], lang);\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n ...(shortName ? { shortName } : {}),\n ...(raw.format ? { type: raw.format as FUSportsCompetition[\"type\"] } : {}),\n ...(country ? { country } : {}),\n ...(assets.logo ? { assets: { logo: assets.logo } } : {}),\n ...(branding ? { metadata: { branding } } : {}),\n };\n}\n\nexport function transformTeamSummary(raw: RawTeam, lang: string): FUSportsTeamSummary {\n const { name, shortName } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const assets = resolveAssets(raw.assets ?? []);\n const branding = resolveBranding(raw.metadata?.branding);\n const country = resolveCountry(raw.country_id, raw.related ?? [], lang);\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n ...(shortName ? { shortName } : {}),\n ...(raw.three_letter_code ? { threeLetterCode: raw.three_letter_code } : {}),\n ...(raw.full_name ? { fullName: raw.full_name } : {}),\n ...(raw.nickname ? { nickname: raw.nickname } : {}),\n ...(raw.gender ? { gender: raw.gender as FUSportsTeamCompetitor[\"gender\"] } : {}),\n ...(country ? { country } : {}),\n ...(assets.logo ? { assets: { logo: assets.logo } } : {}),\n ...(branding ? { metadata: { branding } } : {}),\n };\n}\n\nexport function transformAthleteSummary(raw: RawAthlete, lang: string): FUSportsPlayerSummary {\n const { name, shortName } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const assets = resolveAssets(raw.assets ?? []);\n const branding = resolveBranding(raw.metadata?.branding);\n const country = resolveCountry(raw.country_id, raw.related ?? [], lang);\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n type: \"player\",\n ...(shortName ? { shortName } : {}),\n ...(raw.position ? { position: raw.position } : {}),\n ...(raw.birth_date ? { birthdate: raw.birth_date } : {}),\n ...(raw.shirt_number != null ? { shirtNumber: raw.shirt_number } : {}),\n ...(raw.gender ? { gender: raw.gender as FUSportsPlayerCompetitor[\"gender\"] } : {}),\n ...(country ? { country } : {}),\n ...(assets.logo || assets.headshot\n ? { assets: { ...(assets.logo ? { logo: assets.logo } : {}), ...(assets.headshot ? { photo: assets.headshot } : {}) } }\n : {}),\n ...(branding ? { metadata: { branding } } : {}),\n };\n}\n\nexport function transformVenueSummary(raw: RawVenue, lang: string): FUSportsVenueSummary {\n const { name } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const country = resolveCountry(raw.country_id, raw.related ?? [], lang);\n\n const hasProfile = raw.capacity != null || raw.latitude != null || raw.longitude != null;\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n ...(country ? { country } : {}),\n ...(hasProfile\n ? {\n profile: {\n ...(raw.capacity != null ? { capacity: raw.capacity } : {}),\n ...(raw.latitude != null ? { latitude: raw.latitude } : {}),\n ...(raw.longitude != null ? { longitude: raw.longitude } : {}),\n },\n }\n : {}),\n };\n}\n\nexport function transformCoachSummary(raw: RawCoach, lang: string): FUSportsCoachSummary {\n const { name } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const country = resolveCountry(raw.country_id, raw.related ?? [], lang);\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n ...(raw.birth_date ? { birthdate: raw.birth_date } : {}),\n ...(country ? { country } : {}),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Related entity resolution (one level deep from cache)\n// ---------------------------------------------------------------------------\n\n/**\n * Look up a cached raw entity and determine its type for shallow transformation.\n */\nfunction hydrateRelatedEntity(\n id: string,\n relationship: string,\n lang: string\n): FUSportsCompetition | FUSportsTeamCompetitor | FUSportsPlayerCompetitor | FUSportsCountry | undefined {\n const entry = memoryStore.get<RawSearchEntityBase & Record<string, unknown>>(id)\n ?? memoryStore.get<RawSearchEntityBase & Record<string, unknown>>(`${CACHE_KEY_PREFIX}entity:${id}`);\n\n if (!entry?.data) return undefined;\n\n const raw = entry.data;\n switch (relationship) {\n case \"COMPETITION\":\n return transformCompetitionSummary(raw as unknown as RawCompetition, lang);\n case \"TEAM\":\n return transformTeamSummary(raw as unknown as RawTeam, lang);\n case \"ATHLETE\":\n return transformAthleteSummary(raw as unknown as RawAthlete, lang);\n case \"COUNTRY\":\n return transformCountrySummary(raw as unknown as RawCountry, lang);\n default:\n return undefined;\n }\n}\n\n/**\n * Resolve all related entries from cache, grouped by relationship type.\n * Returns undefined if there are no related entries.\n */\nexport function resolveRelated(related: RawRelated[], lang: string): FUSportsRelated | undefined {\n if (!related || related.length === 0) return undefined;\n\n const result: FUSportsRelated = {};\n\n for (const entry of related) {\n const hydrated = hydrateRelatedEntity(entry.related_id, entry.relationship, lang);\n // Skip entries not in cache — the prefetch step in index.ts should have\n // fetched them. If still missing, the entity was not found by the API.\n if (!hydrated) continue;\n\n switch (entry.relationship) {\n case \"COMPETITION\":\n (result.competitions ??= []).push(hydrated as FUSportsCompetition);\n break;\n case \"TEAM\":\n (result.teams ??= []).push(hydrated as FUSportsTeamCompetitor);\n break;\n case \"ATHLETE\":\n (result.athletes ??= []).push(hydrated as FUSportsPlayerCompetitor);\n break;\n case \"COUNTRY\":\n (result.countries ??= []).push(hydrated as FUSportsCountry);\n break;\n }\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Entity transformers\n// ---------------------------------------------------------------------------\n\nexport function transformCompetition(raw: RawCompetition, lang: string): FUSportsCompetition {\n const { name, shortName } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const assets = resolveAssets(raw.assets ?? []);\n const branding = resolveBranding(raw.branding);\n const country = resolveCountry(null, raw.related ?? [], lang);\n const related = resolveRelated(raw.related ?? [], lang);\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n ...(shortName ? { shortName } : {}),\n ...(raw.format ? { type: raw.format as FUSportsCompetition[\"type\"] } : {}),\n ...(raw.gender ? { gender: raw.gender as FUSportsCompetition[\"gender\"] } : {}),\n ...(country ? { country } : {}),\n ...(assets.logo ? { assets: { logo: assets.logo } } : {}),\n ...(branding ? { metadata: { branding } } : {}),\n ...(raw.provider_ref?.length ? { providerRef: resolveProviderRef(raw.provider_ref) } : {}),\n ...(related ? { related } : {}),\n };\n}\n\nexport function transformTeam(raw: RawTeam, lang: string): FUSportsTeamCompetitor {\n const { name, shortName } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const assets = resolveAssets(raw.assets ?? []);\n const branding = resolveBranding(raw.metadata?.branding);\n const country = resolveCountry(raw.country_id, raw.related ?? [], lang);\n const related = resolveRelated(raw.related ?? [], lang);\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n ...(shortName ? { shortName } : {}),\n ...(raw.three_letter_code ? { threeLetterCode: raw.three_letter_code } : {}),\n ...(raw.full_name ? { fullName: raw.full_name } : {}),\n ...(raw.nickname ? { nickname: raw.nickname } : {}),\n ...(raw.gender ? { gender: raw.gender as FUSportsTeamCompetitor[\"gender\"] } : {}),\n ...(country ? { country } : {}),\n ...(assets.logo ? { assets: { logo: assets.logo } } : {}),\n ...(branding ? { metadata: { branding } } : {}),\n ...(raw.provider_ref?.length ? { providerRef: resolveProviderRef(raw.provider_ref) } : {}),\n ...(related ? { related } : {}),\n };\n}\n\nexport function transformAthlete(raw: RawAthlete, lang: string): FUSportsPlayerCompetitor {\n const { name, shortName } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const assets = resolveAssets(raw.assets ?? []);\n const branding = resolveBranding(raw.metadata?.branding);\n const country = resolveCountry(raw.country_id, raw.related ?? [], lang);\n const related = resolveRelated(raw.related ?? [], lang);\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n type: \"player\",\n ...(shortName ? { shortName } : {}),\n ...(raw.position ? { position: raw.position } : {}),\n ...(raw.birth_date ? { birthdate: raw.birth_date } : {}),\n ...(raw.shirt_number != null ? { shirtNumber: raw.shirt_number } : {}),\n ...(raw.gender ? { gender: raw.gender as FUSportsPlayerCompetitor[\"gender\"] } : {}),\n ...(country ? { country } : {}),\n ...(assets.logo || assets.headshot\n ? { assets: { ...(assets.logo ? { logo: assets.logo } : {}), ...(assets.headshot ? { photo: assets.headshot } : {}) } }\n : {}),\n ...(branding ? { metadata: { branding } } : {}),\n ...(raw.provider_ref?.length ? { providerRef: resolveProviderRef(raw.provider_ref) } : {}),\n ...(related ? { related } : {}),\n };\n}\n\nexport function transformCountry(raw: RawCountry, lang: string): FUSportsCountry {\n const summary = transformCountrySummary(raw, lang);\n return {\n ...summary,\n sport: raw.sport,\n ...(raw.provider_ref?.length ? { providerRef: resolveProviderRef(raw.provider_ref) } : {}),\n };\n}\n\nexport function transformVenue(raw: RawVenue, lang: string): FUSportsVenue {\n const { name } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const country = resolveCountry(raw.country_id, raw.related ?? [], lang);\n const related = resolveRelated(raw.related ?? [], lang);\n\n const hasProfile = raw.capacity != null || raw.latitude != null || raw.longitude != null;\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n ...(country ? { country } : {}),\n ...(hasProfile\n ? {\n profile: {\n ...(raw.capacity != null ? { capacity: raw.capacity } : {}),\n ...(raw.latitude != null ? { latitude: raw.latitude } : {}),\n ...(raw.longitude != null ? { longitude: raw.longitude } : {}),\n },\n }\n : {}),\n ...(raw.provider_ref?.length ? { providerRef: resolveProviderRef(raw.provider_ref) } : {}),\n ...(related ? { related } : {}),\n };\n}\n\nexport function transformCoach(raw: RawCoach, lang: string): FUSportsCoach {\n const { name } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const country = resolveCountry(raw.country_id, raw.related ?? [], lang);\n const related = resolveRelated(raw.related ?? [], lang);\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n ...(raw.birth_date ? { birthdate: raw.birth_date } : {}),\n ...(country ? { country } : {}),\n ...(raw.provider_ref?.length ? { providerRef: resolveProviderRef(raw.provider_ref) } : {}),\n ...(related ? { related } : {}),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Main dispatcher\n// ---------------------------------------------------------------------------\n\n/**\n * Determine entity type from raw data and call the appropriate transformer.\n * The raw API uses `content_type` for competitions and `type` / general context for others.\n */\nexport function transformEntity(raw: RawSearchEntityBase & Record<string, unknown>, lang: string): SearchEntityResult {\n // Determine entity type from raw fields\n const contentType = (raw.content_type as string)?.toUpperCase?.();\n const type = (raw.type as string)?.toUpperCase?.();\n const entityType = (raw.entityType as string)?.toLowerCase?.();\n\n if (contentType === \"COMPETITION\" || entityType === \"competition\") {\n return { ...transformCompetition(raw as unknown as RawCompetition, lang), entityType: \"competition\" };\n }\n\n if (entityType === \"country\" || raw.country_code !== undefined) {\n return { ...transformCountry(raw as RawCountry, lang), entityType: \"country\" };\n }\n\n if (entityType === \"venue\" || (raw.capacity !== undefined && !entityType)) {\n return { ...transformVenue(raw as RawVenue, lang), entityType: \"venue\" };\n }\n\n if (entityType === \"coach\" || (type === \"COACH\")) {\n return { ...transformCoach(raw as RawCoach, lang), entityType: \"coach\" };\n }\n\n if (entityType === \"athlete\" || type === \"PLAYER\" || raw.position !== undefined || raw.shirt_number !== undefined) {\n return { ...transformAthlete(raw as RawAthlete, lang), entityType: \"athlete\" };\n }\n\n // Default to team\n if (entityType === \"team\" || type === \"TEAM\" || raw.three_letter_code !== undefined) {\n return { ...transformTeam(raw as RawTeam, lang), entityType: \"team\" };\n }\n\n // Fallback: treat as team (most common entity type)\n return { ...transformTeam(raw as RawTeam, lang), entityType: \"team\" };\n}\n\n/**\n * Summary dispatcher — like transformEntity but calls summary transforms.\n * Returns lightweight types without `related` or `providerRef`.\n */\nexport function transformEntitySummary(raw: RawSearchEntityBase & Record<string, unknown>, lang: string): SearchEntitySummary {\n const contentType = (raw.content_type as string)?.toUpperCase?.();\n const type = (raw.type as string)?.toUpperCase?.();\n const entityType = (raw.entityType as string)?.toLowerCase?.();\n\n if (contentType === \"COMPETITION\" || entityType === \"competition\") {\n return { ...transformCompetitionSummary(raw as unknown as RawCompetition, lang), entityType: \"competition\" };\n }\n\n if (entityType === \"country\" || raw.country_code !== undefined) {\n return { ...transformCountrySummary(raw as RawCountry, lang), entityType: \"country\" };\n }\n\n if (entityType === \"venue\" || (raw.capacity !== undefined && !entityType)) {\n return { ...transformVenueSummary(raw as RawVenue, lang), entityType: \"venue\" };\n }\n\n if (entityType === \"coach\" || (type === \"COACH\")) {\n return { ...transformCoachSummary(raw as RawCoach, lang), entityType: \"coach\" };\n }\n\n if (entityType === \"athlete\" || type === \"PLAYER\" || raw.position !== undefined || raw.shirt_number !== undefined) {\n return { ...transformAthleteSummary(raw as RawAthlete, lang), entityType: \"athlete\" };\n }\n\n if (entityType === \"team\" || type === \"TEAM\" || raw.three_letter_code !== undefined) {\n return { ...transformTeamSummary(raw as RawTeam, lang), entityType: \"team\" };\n }\n\n return { ...transformTeamSummary(raw as RawTeam, lang), entityType: \"team\" };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transformer.js","sources":["../../../../src/lib/api/fansunited/search/transformer.ts"],"sourcesContent":["/**\n * Raw → Canonical transformer for Search API entities.\n *\n * Resolves translations to a target language (with EN fallback),\n * maps raw snake_case fields to canonical camelCase types,\n * and hydrates related entries (country + related) one level deep from cache.\n */\n\nimport { memoryStore, CACHE_KEY_PREFIX } from \"../../../cache\";\nimport type {\n FUSportsCompetition,\n FUSportsTeamCompetitor,\n FUSportsPlayerCompetitor,\n FUSportsCountry,\n FUSportsVenue,\n FUSportsCoach,\n FUSportsRelated,\n FUBranding,\n FUSportsCompetitionSummary,\n FUSportsTeamSummary,\n FUSportsPlayerSummary,\n FUSportsCountrySummary,\n FUSportsVenueSummary,\n FUSportsCoachSummary,\n} from \"../../../types/canonical/base.types\";\nimport type { SearchEntityResult, SearchEntitySummary } from \"./types\";\nimport type {\n RawTranslation,\n RawAsset,\n RawRelated,\n RawProviderRef,\n RawBranding,\n RawTeamBranding,\n RawSearchEntityBase,\n RawCompetition,\n RawTeam,\n RawAthlete,\n RawCountry,\n RawVenue,\n RawCoach,\n} from \"./raw-types\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve name/shortName in target language.\n * Fallback order: target lang → EN → raw name.\n */\nexport function resolveTranslation(\n translations: RawTranslation[],\n lang: string,\n fallbackName: string,\n fallbackShortName?: string | null\n): { name: string; shortName?: string } {\n const upperLang = lang.toUpperCase();\n\n const target = translations.find((t) => t.language.toUpperCase() === upperLang);\n if (target) {\n return {\n name: target.name,\n shortName: target.short_name ?? fallbackShortName ?? undefined,\n };\n }\n\n // Fallback to EN\n if (upperLang !== \"EN\") {\n const en = translations.find((t) => t.language.toUpperCase() === \"EN\");\n if (en) {\n return {\n name: en.name,\n shortName: en.short_name ?? fallbackShortName ?? undefined,\n };\n }\n }\n\n return {\n name: fallbackName,\n shortName: fallbackShortName ?? undefined,\n };\n}\n\n/**\n * Map [{key: \"LOGO\", value: \"url\"}] → { logo: \"url\" }\n *\n * Defensively skips entries whose `key` or `value` is null/undefined.\n * The {@link RawAsset} type declares both as non-nullable strings, but the\n * Search API occasionally returns `{ key: null, … }` — without this guard,\n * a single bad asset throws inside `toLowerCase()` and aborts the entire\n * transform chain (crashing every consumer pulling entities across sports).\n */\nexport function resolveAssets(assets: RawAsset[]): Record<string, string> {\n const result: Record<string, string> = {};\n for (const asset of assets) {\n if (typeof asset?.key !== \"string\" || typeof asset.value !== \"string\") continue;\n result[asset.key.toLowerCase()] = asset.value;\n }\n return result;\n}\n\n/**\n * Map raw branding snake_case → canonical FUBranding camelCase.\n */\nexport function resolveBranding(raw: RawBranding | RawTeamBranding | undefined | null): FUBranding | undefined {\n if (!raw) return undefined;\n\n const branding: FUBranding = {};\n if (raw.primary_color) branding.primaryColor = raw.primary_color;\n if (raw.secondary_color) branding.secondaryColor = raw.secondary_color;\n if (raw.text_color) branding.textColor = raw.text_color;\n if (raw.background_color) branding.backgroundColor = raw.background_color;\n if (raw.background_gradient_from_color) branding.backgroundGradientFromColor = raw.background_gradient_from_color;\n if (raw.background_gradient_to_color) branding.backgroundGradientToColor = raw.background_gradient_to_color;\n if (raw.background_image) branding.backgroundImage = raw.background_image;\n\n return Object.keys(branding).length > 0 ? branding : undefined;\n}\n\n/** Map raw provider_ref → canonical providerRef */\nexport function resolveProviderRef(refs: RawProviderRef[]): { provider: string; id: string }[] {\n return refs.map((r) => ({ provider: r.provider, id: r.id }));\n}\n\n/** Extract related IDs by relationship type */\nexport function getRelatedIds(related: RawRelated[], relationship: string): string[] {\n return related.filter((r) => r.relationship === relationship).map((r) => r.related_id);\n}\n\n/**\n * Resolve a country from cache (one level deep).\n * Returns FUSportsCountry with name in target lang if cached, or { id } if not.\n */\nexport function resolveCountry(\n countryId: string | null | undefined,\n related: RawRelated[],\n lang: string\n): FUSportsCountry | undefined {\n // Determine the country ID — from direct field or related array\n const id = countryId || getRelatedIds(related, \"COUNTRY\")[0];\n if (!id) return undefined;\n\n // Try cache lookup\n const cachedEntry = memoryStore.get<RawCountry>(id) ?? memoryStore.get<RawCountry>(`${CACHE_KEY_PREFIX}entity:${id}`);\n\n if (cachedEntry?.data) {\n const raw = cachedEntry.data;\n return transformCountrySummary(raw, lang);\n }\n\n // Not in cache — return partial\n return { id, name: id };\n}\n\n// ---------------------------------------------------------------------------\n// Summary transforms — used for list/search views AND one-level-deep related\n// entity hydration. These do NOT populate `related` or `providerRef`.\n// ---------------------------------------------------------------------------\n\nexport function transformCountrySummary(raw: RawCountry, lang: string): FUSportsCountrySummary {\n const { name, shortName } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const assets = resolveAssets(raw.assets ?? []);\n\n return {\n id: raw.id,\n name,\n ...(raw.country_code ? { code: raw.country_code } : {}),\n ...(assets.flag ? { flag: assets.flag } : {}),\n ...(shortName ? { shortName } : {}),\n };\n}\n\nexport function transformCompetitionSummary(raw: RawCompetition, lang: string): FUSportsCompetitionSummary {\n const { name, shortName } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const assets = resolveAssets(raw.assets ?? []);\n const branding = resolveBranding(raw.branding);\n const country = resolveCountry(null, raw.related ?? [], lang);\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n ...(shortName ? { shortName } : {}),\n ...(raw.format ? { type: raw.format as FUSportsCompetition[\"type\"] } : {}),\n ...(country ? { country } : {}),\n ...(assets.logo ? { assets: { logo: assets.logo } } : {}),\n ...(branding ? { metadata: { branding } } : {}),\n };\n}\n\nexport function transformTeamSummary(raw: RawTeam, lang: string): FUSportsTeamSummary {\n const { name, shortName } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const assets = resolveAssets(raw.assets ?? []);\n const branding = resolveBranding(raw.metadata?.branding);\n const country = resolveCountry(raw.country_id, raw.related ?? [], lang);\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n ...(shortName ? { shortName } : {}),\n ...(raw.three_letter_code ? { threeLetterCode: raw.three_letter_code } : {}),\n ...(raw.full_name ? { fullName: raw.full_name } : {}),\n ...(raw.nickname ? { nickname: raw.nickname } : {}),\n ...(raw.gender ? { gender: raw.gender as FUSportsTeamCompetitor[\"gender\"] } : {}),\n ...(country ? { country } : {}),\n ...(assets.logo ? { assets: { logo: assets.logo } } : {}),\n ...(branding ? { metadata: { branding } } : {}),\n };\n}\n\nexport function transformAthleteSummary(raw: RawAthlete, lang: string): FUSportsPlayerSummary {\n const { name, shortName } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const assets = resolveAssets(raw.assets ?? []);\n const branding = resolveBranding(raw.metadata?.branding);\n const country = resolveCountry(raw.country_id, raw.related ?? [], lang);\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n type: \"player\",\n ...(shortName ? { shortName } : {}),\n ...(raw.position ? { position: raw.position } : {}),\n ...(raw.birth_date ? { birthdate: raw.birth_date } : {}),\n ...(raw.shirt_number != null ? { shirtNumber: raw.shirt_number } : {}),\n ...(raw.gender ? { gender: raw.gender as FUSportsPlayerCompetitor[\"gender\"] } : {}),\n ...(country ? { country } : {}),\n ...(assets.logo || assets.headshot\n ? { assets: { ...(assets.logo ? { logo: assets.logo } : {}), ...(assets.headshot ? { photo: assets.headshot } : {}) } }\n : {}),\n ...(branding ? { metadata: { branding } } : {}),\n };\n}\n\nexport function transformVenueSummary(raw: RawVenue, lang: string): FUSportsVenueSummary {\n const { name } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const country = resolveCountry(raw.country_id, raw.related ?? [], lang);\n\n const hasProfile = raw.capacity != null || raw.latitude != null || raw.longitude != null;\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n ...(country ? { country } : {}),\n ...(hasProfile\n ? {\n profile: {\n ...(raw.capacity != null ? { capacity: raw.capacity } : {}),\n ...(raw.latitude != null ? { latitude: raw.latitude } : {}),\n ...(raw.longitude != null ? { longitude: raw.longitude } : {}),\n },\n }\n : {}),\n };\n}\n\nexport function transformCoachSummary(raw: RawCoach, lang: string): FUSportsCoachSummary {\n const { name } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const country = resolveCountry(raw.country_id, raw.related ?? [], lang);\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n ...(raw.birth_date ? { birthdate: raw.birth_date } : {}),\n ...(country ? { country } : {}),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Related entity resolution (one level deep from cache)\n// ---------------------------------------------------------------------------\n\n/**\n * Look up a cached raw entity and determine its type for shallow transformation.\n */\nfunction hydrateRelatedEntity(\n id: string,\n relationship: string,\n lang: string\n): FUSportsCompetition | FUSportsTeamCompetitor | FUSportsPlayerCompetitor | FUSportsCountry | undefined {\n const entry = memoryStore.get<RawSearchEntityBase & Record<string, unknown>>(id)\n ?? memoryStore.get<RawSearchEntityBase & Record<string, unknown>>(`${CACHE_KEY_PREFIX}entity:${id}`);\n\n if (!entry?.data) return undefined;\n\n const raw = entry.data;\n switch (relationship) {\n case \"COMPETITION\":\n return transformCompetitionSummary(raw as unknown as RawCompetition, lang);\n case \"TEAM\":\n return transformTeamSummary(raw as unknown as RawTeam, lang);\n case \"ATHLETE\":\n return transformAthleteSummary(raw as unknown as RawAthlete, lang);\n case \"COUNTRY\":\n return transformCountrySummary(raw as unknown as RawCountry, lang);\n default:\n return undefined;\n }\n}\n\n/**\n * Resolve all related entries from cache, grouped by relationship type.\n * Returns undefined if there are no related entries.\n */\nexport function resolveRelated(related: RawRelated[], lang: string): FUSportsRelated | undefined {\n if (!related || related.length === 0) return undefined;\n\n const result: FUSportsRelated = {};\n\n for (const entry of related) {\n const hydrated = hydrateRelatedEntity(entry.related_id, entry.relationship, lang);\n // Skip entries not in cache — the prefetch step in index.ts should have\n // fetched them. If still missing, the entity was not found by the API.\n if (!hydrated) continue;\n\n switch (entry.relationship) {\n case \"COMPETITION\":\n (result.competitions ??= []).push(hydrated as FUSportsCompetition);\n break;\n case \"TEAM\":\n (result.teams ??= []).push(hydrated as FUSportsTeamCompetitor);\n break;\n case \"ATHLETE\":\n (result.athletes ??= []).push(hydrated as FUSportsPlayerCompetitor);\n break;\n case \"COUNTRY\":\n (result.countries ??= []).push(hydrated as FUSportsCountry);\n break;\n }\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Entity transformers\n// ---------------------------------------------------------------------------\n\nexport function transformCompetition(raw: RawCompetition, lang: string): FUSportsCompetition {\n const { name, shortName } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const assets = resolveAssets(raw.assets ?? []);\n const branding = resolveBranding(raw.branding);\n const country = resolveCountry(null, raw.related ?? [], lang);\n const related = resolveRelated(raw.related ?? [], lang);\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n ...(shortName ? { shortName } : {}),\n ...(raw.format ? { type: raw.format as FUSportsCompetition[\"type\"] } : {}),\n ...(raw.gender ? { gender: raw.gender as FUSportsCompetition[\"gender\"] } : {}),\n ...(country ? { country } : {}),\n ...(assets.logo ? { assets: { logo: assets.logo } } : {}),\n ...(branding ? { metadata: { branding } } : {}),\n ...(raw.provider_ref?.length ? { providerRef: resolveProviderRef(raw.provider_ref) } : {}),\n ...(related ? { related } : {}),\n };\n}\n\nexport function transformTeam(raw: RawTeam, lang: string): FUSportsTeamCompetitor {\n const { name, shortName } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const assets = resolveAssets(raw.assets ?? []);\n const branding = resolveBranding(raw.metadata?.branding);\n const country = resolveCountry(raw.country_id, raw.related ?? [], lang);\n const related = resolveRelated(raw.related ?? [], lang);\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n ...(shortName ? { shortName } : {}),\n ...(raw.three_letter_code ? { threeLetterCode: raw.three_letter_code } : {}),\n ...(raw.full_name ? { fullName: raw.full_name } : {}),\n ...(raw.nickname ? { nickname: raw.nickname } : {}),\n ...(raw.gender ? { gender: raw.gender as FUSportsTeamCompetitor[\"gender\"] } : {}),\n ...(country ? { country } : {}),\n ...(assets.logo ? { assets: { logo: assets.logo } } : {}),\n ...(branding ? { metadata: { branding } } : {}),\n ...(raw.provider_ref?.length ? { providerRef: resolveProviderRef(raw.provider_ref) } : {}),\n ...(related ? { related } : {}),\n };\n}\n\nexport function transformAthlete(raw: RawAthlete, lang: string): FUSportsPlayerCompetitor {\n const { name, shortName } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const assets = resolveAssets(raw.assets ?? []);\n const branding = resolveBranding(raw.metadata?.branding);\n const country = resolveCountry(raw.country_id, raw.related ?? [], lang);\n const related = resolveRelated(raw.related ?? [], lang);\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n type: \"player\",\n ...(shortName ? { shortName } : {}),\n ...(raw.position ? { position: raw.position } : {}),\n ...(raw.birth_date ? { birthdate: raw.birth_date } : {}),\n ...(raw.shirt_number != null ? { shirtNumber: raw.shirt_number } : {}),\n ...(raw.gender ? { gender: raw.gender as FUSportsPlayerCompetitor[\"gender\"] } : {}),\n ...(country ? { country } : {}),\n ...(assets.logo || assets.headshot\n ? { assets: { ...(assets.logo ? { logo: assets.logo } : {}), ...(assets.headshot ? { photo: assets.headshot } : {}) } }\n : {}),\n ...(branding ? { metadata: { branding } } : {}),\n ...(raw.provider_ref?.length ? { providerRef: resolveProviderRef(raw.provider_ref) } : {}),\n ...(related ? { related } : {}),\n };\n}\n\nexport function transformCountry(raw: RawCountry, lang: string): FUSportsCountry {\n const summary = transformCountrySummary(raw, lang);\n return {\n ...summary,\n sport: raw.sport,\n ...(raw.provider_ref?.length ? { providerRef: resolveProviderRef(raw.provider_ref) } : {}),\n };\n}\n\nexport function transformVenue(raw: RawVenue, lang: string): FUSportsVenue {\n const { name } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const country = resolveCountry(raw.country_id, raw.related ?? [], lang);\n const related = resolveRelated(raw.related ?? [], lang);\n\n const hasProfile = raw.capacity != null || raw.latitude != null || raw.longitude != null;\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n ...(country ? { country } : {}),\n ...(hasProfile\n ? {\n profile: {\n ...(raw.capacity != null ? { capacity: raw.capacity } : {}),\n ...(raw.latitude != null ? { latitude: raw.latitude } : {}),\n ...(raw.longitude != null ? { longitude: raw.longitude } : {}),\n },\n }\n : {}),\n ...(raw.provider_ref?.length ? { providerRef: resolveProviderRef(raw.provider_ref) } : {}),\n ...(related ? { related } : {}),\n };\n}\n\nexport function transformCoach(raw: RawCoach, lang: string): FUSportsCoach {\n const { name } = resolveTranslation(raw.translations ?? [], lang, raw.name, raw.short_name);\n const country = resolveCountry(raw.country_id, raw.related ?? [], lang);\n const related = resolveRelated(raw.related ?? [], lang);\n\n return {\n id: raw.id,\n name,\n sport: raw.sport,\n ...(raw.birth_date ? { birthdate: raw.birth_date } : {}),\n ...(country ? { country } : {}),\n ...(raw.provider_ref?.length ? { providerRef: resolveProviderRef(raw.provider_ref) } : {}),\n ...(related ? { related } : {}),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Main dispatcher\n// ---------------------------------------------------------------------------\n\n/**\n * Determine entity type from raw data and call the appropriate transformer.\n * The raw API uses `content_type` for competitions and `type` / general context for others.\n */\nexport function transformEntity(raw: RawSearchEntityBase & Record<string, unknown>, lang: string): SearchEntityResult {\n // Determine entity type from raw fields\n const contentType = (raw.content_type as string)?.toUpperCase?.();\n const type = (raw.type as string)?.toUpperCase?.();\n const entityType = (raw.entityType as string)?.toLowerCase?.();\n\n if (contentType === \"COMPETITION\" || entityType === \"competition\") {\n return { ...transformCompetition(raw as unknown as RawCompetition, lang), entityType: \"competition\" };\n }\n\n if (entityType === \"country\" || raw.country_code !== undefined) {\n return { ...transformCountry(raw as RawCountry, lang), entityType: \"country\" };\n }\n\n if (entityType === \"venue\" || (raw.capacity !== undefined && !entityType)) {\n return { ...transformVenue(raw as RawVenue, lang), entityType: \"venue\" };\n }\n\n if (entityType === \"coach\" || (type === \"COACH\")) {\n return { ...transformCoach(raw as RawCoach, lang), entityType: \"coach\" };\n }\n\n if (entityType === \"athlete\" || type === \"PLAYER\" || raw.position !== undefined || raw.shirt_number !== undefined) {\n return { ...transformAthlete(raw as RawAthlete, lang), entityType: \"athlete\" };\n }\n\n // Default to team\n if (entityType === \"team\" || type === \"TEAM\" || raw.three_letter_code !== undefined) {\n return { ...transformTeam(raw as RawTeam, lang), entityType: \"team\" };\n }\n\n // Fallback: treat as team (most common entity type)\n return { ...transformTeam(raw as RawTeam, lang), entityType: \"team\" };\n}\n\n/**\n * Summary dispatcher — like transformEntity but calls summary transforms.\n * Returns lightweight types without `related` or `providerRef`.\n */\nexport function transformEntitySummary(raw: RawSearchEntityBase & Record<string, unknown>, lang: string): SearchEntitySummary {\n const contentType = (raw.content_type as string)?.toUpperCase?.();\n const type = (raw.type as string)?.toUpperCase?.();\n const entityType = (raw.entityType as string)?.toLowerCase?.();\n\n if (contentType === \"COMPETITION\" || entityType === \"competition\") {\n return { ...transformCompetitionSummary(raw as unknown as RawCompetition, lang), entityType: \"competition\" };\n }\n\n if (entityType === \"country\" || raw.country_code !== undefined) {\n return { ...transformCountrySummary(raw as RawCountry, lang), entityType: \"country\" };\n }\n\n if (entityType === \"venue\" || (raw.capacity !== undefined && !entityType)) {\n return { ...transformVenueSummary(raw as RawVenue, lang), entityType: \"venue\" };\n }\n\n if (entityType === \"coach\" || (type === \"COACH\")) {\n return { ...transformCoachSummary(raw as RawCoach, lang), entityType: \"coach\" };\n }\n\n if (entityType === \"athlete\" || type === \"PLAYER\" || raw.position !== undefined || raw.shirt_number !== undefined) {\n return { ...transformAthleteSummary(raw as RawAthlete, lang), entityType: \"athlete\" };\n }\n\n if (entityType === \"team\" || type === \"TEAM\" || raw.three_letter_code !== undefined) {\n return { ...transformTeamSummary(raw as RawTeam, lang), entityType: \"team\" };\n }\n\n return { ...transformTeamSummary(raw as RawTeam, lang), entityType: \"team\" };\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"description": "A TypeScript library for fetching and transforming sports data from multiple API providers. Returns clean, canonical types that are provider-agnostic.",
|
|
5
5
|
"homepage": "https://fansunited.com/",
|
|
6
6
|
"private": false,
|
|
7
|
-
"version": "0.17.
|
|
7
|
+
"version": "0.17.2",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"sideEffects": false,
|
|
10
10
|
"module": "./fansunited-data-layer.js",
|