{"version":3,"file":"svg.cjs","sourceRoot":"","sources":["../src/svg.ts"],"names":[],"mappings":";;;AAAA,2CAAgE;AAChE,qDAA4C;AAE5C;;;;;GAKG;AACH,SAAgB,QAAQ,CAAC,GAAW;IAClC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAE3B,IAAA,cAAM,EAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE3B,MAAM,MAAM,GAAG,IAAI,2BAAS,CAAC;YAC3B,gBAAgB,EAAE,KAAK;YACvB,mBAAmB,EAAE,IAAI;SAC1B,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAE3C,IAAA,cAAM,EAAC,IAAA,mBAAW,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAEnC,yCAAyC;QACzC,IAAI,CAAC,IAAA,gBAAQ,EAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,MAAM,CAAC,GAAG,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAvBD,4BAuBC;AAED;;;;;GAKG;AACH,SAAgB,KAAK,CAAC,GAAW;IAC/B,IAAI,CAAC;QACH,QAAQ,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAPD,sBAOC","sourcesContent":["import { assert, hasProperty, isObject } from '@metamask/utils';\nimport { XMLParser } from 'fast-xml-parser';\n\n/**\n * Parse and validate a string as an SVG.\n *\n * @param svg - An SVG string.\n * @returns The SVG, its attributes and children in an object format.\n */\nexport function parseSvg(svg: string) {\n  try {\n    const trimmed = svg.trim();\n\n    assert(trimmed.length > 0);\n\n    const parser = new XMLParser({\n      ignoreAttributes: false,\n      parseAttributeValue: true,\n    });\n    const parsed = parser.parse(trimmed, true);\n\n    assert(hasProperty(parsed, 'svg'));\n\n    // Empty SVGs are not returned as objects\n    if (!isObject(parsed.svg)) {\n      return {};\n    }\n\n    return parsed.svg;\n  } catch {\n    throw new Error('Snap icon must be a valid SVG.');\n  }\n}\n\n/**\n * Validate that a string is a valid SVG.\n *\n * @param svg - An SVG string.\n * @returns True if the SVG is valid otherwise false.\n */\nexport function isSvg(svg: string) {\n  try {\n    parseSvg(svg);\n    return true;\n  } catch {\n    return false;\n  }\n}\n"]}