{"_id":"@daniel-faber/json-ts","_rev":"13-00b0647bb43df45da71f95ebf2234b18","name":"@daniel-faber/json-ts","description":"validate/convert json in typescript","dist-tags":{"latest":"0.6.0"},"versions":{"0.0.3":{"name":"@daniel-faber/json-ts","version":"0.0.3","author":{"name":"Daniel Faber","email":"mail@daniel-faber.de"},"license":"WTFPL","description":"validate/convert json in typescript","main":"dist/src/json-ts.js","types":"dist/src/json-ts.d.ts","scripts":{"build":"tsc","clean":"rimraf dist","prepare":"rimraf dist && tsc","test":"jasmine --config=jasmine.json"},"repository":{"type":"git","url":"git@git.home.leptonite.de:daniel-faber/public/json-ts"},"keywords":["json","typescript"],"devDependencies":{"@types/jasmine":"~2.5.53","jasmine":"~2.6.0","rimraf":"~2.6.1","typescript":"~2.4.1"},"_id":"@daniel-faber/json-ts@0.0.3","dist":{"shasum":"fd3cb231f97078df086f64ee6acdabe51318152c","tarball":"https://registry.npmjs.org/@daniel-faber/json-ts/-/json-ts-0.0.3.tgz","integrity":"sha512-H8Qj1QoEls5fEsVwcW2i+5t/gDIg2dJ8JIrYtOY583eFBk5Oa/y+WHeTF8iaeKHBg/0S5wTNIb7rufGxs9PqiA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHQNxNjI0Lu0JVRBnWPPPeoW2E+dEdvbON/KmROApcDlAiEAq1bCWBqTXjiqptd2TKt8axM62/Hhov+WKAW5hsF/jNc="}]},"maintainers":[{"name":"daniel-faber","email":"mail@daniel-faber.de"}],"_npmUser":{"name":"daniel-faber","email":"mail@daniel-faber.de"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-ts-0.0.3.tgz_1500499090326_0.11330929398536682"},"directories":{}},"0.0.4":{"name":"@daniel-faber/json-ts","version":"0.0.4","author":{"name":"Daniel Faber","email":"mail@daniel-faber.de"},"license":"WTFPL","description":"validate/convert json in typescript","main":"dist/src/json-ts.js","types":"dist/src/json-ts.d.ts","scripts":{"build":"tsc","clean":"rimraf dist","prepare":"rimraf dist && tsc","test":"jasmine --config=jasmine.json"},"repository":{"type":"git","url":"git@git.home.leptonite.de:daniel-faber/public/json-ts"},"keywords":["json","typescript"],"devDependencies":{"@types/jasmine":"~2.5.53","jasmine":"~2.6.0","rimraf":"~2.6.1","typescript":"~2.4.1"},"_id":"@daniel-faber/json-ts@0.0.4","dist":{"shasum":"4fe02becca96c2d96739cd8291c56f694642606e","tarball":"https://registry.npmjs.org/@daniel-faber/json-ts/-/json-ts-0.0.4.tgz","integrity":"sha512-t6m3eSxyVmBegadxZpJk2JDAGKnuWyIkIcreqiCPWVaP7hKlepC8Faqn13B/MdX90XP0ZYaVlBVK5Cm9eW/KFg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID2eYha5ocEGTWsew3GFyxLkJ6UaxYAlw496bn/S6M6IAiB/MBOLlVrF54mK9mJTDkUJBuNWY+wM6A81yF3ygXQ3qg=="}]},"maintainers":[{"name":"daniel-faber","email":"mail@daniel-faber.de"}],"_npmUser":{"name":"daniel-faber","email":"mail@daniel-faber.de"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-ts-0.0.4.tgz_1503948855655_0.8134100777097046"},"directories":{}},"0.0.7":{"name":"@daniel-faber/json-ts","version":"0.0.7","author":{"name":"Daniel Faber","email":"mail@daniel-faber.de"},"license":"WTFPL","description":"validate/convert json in typescript","main":"dist/src/json-ts.js","types":"dist/src/json-ts.d.ts","scripts":{"build":"tsc","clean":"rimraf dist","prepare":"rimraf dist && tsc","test":"jasmine --config=jasmine.json"},"repository":{"type":"git","url":"git@git.home.leptonite.de:daniel-faber/public/json-ts"},"keywords":["json","typescript"],"devDependencies":{"@types/jasmine":"~2.5.53","jasmine":"~2.6.0","rimraf":"~2.6.1","typescript":"~2.4.1"},"gitHead":"d9ad1680e963746807a35dc469d4a905ac55366a","_id":"@daniel-faber/json-ts@0.0.7","_npmVersion":"5.4.2","_nodeVersion":"8.4.0","_npmUser":{"name":"daniel-faber","email":"mail@daniel-faber.de"},"dist":{"integrity":"sha512-Kly4Lgz3Fd/apcPG6aABP4Jto3ruKDgVvWUaOXRxaE7RUt0dVyqP4oqydkzaGOVgpVQ1hCHSGjx86c0bc2GuQA==","shasum":"aa00785af333d9b84fc35ce68f2a800922185b77","tarball":"https://registry.npmjs.org/@daniel-faber/json-ts/-/json-ts-0.0.7.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnCXONmYss5nV/v2/g+EBiFjpg/4yMu5z1458o2ELANAIhAOnSPGfJvBZWoxc60GJ722rsS/+MjwmEnP9hQkNjWCWR"}]},"maintainers":[{"name":"daniel-faber","email":"mail@daniel-faber.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-ts-0.0.7.tgz_1505868627817_0.9033137187361717"},"directories":{}},"0.0.8":{"name":"@daniel-faber/json-ts","version":"0.0.8","author":{"name":"Daniel Faber","email":"mail@daniel-faber.de"},"license":"WTFPL","description":"validate/convert json in typescript","main":"dist/src/json-ts.js","types":"dist/src/json-ts.d.ts","scripts":{"build":"tsc","clean":"rimraf dist","prepare":"rimraf dist && tsc","test":"jasmine --config=jasmine.json"},"repository":{"type":"git","url":"git@git.home.leptonite.de:daniel-faber/public/json-ts"},"keywords":["json","typescript"],"devDependencies":{"@types/jasmine":"~2.5.53","jasmine":"~2.6.0","rimraf":"~2.6.1","typescript":"~2.4.1"},"gitHead":"b6207a371fe097a8f4b88b5e0c6379a0e5cc237d","_id":"@daniel-faber/json-ts@0.0.8","_npmVersion":"5.4.2","_nodeVersion":"8.4.0","_npmUser":{"name":"daniel-faber","email":"mail@daniel-faber.de"},"dist":{"integrity":"sha512-rG4By3uFszwcHLlmgO2UkcjyonyEogRmMnyY9mvDpH54R8R+OR4BuLwJ3nqhY1h0YvDpdXanZ0gnJ3zDDOdGxQ==","shasum":"c7f48f4d74334a9979fd1f7765aa3d9df873e52d","tarball":"https://registry.npmjs.org/@daniel-faber/json-ts/-/json-ts-0.0.8.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4lqaLaYwoNiOa4hwNn6+LBn73bPwNhDE4G7tPLP+slAIhAOQi68p2M2z744e1MMSgadVPExCZJYuy6ROXtik3nP6m"}]},"maintainers":[{"name":"daniel-faber","email":"mail@daniel-faber.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-ts-0.0.8.tgz_1505950162682_0.0068739845883101225"},"directories":{}},"0.0.9":{"name":"@daniel-faber/json-ts","version":"0.0.9","author":{"name":"Daniel Faber","email":"mail@daniel-faber.de"},"license":"WTFPL","description":"validate/convert json in typescript","main":"dist/src/json-ts.js","types":"dist/src/json-ts.d.ts","scripts":{"build":"tsc","clean":"rimraf dist","prepare":"rimraf dist && tsc","test":"jasmine --config=jasmine.json"},"repository":{"type":"git","url":"git@git.home.leptonite.de:daniel-faber/public/json-ts"},"keywords":["json","typescript"],"devDependencies":{"@types/jasmine":"~2.5.53","jasmine":"~2.6.0","rimraf":"~2.6.1","typescript":"~2.4.1"},"gitHead":"ac4695c82d35fac42d51c4413904406e6f1aff41","_id":"@daniel-faber/json-ts@0.0.9","_npmVersion":"5.5.1","_nodeVersion":"8.4.0","_npmUser":{"name":"daniel-faber","email":"mail@daniel-faber.de"},"dist":{"integrity":"sha512-dpoU2PwtbFtHIk6EDxtua9+7a2UAXCnTRi7csRD43Mz+TDiWU3PRAtfr/EzPOzJ/hDXS8FQd8jTZNCuYNksYaA==","shasum":"1b704c0585180d126bc0f238d96f4ff6028fb14b","tarball":"https://registry.npmjs.org/@daniel-faber/json-ts/-/json-ts-0.0.9.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGBUEZ5pJkeN6zQFz+29LvZJMDtEwoZiHSz8uBQcRdtgIgUBG1NRzNrCqtu3NyNavoPx4G2ZF3FaAiAgDaHhKIC08="}]},"maintainers":[{"name":"daniel-faber","email":"mail@daniel-faber.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-ts-0.0.9.tgz_1515886461668_0.30184415890835226"},"directories":{}},"0.1.0":{"name":"@daniel-faber/json-ts","version":"0.1.0","author":{"name":"Daniel Faber","email":"mail@daniel-faber.de"},"license":"WTFPL","description":"validate/convert json in typescript","main":"dist/src/json-ts.js","types":"dist/src/json-ts.d.ts","scripts":{"build":"tsc","clean":"rimraf dist","prepare":"rimraf dist && tsc","test":"jasmine --config=jasmine.json"},"keywords":["json","typescript"],"devDependencies":{"@types/jasmine":"~2.8.8","jasmine":"~3.2.0","rimraf":"~2.6.2","tslint":"~5.11.0","tslint-language-service":"0.9.9","typescript":"~2.9.2"},"gitHead":"25b92d818f6484940f6e438ff110f69b63327ce2","_id":"@daniel-faber/json-ts@0.1.0","_npmVersion":"5.7.1","_nodeVersion":"8.10.0","_npmUser":{"name":"daniel-faber","email":"mail@daniel-faber.de"},"dist":{"integrity":"sha512-BbRI/PvJYGZDKV7DizDe0LaQjHnu4clrnBi2r1njm6IKVbeunaZ4eVFOCGOaVjxr6/asgZUetV34ivvZuMTqLQ==","shasum":"677a713751fc2862463216427bf78453a280fdd3","tarball":"https://registry.npmjs.org/@daniel-faber/json-ts/-/json-ts-0.1.0.tgz","fileCount":13,"unpackedSize":81641,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbccZaCRA9TVsSAnZWagAAHAYQAILoz3e78tR/YOgsBOEU\nnrDS8N7G+BCu26c9Z/pEvK8ArOw8OZCZ5RtTIKBAUTStswJbrktimAcamdY4\nr7p+Mkx3r5CMOwRcKViNZ1siip9l4XZQyfmauwIi0g0Af1OA2CpjXq8efST5\nLDv2K/UksFhKGadCCCLURHWGxi5AtWDPXorKpzrEhZxlY82KZSm4ApyUhP1L\nsPWrgtWEhb0e7ElAZGgmKPd4yEA+FNp6tSzh6hSgMFz//umUY8qQLPHbJsof\nMkBwipAVfNqES2zySKgORqmKLFJNYOM/j/Udw5U0B3gWWPhVG/kRTUvHdBfb\nKT6vxv4YZ7rIwnRqeM0i4G+flxMq2TQoe72AAzOmRGWZUCjz3XgdmTz0TDYk\nRXdKIuIN9VP8pEQV6VOMcWB3r+jJ7L5Fob8xDlIc4FP6B6/SAvx52tnRPtKG\ngd+q818KelUJTjoyuiZ3PUHZj9gqFbYrOKUnaESnjY536UlabhkMkRFetQNx\nq5xzNr9ZFTu+H26Re/xY3y67QYRR0JDPcqYjNiq3B8xX9Q5nYKE/ZGJEX+cy\nbDt3pTz83l0C7vPrahfKvl1r51YlDXvHUZs3v6hbxMf4mIfVLQY+nDgZLplG\nkbVCZ4CO+NVI4dEgQIEUxqoB4C4UGk7o++Ge9dpYb8SD39GNe8QG4VbH6S2x\nqAiq\r\n=XWLw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDG+VZPXUbkJDkUmku+kqKz26jbeJqlbzFSkKUzvi/AaAiACVG5ZzbCFfCObYoSlPkIpsjFoBajZtj2H8WvUjyrkuw=="}]},"maintainers":[{"name":"daniel-faber","email":"mail@daniel-faber.de"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-ts_0.1.0_1534183001737_0.7046363308696211"},"_hasShrinkwrap":false},"0.2.0":{"name":"@daniel-faber/json-ts","version":"0.2.0","author":{"name":"Daniel Faber","email":"mail@daniel-faber.de"},"license":"WTFPL","description":"validate/convert json in typescript","main":"dist/src/json-ts.js","types":"dist/src/json-ts.d.ts","scripts":{"build":"tsc","clean":"rimraf dist","prepare":"rimraf dist && tsc","test":"jasmine --config=jasmine.json"},"keywords":["json","typescript"],"devDependencies":{"@types/jasmine":"~2.8.8","jasmine":"~3.2.0","rimraf":"~2.6.2","tslint":"~5.11.0","tslint-language-service":"0.9.9","typescript":"~2.9.2"},"gitHead":"1930cf8239a404bb647f57c5bfb72e688125f80d","_id":"@daniel-faber/json-ts@0.2.0","_npmVersion":"5.7.1","_nodeVersion":"8.10.0","_npmUser":{"name":"daniel-faber","email":"mail@daniel-faber.de"},"dist":{"integrity":"sha512-X5vJcGFF969AHuXFOdpE71ZWlvif62en+btSE6EUnjvbjyCZyuew1Qw1tULXWRndxukPlH6po09viioHoEg+xw==","shasum":"deed294c4d923f9ecffe5bf5a04a6fbbea27d052","tarball":"https://registry.npmjs.org/@daniel-faber/json-ts/-/json-ts-0.2.0.tgz","fileCount":13,"unpackedSize":85453,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbnslVCRA9TVsSAnZWagAAFfkP/06M+9bu9BWdmYbVX74R\nCzrV3p4q0bS9wLc1VvkObndXORDFJ0AAVFTD8q0lrEIVm4j+EdH8u8yDlBEl\nD/NEYHaR+iTTpIhu/1mLv9PZCR/5i5h22rah0SZ9zmt4XmcBw2rY+azibyBH\nXv62uxMOhPSLXv32buuqevDoVccv25/0SIYqHcSUSZuk/LpvIdNM39ki2OTf\nU9MCBhmxfD5vYlKaaWr6SqbQ/DM+6DDNxDNk8JXhmb19qG7YL232YoDG3Fz3\njMXoD3ZAobvUvS4T043VzAyKADksicEMNQNQ51IZov7UgIlWpAOqVXuj10eF\nqHsfFqN0Ic056Ac3oHARwyuYGb3/p+8jccd1SX3p11TYmIRKJ2qQUmIj9zRT\nWuV3F+G0oK4aK/kpGc/gIirp+LHRiC3fClTFT68vHg44QLZnv21ROH4BOXsi\nPwWyapykwmj90lv0YhUYAw1Ax3fVRO9DzTftT/NJstOEn4gKWucGJu5JHcQ/\nQ2IiSw27tMWD7zME1exS0UXg6m8GY5pN0QJuLFsEKyLr5n5cm76jk0P60T7h\nSt5eEUA9LFtqS8rITZvgUYAZHwhNsgU1YpZ4xpkbkEbVcUysKukd/x+WXLpg\nUw7eORZ/ItcXF6fer2+OkZkrm5dSinQCKN9/lNuxNBL4v82uMZ7LzwsV+cTQ\neDAx\r\n=JwL5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICgiUtNhcCjdgt2SGVf6Bv7M1rrvUE0iN1fAHyupCQvBAiAcYjMi8+IjMP84XrNHd/jepFFcQfupkFKjI3ZPLI0Gsw=="}]},"maintainers":[{"name":"daniel-faber","email":"mail@daniel-faber.de"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-ts_0.2.0_1537132884331_0.6522902836296565"},"_hasShrinkwrap":false},"0.3.0":{"name":"@daniel-faber/json-ts","version":"0.3.0","author":{"name":"Daniel Faber","email":"mail@daniel-faber.de"},"license":"WTFPL","description":"validate/convert json in typescript","main":"dist/src/json-ts.js","types":"dist/src/json-ts.d.ts","scripts":{"build":"tsc","clean":"rimraf dist","prepare":"rimraf dist && tsc","test":"jasmine --config=jasmine.json"},"keywords":["json","typescript"],"devDependencies":{"@types/jasmine":"~2.8.8","jasmine":"~3.2.0","rimraf":"~2.6.2","tslint":"~5.11.0","tslint-language-service":"0.9.9","typescript":"~2.9.2"},"gitHead":"2b9afb92dd1656c1a6b86c577248d12e8e225fe5","_id":"@daniel-faber/json-ts@0.3.0","_npmVersion":"5.7.1","_nodeVersion":"8.10.0","_npmUser":{"name":"daniel-faber","email":"mail@daniel-faber.de"},"dist":{"integrity":"sha512-792Zsf75uoIogykHhYTGaI6GaE9pKj09PXfix1c3eCltLohvvm7qNKkZhkC4rNqbq4RdJfS+xHqm3MNKJWlUEQ==","shasum":"5404e83d1a1aea447df72d8c814e418830489b78","tarball":"https://registry.npmjs.org/@daniel-faber/json-ts/-/json-ts-0.3.0.tgz","fileCount":13,"unpackedSize":90631,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbsUrKCRA9TVsSAnZWagAA4z4QAJlfZxj/MygK3Jw325Rq\nBuP/+kmZB9AsxL5pVjifM0fbUWPHtSQZTodzhJid7RZRUhu+jThwGuFfoeio\n13yYGzApEeGc1+S8u3AjDp1wkKJro5LA229Lw3a+MoHcf6FUoamc53bRAMBN\np/+8tCyIYNOWjn90vDV4JrPVS5Kw80mQGDcdhBLGZCu/CCLfQlgxXJNXIBn6\nD07dwsEjolO9qA1ETgtQufsKGosm+Ew+rxvdMlMoTHV8KkECs0y4Lrw+bpS+\njeNm+VM+tf2dLM5ZsjegjtN6HOr4xlqSLBpPvZgXl6ANH6MmyzaWLlZqGzvi\nXi+VMDL0rVaDJ4RvudgTawvC5bKz6xrTejhQZ70VPjh9m+BdLIn2MaJUDaGo\nDROzaJ4qYm+OjI38DvLEzYDqfujCnDgmoPnTtC+lQ/xl6sD7fXy5vJe0Un2d\nAQQ7KEOXBiDIFq0V/qaMByMvBDCFU5bttGWlqgdqyCbc7oWCQkix+N78qp9Z\ns+h0DZRQFQvIl57z3TPPe/HiL7Dn6GEwHosw0+zsX8LA+ljY98O4icUeY7lD\nf4eobWnDyiw7TsfxBN7d8jJcqtfMFzO019S2WUmlt2DzhB5j47Tlp3HSfBmP\nYqwR8VvmYfIdZFQIBFnNSjzuXP8dn3hrsBvEt01Bdak2Aepc2jaM6i7l7I2T\nc06c\r\n=Z1Dc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrfapmr6qMNJZeZHWgLhuL4uZE3rRvm2gVgL/wsaiLLgIgNtZQnaqr4bajdj45gerYjYvYkr+BdQFDuyL9bgV7MeI="}]},"maintainers":[{"name":"daniel-faber","email":"mail@daniel-faber.de"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-ts_0.3.0_1538345674141_0.710939402737591"},"_hasShrinkwrap":false},"0.4.0":{"name":"@daniel-faber/json-ts","version":"0.4.0","author":{"name":"Daniel Faber","email":"mail@daniel-faber.de"},"license":"WTFPL","description":"validate/convert json in typescript","main":"dist/src/json-ts.js","types":"dist/src/json-ts.d.ts","scripts":{"build":"tsc","clean":"rimraf dist","prepare":"rimraf dist && tsc","test":"jasmine --config=jasmine.json"},"keywords":["json","typescript"],"devDependencies":{"@types/jasmine":"~2.8.8","jasmine":"~3.2.0","rimraf":"~2.6.2","tslint":"~5.11.0","tslint-language-service":"0.9.9","typescript":"~2.9.2"},"gitHead":"2034194d1d26513429c26a06a699668393538240","_id":"@daniel-faber/json-ts@0.4.0","_npmVersion":"5.7.1","_nodeVersion":"8.10.0","_npmUser":{"name":"daniel-faber","email":"mail@daniel-faber.de"},"dist":{"integrity":"sha512-QcoLZvb6T/sFJiwYv/Arn7FKly0IitB3HympfKbwEnfr9poc6uZ/qZv3F9Irda7z0wVT1m0CW5gwe3ZUitWoOA==","shasum":"22357c28042324c99b9df6fe5c21c8cb60ed8245","tarball":"https://registry.npmjs.org/@daniel-faber/json-ts/-/json-ts-0.4.0.tgz","fileCount":13,"unpackedSize":91831,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb9HI0CRA9TVsSAnZWagAADOAP/12siD6XEsQp4Le6/IZU\nrFBve3fdh1hiwTIKFdI7BGxmrEOIL/P1E0w+wwQdEHzSCrwexj8o46fTZXKN\nT2rDFA0gOxKqJDvItL+tZOoiA6oD3KAYwYMJd14w3hn0rt+mZJMohfoM6gsZ\nrCPCdECAzFUXJCuKC/5ceLgpcTMkfod59MPLKIptdAiXlxNdW6+rDCU43FS9\n1jMDcKHEGJHZs8u3zLKdXQEOp4cpm60v3OC34Frc5NY7SX673v3IWMIh37Dh\n0qMBwgNCQFfj711tD3ItMv+3WHCA3KdeNcHiYi10v2cyKwTDSeVrt1nFdN6n\nHCIEUITNTjTZ4lx0zTRLNH68jb07gn1b1vjyDZup5abnxVWF0Gb2QKjoqk3Z\nIO2agec+jsE2BkB7h+SDnsokRolIbJid+v6VKtmJ4u0jzFz5bCLVzMf+/b7P\nQVkoOhVTSbv8Bf8wnhjSookPZNs1WRGTJYs0qipTIHamelRytOMuP92wnBU6\nahd2t0xd8i2tW0p5RYZRL0FoCR4EWAkStp/1E9cZ4k6fWYwP8JmJehWjCfDd\ncYzXRRP0KJMIOP+fpCCsT3JCJkOUCS9bRpU/TjQAKtGLs3H9Km2m84olC5HU\n4MmfBq/29vjzbxMt3fFsxPGWVP6gHFjKWGVo4KdwAd0j9uQMqDM9ikJ+DOCG\nmJ2A\r\n=46EJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUp3IgCv+FaqDHdye2+VeRqlhAmkzKUlI94eh6amla6gIgdMgv9JacijaQ2EghN0gutGrPRdXzn1LfF+TVAt24rUU="}]},"maintainers":[{"name":"daniel-faber","email":"mail@daniel-faber.de"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-ts_0.4.0_1542746675425_0.6087213776309803"},"_hasShrinkwrap":false},"0.5.0":{"name":"@daniel-faber/json-ts","version":"0.5.0","author":{"name":"Daniel Faber","email":"mail@daniel-faber.de"},"license":"WTFPL","description":"validate/convert json in typescript","main":"dist/src/json-ts.js","types":"dist/src/json-ts.d.ts","scripts":{"build":"tsc","clean":"rimraf dist","prepare":"rimraf dist && tsc","test":"jasmine --config=jasmine.json"},"keywords":["json","typescript"],"devDependencies":{"@types/jasmine":"~2.8.8","jasmine":"~3.2.0","rimraf":"~2.6.2","tslint":"~5.11.0","tslint-language-service":"0.9.9","typescript":"~2.9.2"},"gitHead":"f3588137f229f0bd11fac9701ab6bb6af24a665b","_id":"@daniel-faber/json-ts@0.5.0","_npmVersion":"5.7.1","_nodeVersion":"8.10.0","_npmUser":{"name":"daniel-faber","email":"mail@daniel-faber.de"},"dist":{"integrity":"sha512-rcxiF7wv2+1pal1ZOI/UKW/6hVYKHztJs1zjFyh0wtc/pI2oJ5shBdZQVZmHpRni4ZNnPgEO7W4121/Z4MSTbg==","shasum":"7de761fb04dd454b273f918ff9ff68ea517a8d23","tarball":"https://registry.npmjs.org/@daniel-faber/json-ts/-/json-ts-0.5.0.tgz","fileCount":15,"unpackedSize":99211,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcGKyiCRA9TVsSAnZWagAA8SUP/jOohwSd/SlkjNNSynq6\nPOdUCxwjGmDvBFbESizCbVZyKywhp/XVTaVHyd+OUWdVshzZFhfoq0pLXhQs\nwbff8KC7/kh2VoYCJBuIx4eNfqb94cYV7xHQ2eB22tvrNa3pUh/RVW0smVzn\nnHB5MboUT6z8cx+Mb1sl8Ayy7Zuy2T+qvLdWDXt+87TJskwpXQ4cTZ7nlPtv\n4mTzJLdq8s9qWa4H6/f5MrHrFpqSdxUJWiM7DvIwgdC2iCJ6G9AiIdgnvZfe\n8K/7AC2Vj5NYRFS8nLBn9M01DpohLf+V1k/gsFZwzW33mLsETwbRTvQYZ5gC\ndilVTSdnfSvUl6iaieUTb+hmRUru/xmu1RzIMctz6YsMErWqXcd8wTntGNqt\nTUU2KcE6H5iWH+nWBak/kWq92ADI6RDtoW/T9xLrHy7YBFRTlnKuNfcCihht\nuZirtYE34GZ7gMxVvBG45Jo0lznCwyKWByLDHfX36qsv5rqZ5SuzSBlfOE2P\nI/k4KfoE/2zaysxK6pOl9bsLY2ddYz0IzXAYTb0gWF0tPrXfTFaDAZQi5izf\nXIX7sG3JrGeL2L+2hsHkCQY159iWpKNLVF/F3559/LMFkGE4zOETHwUYfZ1c\n2K1VSoAaZHWbphTztRMSQnc4SGoIWfdRYxkiaXrIV7OwBA1C3WjqDUUkriq9\nPVHq\r\n=hY8p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCnl4OD85iAhCCmhmpFOPnmwZcYhilf7V4Qqko58nYOlgIgD4TH/72p2Dy81xuDWZzEXoEsgwljgazNyizJEH8GnMo="}]},"maintainers":[{"name":"daniel-faber","email":"mail@daniel-faber.de"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-ts_0.5.0_1545120930310_0.5048113397683469"},"_hasShrinkwrap":false},"0.6.0":{"name":"@daniel-faber/json-ts","version":"0.6.0","author":{"name":"Daniel Faber","email":"mail@daniel-faber.de"},"license":"WTFPL","description":"validate/convert json in typescript","main":"dist/src/json-ts.js","types":"dist/src/json-ts.d.ts","scripts":{"build":"tsc","clean":"rimraf dist","prepare":"rimraf dist && tsc","test":"jasmine --config=jasmine.json"},"keywords":["json","typescript"],"devDependencies":{"@types/jasmine":"~2.8.8","jasmine":"~3.2.0","rimraf":"~2.6.2","tslint":"~5.11.0","tslint-language-service":"0.9.9","typescript":"~2.9.2"},"gitHead":"c137a1e3f5bb07bb370e0188e75a60393c625303","_id":"@daniel-faber/json-ts@0.6.0","_npmVersion":"5.7.1","_nodeVersion":"8.10.0","_npmUser":{"name":"daniel-faber","email":"mail@daniel-faber.de"},"dist":{"integrity":"sha512-dgSBL7aX3g5/hxAsgUejPi5zQclEfKegr2PED6ACHQICCoCWHfgx+ua0W8TgGuShlsgCp+osgMCdd6f5HgwTuw==","shasum":"3d857fc3bae74d98a115fd7e853bd22dda18e2d1","tarball":"https://registry.npmjs.org/@daniel-faber/json-ts/-/json-ts-0.6.0.tgz","fileCount":15,"unpackedSize":99897,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcI3l6CRA9TVsSAnZWagAAkzoP/3fOZrCC2quxe5ggLTy8\nIwbQdUB1ITAQOi2ANpwPBBM0lrhYxlOAu/F1ImYY/embCnSQo1rV+Uw26Rbu\ni0FvQZxXgHDNiA7CKHM9Zk7PKy7IIzmY5vx3BZJVZMIt74ND14qtf8Cl4h1D\nDZzuR2SGj1XLkYgDh6uL5ajjlthQkp+ondcEajUFPb6i8MP+9O3cCMGirGrd\nxgeUkHKqkAnpl0DFN63vJcX1c7MJPXI+2ZVvLuqQ5UA1esSUaAzmOEf6cqcW\nqBh068AhCLRQqq8A0fjHtzViNACEhXj9BHEb3IDeQSO4VXty/Zc4fjLb3vCs\nNwSSVG16S5A0meqBcDc1YbO0WyadQ2DoDbIhZs/xuNyVGTw3j4xKeCw7EW7t\nhqvxcwYKnAuDiNEPraYXCboXMPaiT2h1/Lys+7hFl2vAK8cSDERrtZYJNpaK\nT2hXNOS1cQsDXYZVSHpFMOuOm0zYFQW5Gwqy6TI1LJyi+UIwF+rt0SwAnSXf\nQ/3kxyQBQgXh4TO/wWSNLm+0r7GTEQMuzZYoI3d8NgECSB1iayLe1+csTGwg\nuKU0EKLpuAdm8L5ML4dqDtwtcwxznQqdhaObHDizFQNy9W0x3ZSqG0eUau8O\nytEsfLd5TUH+GzG3ATs39BAk5OWHJOoEqwl1Cm1iyvs72SgkFUVEml9Unute\nlOTt\r\n=vI1K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDy8eA0GAI7tUnMYLgUYcurNn03HmjeNYj6suFfNma4vgIhAMEvNM/FlLgBZ9N1V+UWaDt/PB0CA4Q335qTButniSgw"}]},"maintainers":[{"name":"daniel-faber","email":"mail@daniel-faber.de"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-ts_0.6.0_1545828730382_0.3894061009815839"},"_hasShrinkwrap":false}},"readme":"json-ts\n=======\n\nThis package contains utility functions that can help you to validate and convert JSON data. Its primary usecase is conversion from JSON to instances of typescript classes, but you may convert to anything else.\n\n\nMotivation\n----------\n\nLet's say we use a REST API that provides user objects:\n\n    [\n        {\n            \"id\": 1,\n            \"title\": \"Professor\",\n            \"firstName\": \"Albert\",\n            \"lastName\": \"Einstein\"\n        },\n        {\n            \"id\": 2,\n            \"firstName\": \"Elsa\",\n            \"lastName\": \"Einstein\"\n        }\n    ]\n\nWe may have a typescript class like this as our user model:\n\n    class User {\n\n        public id: number;\n        public title?: string;\n        public firstName: string;\n        public lastName: string;\n\n        public get fullName(): string {\n            return (this.title ? this.title + ' ' : '') + this.firstName + ' ' this.lastName;\n        }\n\n    }\n\nWorking directly with the JSON response has disadvantages compared to instances of our User class:\n\n    JSON.parse(response).forEach(user => {\n        // user.fullName is undefined\n        // user instanceof User is false\n    });\n\nThis is why I prefer to convert the json response into instances of my model classes. Another reason is that the structure of the json response gets checked against your expectation during this conversion. If your REST API and your client's model get out of sync (of course this doesn't happen to you, but just imagine…) you will notice as soon as possible. And you will get easy to understand error messages as we will see later.\n\n\nJsonValue\n---------\n\nA `JsonValue` is anything you can encode as JSON and is defined like this:\n\n    type JsonValue = null | boolean | number | string | JsonArray | JsonObject;\n\n    interface JsonArray extends Array<JsonValue> {\n    }\n\n    interface JsonObject {\n        [key: string]: JsonValue;\n    }\n\nThe result of `JSON.parse(string)` is always a `JsonValue` (if it doesn't throw an Error).\n\n\nJsonMapper\n----------\n\nA `JsonMapper` is a function that takes a `JsonValue` and validates it and/or converts it into something else. This is the most basic concept in json-ts:\n\n    type JsonMapper<T> = (jsonValue: JsonValue) => T;\n\nIf validation failes or a `JsonMapper` failes to convert its input for another reason, it throws a `JsonMappingError`.\n\n\nexpect* functions\n-----------------\n\njson-ts shippes with some basic `JsonMapper`s:\n\n    function expectBoolean(jsonValue: JsonValue): boolean\n    function expectNumber(jsonValue: JsonValue): number\n    function expectString(jsonValue: JsonValue): string\n\nThese functions just check the given `jsonValue` to be a `boolean`, `number` or `string`, respectively. A `JsonMappingError` will be thrown if `jsonValue` has the wrong type. Otherwise `jsonValue` will be returned unchanged.\n\n    function expectInteger(jsonValue: JsonValue): number\n\n`expectInteger` is like `expectNumber` but additionally assures `jsonValue` to be an integer.\n\nExamples:\n\n    expectBoolean(false)   // returns false\n    expectBoolean(true)    // returns true\n    expectBoolean(\"false\") // throws JsonMappingError: boolean expected in jsonValue\n\n    expectNumber(42)       // returns 42\n    expectNumber(3.1415)   // returns 3.1415\n    expectNumber(\"42\")     // throws JsonMappingError: number expected in jsonValue\n\n    expectString(42)       // throws JsonMappingError: string expected in jsonValue\n    expectString(\"42\")     // returns \"42\"\n    expectString([\"42\"])   // throws JsonMappingError: string expected in jsonValue\n\n    expectInteger(42)      // returns 42\n    expectInteger(42.0)    // returns 42\n    expectInteger(3.1415)  // throws JsonMappingError: integer expected in jsonValue\n    expectInteger(\"42\")    // throws JsonMappingError: integer expected in jsonValue\n\n\ntoDate\n------\n\nTimestamps in JSON are often represented as strings like `\"2017-09-20T21:00:29.462Z\"`, but you may prefer to work with `Date` objects instead. Use `toDate` to convert these strings to `Date`s:\n\n    function toDate(jsonValue: JsonValue): Date\n\nTODO: Some invalid dates like `\"2017-02-31T21:00:29.462Z\"` are currently accepted in some browsers.\n\nTODO: Some invalid dates like `\"2017-02-32T21:00:29.462Z\"` don't convert to valid Date objects but don't throw an Error.\n\nTODO: Should `\"2017-09-20T21:00:29Z\"` (without milliseconds) be accepted?\n\n\narrayMapper\n-----------\n\nA common case is a `JsonArray` where each element should be validated/converted in the same way. `arrayMapper` is a function that takes a `JsonMapper` that works for single array elements and returns a `JsonMapper` for an array of such values:\n\n    function arrayMapper<T>(elementMapper: JsonMapper<T>): JsonMapper<Array<T>>\n\nIt is important to understand that `arrayMapper` *is not* a `JsonMapper` for arrays but it is a function that *creates* `JsonMapper`s for arrays. Let's look at some code:\n\n    const expectStringArray = arrayMapper(expectString);\n    expectStringArray(\"foo\")               // (1) throws JsonMappingError: array expected in jsonValue\n    expectStringArray([\"foo\", \"bar\"])      // (2) returns [\"foo\", \"bar\"]\n    expectStringArray([\"foo\", \"bar\", 42])  // (3) throws JsonMappingError: string expected in jsonValue[2]\n\nHere `expectStringArray` is a `JsonMapper` which has been created by `arrayMapper`.\n\nFirst, `expectStringArray` checks if the given jsonValue is an array and otherwise throws a JsonMappingError, as you see in example (1).\n\nSecond, `expectStringArray` iterates over the array and calls `expectString` for each element, collecting results in a new array. This is similar to an array's `map` function, as you see in example (2).\n\nOne main difference between `map` and `arrayMapper` is error handling: The mapper created by `arrayMapper` (`expectStringArray` in our example) catches errors throw by the given elementMapper (`expectString` in our example) and throws a new `JsonMappingError` with combined information, as you see in example (3): The error message 'string expected in jsonValue[2]' contains information from the original error ('string expected') and the array index where the error happened ('in jsonValue[2]').\n\nThis also works for nested arrays. Let's say we expect our json to contain a 3-dimensional number array:\n\n    const expect3dimNumberArray = arrayMapper(arrayMapper(arrayMapper(expectNumber)));\n    expect3dimNumberArray([[[0, 1], [2, 3]], [[4, 5], [6, 7]]])      // returns [[[0, 1], [2, 3]], [[4, 5], [6, 7]]]\n    expect3dimNumberArray([[[0, 1], [2, 3]], [[4, 5], [\"six\", 7]]])  // throws JsonMappingError: number expected in jsonValue[1][1][0]\n\n\nobjectMapper\n------------\n\n`objectMapper` is a function that creates `JsonMapper`s for objects:\n\n    function objectMapper<T>(factory: (accessor: JsonObjectAccessor) => T): JsonMapper<T>\n\n    interface JsonObjectAccessor {\n        get<T>(propertyName: string, mapper: JsonMapper<T>): T;\n        getOptional<T>(propertyName: string, mapper: JsonMapper<T>): T | undefined;\n        getOptional<T>(propertyName: string, mapper: JsonMapper<T>, defaultValue: T): T;\n        ignore<T>(propertyName: string): void;\n    }\n\nThere's no fun in trying to understand these signatures, so let's see an example where we use `objectMapper` to create a mapper for our `User` class:\n\n    const json2User = objectMapper(accessor => {\n        User user = new User();\n        user.id = accessor.get(\"id\", expectNumber);\n        user.title = accessor.getOptional(\"title\", expectString);\n        user.firstName = accessor.get(\"firstName\", expectString);\n        user.lastName = accessor.get(\"lastName\", expectString);\n        return user;\n    });\n\nTODO: explain what's going on here\n\nAnd now let's use `json2User` to map json to User objects:\n\n    json2User({ \"id\": 2, \"firstName\": \"Elsa\", \"lastName\": \"Einstein\" })  // returns a User object\n    json2User({ \"id\": 2, \"firstName\": \"Elsa\", \"lastName\": 1 })           // throws JsonMappingError: string expected in jsonValue.lastName\n    json2User({ \"id\": 2, \"firstName\": \"Elsa\", \"lastname\": \"Einstein\" })  // throws JsonMappingError: missing property lastName in jsonValue\n\n\nmapObjectMapper\n---------------\n\n`mapObjectMapper` is a function that creates `JsonMapper`s for objects with arbitrary keys and a common value type, i.e. objects that are used as a map.\nFor example let's say we have an object that serves as a map with number values:\n\n    const map = { \"one\": 1, \"two\": 2, \"pi\": 3.141529, \"the answer\": 42 }\n\nWe cannot use `objectMapper` for this because `objectMapper` requires us to know every occurring property name.\nInstead we create a mapper for these kind of objects with `mapObjectMapper`:\n\n    const expectNumberMap = mapObjectMapper(expectnumber);\n    const numberMap = expectNumberMap(map)\n\n\nTips\n----\n\nI'd usually prefer `json2User` to be a static method in our User class. And I tend to prefer immutable objects:\n\n    class User {\n\n        public constructor(\n            public readonly id: number,\n            public readonly title: string | undefined,\n            public readonly firstName: string,\n            public readonly lastName: string,\n        ) {\n        }\n\n        public get fullName(): string {\n            return (this.title ? this.title + ' ' : '') + this.firstName + ' ' this.lastName;\n        }\n\n        public static readonly fromJSON = objectMapper(accessor => new User(\n            accessor.get(\"id\", expectNumber);\n            accessor.getOptional(\"title\", expectString);\n            accessor.get(\"firstName\", expectString);\n            accessor.get(\"lastName\", expectString);\n        ));\n\n    }\n\nThis can easily be combined with `arrayMapper` to convert our initial JSON example to an array of `User` objects:\n\n    const userArrayMapper = arrayMapper(User.fromJSON);\n    userArrayMapper(JSON.parse(response))   // returns [ new User(...), new User(...) ]\n\nRoadmap\n-------\n\n* documentation for expectIntegerInRange\n* documentation for strictObjectMapper and accessor.ignore\n* documentation for enumMapperByValue and enumMapperByIdentifier\n* full test coverage\n* improve toDate\n* support for mapping to js-joda's Instant\n* support for mapping to momentjs\n","maintainers":[{"name":"daniel-faber","email":"mail@daniel-faber.de"}],"time":{"modified":"2022-06-12T16:51:48.922Z","created":"2017-07-19T21:18:11.208Z","0.0.3":"2017-07-19T21:18:11.208Z","0.0.4":"2017-08-28T19:34:16.536Z","0.0.7":"2017-09-20T00:50:28.810Z","0.0.8":"2017-09-20T23:29:23.824Z","0.0.9":"2018-01-13T23:34:22.750Z","0.1.0":"2018-08-13T17:56:41.828Z","0.2.0":"2018-09-16T21:21:24.941Z","0.3.0":"2018-09-30T22:14:34.324Z","0.4.0":"2018-11-20T20:44:35.590Z","0.5.0":"2018-12-18T08:15:30.463Z","0.6.0":"2018-12-26T12:52:10.562Z"},"keywords":["json","typescript"],"author":{"name":"Daniel Faber","email":"mail@daniel-faber.de"},"license":"WTFPL","readmeFilename":"README.md"}