From 1fbb8a36f20f089f6189c9cd56dea9887ae01c6e Mon Sep 17 00:00:00 2001 From: Vohmyanin Sergey Vasilevich Date: Thu, 15 Mar 2018 16:00:54 +0300 Subject: [PATCH] code cleanup --- .vscode/launch.json | 16 - lib/parser.js | 1044 --------------------------------------- parser.browser.js | 2 +- parser.browser.js.map | 2 +- parser.cli.js | 10 +- parser.cli.js.map | 2 +- parser.js | 33 +- parser.js.map | 2 +- src/cli.js | 20 +- src/j2x.js | 37 +- src/n2j-str.js | 2 +- src/n2j.js | 2 +- src/x2j.js | 12 +- tasks/postbundle.js | 11 - test/attr.spec.js | 1 - test/cdata.spec.js | 32 +- test/j2x.spec.js | 41 +- test/validator.spec.js | 42 +- test/xml-parser.spec.js | 165 +++---- 19 files changed, 192 insertions(+), 1284 deletions(-) delete mode 100644 .vscode/launch.json delete mode 100644 lib/parser.js delete mode 100644 tasks/postbundle.js diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 58fae00a..00000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "type": "node", - "request": "launch", - "name": "Jasmine Tests", - "program": "${workspaceFolder}/node_modules/jasmine/bin/jasmine.js", - "args": [ - "${workspaceFolder}/spec/attr_spec.js" - ], - "internalConsoleOptions": "openOnSessionStart" - } - ] - -} \ No newline at end of file diff --git a/lib/parser.js b/lib/parser.js deleted file mode 100644 index 6fda7a60..00000000 --- a/lib/parser.js +++ /dev/null @@ -1,1044 +0,0 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.parser = f()}})(function(){var define,module,exports;return (function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o a, - attrValueProcessor: a => a -}; - -function Parser(options) { - this.options = Object.assign({}, defaultOptions, options); - if (this.options.ignoreAttributes || this.options.attrNodeName) { - this.isAttribute = function(/*a*/) { return false;}; - } else { - this.attrPrefixLen = this.options.attributeNamePrefix.length; - this.isAttribute = isAttribute; - } - if (this.options.cdataTagName) { - this.isCDATA = isCDATA; - } else { - this.isCDATA = function(/*a*/) { return false;}; - } - this.replaceCDATAstr = replaceCDATAstr; - this.replaceCDATAarr = replaceCDATAarr; - - if (this.options.format) { - this.indentate = indentate; - this.tagEndChar = ">\n"; - this.newLine = "\n"; - } else { - this.indentate = function() { return "";}; - this.tagEndChar = ">"; - this.newLine = ""; - } - - if (this.options.supressEmptyNode) { - this.buildTextNode = buildEmptyTextNode; - this.buildObjNode = buildEmptyObjNode; - } else { - this.buildTextNode = buildTextValNode; - this.buildObjNode = buildObjectNode; - } - - this.buildTextValNode = buildTextValNode; - this.buildObjectNode = buildObjectNode; - -} - -Parser.prototype.parse = function(jObj) { - return this.j2x(jObj, 0).val; -}; - -Parser.prototype.j2x = function(jObj, level) { - var attrStr = ""; - var val = ""; - var keys = Object.keys(jObj); - var len = keys.length; - for (var i = 0; i < len; i++) { - var key = keys[i]; - if (typeof jObj[key] === "undefined") { - // supress undefined node - } - else if (typeof jObj[key] !== "object") {//premitive type - var attr = this.isAttribute(key); - if (attr) { - attrStr += " " + attr + "=\"" + this.options.attrValueProcessor("" + jObj[key]) + "\""; - } else if (this.isCDATA(key)) { - if (jObj[this.options.textNodeName]) { - val += this.replaceCDATAstr(jObj[this.options.textNodeName], jObj[key]); - } else { - val += this.replaceCDATAstr("", jObj[key]); - } - } else {//tag value - if (key === this.options.textNodeName) { - if (jObj[this.options.cdataTagName]) { - //value will added while processing cdata - } else { - val += this.options.tagValueProcessor("" + jObj[key]); - } - } else { - val += this.buildTextNode(jObj[key], key, "", level); - } - } - } else if (Array.isArray(jObj[key])) {//repeated nodes - if (this.isCDATA(key)) { - if (jObj[this.options.textNodeName]) { - val += this.replaceCDATAarr(jObj[this.options.textNodeName], jObj[key]); - } else { - val += this.replaceCDATAarr("", jObj[key]); - } - } else {//nested nodes - var arrLen = jObj[key].length; - for (var j = 0; j < arrLen; j++) { - var item = jObj[key][j]; - if (typeof item === "undefined") { - // supress undefined node - } - else if (typeof item === "object") { - var result = this.j2x(item, level + 1); - val += this.buildObjNode(result.val, key, result.attrStr, level); - } else { - val += this.buildTextNode(item, key, "", level); - } - } - } - } else { - if (this.options.attrNodeName && key === this.options.attrNodeName) { - var Ks = Object.keys(jObj[key]); - var L = Ks.length; - for (var j = 0; j < L; j++) { - attrStr += " " + Ks[j] + "=\"" + this.options.tagValueProcessor("" + jObj[key][Ks[j]]) + "\""; - } - } else { - var result = this.j2x(jObj[key], level + 1); - val += this.buildObjNode(result.val, key, result.attrStr, level); - } - } - } - return {attrStr: attrStr, val: val}; -}; - -function replaceCDATAstr(str, cdata) { - str = this.options.tagValueProcessor("" + str); - if (this.options.cdataPositionChar === "" || str === "") { - return str + ""; - } else { - return str.replace(this.options.cdataPositionChar, ""); - } -} - -function replaceCDATAarr(str, cdata) { - str = this.options.tagValueProcessor("" + str); - if (this.options.cdataPositionChar === "" || str === "") { - return str + ""; - } else { - for (var v in cdata) { - str = str.replace(this.options.cdataPositionChar, ""); - } - return str; - } -} - -function buildObjectNode(val, key, attrStr, level) { - return this.indentate(level) - + "<" + key + attrStr - + this.tagEndChar - + val - //+ this.newLine - + this.indentate(level) - + "" + this.options.tagValueProcessor("" + val) + " 1) { - jObj[tagname] = []; - for (var tag in node.child[tagname]) { - jObj[tagname].push(convertToJson(node.child[tagname][tag], options)); - } - } else { - jObj[tagname] = convertToJson(node.child[tagname][0], options); - } - } - - //add value - return jObj; -}; - -exports.convertToJson = convertToJson; -},{"./util":6}],3:[function(require,module,exports){ -"use strict"; - -var util = require("./util"); -var xmlToNodeobj = require("./x2j"); - -//TODO: do it later -var convertToJsonString = function(node, options) { - options = Object.assign({}, xmlToNodeobj.defaultOptions, options); - - options.indentBy = options.indentBy || ""; - return _cToJsonStr(node, options,0); -} - -var _cToJsonStr = function(node, options,level) { - var jObj = "{"; - - //traver through all the children - var keys = Object.keys(node.child); - - for (var index = 0; index < keys.length; index++) { - var tagname = keys[index]; - if (node.child[tagname] && node.child[tagname].length > 1) { - jObj += "\"" + tagname + "\" : [ "; - for (var tag in node.child[tagname]) { - jObj += _cToJsonStr(node.child[tagname][tag], options) + " , "; - } - jObj = jObj.substr(0,jObj.length-1) + " ] "; //remove extra comma in last - } else { - jObj += "\"" +tagname + "\" : " + _cToJsonStr(node.child[tagname][0], options) + " ,"; - } - } - util.merge(jObj, node.attrsMap); - //add attrsMap as new children - if (util.isEmptyObject(jObj)) { - return util.isExist(node.val) ? node.val : ""; - } else { - if (util.isExist(node.val)) { - if (!(typeof node.val === "string" && (node.val === "" || node.val === options.cdataPositionChar))) { - jObj += "\"" + options.textNodeName +"\" : " + stringval(node.val); - } - } - } - //add value - if(jObj[jObj.length-1] === ","){ - jObj = jObj.substr(0,jObj.length-2); - } - return jObj + "}"; -}; - -function stringval(v){ - if(v === true || v === false || !isNaN(v)){ - return v; - }else{ - return "\"" + v + "\""; - } -} - -function indentate(options, level) { - return options.indentBy.repeat(level); -} - -exports.convertToJsonString = convertToJsonString; -},{"./util":6,"./x2j":8}],4:[function(require,module,exports){ -"use strict"; -var char = function(a) { - return String.fromCharCode(a); -}; - -var chars = { - nilChar: char(254), - missingChar: char(200), - nilPremitive: char(176), - missingPremitive: char(201), - emptyChar: char(177), - emptyValue: char(178), - boundryChar: char(186), - arrayEnd: char(197), - objStart: char(198), - arrStart: char(199) -}; - -var charsArr = [ - chars.nilChar, - chars.nilPremitive, - chars.missingChar, - chars.missingPremitive, - chars.boundryChar, - chars.emptyChar, - chars.arrayEnd, - chars.objStart, - chars.arrStart -]; - -var _e = function(node, e_schema, options) { - if (typeof e_schema === "string") {//premitive - if (node && node[0] && node[0].val !== undefined) { - return getValue(node[0].val, e_schema); - } else { - return getValue(node, e_schema); - } - } else { - var hasValidData = hasData(node); - if (hasValidData === true) { - var str = ""; - if (Array.isArray(e_schema)) { - //attributes can't be repeated. hence check in children tags only - str += chars.arrStart; - var itemSchema = e_schema[0]; - //var itemSchemaType = itemSchema; - var arr_len = node.length; - - if (typeof itemSchema === "string") { - for (var arr_i = 0; arr_i < arr_len; arr_i++) { - var r = getValue(node[arr_i].val, itemSchema); - str = processValue(str, r); - } - } else { - for (var arr_i = 0; arr_i < arr_len; arr_i++) { - var r = _e(node[arr_i], itemSchema, options); - str = processValue(str, r); - } - } - str += chars.arrayEnd;//indicates that next item is not array item - } else {//object - str += chars.objStart; - var keys = Object.keys(e_schema); - if (Array.isArray(node)) { - node = node[0]; - } - for (var i in keys) { - var key = keys[i]; - //a property defined in schema can be present either in attrsMap or children tags - //options.textNodeName will not present in both maps, take it's value from val - //options.attrNodeName will be present in attrsMap - var r; - if (!options.ignoreAttributes && node.attrsMap && node.attrsMap[key]) { - r = _e(node.attrsMap[key], e_schema[key], options); - } else if (key === options.textNodeName) { - r = _e(node.val, e_schema[key], options); - } else { - r = _e(node.child[key], e_schema[key], options); - } - str = processValue(str, r); - } - } - return str; - } else { - return hasValidData; - } - } -}; - -var getValue = function(a/*, type*/) { - switch (a) { - case undefined: - return chars.missingPremitive; - case null: - return chars.nilPremitive; - case "": - return chars.emptyValue; - default: - return a; - } -}; - -var processValue = function(str, r) { - if (!isAppChar(r[0]) && !isAppChar(str[str.length - 1])) { - str += chars.boundryChar; - } - return str + r; -}; - -var isAppChar = function(ch) { - return charsArr.indexOf(ch) !== -1; -}; - -function hasData(jObj) { - if (jObj === undefined) { - return chars.missingChar; - } else if (jObj === null) { - return chars.nilChar; - } else if (jObj.child && Object.keys(jObj.child).length === 0 && (!jObj.attrsMap || Object.keys(jObj.attrsMap).length === 0)) { - return chars.emptyChar; - } else { - return true; - } -} - -var defaultOptions = require("./x2j").defaultOptions; -var convert2nimn = function(node, e_schema, options) { - options = Object.assign({}, defaultOptions, options); - return _e(node, e_schema, options); -}; - -exports.convert2nimn = convert2nimn; - -},{"./x2j":8}],5:[function(require,module,exports){ -"use strict"; - -var nodeToJson = require("./n2j"); -var xmlToNodeobj = require("./x2j"); - -exports.parse = function(xmlData, options) { - options = Object.assign({}, xmlToNodeobj.defaultOptions, options); - return nodeToJson.convertToJson(xmlToNodeobj.getTraversalObj(xmlData, options), options); -}; -exports.convertTonimn = require("../src/nimndata").convert2nimn; -exports.getTraversalObj = xmlToNodeobj.getTraversalObj; -exports.convertToJson = nodeToJson.convertToJson; -exports.convertToJsonString = require("./n2j_str").convertToJsonString; -exports.validate = require("./validator").validate; -exports.j2xParser = require("./j2x"); -exports.parseToNimn = function (xmlData,schema,options){ - return exports.convertTonimn(exports.getTraversalObj(xmlData,options), schema, options); -}; - -},{"../src/nimndata":4,"./j2x":1,"./n2j":2,"./n2j_str":3,"./validator":7,"./x2j":8}],6:[function(require,module,exports){ -"use strict"; - -var getAllMatches = function(string, regex) { - var matches = []; - var match = regex.exec(string); - while (match) { - var allmatches = []; - var len = match.length; - for (var index = 0; index < len; index++) { - allmatches.push(match[index]); - } - matches.push(allmatches); - match = regex.exec(string); - } - return matches; -}; - -var doesMatch = function(string, regex) { - var match = regex.exec(string); - return !(match === null || typeof match === "undefined"); -}; - -var doesNotMatch = function(string, regex) { - return !doesMatch(string, regex); -}; - -exports.isExist = function(v) { - return typeof v !== "undefined"; -}; - -exports.isEmptyObject = function(obj) { - return Object.keys(obj).length === 0; -}; - -/** - * Copy all the properties of a into b. - * @param {*} target - * @param {*} a - */ -exports.merge = function(target, a) { - if (a) { - var keys = Object.keys(a); // will return an array of own properties - var len = keys.length; //don't make it inline - for (var i = 0; i < len; i++) { - target[keys[i]] = a[keys[i]]; - } - } -}; -/* exports.merge =function (b,a){ - return Object.assign(b,a); -} */ - -exports.getValue = function(v) { - if (exports.isExist(v)) { - return v; - } else { - return ""; - } -}; - -// var fakeCall = function(a) {return a;}; -// var fakeCallNoReturn = function() {}; - -exports.doesMatch = doesMatch; -exports.doesNotMatch = doesNotMatch; -exports.getAllMatches = getAllMatches; - -},{}],7:[function(require,module,exports){ -"use strict"; - -var util = require("./util"); - -var defaultOptions = { - allowBooleanAttributes: false //A tag can have attributes without any value -}; - -var buildOptions = function(options) { - if (!options) { - options = {}; - } - var props = ["allowBooleanAttributes"]; - for (var i = 0; i < props.length; i++) { - if (options[props[i]] === undefined) { - options[props[i]] = defaultOptions[props[i]]; - } - } - return options; -}; - -//var tagsPattern = new RegExp("<\\/?([\\w:\\-_\.]+)\\s*\/?>","g"); -exports.validate = function(xmlData, options) { - options = buildOptions(options); - - //xmlData = xmlData.replace(/(\r\n|\n|\r)/gm,"");//make it single line - //xmlData = xmlData.replace(/(^\s*<\?xml.*?\?>)/g,"");//Remove XML starting tag - //xmlData = xmlData.replace(/()/g,"");//Remove DOCTYPE - - var tags = []; - var tagFound = false; - for (var i = 0; i < xmlData.length; i++) { - - if (xmlData[i] === "<") {//starting of tag - //read until you reach to '>' avoiding any '>' in attribute value - - i++; - if (xmlData[i] === "?") { - i = readPI(xmlData, ++i); - if (i.err) { - return i; - } - } else if (xmlData[i] === "!") { - i = readCommentAndCDATA(xmlData, i); - continue; - } else { - var closingTag = false; - if (xmlData[i] === "/") {//closing tag - closingTag = true; - i++; - } - //read tagname - var tagName = ""; - for (; i < xmlData.length && - xmlData[i] !== ">" && - xmlData[i] !== " " && - xmlData[i] !== "\t"; i++) { - - tagName += xmlData[i]; - } - tagName = tagName.trim(); - //console.log(tagName); - - if (tagName[tagName.length - 1] === "/") {//self closing tag without attributes - tagName = tagName.substring(0, tagName.length - 1); - continue; - } - if (!validateTagName(tagName)) { - return {err: {code: "InvalidTag", msg: "Tag " + tagName + " is an invalid name."}}; - } - - var result = readAttributeStr(xmlData, i); - if (result === false) { - return {err: {code: "InvalidAttr", msg: "Attributes for " + tagName + " have open quote"}}; - } - var attrStr = result.value; - i = result.index; - - if (attrStr[attrStr.length - 1] === "/") {//self closing tag - attrStr = attrStr.substring(0, attrStr.length - 1); - var isValid = validateAttributeString(attrStr, options); - if (isValid === true) { - tagFound = true; - continue; - } else { - return isValid; - } - } else if (closingTag) { - if (attrStr.trim().length > 0) { - return {err: {code: "InvalidTag", msg: "closing tag " + tagName + " can't have attributes or invalid starting."}}; - } else { - var otg = tags.pop(); - if (tagName !== otg) { - return {err: {code: "InvalidTag", msg: "closing tag " + otg + " is expected inplace of " + tagName + "."}}; - } - } - } else { - var isValid = validateAttributeString(attrStr, options); - if (isValid !== true) { - return isValid; - } - tags.push(tagName); - tagFound = true; - } - - //skip tag text value - //It may include comments and CDATA value - for (i++; i < xmlData.length; i++) { - if (xmlData[i] === "<") { - if (xmlData[i + 1] === "!") {//comment or CADATA - i++; - i = readCommentAndCDATA(xmlData, i); - continue; - } else { - break; - } - } - }//end of reading tag text value - if (xmlData[i] === "<") { - i--; - } - } - } else { - if (xmlData[i] === " " || xmlData[i] === "\t" || xmlData[i] === "\n" || xmlData[i] === "\r") { - continue; - } - return {err: {code: "InvalidChar", msg: "char " + xmlData[i] + " is not expected ."}}; - } - } - - if (!tagFound) { - return {err: {code: "InvalidXml", msg: "Start tag expected."}}; - } else if (tags.length > 0) { - return {err: {code: "InvalidXml", msg: "Invalid " + JSON.stringify(tags, null, 4).replace(/\r?\n/g, "") + " found."}}; - } - - return true; -}; - -/** - * Read Processing insstructions and skip - * @param {*} xmlData - * @param {*} i - */ -function readPI(xmlData, i) { - var start = i; - for (; i < xmlData.length; i++) { - if (xmlData[i] == "?" || xmlData[i] == " ") {//tagname - var tagname = xmlData.substr(start, i - start); - if (i > 5 && tagname === "xml") { - return {err: {code: "InvalidXml", msg: "XML declaration allowed only at the start of the document."}}; - } else if (xmlData[i] == "?" && xmlData[i + 1] == ">") { - //check if valid attribut string - i++; - break; - } else { - continue; - } - } - } - return i; -} - -function readCommentAndCDATA(xmlData, i) { - if (xmlData.length > i + 5 && xmlData[i + 1] === "-" && xmlData[i + 2] === "-") {//comment - for (i += 3; i < xmlData.length; i++) { - if (xmlData[i] === "-" && xmlData[i + 1] === "-" && xmlData[i + 2] === ">") { - i += 2; - break; - } - } - } else if (xmlData.length > i + 8 && - xmlData[i + 1] === "D" && - xmlData[i + 2] === "O" && - xmlData[i + 3] === "C" && - xmlData[i + 4] === "T" && - xmlData[i + 5] === "Y" && - xmlData[i + 6] === "P" && - xmlData[i + 7] === "E") { - var angleBracketsCount = 1; - for (i += 8; i < xmlData.length; i++) { - if (xmlData[i] === "<") {angleBracketsCount++;} - else if (xmlData[i] === ">") { - angleBracketsCount--; - if (angleBracketsCount === 0) { - break; - } - } - } - } else if (xmlData.length > i + 9 && - xmlData[i + 1] === "[" && - xmlData[i + 2] === "C" && - xmlData[i + 3] === "D" && - xmlData[i + 4] === "A" && - xmlData[i + 5] === "T" && - xmlData[i + 6] === "A" && - xmlData[i + 7] === "[") { - - for (i += 8; i < xmlData.length; i++) { - if (xmlData[i] === "]" && xmlData[i + 1] === "]" && xmlData[i + 2] === ">") { - i += 2; - break; - } - } - } - - return i; -} - -var doubleQuote = "\""; -var singleQuote = "'"; - -/** - * Keep reading xmlData until '<' is found outside the attribute value. - * @param {string} xmlData - * @param {number} i - */ -function readAttributeStr(xmlData, i) { - var attrStr = ""; - var startChar = ""; - for (; i < xmlData.length; i++) { - if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) { - if (startChar === "") { - startChar = xmlData[i]; - } else if (startChar !== xmlData[i]) { - //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa - continue; - } else { - startChar = ""; - } - } else if (xmlData[i] === ">") { - if (startChar === "") { - break; - } - } - attrStr += xmlData[i]; - } - if (startChar !== "") { - return false; - } - - return {value: attrStr, index: i}; -} - -/** - * Select all the attributes whether valid or invalid. - */ -var validAttrStrRegxp = new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?", "g"); - -//attr, ="sd", a="amit's", a="sd"b="saf", ab cd="" - -function validateAttributeString(attrStr, options) { - //console.log("start:"+attrStr+":end"); - - //if(attrStr.trim().length === 0) return true; //empty string - - var matches = util.getAllMatches(attrStr, validAttrStrRegxp); - var attrNames = []; - - for (var i = 0; i < matches.length; i++) { - //console.log(matches[i]); - - if (matches[i][1].length === 0) {//nospace before attribute name: a="sd"b="saf" - return {err: {code: "InvalidAttr", msg: "attribute " + matches[i][2] + " has no space in starting."}}; - } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {//independent attribute: ab - return {err: {code: "InvalidAttr", msg: "boolean attribute " + matches[i][2] + " is not allowed."}}; - } - /* else if(matches[i][6] === undefined){//attribute without value: ab= - return { err: { code:"InvalidAttr",msg:"attribute " + matches[i][2] + " has no value assigned."}}; - } */ - var attrName = matches[i][2]; - if (!validateAttrName(attrName)) { - return {err: {code: "InvalidAttr", msg: "attribute " + attrName + " is an invalid name."}}; - } - if (!attrNames.hasOwnProperty(attrName)) {//check for duplicate attribute. - attrNames[attrName] = 1; - } else { - return {err: {code: "InvalidAttr", msg: "attribute " + attrName + " is repeated."}}; - } - } - - return true; - -} - -var validAttrRegxp = /^[_a-zA-Z][\w\-.:]*$/; - -function validateAttrName(attrName) { - return util.doesMatch(attrName, validAttrRegxp); -} - -//var startsWithXML = new RegExp("^[Xx][Mm][Ll]"); -var startsWith = /^([a-zA-Z]|_)[\w.\-_:]*/; - -function validateTagName(tagname) { - /*if(util.doesMatch(tagname,startsWithXML)) return false; - else*/ - return !util.doesNotMatch(tagname, startsWith); -} - - - -},{"./util":6}],8:[function(require,module,exports){ -"use strict"; - -var util = require("./util"); -var xmlNode = require("./xmlNode"); -var TagType = {"OPENING": 1, "CLOSING": 2, "SELF": 3, "CDATA": 4}; - -//var tagsRegx = new RegExp("<(\\/?[\\w:\\-\._]+)([^>]*)>(\\s*"+cdataRegx+")*([^<]+)?","g"); -//var tagsRegx = new RegExp("<(\\/?)((\\w*:)?([\\w:\\-\._]+))([^>]*)>([^<]*)("+cdataRegx+"([^<]*))*([^<]+)?","g"); - -//treat cdata as a tag - -var defaultOptions = { - attributeNamePrefix: "@_", - attrNodeName: false, - textNodeName: "#text", - ignoreAttributes: true, - ignoreNameSpace: false, - allowBooleanAttributes: false, //a tag can have attributes without any value - //ignoreRootElement : false, - parseNodeValue: true, - parseAttributeValue: false, - arrayMode: false, - trimValues: true, //Trim string values of tag and attributes - cdataTagName: false, - cdataPositionChar: "\\c", - tagValueProcessor: a => a, - attrValueProcessor: a => a - //decodeStrict: false, -}; - -exports.defaultOptions = defaultOptions; - -var getTraversalObj = function(xmlData, options) { - //options = buildOptions(options); - options = Object.assign({}, defaultOptions, options); - //xmlData = xmlData.replace(/\r?\n/g, " ");//make it single line - xmlData = xmlData.replace(//g, "");//Remove comments - - var xmlObj = new xmlNode("!xml"); - var currentNode = xmlObj; - - var tagsRegx = /<((!\[CDATA\[([\s\S]*?)(]]>))|(([\w:\-._]*:)?([\w:\-._]+))([^>]*)>|((\/)(([\w:\-._]*:)?([\w:\-._]+))>))([^<]*)/g; - var tag = tagsRegx.exec(xmlData); - var nextTag = tagsRegx.exec(xmlData); - while (tag) { - var tagType = checkForTagType(tag); - - if (tagType === TagType.CLOSING) { - //add parsed data to parent node - if (currentNode.parent && tag[14]) { - currentNode.parent.val = util.getValue(currentNode.parent.val) + "" + processTagValue(tag[14], options); - } - - currentNode = currentNode.parent; - } else if (tagType === TagType.CDATA) { - if (options.cdataTagName) { - //add cdata node - var childNode = new xmlNode(options.cdataTagName, currentNode, tag[3]); - childNode.attrsMap = buildAttributesMap(tag[8], options); - currentNode.addChild(childNode); - //for backtracking - currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar; - //add rest value to parent node - if (tag[14]) { - currentNode.val += processTagValue(tag[14], options); - } - } else { - currentNode.val = (currentNode.val || "") + (tag[3] || "") + processTagValue(tag[14], options); - } - } else if (tagType === TagType.SELF) { - var childNode = new xmlNode(options.ignoreNameSpace ? tag[7] : tag[5], currentNode, ""); - if (tag[8] && tag[8].length > 1) { - tag[8] = tag[8].substr(0, tag[8].length - 1); - } - childNode.attrsMap = buildAttributesMap(tag[8], options); - currentNode.addChild(childNode); - } else {//TagType.OPENING - var childNode = new xmlNode(options.ignoreNameSpace ? tag[7] : tag[5], currentNode, processTagValue(tag[14], options)); - childNode.attrsMap = buildAttributesMap(tag[8], options); - currentNode.addChild(childNode); - currentNode = childNode; - } - - tag = nextTag; - nextTag = tagsRegx.exec(xmlData); - } - - return xmlObj; -}; - -function processTagValue(val, options) { - if (val) { - if (options.trimValues) { - val = val.trim(); - } - val = options.tagValueProcessor(val); - val = parseValue(val, options.parseNodeValue); - } - - return val; -} - -function checkForTagType(match) { - if (match[4] === "]]>") { - return TagType.CDATA; - } else if (match[10] === "/") { - return TagType.CLOSING; - } else if (typeof match[8] !== "undefined" && match[8].substr(match[8].length - 1) === "/") { - return TagType.SELF; - } else { - return TagType.OPENING; - } -} - -function resolveNameSpace(tagname, options) { - if (options.ignoreNameSpace) { - var tags = tagname.split(":"); - var prefix = tagname.charAt(0) === "/" ? "/" : ""; - if (tags[0] === "xmlns") { - return ""; - } - if (tags.length === 2) { - tagname = prefix + tags[1]; - } - } - return tagname; -} - -function parseValue(val, shouldParse) { - if (shouldParse && typeof val === "string") { - if (val.trim() === "" || isNaN(val)) { - val = val === "true" ? true : val === "false" ? false : val; - } else { - if (val.indexOf(".") !== -1) { - val = Number.parseFloat(val); - } else { - val = Number.parseInt(val, 10); - } - } - return val; - } else { - if (util.isExist(val)) { - return val; - } else { - return ""; - } - } -} - -//TODO: change regex to capture NS -//var attrsRegx = new RegExp("([\\w\\-\\.\\:]+)\\s*=\\s*(['\"])((.|\n)*?)\\2","gm"); -var attrsRegx = new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])(.*?)\\3)?", "g"); - -function buildAttributesMap(attrStr, options) { - if (!options.ignoreAttributes && typeof attrStr === "string") { - attrStr = attrStr.replace(/\r?\n/g, " "); - //attrStr = attrStr || attrStr.trim(); - - var matches = util.getAllMatches(attrStr, attrsRegx); - var len = matches.length; //don't make it inline - var attrs = {}; - for (var i = 0; i < len; i++) { - var attrName = resolveNameSpace(matches[i][1], options); - if (attrName.length) { - if (matches[i][4] !== undefined) { - if (options.trimValues) { - matches[i][4] = matches[i][4].trim(); - } - matches[i][4] = options.attrValueProcessor(matches[i][4]); - attrs[options.attributeNamePrefix + attrName] = parseValue(matches[i][4], options.parseAttributeValue); - } else if (options.allowBooleanAttributes) { - attrs[options.attributeNamePrefix + attrName] = true; - } - - } - } - if (!Object.keys(attrs).length) { - return; - } - if (options.attrNodeName) { - var attrCollection = {}; - attrCollection[options.attrNodeName] = attrs; - return attrCollection; - } - return attrs; - } -} - -exports.getTraversalObj = getTraversalObj; - -},{"./util":6,"./xmlNode":9}],9:[function(require,module,exports){ -"use strict"; - -module.exports = function(tagname, parent, val) { - this.tagname = tagname; - this.parent = parent; - this.child = {};//child tags - this.attrsMap = {};//attributes map - this.val = val;//text only - this.addChild = function(child) { - if (this.child[child.tagname]) {//already presents - this.child[child.tagname].push(child); - } else { - this.child[child.tagname] = [child]; - } - }; -}; - -},{}]},{},[5])(5) -}); \ No newline at end of file diff --git a/parser.browser.js b/parser.browser.js index f4e6d905..ac3f22e2 100644 --- a/parser.browser.js +++ b/parser.browser.js @@ -1,2 +1,2 @@ -var parser=function(t){var e={};function r(n){if(e[n])return e[n].exports;var a=e[n]={i:n,l:!1,exports:{}};return t[n].call(a.exports,a,a.exports,r),a.l=!0,a.exports}return r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},r.r=function(t){Object.defineProperty(t,"__esModule",{value:!0})},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=8)}([function(t,e){function r(t){if(Array.isArray(t)){for(var e=0,r=new Array(t.length);e/g,"");for(var r=new a("!xml"),l=r,u=/<((!\[CDATA\[([\s\S]*?)(]]>))|(([\w:\-._]*:)?([\w:\-._]+))([^>]*)>|((\/)(([\w:\-._]*:)?([\w:\-._]+))>))([^<]*)/g,c=u.exec(t),h=u.exec(t);c;){var d="]]>"===(b=c)[4]?i.CDATA:"/"===b[10]?i.CLOSING:void 0!==b[8]&&"/"===b[8].substr(b[8].length-1)?i.SELF:i.OPENING;if(d===i.CLOSING)l.parent&&c[14]&&(l.parent.val=n.getValue(l.parent.val)+""+s(c[14],e)),l=l.parent;else if(d===i.CDATA)if(e.cdataTagName){var v=new a(e.cdataTagName,l,c[3]);v.attrsMap=f(c[8],e),l.addChild(v),l.val=n.getValue(l.val)+e.cdataPositionChar,c[14]&&(l.val+=s(c[14],e))}else l.val=(l.val||"")+(c[3]||"")+s(c[14],e);else if(d===i.SELF){var g=new a(e.ignoreNameSpace?c[7]:c[5],l,"");c[8]&&c[8].length>1&&(c[8]=c[8].substr(0,c[8].length-1)),g.attrsMap=f(c[8],e),l.addChild(g)}else{var p=new a(e.ignoreNameSpace?c[7]:c[5],l,s(c[14],e));p.attrsMap=f(c[8],e),l.addChild(p),l=p}c=h,h=u.exec(t)}var b;return r}}},function(t,e,r){"use strict";var n=r(0),a=n.isEmptyObject,i=n.isExist,o=n.merge,s=r(1),l=function t(e,r,n){for(var s,l="{",u=Object.keys(e.child),c=0;c1){l+='"'+f+'" : [ ';for(var h=Object.keys(e.child[f]),d=0;d1){n[u]=[];for(var c=Object.keys(e.child[u]),f=0;f\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine=""),this.options.supressEmptyNode?(this.buildTextNode=d,this.buildObjNode=f):(this.buildTextNode=h,this.buildObjNode=c),this.buildTextValNode=h,this.buildObjectNode=c}var e,r,s;return e=t,(r=[{key:"parse",value:function(t){return this.j2x(t,0).val}},{key:"j2x",value:function(t,e){for(var r="",a="",o=Object.keys(t),s=0;s":t.replace(this.options.cdataPositionChar,"")}function u(t,e){if(t=this.options.tagValueProcessor(""+t),""===this.options.cdataPositionChar||""===t)return t+"";for(var r=Object.keys(e),n=0;n")}return t}function c(t,e,r,n){return this.indentate(n)+"<"+e+r+this.tagEndChar+t+this.indentate(n)+""+this.options.tagValueProcessor(""+t)+"5&&"xml"===n)return{err:{code:"InvalidXml",msg:"XML declaration allowed only at the start of the document."}};if("?"===t[e]&&">"===t[e+1]){e++;break}}return e}function o(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e"===t[e+2]){e+=2;break}}else if(t.length>e+8&&"D"===t[e+1]&&"O"===t[e+2]&&"C"===t[e+3]&&"T"===t[e+4]&&"Y"===t[e+5]&&"P"===t[e+6]&&"E"===t[e+7]){var r=1;for(e+=8;e"===t[e]&&0===--r)break}else if(t.length>e+9&&"["===t[e+1]&&"C"===t[e+2]&&"D"===t[e+3]&&"A"===t[e+4]&&"T"===t[e+5]&&"A"===t[e+6]&&"["===t[e+7])for(e+=8;e"===t[e+2]){e+=2;break}return e}var s='"',l="'";function u(t,e){for(var r="",n="";e"===t[e]&&""===n)break;r+=t[e]}return""===n&&{value:r,index:e}}var c=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function f(t,e){var r=n.getAllMatches(t,c),a=[],i=!0,o=!1,s=void 0;try{for(var l,u=r[Symbol.iterator]();!(i=(l=u.next()).done);i=!0){var f=l.value;if(0===f[1].length)return{err:{code:"InvalidAttr",msg:"attribute "+f[2]+" has no space in starting."}};if(void 0===f[3]&&!e.allowBooleanAttributes)return{err:{code:"InvalidAttr",msg:"boolean attribute "+f[2]+" is not allowed."}};var h=f[2];if(!d(h))return{err:{code:"InvalidAttr",msg:"attribute "+h+" is an invalid name."}};if(a.hasOwnProperty(h))return{err:{code:"InvalidAttr",msg:"attribute "+h+" is repeated."}};a[h]=1}}catch(t){o=!0,s=t}finally{try{i||null==u.return||u.return()}finally{if(o)throw s}}return!0}var h=/^[_a-zA-Z][\w\-.:]*$/;function d(t){return n.doesMatch(t,h)}var v=/^([a-zA-Z]|_)[\w.\-_:]*/;t.exports={validate:function(t,e){e=function(t){t||(t={});for(var e=["allowBooleanAttributes"],r=0;r"!==t[c]&&" "!==t[c]&&"\t"!==t[c];c++)d+=t[c];if("/"===(d=d.trim())[d.length-1]){d=d.substring(0,d.length-1);continue}if(r=d,n.doesNotMatch(r,v))return{err:{code:"InvalidTag",msg:"Tag "+d+" is an invalid name."}};var g=u(t,c);if(!1===g)return{err:{code:"InvalidAttr",msg:"Attributes for "+d+" have open quote"}};var p=g.value;if(c=g.index,"/"===p[p.length-1]){var b=f(p=p.substring(0,p.length-1),e);if(!0===b){l=!0;continue}return b}if(h){if(p.trim().length>0)return{err:{code:"InvalidTag",msg:"closing tag "+d+" can't have attributes or invalid starting."}};var m=s.pop();if(d!==m)return{err:{code:"InvalidTag",msg:"closing tag "+m+" is expected inplace of "+d+"."}}}else{var y=f(p,e);if(!0!==y)return y;s.push(d),l=!0}for(c++;c0)||{err:{code:"InvalidXml",msg:"Invalid "+JSON.stringify(s,null,4).replace(/\r?\n/g,"")+" found."}}:{err:{code:"InvalidXml",msg:"Start tag expected."}}}}},function(t,e,r){var n=function(t){return String.fromCharCode(t)},a={nilChar:n(254),missingChar:n(200),nilPremitive:n(176),missingPremitive:n(201),emptyChar:n(177),emptyValue:n(178),boundryChar:n(186),arrayEnd:n(197),objStart:n(198),arrStart:n(199)},i=[a.nilChar,a.nilPremitive,a.missingChar,a.missingPremitive,a.boundryChar,a.emptyChar,a.arrayEnd,a.objStart,a.arrStart],o=function(t){switch(t){case void 0:return a.missingPremitive;case null:return a.nilPremitive;case"":return a.emptyValue;default:return t}},s=function(t,e){return l(e[0])||l(t[t.length-1])||(t+=a.boundryChar),t+e},l=function(t){return-1!==i.indexOf(t)},u=function(t){return void 0===t?a.missingChar:null===t?a.nilChar:!(t.child&&0===Object.keys(t.child).length&&(!t.attrsMap||0===Object.keys(t.attrsMap).length))||a.emptyChar},c=r(1).defaultOptions;t.exports={convertToNimn:function(t,e,r){return function t(e,r,n){if("string"==typeof r)return e&&e[0]&&void 0!==e[0].val?o(e[0].val,r):o(e,r);var i=u(e);if(!0===i){var l="";if(Array.isArray(r)){l+=a.arrStart;var c=r[0];if("string"==typeof c){var f=!0,h=!1,d=void 0;try{for(var v,g=e[Symbol.iterator]();!(f=(v=g.next()).done);f=!0){var p=v.value,b=o(p.val,c);l=s(l,b)}}catch(t){h=!0,d=t}finally{try{f||null==g.return||g.return()}finally{if(h)throw d}}}else{var m=!0,y=!1,N=void 0;try{for(var A,x=e[Symbol.iterator]();!(m=(A=x.next()).done);m=!0){var C=t(A.value,c,n);l=s(l,C)}}catch(t){y=!0,N=t}finally{try{m||null==x.return||x.return()}finally{if(y)throw N}}}l+=a.arrayEnd}else{l+=a.objStart,Array.isArray(e)&&(e=e[0]);for(var T=Object.keys(r),O=0;O/g,"");for(var r=new a("!xml"),i=r,u=/<((!\[CDATA\[([\s\S]*?)(]]>))|(([\w:\-._]*:)?([\w:\-._]+))([^>]*)>|((\/)(([\w:\-._]*:)?([\w:\-._]+))>))([^<]*)/g,c=u.exec(t),f=u.exec(t);c;){var d="]]>"===(m=c)[4]?o.CDATA:"/"===m[10]?o.CLOSING:void 0!==m[8]&&"/"===m[8].substr(m[8].length-1)?o.SELF:o.OPENING;if(d===o.CLOSING)i.parent&&c[14]&&(i.parent.val=n.getValue(i.parent.val)+""+l(c[14],e)),i=i.parent;else if(d===o.CDATA)if(e.cdataTagName){var v=new a(e.cdataTagName,i,c[3]);v.attrsMap=h(c[8],e),i.addChild(v),i.val=n.getValue(i.val)+e.cdataPositionChar,c[14]&&(i.val+=l(c[14],e))}else i.val=(i.val||"")+(c[3]||"")+l(c[14],e);else if(d===o.SELF){var g=new a(e.ignoreNameSpace?c[7]:c[5],i,"");c[8]&&c[8].length>1&&(c[8]=c[8].substr(0,c[8].length-1)),g.attrsMap=h(c[8],e),i.addChild(g)}else{var p=new a(e.ignoreNameSpace?c[7]:c[5],i,l(c[14],e));p.attrsMap=h(c[8],e),i.addChild(p),i=p}c=f,f=u.exec(t)}var m;return r}}},function(t,e,r){"use strict";var n=r(0),a=n.isEmptyObject,i=n.isExist,o=n.merge,s=r(1),l=function t(e,r,n){for(var s,l="{",u=Object.keys(e.child),c=0;c1){l+='"'+f+'" : [ ';for(var h=Object.keys(e.child[f]),d=0;d1){n[u]=[];for(var c=Object.keys(e.child[u]),f=0;f\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine=""),this.options.supressEmptyNode?(this.buildTextNode=d,this.buildObjNode=f):(this.buildTextNode=h,this.buildObjNode=c),this.buildTextValNode=h,this.buildObjectNode=c}var e,r,s;return e=t,(r=[{key:"parse",value:function(t){return this.j2x(t,0).val}},{key:"j2x",value:function(t,e){for(var r="",a="",o=Object.keys(t),s=0;s":t.replace(this.options.cdataPositionChar,"")}function u(t,e){if(t=this.options.tagValueProcessor(""+t),""===this.options.cdataPositionChar||""===t)return t+"";for(var r=Object.keys(e),n=0;n")}return t}function c(t,e,r,n){return this.indentate(n)+"<"+e+r+this.tagEndChar+t+this.indentate(n)+""+this.options.tagValueProcessor(""+t)+"5&&"xml"===n)return{err:{code:"InvalidXml",msg:"XML declaration allowed only at the start of the document."}};if("?"===t[e]&&">"===t[e+1]){e++;break}}return e}function o(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e"===t[e+2]){e+=2;break}}else if(t.length>e+8&&"D"===t[e+1]&&"O"===t[e+2]&&"C"===t[e+3]&&"T"===t[e+4]&&"Y"===t[e+5]&&"P"===t[e+6]&&"E"===t[e+7]){var r=1;for(e+=8;e"===t[e]&&0===--r)break}else if(t.length>e+9&&"["===t[e+1]&&"C"===t[e+2]&&"D"===t[e+3]&&"A"===t[e+4]&&"T"===t[e+5]&&"A"===t[e+6]&&"["===t[e+7])for(e+=8;e"===t[e+2]){e+=2;break}return e}var s='"',l="'";function u(t,e){for(var r="",n="";e"===t[e]&&""===n)break;r+=t[e]}return""===n&&{value:r,index:e}}var c=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function f(t,e){var r=n.getAllMatches(t,c),a=[],i=!0,o=!1,s=void 0;try{for(var l,u=r[Symbol.iterator]();!(i=(l=u.next()).done);i=!0){var f=l.value;if(0===f[1].length)return{err:{code:"InvalidAttr",msg:"attribute "+f[2]+" has no space in starting."}};if(void 0===f[3]&&!e.allowBooleanAttributes)return{err:{code:"InvalidAttr",msg:"boolean attribute "+f[2]+" is not allowed."}};var h=f[2];if(!d(h))return{err:{code:"InvalidAttr",msg:"attribute "+h+" is an invalid name."}};if(a.hasOwnProperty(h))return{err:{code:"InvalidAttr",msg:"attribute "+h+" is repeated."}};a[h]=1}}catch(t){o=!0,s=t}finally{try{i||null==u.return||u.return()}finally{if(o)throw s}}return!0}var h=/^[_a-zA-Z][\w\-.:]*$/;function d(t){return n.doesMatch(t,h)}var v=/^([a-zA-Z]|_)[\w.\-_:]*/;t.exports={validate:function(t,e){e=function(t){t||(t={});for(var e=["allowBooleanAttributes"],r=0;r"!==t[c]&&" "!==t[c]&&"\t"!==t[c];c++)d+=t[c];if("/"===(d=d.trim())[d.length-1]){d=d.substring(0,d.length-1);continue}if(r=d,n.doesNotMatch(r,v))return{err:{code:"InvalidTag",msg:"Tag "+d+" is an invalid name."}};var g=u(t,c);if(!1===g)return{err:{code:"InvalidAttr",msg:"Attributes for "+d+" have open quote"}};var p=g.value;if(c=g.index,"/"===p[p.length-1]){var m=f(p=p.substring(0,p.length-1),e);if(!0===m){l=!0;continue}return m}if(h){if(p.trim().length>0)return{err:{code:"InvalidTag",msg:"closing tag "+d+" can't have attributes or invalid starting."}};var b=s.pop();if(d!==b)return{err:{code:"InvalidTag",msg:"closing tag "+b+" is expected inplace of "+d+"."}}}else{var y=f(p,e);if(!0!==y)return y;s.push(d),l=!0}for(c++;c0)||{err:{code:"InvalidXml",msg:"Invalid "+JSON.stringify(s,null,4).replace(/\r?\n/g,"")+" found."}}:{err:{code:"InvalidXml",msg:"Start tag expected."}}}}},function(t,e,r){var n=function(t){return String.fromCharCode(t)},a={nilChar:n(254),missingChar:n(200),nilPremitive:n(176),missingPremitive:n(201),emptyChar:n(177),emptyValue:n(178),boundryChar:n(186),arrayEnd:n(197),objStart:n(198),arrStart:n(199)},i=[a.nilChar,a.nilPremitive,a.missingChar,a.missingPremitive,a.boundryChar,a.emptyChar,a.arrayEnd,a.objStart,a.arrStart],o=function(t){switch(t){case void 0:return a.missingPremitive;case null:return a.nilPremitive;case"":return a.emptyValue;default:return t}},s=function(t,e){return l(e[0])||l(t[t.length-1])||(t+=a.boundryChar),t+e},l=function(t){return-1!==i.indexOf(t)},u=function(t){return void 0===t?a.missingChar:null===t?a.nilChar:!(t.child&&0===Object.keys(t.child).length&&(!t.attrsMap||0===Object.keys(t.attrsMap).length))||a.emptyChar},c=r(1).defaultOptions;t.exports={convertToNimn:function(t,e,r){return function t(e,r,n){if("string"==typeof r)return e&&e[0]&&void 0!==e[0].val?o(e[0].val,r):o(e,r);var i=u(e);if(!0===i){var l="";if(Array.isArray(r)){l+=a.arrStart;var c=r[0];if("string"==typeof c){var f=!0,h=!1,d=void 0;try{for(var v,g=e[Symbol.iterator]();!(f=(v=g.next()).done);f=!0){var p=v.value,m=o(p.val,c);l=s(l,m)}}catch(t){h=!0,d=t}finally{try{f||null==g.return||g.return()}finally{if(h)throw d}}}else{var b=!0,y=!1,N=void 0;try{for(var A,x=e[Symbol.iterator]();!(b=(A=x.next()).done);b=!0){var C=t(A.value,c,n);l=s(l,C)}}catch(t){y=!0,N=t}finally{try{b||null==x.return||x.return()}finally{if(y)throw N}}}l+=a.arrayEnd}else{l+=a.objStart,Array.isArray(e)&&(e=e[0]);for(var T=Object.keys(r),O=0;O {\n const matches = [];\n let match;\n while (match = regex.exec(string)) {\n matches.push([...match]);\n }\n return matches;\n};\n\n/**\n * Copy all the properties of a into b.\n * @param {*} target\n * @param {*} source\n */\nconst merge = (target, source) => {\n if (source) {\n for (let key of Object.keys(source)) {\n target[key] = source[key];\n }\n }\n return target;\n};\n\nconst isEmptyObject = (obj) => Object.keys(obj).length === 0;\nconst isExist = (v) => typeof v !== \"undefined\";\n\nconst doesMatch = (string, regex) => {\n const match = regex.exec(string);\n return !(match === null || !isExist(match));\n};\n\nconst doesNotMatch = (string, regex) => !doesMatch(string, regex);\n\nconst getValue = (v) => isExist(v) ? v : \"\";\n\n// const fakeCall = function(a) {return a;};\n// const fakeCallNoReturn = function() {};\nmodule.exports = {\n getValue,\n merge,\n isEmptyObject,\n isExist,\n doesMatch,\n doesNotMatch,\n getAllMatches\n};\n","const util = require(\"./util\");\nconst {XmlNode} = require(\"./xml-node\");\nconst TagType = {\"OPENING\": 1, \"CLOSING\": 2, \"SELF\": 3, \"CDATA\": 4};\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\n//treat cdata as a tag\n\nconst defaultOptions = {\n attributeNamePrefix: \"@_\",\n attrNodeName: false,\n textNodeName: \"#text\",\n ignoreAttributes: true,\n ignoreNameSpace: false,\n allowBooleanAttributes: false, //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseNodeValue: true,\n parseAttributeValue: false,\n arrayMode: false,\n trimValues: true, //Trim string values of tag and attributes\n //decodeHTMLchar: false,\n cdataTagName: false,\n cdataPositionChar: \"\\\\c\",\n tagValueProcessor: (a) => a,\n attrValueProcessor: (a) => a\n //decodeStrict: false,\n};\n\nconst getTraversalObj = (xmlData, options) => {\n //options = buildOptions(options);\n options = Object.assign({}, defaultOptions, options);\n //xmlData = xmlData.replace(/\\r?\\n/g, \" \");//make it single line\n xmlData = xmlData.replace(//g, \"\");//Remove comments\n\n const xmlObj = new XmlNode(\"!xml\");\n let currentNode = xmlObj;\n\n const tagsRegx = /<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|(([\\w:\\-._]*:)?([\\w:\\-._]+))([^>]*)>|((\\/)(([\\w:\\-._]*:)?([\\w:\\-._]+))>))([^<]*)/g;\n let tag = tagsRegx.exec(xmlData);\n let nextTag = tagsRegx.exec(xmlData);\n while (tag) {\n const tagType = checkForTagType(tag);\n\n if (tagType === TagType.CLOSING) {\n //add parsed data to parent node\n if (currentNode.parent && tag[14]) {\n currentNode.parent.val = util.getValue(currentNode.parent.val) + \"\" + processTagValue(tag[14], options);\n }\n\n currentNode = currentNode.parent;\n } else if (tagType === TagType.CDATA) {\n if (options.cdataTagName) {\n //add cdata node\n const childNode = new XmlNode(options.cdataTagName, currentNode, tag[3]);\n childNode.attrsMap = buildAttributesMap(tag[8], options);\n currentNode.addChild(childNode);\n //for backtracking\n currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar;\n //add rest value to parent node\n if (tag[14]) {\n currentNode.val += processTagValue(tag[14], options);\n }\n } else {\n currentNode.val = (currentNode.val || \"\") + (tag[3] || \"\") + processTagValue(tag[14], options);\n }\n } else if (tagType === TagType.SELF) {\n const childNode = new XmlNode(options.ignoreNameSpace ? tag[7] : tag[5], currentNode, \"\");\n if (tag[8] && tag[8].length > 1) {\n tag[8] = tag[8].substr(0, tag[8].length - 1);\n }\n childNode.attrsMap = buildAttributesMap(tag[8], options);\n currentNode.addChild(childNode);\n } else {//TagType.OPENING\n const childNode = new XmlNode(options.ignoreNameSpace ? tag[7] : tag[5], currentNode, processTagValue(tag[14], options));\n childNode.attrsMap = buildAttributesMap(tag[8], options);\n currentNode.addChild(childNode);\n currentNode = childNode;\n }\n\n tag = nextTag;\n nextTag = tagsRegx.exec(xmlData);\n }\n\n return xmlObj;\n};\n\nfunction processTagValue(val, options) {\n if (val) {\n if (options.trimValues) {\n val = val.trim();\n }\n val = options.tagValueProcessor(val);\n val = parseValue(val, options.parseNodeValue);\n }\n\n return val;\n}\n\nfunction checkForTagType(match) {\n if (match[4] === \"]]>\") {\n return TagType.CDATA;\n } else if (match[10] === \"/\") {\n return TagType.CLOSING;\n } else if (typeof match[8] !== \"undefined\" && match[8].substr(match[8].length - 1) === \"/\") {\n return TagType.SELF;\n } else {\n return TagType.OPENING;\n }\n}\n\nfunction resolveNameSpace(tagname, options) {\n if (options.ignoreNameSpace) {\n const tags = tagname.split(\":\");\n const prefix = tagname.charAt(0) === \"/\" ? \"/\" : \"\";\n if (tags[0] === \"xmlns\") {\n return \"\";\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\n\nfunction parseValue(val, shouldParse) {\n if (shouldParse && typeof val === \"string\") {\n if (val.trim() === \"\" || isNaN(val)) {\n val = val === \"true\" ? true : val === \"false\" ? false : val;\n } else {\n if (val.indexOf(\".\") !== -1) {\n val = parseFloat(val);\n } else {\n val = parseInt(val, 10);\n }\n }\n return val;\n }\n if (util.isExist(val)) {\n return val;\n }\n return \"\";\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nconst attrsRegx = new RegExp(\"([^\\\\s=]+)\\\\s*(=\\\\s*(['\\\"])(.*?)\\\\3)?\", \"g\");\n\nfunction buildAttributesMap(attrStr, options) {\n if (!options.ignoreAttributes && typeof attrStr === \"string\") {\n attrStr = attrStr.replace(/\\r?\\n/g, \" \");\n //attrStr = attrStr || attrStr.trim();\n\n const matches = util.getAllMatches(attrStr, attrsRegx);\n const attrs = {};\n for (let match of matches) {\n const attrName = resolveNameSpace(match[1], options);\n if (attrName.length) {\n if (match[4] !== undefined) {\n if (options.trimValues) {\n match[4] = match[4].trim();\n }\n if (options.decodeHTMLchar) {\n match[4] = options.attrValueProcessor(match[4]);\n }\n attrs[options.attributeNamePrefix + attrName] = parseValue(match[4], options.parseAttributeValue);\n } else if (options.allowBooleanAttributes) {\n attrs[options.attributeNamePrefix + attrName] = true;\n }\n\n }\n }\n if (!Object.keys(attrs).length) {\n return;\n }\n if (options.attrNodeName) {\n const attrCollection = {};\n attrCollection[options.attrNodeName] = attrs;\n return attrCollection;\n }\n return attrs;\n }\n}\n\nmodule.exports = {\n defaultOptions,\n getTraversalObj\n};\n","\"use strict\";\n\nconst {isEmptyObject, isExist, merge} = require(\"./util\");\nconst xmlToNodeobj = require(\"./x2j\");\n\n//TODO: do it later\nconst convertToJsonString = function(node, options) {\n options = Object.assign({}, xmlToNodeobj.defaultOptions, options);\n\n options.indentBy = options.indentBy || \"\";\n return _cToJsonStr(node, options, 0);\n};\n\nconst _cToJsonStr = function(node, options, level) {\n let jObj = \"{\";\n\n //traver through all the children\n for (let tagname of Object.keys(node.child)) {\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj += \"\\\"\" + tagname + \"\\\" : [ \";\n for (let tag of Object.keys(node.child[tagname])) {\n jObj += _cToJsonStr(node.child[tagname][tag], options) + \" , \";\n }\n jObj = jObj.substr(0, jObj.length - 1) + \" ] \"; //remove extra comma in last\n } else {\n jObj += \"\\\"\" + tagname + \"\\\" : \" + _cToJsonStr(node.child[tagname][0], options) + \" ,\";\n }\n }\n merge(jObj, node.attrsMap);\n //add attrsMap as new children\n if (isEmptyObject(jObj)) {\n return isExist(node.val) ? node.val : \"\";\n } else {\n if (isExist(node.val)) {\n if (!(typeof node.val === \"string\" && (node.val === \"\" || node.val === options.cdataPositionChar))) {\n jObj += \"\\\"\" + options.textNodeName + \"\\\" : \" + stringval(node.val);\n }\n }\n }\n //add value\n if (jObj[jObj.length - 1] === \",\") {\n jObj = jObj.substr(0, jObj.length - 2);\n }\n return jObj + \"}\";\n};\n\nfunction stringval(v) {\n if (v === true || v === false || !isNaN(v)) {\n return v;\n } else {\n return \"\\\"\" + v + \"\\\"\";\n }\n}\n\nfunction indentate(options, level) {\n return options.indentBy.repeat(level);\n}\n\nmodule.exports={convertToJsonString};\n","const {isEmptyObject, merge, isExist} = require(\"./util\");\n\nconst convertToJson = function(node, options) {\n const jObj = {};\n\n if ((!node.child || isEmptyObject(node.child)) && (!node.attrsMap || isEmptyObject(node.attrsMap))) {\n return isExist(node.val) ? node.val : \"\";\n } else {\n if (isExist(node.val)) {\n if (!(typeof node.val === \"string\" && (node.val === \"\" || node.val === options.cdataPositionChar))) {\n jObj[options.textNodeName] = node.val;\n }\n }\n }\n\n merge(jObj, node.attrsMap);\n\n for (let tagname of Object.keys(node.child)) {\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj[tagname] = [];\n for (let tag of Object.keys(node.child[tagname])) {\n jObj[tagname].push(convertToJson(node.child[tagname][tag], options));\n }\n } else {\n jObj[tagname] = convertToJson(node.child[tagname][0], options);\n }\n }\n\n //add value\n return jObj;\n};\n\nmodule.exports = { convertToJson};\n","\"use strict\";\nconst {isExist} = require(\"./util\");\n\nconst defaultOptions = {\n attributeNamePrefix: \"@_\",\n attrNodeName: false,\n textNodeName: \"#text\",\n ignoreAttributes: true,\n cdataTagName: false,\n cdataPositionChar: \"\\\\c\",\n format: false,\n indentBy: \" \",\n supressEmptyNode: false,\n tagValueProcessor: (a) => a,\n attrValueProcessor: (a) => a\n};\n\nclass Parser {\n constructor(options) {\n this.options = Object.assign({}, defaultOptions, options);\n if (this.options.ignoreAttributes) {\n this.isAttribute = (/*a*/) => false;\n } else {\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n if (this.options.cdataTagName) {\n this.isCDATA = isCDATA;\n } else {\n this.isCDATA = (/*a*/) => false;\n }\n this.replaceCDATAstr = replaceCDATAstr;\n this.replaceCDATAarr = replaceCDATAarr;\n\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = \">\\n\";\n this.newLine = \"\\n\";\n } else {\n this.indentate = () => \"\";\n this.tagEndChar = \">\";\n this.newLine = \"\";\n }\n\n if (this.options.supressEmptyNode) {\n this.buildTextNode = buildEmptyTextNode;\n this.buildObjNode = buildEmptyObjNode;\n } else {\n this.buildTextNode = buildTextValNode;\n this.buildObjNode = buildObjectNode;\n }\n\n this.buildTextValNode = buildTextValNode;\n this.buildObjectNode = buildObjectNode;\n\n }\n\n parse(jObj) {\n return this.j2x(jObj, 0).val;\n }\n\n j2x(jObj, level) {\n let attrStr = \"\";\n let val = \"\";\n for (let key of Object.keys(jObj)) {\n if (!isExist(jObj[key])) {\n // supress undefined node\n }\n else if (typeof jObj[key] !== \"object\") {//premitive type\n const attr = this.isAttribute(key);\n if (attr) {\n attrStr += \" \" + attr + \"=\\\"\" + this.options.attrValueProcessor(\"\" + jObj[key]) + \"\\\"\";\n } else if (this.isCDATA(key)) {\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAstr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAstr(\"\", jObj[key]);\n }\n } else {//tag value\n if (key === this.options.textNodeName) {\n if (jObj[this.options.cdataTagName]) {\n //value will added while processing cdata\n } else {\n val += this.options.tagValueProcessor(\"\" + jObj[key]);\n }\n } else {\n val += this.buildTextNode(jObj[key], key, \"\", level);\n }\n }\n } else if (Array.isArray(jObj[key])) {//repeated nodes\n if (this.isCDATA(key)) {\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAarr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAarr(\"\", jObj[key]);\n }\n } else {//nested nodes\n for (let item of jObj[key]) {\n if (!isExist(item)) {\n // supress undefined node\n }\n else if (typeof item === \"object\") {\n const result = this.j2x(item, level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n } else {\n val += this.buildTextNode(item, key, \"\", level);\n }\n }\n }\n } else {\n if (this.options.attrNodeName && key === this.options.attrNodeName) {\n for (let attrKey of Object.keys(jObj[key])) {\n attrStr += \" \" + attrKey + \"=\\\"\" + this.options.tagValueProcessor(\"\" + jObj[key][attrKey]) + \"\\\"\";\n }\n } else {\n const result = this.j2x(jObj[key], level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n }\n }\n }\n return {attrStr: attrStr, val: val};\n }\n}\n\nfunction replaceCDATAstr(str, cdata) {\n str = this.options.tagValueProcessor(\"\" + str);\n if (this.options.cdataPositionChar === \"\" || str === \"\") {\n return str + \"\";\n } else {\n return str.replace(this.options.cdataPositionChar, \"\");\n }\n}\n\nfunction replaceCDATAarr(str, cdata) {\n str = this.options.tagValueProcessor(\"\" + str);\n if (this.options.cdataPositionChar === \"\" || str === \"\") {\n return str + \"\";\n } else {\n for (const v of Object.keys(cdata)) {\n str = str.replace(this.options.cdataPositionChar, \"\");\n }\n return str;\n }\n}\n\nfunction buildObjectNode(val, key, attrStr, level) {\n return this.indentate(level)\n + \"<\" + key + attrStr\n + this.tagEndChar\n + val\n //+ this.newLine\n + this.indentate(level)\n + \"\" + this.options.tagValueProcessor(\"\" + val) + \" {\n if (!options) {\n options = {};\n }\n const props = [\"allowBooleanAttributes\"];\n for (let i of props) {\n if (options[props[i]] === undefined) {\n options[props[i]] = defaultOptions[props[i]];\n }\n }\n return options;\n};\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nconst validate = (xmlData, options) => {\n options = buildOptions(options);\n\n //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n //xmlData = xmlData.replace(/()/g,\"\");//Remove DOCTYPE\n\n const tags = [];\n let tagFound = false;\n for (let i = 0; i < xmlData.length; i++) {\n\n if (xmlData[i] === \"<\") {//starting of tag\n //read until you reach to '>' avoiding any '>' in attribute value\n i++;\n if (xmlData[i] === \"?\") {\n i = readPI(xmlData, ++i);\n if (i.err) {\n return i;\n }\n } else if (xmlData[i] === \"!\") {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i] === \"/\") {//closing tag\n closingTag = true;\n i++;\n }\n //read tagname\n let tagName = \"\";\n for (; i < xmlData.length &&\n xmlData[i] !== \">\" &&\n xmlData[i] !== \" \" &&\n xmlData[i] !== \"\\t\"; i++) {\n\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n //console.log(tagName);\n\n if (tagName[tagName.length - 1] === \"/\") {//self closing tag without attributes\n tagName = tagName.substring(0, tagName.length - 1);\n continue;\n }\n if (!validateTagName(tagName)) {\n return {err: {code: \"InvalidTag\", msg: \"Tag \" + tagName + \" is an invalid name.\"}};\n }\n\n const result = readAttributeStr(xmlData, i);\n if (result === false) {\n return {err: {code: \"InvalidAttr\", msg: \"Attributes for \" + tagName + \" have open quote\"}};\n }\n let attrStr = result.value;\n i = result.index;\n\n if (attrStr[attrStr.length - 1] === \"/\") {//self closing tag\n attrStr = attrStr.substring(0, attrStr.length - 1);\n const isValid = validateAttributeString(attrStr, options);\n if (isValid === true) {\n tagFound = true;\n continue;\n } else {\n return isValid;\n }\n } else if (closingTag) {\n if (attrStr.trim().length > 0) {\n return {err: {code: \"InvalidTag\", msg: \"closing tag \" + tagName + \" can't have attributes or invalid starting.\"}};\n } else {\n const otg = tags.pop();\n if (tagName !== otg) {\n return {err: {code: \"InvalidTag\", msg: \"closing tag \" + otg + \" is expected inplace of \" + tagName + \".\"}};\n }\n }\n } else {\n const isValid = validateAttributeString(attrStr, options);\n if (isValid !== true) {\n return isValid;\n }\n tags.push(tagName);\n tagFound = true;\n }\n\n //skip tag text value\n //It may include comments and CDATA value\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {\n if (xmlData[i + 1] === \"!\") {//comment or CADATA\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n break;\n }\n }\n }//end of reading tag text value\n if (xmlData[i] === \"<\") {\n i--;\n }\n }\n } else {\n if (xmlData[i] === \" \" || xmlData[i] === \"\\t\" || xmlData[i] === \"\\n\" || xmlData[i] === \"\\r\") {\n continue;\n }\n return {err: {code: \"InvalidChar\", msg: \"char \" + xmlData[i] + \" is not expected .\"}};\n }\n }\n\n if (!tagFound) {\n return {err: {code: \"InvalidXml\", msg: \"Start tag expected.\"}};\n } else if (tags.length > 0) {\n return {err: {code: \"InvalidXml\", msg: \"Invalid \" + JSON.stringify(tags, null, 4).replace(/\\r?\\n/g, \"\") + \" found.\"}};\n }\n\n return true;\n};\n\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n const start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === \"?\" || xmlData[i] === \" \") { //tagName\n const tagName = xmlData.substr(start, i - start);\n if (i > 5 && tagName === \"xml\") {\n return {err: {code: \"InvalidXml\", msg: \"XML declaration allowed only at the start of the document.\"}};\n } else if (xmlData[i] === \"?\" && xmlData[i + 1] === \">\") {\n //check if valid attribute string\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\n\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === \"-\" && xmlData[i + 2] === \"-\") {//comment\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === \"-\" && xmlData[i + 1] === \"-\" && xmlData[i + 2] === \">\") {\n i += 2;\n break;\n }\n }\n } else if (xmlData.length > i + 8 &&\n xmlData[i + 1] === \"D\" &&\n xmlData[i + 2] === \"O\" &&\n xmlData[i + 3] === \"C\" &&\n xmlData[i + 4] === \"T\" &&\n xmlData[i + 5] === \"Y\" &&\n xmlData[i + 6] === \"P\" &&\n xmlData[i + 7] === \"E\") {\n let angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {angleBracketsCount++;}\n else if (xmlData[i] === \">\") {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (xmlData.length > i + 9 &&\n xmlData[i + 1] === \"[\" &&\n xmlData[i + 2] === \"C\" &&\n xmlData[i + 3] === \"D\" &&\n xmlData[i + 4] === \"A\" &&\n xmlData[i + 5] === \"T\" &&\n xmlData[i + 6] === \"A\" &&\n xmlData[i + 7] === \"[\") {\n\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === \"]\" && xmlData[i + 1] === \"]\" && xmlData[i + 2] === \">\") {\n i += 2;\n break;\n }\n }\n }\n\n return i;\n}\n\nconst doubleQuote = \"\\\"\";\nconst singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n let attrStr = \"\";\n let startChar = \"\";\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === \"\") {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) {\n //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n continue;\n } else {\n startChar = \"\";\n }\n } else if (xmlData[i] === \">\") {\n if (startChar === \"\") {\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== \"\") {\n return false;\n }\n\n return {value: attrStr, index: i};\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nconst validAttrStrRegxp = new RegExp(\"(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\\\"])(([\\\\s\\\\S])*?)\\\\5)?\", \"g\");\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n //console.log(\"start:\"+attrStr+\":end\");\n\n //if(attrStr.trim().length === 0) return true; //empty string\n\n const matches = util.getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = [];\n\n for (let match of matches) {\n //console.log(matches[i]);\n\n if (match[1].length === 0) {//nospace before attribute name: a=\"sd\"b=\"saf\"\n return {err: {code: \"InvalidAttr\", msg: \"attribute \" + match[2] + \" has no space in starting.\"}};\n } else if (match[3] === undefined && !options.allowBooleanAttributes) {//independent attribute: ab\n return {err: {code: \"InvalidAttr\", msg: \"boolean attribute \" + match[2] + \" is not allowed.\"}};\n }\n /* else if(matches[i][6] === undefined){//attribute without value: ab=\n return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n } */\n const attrName = match[2];\n if (!validateAttrName(attrName)) {\n return {err: {code: \"InvalidAttr\", msg: \"attribute \" + attrName + \" is an invalid name.\"}};\n }\n if (!attrNames.hasOwnProperty(attrName)) {//check for duplicate attribute.\n attrNames[attrName] = 1;\n } else {\n return {err: {code: \"InvalidAttr\", msg: \"attribute \" + attrName + \" is repeated.\"}};\n }\n }\n\n return true;\n\n}\n\nconst validAttrRegxp = /^[_a-zA-Z][\\w\\-.:]*$/;\n\nfunction validateAttrName(attrName) {\n return util.doesMatch(attrName, validAttrRegxp);\n}\n\n//const startsWithXML = new RegExp(\"^[Xx][Mm][Ll]\");\nconst startsWith = /^([a-zA-Z]|_)[\\w.\\-_:]*/;\n\nfunction validateTagName(tagname) {\n /*if(util.doesMatch(tagname,startsWithXML)) return false;\n else*/\n return !util.doesNotMatch(tagname, startsWith);\n}\n\nmodule.exports = {validate};\n","const char = (a) => String.fromCharCode(a);\n\nconst chars = {\n nilChar: char(254),\n missingChar: char(200),\n nilPremitive: char(176),\n missingPremitive: char(201),\n emptyChar: char(177),\n emptyValue: char(178),\n boundryChar: char(186),\n arrayEnd: char(197),\n objStart: char(198),\n arrStart: char(199)\n};\n\nconst charsArr = [\n chars.nilChar,\n chars.nilPremitive,\n chars.missingChar,\n chars.missingPremitive,\n chars.boundryChar,\n chars.emptyChar,\n chars.arrayEnd,\n chars.objStart,\n chars.arrStart\n];\n\nconst _e = (node, e_schema, options) => {\n if (typeof e_schema === \"string\") {//premitive\n if (node && node[0] && node[0].val !== undefined) {\n return getValue(node[0].val, e_schema);\n } else {\n return getValue(node, e_schema);\n }\n } else {\n const hasValidData = hasData(node);\n if (hasValidData === true) {\n let str = \"\";\n if (Array.isArray(e_schema)) {\n //attributes can't be repeated. hence check in children tags only\n str += chars.arrStart;\n const itemSchema = e_schema[0];\n //var itemSchemaType = itemSchema;\n if (typeof itemSchema === \"string\") {\n for (let item of node) {\n const r = getValue(item.val, itemSchema);\n str = processValue(str, r);\n }\n } else {\n for (let item of node) {\n const r = _e(item, itemSchema, options);\n str = processValue(str, r);\n }\n }\n str += chars.arrayEnd;//indicates that next item is not array item\n } else {//object\n str += chars.objStart;\n if (Array.isArray(node)) {\n node = node[0];\n }\n for (let key of Object.keys(e_schema)) {\n //a property defined in schema can be present either in attrsMap or children tags\n //options.textNodeName will not present in both maps, take it's value from val\n //options.attrNodeName will be present in attrsMap\n let r;\n if (!options.ignoreAttributes && node.attrsMap && node.attrsMap[key]) {\n r = _e(node.attrsMap[key], e_schema[key], options);\n } else if (key === options.textNodeName) {\n r = _e(node.val, e_schema[key], options);\n } else {\n r = _e(node.child[key], e_schema[key], options);\n }\n str = processValue(str, r);\n }\n }\n return str;\n } else {\n return hasValidData;\n }\n }\n};\n\nconst getValue = (a/*, type*/) => {\n switch (a) {\n case undefined:\n return chars.missingPremitive;\n case null:\n return chars.nilPremitive;\n case \"\":\n return chars.emptyValue;\n default:\n return a;\n }\n};\n\nconst processValue = (str, r) => {\n if (!isAppChar(r[0]) && !isAppChar(str[str.length - 1])) {\n str += chars.boundryChar;\n }\n return str + r;\n};\n\nconst isAppChar = (ch) => {\n return charsArr.indexOf(ch) !== -1;\n};\n\nconst hasData = (jObj) => {\n if (jObj === undefined) {\n return chars.missingChar;\n } else if (jObj === null) {\n return chars.nilChar;\n } else if (jObj.child && Object.keys(jObj.child).length === 0 && (!jObj.attrsMap || Object.keys(jObj.attrsMap).length === 0)) {\n return chars.emptyChar;\n } else {\n return true;\n }\n};\n\nconst {defaultOptions} = require(\"./x2j\");\nconst convertToNimn = (node, e_schema, options) => {\n options = Object.assign({}, defaultOptions, options);\n return _e(node, e_schema, options);\n};\n\nmodule.exports = {convertToNimn};\n","class XmlNode {\n constructor(tagname, parent, val) {\n this.tagname = tagname;\n this.parent = parent;\n\n this.child = {}; //child tags\n this.attrsMap = {}; //attributes map\n\n this.val = val;//text only\n }\n\n addChild(child) {\n if (this.child[child.tagname]) {//already presents\n this.child[child.tagname].push(child);\n } else {\n this.child[child.tagname] = [child];\n }\n }\n}\n\nmodule.exports = {XmlNode};\n","const {getTraversalObj} = require(\"./x2j\");\nconst {convertToNimn} = require(\"./nimn-data\");\nconst {validate} = require(\"./validator\");\nconst j2xParser = require(\"./j2x\");\nconst {defaultOptions} = require(\"./x2j\");\nconst {convertToJson} = require(\"./n2j\");\nconst {convertToJsonString} = require(\"./n2j-str\");\n\nconst parseToNimn = (xmlData, schema, options) => convertToNimn(getTraversalObj(xmlData, options), schema, options);\n\nconst parse = (xmlData, options) => {\n options = Object.assign({}, defaultOptions, options);\n return convertToJson(getTraversalObj(xmlData, options), options);\n};\n\nmodule.exports = {\n parse,\n parseToNimn,\n convertToJson,\n convertToJsonString,\n convertToNimn,\n getTraversalObj,\n validate,\n j2xParser\n};\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://parser/webpack/bootstrap","webpack://parser/./src/util.js","webpack://parser/./src/x2j.js","webpack://parser/./src/n2j-str.js","webpack://parser/./src/n2j.js","webpack://parser/./src/j2x.js","webpack://parser/./src/validator.js","webpack://parser/./src/nimn-data.js","webpack://parser/./src/xml-node.js","webpack://parser/./src/parser.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","isExist","v","doesMatch","string","regex","match","exec","getValue","merge","target","source","_arr","keys","_i","length","key","isEmptyObject","obj","doesNotMatch","getAllMatches","matches","push","_toConsumableArray","util","XmlNode","TagType","OPENING","CLOSING","SELF","CDATA","defaultOptions","attributeNamePrefix","attrNodeName","textNodeName","ignoreAttributes","ignoreNameSpace","allowBooleanAttributes","parseNodeValue","parseAttributeValue","arrayMode","trimValues","cdataTagName","cdataPositionChar","tagValueProcessor","a","attrValueProcessor","processTagValue","val","options","trim","parseValue","resolveNameSpace","tagname","tags","split","prefix","charAt","shouldParse","isNaN","indexOf","parseFloat","parseInt","attrsRegx","RegExp","buildAttributesMap","attrStr","replace","attrs","_iteratorNormalCompletion","_didIteratorError","_iteratorError","undefined","_step","_iterator","Symbol","iterator","next","done","attrName","err","return","attrCollection","getTraversalObj","xmlData","assign","xmlObj","currentNode","tagsRegx","tag","nextTag","tagType","substr","parent","childNode","attrsMap","addChild","xmlToNodeobj","_cToJsonStr","node","level","jObj","child","_arr2","_i2","convertToJsonString","indentBy","convertToJson","format","supressEmptyNode","Parser","_classCallCheck","this","isAttribute","attrPrefixLen","isCDATA","replaceCDATAstr","replaceCDATAarr","indentate","tagEndChar","newLine","buildTextNode","buildEmptyTextNode","buildObjNode","buildEmptyObjNode","buildTextValNode","buildObjectNode","j2x","_typeof","attr","Array","isArray","item","result","attrKey","str","cdata","join","_arr3","_i3","repeat","startsWith","readPI","start","tagName","code","msg","readCommentAndCDATA","angleBracketsCount","doubleQuote","singleQuote","readAttributeStr","startChar","index","validAttrStrRegxp","validateAttributeString","attrNames","validateAttrName","validAttrRegxp","validate","props","buildOptions","tagFound","closingTag","substring","isValid","otg","pop","JSON","stringify","char","String","fromCharCode","chars","nilChar","missingChar","nilPremitive","missingPremitive","emptyChar","emptyValue","boundryChar","arrayEnd","objStart","arrStart","charsArr","processValue","isAppChar","ch","hasData","convertToNimn","e_schema","_e","hasValidData","itemSchema","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","j2xParser","parse","parseToNimn","schema"],"mappings":"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","file":"./parser.browser.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 8);\n","const getAllMatches = (string, regex) => {\n const matches = [];\n let match;\n while (match = regex.exec(string)) {\n matches.push([...match]);\n }\n return matches;\n};\n\n/**\n * Copy all the properties of a into b.\n * @param {*} target\n * @param {*} source\n */\nconst merge = (target, source) => {\n if (source) {\n for (let key of Object.keys(source)) {\n target[key] = source[key];\n }\n }\n return target;\n};\n\nconst isEmptyObject = (obj) => Object.keys(obj).length === 0;\nconst isExist = (v) => typeof v !== \"undefined\";\n\nconst doesMatch = (string, regex) => {\n const match = regex.exec(string);\n return !(match === null || !isExist(match));\n};\n\nconst doesNotMatch = (string, regex) => !doesMatch(string, regex);\n\nconst getValue = (v) => isExist(v) ? v : \"\";\n\n// const fakeCall = function(a) {return a;};\n// const fakeCallNoReturn = function() {};\nmodule.exports = {\n getValue,\n merge,\n isEmptyObject,\n isExist,\n doesMatch,\n doesNotMatch,\n getAllMatches\n};\n","const util = require(\"./util\");\nconst {XmlNode} = require(\"./xml-node\");\nconst TagType = {\"OPENING\": 1, \"CLOSING\": 2, \"SELF\": 3, \"CDATA\": 4};\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\n//treat cdata as a tag\n\nconst defaultOptions = {\n attributeNamePrefix: \"@_\",\n attrNodeName: false,\n textNodeName: \"#text\",\n ignoreAttributes: true,\n ignoreNameSpace: false,\n allowBooleanAttributes: false, //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseNodeValue: true,\n parseAttributeValue: false,\n arrayMode: false,\n trimValues: true, //Trim string values of tag and attributes\n cdataTagName: false,\n cdataPositionChar: \"\\\\c\",\n tagValueProcessor: (a) => a,\n attrValueProcessor: (a) => a\n //decodeStrict: false,\n};\n\nconst getTraversalObj = (xmlData, options) => {\n //options = buildOptions(options);\n options = Object.assign({}, defaultOptions, options);\n //xmlData = xmlData.replace(/\\r?\\n/g, \" \");//make it single line\n xmlData = xmlData.replace(//g, \"\");//Remove comments\n\n const xmlObj = new XmlNode(\"!xml\");\n let currentNode = xmlObj;\n\n const tagsRegx = /<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|(([\\w:\\-._]*:)?([\\w:\\-._]+))([^>]*)>|((\\/)(([\\w:\\-._]*:)?([\\w:\\-._]+))>))([^<]*)/g;\n let tag = tagsRegx.exec(xmlData);\n let nextTag = tagsRegx.exec(xmlData);\n while (tag) {\n const tagType = checkForTagType(tag);\n\n if (tagType === TagType.CLOSING) {\n //add parsed data to parent node\n if (currentNode.parent && tag[14]) {\n currentNode.parent.val = util.getValue(currentNode.parent.val) + \"\" + processTagValue(tag[14], options);\n }\n\n currentNode = currentNode.parent;\n } else if (tagType === TagType.CDATA) {\n if (options.cdataTagName) {\n //add cdata node\n const childNode = new XmlNode(options.cdataTagName, currentNode, tag[3]);\n childNode.attrsMap = buildAttributesMap(tag[8], options);\n currentNode.addChild(childNode);\n //for backtracking\n currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar;\n //add rest value to parent node\n if (tag[14]) {\n currentNode.val += processTagValue(tag[14], options);\n }\n } else {\n currentNode.val = (currentNode.val || \"\") + (tag[3] || \"\") + processTagValue(tag[14], options);\n }\n } else if (tagType === TagType.SELF) {\n const childNode = new XmlNode(options.ignoreNameSpace ? tag[7] : tag[5], currentNode, \"\");\n if (tag[8] && tag[8].length > 1) {\n tag[8] = tag[8].substr(0, tag[8].length - 1);\n }\n childNode.attrsMap = buildAttributesMap(tag[8], options);\n currentNode.addChild(childNode);\n } else {//TagType.OPENING\n const childNode = new XmlNode(options.ignoreNameSpace ? tag[7] : tag[5], currentNode, processTagValue(tag[14], options));\n childNode.attrsMap = buildAttributesMap(tag[8], options);\n currentNode.addChild(childNode);\n currentNode = childNode;\n }\n\n tag = nextTag;\n nextTag = tagsRegx.exec(xmlData);\n }\n\n return xmlObj;\n};\n\nfunction processTagValue(val, options) {\n if (val) {\n if (options.trimValues) {\n val = val.trim();\n }\n val = options.tagValueProcessor(val);\n val = parseValue(val, options.parseNodeValue);\n }\n\n return val;\n}\n\nfunction checkForTagType(match) {\n if (match[4] === \"]]>\") {\n return TagType.CDATA;\n } else if (match[10] === \"/\") {\n return TagType.CLOSING;\n } else if (typeof match[8] !== \"undefined\" && match[8].substr(match[8].length - 1) === \"/\") {\n return TagType.SELF;\n } else {\n return TagType.OPENING;\n }\n}\n\nfunction resolveNameSpace(tagname, options) {\n if (options.ignoreNameSpace) {\n const tags = tagname.split(\":\");\n const prefix = tagname.charAt(0) === \"/\" ? \"/\" : \"\";\n if (tags[0] === \"xmlns\") {\n return \"\";\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\n\nfunction parseValue(val, shouldParse) {\n if (shouldParse && typeof val === \"string\") {\n if (val.trim() === \"\" || isNaN(val)) {\n val = val === \"true\" ? true : val === \"false\" ? false : val;\n } else {\n if (val.indexOf(\".\") !== -1) {\n val = parseFloat(val);\n } else {\n val = parseInt(val, 10);\n }\n }\n return val;\n }\n if (util.isExist(val)) {\n return val;\n }\n return \"\";\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nconst attrsRegx = new RegExp(\"([^\\\\s=]+)\\\\s*(=\\\\s*(['\\\"])(.*?)\\\\3)?\", \"g\");\n\nfunction buildAttributesMap(attrStr, options) {\n if (!options.ignoreAttributes && typeof attrStr === \"string\") {\n attrStr = attrStr.replace(/\\r?\\n/g, \" \");\n //attrStr = attrStr || attrStr.trim();\n\n const matches = util.getAllMatches(attrStr, attrsRegx);\n const attrs = {};\n for (let match of matches) {\n const attrName = resolveNameSpace(match[1], options);\n if (attrName.length) {\n if (match[4] !== undefined) {\n if (options.trimValues) {\n match[4] = match[4].trim();\n }\n matches[i][4] = options.attrValueProcessor(matches[i][4]);\n attrs[options.attributeNamePrefix + attrName] = parseValue(matches[i][4], options.parseAttributeValue);\n } else if (options.allowBooleanAttributes) {\n attrs[options.attributeNamePrefix + attrName] = true;\n }\n\n }\n }\n if (!Object.keys(attrs).length) {\n return;\n }\n if (options.attrNodeName) {\n const attrCollection = {};\n attrCollection[options.attrNodeName] = attrs;\n return attrCollection;\n }\n return attrs;\n }\n}\n\nmodule.exports = {\n defaultOptions,\n getTraversalObj\n};\n","\"use strict\";\n\nconst {isEmptyObject, isExist, merge} = require(\"./util\");\nconst xmlToNodeobj = require(\"./x2j\");\n\n//TODO: do it later\nconst convertToJsonString = function(node, options) {\n options = Object.assign({}, xmlToNodeobj.defaultOptions, options);\n\n options.indentBy = options.indentBy || \"\";\n return _cToJsonStr(node, options, 0);\n};\n\nconst _cToJsonStr = function(node, options, level) {\n let jObj = \"{\";\n\n //traver through all the children\n for (let tagname of Object.keys(node.child)) {\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj += \"\\\"\" + tagname + \"\\\" : [ \";\n for (let tag of Object.keys(node.child[tagname])) {\n jObj += _cToJsonStr(node.child[tagname][tag], options) + \" , \";\n }\n jObj = jObj.substr(0, jObj.length - 1) + \" ] \"; //remove extra comma in last\n } else {\n jObj += \"\\\"\" + tagname + \"\\\" : \" + _cToJsonStr(node.child[tagname][0], options) + \" ,\";\n }\n }\n merge(jObj, node.attrsMap);\n //add attrsMap as new children\n if (isEmptyObject(jObj)) {\n return isExist(node.val) ? node.val : \"\";\n } else {\n if (isExist(node.val)) {\n if (!(typeof node.val === \"string\" && (node.val === \"\" || node.val === options.cdataPositionChar))) {\n jObj += \"\\\"\" + options.textNodeName + \"\\\" : \" + stringval(node.val);\n }\n }\n }\n //add value\n if (jObj[jObj.length - 1] === \",\") {\n jObj = jObj.substr(0, jObj.length - 2);\n }\n return jObj + \"}\";\n};\n\nfunction stringval(v) {\n if (v === true || v === false || !isNaN(v)) {\n return v;\n } else {\n return \"\\\"\" + v + \"\\\"\";\n }\n}\n\nfunction indentate(options, level) {\n return options.indentBy.repeat(level);\n}\n\nmodule.exports = {convertToJsonString};\n","const {isEmptyObject, merge, isExist} = require(\"./util\");\n\nconst convertToJson = function(node, options) {\n const jObj = {};\n\n if ((!node.child || isEmptyObject(node.child)) && (!node.attrsMap || isEmptyObject(node.attrsMap))) {\n return isExist(node.val) ? node.val : \"\";\n } else {\n if (isExist(node.val)) {\n if (!(typeof node.val === \"string\" && (node.val === \"\" || node.val === options.cdataPositionChar))) {\n jObj[options.textNodeName] = node.val;\n }\n }\n }\n\n merge(jObj, node.attrsMap);\n\n for (let tagname of Object.keys(node.child)) {\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj[tagname] = [];\n for (let tag of Object.keys(node.child[tagname])) {\n jObj[tagname].push(convertToJson(node.child[tagname][tag], options));\n }\n } else {\n jObj[tagname] = convertToJson(node.child[tagname][0], options);\n }\n }\n\n //add value\n return jObj;\n};\n\nmodule.exports = {convertToJson};\n","const {isExist} = require(\"./util\");\n\nconst defaultOptions = {\n attributeNamePrefix: \"@_\",\n attrNodeName: false,\n textNodeName: \"#text\",\n ignoreAttributes: true,\n cdataTagName: false,\n cdataPositionChar: \"\\\\c\",\n format: false,\n indentBy: \" \",\n supressEmptyNode: false,\n tagValueProcessor: (a) => a,\n attrValueProcessor: (a) => a\n};\n\nclass Parser {\n constructor(options) {\n this.options = Object.assign({}, defaultOptions, options);\n if (this.options.ignoreAttributes || this.options.attrNodeName) {\n this.isAttribute = function(/*a*/) { return false;};\n } else {\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n if (this.options.cdataTagName) {\n this.isCDATA = isCDATA;\n } else {\n this.isCDATA = function(/*a*/) { return false;};\n }\n this.replaceCDATAstr = replaceCDATAstr;\n this.replaceCDATAarr = replaceCDATAarr;\n\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = \">\\n\";\n this.newLine = \"\\n\";\n } else {\n this.indentate = () => \"\";\n this.tagEndChar = \">\";\n this.newLine = \"\";\n }\n\n if (this.options.supressEmptyNode) {\n this.buildTextNode = buildEmptyTextNode;\n this.buildObjNode = buildEmptyObjNode;\n } else {\n this.buildTextNode = buildTextValNode;\n this.buildObjNode = buildObjectNode;\n }\n\n this.buildTextValNode = buildTextValNode;\n this.buildObjectNode = buildObjectNode;\n }\n\n parse(jObj) {\n return this.j2x(jObj, 0).val;\n }\n\n j2x(jObj, level) {\n let attrStr = \"\";\n let val = \"\";\n for (let key of Object.keys(jObj)) {\n if (!isExist(jObj[key])) {\n // supress undefined node\n }\n else if (typeof jObj[key] !== \"object\") {//premitive type\n const attr = this.isAttribute(key);\n if (attr) {\n attrStr += \" \" + attr + \"=\\\"\" + this.options.attrValueProcessor(\"\" + jObj[key]) + \"\\\"\";\n } else if (this.isCDATA(key)) {\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAstr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAstr(\"\", jObj[key]);\n }\n } else {//tag value\n if (key === this.options.textNodeName) {\n if (jObj[this.options.cdataTagName]) {\n //value will added while processing cdata\n } else {\n val += this.options.tagValueProcessor(\"\" + jObj[key]);\n }\n } else {\n val += this.buildTextNode(jObj[key], key, \"\", level);\n }\n }\n } else if (Array.isArray(jObj[key])) {//repeated nodes\n if (this.isCDATA(key)) {\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAarr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAarr(\"\", jObj[key]);\n }\n } else {//nested nodes\n for (let item of jObj[key]) {\n if (!isExist(item)) {\n // supress undefined node\n }\n else if (typeof item === \"object\") {\n const result = this.j2x(item, level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n } else {\n val += this.buildTextNode(item, key, \"\", level);\n }\n }\n }\n } else {\n if (this.options.attrNodeName && key === this.options.attrNodeName) {\n for (let attrKey of Object.keys(jObj[key])) {\n attrStr += \" \" + attrKey + \"=\\\"\" + this.options.tagValueProcessor(\"\" + jObj[key][attrKey]) + \"\\\"\";\n }\n } else {\n const result = this.j2x(jObj[key], level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n }\n }\n }\n return {attrStr: attrStr, val: val};\n }\n}\n\nfunction replaceCDATAstr(str, cdata) {\n str = this.options.tagValueProcessor(\"\" + str);\n if (this.options.cdataPositionChar === \"\" || str === \"\") {\n return str + \"\";\n } else {\n return str.replace(this.options.cdataPositionChar, \"\");\n }\n}\n\nfunction replaceCDATAarr(str, cdata) {\n str = this.options.tagValueProcessor(\"\" + str);\n if (this.options.cdataPositionChar === \"\" || str === \"\") {\n return str + \"\";\n } else {\n for (const v of Object.keys(cdata)) {\n str = str.replace(this.options.cdataPositionChar, \"\");\n }\n return str;\n }\n}\n\nfunction buildObjectNode(val, key, attrStr, level) {\n return this.indentate(level)\n + \"<\" + key + attrStr\n + this.tagEndChar\n + val\n //+ this.newLine\n + this.indentate(level)\n + \"\" + this.options.tagValueProcessor(\"\" + val) + \" {\n if (!options) {\n options = {};\n }\n const props = [\"allowBooleanAttributes\"];\n for (let i of props) {\n if (options[props[i]] === undefined) {\n options[props[i]] = defaultOptions[props[i]];\n }\n }\n return options;\n};\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nconst validate = (xmlData, options) => {\n options = buildOptions(options);\n\n //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n //xmlData = xmlData.replace(/()/g,\"\");//Remove DOCTYPE\n\n const tags = [];\n let tagFound = false;\n for (let i = 0; i < xmlData.length; i++) {\n\n if (xmlData[i] === \"<\") {//starting of tag\n //read until you reach to '>' avoiding any '>' in attribute value\n i++;\n if (xmlData[i] === \"?\") {\n i = readPI(xmlData, ++i);\n if (i.err) {\n return i;\n }\n } else if (xmlData[i] === \"!\") {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i] === \"/\") {//closing tag\n closingTag = true;\n i++;\n }\n //read tagname\n let tagName = \"\";\n for (; i < xmlData.length &&\n xmlData[i] !== \">\" &&\n xmlData[i] !== \" \" &&\n xmlData[i] !== \"\\t\"; i++) {\n\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n //console.log(tagName);\n\n if (tagName[tagName.length - 1] === \"/\") {//self closing tag without attributes\n tagName = tagName.substring(0, tagName.length - 1);\n continue;\n }\n if (!validateTagName(tagName)) {\n return {err: {code: \"InvalidTag\", msg: \"Tag \" + tagName + \" is an invalid name.\"}};\n }\n\n const result = readAttributeStr(xmlData, i);\n if (result === false) {\n return {err: {code: \"InvalidAttr\", msg: \"Attributes for \" + tagName + \" have open quote\"}};\n }\n let attrStr = result.value;\n i = result.index;\n\n if (attrStr[attrStr.length - 1] === \"/\") {//self closing tag\n attrStr = attrStr.substring(0, attrStr.length - 1);\n const isValid = validateAttributeString(attrStr, options);\n if (isValid === true) {\n tagFound = true;\n continue;\n } else {\n return isValid;\n }\n } else if (closingTag) {\n if (attrStr.trim().length > 0) {\n return {err: {code: \"InvalidTag\", msg: \"closing tag \" + tagName + \" can't have attributes or invalid starting.\"}};\n } else {\n const otg = tags.pop();\n if (tagName !== otg) {\n return {err: {code: \"InvalidTag\", msg: \"closing tag \" + otg + \" is expected inplace of \" + tagName + \".\"}};\n }\n }\n } else {\n const isValid = validateAttributeString(attrStr, options);\n if (isValid !== true) {\n return isValid;\n }\n tags.push(tagName);\n tagFound = true;\n }\n\n //skip tag text value\n //It may include comments and CDATA value\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {\n if (xmlData[i + 1] === \"!\") {//comment or CADATA\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n break;\n }\n }\n }//end of reading tag text value\n if (xmlData[i] === \"<\") {\n i--;\n }\n }\n } else {\n if (xmlData[i] === \" \" || xmlData[i] === \"\\t\" || xmlData[i] === \"\\n\" || xmlData[i] === \"\\r\") {\n continue;\n }\n return {err: {code: \"InvalidChar\", msg: \"char \" + xmlData[i] + \" is not expected .\"}};\n }\n }\n\n if (!tagFound) {\n return {err: {code: \"InvalidXml\", msg: \"Start tag expected.\"}};\n } else if (tags.length > 0) {\n return {err: {code: \"InvalidXml\", msg: \"Invalid \" + JSON.stringify(tags, null, 4).replace(/\\r?\\n/g, \"\") + \" found.\"}};\n }\n\n return true;\n};\n\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n const start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === \"?\" || xmlData[i] === \" \") { //tagName\n const tagName = xmlData.substr(start, i - start);\n if (i > 5 && tagName === \"xml\") {\n return {err: {code: \"InvalidXml\", msg: \"XML declaration allowed only at the start of the document.\"}};\n } else if (xmlData[i] === \"?\" && xmlData[i + 1] === \">\") {\n //check if valid attribute string\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\n\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === \"-\" && xmlData[i + 2] === \"-\") {//comment\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === \"-\" && xmlData[i + 1] === \"-\" && xmlData[i + 2] === \">\") {\n i += 2;\n break;\n }\n }\n } else if (xmlData.length > i + 8 &&\n xmlData[i + 1] === \"D\" &&\n xmlData[i + 2] === \"O\" &&\n xmlData[i + 3] === \"C\" &&\n xmlData[i + 4] === \"T\" &&\n xmlData[i + 5] === \"Y\" &&\n xmlData[i + 6] === \"P\" &&\n xmlData[i + 7] === \"E\") {\n let angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {angleBracketsCount++;}\n else if (xmlData[i] === \">\") {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (xmlData.length > i + 9 &&\n xmlData[i + 1] === \"[\" &&\n xmlData[i + 2] === \"C\" &&\n xmlData[i + 3] === \"D\" &&\n xmlData[i + 4] === \"A\" &&\n xmlData[i + 5] === \"T\" &&\n xmlData[i + 6] === \"A\" &&\n xmlData[i + 7] === \"[\") {\n\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === \"]\" && xmlData[i + 1] === \"]\" && xmlData[i + 2] === \">\") {\n i += 2;\n break;\n }\n }\n }\n\n return i;\n}\n\nconst doubleQuote = \"\\\"\";\nconst singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n let attrStr = \"\";\n let startChar = \"\";\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === \"\") {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) {\n //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n continue;\n } else {\n startChar = \"\";\n }\n } else if (xmlData[i] === \">\") {\n if (startChar === \"\") {\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== \"\") {\n return false;\n }\n\n return {value: attrStr, index: i};\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nconst validAttrStrRegxp = new RegExp(\"(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\\\"])(([\\\\s\\\\S])*?)\\\\5)?\", \"g\");\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n //console.log(\"start:\"+attrStr+\":end\");\n\n //if(attrStr.trim().length === 0) return true; //empty string\n\n const matches = util.getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = [];\n\n for (let match of matches) {\n //console.log(matches[i]);\n\n if (match[1].length === 0) {//nospace before attribute name: a=\"sd\"b=\"saf\"\n return {err: {code: \"InvalidAttr\", msg: \"attribute \" + match[2] + \" has no space in starting.\"}};\n } else if (match[3] === undefined && !options.allowBooleanAttributes) {//independent attribute: ab\n return {err: {code: \"InvalidAttr\", msg: \"boolean attribute \" + match[2] + \" is not allowed.\"}};\n }\n /* else if(matches[i][6] === undefined){//attribute without value: ab=\n return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n } */\n const attrName = match[2];\n if (!validateAttrName(attrName)) {\n return {err: {code: \"InvalidAttr\", msg: \"attribute \" + attrName + \" is an invalid name.\"}};\n }\n if (!attrNames.hasOwnProperty(attrName)) {//check for duplicate attribute.\n attrNames[attrName] = 1;\n } else {\n return {err: {code: \"InvalidAttr\", msg: \"attribute \" + attrName + \" is repeated.\"}};\n }\n }\n\n return true;\n\n}\n\nconst validAttrRegxp = /^[_a-zA-Z][\\w\\-.:]*$/;\n\nfunction validateAttrName(attrName) {\n return util.doesMatch(attrName, validAttrRegxp);\n}\n\n//const startsWithXML = new RegExp(\"^[Xx][Mm][Ll]\");\nconst startsWith = /^([a-zA-Z]|_)[\\w.\\-_:]*/;\n\nfunction validateTagName(tagname) {\n /*if(util.doesMatch(tagname,startsWithXML)) return false;\n else*/\n return !util.doesNotMatch(tagname, startsWith);\n}\n\nmodule.exports = {validate};\n","const char = (a) => String.fromCharCode(a);\n\nconst chars = {\n nilChar: char(254),\n missingChar: char(200),\n nilPremitive: char(176),\n missingPremitive: char(201),\n emptyChar: char(177),\n emptyValue: char(178),\n boundryChar: char(186),\n arrayEnd: char(197),\n objStart: char(198),\n arrStart: char(199)\n};\n\nconst charsArr = [\n chars.nilChar,\n chars.nilPremitive,\n chars.missingChar,\n chars.missingPremitive,\n chars.boundryChar,\n chars.emptyChar,\n chars.arrayEnd,\n chars.objStart,\n chars.arrStart\n];\n\nconst _e = (node, e_schema, options) => {\n if (typeof e_schema === \"string\") {//premitive\n if (node && node[0] && node[0].val !== undefined) {\n return getValue(node[0].val, e_schema);\n } else {\n return getValue(node, e_schema);\n }\n } else {\n const hasValidData = hasData(node);\n if (hasValidData === true) {\n let str = \"\";\n if (Array.isArray(e_schema)) {\n //attributes can't be repeated. hence check in children tags only\n str += chars.arrStart;\n const itemSchema = e_schema[0];\n //var itemSchemaType = itemSchema;\n if (typeof itemSchema === \"string\") {\n for (let item of node) {\n const r = getValue(item.val, itemSchema);\n str = processValue(str, r);\n }\n } else {\n for (let item of node) {\n const r = _e(item, itemSchema, options);\n str = processValue(str, r);\n }\n }\n str += chars.arrayEnd;//indicates that next item is not array item\n } else {//object\n str += chars.objStart;\n if (Array.isArray(node)) {\n node = node[0];\n }\n for (let key of Object.keys(e_schema)) {\n //a property defined in schema can be present either in attrsMap or children tags\n //options.textNodeName will not present in both maps, take it's value from val\n //options.attrNodeName will be present in attrsMap\n let r;\n if (!options.ignoreAttributes && node.attrsMap && node.attrsMap[key]) {\n r = _e(node.attrsMap[key], e_schema[key], options);\n } else if (key === options.textNodeName) {\n r = _e(node.val, e_schema[key], options);\n } else {\n r = _e(node.child[key], e_schema[key], options);\n }\n str = processValue(str, r);\n }\n }\n return str;\n } else {\n return hasValidData;\n }\n }\n};\n\nconst getValue = (a/*, type*/) => {\n switch (a) {\n case undefined:\n return chars.missingPremitive;\n case null:\n return chars.nilPremitive;\n case \"\":\n return chars.emptyValue;\n default:\n return a;\n }\n};\n\nconst processValue = (str, r) => {\n if (!isAppChar(r[0]) && !isAppChar(str[str.length - 1])) {\n str += chars.boundryChar;\n }\n return str + r;\n};\n\nconst isAppChar = (ch) => {\n return charsArr.indexOf(ch) !== -1;\n};\n\nconst hasData = (jObj) => {\n if (jObj === undefined) {\n return chars.missingChar;\n } else if (jObj === null) {\n return chars.nilChar;\n } else if (jObj.child && Object.keys(jObj.child).length === 0 && (!jObj.attrsMap || Object.keys(jObj.attrsMap).length === 0)) {\n return chars.emptyChar;\n } else {\n return true;\n }\n};\n\nconst {defaultOptions} = require(\"./x2j\");\nconst convertToNimn = (node, e_schema, options) => {\n options = Object.assign({}, defaultOptions, options);\n return _e(node, e_schema, options);\n};\n\nmodule.exports = {convertToNimn};\n","class XmlNode {\n constructor(tagname, parent, val) {\n this.tagname = tagname;\n this.parent = parent;\n\n this.child = {}; //child tags\n this.attrsMap = {}; //attributes map\n\n this.val = val;//text only\n }\n\n addChild(child) {\n if (this.child[child.tagname]) {//already presents\n this.child[child.tagname].push(child);\n } else {\n this.child[child.tagname] = [child];\n }\n }\n}\n\nmodule.exports = {XmlNode};\n","const {getTraversalObj} = require(\"./x2j\");\nconst {convertToNimn} = require(\"./nimn-data\");\nconst {validate} = require(\"./validator\");\nconst j2xParser = require(\"./j2x\");\nconst {defaultOptions} = require(\"./x2j\");\nconst {convertToJson} = require(\"./n2j\");\nconst {convertToJsonString} = require(\"./n2j-str\");\n\nconst parseToNimn = (xmlData, schema, options) => convertToNimn(getTraversalObj(xmlData, options), schema, options);\n\nconst parse = (xmlData, options) => {\n options = Object.assign({}, defaultOptions, options);\n return convertToJson(getTraversalObj(xmlData, options), options);\n};\n\nmodule.exports = {\n parse,\n parseToNimn,\n convertToJson,\n convertToJsonString,\n convertToNimn,\n getTraversalObj,\n validate,\n j2xParser\n};\n"],"sourceRoot":""} \ No newline at end of file diff --git a/parser.cli.js b/parser.cli.js index db706b6b..9faada8a 100644 --- a/parser.cli.js +++ b/parser.cli.js @@ -124,15 +124,7 @@ var writeToFile = function writeToFile(fileName, data) { }; if (process.argv[2] === "--help" || process.argv[2] === "-h") { - console.log("Fast XML Parser " + __webpack_require__(/*! ../package.json */ "../package.json").version); - console.log("----------------"); - console.log("xml2js [-ns|-a|-c|-v|-V] [-o outputfile.json]"); - console.log("cat xmlfile.xml | xml2js [-ns|-a|-c|-v|-V] [-o outputfile.json]"); - console.log("-ns: remove namespace from tag and atrribute name."); - console.log("-a: don't parse attributes."); - console.log("-c: parse values to premitive type."); - console.log("-v: validate before parsing."); - console.log("-V: validate only."); + console.log("Fast XML Parser ".concat(__webpack_require__(/*! ../package.json */ "../package.json").version, "\n----------------\nxml2js [-ns|-a|-c|-v|-V] [-o outputFile.json]\ncat xmlFile.xml | xml2js [-ns|-a|-c|-v|-V] [-o outputFile.json]\n-ns: remove namespace from tag and attribute name.\n-a: don't parse attributes.\n-c: parse values to primitive type.\n-v: validate before parsing.\n-V: validate only.")); } else if (process.argv[2] === "--version") { console.log(__webpack_require__(/*! ../package.json */ "../package.json").version); } else { diff --git a/parser.cli.js.map b/parser.cli.js.map index 63b268de..d0cf99d1 100644 --- a/parser.cli.js.map +++ b/parser.cli.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack/bootstrap","external \"./package.json\"","external \"./parser\"","./src/cli.js","./src/read.js","external \"fs\"","external \"stream\""],"names":["fs","require","parser","readToEnd","writeToFile","fileName","data","writeFile","err","console","log","process","argv","version","options","ignoreNameSpace","ignoreAttributes","parseNodeValue","parseAttributeValue","outputFileName","validate","validateOnly","i","length","callback","xmlData","output","result","JSON","stringify","parse","stdin","readFile","e","Transform","ReadToEnd","opts","_rte_encoding","encoding","_buff","chunk","done","toString","push","emit","undefined","stream","cb","destStream","pipe","on","unpipe","resume","module","exports"],"mappings":"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","file":"./parser.cli.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading wasm modules\n \tvar installedWasmModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// object with all compiled WebAssembly.Modules\n \t__webpack_require__.w = {};\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/cli.js\");\n","module.exports = require(\"./package.json\");","module.exports = require(\"./parser\");","const fs = require(\"fs\");\nconst parser = require(\"./parser\");\nconst {readToEnd} = require(\"./read\");\n\nconst writeToFile = (fileName, data) => {\n fs.writeFile(fileName, data, (err) => {\n if (err) {\n throw err;\n }\n console.log(\"JSON output has been written to \" + fileName);\n });\n};\n\nif (process.argv[2] === \"--help\" || process.argv[2] === \"-h\") {\n console.log(\"Fast XML Parser \" + require(\"../package.json\").version);\n console.log(\"----------------\");\n console.log(\"xml2js [-ns|-a|-c|-v|-V] [-o outputfile.json]\");\n console.log(\"cat xmlfile.xml | xml2js [-ns|-a|-c|-v|-V] [-o outputfile.json]\");\n console.log(\"-ns: remove namespace from tag and atrribute name.\");\n console.log(\"-a: don't parse attributes.\");\n console.log(\"-c: parse values to premitive type.\");\n console.log(\"-v: validate before parsing.\");\n console.log(\"-V: validate only.\");\n} else if (process.argv[2] === \"--version\") {\n console.log(require(\"../package.json\").version);\n} else {\n const options = {\n ignoreNameSpace: true,\n ignoreAttributes: false,\n parseNodeValue: true,\n parseAttributeValue: true\n };\n let fileName = \"\";\n let outputFileName;\n let validate = false;\n let validateOnly = false;\n for (let i = 2; i < process.argv.length; i++) {\n if (process.argv[i] === \"-ns\") {\n options.ignoreNameSpace = false;\n } else if (process.argv[i] === \"-a\") {\n options.ignoreAttributes = true;\n } else if (process.argv[i] === \"-c\") {\n options.parseNodeValue = false;\n options.parseAttributeValue = false;\n } else if (process.argv[i] === \"-o\") {\n outputFileName = process.argv[++i];\n } else if (process.argv[i] === \"-v\") {\n validate = true;\n } else if (process.argv[i] === \"-V\") {\n validateOnly = true;\n } else {//filename\n fileName = process.argv[i];\n }\n }\n const callback = (xmlData) => {\n let output = \"\";\n if (validate) {\n const result = parser.validate(xmlData);\n if (result === true) {\n output = JSON.stringify(parser.parse(xmlData, options), null, 4);\n } else {\n output = result;\n }\n } else if (validateOnly) {\n output = parser.validate(xmlData);\n } else {\n output = JSON.stringify(parser.parse(xmlData, options), null, 4);\n }\n if (outputFileName) {\n writeToFile(outputFileName, output);\n } else {\n console.log(output);\n }\n };\n\n try {\n if (!fileName) {\n readToEnd(process.stdin, (err, data) => {\n if (err) {\n throw err;\n }\n callback(data);\n });\n } else {\n fs.readFile(fileName, (err, data) => {\n if (err) {\n throw err;\n }\n callback(data);\n });\n }\n }\n catch (e) {\n console.log(\"Seems an invalid file or stream.\" + e);\n }\n}\n","// Copyright 2013 Timothy J Fontaine \n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE\n\n/*\n\nRead any stream all the way to the end and trigger a single cb\n\nconst http = require('http');\n\nconst rte = require('readtoend');\n\nhttp.get('http://nodejs.org', function(response) {\n rte.readToEnd(response, function(err, body) {\n console.log(body);\n });\n});\n\n*/\n\nconst {Transform} = require(\"stream\");\n\nclass ReadToEnd extends Transform {\n constructor(opts) {\n super(opts);\n this._rte_encoding = opts.encoding || \"utf8\";\n this._buff = \"\";\n }\n\n _transform(chunk, encoding, done) {\n this._buff += chunk.toString(this._rte_encoding);\n this.push(chunk);\n done();\n }\n\n _flush(done) {\n this.emit(\"complete\", undefined, this._buff);\n done();\n }\n}\n\nconst readToEnd = (stream, options, cb) => {\n if (!cb) {\n cb = options;\n options = {};\n }\n\n const destStream = new ReadToEnd(options);\n\n stream.pipe(destStream);\n\n stream.on(\"error\", function(err) {\n stream.unpipe(destStream);\n cb(err);\n });\n\n destStream.on(\"complete\", cb);\n\n destStream.resume();\n\n return destStream;\n};\n\nmodule.exports = {ReadToEnd, readToEnd};\n","module.exports = require(\"fs\");","module.exports = require(\"stream\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack/bootstrap","external \"./package.json\"","external \"./parser\"","./src/cli.js","./src/read.js","external \"fs\"","external \"stream\""],"names":["fs","require","parser","readToEnd","writeToFile","fileName","data","writeFile","err","console","log","process","argv","version","options","ignoreNameSpace","ignoreAttributes","parseNodeValue","parseAttributeValue","outputFileName","validate","validateOnly","i","length","callback","xmlData","output","result","JSON","stringify","parse","stdin","readFile","e","Transform","ReadToEnd","opts","_rte_encoding","encoding","_buff","chunk","done","toString","push","emit","undefined","stream","cb","destStream","pipe","on","unpipe","resume","module","exports"],"mappings":"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","file":"./parser.cli.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading wasm modules\n \tvar installedWasmModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// object with all compiled WebAssembly.Modules\n \t__webpack_require__.w = {};\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/cli.js\");\n","module.exports = require(\"./package.json\");","module.exports = require(\"./parser\");","const fs = require(\"fs\");\nconst parser = require(\"./parser\");\nconst {readToEnd} = require(\"./read\");\n\nconst writeToFile = (fileName, data) => {\n fs.writeFile(fileName, data, (err) => {\n if (err) {\n throw err;\n }\n console.log(\"JSON output has been written to \" + fileName);\n });\n};\n\nif (process.argv[2] === \"--help\" || process.argv[2] === \"-h\") {\n console.log(`\\\nFast XML Parser ${require(\"../package.json\").version}\n----------------\nxml2js [-ns|-a|-c|-v|-V] [-o outputFile.json]\ncat xmlFile.xml | xml2js [-ns|-a|-c|-v|-V] [-o outputFile.json]\n-ns: remove namespace from tag and attribute name.\n-a: don't parse attributes.\n-c: parse values to primitive type.\n-v: validate before parsing.\n-V: validate only.\\\n`);\n} else if (process.argv[2] === \"--version\") {\n console.log(require(\"../package.json\").version);\n} else {\n const options = {\n ignoreNameSpace: true,\n ignoreAttributes: false,\n parseNodeValue: true,\n parseAttributeValue: true\n };\n let fileName = \"\";\n let outputFileName;\n let validate = false;\n let validateOnly = false;\n for (let i = 2; i < process.argv.length; i++) {\n if (process.argv[i] === \"-ns\") {\n options.ignoreNameSpace = false;\n } else if (process.argv[i] === \"-a\") {\n options.ignoreAttributes = true;\n } else if (process.argv[i] === \"-c\") {\n options.parseNodeValue = false;\n options.parseAttributeValue = false;\n } else if (process.argv[i] === \"-o\") {\n outputFileName = process.argv[++i];\n } else if (process.argv[i] === \"-v\") {\n validate = true;\n } else if (process.argv[i] === \"-V\") {\n validateOnly = true;\n } else {//filename\n fileName = process.argv[i];\n }\n }\n const callback = (xmlData) => {\n let output = \"\";\n if (validate) {\n const result = parser.validate(xmlData);\n if (result === true) {\n output = JSON.stringify(parser.parse(xmlData, options), null, 4);\n } else {\n output = result;\n }\n } else if (validateOnly) {\n output = parser.validate(xmlData);\n } else {\n output = JSON.stringify(parser.parse(xmlData, options), null, 4);\n }\n if (outputFileName) {\n writeToFile(outputFileName, output);\n } else {\n console.log(output);\n }\n };\n\n try {\n if (!fileName) {\n readToEnd(process.stdin, (err, data) => {\n if (err) {\n throw err;\n }\n callback(data);\n });\n } else {\n fs.readFile(fileName, (err, data) => {\n if (err) {\n throw err;\n }\n callback(data);\n });\n }\n }\n catch (e) {\n console.log(\"Seems an invalid file or stream.\" + e);\n }\n}\n","// Copyright 2013 Timothy J Fontaine \n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE\n\n/*\n\nRead any stream all the way to the end and trigger a single cb\n\nconst http = require('http');\n\nconst rte = require('readtoend');\n\nhttp.get('http://nodejs.org', function(response) {\n rte.readToEnd(response, function(err, body) {\n console.log(body);\n });\n});\n\n*/\n\nconst {Transform} = require(\"stream\");\n\nclass ReadToEnd extends Transform {\n constructor(opts) {\n super(opts);\n this._rte_encoding = opts.encoding || \"utf8\";\n this._buff = \"\";\n }\n\n _transform(chunk, encoding, done) {\n this._buff += chunk.toString(this._rte_encoding);\n this.push(chunk);\n done();\n }\n\n _flush(done) {\n this.emit(\"complete\", undefined, this._buff);\n done();\n }\n}\n\nconst readToEnd = (stream, options, cb) => {\n if (!cb) {\n cb = options;\n options = {};\n }\n\n const destStream = new ReadToEnd(options);\n\n stream.pipe(destStream);\n\n stream.on(\"error\", function(err) {\n stream.unpipe(destStream);\n cb(err);\n });\n\n destStream.on(\"complete\", cb);\n\n destStream.resume();\n\n return destStream;\n};\n\nmodule.exports = {ReadToEnd, readToEnd};\n","module.exports = require(\"fs\");","module.exports = require(\"stream\");"],"sourceRoot":""} \ No newline at end of file diff --git a/parser.js b/parser.js index 4fb65e0d..520118c9 100644 --- a/parser.js +++ b/parser.js @@ -85,9 +85,6 @@ module.exports = /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -"use strict"; - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -125,12 +122,11 @@ function () { this.options = Object.assign({}, defaultOptions, options); - if (this.options.ignoreAttributes) { - this.isAttribute = function () { - return ( - /*a*/ - false - ); + if (this.options.ignoreAttributes || this.options.attrNodeName) { + this.isAttribute = function () + /*a*/ + { + return false; }; } else { this.attrPrefixLen = this.options.attributeNamePrefix.length; @@ -140,11 +136,10 @@ function () { if (this.options.cdataTagName) { this.isCDATA = isCDATA; } else { - this.isCDATA = function () { - return ( - /*a*/ - false - ); + this.isCDATA = function () + /*a*/ + { + return false; }; } @@ -342,7 +337,7 @@ function indentate(level) { function isAttribute(name /*, options*/ ) { - if (name.startsWith(this.options.attributeNamePrefix)) { + if (!this.options.attrNodeName && name.startsWith(this.options.attributeNamePrefix)) { return name.substr(this.attrPrefixLen); } else { return false; @@ -1264,7 +1259,6 @@ var defaultOptions = { arrayMode: false, trimValues: true, //Trim string values of tag and attributes - //decodeHTMLchar: false, cdataTagName: false, cdataPositionChar: "\\c", tagValueProcessor: function tagValueProcessor(a) { @@ -1427,11 +1421,8 @@ function buildAttributesMap(attrStr, options) { _match[4] = _match[4].trim(); } - if (options.decodeHTMLchar) { - _match[4] = options.attrValueProcessor(_match[4]); - } - - attrs[options.attributeNamePrefix + attrName] = parseValue(_match[4], options.parseAttributeValue); + matches[i][4] = options.attrValueProcessor(matches[i][4]); + attrs[options.attributeNamePrefix + attrName] = parseValue(matches[i][4], options.parseAttributeValue); } else if (options.allowBooleanAttributes) { attrs[options.attributeNamePrefix + attrName] = true; } diff --git a/parser.js.map b/parser.js.map index 965fd146..74c2356b 100644 --- a/parser.js.map +++ b/parser.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack/bootstrap","./src/j2x.js","./src/n2j-str.js","./src/n2j.js","./src/nimn-data.js","./src/parser.js","./src/util.js","./src/validator.js","./src/x2j.js","./src/xml-node.js"],"names":["require","isExist","defaultOptions","attributeNamePrefix","attrNodeName","textNodeName","ignoreAttributes","cdataTagName","cdataPositionChar","format","indentBy","supressEmptyNode","tagValueProcessor","a","attrValueProcessor","Parser","options","Object","assign","isAttribute","attrPrefixLen","length","isCDATA","replaceCDATAstr","replaceCDATAarr","indentate","tagEndChar","newLine","buildTextNode","buildEmptyTextNode","buildObjNode","buildEmptyObjNode","buildTextValNode","buildObjectNode","jObj","j2x","val","level","attrStr","keys","key","attr","Array","isArray","item","result","attrKey","str","cdata","replace","join","v","repeat","name","startsWith","substr","module","exports","isEmptyObject","merge","xmlToNodeobj","convertToJsonString","node","_cToJsonStr","child","tagname","tag","attrsMap","stringval","isNaN","convertToJson","push","char","String","fromCharCode","chars","nilChar","missingChar","nilPremitive","missingPremitive","emptyChar","emptyValue","boundryChar","arrayEnd","objStart","arrStart","charsArr","_e","e_schema","undefined","getValue","hasValidData","hasData","itemSchema","r","processValue","isAppChar","ch","indexOf","convertToNimn","getTraversalObj","validate","j2xParser","parseToNimn","xmlData","schema","parse","getAllMatches","string","regex","matches","match","exec","target","source","obj","doesMatch","doesNotMatch","util","allowBooleanAttributes","buildOptions","props","i","tags","tagFound","readPI","err","readCommentAndCDATA","closingTag","tagName","trim","substring","validateTagName","code","msg","readAttributeStr","value","index","isValid","validateAttributeString","otg","pop","JSON","stringify","start","angleBracketsCount","doubleQuote","singleQuote","startChar","validAttrStrRegxp","RegExp","attrNames","attrName","validateAttrName","hasOwnProperty","validAttrRegxp","XmlNode","TagType","ignoreNameSpace","parseNodeValue","parseAttributeValue","arrayMode","trimValues","xmlObj","currentNode","tagsRegx","nextTag","tagType","checkForTagType","CLOSING","parent","processTagValue","CDATA","childNode","buildAttributesMap","addChild","SELF","parseValue","OPENING","resolveNameSpace","split","prefix","charAt","shouldParse","parseFloat","parseInt","attrsRegx","attrs","decodeHTMLchar","attrCollection"],"mappings":"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","file":"./parser.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading wasm modules\n \tvar installedWasmModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// object with all compiled WebAssembly.Modules\n \t__webpack_require__.w = {};\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/parser.js\");\n","\"use strict\";\nconst {isExist} = require(\"./util\");\n\nconst defaultOptions = {\n attributeNamePrefix: \"@_\",\n attrNodeName: false,\n textNodeName: \"#text\",\n ignoreAttributes: true,\n cdataTagName: false,\n cdataPositionChar: \"\\\\c\",\n format: false,\n indentBy: \" \",\n supressEmptyNode: false,\n tagValueProcessor: (a) => a,\n attrValueProcessor: (a) => a\n};\n\nclass Parser {\n constructor(options) {\n this.options = Object.assign({}, defaultOptions, options);\n if (this.options.ignoreAttributes) {\n this.isAttribute = (/*a*/) => false;\n } else {\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n if (this.options.cdataTagName) {\n this.isCDATA = isCDATA;\n } else {\n this.isCDATA = (/*a*/) => false;\n }\n this.replaceCDATAstr = replaceCDATAstr;\n this.replaceCDATAarr = replaceCDATAarr;\n\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = \">\\n\";\n this.newLine = \"\\n\";\n } else {\n this.indentate = () => \"\";\n this.tagEndChar = \">\";\n this.newLine = \"\";\n }\n\n if (this.options.supressEmptyNode) {\n this.buildTextNode = buildEmptyTextNode;\n this.buildObjNode = buildEmptyObjNode;\n } else {\n this.buildTextNode = buildTextValNode;\n this.buildObjNode = buildObjectNode;\n }\n\n this.buildTextValNode = buildTextValNode;\n this.buildObjectNode = buildObjectNode;\n\n }\n\n parse(jObj) {\n return this.j2x(jObj, 0).val;\n }\n\n j2x(jObj, level) {\n let attrStr = \"\";\n let val = \"\";\n for (let key of Object.keys(jObj)) {\n if (!isExist(jObj[key])) {\n // supress undefined node\n }\n else if (typeof jObj[key] !== \"object\") {//premitive type\n const attr = this.isAttribute(key);\n if (attr) {\n attrStr += \" \" + attr + \"=\\\"\" + this.options.attrValueProcessor(\"\" + jObj[key]) + \"\\\"\";\n } else if (this.isCDATA(key)) {\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAstr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAstr(\"\", jObj[key]);\n }\n } else {//tag value\n if (key === this.options.textNodeName) {\n if (jObj[this.options.cdataTagName]) {\n //value will added while processing cdata\n } else {\n val += this.options.tagValueProcessor(\"\" + jObj[key]);\n }\n } else {\n val += this.buildTextNode(jObj[key], key, \"\", level);\n }\n }\n } else if (Array.isArray(jObj[key])) {//repeated nodes\n if (this.isCDATA(key)) {\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAarr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAarr(\"\", jObj[key]);\n }\n } else {//nested nodes\n for (let item of jObj[key]) {\n if (!isExist(item)) {\n // supress undefined node\n }\n else if (typeof item === \"object\") {\n const result = this.j2x(item, level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n } else {\n val += this.buildTextNode(item, key, \"\", level);\n }\n }\n }\n } else {\n if (this.options.attrNodeName && key === this.options.attrNodeName) {\n for (let attrKey of Object.keys(jObj[key])) {\n attrStr += \" \" + attrKey + \"=\\\"\" + this.options.tagValueProcessor(\"\" + jObj[key][attrKey]) + \"\\\"\";\n }\n } else {\n const result = this.j2x(jObj[key], level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n }\n }\n }\n return {attrStr: attrStr, val: val};\n }\n}\n\nfunction replaceCDATAstr(str, cdata) {\n str = this.options.tagValueProcessor(\"\" + str);\n if (this.options.cdataPositionChar === \"\" || str === \"\") {\n return str + \"\";\n } else {\n return str.replace(this.options.cdataPositionChar, \"\");\n }\n}\n\nfunction replaceCDATAarr(str, cdata) {\n str = this.options.tagValueProcessor(\"\" + str);\n if (this.options.cdataPositionChar === \"\" || str === \"\") {\n return str + \"\";\n } else {\n for (const v of Object.keys(cdata)) {\n str = str.replace(this.options.cdataPositionChar, \"\");\n }\n return str;\n }\n}\n\nfunction buildObjectNode(val, key, attrStr, level) {\n return this.indentate(level)\n + \"<\" + key + attrStr\n + this.tagEndChar\n + val\n //+ this.newLine\n + this.indentate(level)\n + \"\" + this.options.tagValueProcessor(\"\" + val) + \" 1) {\n jObj += \"\\\"\" + tagname + \"\\\" : [ \";\n for (let tag of Object.keys(node.child[tagname])) {\n jObj += _cToJsonStr(node.child[tagname][tag], options) + \" , \";\n }\n jObj = jObj.substr(0, jObj.length - 1) + \" ] \"; //remove extra comma in last\n } else {\n jObj += \"\\\"\" + tagname + \"\\\" : \" + _cToJsonStr(node.child[tagname][0], options) + \" ,\";\n }\n }\n merge(jObj, node.attrsMap);\n //add attrsMap as new children\n if (isEmptyObject(jObj)) {\n return isExist(node.val) ? node.val : \"\";\n } else {\n if (isExist(node.val)) {\n if (!(typeof node.val === \"string\" && (node.val === \"\" || node.val === options.cdataPositionChar))) {\n jObj += \"\\\"\" + options.textNodeName + \"\\\" : \" + stringval(node.val);\n }\n }\n }\n //add value\n if (jObj[jObj.length - 1] === \",\") {\n jObj = jObj.substr(0, jObj.length - 2);\n }\n return jObj + \"}\";\n};\n\nfunction stringval(v) {\n if (v === true || v === false || !isNaN(v)) {\n return v;\n } else {\n return \"\\\"\" + v + \"\\\"\";\n }\n}\n\nfunction indentate(options, level) {\n return options.indentBy.repeat(level);\n}\n\nmodule.exports={convertToJsonString};\n","const {isEmptyObject, merge, isExist} = require(\"./util\");\n\nconst convertToJson = function(node, options) {\n const jObj = {};\n\n if ((!node.child || isEmptyObject(node.child)) && (!node.attrsMap || isEmptyObject(node.attrsMap))) {\n return isExist(node.val) ? node.val : \"\";\n } else {\n if (isExist(node.val)) {\n if (!(typeof node.val === \"string\" && (node.val === \"\" || node.val === options.cdataPositionChar))) {\n jObj[options.textNodeName] = node.val;\n }\n }\n }\n\n merge(jObj, node.attrsMap);\n\n for (let tagname of Object.keys(node.child)) {\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj[tagname] = [];\n for (let tag of Object.keys(node.child[tagname])) {\n jObj[tagname].push(convertToJson(node.child[tagname][tag], options));\n }\n } else {\n jObj[tagname] = convertToJson(node.child[tagname][0], options);\n }\n }\n\n //add value\n return jObj;\n};\n\nmodule.exports = { convertToJson};\n","const char = (a) => String.fromCharCode(a);\n\nconst chars = {\n nilChar: char(254),\n missingChar: char(200),\n nilPremitive: char(176),\n missingPremitive: char(201),\n emptyChar: char(177),\n emptyValue: char(178),\n boundryChar: char(186),\n arrayEnd: char(197),\n objStart: char(198),\n arrStart: char(199)\n};\n\nconst charsArr = [\n chars.nilChar,\n chars.nilPremitive,\n chars.missingChar,\n chars.missingPremitive,\n chars.boundryChar,\n chars.emptyChar,\n chars.arrayEnd,\n chars.objStart,\n chars.arrStart\n];\n\nconst _e = (node, e_schema, options) => {\n if (typeof e_schema === \"string\") {//premitive\n if (node && node[0] && node[0].val !== undefined) {\n return getValue(node[0].val, e_schema);\n } else {\n return getValue(node, e_schema);\n }\n } else {\n const hasValidData = hasData(node);\n if (hasValidData === true) {\n let str = \"\";\n if (Array.isArray(e_schema)) {\n //attributes can't be repeated. hence check in children tags only\n str += chars.arrStart;\n const itemSchema = e_schema[0];\n //var itemSchemaType = itemSchema;\n if (typeof itemSchema === \"string\") {\n for (let item of node) {\n const r = getValue(item.val, itemSchema);\n str = processValue(str, r);\n }\n } else {\n for (let item of node) {\n const r = _e(item, itemSchema, options);\n str = processValue(str, r);\n }\n }\n str += chars.arrayEnd;//indicates that next item is not array item\n } else {//object\n str += chars.objStart;\n if (Array.isArray(node)) {\n node = node[0];\n }\n for (let key of Object.keys(e_schema)) {\n //a property defined in schema can be present either in attrsMap or children tags\n //options.textNodeName will not present in both maps, take it's value from val\n //options.attrNodeName will be present in attrsMap\n let r;\n if (!options.ignoreAttributes && node.attrsMap && node.attrsMap[key]) {\n r = _e(node.attrsMap[key], e_schema[key], options);\n } else if (key === options.textNodeName) {\n r = _e(node.val, e_schema[key], options);\n } else {\n r = _e(node.child[key], e_schema[key], options);\n }\n str = processValue(str, r);\n }\n }\n return str;\n } else {\n return hasValidData;\n }\n }\n};\n\nconst getValue = (a/*, type*/) => {\n switch (a) {\n case undefined:\n return chars.missingPremitive;\n case null:\n return chars.nilPremitive;\n case \"\":\n return chars.emptyValue;\n default:\n return a;\n }\n};\n\nconst processValue = (str, r) => {\n if (!isAppChar(r[0]) && !isAppChar(str[str.length - 1])) {\n str += chars.boundryChar;\n }\n return str + r;\n};\n\nconst isAppChar = (ch) => {\n return charsArr.indexOf(ch) !== -1;\n};\n\nconst hasData = (jObj) => {\n if (jObj === undefined) {\n return chars.missingChar;\n } else if (jObj === null) {\n return chars.nilChar;\n } else if (jObj.child && Object.keys(jObj.child).length === 0 && (!jObj.attrsMap || Object.keys(jObj.attrsMap).length === 0)) {\n return chars.emptyChar;\n } else {\n return true;\n }\n};\n\nconst {defaultOptions} = require(\"./x2j\");\nconst convertToNimn = (node, e_schema, options) => {\n options = Object.assign({}, defaultOptions, options);\n return _e(node, e_schema, options);\n};\n\nmodule.exports = {convertToNimn};\n","const {getTraversalObj} = require(\"./x2j\");\nconst {convertToNimn} = require(\"./nimn-data\");\nconst {validate} = require(\"./validator\");\nconst j2xParser = require(\"./j2x\");\nconst {defaultOptions} = require(\"./x2j\");\nconst {convertToJson} = require(\"./n2j\");\nconst {convertToJsonString} = require(\"./n2j-str\");\n\nconst parseToNimn = (xmlData, schema, options) => convertToNimn(getTraversalObj(xmlData, options), schema, options);\n\nconst parse = (xmlData, options) => {\n options = Object.assign({}, defaultOptions, options);\n return convertToJson(getTraversalObj(xmlData, options), options);\n};\n\nmodule.exports = {\n parse,\n parseToNimn,\n convertToJson,\n convertToJsonString,\n convertToNimn,\n getTraversalObj,\n validate,\n j2xParser\n};\n","const getAllMatches = (string, regex) => {\n const matches = [];\n let match;\n while (match = regex.exec(string)) {\n matches.push([...match]);\n }\n return matches;\n};\n\n/**\n * Copy all the properties of a into b.\n * @param {*} target\n * @param {*} source\n */\nconst merge = (target, source) => {\n if (source) {\n for (let key of Object.keys(source)) {\n target[key] = source[key];\n }\n }\n return target;\n};\n\nconst isEmptyObject = (obj) => Object.keys(obj).length === 0;\nconst isExist = (v) => typeof v !== \"undefined\";\n\nconst doesMatch = (string, regex) => {\n const match = regex.exec(string);\n return !(match === null || !isExist(match));\n};\n\nconst doesNotMatch = (string, regex) => !doesMatch(string, regex);\n\nconst getValue = (v) => isExist(v) ? v : \"\";\n\n// const fakeCall = function(a) {return a;};\n// const fakeCallNoReturn = function() {};\nmodule.exports = {\n getValue,\n merge,\n isEmptyObject,\n isExist,\n doesMatch,\n doesNotMatch,\n getAllMatches\n};\n","const util = require(\"./util\");\n\nconst defaultOptions = {\n allowBooleanAttributes: false //A tag can have attributes without any value\n};\n\nconst buildOptions = (options) => {\n if (!options) {\n options = {};\n }\n const props = [\"allowBooleanAttributes\"];\n for (let i of props) {\n if (options[props[i]] === undefined) {\n options[props[i]] = defaultOptions[props[i]];\n }\n }\n return options;\n};\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nconst validate = (xmlData, options) => {\n options = buildOptions(options);\n\n //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n //xmlData = xmlData.replace(/()/g,\"\");//Remove DOCTYPE\n\n const tags = [];\n let tagFound = false;\n for (let i = 0; i < xmlData.length; i++) {\n\n if (xmlData[i] === \"<\") {//starting of tag\n //read until you reach to '>' avoiding any '>' in attribute value\n i++;\n if (xmlData[i] === \"?\") {\n i = readPI(xmlData, ++i);\n if (i.err) {\n return i;\n }\n } else if (xmlData[i] === \"!\") {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i] === \"/\") {//closing tag\n closingTag = true;\n i++;\n }\n //read tagname\n let tagName = \"\";\n for (; i < xmlData.length &&\n xmlData[i] !== \">\" &&\n xmlData[i] !== \" \" &&\n xmlData[i] !== \"\\t\"; i++) {\n\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n //console.log(tagName);\n\n if (tagName[tagName.length - 1] === \"/\") {//self closing tag without attributes\n tagName = tagName.substring(0, tagName.length - 1);\n continue;\n }\n if (!validateTagName(tagName)) {\n return {err: {code: \"InvalidTag\", msg: \"Tag \" + tagName + \" is an invalid name.\"}};\n }\n\n const result = readAttributeStr(xmlData, i);\n if (result === false) {\n return {err: {code: \"InvalidAttr\", msg: \"Attributes for \" + tagName + \" have open quote\"}};\n }\n let attrStr = result.value;\n i = result.index;\n\n if (attrStr[attrStr.length - 1] === \"/\") {//self closing tag\n attrStr = attrStr.substring(0, attrStr.length - 1);\n const isValid = validateAttributeString(attrStr, options);\n if (isValid === true) {\n tagFound = true;\n continue;\n } else {\n return isValid;\n }\n } else if (closingTag) {\n if (attrStr.trim().length > 0) {\n return {err: {code: \"InvalidTag\", msg: \"closing tag \" + tagName + \" can't have attributes or invalid starting.\"}};\n } else {\n const otg = tags.pop();\n if (tagName !== otg) {\n return {err: {code: \"InvalidTag\", msg: \"closing tag \" + otg + \" is expected inplace of \" + tagName + \".\"}};\n }\n }\n } else {\n const isValid = validateAttributeString(attrStr, options);\n if (isValid !== true) {\n return isValid;\n }\n tags.push(tagName);\n tagFound = true;\n }\n\n //skip tag text value\n //It may include comments and CDATA value\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {\n if (xmlData[i + 1] === \"!\") {//comment or CADATA\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n break;\n }\n }\n }//end of reading tag text value\n if (xmlData[i] === \"<\") {\n i--;\n }\n }\n } else {\n if (xmlData[i] === \" \" || xmlData[i] === \"\\t\" || xmlData[i] === \"\\n\" || xmlData[i] === \"\\r\") {\n continue;\n }\n return {err: {code: \"InvalidChar\", msg: \"char \" + xmlData[i] + \" is not expected .\"}};\n }\n }\n\n if (!tagFound) {\n return {err: {code: \"InvalidXml\", msg: \"Start tag expected.\"}};\n } else if (tags.length > 0) {\n return {err: {code: \"InvalidXml\", msg: \"Invalid \" + JSON.stringify(tags, null, 4).replace(/\\r?\\n/g, \"\") + \" found.\"}};\n }\n\n return true;\n};\n\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n const start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === \"?\" || xmlData[i] === \" \") { //tagName\n const tagName = xmlData.substr(start, i - start);\n if (i > 5 && tagName === \"xml\") {\n return {err: {code: \"InvalidXml\", msg: \"XML declaration allowed only at the start of the document.\"}};\n } else if (xmlData[i] === \"?\" && xmlData[i + 1] === \">\") {\n //check if valid attribute string\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\n\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === \"-\" && xmlData[i + 2] === \"-\") {//comment\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === \"-\" && xmlData[i + 1] === \"-\" && xmlData[i + 2] === \">\") {\n i += 2;\n break;\n }\n }\n } else if (xmlData.length > i + 8 &&\n xmlData[i + 1] === \"D\" &&\n xmlData[i + 2] === \"O\" &&\n xmlData[i + 3] === \"C\" &&\n xmlData[i + 4] === \"T\" &&\n xmlData[i + 5] === \"Y\" &&\n xmlData[i + 6] === \"P\" &&\n xmlData[i + 7] === \"E\") {\n let angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {angleBracketsCount++;}\n else if (xmlData[i] === \">\") {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (xmlData.length > i + 9 &&\n xmlData[i + 1] === \"[\" &&\n xmlData[i + 2] === \"C\" &&\n xmlData[i + 3] === \"D\" &&\n xmlData[i + 4] === \"A\" &&\n xmlData[i + 5] === \"T\" &&\n xmlData[i + 6] === \"A\" &&\n xmlData[i + 7] === \"[\") {\n\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === \"]\" && xmlData[i + 1] === \"]\" && xmlData[i + 2] === \">\") {\n i += 2;\n break;\n }\n }\n }\n\n return i;\n}\n\nconst doubleQuote = \"\\\"\";\nconst singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n let attrStr = \"\";\n let startChar = \"\";\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === \"\") {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) {\n //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n continue;\n } else {\n startChar = \"\";\n }\n } else if (xmlData[i] === \">\") {\n if (startChar === \"\") {\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== \"\") {\n return false;\n }\n\n return {value: attrStr, index: i};\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nconst validAttrStrRegxp = new RegExp(\"(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\\\"])(([\\\\s\\\\S])*?)\\\\5)?\", \"g\");\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n //console.log(\"start:\"+attrStr+\":end\");\n\n //if(attrStr.trim().length === 0) return true; //empty string\n\n const matches = util.getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = [];\n\n for (let match of matches) {\n //console.log(matches[i]);\n\n if (match[1].length === 0) {//nospace before attribute name: a=\"sd\"b=\"saf\"\n return {err: {code: \"InvalidAttr\", msg: \"attribute \" + match[2] + \" has no space in starting.\"}};\n } else if (match[3] === undefined && !options.allowBooleanAttributes) {//independent attribute: ab\n return {err: {code: \"InvalidAttr\", msg: \"boolean attribute \" + match[2] + \" is not allowed.\"}};\n }\n /* else if(matches[i][6] === undefined){//attribute without value: ab=\n return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n } */\n const attrName = match[2];\n if (!validateAttrName(attrName)) {\n return {err: {code: \"InvalidAttr\", msg: \"attribute \" + attrName + \" is an invalid name.\"}};\n }\n if (!attrNames.hasOwnProperty(attrName)) {//check for duplicate attribute.\n attrNames[attrName] = 1;\n } else {\n return {err: {code: \"InvalidAttr\", msg: \"attribute \" + attrName + \" is repeated.\"}};\n }\n }\n\n return true;\n\n}\n\nconst validAttrRegxp = /^[_a-zA-Z][\\w\\-.:]*$/;\n\nfunction validateAttrName(attrName) {\n return util.doesMatch(attrName, validAttrRegxp);\n}\n\n//const startsWithXML = new RegExp(\"^[Xx][Mm][Ll]\");\nconst startsWith = /^([a-zA-Z]|_)[\\w.\\-_:]*/;\n\nfunction validateTagName(tagname) {\n /*if(util.doesMatch(tagname,startsWithXML)) return false;\n else*/\n return !util.doesNotMatch(tagname, startsWith);\n}\n\nmodule.exports = {validate};\n","const util = require(\"./util\");\nconst {XmlNode} = require(\"./xml-node\");\nconst TagType = {\"OPENING\": 1, \"CLOSING\": 2, \"SELF\": 3, \"CDATA\": 4};\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\n//treat cdata as a tag\n\nconst defaultOptions = {\n attributeNamePrefix: \"@_\",\n attrNodeName: false,\n textNodeName: \"#text\",\n ignoreAttributes: true,\n ignoreNameSpace: false,\n allowBooleanAttributes: false, //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseNodeValue: true,\n parseAttributeValue: false,\n arrayMode: false,\n trimValues: true, //Trim string values of tag and attributes\n //decodeHTMLchar: false,\n cdataTagName: false,\n cdataPositionChar: \"\\\\c\",\n tagValueProcessor: (a) => a,\n attrValueProcessor: (a) => a\n //decodeStrict: false,\n};\n\nconst getTraversalObj = (xmlData, options) => {\n //options = buildOptions(options);\n options = Object.assign({}, defaultOptions, options);\n //xmlData = xmlData.replace(/\\r?\\n/g, \" \");//make it single line\n xmlData = xmlData.replace(//g, \"\");//Remove comments\n\n const xmlObj = new XmlNode(\"!xml\");\n let currentNode = xmlObj;\n\n const tagsRegx = /<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|(([\\w:\\-._]*:)?([\\w:\\-._]+))([^>]*)>|((\\/)(([\\w:\\-._]*:)?([\\w:\\-._]+))>))([^<]*)/g;\n let tag = tagsRegx.exec(xmlData);\n let nextTag = tagsRegx.exec(xmlData);\n while (tag) {\n const tagType = checkForTagType(tag);\n\n if (tagType === TagType.CLOSING) {\n //add parsed data to parent node\n if (currentNode.parent && tag[14]) {\n currentNode.parent.val = util.getValue(currentNode.parent.val) + \"\" + processTagValue(tag[14], options);\n }\n\n currentNode = currentNode.parent;\n } else if (tagType === TagType.CDATA) {\n if (options.cdataTagName) {\n //add cdata node\n const childNode = new XmlNode(options.cdataTagName, currentNode, tag[3]);\n childNode.attrsMap = buildAttributesMap(tag[8], options);\n currentNode.addChild(childNode);\n //for backtracking\n currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar;\n //add rest value to parent node\n if (tag[14]) {\n currentNode.val += processTagValue(tag[14], options);\n }\n } else {\n currentNode.val = (currentNode.val || \"\") + (tag[3] || \"\") + processTagValue(tag[14], options);\n }\n } else if (tagType === TagType.SELF) {\n const childNode = new XmlNode(options.ignoreNameSpace ? tag[7] : tag[5], currentNode, \"\");\n if (tag[8] && tag[8].length > 1) {\n tag[8] = tag[8].substr(0, tag[8].length - 1);\n }\n childNode.attrsMap = buildAttributesMap(tag[8], options);\n currentNode.addChild(childNode);\n } else {//TagType.OPENING\n const childNode = new XmlNode(options.ignoreNameSpace ? tag[7] : tag[5], currentNode, processTagValue(tag[14], options));\n childNode.attrsMap = buildAttributesMap(tag[8], options);\n currentNode.addChild(childNode);\n currentNode = childNode;\n }\n\n tag = nextTag;\n nextTag = tagsRegx.exec(xmlData);\n }\n\n return xmlObj;\n};\n\nfunction processTagValue(val, options) {\n if (val) {\n if (options.trimValues) {\n val = val.trim();\n }\n val = options.tagValueProcessor(val);\n val = parseValue(val, options.parseNodeValue);\n }\n\n return val;\n}\n\nfunction checkForTagType(match) {\n if (match[4] === \"]]>\") {\n return TagType.CDATA;\n } else if (match[10] === \"/\") {\n return TagType.CLOSING;\n } else if (typeof match[8] !== \"undefined\" && match[8].substr(match[8].length - 1) === \"/\") {\n return TagType.SELF;\n } else {\n return TagType.OPENING;\n }\n}\n\nfunction resolveNameSpace(tagname, options) {\n if (options.ignoreNameSpace) {\n const tags = tagname.split(\":\");\n const prefix = tagname.charAt(0) === \"/\" ? \"/\" : \"\";\n if (tags[0] === \"xmlns\") {\n return \"\";\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\n\nfunction parseValue(val, shouldParse) {\n if (shouldParse && typeof val === \"string\") {\n if (val.trim() === \"\" || isNaN(val)) {\n val = val === \"true\" ? true : val === \"false\" ? false : val;\n } else {\n if (val.indexOf(\".\") !== -1) {\n val = parseFloat(val);\n } else {\n val = parseInt(val, 10);\n }\n }\n return val;\n }\n if (util.isExist(val)) {\n return val;\n }\n return \"\";\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nconst attrsRegx = new RegExp(\"([^\\\\s=]+)\\\\s*(=\\\\s*(['\\\"])(.*?)\\\\3)?\", \"g\");\n\nfunction buildAttributesMap(attrStr, options) {\n if (!options.ignoreAttributes && typeof attrStr === \"string\") {\n attrStr = attrStr.replace(/\\r?\\n/g, \" \");\n //attrStr = attrStr || attrStr.trim();\n\n const matches = util.getAllMatches(attrStr, attrsRegx);\n const attrs = {};\n for (let match of matches) {\n const attrName = resolveNameSpace(match[1], options);\n if (attrName.length) {\n if (match[4] !== undefined) {\n if (options.trimValues) {\n match[4] = match[4].trim();\n }\n if (options.decodeHTMLchar) {\n match[4] = options.attrValueProcessor(match[4]);\n }\n attrs[options.attributeNamePrefix + attrName] = parseValue(match[4], options.parseAttributeValue);\n } else if (options.allowBooleanAttributes) {\n attrs[options.attributeNamePrefix + attrName] = true;\n }\n\n }\n }\n if (!Object.keys(attrs).length) {\n return;\n }\n if (options.attrNodeName) {\n const attrCollection = {};\n attrCollection[options.attrNodeName] = attrs;\n return attrCollection;\n }\n return attrs;\n }\n}\n\nmodule.exports = {\n defaultOptions,\n getTraversalObj\n};\n","class XmlNode {\n constructor(tagname, parent, val) {\n this.tagname = tagname;\n this.parent = parent;\n\n this.child = {}; //child tags\n this.attrsMap = {}; //attributes map\n\n this.val = val;//text only\n }\n\n addChild(child) {\n if (this.child[child.tagname]) {//already presents\n this.child[child.tagname].push(child);\n } else {\n this.child[child.tagname] = [child];\n }\n }\n}\n\nmodule.exports = {XmlNode};\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack/bootstrap","./src/j2x.js","./src/n2j-str.js","./src/n2j.js","./src/nimn-data.js","./src/parser.js","./src/util.js","./src/validator.js","./src/x2j.js","./src/xml-node.js"],"names":["require","isExist","defaultOptions","attributeNamePrefix","attrNodeName","textNodeName","ignoreAttributes","cdataTagName","cdataPositionChar","format","indentBy","supressEmptyNode","tagValueProcessor","a","attrValueProcessor","Parser","options","Object","assign","isAttribute","attrPrefixLen","length","isCDATA","replaceCDATAstr","replaceCDATAarr","indentate","tagEndChar","newLine","buildTextNode","buildEmptyTextNode","buildObjNode","buildEmptyObjNode","buildTextValNode","buildObjectNode","jObj","j2x","val","level","attrStr","keys","key","attr","Array","isArray","item","result","attrKey","str","cdata","replace","join","v","repeat","name","startsWith","substr","module","exports","isEmptyObject","merge","xmlToNodeobj","convertToJsonString","node","_cToJsonStr","child","tagname","tag","attrsMap","stringval","isNaN","convertToJson","push","char","String","fromCharCode","chars","nilChar","missingChar","nilPremitive","missingPremitive","emptyChar","emptyValue","boundryChar","arrayEnd","objStart","arrStart","charsArr","_e","e_schema","undefined","getValue","hasValidData","hasData","itemSchema","r","processValue","isAppChar","ch","indexOf","convertToNimn","getTraversalObj","validate","j2xParser","parseToNimn","xmlData","schema","parse","getAllMatches","string","regex","matches","match","exec","target","source","obj","doesMatch","doesNotMatch","util","allowBooleanAttributes","buildOptions","props","i","tags","tagFound","readPI","err","readCommentAndCDATA","closingTag","tagName","trim","substring","validateTagName","code","msg","readAttributeStr","value","index","isValid","validateAttributeString","otg","pop","JSON","stringify","start","angleBracketsCount","doubleQuote","singleQuote","startChar","validAttrStrRegxp","RegExp","attrNames","attrName","validateAttrName","hasOwnProperty","validAttrRegxp","XmlNode","TagType","ignoreNameSpace","parseNodeValue","parseAttributeValue","arrayMode","trimValues","xmlObj","currentNode","tagsRegx","nextTag","tagType","checkForTagType","CLOSING","parent","processTagValue","CDATA","childNode","buildAttributesMap","addChild","SELF","parseValue","OPENING","resolveNameSpace","split","prefix","charAt","shouldParse","parseFloat","parseInt","attrsRegx","attrs","attrCollection"],"mappings":"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","file":"./parser.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading wasm modules\n \tvar installedWasmModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// object with all compiled WebAssembly.Modules\n \t__webpack_require__.w = {};\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/parser.js\");\n","const {isExist} = require(\"./util\");\n\nconst defaultOptions = {\n attributeNamePrefix: \"@_\",\n attrNodeName: false,\n textNodeName: \"#text\",\n ignoreAttributes: true,\n cdataTagName: false,\n cdataPositionChar: \"\\\\c\",\n format: false,\n indentBy: \" \",\n supressEmptyNode: false,\n tagValueProcessor: (a) => a,\n attrValueProcessor: (a) => a\n};\n\nclass Parser {\n constructor(options) {\n this.options = Object.assign({}, defaultOptions, options);\n if (this.options.ignoreAttributes || this.options.attrNodeName) {\n this.isAttribute = function(/*a*/) { return false;};\n } else {\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n if (this.options.cdataTagName) {\n this.isCDATA = isCDATA;\n } else {\n this.isCDATA = function(/*a*/) { return false;};\n }\n this.replaceCDATAstr = replaceCDATAstr;\n this.replaceCDATAarr = replaceCDATAarr;\n\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = \">\\n\";\n this.newLine = \"\\n\";\n } else {\n this.indentate = () => \"\";\n this.tagEndChar = \">\";\n this.newLine = \"\";\n }\n\n if (this.options.supressEmptyNode) {\n this.buildTextNode = buildEmptyTextNode;\n this.buildObjNode = buildEmptyObjNode;\n } else {\n this.buildTextNode = buildTextValNode;\n this.buildObjNode = buildObjectNode;\n }\n\n this.buildTextValNode = buildTextValNode;\n this.buildObjectNode = buildObjectNode;\n }\n\n parse(jObj) {\n return this.j2x(jObj, 0).val;\n }\n\n j2x(jObj, level) {\n let attrStr = \"\";\n let val = \"\";\n for (let key of Object.keys(jObj)) {\n if (!isExist(jObj[key])) {\n // supress undefined node\n }\n else if (typeof jObj[key] !== \"object\") {//premitive type\n const attr = this.isAttribute(key);\n if (attr) {\n attrStr += \" \" + attr + \"=\\\"\" + this.options.attrValueProcessor(\"\" + jObj[key]) + \"\\\"\";\n } else if (this.isCDATA(key)) {\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAstr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAstr(\"\", jObj[key]);\n }\n } else {//tag value\n if (key === this.options.textNodeName) {\n if (jObj[this.options.cdataTagName]) {\n //value will added while processing cdata\n } else {\n val += this.options.tagValueProcessor(\"\" + jObj[key]);\n }\n } else {\n val += this.buildTextNode(jObj[key], key, \"\", level);\n }\n }\n } else if (Array.isArray(jObj[key])) {//repeated nodes\n if (this.isCDATA(key)) {\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAarr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAarr(\"\", jObj[key]);\n }\n } else {//nested nodes\n for (let item of jObj[key]) {\n if (!isExist(item)) {\n // supress undefined node\n }\n else if (typeof item === \"object\") {\n const result = this.j2x(item, level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n } else {\n val += this.buildTextNode(item, key, \"\", level);\n }\n }\n }\n } else {\n if (this.options.attrNodeName && key === this.options.attrNodeName) {\n for (let attrKey of Object.keys(jObj[key])) {\n attrStr += \" \" + attrKey + \"=\\\"\" + this.options.tagValueProcessor(\"\" + jObj[key][attrKey]) + \"\\\"\";\n }\n } else {\n const result = this.j2x(jObj[key], level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n }\n }\n }\n return {attrStr: attrStr, val: val};\n }\n}\n\nfunction replaceCDATAstr(str, cdata) {\n str = this.options.tagValueProcessor(\"\" + str);\n if (this.options.cdataPositionChar === \"\" || str === \"\") {\n return str + \"\";\n } else {\n return str.replace(this.options.cdataPositionChar, \"\");\n }\n}\n\nfunction replaceCDATAarr(str, cdata) {\n str = this.options.tagValueProcessor(\"\" + str);\n if (this.options.cdataPositionChar === \"\" || str === \"\") {\n return str + \"\";\n } else {\n for (const v of Object.keys(cdata)) {\n str = str.replace(this.options.cdataPositionChar, \"\");\n }\n return str;\n }\n}\n\nfunction buildObjectNode(val, key, attrStr, level) {\n return this.indentate(level)\n + \"<\" + key + attrStr\n + this.tagEndChar\n + val\n //+ this.newLine\n + this.indentate(level)\n + \"\" + this.options.tagValueProcessor(\"\" + val) + \" 1) {\n jObj += \"\\\"\" + tagname + \"\\\" : [ \";\n for (let tag of Object.keys(node.child[tagname])) {\n jObj += _cToJsonStr(node.child[tagname][tag], options) + \" , \";\n }\n jObj = jObj.substr(0, jObj.length - 1) + \" ] \"; //remove extra comma in last\n } else {\n jObj += \"\\\"\" + tagname + \"\\\" : \" + _cToJsonStr(node.child[tagname][0], options) + \" ,\";\n }\n }\n merge(jObj, node.attrsMap);\n //add attrsMap as new children\n if (isEmptyObject(jObj)) {\n return isExist(node.val) ? node.val : \"\";\n } else {\n if (isExist(node.val)) {\n if (!(typeof node.val === \"string\" && (node.val === \"\" || node.val === options.cdataPositionChar))) {\n jObj += \"\\\"\" + options.textNodeName + \"\\\" : \" + stringval(node.val);\n }\n }\n }\n //add value\n if (jObj[jObj.length - 1] === \",\") {\n jObj = jObj.substr(0, jObj.length - 2);\n }\n return jObj + \"}\";\n};\n\nfunction stringval(v) {\n if (v === true || v === false || !isNaN(v)) {\n return v;\n } else {\n return \"\\\"\" + v + \"\\\"\";\n }\n}\n\nfunction indentate(options, level) {\n return options.indentBy.repeat(level);\n}\n\nmodule.exports = {convertToJsonString};\n","const {isEmptyObject, merge, isExist} = require(\"./util\");\n\nconst convertToJson = function(node, options) {\n const jObj = {};\n\n if ((!node.child || isEmptyObject(node.child)) && (!node.attrsMap || isEmptyObject(node.attrsMap))) {\n return isExist(node.val) ? node.val : \"\";\n } else {\n if (isExist(node.val)) {\n if (!(typeof node.val === \"string\" && (node.val === \"\" || node.val === options.cdataPositionChar))) {\n jObj[options.textNodeName] = node.val;\n }\n }\n }\n\n merge(jObj, node.attrsMap);\n\n for (let tagname of Object.keys(node.child)) {\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj[tagname] = [];\n for (let tag of Object.keys(node.child[tagname])) {\n jObj[tagname].push(convertToJson(node.child[tagname][tag], options));\n }\n } else {\n jObj[tagname] = convertToJson(node.child[tagname][0], options);\n }\n }\n\n //add value\n return jObj;\n};\n\nmodule.exports = {convertToJson};\n","const char = (a) => String.fromCharCode(a);\n\nconst chars = {\n nilChar: char(254),\n missingChar: char(200),\n nilPremitive: char(176),\n missingPremitive: char(201),\n emptyChar: char(177),\n emptyValue: char(178),\n boundryChar: char(186),\n arrayEnd: char(197),\n objStart: char(198),\n arrStart: char(199)\n};\n\nconst charsArr = [\n chars.nilChar,\n chars.nilPremitive,\n chars.missingChar,\n chars.missingPremitive,\n chars.boundryChar,\n chars.emptyChar,\n chars.arrayEnd,\n chars.objStart,\n chars.arrStart\n];\n\nconst _e = (node, e_schema, options) => {\n if (typeof e_schema === \"string\") {//premitive\n if (node && node[0] && node[0].val !== undefined) {\n return getValue(node[0].val, e_schema);\n } else {\n return getValue(node, e_schema);\n }\n } else {\n const hasValidData = hasData(node);\n if (hasValidData === true) {\n let str = \"\";\n if (Array.isArray(e_schema)) {\n //attributes can't be repeated. hence check in children tags only\n str += chars.arrStart;\n const itemSchema = e_schema[0];\n //var itemSchemaType = itemSchema;\n if (typeof itemSchema === \"string\") {\n for (let item of node) {\n const r = getValue(item.val, itemSchema);\n str = processValue(str, r);\n }\n } else {\n for (let item of node) {\n const r = _e(item, itemSchema, options);\n str = processValue(str, r);\n }\n }\n str += chars.arrayEnd;//indicates that next item is not array item\n } else {//object\n str += chars.objStart;\n if (Array.isArray(node)) {\n node = node[0];\n }\n for (let key of Object.keys(e_schema)) {\n //a property defined in schema can be present either in attrsMap or children tags\n //options.textNodeName will not present in both maps, take it's value from val\n //options.attrNodeName will be present in attrsMap\n let r;\n if (!options.ignoreAttributes && node.attrsMap && node.attrsMap[key]) {\n r = _e(node.attrsMap[key], e_schema[key], options);\n } else if (key === options.textNodeName) {\n r = _e(node.val, e_schema[key], options);\n } else {\n r = _e(node.child[key], e_schema[key], options);\n }\n str = processValue(str, r);\n }\n }\n return str;\n } else {\n return hasValidData;\n }\n }\n};\n\nconst getValue = (a/*, type*/) => {\n switch (a) {\n case undefined:\n return chars.missingPremitive;\n case null:\n return chars.nilPremitive;\n case \"\":\n return chars.emptyValue;\n default:\n return a;\n }\n};\n\nconst processValue = (str, r) => {\n if (!isAppChar(r[0]) && !isAppChar(str[str.length - 1])) {\n str += chars.boundryChar;\n }\n return str + r;\n};\n\nconst isAppChar = (ch) => {\n return charsArr.indexOf(ch) !== -1;\n};\n\nconst hasData = (jObj) => {\n if (jObj === undefined) {\n return chars.missingChar;\n } else if (jObj === null) {\n return chars.nilChar;\n } else if (jObj.child && Object.keys(jObj.child).length === 0 && (!jObj.attrsMap || Object.keys(jObj.attrsMap).length === 0)) {\n return chars.emptyChar;\n } else {\n return true;\n }\n};\n\nconst {defaultOptions} = require(\"./x2j\");\nconst convertToNimn = (node, e_schema, options) => {\n options = Object.assign({}, defaultOptions, options);\n return _e(node, e_schema, options);\n};\n\nmodule.exports = {convertToNimn};\n","const {getTraversalObj} = require(\"./x2j\");\nconst {convertToNimn} = require(\"./nimn-data\");\nconst {validate} = require(\"./validator\");\nconst j2xParser = require(\"./j2x\");\nconst {defaultOptions} = require(\"./x2j\");\nconst {convertToJson} = require(\"./n2j\");\nconst {convertToJsonString} = require(\"./n2j-str\");\n\nconst parseToNimn = (xmlData, schema, options) => convertToNimn(getTraversalObj(xmlData, options), schema, options);\n\nconst parse = (xmlData, options) => {\n options = Object.assign({}, defaultOptions, options);\n return convertToJson(getTraversalObj(xmlData, options), options);\n};\n\nmodule.exports = {\n parse,\n parseToNimn,\n convertToJson,\n convertToJsonString,\n convertToNimn,\n getTraversalObj,\n validate,\n j2xParser\n};\n","const getAllMatches = (string, regex) => {\n const matches = [];\n let match;\n while (match = regex.exec(string)) {\n matches.push([...match]);\n }\n return matches;\n};\n\n/**\n * Copy all the properties of a into b.\n * @param {*} target\n * @param {*} source\n */\nconst merge = (target, source) => {\n if (source) {\n for (let key of Object.keys(source)) {\n target[key] = source[key];\n }\n }\n return target;\n};\n\nconst isEmptyObject = (obj) => Object.keys(obj).length === 0;\nconst isExist = (v) => typeof v !== \"undefined\";\n\nconst doesMatch = (string, regex) => {\n const match = regex.exec(string);\n return !(match === null || !isExist(match));\n};\n\nconst doesNotMatch = (string, regex) => !doesMatch(string, regex);\n\nconst getValue = (v) => isExist(v) ? v : \"\";\n\n// const fakeCall = function(a) {return a;};\n// const fakeCallNoReturn = function() {};\nmodule.exports = {\n getValue,\n merge,\n isEmptyObject,\n isExist,\n doesMatch,\n doesNotMatch,\n getAllMatches\n};\n","const util = require(\"./util\");\n\nconst defaultOptions = {\n allowBooleanAttributes: false //A tag can have attributes without any value\n};\n\nconst buildOptions = (options) => {\n if (!options) {\n options = {};\n }\n const props = [\"allowBooleanAttributes\"];\n for (let i of props) {\n if (options[props[i]] === undefined) {\n options[props[i]] = defaultOptions[props[i]];\n }\n }\n return options;\n};\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nconst validate = (xmlData, options) => {\n options = buildOptions(options);\n\n //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n //xmlData = xmlData.replace(/()/g,\"\");//Remove DOCTYPE\n\n const tags = [];\n let tagFound = false;\n for (let i = 0; i < xmlData.length; i++) {\n\n if (xmlData[i] === \"<\") {//starting of tag\n //read until you reach to '>' avoiding any '>' in attribute value\n i++;\n if (xmlData[i] === \"?\") {\n i = readPI(xmlData, ++i);\n if (i.err) {\n return i;\n }\n } else if (xmlData[i] === \"!\") {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i] === \"/\") {//closing tag\n closingTag = true;\n i++;\n }\n //read tagname\n let tagName = \"\";\n for (; i < xmlData.length &&\n xmlData[i] !== \">\" &&\n xmlData[i] !== \" \" &&\n xmlData[i] !== \"\\t\"; i++) {\n\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n //console.log(tagName);\n\n if (tagName[tagName.length - 1] === \"/\") {//self closing tag without attributes\n tagName = tagName.substring(0, tagName.length - 1);\n continue;\n }\n if (!validateTagName(tagName)) {\n return {err: {code: \"InvalidTag\", msg: \"Tag \" + tagName + \" is an invalid name.\"}};\n }\n\n const result = readAttributeStr(xmlData, i);\n if (result === false) {\n return {err: {code: \"InvalidAttr\", msg: \"Attributes for \" + tagName + \" have open quote\"}};\n }\n let attrStr = result.value;\n i = result.index;\n\n if (attrStr[attrStr.length - 1] === \"/\") {//self closing tag\n attrStr = attrStr.substring(0, attrStr.length - 1);\n const isValid = validateAttributeString(attrStr, options);\n if (isValid === true) {\n tagFound = true;\n continue;\n } else {\n return isValid;\n }\n } else if (closingTag) {\n if (attrStr.trim().length > 0) {\n return {err: {code: \"InvalidTag\", msg: \"closing tag \" + tagName + \" can't have attributes or invalid starting.\"}};\n } else {\n const otg = tags.pop();\n if (tagName !== otg) {\n return {err: {code: \"InvalidTag\", msg: \"closing tag \" + otg + \" is expected inplace of \" + tagName + \".\"}};\n }\n }\n } else {\n const isValid = validateAttributeString(attrStr, options);\n if (isValid !== true) {\n return isValid;\n }\n tags.push(tagName);\n tagFound = true;\n }\n\n //skip tag text value\n //It may include comments and CDATA value\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {\n if (xmlData[i + 1] === \"!\") {//comment or CADATA\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n break;\n }\n }\n }//end of reading tag text value\n if (xmlData[i] === \"<\") {\n i--;\n }\n }\n } else {\n if (xmlData[i] === \" \" || xmlData[i] === \"\\t\" || xmlData[i] === \"\\n\" || xmlData[i] === \"\\r\") {\n continue;\n }\n return {err: {code: \"InvalidChar\", msg: \"char \" + xmlData[i] + \" is not expected .\"}};\n }\n }\n\n if (!tagFound) {\n return {err: {code: \"InvalidXml\", msg: \"Start tag expected.\"}};\n } else if (tags.length > 0) {\n return {err: {code: \"InvalidXml\", msg: \"Invalid \" + JSON.stringify(tags, null, 4).replace(/\\r?\\n/g, \"\") + \" found.\"}};\n }\n\n return true;\n};\n\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n const start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === \"?\" || xmlData[i] === \" \") { //tagName\n const tagName = xmlData.substr(start, i - start);\n if (i > 5 && tagName === \"xml\") {\n return {err: {code: \"InvalidXml\", msg: \"XML declaration allowed only at the start of the document.\"}};\n } else if (xmlData[i] === \"?\" && xmlData[i + 1] === \">\") {\n //check if valid attribute string\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\n\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === \"-\" && xmlData[i + 2] === \"-\") {//comment\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === \"-\" && xmlData[i + 1] === \"-\" && xmlData[i + 2] === \">\") {\n i += 2;\n break;\n }\n }\n } else if (xmlData.length > i + 8 &&\n xmlData[i + 1] === \"D\" &&\n xmlData[i + 2] === \"O\" &&\n xmlData[i + 3] === \"C\" &&\n xmlData[i + 4] === \"T\" &&\n xmlData[i + 5] === \"Y\" &&\n xmlData[i + 6] === \"P\" &&\n xmlData[i + 7] === \"E\") {\n let angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {angleBracketsCount++;}\n else if (xmlData[i] === \">\") {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (xmlData.length > i + 9 &&\n xmlData[i + 1] === \"[\" &&\n xmlData[i + 2] === \"C\" &&\n xmlData[i + 3] === \"D\" &&\n xmlData[i + 4] === \"A\" &&\n xmlData[i + 5] === \"T\" &&\n xmlData[i + 6] === \"A\" &&\n xmlData[i + 7] === \"[\") {\n\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === \"]\" && xmlData[i + 1] === \"]\" && xmlData[i + 2] === \">\") {\n i += 2;\n break;\n }\n }\n }\n\n return i;\n}\n\nconst doubleQuote = \"\\\"\";\nconst singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n let attrStr = \"\";\n let startChar = \"\";\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === \"\") {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) {\n //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n continue;\n } else {\n startChar = \"\";\n }\n } else if (xmlData[i] === \">\") {\n if (startChar === \"\") {\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== \"\") {\n return false;\n }\n\n return {value: attrStr, index: i};\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nconst validAttrStrRegxp = new RegExp(\"(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\\\"])(([\\\\s\\\\S])*?)\\\\5)?\", \"g\");\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n //console.log(\"start:\"+attrStr+\":end\");\n\n //if(attrStr.trim().length === 0) return true; //empty string\n\n const matches = util.getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = [];\n\n for (let match of matches) {\n //console.log(matches[i]);\n\n if (match[1].length === 0) {//nospace before attribute name: a=\"sd\"b=\"saf\"\n return {err: {code: \"InvalidAttr\", msg: \"attribute \" + match[2] + \" has no space in starting.\"}};\n } else if (match[3] === undefined && !options.allowBooleanAttributes) {//independent attribute: ab\n return {err: {code: \"InvalidAttr\", msg: \"boolean attribute \" + match[2] + \" is not allowed.\"}};\n }\n /* else if(matches[i][6] === undefined){//attribute without value: ab=\n return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n } */\n const attrName = match[2];\n if (!validateAttrName(attrName)) {\n return {err: {code: \"InvalidAttr\", msg: \"attribute \" + attrName + \" is an invalid name.\"}};\n }\n if (!attrNames.hasOwnProperty(attrName)) {//check for duplicate attribute.\n attrNames[attrName] = 1;\n } else {\n return {err: {code: \"InvalidAttr\", msg: \"attribute \" + attrName + \" is repeated.\"}};\n }\n }\n\n return true;\n\n}\n\nconst validAttrRegxp = /^[_a-zA-Z][\\w\\-.:]*$/;\n\nfunction validateAttrName(attrName) {\n return util.doesMatch(attrName, validAttrRegxp);\n}\n\n//const startsWithXML = new RegExp(\"^[Xx][Mm][Ll]\");\nconst startsWith = /^([a-zA-Z]|_)[\\w.\\-_:]*/;\n\nfunction validateTagName(tagname) {\n /*if(util.doesMatch(tagname,startsWithXML)) return false;\n else*/\n return !util.doesNotMatch(tagname, startsWith);\n}\n\nmodule.exports = {validate};\n","const util = require(\"./util\");\nconst {XmlNode} = require(\"./xml-node\");\nconst TagType = {\"OPENING\": 1, \"CLOSING\": 2, \"SELF\": 3, \"CDATA\": 4};\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\n//treat cdata as a tag\n\nconst defaultOptions = {\n attributeNamePrefix: \"@_\",\n attrNodeName: false,\n textNodeName: \"#text\",\n ignoreAttributes: true,\n ignoreNameSpace: false,\n allowBooleanAttributes: false, //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseNodeValue: true,\n parseAttributeValue: false,\n arrayMode: false,\n trimValues: true, //Trim string values of tag and attributes\n cdataTagName: false,\n cdataPositionChar: \"\\\\c\",\n tagValueProcessor: (a) => a,\n attrValueProcessor: (a) => a\n //decodeStrict: false,\n};\n\nconst getTraversalObj = (xmlData, options) => {\n //options = buildOptions(options);\n options = Object.assign({}, defaultOptions, options);\n //xmlData = xmlData.replace(/\\r?\\n/g, \" \");//make it single line\n xmlData = xmlData.replace(//g, \"\");//Remove comments\n\n const xmlObj = new XmlNode(\"!xml\");\n let currentNode = xmlObj;\n\n const tagsRegx = /<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|(([\\w:\\-._]*:)?([\\w:\\-._]+))([^>]*)>|((\\/)(([\\w:\\-._]*:)?([\\w:\\-._]+))>))([^<]*)/g;\n let tag = tagsRegx.exec(xmlData);\n let nextTag = tagsRegx.exec(xmlData);\n while (tag) {\n const tagType = checkForTagType(tag);\n\n if (tagType === TagType.CLOSING) {\n //add parsed data to parent node\n if (currentNode.parent && tag[14]) {\n currentNode.parent.val = util.getValue(currentNode.parent.val) + \"\" + processTagValue(tag[14], options);\n }\n\n currentNode = currentNode.parent;\n } else if (tagType === TagType.CDATA) {\n if (options.cdataTagName) {\n //add cdata node\n const childNode = new XmlNode(options.cdataTagName, currentNode, tag[3]);\n childNode.attrsMap = buildAttributesMap(tag[8], options);\n currentNode.addChild(childNode);\n //for backtracking\n currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar;\n //add rest value to parent node\n if (tag[14]) {\n currentNode.val += processTagValue(tag[14], options);\n }\n } else {\n currentNode.val = (currentNode.val || \"\") + (tag[3] || \"\") + processTagValue(tag[14], options);\n }\n } else if (tagType === TagType.SELF) {\n const childNode = new XmlNode(options.ignoreNameSpace ? tag[7] : tag[5], currentNode, \"\");\n if (tag[8] && tag[8].length > 1) {\n tag[8] = tag[8].substr(0, tag[8].length - 1);\n }\n childNode.attrsMap = buildAttributesMap(tag[8], options);\n currentNode.addChild(childNode);\n } else {//TagType.OPENING\n const childNode = new XmlNode(options.ignoreNameSpace ? tag[7] : tag[5], currentNode, processTagValue(tag[14], options));\n childNode.attrsMap = buildAttributesMap(tag[8], options);\n currentNode.addChild(childNode);\n currentNode = childNode;\n }\n\n tag = nextTag;\n nextTag = tagsRegx.exec(xmlData);\n }\n\n return xmlObj;\n};\n\nfunction processTagValue(val, options) {\n if (val) {\n if (options.trimValues) {\n val = val.trim();\n }\n val = options.tagValueProcessor(val);\n val = parseValue(val, options.parseNodeValue);\n }\n\n return val;\n}\n\nfunction checkForTagType(match) {\n if (match[4] === \"]]>\") {\n return TagType.CDATA;\n } else if (match[10] === \"/\") {\n return TagType.CLOSING;\n } else if (typeof match[8] !== \"undefined\" && match[8].substr(match[8].length - 1) === \"/\") {\n return TagType.SELF;\n } else {\n return TagType.OPENING;\n }\n}\n\nfunction resolveNameSpace(tagname, options) {\n if (options.ignoreNameSpace) {\n const tags = tagname.split(\":\");\n const prefix = tagname.charAt(0) === \"/\" ? \"/\" : \"\";\n if (tags[0] === \"xmlns\") {\n return \"\";\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\n\nfunction parseValue(val, shouldParse) {\n if (shouldParse && typeof val === \"string\") {\n if (val.trim() === \"\" || isNaN(val)) {\n val = val === \"true\" ? true : val === \"false\" ? false : val;\n } else {\n if (val.indexOf(\".\") !== -1) {\n val = parseFloat(val);\n } else {\n val = parseInt(val, 10);\n }\n }\n return val;\n }\n if (util.isExist(val)) {\n return val;\n }\n return \"\";\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nconst attrsRegx = new RegExp(\"([^\\\\s=]+)\\\\s*(=\\\\s*(['\\\"])(.*?)\\\\3)?\", \"g\");\n\nfunction buildAttributesMap(attrStr, options) {\n if (!options.ignoreAttributes && typeof attrStr === \"string\") {\n attrStr = attrStr.replace(/\\r?\\n/g, \" \");\n //attrStr = attrStr || attrStr.trim();\n\n const matches = util.getAllMatches(attrStr, attrsRegx);\n const attrs = {};\n for (let match of matches) {\n const attrName = resolveNameSpace(match[1], options);\n if (attrName.length) {\n if (match[4] !== undefined) {\n if (options.trimValues) {\n match[4] = match[4].trim();\n }\n matches[i][4] = options.attrValueProcessor(matches[i][4]);\n attrs[options.attributeNamePrefix + attrName] = parseValue(matches[i][4], options.parseAttributeValue);\n } else if (options.allowBooleanAttributes) {\n attrs[options.attributeNamePrefix + attrName] = true;\n }\n\n }\n }\n if (!Object.keys(attrs).length) {\n return;\n }\n if (options.attrNodeName) {\n const attrCollection = {};\n attrCollection[options.attrNodeName] = attrs;\n return attrCollection;\n }\n return attrs;\n }\n}\n\nmodule.exports = {\n defaultOptions,\n getTraversalObj\n};\n","class XmlNode {\n constructor(tagname, parent, val) {\n this.tagname = tagname;\n this.parent = parent;\n\n this.child = {}; //child tags\n this.attrsMap = {}; //attributes map\n\n this.val = val;//text only\n }\n\n addChild(child) {\n if (this.child[child.tagname]) {//already presents\n this.child[child.tagname].push(child);\n } else {\n this.child[child.tagname] = [child];\n }\n }\n}\n\nmodule.exports = {XmlNode};\n"],"sourceRoot":""} \ No newline at end of file diff --git a/src/cli.js b/src/cli.js index bb33cf96..96496f2f 100644 --- a/src/cli.js +++ b/src/cli.js @@ -12,15 +12,17 @@ const writeToFile = (fileName, data) => { }; if (process.argv[2] === "--help" || process.argv[2] === "-h") { - console.log("Fast XML Parser " + require("../package.json").version); - console.log("----------------"); - console.log("xml2js [-ns|-a|-c|-v|-V] [-o outputfile.json]"); - console.log("cat xmlfile.xml | xml2js [-ns|-a|-c|-v|-V] [-o outputfile.json]"); - console.log("-ns: remove namespace from tag and atrribute name."); - console.log("-a: don't parse attributes."); - console.log("-c: parse values to premitive type."); - console.log("-v: validate before parsing."); - console.log("-V: validate only."); + console.log(`\ +Fast XML Parser ${require("../package.json").version} +---------------- +xml2js [-ns|-a|-c|-v|-V] [-o outputFile.json] +cat xmlFile.xml | xml2js [-ns|-a|-c|-v|-V] [-o outputFile.json] +-ns: remove namespace from tag and attribute name. +-a: don't parse attributes. +-c: parse values to primitive type. +-v: validate before parsing. +-V: validate only.\ +`); } else if (process.argv[2] === "--version") { console.log(require("../package.json").version); } else { diff --git a/src/j2x.js b/src/j2x.js index dbc4c0f4..30983721 100644 --- a/src/j2x.js +++ b/src/j2x.js @@ -1,4 +1,3 @@ -"use strict"; const {isExist} = require("./util"); const defaultOptions = { @@ -15,21 +14,22 @@ const defaultOptions = { attrValueProcessor: (a) => a }; -function Parser(options) { - this.options = Object.assign({}, defaultOptions, options); - if (this.options.ignoreAttributes || this.options.attrNodeName) { - this.isAttribute = function(/*a*/) { return false;}; - } else { - this.attrPrefixLen = this.options.attributeNamePrefix.length; - this.isAttribute = isAttribute; - } - if (this.options.cdataTagName) { - this.isCDATA = isCDATA; - } else { - this.isCDATA = function(/*a*/) { return false;}; - } - this.replaceCDATAstr = replaceCDATAstr; - this.replaceCDATAarr = replaceCDATAarr; +class Parser { + constructor(options) { + this.options = Object.assign({}, defaultOptions, options); + if (this.options.ignoreAttributes || this.options.attrNodeName) { + this.isAttribute = function(/*a*/) { return false;}; + } else { + this.attrPrefixLen = this.options.attributeNamePrefix.length; + this.isAttribute = isAttribute; + } + if (this.options.cdataTagName) { + this.isCDATA = isCDATA; + } else { + this.isCDATA = function(/*a*/) { return false;}; + } + this.replaceCDATAstr = replaceCDATAstr; + this.replaceCDATAarr = replaceCDATAarr; if (this.options.format) { this.indentate = indentate; @@ -51,7 +51,6 @@ function Parser(options) { this.buildTextValNode = buildTextValNode; this.buildObjectNode = buildObjectNode; - } parse(jObj) { @@ -80,7 +79,7 @@ function Parser(options) { if (jObj[this.options.cdataTagName]) { //value will added while processing cdata } else { - val += this.options.tagValueProcessor("" + jObj[key]); + val += this.options.tagValueProcessor("" + jObj[key]); } } else { val += this.buildTextNode(jObj[key], key, "", level); @@ -181,7 +180,7 @@ function indentate(level) { } function isAttribute(name/*, options*/) { - if (name.startsWith(this.options.attributeNamePrefix)) { + if (!this.options.attrNodeName && name.startsWith(this.options.attributeNamePrefix)) { return name.substr(this.attrPrefixLen); } else { return false; diff --git a/src/n2j-str.js b/src/n2j-str.js index 703d2da9..537a5376 100644 --- a/src/n2j-str.js +++ b/src/n2j-str.js @@ -56,4 +56,4 @@ function indentate(options, level) { return options.indentBy.repeat(level); } -module.exports={convertToJsonString}; +module.exports = {convertToJsonString}; diff --git a/src/n2j.js b/src/n2j.js index 5d618ab5..164dc378 100644 --- a/src/n2j.js +++ b/src/n2j.js @@ -30,4 +30,4 @@ const convertToJson = function(node, options) { return jObj; }; -module.exports = { convertToJson}; +module.exports = {convertToJson}; diff --git a/src/x2j.js b/src/x2j.js index 720884cd..a0809c14 100644 --- a/src/x2j.js +++ b/src/x2j.js @@ -15,12 +15,12 @@ const defaultOptions = { ignoreNameSpace: false, allowBooleanAttributes: false, //a tag can have attributes without any value //ignoreRootElement : false, - parseNodeValue: true, - parseAttributeValue: false, - arrayMode: false, - trimValues: true, //Trim string values of tag and attributes - cdataTagName: false, - cdataPositionChar: "\\c", + parseNodeValue: true, + parseAttributeValue: false, + arrayMode: false, + trimValues: true, //Trim string values of tag and attributes + cdataTagName: false, + cdataPositionChar: "\\c", tagValueProcessor: (a) => a, attrValueProcessor: (a) => a //decodeStrict: false, diff --git a/tasks/postbundle.js b/tasks/postbundle.js deleted file mode 100644 index bc58c8ed..00000000 --- a/tasks/postbundle.js +++ /dev/null @@ -1,11 +0,0 @@ -var fs = require('fs') -fs.readFile("lib/parser.js", 'utf8', function (err,data) { - if (err) { - return console.log(err); - } - var result = data.replace(/const |let /g, 'var '); - - fs.writeFile("lib/parser.js", result, 'utf8', function (err) { - if (err) return console.log(err); - }); -}); \ No newline at end of file diff --git a/test/attr.spec.js b/test/attr.spec.js index c904674c..c302ceb0 100644 --- a/test/attr.spec.js +++ b/test/attr.spec.js @@ -85,7 +85,6 @@ describe("XMLParser", function() { attributeNamePrefix: "", ignoreAttributes: false, parseAttributeValue: true, - decodeHTMLchar: true, attrValueProcessor: a => he.decode(a, {isAttributeValue: true}) }); diff --git a/test/cdata.spec.js b/test/cdata.spec.js index 2099f59e..b4b086fb 100644 --- a/test/cdata.spec.js +++ b/test/cdata.spec.js @@ -20,12 +20,12 @@ describe("XMLParser", function() { 122233344550, 122233344551 ], - "name": [ + "name": [ `JackJack`, `Mohan` ], "blank": "", - "regx": "^[ ].*$" + "regx": "^[ ].*$" } } }; @@ -53,13 +53,13 @@ describe("XMLParser", function() { "sql-queries": { "sql-query": [ { - "@_id": "testquery", + "@_id": "testquery", "#text": "select * from search_urls" }, { - "@_id": "searchinfo", + "@_id": "searchinfo", "#text": "select * from search_urls where search_urls=?" }, { - "@_id": "searchurls", + "@_id": "searchurls", "#text": "select search_url from search_urls " } ] @@ -207,11 +207,11 @@ describe("XMLParser", function() { }, "b": "text", "c": { - "#text": "\\cafter", + "#text": "\\cafter", "__cdata": "text" }, "d": { - "#text": "23\\c24", + "#text": "23\\c24", "__cdata": "" } } @@ -219,7 +219,7 @@ describe("XMLParser", function() { const result = parse(xmlData, { ignoreAttributes: false, - cdataTagName: "__cdata" + cdataTagName: "__cdata" }); //console.log(JSON.stringify(result,null,4)); @@ -241,19 +241,19 @@ describe("XMLParser", function() { }, "b": "text", "c": { - "#text": "after", + "#text": "after", "__cdata": "text" }, "d": { - "#text": "2324", + "#text": "2324", "__cdata": "" } } }; const result = parse(xmlData, { - ignoreAttributes: false, - cdataTagName: "__cdata", + ignoreAttributes: false, + cdataTagName: "__cdata", cdataPositionChar: "" }); @@ -269,12 +269,12 @@ describe("XMLParser", function() { const expected = { "ns:root": { - "ptag": [ + "ptag": [ { "nestedtag": "nesteddata", - "@_attr": "val", + "@_attr": "val", "@_boolean": true, - "#text": "some dataafter" + "#text": "some dataafter" }, "before text\n \n nested cdata 1\n \n middle\n \n nested cdata 2\n \n after\n \n nested cdata 3\n \n end" ], @@ -283,7 +283,7 @@ describe("XMLParser", function() { }; const result = parse(xmlData, { - ignoreAttributes: false, + ignoreAttributes: false, allowBooleanAttributes: true }); //console.log(JSON.stringify(result,null,4)); diff --git a/test/j2x.spec.js b/test/j2x.spec.js index d2d353b7..bbb77881 100644 --- a/test/j2x.spec.js +++ b/test/j2x.spec.js @@ -1,4 +1,5 @@ const {j2xParser: Parser} = require("../parser"); +const {isAttribute} = require("../src/j2x"); const he = require("he"); describe("XMLParser", function() { @@ -246,7 +247,6 @@ describe("XMLParser", function() { const parser = new Parser({ cdataTagName: "__cdata", attrNodeName: "@", - encodeHTMLchar: true, tagValueProcessor: (a) => he.encode(a, {useNamedReferences: true}), attrValueProcessor: (a) => he.encode(a, {isAttributeValue: isAttribute, useNamedReferences: true}) }); @@ -259,8 +259,8 @@ describe("XMLParser", function() { it("should supress empty node to self closing node when parsing to XML", function() { const jObj = { a: { - "notattr" : "val", - "@": { + "notattr": "val", + "@": { b: "val>1", c: "val<2" }, @@ -282,10 +282,9 @@ describe("XMLParser", function() { } }; const parser = new Parser({ - cdataTagName: "__cdata", + cdataTagName: "__cdata", attributeNamePrefix: "", - attrNodeName: "@", - encodeHTMLchar: true, + attrNodeName: "@", supressEmptyNode: true, tagValueProcessor: (a) => he.encode(a, {useNamedReferences: true}), attrValueProcessor: (a) => he.encode(a, {isAttributeValue: isAttribute, useNamedReferences: true}) @@ -317,7 +316,6 @@ describe("XMLParser", function() { const parser = new Parser({ cdataTagName: "__cdata", attrNodeName: "@", - encodeHTMLchar: true, format: true, tagValueProcessor: (a) => he.encode(a, {useNamedReferences: true}), attrValueProcessor: (a) => he.encode(a, {isAttributeValue: isAttribute, useNamedReferences: true}) @@ -335,11 +333,10 @@ text from CDATA]]>value> from CDATA]]>value>1test'; + const expected = "1test"; //console.log(result); //console.log(expected); expect(result).equal(expected); diff --git a/test/validator.spec.js b/test/validator.spec.js index e27077b4..456cc169 100644 --- a/test/validator.spec.js +++ b/test/validator.spec.js @@ -18,7 +18,7 @@ describe("XMLParser", function() { const xmlData = "< rootNode>"; const expected = { "code": "InvalidTag", - "msg": "Tag is an invalid name." + "msg": "Tag is an invalid name." }; const result = validate(xmlData).err; @@ -30,7 +30,7 @@ describe("XMLParser", function() { const xmlData = ""; const expected = { "code": "InvalidXml", - "msg": "Invalid [ \"rootNode\"] found." + "msg": "Invalid [ \"rootNode\"] found." }; const result = validate(xmlData).err; @@ -237,7 +237,7 @@ describe("XMLParser", function() { const xmlData = "<2start_tag abc='123' bc='567'>"; const expected = { "code": "InvalidTag", - "msg": "Tag 2start_tag is an invalid name." + "msg": "Tag 2start_tag is an invalid name." }; const result = validate(xmlData).err; //console.log(JSON.stringify(result,null,4)); @@ -248,7 +248,7 @@ describe("XMLParser", function() { const xmlData = "<2start_tag />"; const expected = { "code": "InvalidTag", - "msg": "Tag 2start_tag is an invalid name." + "msg": "Tag 2start_tag is an invalid name." }; const result = validate(xmlData).err; //console.log(JSON.stringify(result,null,4)); @@ -325,7 +325,7 @@ describe("XMLParser", function() { const xmlData = " Hello World."; const expected = { "code": "InvalidXml", - "msg": "XML declaration allowed only at the start of the document." + "msg": "XML declaration allowed only at the start of the document." }; const result = validate(xmlData).err; @@ -338,7 +338,7 @@ describe("XMLParser", function() { ""; const expected = { "code": "InvalidXml", - "msg": "Start tag expected." + "msg": "Start tag expected." }; const result = validate(xmlData).err; expect(result).eql(expected); @@ -354,30 +354,30 @@ describe("XMLParser", function() { "]>"; const expected = { "code": "InvalidXml", - "msg": "Start tag expected." + "msg": "Start tag expected." }; const result = validate(xmlData).err; expect(result).eql(expected); }); - - it("should validate XML PIs", function () { - var xmlData = '' - +'' - +'

' - +''; - + + it("should validate XML PIs", function() { + var xmlData = "" + + "" + + "

" + + ""; + var result = validate(xmlData); expect(result).equal(true); }); - it("should not validate XML PIs with invalid values", function () { - var xmlData = '' - +'" ?>' - +'

' - +''; + it("should not validate XML PIs with invalid values", function() { + var xmlData = "" + + "\" ?>" + + "

" + + ""; + + var expected = {code: "InvalidChar", msg: "char \" is not expected ."}; - var expected = { code: 'InvalidChar', msg: 'char " is not expected .' } - var result = validate(xmlData).err; expect(result).eql(expected); }); diff --git a/test/xml-parser.spec.js b/test/xml-parser.spec.js index 357916ee..51e814f1 100644 --- a/test/xml-parser.spec.js +++ b/test/xml-parser.spec.js @@ -6,9 +6,9 @@ describe("XMLParser", function() { const xmlData = `valuetrue04565.34`; const expected = { "rootNode": { - "tag": "value", - "boolean": true, - "intTag": 45, + "tag": "value", + "boolean": true, + "intTag": 45, "floatTag": 65.34 } }; @@ -22,9 +22,9 @@ describe("XMLParser", function() { const xmlData = `valuetrue04565.34`; const expected = { "rootNode": { - "tag": "value", - "boolean": "true", - "intTag": "045", + "tag": "value", + "boolean": "true", + "intTag": "045", "floatTag": "65.34" } }; @@ -40,15 +40,15 @@ describe("XMLParser", function() { const expected = { "rootNode": { "tag": { - "#text": "value", - "@_int": 45, + "#text": "value", + "@_int": 45, "@_float": 65.34 } } }; const result = parser.parse(xmlData, { - ignoreAttributes: false, + ignoreAttributes: false, parseAttributeValue: true }); @@ -59,8 +59,8 @@ describe("XMLParser", function() { const xmlData = `value045065.34`; const expected = { "rootNode": { - "tag": "value", - "intTag": [45, 0], + "tag": "value", + "intTag": [45, 0], "floatTag": 65.34 } }; @@ -75,8 +75,8 @@ describe("XMLParser", function() { const xmlData = `value4565.34`; const expected = { "rootNode": { - "tag": "value", - "intTag": 45, + "tag": "value", + "intTag": 45, "floatTag": 65.34 } }; @@ -97,17 +97,17 @@ describe("XMLParser", function() { const expected = { "node": { - "tag": { + "tag": { "@_arg": "value", "#text": "value" }, - "intTag": { - "@_arg": "value", + "intTag": { + "@_arg": "value", "@_arg2": "value2", - "#text": 45 + "#text": 45 }, - "floatTag": 65.34, - "nsTag": { + "floatTag": 65.34, + "nsTag": { "@_attr": "tns" //"#text": "" }, @@ -116,7 +116,7 @@ describe("XMLParser", function() { }; const result = parser.parse(xmlData, { - ignoreNameSpace: true, + ignoreNameSpace: true, ignoreAttributes: false }); @@ -224,24 +224,24 @@ describe("XMLParser", function() { { "@_attr1": "some val", "@_attr2": "another val", - "tag": [ + "tag": [ "value", { "@_attr1": "val", "@_attr2": "234", - "#text": 45 + "#text": 45 }, 65.34 ] }, { "@_attr1": "some val", "@_attr2": "another val", - "tag": [ + "tag": [ "value", { "@_attr1": "val", "@_attr2": "234", - "#text": 45 + "#text": 45 }, 65.34 ] @@ -261,14 +261,14 @@ describe("XMLParser", function() { const expected = { "rootNode": { "@_attr1": " some val ", - "@_name": "another val", - "#text": " some val " + "@_name": "another val", + "#text": " some val " } }; const result = parser.parse(xmlData, { ignoreAttributes: false, - trimValues: false + trimValues: false }); expect(result).eql(expected); }); @@ -279,7 +279,7 @@ describe("XMLParser", function() { "rootNode": { "@_attr1": "some val", "@_attr2": "another val", - "#text": "val" + "#text": "val" } }; @@ -308,13 +308,13 @@ describe("XMLParser", function() { "score": { "c1": { "message": 23, - "_text": "7129" + "_text": "7129" } } }; const result = parser.parse(xmlData, { - textNodeName: "_text", + textNodeName: "_text", ignoreAttributes: false }); @@ -336,12 +336,12 @@ describe("XMLParser", function() { "@_date": "2017-05-03", "@_type": "A", "@_name": "Meeting 'A'", - "Event": { + "Event": { "@_time": "00:05:00", - "@_ID": "574", + "@_ID": "574", "@_Name": "Some Event Name", - "User": { - "@_ID": "1", + "User": { + "@_ID": "1", "#text": "Bob" } } @@ -350,7 +350,7 @@ describe("XMLParser", function() { }; const result = parser.parse(xmlData, { - ignoreAttributes: false, + ignoreAttributes: false, ignoreNonTextNodeAttr: false }); @@ -369,20 +369,20 @@ describe("XMLParser", function() { const expected = { "root": { "Meet": { - "$": { + "$": { "nsattr": "attr", - "date": "2017-05-03", - "type": "A", - "name": "Meeting 'A'" + "date": "2017-05-03", + "type": "A", + "name": "Meeting 'A'" }, "Event": { - "$": { + "$": { "time": "00:05:00", - "ID": "574", + "ID": "574", "Name": "Some Event Name" }, "User": { - "$": { + "$": { "ID": "1" }, "#text": "Bob" @@ -394,9 +394,9 @@ describe("XMLParser", function() { const result = parser.parse(xmlData, { attributeNamePrefix: "", - attrNodeName: "$", - ignoreNameSpace: true, - ignoreAttributes: false + attrNodeName: "$", + ignoreNameSpace: true, + ignoreAttributes: false }); //console.log(JSON.stringify(result,null,4)); @@ -411,14 +411,14 @@ describe("XMLParser", function() { const expected = { "any_name": { - "@attr": "https://example.com/somepath", + "@attr": "https://example.com/somepath", "person": [ { - "@id": "101", - "phone": [122233344550, 122233344551], - "name": "Jack", - "age": 33, - "emptyNode": "", + "@id": "101", + "phone": [122233344550, 122233344551], + "name": "Jack", + "age": 33, + "emptyNode": "", "booleanNode": [false, true], "selfclosing": [ "", @@ -426,46 +426,46 @@ describe("XMLParser", function() { "@with": "value" } ], - "married": { + "married": { "@firstTime": "No", - "@attr": "val 2", - "#_text": "Yes" + "@attr": "val 2", + "#_text": "Yes" }, - "birthday": "Wed, 28 Mar 1979 12:13:14 +0300", - "address": [ + "birthday": "Wed, 28 Mar 1979 12:13:14 +0300", + "address": [ { - "city": "New York", - "street": "Park Ave", + "city": "New York", + "street": "Park Ave", "buildingNo": 1, - "flatNo": 1 + "flatNo": 1 }, { - "city": "Boston", - "street": "Centre St", + "city": "Boston", + "street": "Centre St", "buildingNo": 33, - "flatNo": 24 + "flatNo": 24 } ] }, { - "@id": "102", - "phone": [122233344553, 122233344554], - "name": "Boris", - "age": 34, - "married": { + "@id": "102", + "phone": [122233344553, 122233344554], + "name": "Boris", + "age": 34, + "married": { "@firstTime": "Yes", - "#_text": "Yes" + "#_text": "Yes" }, "birthday": "Mon, 31 Aug 1970 02:03:04 +0300", - "address": [ + "address": [ { - "city": "Moscow", - "street": "Kahovka", + "city": "Moscow", + "street": "Kahovka", "buildingNo": 1, - "flatNo": 2 + "flatNo": 2 }, { - "city": "Tula", - "street": "Lenina", + "city": "Tula", + "street": "Lenina", "buildingNo": 3, - "flatNo": 78 + "flatNo": 78 } ] } @@ -474,10 +474,10 @@ describe("XMLParser", function() { }; const result = parser.parse(xmlData, { - ignoreAttributes: false, + ignoreAttributes: false, ignoreNonTextNodeAttr: false, - attributeNamePrefix: "@", - textNodeName: "#_text" + attributeNamePrefix: "@", + textNodeName: "#_text" }); //console.log(JSON.stringify(result,null,4)); expect(result).eql(expected); @@ -576,9 +576,9 @@ describe("XMLParser", function() { "Envelope": { "Header": { "applicationID": "dashboardweb", - "providerID": "abc" + "providerID": "abc" }, - "Body": { + "Body": { "getOffers": { "customerId": { "msisdn": 123456789 @@ -599,7 +599,7 @@ describe("XMLParser", function() { }; const result = parser.parse(xmlData, { parseNodeValue: false, - trimValues: false + trimValues: false }); //console.log(JSON.stringify(result,null,4)); expect(result).eql(expected); @@ -636,8 +636,7 @@ describe("XMLParser", function() { }; const result = parser.parse(xmlData, { parseNodeValue: false, - decodeHTMLchar: true, - tagValueProcessor : (a) => he.decode(a) + tagValueProcessor: (a) => he.decode(a) }); //console.log(JSON.stringify(result,null,4)); expect(result).eql(expected);