99 lines
2.3 KiB
JavaScript
99 lines
2.3 KiB
JavaScript
const trimParser = require("../valueParsers/trim")
|
|
const booleanParser = require("../valueParsers/booleanParser")
|
|
const currencyParser = require("../valueParsers/currency")
|
|
const numberParser = require("../valueParsers/number")
|
|
|
|
const defaultOptions={
|
|
nameFor:{
|
|
text: "#text",
|
|
comment: "",
|
|
cdata: "",
|
|
},
|
|
// onTagClose: () => {},
|
|
// onAttribute: () => {},
|
|
piTag: false,
|
|
declaration: false, //"?xml"
|
|
tags: {
|
|
valueParsers: [
|
|
// "trim",
|
|
// "boolean",
|
|
// "number",
|
|
// "currency",
|
|
// "date",
|
|
]
|
|
},
|
|
attributes:{
|
|
prefix: "@_",
|
|
suffix: "",
|
|
groupBy: "",
|
|
|
|
valueParsers: [
|
|
// "trim",
|
|
// "boolean",
|
|
// "number",
|
|
// "currency",
|
|
// "date",
|
|
]
|
|
},
|
|
dataType:{
|
|
|
|
}
|
|
}
|
|
|
|
//TODO
|
|
const withJoin = ["trim","join", /*"entities",*/"number","boolean","currency"/*, "date"*/]
|
|
const withoutJoin = ["trim", /*"entities",*/"number","boolean","currency"/*, "date"*/]
|
|
|
|
function buildOptions(options){
|
|
//clone
|
|
const finalOptions = { ... defaultOptions};
|
|
|
|
//add config missed in cloning
|
|
finalOptions.tags.valueParsers.push(...withJoin)
|
|
if(!this.preserveOrder)
|
|
finalOptions.tags.valueParsers.push(...withoutJoin);
|
|
|
|
//add config missed in cloning
|
|
finalOptions.attributes.valueParsers.push(...withJoin)
|
|
|
|
//override configuration
|
|
copyProperties(finalOptions,options);
|
|
return finalOptions;
|
|
}
|
|
|
|
function copyProperties(target, source) {
|
|
for (let key in source) {
|
|
if (source.hasOwnProperty(key)) {
|
|
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];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function registerCommonValueParsers(options){
|
|
return {
|
|
"trim": new trimParser(),
|
|
// "join": this.entityParser.parse,
|
|
"boolean": new booleanParser(),
|
|
"number": new numberParser({
|
|
hex: true,
|
|
leadingZeros: true,
|
|
eNotation: true
|
|
}),
|
|
"currency": new currencyParser(),
|
|
// "date": this.entityParser.parse,
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
buildOptions : buildOptions,
|
|
registerCommonValueParsers: registerCommonValueParsers
|
|
} |