1{"version":3,"file":"Resources.js","names":["_XML","data","require","fallbackResourceString","readResourcesXMLAsync","path","fallback","xml","readXMLAsync","resources","ensureDefaultResourceXML","buildResourceItem","name","value","targetApi","translatable","item","$","_","undefined","String","buildResourceGroup","parent","_parent$items","items","findResourceGroup","group","_xml$filter","_xml$filter$call","app","filter","call","head","matches","getResourceItemsAsObject","reduce","prev","curr","getObjectAsResourceItems","obj","Object","entries","map","getObjectAsResourceGroup"],"sources":["../../src/android/Resources.ts"],"sourcesContent":["import { readXMLAsync, XMLObject } from '../utils/XML';\n\nexport type ResourceGroupXML = {\n  $: {\n    name: string;\n    parent: string;\n  };\n  item: ResourceItemXML[];\n};\n\nexport type ResourceXML = {\n  resources: {\n    $?: {\n      'xmlns:tools'?: string;\n    };\n    color?: ResourceItemXML[];\n    string?: ResourceItemXML[];\n    style?: ResourceGroupXML[];\n    // Add more if needed...\n  };\n};\n\nexport type ResourceItemXML = {\n  _: string;\n  $: {\n    name: string;\n    'tools:targetApi'?: string;\n    translatable?: string;\n  };\n};\n/**\n * Name of the resource folder.\n */\nexport type ResourceKind =\n  | 'values'\n  | 'values-night'\n  | 'values-v23'\n  | 'values-night-v23'\n  | 'drawable';\n\nconst fallbackResourceString = `<?xml version=\"1.0\" encoding=\"utf-8\"?><resources></resources>`;\n\n/**\n * Read an XML file while providing a default fallback for resource files.\n *\n * @param options path to the XML file, returns a fallback XML if the path doesn't exist.\n */\nexport async function readResourcesXMLAsync({\n  path,\n  fallback = fallbackResourceString,\n}: {\n  path: string;\n  fallback?: string | null;\n}): Promise<ResourceXML> {\n  const xml = await readXMLAsync({ path, fallback });\n  // Ensure the type is expected.\n  if (!xml.resources) {\n    xml.resources = {};\n  }\n  return xml as ResourceXML;\n}\n\n/**\n * Ensure the provided xml has a `resources` object (the expected shape).\n *\n * @param xml\n */\nexport function ensureDefaultResourceXML(xml: XMLObject): ResourceXML {\n  if (!xml) {\n    xml = { resources: {} };\n  }\n  if (!xml.resources) {\n    xml.resources = {};\n  }\n\n  return xml as ResourceXML;\n}\n\n/**\n * Build a `ResourceItemXML` given its `name` and `value`. This makes things a bit more readable.\n *\n * - JSON: `{ $: { name }, _: value }`\n * - XML: `<item name=\"NAME\">VALUE</item>`\n *\n * @param props name and value strings.\n */\nexport function buildResourceItem({\n  name,\n  value,\n  targetApi,\n  translatable,\n}: {\n  name: string;\n  value: string;\n  targetApi?: string;\n  translatable?: boolean;\n}): ResourceItemXML {\n  const item: ResourceItemXML = { $: { name }, _: value };\n  if (targetApi) {\n    item.$['tools:targetApi'] = targetApi;\n  }\n  if (translatable !== undefined) {\n    item.$['translatable'] = String(translatable);\n  }\n  return item;\n}\n\nexport function buildResourceGroup(parent: {\n  name: string;\n  parent: string;\n  items?: ResourceItemXML[];\n}): ResourceGroupXML {\n  return {\n    $: { name: parent.name, parent: parent.parent },\n    item: parent.items ?? [],\n  };\n}\n\nexport function findResourceGroup(\n  xml: ResourceGroupXML[] | undefined,\n  group: { name: string; parent?: string }\n): ResourceGroupXML | null {\n  const app = xml?.filter?.(({ $: head }) => {\n    let matches = head.name === group.name;\n    if (group.parent != null && matches) {\n      matches = head.parent === group.parent;\n    }\n    return matches;\n  })?.[0];\n  return app ?? null;\n}\n\n/**\n * Helper to convert a basic XML object into a simple k/v pair.\n *\n * @param xml\n * @returns\n */\nexport function getResourceItemsAsObject(xml: ResourceItemXML[]): Record<string, string> | null {\n  return xml.reduce(\n    (prev, curr) => ({\n      ...prev,\n      [curr.$.name]: curr._,\n    }),\n    {}\n  );\n}\n\n/**\n * Helper to convert a basic k/v object to a ResourceItemXML array.\n *\n * @param xml\n * @returns\n */\nexport function getObjectAsResourceItems(obj: Record<string, string>): ResourceItemXML[] {\n  return Object.entries(obj).map(([name, value]) => ({\n    $: { name },\n    _: value,\n  }));\n}\n\nexport function getObjectAsResourceGroup(group: {\n  name: string;\n  parent: string;\n  item: Record<string, string>;\n}): ResourceGroupXML {\n  return {\n    $: {\n      name: group.name,\n      parent: group.parent,\n    },\n    item: getObjectAsResourceItems(group.item),\n  };\n}\n"],"mappings":"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"}