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
JavaScript
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