64 lines
1.9 KiB
JavaScript
Executable File
64 lines
1.9 KiB
JavaScript
Executable File
|
|
const JsObjOutputBuilder = require("./OutputBuilders/JsObjBuilder");
|
|
|
|
const defaultOptions = {
|
|
preserveOrder: false,
|
|
removeNSPrefix: false, // remove NS from tag name or attribute name if true
|
|
//ignoreRootElement : false,
|
|
stopNodes: [], //nested tags will not be parsed even for errors
|
|
// isArray: () => false, //User will set it
|
|
htmlEntities: false,
|
|
// skipEmptyListItem: false
|
|
tags:{
|
|
unpaired: [],
|
|
nameFor:{
|
|
cdata: false,
|
|
comment: false,
|
|
text: '#text'
|
|
},
|
|
separateTextProperty: false,
|
|
},
|
|
attributes:{
|
|
ignore: false,
|
|
booleanType: true,
|
|
entities: true,
|
|
},
|
|
|
|
// select: ["img[src]"],
|
|
// stop: ["anim", "[ads]"]
|
|
only: [], // rest tags will be skipped. It will result in flat array
|
|
hierarchy: false, //will be used when a particular tag is set to be parsed.
|
|
skip: [], // will be skipped from parse result. on('skip') will be triggered
|
|
|
|
select: [], // on('select', tag => tag ) will be called if match
|
|
stop: [], //given tagPath will not be parsed. innerXML will be set as string value
|
|
OutputBuilder: new JsObjOutputBuilder(),
|
|
};
|
|
|
|
const buildOptions = function(options) {
|
|
const finalOptions = { ... defaultOptions};
|
|
copyProperties(finalOptions,options)
|
|
return finalOptions;
|
|
};
|
|
|
|
function copyProperties(target, source) {
|
|
for (let key in source) {
|
|
if (source.hasOwnProperty(key)) {
|
|
if (key === 'OutputBuilder') {
|
|
target[key] = source[key];
|
|
}else if (typeof source[key] === 'object' && !Array.isArray(source[key])) {
|
|
// Recursively copy nested properties
|
|
if (typeof target[key] === 'undefined') {
|
|
target[key] = {};
|
|
}
|
|
copyProperties(target[key], source[key]);
|
|
} else {
|
|
// Copy non-nested properties
|
|
target[key] = source[key];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
exports.buildOptions = buildOptions;
|
|
exports.defaultOptions = defaultOptions; |