@c-rex/services 0.3.0-build.39 → 0.3.0-build.41

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.
Files changed (33) hide show
  1. package/dist/index.d.mts +3 -1
  2. package/dist/index.d.ts +3 -1
  3. package/dist/index.js +430 -147
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +411 -143
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/metadata-visibility-policy.d.mts +29 -0
  8. package/dist/metadata-visibility-policy.d.ts +29 -0
  9. package/dist/metadata-visibility-policy.js +129 -0
  10. package/dist/metadata-visibility-policy.js.map +1 -0
  11. package/dist/metadata-visibility-policy.mjs +95 -0
  12. package/dist/metadata-visibility-policy.mjs.map +1 -0
  13. package/dist/read-models/index.d.mts +17 -39
  14. package/dist/read-models/index.d.ts +17 -39
  15. package/dist/read-models/index.js +430 -149
  16. package/dist/read-models/index.js.map +1 -1
  17. package/dist/read-models/index.mjs +410 -144
  18. package/dist/read-models/index.mjs.map +1 -1
  19. package/dist/read-models/metadata-display-builder.d.mts +34 -0
  20. package/dist/read-models/metadata-display-builder.d.ts +34 -0
  21. package/dist/read-models/metadata-display-builder.js +521 -0
  22. package/dist/read-models/metadata-display-builder.js.map +1 -0
  23. package/dist/read-models/metadata-display-builder.mjs +489 -0
  24. package/dist/read-models/metadata-display-builder.mjs.map +1 -0
  25. package/dist/read-models/metadata-presentation-config.js +2 -2
  26. package/dist/read-models/metadata-presentation-config.js.map +1 -1
  27. package/dist/read-models/metadata-presentation-config.mjs +2 -2
  28. package/dist/read-models/metadata-presentation-config.mjs.map +1 -1
  29. package/dist/read-models/metadata-view-profile.js +63 -4
  30. package/dist/read-models/metadata-view-profile.js.map +1 -1
  31. package/dist/read-models/metadata-view-profile.mjs +63 -4
  32. package/dist/read-models/metadata-view-profile.mjs.map +1 -1
  33. package/package.json +19 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/read-models/metadata-display-builder.ts","../../src/read-models/metadata-presentation-config.ts","../../src/read-models/metadata-visibility-policy.ts"],"sourcesContent":["import { InformationUnitModel, LiteralModel, ObjectRefModel, RenditionModel } from \"@c-rex/interfaces\";\r\nimport {\r\n INFORMATION_UNIT_PROPERTY_PRESENTATION,\r\n InformationUnitPropertyKey,\r\n MetadataDisplaySectionStrategy,\r\n} from \"./metadata-presentation-config\";\r\nimport { isMetadataGroupDenied, isMetadataPropertyRuntimeSuppressed } from \"./metadata-visibility-policy\";\r\n\r\nexport type MetadataFacetPresentationItem = {\r\n label: string;\r\n groupLabel?: string;\r\n sectionLabel?: string;\r\n hidden?: boolean;\r\n};\r\n\r\nexport type MetadataFacetPresentation = Partial<\r\n Record<InformationUnitPropertyKey, Record<string, MetadataFacetPresentationItem>>\r\n>;\r\n\r\nexport type MetadataFacetLabelOverride = MetadataFacetPresentationItem;\r\nexport type MetadataFacetLabelOverrides = MetadataFacetPresentation;\r\n\r\nexport type MetadataDisplayRow = {\r\n key: InformationUnitPropertyKey;\r\n label: string;\r\n labelSource: \"translationKey\" | \"direct\";\r\n values: string[];\r\n valueType?: \"text\" | \"language\" | \"rendition\";\r\n renditions?: RenditionModel[];\r\n};\r\n\r\ntype BuildMetadataDisplayRowsOptions = {\r\n uiLanguage: string;\r\n includeProperties: InformationUnitPropertyKey[];\r\n presentation?: MetadataFacetPresentation;\r\n overrides?: MetadataFacetPresentation;\r\n};\r\n\r\nconst DEFAULT_IGNORED_FORMATS = [\r\n \"application/xhtml+xml\",\r\n \"application/json\",\r\n \"application/llm+xml\",\r\n \"text/html\",\r\n];\r\n\r\nconst normalizeLanguageCode = (value: string): string => {\r\n const trimmed = value.trim();\r\n if (!trimmed) return trimmed;\r\n\r\n const [rawLang, rawCountry, ...rest] = trimmed.split(\"-\");\r\n const lang = (rawLang || \"\").toLowerCase();\r\n\r\n if (!rawCountry) return lang;\r\n\r\n const country = rawCountry.toUpperCase();\r\n const suffix = rest.length > 0 ? `-${rest.join(\"-\")}` : \"\";\r\n return `${lang}-${country}${suffix}`;\r\n};\r\n\r\nconst sortAndDeduplicateLanguages = (languages: Array<string | null | undefined>): string[] => {\r\n const normalized = languages\r\n .map((item) => (item || \"\").trim())\r\n .filter((item): item is string => item.length > 0)\r\n .map((item) => normalizeLanguageCode(item));\r\n\r\n return Array.from(new Set(normalized)).sort((a, b) => a.localeCompare(b));\r\n};\r\n\r\nconst resolvePreferredLanguage = (\r\n languages: string[] | null | undefined,\r\n uiLanguage: string\r\n): string | undefined => {\r\n if (!languages || languages.length === 0) return undefined;\r\n\r\n const normalizedUiLanguage = normalizeLanguageCode(uiLanguage);\r\n const baseLanguage = normalizedUiLanguage.split(\"-\")[0];\r\n const normalized = sortAndDeduplicateLanguages(languages);\r\n\r\n const exact = normalized.find((item) => item === normalizedUiLanguage);\r\n if (exact) return exact;\r\n\r\n const base = normalized.find((item) => item === baseLanguage || item.startsWith(`${baseLanguage}-`));\r\n if (base) return base;\r\n\r\n const english = normalized.find((item) => item === \"en\" || item === \"en-US\" || item.startsWith(\"en-\"));\r\n if (english) return english;\r\n\r\n return normalized[0];\r\n};\r\n\r\nconst getFirstLinkByRel = (item: RenditionModel, rel: string) =>\r\n item.links?.find((link) => link.rel === rel)?.href;\r\n\r\nconst hasRenderableFileRenditions = (renditions?: RenditionModel[] | null): boolean => {\r\n if (!renditions || renditions.length === 0) return false;\r\n\r\n return renditions.some((item) => {\r\n if (!item.format || DEFAULT_IGNORED_FORMATS.includes(item.format)) return false;\r\n return Boolean(getFirstLinkByRel(item, \"download\") || getFirstLinkByRel(item, \"view\"));\r\n });\r\n};\r\n\r\nexport const resolveLiteralLabel = (labels?: LiteralModel[] | null, uiLanguage?: string): string | undefined => {\r\n if (!labels || labels.length === 0) return undefined;\r\n const language = uiLanguage || \"en\";\r\n const preferred = resolvePreferredLanguage(\r\n labels.map((item) => item.language || \"\"),\r\n language\r\n );\r\n if (preferred) {\r\n const exact = labels.find((item) => item.language === preferred)?.value;\r\n if (exact) return exact;\r\n }\r\n return labels.find((item) => item.value)?.value || undefined;\r\n};\r\n\r\nexport const resolveObjectRefLabel = (item: ObjectRefModel, uiLanguage: string): string | undefined => {\r\n return resolveLiteralLabel(item.labels || [], uiLanguage) || item.shortId || item.id || undefined;\r\n};\r\n\r\nexport const resolveObjectRefClassLabel = (item: ObjectRefModel, uiLanguage: string): string | undefined => {\r\n return resolveLiteralLabel(item.class?.labels || [], uiLanguage)\r\n || item.class?.shortId\r\n || item.class?.id\r\n || undefined;\r\n};\r\n\r\nconst asObjectRefArray = (value: unknown): ObjectRefModel[] => {\r\n if (!Array.isArray(value)) return [];\r\n return value.filter((item): item is ObjectRefModel => Boolean(item && typeof item === \"object\"));\r\n};\r\n\r\nconst asLiteralArray = (value: unknown): LiteralModel[] => {\r\n if (!Array.isArray(value)) return [];\r\n return value.filter((item): item is LiteralModel => Boolean(item && typeof item === \"object\"));\r\n};\r\n\r\nconst shouldUseFacetPresentation = (strategy: MetadataDisplaySectionStrategy): boolean => {\r\n return strategy === \"class\" || strategy === \"partyRole\";\r\n};\r\n\r\nexport const resolveFacetPresentationProperties = (\r\n includeProperties: InformationUnitPropertyKey[]\r\n): InformationUnitPropertyKey[] => {\r\n return includeProperties.filter((key) => {\r\n const config = INFORMATION_UNIT_PROPERTY_PRESENTATION[key];\r\n if (!config?.metadataDisplay?.supported) return false;\r\n if (config.valueKind !== \"objectRefArray\" && config.valueKind !== \"objectRef\") return false;\r\n return shouldUseFacetPresentation(config.metadataDisplay.sectionStrategy);\r\n });\r\n};\r\n\r\nexport const resolveOverrideProperties = resolveFacetPresentationProperties;\r\n\r\nexport const buildMetadataDisplayRows = (\r\n data: InformationUnitModel,\r\n options: BuildMetadataDisplayRowsOptions\r\n): MetadataDisplayRow[] => {\r\n const uiLanguage = options.uiLanguage;\r\n const preferredTitle = resolveLiteralLabel(data.titles || [], uiLanguage) || resolveLiteralLabel(data.labels || [], uiLanguage);\r\n const rows: MetadataDisplayRow[] = [];\r\n\r\n for (const key of options.includeProperties) {\r\n const config = INFORMATION_UNIT_PROPERTY_PRESENTATION[key];\r\n if (!config?.metadataDisplay?.supported) continue;\r\n if (isMetadataPropertyRuntimeSuppressed(key)) continue;\r\n\r\n if (key === \"labels\") continue;\r\n\r\n if (key === \"titles\") {\r\n if (preferredTitle) {\r\n rows.push({\r\n key,\r\n label: key,\r\n labelSource: \"translationKey\",\r\n values: [preferredTitle],\r\n valueType: \"text\",\r\n });\r\n }\r\n continue;\r\n }\r\n\r\n const value = data[key];\r\n if (value === null || value === undefined) continue;\r\n\r\n if (key === \"languages\") {\r\n const languages = sortAndDeduplicateLanguages((value as string[]) || []);\r\n if (languages.length > 0) {\r\n rows.push({\r\n key,\r\n label: key,\r\n labelSource: \"translationKey\",\r\n values: languages,\r\n valueType: \"language\",\r\n });\r\n }\r\n continue;\r\n }\r\n\r\n if (config.valueKind === \"scalar\") {\r\n rows.push({\r\n key,\r\n label: key,\r\n labelSource: \"translationKey\",\r\n values: [String(value)],\r\n valueType: \"text\",\r\n });\r\n continue;\r\n }\r\n\r\n if (config.valueKind === \"stringArray\") {\r\n const values = Array.from(new Set((value as string[]).map((item) => String(item)).filter(Boolean)));\r\n if (values.length > 0) {\r\n rows.push({\r\n key,\r\n label: key,\r\n labelSource: \"translationKey\",\r\n values,\r\n valueType: \"text\",\r\n });\r\n }\r\n continue;\r\n }\r\n\r\n if (config.valueKind === \"literalArray\") {\r\n const preferred = resolveLiteralLabel(asLiteralArray(value), uiLanguage);\r\n if (preferred) {\r\n rows.push({\r\n key,\r\n label: key,\r\n labelSource: \"translationKey\",\r\n values: [preferred],\r\n valueType: \"text\",\r\n });\r\n }\r\n continue;\r\n }\r\n\r\n if (config.valueKind === \"objectRef\") {\r\n const label = resolveObjectRefLabel(value as ObjectRefModel, uiLanguage);\r\n if (label) {\r\n rows.push({\r\n key,\r\n label: key,\r\n labelSource: \"translationKey\",\r\n values: [label],\r\n valueType: \"text\",\r\n });\r\n }\r\n continue;\r\n }\r\n\r\n if (config.valueKind === \"objectRefArray\") {\r\n const refs = asObjectRefArray(value);\r\n if (refs.length === 0) continue;\r\n\r\n const groupedValues = new Map<string, Set<string>>();\r\n\r\n refs.forEach((ref) => {\r\n const shortId = ref.shortId || \"\";\r\n const presentationMap = (options.presentation || options.overrides)?.[key];\r\n const presentationItem = (shortId ? presentationMap?.[shortId] : undefined)\r\n || (ref.id ? presentationMap?.[ref.id] : undefined);\r\n if (presentationItem?.hidden) return;\r\n if (isMetadataGroupDenied(key, { classId: ref.class?.id })) return;\r\n const valueLabel = presentationItem?.label || resolveObjectRefLabel(ref, uiLanguage);\r\n if (!valueLabel) return;\r\n\r\n const sectionLabel = config.metadataDisplay.sectionStrategy === \"none\"\r\n ? key\r\n : presentationItem?.sectionLabel || resolveObjectRefClassLabel(ref, uiLanguage) || key;\r\n\r\n const existing = groupedValues.get(sectionLabel) || new Set<string>();\r\n existing.add(valueLabel);\r\n groupedValues.set(sectionLabel, existing);\r\n });\r\n\r\n Array.from(groupedValues.entries())\r\n .sort(([left], [right]) => left.localeCompare(right))\r\n .forEach(([sectionLabel, valueSet]) => {\r\n const values = Array.from(valueSet).sort((a, b) => a.localeCompare(b));\r\n if (values.length === 0) return;\r\n\r\n rows.push({\r\n key,\r\n label: sectionLabel,\r\n labelSource: sectionLabel === key ? \"translationKey\" : \"direct\",\r\n values,\r\n valueType: \"text\",\r\n });\r\n });\r\n continue;\r\n }\r\n\r\n if (config.valueKind === \"renditionArray\") {\r\n const renditions = Array.isArray(value)\r\n ? value.filter((item): item is RenditionModel => Boolean(item && typeof item === \"object\"))\r\n : [];\r\n if (renditions.length === 0) continue;\r\n if (!hasRenderableFileRenditions(renditions)) continue;\r\n\r\n rows.push({\r\n key,\r\n label: \"files\",\r\n labelSource: \"translationKey\",\r\n values: [],\r\n valueType: \"rendition\",\r\n renditions,\r\n });\r\n }\r\n }\r\n\r\n return rows;\r\n};\r\n","import type { InformationUnitModel } from \"@c-rex/interfaces\";\r\n\r\nexport type InformationUnitPropertyKey = keyof InformationUnitModel;\r\n\r\n/**\r\n * Describes the raw shape of a metadata property value in InformationUnitModel.\r\n * This drives generic rendering/grouping logic without coupling to one concrete UI control.\r\n */\r\nexport type MetadataValueKind =\r\n /** Primitive scalar (string/number/date-like value). */\r\n | \"scalar\"\r\n /** Array of localized literals ({ language, value }). */\r\n | \"literalArray\"\r\n /** Array of primitive strings. */\r\n | \"stringArray\"\r\n /** Single ObjectRef relation. */\r\n | \"objectRef\"\r\n /** Multiple ObjectRef relations. */\r\n | \"objectRefArray\"\r\n /** Array of API resource links. */\r\n | \"resourceLinkArray\"\r\n /** Array of rendition entries. */\r\n | \"renditionArray\";\r\n\r\n/**\r\n * Defines how facet search sections are derived for one metadata property.\r\n */\r\nexport type FacetSectionStrategy = \"none\" | \"class\" | \"partyRole\";\r\n\r\n/**\r\n * Defines how generic metadata display sections are derived (property grid, card metadata, etc.).\r\n * Name is intentionally control-agnostic and not tied to InformationUnitMetadataGrid.\r\n */\r\nexport type MetadataDisplaySectionStrategy = \"none\" | \"class\" | \"partyRole\";\r\n\r\n/**\r\n * Central presentation contract for one InformationUnit metadata property.\r\n * - facet: behavior for facet search grouping.\r\n * - metadataDisplay: behavior for generic metadata rendering components.\r\n */\r\nexport type MetadataPropertyPresentationConfig = {\r\n /** Raw value shape from API model. */\r\n valueKind: MetadataValueKind;\r\n facet: {\r\n /** If false, property is not used as facet dimension. */\r\n supported: boolean;\r\n /**\r\n * How facet sections are built:\r\n * - \"none\": keep the property as one flat facet group (no additional taxonomy section split).\r\n * - \"class\": split entries by their class label.\r\n * - \"partyRole\": split entries by party role label.\r\n */\r\n sectionStrategy: FacetSectionStrategy;\r\n };\r\n metadataDisplay: {\r\n /** If false, property is not rendered in generic metadata displays. */\r\n supported: boolean;\r\n /**\r\n * How metadata sections are built in generic displays:\r\n * - \"none\": keep one property row/group.\r\n * - \"class\": split/group by class label.\r\n * - \"partyRole\": split/group by party role label.\r\n */\r\n sectionStrategy: MetadataDisplaySectionStrategy;\r\n };\r\n};\r\n\r\n/**\r\n * Central presentation rules for all InformationUnitModel properties.\r\n * This is the single source of truth for facet grouping and generic metadata display behavior.\r\n */\r\nexport const INFORMATION_UNIT_PROPERTY_PRESENTATION: Record<\r\n InformationUnitPropertyKey,\r\n MetadataPropertyPresentationConfig\r\n> = {\r\n id: {\r\n valueKind: \"scalar\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: false, sectionStrategy: \"none\" },\r\n },\r\n shortId: {\r\n valueKind: \"scalar\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: false, sectionStrategy: \"none\" },\r\n },\r\n score: {\r\n valueKind: \"scalar\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: false, sectionStrategy: \"none\" },\r\n },\r\n class: {\r\n valueKind: \"objectRef\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: false, sectionStrategy: \"class\" },\r\n },\r\n labels: {\r\n valueKind: \"literalArray\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: false, sectionStrategy: \"none\" },\r\n },\r\n comments: {\r\n valueKind: \"literalArray\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"none\" },\r\n },\r\n descriptions: {\r\n valueKind: \"literalArray\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"none\" },\r\n },\r\n synonyms: {\r\n valueKind: \"stringArray\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"none\" },\r\n },\r\n packages: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: true, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: false, sectionStrategy: \"none\" },\r\n },\r\n hasInformationUnits: {\r\n valueKind: \"scalar\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: false, sectionStrategy: \"none\" },\r\n },\r\n links: {\r\n valueKind: \"resourceLinkArray\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: false, sectionStrategy: \"none\" },\r\n },\r\n revision: {\r\n valueKind: \"scalar\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"none\" },\r\n },\r\n created: {\r\n valueKind: \"scalar\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"none\" },\r\n },\r\n modified: {\r\n valueKind: \"scalar\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"none\" },\r\n },\r\n abstract: {\r\n valueKind: \"literalArray\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"none\" },\r\n },\r\n replaces: {\r\n valueKind: \"objectRef\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"none\" },\r\n },\r\n versionOf: {\r\n valueKind: \"objectRef\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: false, sectionStrategy: \"none\" },\r\n },\r\n titles: {\r\n valueKind: \"literalArray\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"none\" },\r\n },\r\n languages: {\r\n valueKind: \"stringArray\",\r\n facet: { supported: true, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"none\" },\r\n },\r\n parties: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: true, sectionStrategy: \"partyRole\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"partyRole\" },\r\n },\r\n renditions: {\r\n valueKind: \"renditionArray\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"none\" },\r\n },\r\n identities: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: false, sectionStrategy: \"none\" },\r\n },\r\n components: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: true, sectionStrategy: \"class\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"class\" },\r\n },\r\n informationSubjects: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: true, sectionStrategy: \"class\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"class\" },\r\n },\r\n topicTypes: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: true, sectionStrategy: \"class\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"class\" },\r\n },\r\n documentTypes: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: true, sectionStrategy: \"class\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"class\" },\r\n },\r\n directoryNodes: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: false, sectionStrategy: \"none\" },\r\n },\r\n contentLifeCycleStatus: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: true, sectionStrategy: \"class\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"class\" },\r\n },\r\n applicableForTypes: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: true, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"none\" },\r\n },\r\n planningTimes: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: true, sectionStrategy: \"class\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"class\" },\r\n },\r\n events: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: true, sectionStrategy: \"class\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"class\" },\r\n },\r\n functionalMetadata: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: true, sectionStrategy: \"class\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"class\" },\r\n },\r\n informationUnits: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: false, sectionStrategy: \"none\" },\r\n metadataDisplay: { supported: false, sectionStrategy: \"none\" },\r\n },\r\n productFeatures: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: true, sectionStrategy: \"class\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"class\" },\r\n },\r\n productLifeCyclePhases: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: true, sectionStrategy: \"class\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"class\" },\r\n },\r\n productMetadata: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: true, sectionStrategy: \"class\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"class\" },\r\n },\r\n productVariants: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: true, sectionStrategy: \"class\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"class\" },\r\n },\r\n qualifications: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: true, sectionStrategy: \"class\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"class\" },\r\n },\r\n supplies: {\r\n valueKind: \"objectRefArray\",\r\n facet: { supported: true, sectionStrategy: \"class\" },\r\n metadataDisplay: { supported: true, sectionStrategy: \"class\" },\r\n },\r\n};\r\n\r\n","import { InformationUnitPropertyKey } from \"./metadata-presentation-config\";\r\n\r\nexport type MetadataCacheFamily =\r\n | \"components\"\r\n | \"informationSubjects\"\r\n | \"documentTypes\"\r\n | \"topicTypes\"\r\n | \"contentLifeCycleStatus\"\r\n | \"planningTimes\"\r\n | \"functionalMetadata\"\r\n | \"productFeatures\"\r\n | \"productLifeCyclePhases\"\r\n | \"productMetadata\"\r\n | \"productVariants\"\r\n | \"qualifications\"\r\n | \"supplies\"\r\n | \"parties\";\r\n\r\nexport type MetadataPropertyVisibilityPolicy = {\r\n cacheFamily?: MetadataCacheFamily;\r\n deniedClassIds?: string[];\r\n deniedPartyRoleIds?: string[];\r\n};\r\n\r\nconst CONTENT_LICENSE_CLASS_ID = \"https://ids.c-crex.net/ns/iirds/ext#ContentLicense\";\r\n\r\nexport const METADATA_VISIBILITY_POLICY: Partial<Record<InformationUnitPropertyKey, MetadataPropertyVisibilityPolicy>> = {\r\n parties: {\r\n cacheFamily: \"parties\",\r\n },\r\n components: {\r\n cacheFamily: \"components\",\r\n },\r\n informationSubjects: {\r\n cacheFamily: \"informationSubjects\",\r\n },\r\n topicTypes: {\r\n cacheFamily: \"topicTypes\",\r\n },\r\n documentTypes: {\r\n cacheFamily: \"documentTypes\",\r\n },\r\n contentLifeCycleStatus: {\r\n cacheFamily: \"contentLifeCycleStatus\",\r\n },\r\n applicableForTypes: {\r\n cacheFamily: \"documentTypes\",\r\n },\r\n planningTimes: {\r\n cacheFamily: \"planningTimes\",\r\n },\r\n functionalMetadata: {\r\n cacheFamily: \"functionalMetadata\",\r\n },\r\n productFeatures: {\r\n cacheFamily: \"productFeatures\",\r\n },\r\n productLifeCyclePhases: {\r\n cacheFamily: \"productLifeCyclePhases\",\r\n },\r\n productMetadata: {\r\n cacheFamily: \"productMetadata\",\r\n },\r\n productVariants: {\r\n cacheFamily: \"productVariants\",\r\n },\r\n qualifications: {\r\n cacheFamily: \"qualifications\",\r\n deniedClassIds: [CONTENT_LICENSE_CLASS_ID],\r\n },\r\n supplies: {\r\n cacheFamily: \"supplies\",\r\n },\r\n};\r\n\r\ntype RuntimeSuppressionEntry = {\r\n reason: \"cache-overflow\";\r\n family: MetadataCacheFamily;\r\n bytes: number;\r\n limitBytes: number;\r\n timestamp: string;\r\n};\r\n\r\nconst runtimeSuppressedFamilies = new Map<MetadataCacheFamily, RuntimeSuppressionEntry>();\r\n\r\nexport const getMetadataCacheFamily = (\r\n property: InformationUnitPropertyKey\r\n): MetadataCacheFamily | undefined => METADATA_VISIBILITY_POLICY[property]?.cacheFamily;\r\n\r\nexport const isMetadataGroupDenied = (\r\n property: InformationUnitPropertyKey,\r\n options: { classId?: string | null; partyRoleId?: string | null }\r\n): boolean => {\r\n const policy = METADATA_VISIBILITY_POLICY[property];\r\n const classId = options.classId?.trim();\r\n const partyRoleId = options.partyRoleId?.trim();\r\n\r\n if (classId && policy?.deniedClassIds?.includes(classId)) {\r\n return true;\r\n }\r\n\r\n if (partyRoleId && policy?.deniedPartyRoleIds?.includes(partyRoleId)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const suppressMetadataCacheFamilyRuntime = (\r\n family: MetadataCacheFamily,\r\n entry: Omit<RuntimeSuppressionEntry, \"family\" | \"reason\" | \"timestamp\">\r\n) => {\r\n runtimeSuppressedFamilies.set(family, {\r\n family,\r\n reason: \"cache-overflow\",\r\n bytes: entry.bytes,\r\n limitBytes: entry.limitBytes,\r\n timestamp: new Date().toISOString(),\r\n });\r\n};\r\n\r\nexport const clearMetadataCacheFamilyRuntimeSuppression = (family: MetadataCacheFamily) => {\r\n runtimeSuppressedFamilies.delete(family);\r\n};\r\n\r\nexport const isMetadataPropertyRuntimeSuppressed = (property: InformationUnitPropertyKey): boolean => {\r\n const family = getMetadataCacheFamily(property);\r\n return family ? runtimeSuppressedFamilies.has(family) : false;\r\n};\r\n\r\nexport const getRuntimeSuppressedMetadataFamilies = (): RuntimeSuppressionEntry[] =>\r\n Array.from(runtimeSuppressedFamilies.values());\r\n\r\nexport const resetRuntimeSuppressedMetadataFamiliesForTests = () => {\r\n runtimeSuppressedFamilies.clear();\r\n};\r\n"],"mappings":"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","names":[]}
