1{"version":3,"file":"Resources.js","names":["fallbackResourceString","readResourcesXMLAsync","path","fallback","xml","readXMLAsync","resources","ensureDefaultResourceXML","buildResourceItem","name","value","targetApi","translatable","item","$","_","undefined","String","buildResourceGroup","parent","items","findResourceGroup","group","app","filter","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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"}