{"_id":"detailed-xml-validator","_rev":"14-a234bb03eb065e267036e40c02e338e3","name":"detailed-xml-validator","dist-tags":{"latest":"2.2.0"},"versions":{"0.0.1":{"name":"detailed-xml-validator","version":"0.0.1","keywords":["xsd","xml","validator","detail"],"author":{"url":"https://amitkumargupta.work/","name":"Amit Gupta"},"license":"MIT","_id":"detailed-xml-validator@0.0.1","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/NaturalIntelligence/detailed-xml-validator#readme","bugs":{"url":"https://github.com/NaturalIntelligence/detailed-xml-validator/issues"},"dist":{"shasum":"c5cdc5e6f788a6738380ac7fe1fbe4d756d4d338","tarball":"https://registry.npmjs.org/detailed-xml-validator/-/detailed-xml-validator-0.0.1.tgz","fileCount":20,"integrity":"sha512-3tNN2/0JaSq1/7IsycEKNbWt617ah+gdMelLS0yOnzBAWPt3lzc+Fd6DJmkXUyJjwm1GuuKMfnm5sA8JGJ485A==","signatures":[{"sig":"MEYCIQCjpQgu5C/keS34+lJEew4Q6WEfHIsAF/yUv6AYNK7iYQIhAOfLWYOJ97eG5cOxcEkcw6+SNiIeKY3/0AxqUSaG7bD3","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44339},"main":"validator.js","gitHead":"e502dafadd4b7caa28cc95222f47c99bdc08de8f","scripts":{"test":"npx nyc mocha specs/*.spec.js"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/NaturalIntelligence/detailed-xml-validator.git","type":"git"},"_npmVersion":"6.14.6","description":"Validate for XML schema and returns all the possible failures","directories":{},"_nodeVersion":"12.18.4","dependencies":{"fast-xml-parser":"^3.20.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","chai":"^4.3.4","mocha":"^9.1.1"},"_npmOperationalInternal":{"tmp":"tmp/detailed-xml-validator_0.0.1_1632714722064_0.2319705454804022","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"detailed-xml-validator","version":"0.0.2","keywords":["xsd","xml","validator","detail"],"author":{"url":"https://amitkumargupta.work/","name":"Amit Gupta"},"license":"MIT","_id":"detailed-xml-validator@0.0.2","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/NaturalIntelligence/detailed-xml-validator#readme","bugs":{"url":"https://github.com/NaturalIntelligence/detailed-xml-validator/issues"},"dist":{"shasum":"a98beeb01017aa1d3913399004c5f1ef400000f3","tarball":"https://registry.npmjs.org/detailed-xml-validator/-/detailed-xml-validator-0.0.2.tgz","fileCount":21,"integrity":"sha512-bocQoA6R5xX4HUPQDVQVFZdyHKXXmzANV761BylF+m1y3Wp4WJieXL/QWQrxqpzh69Ky57CkgOOuKb1ozJotBw==","signatures":[{"sig":"MEYCIQDSAhDmzpq/VVjjLGPddEvSOiOf+0mK/fMNlpiUKz4vBQIhAP057rN/l1u8wzIIYM8Wo6Rw/YySvb4JQh5JezoAQzNn","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48053},"main":"validator.js","gitHead":"dbf864610702873e1b9ce17231765f6eb8f57f31","scripts":{"test":"npx nyc mocha specs/*.spec.js","coverage":"npx nyc report --reporter html --reporter text -t .nyc_output --report-dir .nyc_output/summary"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/NaturalIntelligence/detailed-xml-validator.git","type":"git"},"_npmVersion":"6.14.6","description":"Validate for XML schema and returns all the possible failures","directories":{},"_nodeVersion":"12.18.4","dependencies":{"fast-xml-parser":"^3.20.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","chai":"^4.3.4","mocha":"^9.1.1"},"_npmOperationalInternal":{"tmp":"tmp/detailed-xml-validator_0.0.2_1632876554425_0.45140466643894794","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"detailed-xml-validator","version":"0.0.3","keywords":["xsd","xml","validator","detail"],"author":{"url":"https://amitkumargupta.work/","name":"Amit Gupta"},"license":"MIT","_id":"detailed-xml-validator@0.0.3","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/NaturalIntelligence/detailed-xml-validator#readme","bugs":{"url":"https://github.com/NaturalIntelligence/detailed-xml-validator/issues"},"dist":{"shasum":"05d4563fdaac9faa78b4acc67f239a622b879594","tarball":"https://registry.npmjs.org/detailed-xml-validator/-/detailed-xml-validator-0.0.3.tgz","fileCount":21,"integrity":"sha512-udAj8H2oFixKKhDQJJUdbDyBzkS2fumvAFJVpLA3AkYvQ/EDqJ9jT0+ynQYTO1DxKJBeMEJHGMuUWfGlOiHBpA==","signatures":[{"sig":"MEQCIHdnKLnBt3mGzW0BsHeKLcVAxctLWqsGQA5NFdDlrkTtAiAdBxuLBWoSVwjgW5+bYBn5ogDchCLeaQx2rZ6jXjo7tA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48081},"main":"validator.js","gitHead":"8bedc5ea1002ae95a2cbdef320d274d262213932","scripts":{"test":"npx nyc mocha specs/*.spec.js","coverage":"npx nyc report --reporter html --reporter text -t .nyc_output --report-dir .nyc_output/summary"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/NaturalIntelligence/detailed-xml-validator.git","type":"git"},"_npmVersion":"6.14.6","description":"Validate for XML schema and returns all the possible failures","directories":{},"_nodeVersion":"12.18.4","dependencies":{"fast-xml-parser":"^3.20.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","chai":"^4.3.4","mocha":"^9.1.1"},"_npmOperationalInternal":{"tmp":"tmp/detailed-xml-validator_0.0.3_1633402285471_0.3102148653001999","host":"s3://npm-registry-packages"}},"0.0.4":{"name":"detailed-xml-validator","version":"0.0.4","keywords":["xsd","xml","validator","detail"],"author":{"url":"https://amitkumargupta.work/","name":"Amit Gupta"},"license":"MIT","_id":"detailed-xml-validator@0.0.4","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/NaturalIntelligence/detailed-xml-validator#readme","bugs":{"url":"https://github.com/NaturalIntelligence/detailed-xml-validator/issues"},"dist":{"shasum":"4d1e4316cf09a435a76de249e717075e3b2b3b09","tarball":"https://registry.npmjs.org/detailed-xml-validator/-/detailed-xml-validator-0.0.4.tgz","fileCount":22,"integrity":"sha512-OWuSS0HG+U/Zhl5Mtqsx4gTqH8afNo2Z7I3OVpqHgXzxMBKz9+o1esX0qfk9/wJypIXtK+mPHoyujc4/BgOfkw==","signatures":[{"sig":"MEQCIFiToO+T8//rPTySqnRfuydqhm/19+Cuhsuy7oiNj0cQAiAi5HFxejAaL8XRBZ9XETzJHtRInIBwxkMRefd8+bWrxw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48387,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2oGfCRA9TVsSAnZWagAA+EwP/1tUEneRddcmVKMEe2dF\nxUtJdQPj4ydJ0/W1Ywpeuq4tDNRbSmt8NnI5fJVDRtBk4wqzSlL64I63XIJe\n8jKi1xwUp5ghH43eAHEtwwSnK7kdusPJvh2mBlB9GG2VSZ2z4uyFLxMp/+FS\nTLFSO91uqQQ9vmITx1QIqVBviRQ8EaVFkvz/RFIJcEmkycWjLyh67UTR2zFw\n3oa3Q9wxeOhkJzSZGSLktr4OVq4j0eAFlWqaieTgIWbVglhdgWSYpO3+1MXr\nKPRw4hdCLJMrUXm1S5thp53XW/kb9HHFz+P8FbmN5sLRXRqzRs3723d+BaE8\n/6VLlSg0YjZSW+ooi7Jkxb17UQJQrsQIMAemfXqYS/9IWloIpBLn5EQQ49FS\nJOcLwMnJuba8sZ4MdlYgM3/h350oM/sYShiTyRfzr2uHdPN16x7JvKKYPE28\nTTMNl/HvMDqklJgbWAXRlHJZ/dMHHOsS5ZAqLNzMgzVoo+wYqWO95Mp+rUt0\n+/jOibqnCSppL3uAHBkCsUZgegbuDiXMG9QZ69W6EfEqXoh/5dFgcOoRfrfR\ntHJYWWGrLbVaBo2p+bqxi6nCSqK6jarU0q+0cVynCk07f/FeeJfBp68t/GQh\niEe+AmvzUs0TXEksuQjYcdzdL1GgAADrXViJJcNXk3o9nK4dMMMDwOrKhMv0\n+MBc\r\n=eti4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"validator.js","gitHead":"40bf8176964d32335eb40081210fb84116caad55","scripts":{"test":"npx nyc mocha specs/*.spec.js","coverage":"npx nyc report --reporter html --reporter text -t .nyc_output --report-dir .nyc_output/summary"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/NaturalIntelligence/detailed-xml-validator.git","type":"git"},"_npmVersion":"6.14.6","description":"Validate for XML schema and returns all the possible failures","directories":{},"_nodeVersion":"12.18.4","dependencies":{"fast-xml-parser":"^3.20.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","chai":"^4.3.4","mocha":"^9.1.1"},"_npmOperationalInternal":{"tmp":"tmp/detailed-xml-validator_0.0.4_1634097552888_0.34734155752284646","host":"s3://npm-registry-packages"}},"0.0.5":{"name":"detailed-xml-validator","version":"0.0.5","keywords":["xsd","xml","validator","detail"],"author":{"url":"https://amitkumargupta.work/","name":"Amit Gupta"},"license":"MIT","_id":"detailed-xml-validator@0.0.5","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/NaturalIntelligence/detailed-xml-validator#readme","bugs":{"url":"https://github.com/NaturalIntelligence/detailed-xml-validator/issues"},"dist":{"shasum":"d7c101fc21b34e8df3a6261d98322c01a371202b","tarball":"https://registry.npmjs.org/detailed-xml-validator/-/detailed-xml-validator-0.0.5.tgz","fileCount":22,"integrity":"sha512-BVHYj0m3406YVZ1m9mwR1MS7aMEjSCxOSjWw7pewqbMXYygOrjTib4BjV/etDlW0JDd+OaStE0Pbw8+CdJ29aw==","signatures":[{"sig":"MEYCIQDbqOd+iEPC60kV8cfzO/PTVeGd9cHe9oBiltO/8J7CPgIhAMP0nRtfttH76jk413rY2977EvCIneF1qQBkjQ9KNDCE","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48393,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3ORzCRA9TVsSAnZWagAA7MgP/R7lgHnKt3f8xUwnh6rV\nf249VyMX4VztbKlh+6SVFZ1m7t0E6A9uubLzaOG3AiGkkd497qIdg9JHs+8P\nKnekswq85iVyzjuUmKiHZXXFlcHWp/NurgMwvyEXpMnHX7N0f+FprPRugcYK\n2zU2g9d+DqpFckKvtTbamxeIEQGHFLvOT0Hp0dFT6qo+X4JQo27jnT5DOHs7\nbQlOEAz3BRhlUOes/mkKIn74syN2whVRWeEov2xXLRzl8FdG3JFARNNTrJHd\ndjvRtaTj3m5F/pV9JnINRWJJ0TOq1t90y1idusYFB5z94nGIUFBonvaKPinn\nbNlj5XbTZYJz5ZdcMYkAbUI64Uoc55ZX1WTRQGLjc2dboVdQWMcMHa4yPoo1\nCwnF1wkPLQP4PPog2H6ZUFWcnQ02ZRVH/q17Zt6VsGRUsT0/lcYC17rYnb2D\nvgMhygifp610lpiRGJ0jD7rzhd1Ik4nqy9PJSpavttPuz6SjQZ+2G+qeKI82\n4qweCaX5BERGKPvMqZSYf8PWZYJXLuAtt3no6tStcY7McPUIZci5HYDohQd8\naOWYEsJVfMilM+Bo2t973xexnUrs4/asib90M5n0p9L4LV8tumtcEZV9Ai4s\nUwCUhVBGXN3drJPDP3UL4cJW36yOx7LP6OMMLZERtCDBNYSFm4OW4YTwOEYQ\njlqy\r\n=6Weu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/validator.js","gitHead":"d77ed0a17ae55b9d07ef9d67fa0ebf1fe58da015","scripts":{"test":"npx nyc mocha specs/*.spec.js","coverage":"npx nyc report --reporter html --reporter text -t .nyc_output --report-dir .nyc_output/summary"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/NaturalIntelligence/detailed-xml-validator.git","type":"git"},"_npmVersion":"8.1.0","description":"Validate for XML schema and returns all the possible failures","directories":{},"_nodeVersion":"16.13.0","dependencies":{"fast-xml-parser":"^3.20.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","chai":"^4.3.4","mocha":"^9.1.1"},"_npmOperationalInternal":{"tmp":"tmp/detailed-xml-validator_0.0.5_1641866355573_0.20958090485042336","host":"s3://npm-registry-packages"}},"0.0.6":{"name":"detailed-xml-validator","version":"0.0.6","keywords":["xsd","xml","validator","detail"],"author":{"url":"https://amitkumargupta.work/","name":"Amit Gupta"},"license":"MIT","_id":"detailed-xml-validator@0.0.6","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/NaturalIntelligence/detailed-xml-validator#readme","bugs":{"url":"https://github.com/NaturalIntelligence/detailed-xml-validator/issues"},"dist":{"shasum":"900735be38e44c2ee354074b50abfa39c965d830","tarball":"https://registry.npmjs.org/detailed-xml-validator/-/detailed-xml-validator-0.0.6.tgz","fileCount":22,"integrity":"sha512-76IFnTGL6Z8jNMwGWeCKHSt7dsB1cwPP+nlT0xmI8XvOFhi3l84N+DEXIX/DNNsq7OJ1papSxkfR4RojSgcZBg==","signatures":[{"sig":"MEQCIFnhOBp2oOPzJCfPpWyCjcWqGNmrjla6Lu+xcfsf8LtHAiAduf94DTeKuX8+aHVsIaqw6QMYcwOv72OOSNOkQvHHvw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50382,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitFSWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrDOA/9FPIvxZ92fbk1X3g1M4xLmLtz8RyWsgFHd7+NGU88dA99Zrd2\r\n/iT3StLfyc0oaMr7O8nydJRcRxgA7MEETFPehFLyaee0n+N5+ed9C4bcERZC\r\nC668S4W9KNP0BdFS4kaQOAwcqQ7i7yKjG+rPvTsx+CRGlyUYlne9SGBTK8zZ\r\n6twIv09Tr1XkeI3jnLO/XEP8mzIwF5EjGz/k10XpfSQXKTVJ2Hi5xMpmsxrX\r\n3xdRGeaKEgRyezsP0dvJ31QD95izLe8IVw8T1qUNeI2Ao0HmhMsByq9rmFct\r\nADtRygdftYA/rNy/OHtEOy0Rc3hvLYGp0qFt+Fl/6XIU2kBb50VNR3DT1+38\r\nucmkrn3WwxZuwaXYIgQYHoWqNgOggIABfQsDp2Y/bRMycOZaV3M36tMOgRFU\r\n7GNrd8FPjVedKXvUgTaBy/05O+uBYwbq7yi5xAWHMthjXt1RrBLzFfwcRcQQ\r\nvZ/65VrMnzYYAxFXmu0XIK9nkkzJXBI1DZ0j5RD32itRvgZ4mxZJpneNuQry\r\n7oKWT2Srt5xDhgFCwUS2J5QICtJlrloyHlC3v+KE30fB2yqW9imE1VQsu6KN\r\n6MixPJw9a/5LG0DnYz76JN+T/0bD9leMtPpNzYnAx68NX1JpgfteHaQpGTk8\r\nT92X1Pe2eL8nSjtbNf2KeBLdWq342HcgA1M=\r\n=a2Yw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/validator.js","gitHead":"3bffe178933c3b21503c70f294bc4b2006135e6e","scripts":{"test":"npx nyc mocha specs/*.spec.js","coverage":"npx nyc report --reporter html --reporter text -t .nyc_output --report-dir .nyc_output/summary"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/NaturalIntelligence/detailed-xml-validator.git","type":"git"},"_npmVersion":"8.1.0","description":"Validate for XML schema and returns all the possible failures","directories":{},"_nodeVersion":"16.13.0","dependencies":{"fast-xml-parser":"^3.20.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","chai":"^4.3.4","mocha":"^9.1.1"},"_npmOperationalInternal":{"tmp":"tmp/detailed-xml-validator_0.0.6_1655985301818_0.1794847201602292","host":"s3://npm-registry-packages"}},"0.0.7":{"name":"detailed-xml-validator","version":"0.0.7","keywords":["xsd","xml","validator","detail"],"author":{"url":"https://amitkumargupta.work/","name":"Amit Gupta"},"license":"MIT","_id":"detailed-xml-validator@0.0.7","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/NaturalIntelligence/detailed-xml-validator#readme","bugs":{"url":"https://github.com/NaturalIntelligence/detailed-xml-validator/issues"},"dist":{"shasum":"6a9d12d222759844cb1f8c2a5768056d3a82d059","tarball":"https://registry.npmjs.org/detailed-xml-validator/-/detailed-xml-validator-0.0.7.tgz","fileCount":22,"integrity":"sha512-8iKpM5zgnQ4QZkdFUC4X3wQTM4xd5/0FLit0EbOQAB8/CG6ThrQW3KPzV/DCoJe4pmoXENYh2uiGputFK+MEXw==","signatures":[{"sig":"MEQCIFFYNV7Lyh0Oa+jGM1OIs43OOmMQLpTlmbnxlZcq/m37AiA2vaEbWDMQvNA15bxfsYCYiFO8epGejDawtol8y09MMQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":50383,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitPpOACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrdKw//dM+ugaG/pjr+0sdG2rk4emwY4S2Tv/DtyRY3npk08vJgXhLw\r\nfASgV8D3ZfaJ97E6RReXiAnTNAb41+bMOzsueFsVdbGPXkwjYZATSDa8RMF+\r\nY7UcCw/JPApEoCZDlL1LzcWietMoYMfFtkyZ40pXqZdtPp5eV6hoXB5XUaGM\r\nvlbOuQ3Vap1LI/Uuuju0/8BZqatYpITfTbX8hbcc9Y11Jojc8Gl0aVKXtCKP\r\nhnnAb8D0sBlA6nQdvhtcM26i/H2+Yk0L0Ex8Jp/RozsfrS4uPCZrgHPGWVK4\r\nYPULa9cdluOrjAJA284QpGqZ9rUoyZbHrhDt+H0RGOnwPVraUttIcTkU5EPZ\r\nnLEteE5Za4+m7mWnzJlj4h9l46/ER8xZZPB/phiWaO+EAf4zh1lOs7pWcR5v\r\nBcs2K0U4/6EjWd08MvcW65bKhOfaslg32S7RUW8wuGChJ8yBUd0B9iccfDWW\r\nfcv1x3eeKvrXShjBnQ+Dn0/Fzj9Kpuy9A/bqjeRAXI22Ehfcczcz7bg9UsiY\r\n0QRHt2QpvJ0uZXM/QDdVxiXnmK412+RvBkl/KAo1P+FmfN+OS8vm7nLY4lRr\r\nar17sf+Vb811uoJW7i0lhdVuxZmog0PMJyuDDMVcVgMMSPRKowtTv/QTSqnU\r\nQvXi/14J9bMgTvaUDt5UeSm9X7JBsMwulFI=\r\n=AL2g\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/validator.js","gitHead":"74d59250773ef01aaa2f588997f34758bad02dca","scripts":{"test":"npx nyc mocha specs/*.spec.js","coverage":"npx nyc report --reporter html --reporter text -t .nyc_output --report-dir .nyc_output/summary"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/NaturalIntelligence/detailed-xml-validator.git","type":"git"},"_npmVersion":"8.1.0","description":"Validate for XML schema and returns all the possible failures","directories":{},"_nodeVersion":"16.13.0","dependencies":{"fast-xml-parser":"^3.20.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","chai":"^4.3.4","mocha":"^9.1.1"},"_npmOperationalInternal":{"tmp":"tmp/detailed-xml-validator_0.0.7_1656027726099_0.8057217740140437","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"detailed-xml-validator","version":"1.0.0","keywords":["xsd","xml","validator","detail"],"author":{"url":"https://amitkumargupta.work/","name":"Amit Gupta"},"license":"MIT","_id":"detailed-xml-validator@1.0.0","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/NaturalIntelligence/detailed-xml-validator#readme","bugs":{"url":"https://github.com/NaturalIntelligence/detailed-xml-validator/issues"},"dist":{"shasum":"6e35d428904ec9b1c370c54d7c31a58a32b7feb5","tarball":"https://registry.npmjs.org/detailed-xml-validator/-/detailed-xml-validator-1.0.0.tgz","fileCount":25,"integrity":"sha512-jVdN77491iuRHTWeZHQLfDs7uwA78jwGlL0Kb4Y4ps4cvtFrnl7ogW6EwEU899R2d245znMipXFzcRsqNr9zTw==","signatures":[{"sig":"MEUCID3QkcTSCBU8LGtSTi5ztjqFiJZ89A7Cp21UqnsbSMlFAiEAq7rKAA6uZFT26DXAUCAeLuyXwIqS2EwcCuQU68QKZrE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63017,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjcmVMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrL+g/9EZ0P0Mte8JBlQjQXoLOSTackIc9L5PMW+r933eqTTSQpALyx\r\n8SJo/giY2Ttjd/cc5Zob8RrXy8fFr1ajHq7zrhSC/FTb0BfBR2tAR3P3/0I8\r\nXwvNkTF+xu+oooDUkZsPlcR2f4EHmhBQbBhDzaAQw04RRLP+6iFb0YKu7n8/\r\nTB4A1SqR8EsnLhE9Dk3cehzY0BTQsaq0bKpK/wwMdmMV5fpplMPaLoRjtihB\r\nD4u9ryMqKdZ2x83tQkX34TDP6grLd/t+T55TuR2LmnBNPke9SyWeRxzwEXXz\r\nkcKkc2+UsFumIJIaiG/Ps3Rn8BTtdhB3Lh8LMWNvC4eWQxZxHl2woBd24Juc\r\nM3aW/taKwQTlMnLCJM1UsA27CNTMu9nvto/gN2tgHLw8xfrhbVZeNwIONL7+\r\nPnTJgSpXJAD4m0SzA2ZmSCHdpmz3Tr27JsNcm204aeT2VLP9BS60mX417zHT\r\nCp0UbRCXpGbW+nIO9q9FxATE6ewrfljDvHTsNDr6kTrSQbGv1BfCOyh9iQ9F\r\n0oaKlU1PGQ/OTQjwFbS82fg14xL0wHd4TXhnmrJq9ufICu4aGivtakCT4Obh\r\n4RWrMM4Pi1QPXBF/t2f9FYqBKOU2bvQbGGZ6021z48ajmmvMJUrQmyxrYENO\r\nAKNCMFEz2o+bdRae16SgU8RZtPwZGrYVVFI=\r\n=xcEv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/validator.js","gitHead":"a80afc048764c9f88a481ff2483fa01a8490ea15","scripts":{"test":"npx nyc mocha specs/*.spec.js","coverage":"npx nyc report --reporter html --reporter text -t .nyc_output --report-dir .nyc_output/summary"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/NaturalIntelligence/detailed-xml-validator.git","type":"git"},"_npmVersion":"8.1.0","description":"Validate for XML schema and returns all the possible failures","directories":{},"_nodeVersion":"16.13.0","dependencies":{"fast-xml-parser":"^3.20.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","chai":"^4.3.4","mocha":"^9.1.1"},"_npmOperationalInternal":{"tmp":"tmp/detailed-xml-validator_1.0.0_1668441420134_0.7634234880578206","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"detailed-xml-validator","version":"1.1.0","keywords":["xsd","xml","validator","detail"],"author":{"url":"https://amitkumargupta.work/","name":"Amit Gupta"},"license":"MIT","_id":"detailed-xml-validator@1.1.0","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/NaturalIntelligence/detailed-xml-validator#readme","bugs":{"url":"https://github.com/NaturalIntelligence/detailed-xml-validator/issues"},"dist":{"shasum":"47b61f03c1de2f93834b9b9ce9bf59c5fc3870d5","tarball":"https://registry.npmjs.org/detailed-xml-validator/-/detailed-xml-validator-1.1.0.tgz","fileCount":24,"integrity":"sha512-UXmprSESIbVvKlsYtAY5u6UF3IN1+gz4YMeiHmAlxkZKI73ej0NDAz6doIrh1j9aTX9Qc1O+QqKpsXliQvVAvg==","signatures":[{"sig":"MEQCIGM2dqPxWBRlsTEPSmssHcRvYe+h7YWU5/lYNy4lISoiAiB8v3nHcNsfLgBFV2jmf5CB/YcE8XM6gXka6GbgfKNdng==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62262,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkMoxUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqkLg/+KAwzBYK5rFmLGlyCxYf8jAbXYmhZ4/bp6xE3IkhRYCSUMFEJ\r\nobNfrS1jlqo53gB8+yg+4VkvqZeY7Dzm982ygz6KHM4LBwPVJBv8CaNxv9HC\r\nsoSuELdbTmDpYfZwYLCexsHj/FQEkwT1Gsx9Jahuw8TzSOGFuPqHiLM9WHK9\r\ncIO0ZWxksiCGNceva1ZxopPU52X2Q4hfn/bdhrXqxGRz02MgMxtPlumEAVEs\r\nYjjptEziZ49sVS+uWpjyZsvyacLNtwOymGx8pcgIX7bzfkCTzBQSJjLpFYk+\r\nxJNmWcwjZdQn/PwFabRHsLb3NWVp+qM/EJtbwTwAA/dBzTYiypwN8kPFhWdu\r\nIbGzamvzEOvFzpfX5HqBK6DH3+ULGMWUcHB1D1yacmNI+9pB6eBUwWG48RMc\r\nmwWwmr8+N+ZyCOLCaoB0mYehxXMfnOkE77mT9TlW63+6op/+UN1Bp3ATAEY2\r\nOBVZAwuk8xV00c7p7V/uY3e0G37o0C8QqXcjlEDrIiSQ8doIBfT7p4UIcS2z\r\nzxlyAyjzc8M3ROnoYR94DlC4varyPpVwQug4ERiXKn/Y5l9/TleOLg9t0p30\r\naavoPNQcIcHIOoX5sM4MxLYYlN7gDdBXzYyI3TsJ/KlPDhKigB04AZeqzmLM\r\nhIG/mH8f1vn+MWARjnIEWIJgObd3xy1MCT4=\r\n=1mFT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/validator.js","gitHead":"c32cbaefee5663e28eb4953ca5e747895e160ef2","scripts":{"test":"npx nyc mocha specs/*.spec.js","coverage":"npx nyc report --reporter html --reporter text -t .nyc_output --report-dir .nyc_output/summary"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/NaturalIntelligence/detailed-xml-validator.git","type":"git"},"_npmVersion":"8.19.3","description":"Validate for XML schema and returns all the possible failures","directories":{},"_nodeVersion":"19.2.0","dependencies":{"fast-xml-parser":"^4.2.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","chai":"^4.3.4","mocha":"^9.1.1"},"_npmOperationalInternal":{"tmp":"tmp/detailed-xml-validator_1.1.0_1681034323899_0.9622911384489734","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"detailed-xml-validator","version":"2.0.0","keywords":["xsd","xml","validator","detail","business","rule"],"author":{"url":"https://amitkumargupta.work/","name":"Amit Gupta"},"license":"MIT","_id":"detailed-xml-validator@2.0.0","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/NaturalIntelligence/detailed-xml-validator#readme","bugs":{"url":"https://github.com/NaturalIntelligence/detailed-xml-validator/issues"},"dist":{"shasum":"e5deccba2e93cf3af98093b63bb932d88a1ba868","tarball":"https://registry.npmjs.org/detailed-xml-validator/-/detailed-xml-validator-2.0.0.tgz","fileCount":8,"integrity":"sha512-8tol6vcYeRSCU4BQihqF2Oyo3J3gvE+dfwhNjBg8XV3gSj0L3D3VLebgizcMUdaoIZZgKzsYrUaQ8z/GhhTcvQ==","signatures":[{"sig":"MEUCICfNXNx7fzXK0ZGjoy6aCU0y50w1s3ruMJfrXPJeICdkAiEAt0AdOEy0/ZkXbIc7WPDp3Zvn+TQaTGM+r5nx1T/1tQc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43741},"main":"./src/validator.js","gitHead":"efde0c8e3e85abdc9e15b6800c105e71fbdda0c9","scripts":{"test":"npx mocha specs/*.spec.js --timeout 5000","coverage":"npx nyc mocha specs/*.spec.js"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/NaturalIntelligence/detailed-xml-validator.git","type":"git"},"_npmVersion":"11.11.0","description":"Validate  XML schema forbusiness rules and returns all the possible failures","directories":{},"_nodeVersion":"22.14.0","dependencies":{"fast-xml-parser":"^5.7.1"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","chai":"^4.3.4","mocha":"^9.1.1"},"_npmOperationalInternal":{"tmp":"tmp/detailed-xml-validator_2.0.0_1776781372013_0.8517345523167188","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"detailed-xml-validator","version":"2.1.0","keywords":["xsd","xml","validator","detail","business","rule"],"author":{"url":"https://amitkumargupta.work/","name":"Amit Gupta"},"license":"MIT","_id":"detailed-xml-validator@2.1.0","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/NaturalIntelligence/detailed-xml-validator#readme","bugs":{"url":"https://github.com/NaturalIntelligence/detailed-xml-validator/issues"},"dist":{"shasum":"da121eb0f56eb0e6e1ff9dcb8666862053d5bff9","tarball":"https://registry.npmjs.org/detailed-xml-validator/-/detailed-xml-validator-2.1.0.tgz","fileCount":8,"integrity":"sha512-BhnTxmkOhDXS5V6yQFxTYItZa9Fk4gKKQNNDNXWLNolnsIdP/7wuyL0vlrfNqjgKbH8hsq+QFlFL6tpHvRNiAw==","signatures":[{"sig":"MEYCIQDcoiOBxf/jOM+6qWyBMGy4TIQgviJo5RM89pJDlZCIiAIhANEXRC0mkqespGGQQvVJ2uAKQ3ZDgFNou7lWxUhX/BnA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56506},"main":"./src/validator.js","gitHead":"498aa653cd80186ef05a147c2b9dcce3f81928eb","scripts":{"test":"npx mocha specs/*.spec.js --timeout 5000","coverage":"npx nyc mocha specs/*.spec.js"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/NaturalIntelligence/detailed-xml-validator.git","type":"git"},"_npmVersion":"11.11.0","description":"Validate  XML schema forbusiness rules and returns all the possible failures","directories":{},"_nodeVersion":"22.14.0","dependencies":{"fast-xml-parser":"^5.7.1"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","chai":"^4.3.4","mocha":"^9.1.1"},"_npmOperationalInternal":{"tmp":"tmp/detailed-xml-validator_2.1.0_1776843793837_0.5319853661462028","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"detailed-xml-validator","version":"2.2.0","type":"module","description":"Validate  XML schema forbusiness rules and returns all the possible failures","main":"./src/validator.js","scripts":{"test":"npx mocha specs/*.spec.js --timeout 5000","coverage":"npx nyc mocha specs/*.spec.js"},"keywords":["xsd","xml","validator","detail","business","rule","locales"],"repository":{"type":"git","url":"git+https://github.com/NaturalIntelligence/detailed-xml-validator.git"},"author":{"name":"Amit Gupta","url":"https://amitkumargupta.work/"},"license":"MIT","dependencies":{"@nodable/flexible-xml-parser":"^1.11.2","@nodable/compact-builder":"^2.0.0","@nodable/base-output-builder":"^2.0.0"},"devDependencies":{"chai":"^4.3.4","mocha":"^9.1.1","nyc":"^15.1.0"},"gitHead":"79d2003ab9eb746436bfead24d9f367d0ae9b457","_id":"detailed-xml-validator@2.2.0","bugs":{"url":"https://github.com/NaturalIntelligence/detailed-xml-validator/issues"},"homepage":"https://github.com/NaturalIntelligence/detailed-xml-validator#readme","_nodeVersion":"22.14.0","_npmVersion":"11.18.0","dist":{"integrity":"sha512-dffr/kTqIqq2BpybOEddhQRF1KBQcLdKHww9/urAKwZC1+epDnPnbT5IOb0ffCT4QTioAvKYEsojXeOYk030UQ==","shasum":"f0951d0ad515c6dfb6f7e1e375ecb1fc7ea9688e","tarball":"https://registry.npmjs.org/detailed-xml-validator/-/detailed-xml-validator-2.2.0.tgz","fileCount":10,"unpackedSize":62458,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEv5uy5uNrdfsL57K6cPTyfOSOierrXFQZqw6U4vLZdpAiBqpVM8Q/meGS/PIYZHs+jj+Kxy67agmH47h8zHFXUf2A=="}]},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"directories":{},"maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/detailed-xml-validator_2.2.0_1784203176887_0.2658692465624035"},"_hasShrinkwrap":false}},"time":{"created":"2021-09-27T03:52:02.063Z","modified":"2026-07-16T11:59:37.162Z","0.0.1":"2021-09-27T03:52:02.176Z","0.0.2":"2021-09-29T00:49:14.575Z","0.0.3":"2021-10-05T02:51:25.626Z","0.0.4":"2021-10-13T03:59:13.090Z","0.0.5":"2022-01-11T01:59:15.733Z","0.0.6":"2022-06-23T11:55:01.994Z","0.0.7":"2022-06-23T23:42:06.292Z","1.0.0":"2022-11-14T15:57:00.333Z","1.1.0":"2023-04-09T09:58:44.086Z","2.0.0":"2026-04-21T14:22:52.162Z","2.1.0":"2026-04-22T07:43:13.970Z","2.2.0":"2026-07-16T11:59:37.036Z"},"bugs":{"url":"https://github.com/NaturalIntelligence/detailed-xml-validator/issues"},"author":{"name":"Amit Gupta","url":"https://amitkumargupta.work/"},"license":"MIT","homepage":"https://github.com/NaturalIntelligence/detailed-xml-validator#readme","keywords":["xsd","xml","validator","detail","business","rule","locales"],"repository":{"type":"git","url":"git+https://github.com/NaturalIntelligence/detailed-xml-validator.git"},"description":"Validate  XML schema forbusiness rules and returns all the possible failures","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"readme":"# detailed-xml-validator\n[![detailed-xml-validator downloads](https://img.shields.io/npm/dw/detailed-xml-validator.svg)](https://npm-compare.com/detailed-xml-validator) \n[![detailed-xml-validator version](https://img.shields.io/npm/v/detailed-xml-validator.svg)](https://www.npmjs.com/package/detailed-xml-validator)\n[![detailed-xml-validator license](https://img.shields.io/npm/l/detailed-xml-validator.svg)](https://github.com/NaturalIntelligence/detailed-xml-validator)\n\nA comprehensive XML validator that validates against custom rule schemas and reports **all** failures at once, not just the first error encountered.\n\nUnlike XSD validators, this module uses an intuitive XML-based rule format that mirrors your data structure. It performs syntax checking via [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser), then validates frequency, type, range, length, pattern matching, ordering, uniqueness, and null constraints.\n\n## Features\n\n- ✅ **Complete error reporting** — Reports all validation failures in one pass\n- ✅ **Intuitive rule syntax** — XML-based rules that mirror your data structure\n- ✅ **Rich validation types** — String patterns, numeric ranges, custom validators\n- ✅ **Flexible constraints** — Required fields, repeatable elements, occurrence limits\n- ✅ **Custom validators** — Register your own validation functions\n- ✅ **Type safety** — Built-in types: integers, decimals, dates, booleans, maps\n- ✅ **Ordering constraints** — Enforce `before`/`after` positional ordering between sibling tags\n- ✅ **Date bounds** — `min`, `max`, and `range` on `type=\"date\"` fields\n- ✅ **Relational constraints** — `sameAs`, `notSameAs`, `lessThan`, `moreThan` across sibling fields\n- ✅ **Uniqueness constraints** — `unique=\"true\"` (sibling scope) and `unique=\"global\"` (document scope)\n- ✅ **Range shorthand** — `range=\"min..max\"` as readable sugar for `min` + `max`\n- ✅ **TypeScript types** — Bundled `.d.ts` declarations\n- ✅ **ES Modules** — Full `import`/`export` syntax; bundle with your own webpack/rollup config\n\n## Installation\n\n```bash\nnpm install detailed-xml-validator\n```\n\n## Quick Start\n\n```js\nimport Validator from \"detailed-xml-validator\";\n\nconst rules = `<?xml version=\"1.0\"?>\n<students nillable=\"false\">\n    <student repeatable minOccurs=\"1\">\n        <firstname minLength=\"3\" maxLength=\"10\" nillable=\"false\"></firstname>\n        <age type=\"positiveInteger\" range=\"9..19\"></age>\n    </student>\n</students>`;\n\nconst xmlData = `<?xml version=\"1.0\"?>\n<students>\n    <student>\n        <firstname>Jo</firstname>\n        <age>25</age>\n    </student>\n</students>`;\n\nconst validator = new Validator(rules);\nconst failures = validator.validate(xmlData);\n\nif (failures.length > 0) {\n    console.log(`Found ${failures.length} validation issues:`);\n    failures.forEach(f => console.log(f));\n} else {\n    console.log(\"Validation passed!\");\n    const data = validator.data; // Access parsed XML as JS object\n}\n```\n\n## Rule Syntax\n\n### Basic Structure\n\nRules are written in XML format that mirrors your expected data structure:\n\n```xml\n<?xml version=\"1.0\"?>\n<root>\n    <element attribute=\"constraint\" anotherAttribute=\"value\">\n        <nestedElement></nestedElement>\n    </element>\n</root>\n```\n\n### Attribute Rules\n\nUse the special `<:a>` tag to define validation rules for XML attributes:\n\n```xml\n<student repeatable>\n    <:a>\n        <id length=\"6\"></id>\n        <status pattern=\"active|inactive\"></status>\n    </:a>\n    <n></n>\n</student>\n```\n\n### Required vs Optional Elements\n\n**By default, all elements are optional (nillable).**\n\n```xml\n<!-- Optional -->\n<nickname></nickname>\n\n<!-- Required -->\n<email nillable=\"false\"></email>\n```\n\n### Repeatable Elements (Lists)\n\n```xml\n<students>\n    <student repeatable minOccurs=\"1\" maxOccurs=\"100\">\n        <n></n>\n    </student>\n</students>\n```\n\n- `repeatable` — Marks this as a list element\n- `minOccurs` — Minimum occurrences (default: 0)\n- `maxOccurs` — Maximum occurrences (default: unlimited)\n\n## Validation Types\n\n### Type Constraints\n\n```xml\n<age type=\"positiveInteger\"></age>\n<price type=\"positiveDecimal\"></price>\n<temperature type=\"integer\"></temperature>\n<rating type=\"decimal\"></rating>\n<count type=\"number\"></count>\n<birthdate type=\"date\"></birthdate>\n<name type=\"string\"></name>\n<metadata type=\"map\"></metadata>\n```\n\nSupported types: `positiveInteger`, `positiveDecimal`, `integer`, `decimal`, `number`, `date`, `string` (default), `map`.\n\n### Numeric Constraints\n\n```xml\n<!-- Explicit min/max -->\n<age type=\"integer\" min=\"18\" max=\"65\"></age>\n\n<!-- Range shorthand — equivalent to the above -->\n<age type=\"integer\" range=\"18..65\"></age>\n\n<!-- Works with decimals too -->\n<price type=\"number\" range=\"0.01..999.99\"></price>\n```\n\n`range=\"min..max\"` is syntactic sugar for `min` + `max`. If you specify all three, the explicit `min`/`max` attributes win.\n\n### String Constraints\n\n```xml\n<username minLength=\"3\" maxLength=\"20\"></username>\n<zipcode length=\"5\"></zipcode>\n<email pattern=\"[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}\"></email>\n<phone pattern_i=\"^\\d{3}-\\d{3}-\\d{4}$\"></phone>\n<status in=\"active,inactive,pending\"></status>\n<country fixed=\"USA\"></country>\n```\n\nPattern modifiers: `pattern` (default), `pattern_i` (case-insensitive), `pattern_m` (multiline), `pattern_im` / `pattern_mi`.\n\n## Ordering Constraints (`before` / `after`)\n\nEnforce **positional ordering** between sibling tags in the XML document. Both attributes reference the **name** of a sibling element. This is a structural check — it validates tag order, not field values. Works on any tag type, not just dates.\n\n```xml\n<event>\n    <title></title>\n    <!-- startDate must appear after title in the XML -->\n    <startDate after=\"title\"></startDate>\n    <!-- endDate must appear after startDate -->\n    <endDate after=\"startDate\"></endDate>\n</event>\n\n<order>\n    <orderDate></orderDate>\n    <!-- shipDate must come after orderDate AND before deliveryDate -->\n    <shipDate after=\"orderDate\" before=\"deliveryDate\"></shipDate>\n    <deliveryDate></deliveryDate>\n</order>\n```\n\n**Failure shape:**\n\n```js\n{ code: \"after\",  path: \"order.shipDate\", actual: \"shipDate\", expected: \"orderDate\" }\n{ code: \"before\", path: \"order.shipDate\", actual: \"shipDate\", expected: \"deliveryDate\" }\n```\n\n- The check is skipped silently when the referenced sibling is absent from the data.\n- To enforce that a reference field must be present, mark it `nillable=\"false\"`.\n\n## Date Bounds (`min` / `max` / `range` on dates)\n\nConstrain `type=\"date\"` fields to a specific date range. Accepts ISO 8601 date strings.\n\n```xml\n<!-- Explicit min/max -->\n<birthDate type=\"date\" min=\"1900-01-01\" max=\"2010-12-31\"></birthDate>\n\n<!-- Range shorthand — equivalent to the above -->\n<eventDate type=\"date\" range=\"2024-01-01..2024-12-31\"></eventDate>\n\n<!-- Only a lower bound -->\n<startDate type=\"date\" min=\"2020-01-01\"></startDate>\n```\n\n`range=\"min..max\"` works the same as for numeric fields. Explicit `min`/`max` take precedence over `range` when all three are set. Bounds are **inclusive**.\n\n**Failure shape:**\n\n```js\n{ code: \"min\", path: \"event.startDate\", actual: \"2019-06-01\", expected: \"2020-01-01\" }\n{ code: \"max\", path: \"event.birthDate\", actual: \"2025-01-01\", expected: \"2010-12-31\" }\n```\n\nThe bounds check is skipped when the date value is itself invalid (a type error is reported instead).\n\n## Relational Constraints (`sameAs` / `notSameAs` / `lessThan` / `moreThan`)\n\nCompare a field's **value** against another sibling field's value. All four attributes take the **name** of a sibling element as their value.\n\n```xml\n<order>\n    <originalPrice type=\"number\"></originalPrice>\n    <!-- discountedPrice must be strictly less than originalPrice -->\n    <discountedPrice type=\"number\" lessThan=\"originalPrice\"></discountedPrice>\n    <!-- tax must be strictly less than discountedPrice -->\n    <tax type=\"number\" lessThan=\"discountedPrice\"></tax>\n</order>\n\n<event>\n    <!-- startDate value must be before endDate value -->\n    <startDate type=\"date\" lessThan=\"endDate\"></startDate>\n    <endDate type=\"date\"></endDate>\n</event>\n\n<form>\n    <password></password>\n    <!-- confirmPassword must equal password -->\n    <confirmPassword sameAs=\"password\"></confirmPassword>\n</form>\n\n<user>\n    <username></username>\n    <!-- password must not equal username -->\n    <password notSameAs=\"username\"></password>\n</user>\n```\n\n| Attribute | Passes when |\n|---|---|\n| `lessThan=\"ref\"` | this value < ref value (strictly) |\n| `moreThan=\"ref\"` | this value > ref value (strictly) |\n| `sameAs=\"ref\"` | this value == ref value |\n| `notSameAs=\"ref\"` | this value != ref value |\n\n**Comparison is type-aware** based on the field's declared `type`:\n- `type=\"date\"` → `Date.parse()` comparison\n- numeric types (`integer`, `number`, etc.) → `Number()` comparison\n- `string` / no type → lexicographic comparison\n\n**Failure shape:**\n\n```js\n{ code: \"lessThan\", path: \"order.discountedPrice\", actual: \"120\", expected: \"originalPrice\" }\n{ code: \"sameAs\",   path: \"form.confirmPassword\",  actual: \"wrong\", expected: \"password\" }\n```\n\n**Skipped silently when:**\n- The referenced sibling is absent from the data (use `nillable=\"false\"` on the ref field if you want that enforced separately)\n- Either value is a map/object rather than a primitive\n- The ref value cannot be coerced to the expected type\n\n## Uniqueness Constraints (`unique`)\n\n### `unique=\"true\"` — Sibling-scoped uniqueness\n\nValues must be unique **within** the repeatable collection they belong to.\n\n```xml\n<students>\n    <student repeatable>\n        <email unique=\"true\"></email>\n        <studentId unique=\"true\"></studentId>\n    </student>\n</students>\n```\n\nThe same value is allowed in a *different* collection (a separate `<students>` block elsewhere in the document).\n\n### `unique=\"global\"` — Document-scoped uniqueness\n\nValues must be unique **across the entire document**, regardless of where the field appears.\n\n```xml\n<root>\n    <groupA>\n        <transactionId unique=\"global\"></transactionId>\n    </groupA>\n    <groupB>\n        <transactionId unique=\"global\"></transactionId>\n    </groupB>\n</root>\n```\n\n**Failure shape:**\n\n```js\n{ code: \"unique\", path: \"students.student[2].email\", value: \"dup@example.com\" }\n```\n\nOnly the *second and subsequent* occurrences of a duplicate produce a failure. The first occurrence is always accepted.\n\n## Options\n\n```js\nconst validator = new Validator(rules, {\n    unknownAllow: true,                          // default: true\n    boolean: [\"true\", \"false\", \"yes\", \"no\"],     // default: [\"true\", \"false\"]\n});\n```\n\n- `unknownAllow` — When `false`, reports an `\"unknown\"` failure for any element not defined in rules.\n- `boolean` — Array of strings considered valid for `type=\"boolean\"` fields.\n\n## Custom Validators\n\n```js\nvalidator.register(\"isEmail\", (value, path) => {\n    if (!value.includes(\"@\")) {\n        return { code: \"invalid-email\", path, value };\n    }\n});\n```\n\nReference by name in rules:\n\n```xml\n<email checkBy=\"isEmail\" nillable=\"false\"></email>\n```\n\nReturn any object to push a failure, or nothing (/ `undefined` / `null`) to pass.\n\n## Complete Example\n\n### Rules\n\n```xml\n<?xml version=\"1.0\"?>\n<students nillable=\"false\">\n    <student repeatable minOccurs=\"1\">\n        <:a>\n            <id length=\"6\"></id>\n        </:a>\n        <firstname minLength=\"3\" maxLength=\"10\" nillable=\"false\"></firstname>\n        <email pattern=\"[a-z0-9]+@school\\.org\" nillable=\"false\" unique=\"true\"></email>\n        <age type=\"positiveInteger\" range=\"9..19\"></age>\n        <enrolledOn type=\"date\" min=\"2000-01-01\"></enrolledOn>\n        <!-- graduatesOn must appear after enrolledOn in XML, and its value must be later -->\n        <graduatesOn type=\"date\" after=\"enrolledOn\" moreThan=\"enrolledOn\"></graduatesOn>\n        <marks>\n            <subject repeatable minOccurs=\"5\" maxOccurs=\"6\">\n                <name pattern=\"math|hindi|english|science|history\"></name>\n                <score type=\"positiveDecimal\" range=\"0..100\"></score>\n            </subject>\n        </marks>\n    </student>\n</students>\n```\n\n### Code\n\n```js\nimport Validator from \"detailed-xml-validator\";\nimport { readFileSync } from \"fs\";\n\nconst rules = readFileSync(\"rules.xml\", \"utf8\");\nconst xmlData = readFileSync(\"data.xml\", \"utf8\");\n\nconst validator = new Validator(rules, { unknownAllow: false });\nconst failures = validator.validate(xmlData);\n\nif (failures.length > 0) {\n    failures.forEach(f => console.error(`[${f.code}] ${f.path}`));\n    process.exit(1);\n}\n\n// validator.data contains the parsed XML as a plain JS object\n```\n\n## Error Response Reference\n\n| `code` | Meaning | Extra fields |\n|---|---|---|\n| `missing` | Required element absent | — |\n| `unknown` | Element not in rules (when `unknownAllow: false`) | — |\n| `unexpected sequence` | Array where scalar expected | — |\n| `unexpected value in a map` | Scalar where map expected | `value` |\n| `not a <type>` | Value fails type check | `value` |\n| `min` / `max` | Numeric or date out of range | `actual`, `expected` |\n| `minOccurs` / `maxOccurs` | Occurrence count out of range | `actual`, `expected` |\n| `minLength` / `maxLength` / `length` | String length violation | `actual`, `expected` |\n| `pattern` | Regex mismatch | `actual`, `expected` |\n| `fixed` / `in` | Value not in allowed set | `actual`, `expected` |\n| `after` | Tag does not appear after referenced sibling in XML | `actual` (tag name), `expected` (ref tag name) |\n| `before` | Tag does not appear before referenced sibling in XML | `actual` (tag name), `expected` (ref tag name) |\n| `lessThan` | Field value is not strictly less than sibling value | `actual`, `expected` (ref field name) |\n| `moreThan` | Field value is not strictly greater than sibling value | `actual`, `expected` (ref field name) |\n| `sameAs` | Field value does not equal sibling value | `actual`, `expected` (ref field name) |\n| `notSameAs` | Field value equals sibling value (should differ) | `actual`, `expected` (ref field name) |\n| `unique` | Duplicate value violates uniqueness constraint | `value` |\n\n## TypeScript\n\nType declarations are bundled at `src/index.d.ts`. Add to your `tsconfig.json`:\n\n```json\n{\n  \"compilerOptions\": {\n    \"typeRoots\": [\"./node_modules/detailed-xml-validator/src\"]\n  }\n}\n```\n\nOr import the types directly:\n\n```ts\nimport Validator, { ValidationFailure, OrderingFailure, RelationalFailure, DateBoundsFailure, UniqueFailure } from \"detailed-xml-validator\";\n```\n\n## API Reference\n\n### `new Validator(rules, options?)`\n\n- `rules` — XML string containing validation rules. Throws if empty, non-string, or malformed.\n- `options` — Optional `ValidatorOptions` object.\n\n### `validator.validate(xmlData)`\n\nReturns `ValidationFailure[]`. Empty array means the document is valid. Throws if `xmlData` is empty, non-string, or malformed.\n\n### `validator.register(name, fn)`\n\nRegisters a custom validator. `fn(value, path)` should return a failure object or falsy.\n\n### `validator.data`\n\nThe parsed XML as a plain JS object after the last `validate()` call. `null` before first call.\n\n## Why Not XSD?\n\n1. **Simpler syntax** — Rules look like your data, not a separate schema language\n2. **All errors at once** — No stopping at the first failure\n3. **Business-logic validators** — `checkBy` for custom JS validation\n4. **Ordering & uniqueness** — Constraints XSD cannot express cleanly\n5. **JavaScript-native** — No external tools, works in Node.js directly\n\n## License\n\nMIT — see [LICENSE](./LICENSE)\n","readmeFilename":"README.md"}