@@ -0,0 +1,489 @@
1
+ // src/read-models/metadata-presentation-config.ts
2
+ var INFORMATION_UNIT_PROPERTY_PRESENTATION = {
3
+ id: {
4
+ valueKind: "scalar",
5
+ facet: { supported: false, sectionStrategy: "none" },
6
+ metadataDisplay: { supported: false, sectionStrategy: "none" }
7
+ },
8
+ shortId: {
9
+ valueKind: "scalar",
10
+ facet: { supported: false, sectionStrategy: "none" },
11
+ metadataDisplay: { supported: false, sectionStrategy: "none" }
12
+ },
13
+ score: {
14
+ valueKind: "scalar",
15
+ facet: { supported: false, sectionStrategy: "none" },
16
+ metadataDisplay: { supported: false, sectionStrategy: "none" }
17
+ },
18
+ class: {
19
+ valueKind: "objectRef",
20
+ facet: { supported: false, sectionStrategy: "none" },
21
+ metadataDisplay: { supported: false, sectionStrategy: "class" }
22
+ },
23
+ labels: {
24
+ valueKind: "literalArray",
25
+ facet: { supported: false, sectionStrategy: "none" },
26
+ metadataDisplay: { supported: false, sectionStrategy: "none" }
27
+ },
28
+ comments: {
29
+ valueKind: "literalArray",
30
+ facet: { supported: false, sectionStrategy: "none" },
31
+ metadataDisplay: { supported: true, sectionStrategy: "none" }
32
+ },
33
+ descriptions: {
34
+ valueKind: "literalArray",
35
+ facet: { supported: false, sectionStrategy: "none" },
36
+ metadataDisplay: { supported: true, sectionStrategy: "none" }
37
+ },
38
+ synonyms: {
39
+ valueKind: "stringArray",
40
+ facet: { supported: false, sectionStrategy: "none" },
41
+ metadataDisplay: { supported: true, sectionStrategy: "none" }
42
+ },
43
+ packages: {
44
+ valueKind: "objectRefArray",
45
+ facet: { supported: true, sectionStrategy: "none" },
46
+ metadataDisplay: { supported: false, sectionStrategy: "none" }
47
+ },
48
+ hasInformationUnits: {
49
+ valueKind: "scalar",
50
+ facet: { supported: false, sectionStrategy: "none" },
51
+ metadataDisplay: { supported: false, sectionStrategy: "none" }
52
+ },
53
+ links: {
54
+ valueKind: "resourceLinkArray",
55
+ facet: { supported: false, sectionStrategy: "none" },
56
+ metadataDisplay: { supported: false, sectionStrategy: "none" }
57
+ },
58
+ revision: {
59
+ valueKind: "scalar",
60
+ facet: { supported: false, sectionStrategy: "none" },
61
+ metadataDisplay: { supported: true, sectionStrategy: "none" }
62
+ },
63
+ created: {
64
+ valueKind: "scalar",
65
+ facet: { supported: false, sectionStrategy: "none" },
66
+ metadataDisplay: { supported: true, sectionStrategy: "none" }
67
+ },
68
+ modified: {
69
+ valueKind: "scalar",
70
+ facet: { supported: false, sectionStrategy: "none" },
71
+ metadataDisplay: { supported: true, sectionStrategy: "none" }
72
+ },
73
+ abstract: {
74
+ valueKind: "literalArray",
75
+ facet: { supported: false, sectionStrategy: "none" },
76
+ metadataDisplay: { supported: true, sectionStrategy: "none" }
77
+ },
78
+ replaces: {
79
+ valueKind: "objectRef",
80
+ facet: { supported: false, sectionStrategy: "none" },
81
+ metadataDisplay: { supported: true, sectionStrategy: "none" }
82
+ },
83
+ versionOf: {
84
+ valueKind: "objectRef",
85
+ facet: { supported: false, sectionStrategy: "none" },
86
+ metadataDisplay: { supported: false, sectionStrategy: "none" }
87
+ },
88
+ titles: {
89
+ valueKind: "literalArray",
90
+ facet: { supported: false, sectionStrategy: "none" },
91
+ metadataDisplay: { supported: true, sectionStrategy: "none" }
92
+ },
93
+ languages: {
94
+ valueKind: "stringArray",
95
+ facet: { supported: true, sectionStrategy: "none" },
96
+ metadataDisplay: { supported: true, sectionStrategy: "none" }
97
+ },
98
+ parties: {
99
+ valueKind: "objectRefArray",
100
+ facet: { supported: true, sectionStrategy: "partyRole" },
101
+ metadataDisplay: { supported: true, sectionStrategy: "partyRole" }
102
+ },
103
+ renditions: {
104
+ valueKind: "renditionArray",
105
+ facet: { supported: false, sectionStrategy: "none" },
106
+ metadataDisplay: { supported: true, sectionStrategy: "none" }
107
+ },
108
+ identities: {
109
+ valueKind: "objectRefArray",
110
+ facet: { supported: false, sectionStrategy: "none" },
111
+ metadataDisplay: { supported: false, sectionStrategy: "none" }
112
+ },
113
+ components: {
114
+ valueKind: "objectRefArray",
115
+ facet: { supported: true, sectionStrategy: "class" },
116
+ metadataDisplay: { supported: true, sectionStrategy: "class" }
117
+ },
118
+ informationSubjects: {
119
+ valueKind: "objectRefArray",
120
+ facet: { supported: true, sectionStrategy: "class" },
121
+ metadataDisplay: { supported: true, sectionStrategy: "class" }
122
+ },
123
+ topicTypes: {
124
+ valueKind: "objectRefArray",
125
+ facet: { supported: true, sectionStrategy: "class" },
126
+ metadataDisplay: { supported: true, sectionStrategy: "class" }
127
+ },
128
+ documentTypes: {
129
+ valueKind: "objectRefArray",
130
+ facet: { supported: true, sectionStrategy: "class" },
131
+ metadataDisplay: { supported: true, sectionStrategy: "class" }
132
+ },
133
+ directoryNodes: {
134
+ valueKind: "objectRefArray",
135
+ facet: { supported: false, sectionStrategy: "none" },
136
+ metadataDisplay: { supported: false, sectionStrategy: "none" }
137
+ },
138
+ contentLifeCycleStatus: {
139
+ valueKind: "objectRefArray",
140
+ facet: { supported: true, sectionStrategy: "class" },
141
+ metadataDisplay: { supported: true, sectionStrategy: "class" }
142
+ },
143
+ applicableForTypes: {
144
+ valueKind: "objectRefArray",
145
+ facet: { supported: true, sectionStrategy: "none" },
146
+ metadataDisplay: { supported: true, sectionStrategy: "none" }
147
+ },
148
+ planningTimes: {
149
+ valueKind: "objectRefArray",
150
+ facet: { supported: true, sectionStrategy: "class" },
151
+ metadataDisplay: { supported: true, sectionStrategy: "class" }
152
+ },
153
+ events: {
154
+ valueKind: "objectRefArray",
155
+ facet: { supported: true, sectionStrategy: "class" },
156
+ metadataDisplay: { supported: true, sectionStrategy: "class" }
157
+ },
158
+ functionalMetadata: {
159
+ valueKind: "objectRefArray",
160
+ facet: { supported: true, sectionStrategy: "class" },
161
+ metadataDisplay: { supported: true, sectionStrategy: "class" }
162
+ },
163
+ informationUnits: {
164
+ valueKind: "objectRefArray",
165
+ facet: { supported: false, sectionStrategy: "none" },
166
+ metadataDisplay: { supported: false, sectionStrategy: "none" }
167
+ },
168
+ productFeatures: {
169
+ valueKind: "objectRefArray",
170
+ facet: { supported: true, sectionStrategy: "class" },
171
+ metadataDisplay: { supported: true, sectionStrategy: "class" }
172
+ },
173
+ productLifeCyclePhases: {
174
+ valueKind: "objectRefArray",
175
+ facet: { supported: true, sectionStrategy: "class" },
176
+ metadataDisplay: { supported: true, sectionStrategy: "class" }
177
+ },
178
+ productMetadata: {
179
+ valueKind: "objectRefArray",
180
+ facet: { supported: true, sectionStrategy: "class" },
181
+ metadataDisplay: { supported: true, sectionStrategy: "class" }
182
+ },
183
+ productVariants: {
184
+ valueKind: "objectRefArray",
185
+ facet: { supported: true, sectionStrategy: "class" },
186
+ metadataDisplay: { supported: true, sectionStrategy: "class" }
187
+ },
188
+ qualifications: {
189
+ valueKind: "objectRefArray",
190
+ facet: { supported: true, sectionStrategy: "class" },
191
+ metadataDisplay: { supported: true, sectionStrategy: "class" }
192
+ },
193
+ supplies: {
194
+ valueKind: "objectRefArray",
195
+ facet: { supported: true, sectionStrategy: "class" },
196
+ metadataDisplay: { supported: true, sectionStrategy: "class" }
197
+ }
198
+ };
199
+
200
+ // src/read-models/metadata-visibility-policy.ts
201
+ var CONTENT_LICENSE_CLASS_ID = "https://ids.c-crex.net/ns/iirds/ext#ContentLicense";
202
+ var METADATA_VISIBILITY_POLICY = {
203
+ parties: {
204
+ cacheFamily: "parties"
205
+ },
206
+ components: {
207
+ cacheFamily: "components"
208
+ },
209
+ informationSubjects: {
210
+ cacheFamily: "informationSubjects"
211
+ },
212
+ topicTypes: {
213
+ cacheFamily: "topicTypes"
214
+ },
215
+ documentTypes: {
216
+ cacheFamily: "documentTypes"
217
+ },
218
+ contentLifeCycleStatus: {
219
+ cacheFamily: "contentLifeCycleStatus"
220
+ },
221
+ applicableForTypes: {
222
+ cacheFamily: "documentTypes"
223
+ },
224
+ planningTimes: {
225
+ cacheFamily: "planningTimes"
226
+ },
227
+ functionalMetadata: {
228
+ cacheFamily: "functionalMetadata"
229
+ },
230
+ productFeatures: {
231
+ cacheFamily: "productFeatures"
232
+ },
233
+ productLifeCyclePhases: {
234
+ cacheFamily: "productLifeCyclePhases"
235
+ },
236
+ productMetadata: {
237
+ cacheFamily: "productMetadata"
238
+ },
239
+ productVariants: {
240
+ cacheFamily: "productVariants"
241
+ },
242
+ qualifications: {
243
+ cacheFamily: "qualifications",
244
+ deniedClassIds: [CONTENT_LICENSE_CLASS_ID]
245
+ },
246
+ supplies: {
247
+ cacheFamily: "supplies"
248
+ }
249
+ };
250
+ var runtimeSuppressedFamilies = /* @__PURE__ */ new Map();
251
+ var getMetadataCacheFamily = (property) => METADATA_VISIBILITY_POLICY[property]?.cacheFamily;
252
+ var isMetadataGroupDenied = (property, options) => {
253
+ const policy = METADATA_VISIBILITY_POLICY[property];
254
+ const classId = options.classId?.trim();
255
+ const partyRoleId = options.partyRoleId?.trim();
256
+ if (classId && policy?.deniedClassIds?.includes(classId)) {
257
+ return true;
258
+ }
259
+ if (partyRoleId && policy?.deniedPartyRoleIds?.includes(partyRoleId)) {
260
+ return true;
261
+ }
262
+ return false;
263
+ };
264
+ var isMetadataPropertyRuntimeSuppressed = (property) => {
265
+ const family = getMetadataCacheFamily(property);
266
+ return family ? runtimeSuppressedFamilies.has(family) : false;
267
+ };
268
+
269
+ // src/read-models/metadata-display-builder.ts
270
+ var DEFAULT_IGNORED_FORMATS = [
271
+ "application/xhtml+xml",
272
+ "application/json",
273
+ "application/llm+xml",
274
+ "text/html"
275
+ ];
276
+ var normalizeLanguageCode = (value) => {
277
+ const trimmed = value.trim();
278
+ if (!trimmed) return trimmed;
279
+ const [rawLang, rawCountry, ...rest] = trimmed.split("-");
280
+ const lang = (rawLang || "").toLowerCase();
281
+ if (!rawCountry) return lang;
282
+ const country = rawCountry.toUpperCase();
283
+ const suffix = rest.length > 0 ? `-${rest.join("-")}` : "";
284
+ return `${lang}-${country}${suffix}`;
285
+ };
286
+ var sortAndDeduplicateLanguages = (languages) => {
287
+ const normalized = languages.map((item) => (item || "").trim()).filter((item) => item.length > 0).map((item) => normalizeLanguageCode(item));
288
+ return Array.from(new Set(normalized)).sort((a, b) => a.localeCompare(b));
289
+ };
290
+ var resolvePreferredLanguage = (languages, uiLanguage) => {
291
+ if (!languages || languages.length === 0) return void 0;
292
+ const normalizedUiLanguage = normalizeLanguageCode(uiLanguage);
293
+ const baseLanguage = normalizedUiLanguage.split("-")[0];
294
+ const normalized = sortAndDeduplicateLanguages(languages);
295
+ const exact = normalized.find((item) => item === normalizedUiLanguage);
296
+ if (exact) return exact;
297
+ const base = normalized.find((item) => item === baseLanguage || item.startsWith(`${baseLanguage}-`));
298
+ if (base) return base;
299
+ const english = normalized.find((item) => item === "en" || item === "en-US" || item.startsWith("en-"));
300
+ if (english) return english;
301
+ return normalized[0];
302
+ };
303
+ var getFirstLinkByRel = (item, rel) => item.links?.find((link) => link.rel === rel)?.href;
304
+ var hasRenderableFileRenditions = (renditions) => {
305
+ if (!renditions || renditions.length === 0) return false;
306
+ return renditions.some((item) => {
307
+ if (!item.format || DEFAULT_IGNORED_FORMATS.includes(item.format)) return false;
308
+ return Boolean(getFirstLinkByRel(item, "download") || getFirstLinkByRel(item, "view"));
309
+ });
310
+ };
311
+ var resolveLiteralLabel = (labels, uiLanguage) => {
312
+ if (!labels || labels.length === 0) return void 0;
313
+ const language = uiLanguage || "en";
314
+ const preferred = resolvePreferredLanguage(
315
+ labels.map((item) => item.language || ""),
316
+ language
317
+ );
318
+ if (preferred) {
319
+ const exact = labels.find((item) => item.language === preferred)?.value;
320
+ if (exact) return exact;
321
+ }
322
+ return labels.find((item) => item.value)?.value || void 0;
323
+ };
324
+ var resolveObjectRefLabel = (item, uiLanguage) => {
325
+ return resolveLiteralLabel(item.labels || [], uiLanguage) || item.shortId || item.id || void 0;
326
+ };
327
+ var resolveObjectRefClassLabel = (item, uiLanguage) => {
328
+ return resolveLiteralLabel(item.class?.labels || [], uiLanguage) || item.class?.shortId || item.class?.id || void 0;
329
+ };
330
+ var asObjectRefArray = (value) => {
331
+ if (!Array.isArray(value)) return [];
332
+ return value.filter((item) => Boolean(item && typeof item === "object"));
333
+ };
334
+ var asLiteralArray = (value) => {
335
+ if (!Array.isArray(value)) return [];
336
+ return value.filter((item) => Boolean(item && typeof item === "object"));
337
+ };
338
+ var shouldUseFacetPresentation = (strategy) => {
339
+ return strategy === "class" || strategy === "partyRole";
340
+ };
341
+ var resolveFacetPresentationProperties = (includeProperties) => {
342
+ return includeProperties.filter((key) => {
343
+ const config = INFORMATION_UNIT_PROPERTY_PRESENTATION[key];
344
+ if (!config?.metadataDisplay?.supported) return false;
345
+ if (config.valueKind !== "objectRefArray" && config.valueKind !== "objectRef") return false;
346
+ return shouldUseFacetPresentation(config.metadataDisplay.sectionStrategy);
347
+ });
348
+ };
349
+ var resolveOverrideProperties = resolveFacetPresentationProperties;
350
+ var buildMetadataDisplayRows = (data, options) => {
351
+ const uiLanguage = options.uiLanguage;
352
+ const preferredTitle = resolveLiteralLabel(data.titles || [], uiLanguage) || resolveLiteralLabel(data.labels || [], uiLanguage);
353
+ const rows = [];
354
+ for (const key of options.includeProperties) {
355
+ const config = INFORMATION_UNIT_PROPERTY_PRESENTATION[key];
356
+ if (!config?.metadataDisplay?.supported) continue;
357
+ if (isMetadataPropertyRuntimeSuppressed(key)) continue;
358
+ if (key === "labels") continue;
359
+ if (key === "titles") {
360
+ if (preferredTitle) {
361
+ rows.push({
362
+ key,
363
+ label: key,
364
+ labelSource: "translationKey",
365
+ values: [preferredTitle],
366
+ valueType: "text"
367
+ });
368
+ }
369
+ continue;
370
+ }
371
+ const value = data[key];
372
+ if (value === null || value === void 0) continue;
373
+ if (key === "languages") {
374
+ const languages = sortAndDeduplicateLanguages(value || []);
375
+ if (languages.length > 0) {
376
+ rows.push({
377
+ key,
378
+ label: key,
379
+ labelSource: "translationKey",
380
+ values: languages,
381
+ valueType: "language"
382
+ });
383
+ }
384
+ continue;
385
+ }
386
+ if (config.valueKind === "scalar") {
387
+ rows.push({
388
+ key,
389
+ label: key,
390
+ labelSource: "translationKey",
391
+ values: [String(value)],
392
+ valueType: "text"
393
+ });
394
+ continue;
395
+ }
396
+ if (config.valueKind === "stringArray") {
397
+ const values = Array.from(new Set(value.map((item) => String(item)).filter(Boolean)));
398
+ if (values.length > 0) {
399
+ rows.push({
400
+ key,
401
+ label: key,
402
+ labelSource: "translationKey",
403
+ values,
404
+ valueType: "text"
405
+ });
406
+ }
407
+ continue;
408
+ }
409
+ if (config.valueKind === "literalArray") {
410
+ const preferred = resolveLiteralLabel(asLiteralArray(value), uiLanguage);
411
+ if (preferred) {
412
+ rows.push({
413
+ key,
414
+ label: key,
415
+ labelSource: "translationKey",
416
+ values: [preferred],
417
+ valueType: "text"
418
+ });
419
+ }
420
+ continue;
421
+ }
422
+ if (config.valueKind === "objectRef") {
423
+ const label = resolveObjectRefLabel(value, uiLanguage);
424
+ if (label) {
425
+ rows.push({
426
+ key,
427
+ label: key,
428
+ labelSource: "translationKey",
429
+ values: [label],
430
+ valueType: "text"
431
+ });
432
+ }
433
+ continue;
434
+ }
435
+ if (config.valueKind === "objectRefArray") {
436
+ const refs = asObjectRefArray(value);
437
+ if (refs.length === 0) continue;
438
+ const groupedValues = /* @__PURE__ */ new Map();
439
+ refs.forEach((ref) => {
440
+ const shortId = ref.shortId || "";
441
+ const presentationMap = (options.presentation || options.overrides)?.[key];
442
+ const presentationItem = (shortId ? presentationMap?.[shortId] : void 0) || (ref.id ? presentationMap?.[ref.id] : void 0);
443
+ if (presentationItem?.hidden) return;
444
+ if (isMetadataGroupDenied(key, { classId: ref.class?.id })) return;
445
+ const valueLabel = presentationItem?.label || resolveObjectRefLabel(ref, uiLanguage);
446
+ if (!valueLabel) return;
447
+ const sectionLabel = config.metadataDisplay.sectionStrategy === "none" ? key : presentationItem?.sectionLabel || resolveObjectRefClassLabel(ref, uiLanguage) || key;
448
+ const existing = groupedValues.get(sectionLabel) || /* @__PURE__ */ new Set();
449
+ existing.add(valueLabel);
450
+ groupedValues.set(sectionLabel, existing);
451
+ });
452
+ Array.from(groupedValues.entries()).sort(([left], [right]) => left.localeCompare(right)).forEach(([sectionLabel, valueSet]) => {
453
+ const values = Array.from(valueSet).sort((a, b) => a.localeCompare(b));
454
+ if (values.length === 0) return;
455
+ rows.push({
456
+ key,
457
+ label: sectionLabel,
458
+ labelSource: sectionLabel === key ? "translationKey" : "direct",
459
+ values,
460
+ valueType: "text"
461
+ });
462
+ });
463
+ continue;
464
+ }
465
+ if (config.valueKind === "renditionArray") {
466
+ const renditions = Array.isArray(value) ? value.filter((item) => Boolean(item && typeof item === "object")) : [];
467
+ if (renditions.length === 0) continue;
468
+ if (!hasRenderableFileRenditions(renditions)) continue;
469
+ rows.push({
470
+ key,
471
+ label: "files",
472
+ labelSource: "translationKey",
473
+ values: [],
474
+ valueType: "rendition",
475
+ renditions
476
+ });
477
+ }
478
+ }
479
+ return rows;
480
+ };
481
+ export {
482
+ buildMetadataDisplayRows,
483
+ resolveFacetPresentationProperties,
484
+ resolveLiteralLabel,
485
+ resolveObjectRefClassLabel,
486
+ resolveObjectRefLabel,
487
+ resolveOverrideProperties
488
+ };
489
+ //# sourceMappingURL=metadata-display-builder.mjs.map