UNPKG

igir

Version:

🕹 A zero-setup ROM collection manager that sorts, filters, extracts or archives, patches, and reports on collections of any size on any OS.

74 lines (73 loc) • 2.13 kB
import { XMLParser } from "fast-xml-parser"; const XML_IGNORE_PATHS = /* @__PURE__ */ new Set([ ...["machine", "game"].flatMap((tag) => [ `mame.${tag}.adjuster`, `mame.${tag}.archive`, `mame.${tag}.board`, `mame.${tag}.chip`, `mame.${tag}.condition`, `mame.${tag}.configuration`, `mame.${tag}.biosset`, `mame.${tag}.devices`, `mame.${tag}.dipswitch`, `mame.${tag}.display`, `mame.${tag}.driver`, `mame.${tag}.feature`, `mame.${tag}.input`, `mame.${tag}.port`, `mame.${tag}.ramoption`, `mame.${tag}.rebuildto`, `mame.${tag}.sample`, `mame.${tag}.slot`, `mame.${tag}.sound`, `mame.${tag}.video`, `mame.${tag}.year` ]), ...["softwarelist.software.info", "softwarelist.software.part.feature"].flatMap((path) => [ `softwarelists.${path}`, path ]) ]); const XML_IGNORE_ATTRS = { ...["machine", "game"].reduce((obj, tag) => { obj[`mame.${tag}`] = ["ismechanical", "runnable", "sampleof", "sourcefile"]; obj[`mame.${tag}.rom`] = ["offset", "optional", "region"]; return obj; }, {}) }; var datObject_default = { /** * Parse the contents of an XML file to a {@link DATObjectProps} object. */ fromXmlString: (xmlContents) => new XMLParser({ processEntities: { // MAME DATs need higher limits maxTotalExpansions: Number.MAX_SAFE_INTEGER }, ignoreAttributes: false, ignoreDeclaration: true, ignorePiTags: true, updateTag: (_tagName, jPathOrMatcher, attrs) => { if (typeof jPathOrMatcher !== "string") { return true; } if (XML_IGNORE_PATHS.has(jPathOrMatcher)) { return false; } const attrsToIgnore = XML_IGNORE_ATTRS[jPathOrMatcher] ?? []; for (const attr of attrsToIgnore) { delete attrs[attr]; } return true; }, parseTagValue: false, // don't try to parse any number-like values parseAttributeValue: false, // don't try to parse any number-like values attributeNamePrefix: "" }).parse(xmlContents) }; export { datObject_default as default }; //# sourceMappingURL=datObject.js.map