{"_id":"teishi","_rev":"94-4274508718fb0e05bc1c843df24af474","name":"teishi","dist-tags":{"latest":"5.1.2"},"versions":{"1.0.0":{"name":"teishi","version":"1.0.0","keywords":["error checking","functional"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@1.0.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"57fdd75fdf7dadfa3c9ea3a2817811bf0b09a480","tarball":"https://registry.npmjs.org/teishi/-/teishi-1.0.0.tgz","integrity":"sha512-//MBfavr4ieXvthEgiDzxSzwq0HANUqunQSli/b7LAsCP9ib8NTXFvQ7EXIugJC3/tstVFbIo06FpFBaE1xKIg==","signatures":[{"sig":"MEYCIQC0GzqUon5RgpNq5vD/ewLP3/24sh1xTe9ghE9wQg1bhgIhAJzusJs60X+LAK0Lbhv90t9SnPbUce4RaLqGEqZNy84t","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.3.24","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"1.0.1"}},"1.0.1":{"name":"teishi","version":"1.0.1","keywords":["error checking","functional"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@1.0.1","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"72489855476dfac5ecff659d70ad6ce903fbf8f7","tarball":"https://registry.npmjs.org/teishi/-/teishi-1.0.1.tgz","integrity":"sha512-NjwEhYdE+U81OvBsw7Cdgj5c/uloKyP3/2lDAFhI8TXbgt4IFibSrT4FkNE9FC4M3yzoJAwjKJufE4hRTW2miw==","signatures":[{"sig":"MEUCIQD1STRnXnXGATOVazWIKtNN/J9e3YZGvF1zWzWC7bX/ZgIgVMSG4GPGo+Z36HUscJbp8O8TQcXIzZFBIDWNeitMEzY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.3.24","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"1.0.2"}},"1.0.2":{"name":"teishi","version":"1.0.2","keywords":["error checking","functional"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@1.0.2","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"8a41b9fc20c379e3a62050c301109aaff02e5145","tarball":"https://registry.npmjs.org/teishi/-/teishi-1.0.2.tgz","integrity":"sha512-RXpmto4EyEJ1oDPQ3Nu0XSdyBYPAeJAAwMUbXcg5qpFjtyHERtGMJPMGFzG15TngBtcUdhVgUsk9edkF6g0L3w==","signatures":[{"sig":"MEUCIB5NSLs6HPbsTLS302HPPsbAZBSAfxB0ZC2HLy8Yz2MfAiEA/nFSOTeaRtSvkOm0Eqna4QKls0fCbRagqLn6QiZLzHk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.3.24","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"1.0.3"}},"1.0.3":{"name":"teishi","version":"1.0.3","keywords":["error checking","functional"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@1.0.3","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"bf3ba4fafd88308d3742c7dbd42d9bb2895363d4","tarball":"https://registry.npmjs.org/teishi/-/teishi-1.0.3.tgz","integrity":"sha512-XbtMzNpld4igvfZeX3UvE8W6jMSmleRNM0SuDOidKzQMZvgQumClnWuImiYbXY9xhPHCbEh19CZFRlEI+yhWrQ==","signatures":[{"sig":"MEYCIQCdYFnolpzs/hOfpDYzSLVOh5f8H70Jt7283SXZcU8XrQIhAMN2ZQvHxST4MTNkZPi3R1GIBMequSyLxodTMkKc/qzs","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.3.24","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"1.0.3"}},"1.0.4":{"name":"teishi","version":"1.0.4","keywords":["error checking","functional"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@1.0.4","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"dcbaf28d2cfc386399b055695e3cea764b506132","tarball":"https://registry.npmjs.org/teishi/-/teishi-1.0.4.tgz","integrity":"sha512-XyqcK/Kr5xHIaE3CkHoBhxL3N7spXuQjrB4DogTlHIOsdDWyYoGRxCXnpcHvot0hfIT/xsoYHneVr4AC0yj+4Q==","signatures":[{"sig":"MEUCIQD65JZyWRr2ts1YLonqM/rfVTHsSPkoLdijlPiMmhSIgQIgMOOXf1m23mwrOy834EDzRNBVXL7fV+p2Ry+uozqUutc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.3.24","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"1.0.3"}},"1.0.5":{"name":"teishi","version":"1.0.5","keywords":["error checking","functional"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@1.0.5","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"a6ff96b0d00f38ab43bed1ee6e554b804e1c0e2f","tarball":"https://registry.npmjs.org/teishi/-/teishi-1.0.5.tgz","integrity":"sha512-Rp3XVowQf7dQGGUmxrVbqNgsv9pTMgobN7jTjQmi/NxiWVOyVfB9Pp+hGDNZsTRBl4flsuk0dV+QJqgCo+4IGA==","signatures":[{"sig":"MEUCIQCnr1dXpC/WwhIdgU6GhAPaZiq+wJiSiyZ61r9upkaYgQIgUyV2fpJ/Rw1F961hGHpS77mBEBqVrzofnfCYpu8eTQg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.3.24","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"1.0.4"}},"1.0.6":{"name":"teishi","version":"1.0.6","keywords":["error checking","functional"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@1.0.6","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"ac1206887ed86f1e5ff07db9b04ef70350fbeb60","tarball":"https://registry.npmjs.org/teishi/-/teishi-1.0.6.tgz","integrity":"sha512-tNrtZ577pXfQz1ngusVi1/O/+V6TOx0FG8Eoxa2mlH1dkbZugrA7a17ESh6oedoEYY29b1hCn916EDYSsY8JyA==","signatures":[{"sig":"MEYCIQCuyIp7p8C8IKWi1ulkXvCtaaeW+64TjaTf1k1n8Pmd9QIhAKCv6bNR9V/oj4PfZGtU6Lnpz1/9W7uTIRu8Klcxg6Gk","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.3.24","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"1.0.6"}},"1.0.7":{"name":"teishi","version":"1.0.7","keywords":["error checking","functional"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@1.0.7","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"cb8389359a5c91e16e130d043a7244e54d0612a6","tarball":"https://registry.npmjs.org/teishi/-/teishi-1.0.7.tgz","integrity":"sha512-yGcf6ctcAxxPOo77yIb9HhNLe/4FYco347GjRQc0Xx9f4yknTYKNsv1wdY3p2S9bADGbhWvov/eymcrPFvm2Mg==","signatures":[{"sig":"MEQCIB3wN7eCoR4VoxUyxajmvBu3vXPzOhZv/tb8+A+GoucpAiB0I4n/dW7HqJgzPW6Kl8YXIcyOsg4Xq+GOYVsa7LBG8A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.3.24","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"1.0.6"}},"1.0.8":{"name":"teishi","version":"1.0.8","keywords":["error checking","functional"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@1.0.8","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"add3eb7ce3f1ee3b762ceed3366f7c7fa5d531c5","tarball":"https://registry.npmjs.org/teishi/-/teishi-1.0.8.tgz","integrity":"sha512-fDcUdahdHywWLCLTt8SSVBHB2WZX8m9fZSzhktuLElP6RLo52zni+fh3H8UWsa/iWV60nB/VMFmldpCKjNhPDQ==","signatures":[{"sig":"MEUCIBUjED1Wdy+j1Ru1JIl5ZxLSEPgaspDlrF6mA9o6uJmjAiEA0g6cmjCVKg2ypRJKOitEwoDfjijJ1nmdLLmSmLO2vOw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.3.24","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"1.0.6"}},"1.0.9":{"name":"teishi","version":"1.0.9","keywords":["error checking","functional"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@1.0.9","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"9a53dad6b5c9dafdc8123e8cb4ca20761292059b","tarball":"https://registry.npmjs.org/teishi/-/teishi-1.0.9.tgz","integrity":"sha512-NqrDk/tK1TmYzHiwnfRPMi62/vYqepXsB9arhm93SnmovUNKNtAm1SbV5axjIyUVXBFJGYFb6tJ9HR0wQsvLWA==","signatures":[{"sig":"MEQCICKnm1a9TeE4T8IVsdyHRDKwOM6/47MCtIle0I9ncHhtAiBkyC0Vrr5jLa2WYoi7u8W79oijZxbYkRe7lYMmwxGH3A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.3.24","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"1.0.7"}},"1.0.10":{"name":"teishi","version":"1.0.10","keywords":["error checking","functional"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@1.0.10","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"9452b1fda3103eb29c631142bae741c7d187dcca","tarball":"https://registry.npmjs.org/teishi/-/teishi-1.0.10.tgz","integrity":"sha512-vJtgGrQdYpe9V7NFEK25NL/exFHJqOHH879MFivXMCrcGFnwP6yWlXTnty92n2Jol3mAFXl/VJpf0dhBIMtWYg==","signatures":[{"sig":"MEYCIQCkr39iFqpNbVTQwH4yUjnuiC6Wjc6iUi6GofQdcYRMNgIhANTucgXKtlPP2be0JNIS9XLkrimePw6IbdFLP9e1Cg8b","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.3.24","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"1.0.7"}},"1.0.11":{"name":"teishi","version":"1.0.11","keywords":["error checking","functional"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@1.0.11","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"480d4342fc2b670c7c3b0753a3b5ed669af55480","tarball":"https://registry.npmjs.org/teishi/-/teishi-1.0.11.tgz","integrity":"sha512-QWy10Y4kJNUTNYWwOpwqx/QrIDwAFtc3NGomPBkzMUU5Sl/G/aLKdMjThjmO4RO2UbJfrkoo5ksUlXQwqJXE0w==","signatures":[{"sig":"MEUCIHwtdrWyL39pAILK56UgSJFka358cCLxF1+KdWvPoy6oAiEA1kJ9l4WN/kFIWxunUuR/yfWZ51vhMmfj1wgG1WF9Hpo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.3.24","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"1.0.7"}},"1.0.12":{"name":"teishi","version":"1.0.12","keywords":["error checking","functional"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@1.0.12","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"05b499f96e7ecc073901f1979baf506cea47e850","tarball":"https://registry.npmjs.org/teishi/-/teishi-1.0.12.tgz","integrity":"sha512-pUz+jHcXq4ZPuFGukd3f1RHxYWy63EAUAm9Y/ot+yeNX/x0iSDJiYW8JiftGimBeKVQkxy0VCR7a/g1OdnEYjg==","signatures":[{"sig":"MEYCIQCd/ZvorHh0BZdHD5ZwPcMA8ar3qL2ojTEZyxM9jjj6HAIhAKcOeiZJiT7h0BO7VVAKMCY5COr3Y8gz0QWVAqESWc++","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.3.24","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"1.1.0"}},"2.0.0":{"name":"teishi","version":"2.0.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@2.0.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"c8c60b878a12d99f26be9325b459cb94cc93ad16","tarball":"https://registry.npmjs.org/teishi/-/teishi-2.0.0.tgz","integrity":"sha512-AZ5nKLuF7B1tsb4OAfuaqQZ5diR21Vo3diP5pbvZN8ds6vm8DXKaHNGKeNKWlqyN7/8tOS9JXxQJa0xMYW7tJg==","signatures":[{"sig":"MEUCIBPF/y706fASHztx8gehvfv0hUhy6uW5QQ9lpyHb/cBnAiEAnXltqyAH0kpIdfA6Ew/NEC7us/pmsphae01Cgc9j6Hc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"c8c60b878a12d99f26be9325b459cb94cc93ad16","gitHead":"fb9aeb2ab86632e5d1fa981abc24581d847c14cc","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.13","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.1.1"}},"2.1.0":{"name":"teishi","version":"2.1.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@2.1.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"4d63ad9d3c0d275f4dcef425ec314a9b4edff0be","tarball":"https://registry.npmjs.org/teishi/-/teishi-2.1.0.tgz","integrity":"sha512-7yRhLN9Z7cdMx7SR44c2yLhxEXrasZpa66ZGq9GK42vOFeqzfiXqhoOfhmpCfN9DUYmhw+xsNJYlUN5rOYiIMA==","signatures":[{"sig":"MEUCICkbmjoin7tjKei4u4z3JcmFMwEsQLugGI56uEOA0grAAiEAr6WFQ2nd7u38MwpusC6tIAaBfUDRcqbfcWkQBTsQIxM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"4d63ad9d3c0d275f4dcef425ec314a9b4edff0be","gitHead":"ba5f17a5277e4a52372c2ec959c03ded37dde923","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.13","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.1.1"}},"2.1.1":{"name":"teishi","version":"2.1.1","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@2.1.1","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"770c0e9dc2d20d5b9002c56ce44f09d108a29b2f","tarball":"https://registry.npmjs.org/teishi/-/teishi-2.1.1.tgz","integrity":"sha512-Zt7/5T9jhaw3OCxEZiV6287lJfMJpx9NPAf+OY3fIVSlNdwL5PhvrZjA9/T1ym698K1tEdfSOgphfyPbJp4V5Q==","signatures":[{"sig":"MEUCIQCVkm9tSUsZgrOw+jb+djoZXZOOX9PeSgLj3Iv6n5UomAIgN14JO6tlsMZcCpEGTE0KEWm5uQNz4oco0K8mBdEg8/o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"770c0e9dc2d20d5b9002c56ce44f09d108a29b2f","gitHead":"ce824dc4a5efc6ea3ec61dd06b63a97e640d9a37","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.13","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.1.2"}},"2.1.2":{"name":"teishi","version":"2.1.2","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@2.1.2","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"c55730a6d0cff68a8fddc8f6d33de1ef9a601637","tarball":"https://registry.npmjs.org/teishi/-/teishi-2.1.2.tgz","integrity":"sha512-q/sRRLyp3JAVSdcPniGTXGazBh3Aw8FjhcwxnigoPbgI5z169RMEkU9WK/ko8hchRhJODPP4luUi362cZSQ5YQ==","signatures":[{"sig":"MEUCIQDnX9h7+2O2Ot+NgWwvlG/44LqsW0l+m8wNcbGtymn9HwIgRu0caEjT8kxRPrauQxzKw4rQA7KWQ2yKr1Bf4/AYSHo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"c55730a6d0cff68a8fddc8f6d33de1ef9a601637","gitHead":"e51f83869ba1088ac7973e13cd9f1d96b389399c","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.1.2"}},"2.1.3":{"name":"teishi","version":"2.1.3","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@2.1.3","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"8d66644c88c6a98873efc84bf8bb3d56da4fdd07","tarball":"https://registry.npmjs.org/teishi/-/teishi-2.1.3.tgz","integrity":"sha512-WT5PR2miPG2gPwMu8egZ4K/QMvXSuWjffnDJ5yv2WwGntAZnk1+XEXaXgxFXRcMoboST5SQ91rsHtucKCYpkWA==","signatures":[{"sig":"MEYCIQCgku/ax0uXjxiHGi4jHyPN0/5nWKjeeaiTxTpOSgucPQIhAN+D98UxVjSdhrllDZioxjwL9Hlzv1yBNyHBQu44SiYZ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"8d66644c88c6a98873efc84bf8bb3d56da4fdd07","gitHead":"cfe0f9f924c833ab2fdd22b1363e0597cdd3c6e8","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.1.2"}},"2.1.4":{"name":"teishi","version":"2.1.4","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@2.1.4","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"c7b2558c261d418081f62d0fce0c948c74b10b4f","tarball":"https://registry.npmjs.org/teishi/-/teishi-2.1.4.tgz","integrity":"sha512-J+HHJh9e3Ze0HiVHzxeX9gvMlfCzsqGEFg2hRbbhw1mBuKYId5U6RqHfD0JI+QKUCrysqqgxz8EH5TguQ+VvJA==","signatures":[{"sig":"MEUCIBQtkKsVwFozXybIv/S8AkGsW+rPgTMLY0ChNVVLlNQFAiEAiVZ4t+9OayBNsWvPg3rNmnEVD8VjC9HuHG0snP7IodU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"c7b2558c261d418081f62d0fce0c948c74b10b4f","gitHead":"b7be9230fc32515902f5446b6e91644912823753","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.1.3"}},"2.1.5":{"name":"teishi","version":"2.1.5","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@2.1.5","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"b4e6ee2fbff6aea2605768777cd20157bc23107c","tarball":"https://registry.npmjs.org/teishi/-/teishi-2.1.5.tgz","integrity":"sha512-M0Rs3vnUxPh0pLD2qmf/qTGVPRTQ/rNbGrG4OMdff3XgdD8ccz+rIlBHUzW0nzksjF5OHFiwjG6jBgcm+gqlHg==","signatures":[{"sig":"MEUCIH+zz6BSQpnUmTpVVxg0tQ0LAVQu01/Lc/wfPVd+wNCBAiEAt/RVmUtowCzQE7eeCrfi1trAacSXTgnwfbGP9LUqyYw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"b4e6ee2fbff6aea2605768777cd20157bc23107c","gitHead":"99352d25ccfab8249f19b1204a19815569aaed03","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.1.3"}},"2.1.6":{"name":"teishi","version":"2.1.6","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@2.1.6","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"d4ee24264bd7e039976e50c40f60464f4b7b3bb9","tarball":"https://registry.npmjs.org/teishi/-/teishi-2.1.6.tgz","integrity":"sha512-31DliODSZ9xheUpBf7D/OM+Pcjopo0c7JAOuqguMQ+sIxQ0Gqm/fYEAkbiXBuV6a7kJOuRgC78GT2nMGeYLmBA==","signatures":[{"sig":"MEQCIC87UciBMEtdnj2Hae8nNuH8jFvmuDC5HZhKWAcEK79aAiAr0cVlFWmHl6jn7org7ouF2o5t/0fNlEk5w6cVmrIi9g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"d4ee24264bd7e039976e50c40f60464f4b7b3bb9","gitHead":"4d417cbadb8ff37503e97d562457751f71c52002","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.1.4"}},"2.1.7":{"name":"teishi","version":"2.1.7","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@2.1.7","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"34b2dcd8bf9d031f2f07bfa919ca487978872d70","tarball":"https://registry.npmjs.org/teishi/-/teishi-2.1.7.tgz","integrity":"sha512-oeWVvBw2jP5q1SYDouBojnh0C6Mg9A+PIS8tNnPb2sbK9hHNBNRPoKOpEVuKrr/rJ94jC0Ui0aUK/q1atw4ulQ==","signatures":[{"sig":"MEYCIQCEYrp4xMtvVHfz7F0vf114d1XksRyvs3fugolbH4RKfgIhAMz7HBOjd2YsJzZownKYm6m+ln5w1Ie5GPMMoYJIB/B0","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"34b2dcd8bf9d031f2f07bfa919ca487978872d70","gitHead":"6346a0b099b86d42a78fe690d934d9f2c0f10aa8","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.1.5"}},"2.1.8":{"name":"teishi","version":"2.1.8","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@2.1.8","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"d3381fb7bcbb917850bf0ce8f48820459075d354","tarball":"https://registry.npmjs.org/teishi/-/teishi-2.1.8.tgz","integrity":"sha512-8NwPd8jbyYAXddDqH5lrRlcUj81K3fJNMBih/K6sbZvJDAUCG9tAVBeATJMnG9uI8ZTL13CXKH8mcAcnJ43hyw==","signatures":[{"sig":"MEUCIQDyrT7vquPITWhslFtT1cMVf4SgpHAjoKGy+OGit4B2ogIgJNNzvPvfATS5W3Q7RY23d0umXMDxE9BRAEULDQhJcaA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"d3381fb7bcbb917850bf0ce8f48820459075d354","gitHead":"a1a71351bcd01439103255283013f19db6017aee","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.1.5"}},"2.1.9":{"name":"teishi","version":"2.1.9","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@2.1.9","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"17cbfc76a3c322b4886220ad31f3a08abc3f8c5d","tarball":"https://registry.npmjs.org/teishi/-/teishi-2.1.9.tgz","integrity":"sha512-tg/GbiiVZqC63PfJ2QPzp+pejIvosuz5Qk/P7j09heZUQEb5ZYObiFtElvBcm7DliUMOIL/FzdxYB6HTJVVUfA==","signatures":[{"sig":"MEUCIQDMjWkHhE8KB/xwqN3Tx+kK0AXlXiiVSEwTwdpln9JfTQIgY65Oy+kD8fyjNn2gZGXw2bylg3LQiuj6BXE+b1C7JNg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"17cbfc76a3c322b4886220ad31f3a08abc3f8c5d","gitHead":"3c4fb7ec7722e5213015366c698189cfe6993af0","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.1.5"}},"2.1.10":{"name":"teishi","version":"2.1.10","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@2.1.10","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"8731194863185df1df0a0105eb92420b583245a6","tarball":"https://registry.npmjs.org/teishi/-/teishi-2.1.10.tgz","integrity":"sha512-8se/XMShIbiwFXOlpArr1UXWKICD8rLZ/4t5ObtFrFLuXL0KVAew4v4DW1NsNvX30gPNeFmsdUH7I91LbAzZ+w==","signatures":[{"sig":"MEUCICwLfDgUD8+wELgb2Xmi4H712b67TadFokFE9lyQurc+AiEA5XGUHmYhiJTXuMmL9TZU02YFldrwB6fPuJKyp7vIORA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"8731194863185df1df0a0105eb92420b583245a6","gitHead":"9e004d51d60000054084c50c324792ea56fbd7a6","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.1.6"}},"3.0.0":{"name":"teishi","version":"3.0.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.0.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"564f03c1b351421e1963490f6f68076c45615532","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.0.0.tgz","integrity":"sha512-j9kz8IuXH3R5WA3RADu7+5tqK2PDL9lfmmNR9kdaMgbWrV7c5Fabf8ECoPKYg1yWb+KaVu42Ph/PPvxlE9dXmg==","signatures":[{"sig":"MEYCIQCCc1tcPuumnHHUqlah5idKX1Opozy7Ozxut5yKqOD35QIhALoNmJOn1oXVTnnsI3XxOWZ2tuiRNDCx99I+4jX/RJWR","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"564f03c1b351421e1963490f6f68076c45615532","gitHead":"c4580a19accdfd64c575bd1d8c1a5f6c5c74595e","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.1.7"}},"3.0.1":{"name":"teishi","version":"3.0.1","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.0.1","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"7d5c5bf478c72584d2045baeecd2b5d409f2eeb1","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.0.1.tgz","integrity":"sha512-iNkfDmFNXf/dkAQcMF0eHJk1Rztx7t+hapPhWRIk4WzkUl9ZfY1+uxMPavyDRyEVXkKKokD35sKhx9GiV6Gzug==","signatures":[{"sig":"MEQCIEQHykq/Jss4OL+0LjV4VlE/3OgjmSsbOXSYRO9jU7IOAiAEVC6PnbU9RT+rL2VhTpQBaGl55MTvIss4NmmOu6rLyw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"7d5c5bf478c72584d2045baeecd2b5d409f2eeb1","gitHead":"950a623d535941db086f402747672908d26d2d3e","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.1.7"}},"3.0.2":{"name":"teishi","version":"3.0.2","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.0.2","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"b17a6885b168b687fc372774308f02ad12922ebf","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.0.2.tgz","integrity":"sha512-NM+BsY5NUO7eftnXr1LO6LEFyW/wl/PFtUxAk3ul7dT3td8grOAY0ZW0zmiGH0BDGHeCS0u0M1/+bEHKJdlZbg==","signatures":[{"sig":"MEUCIQD3ZQZ0KaYKU/kVZkNxzBBRLSihgaPQ7+xNl2wE3+fJ9wIgAPzxJCRcEo/bsJ/w+NzYjpBYsiD/WdxVboVovCLZZhk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"b17a6885b168b687fc372774308f02ad12922ebf","gitHead":"2929e58cc2182ee788f94703a8e3a43d55000bb5","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.1.7"}},"3.0.3":{"name":"teishi","version":"3.0.3","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.0.3","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"5121e772c65f95011f6af07770394d9644fe8769","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.0.3.tgz","integrity":"sha512-+mgyPeA0Y0LuEl7rf+tz01ZxigULP3rPZlFyGhPr5qBpE7gjnOdeXsS5IOgHcblnVVSWHGlUmt00n+tmt03/Sw==","signatures":[{"sig":"MEQCICD+p6FDwCAVJFVXPxeVzffoZfo9k9MrLyfQs768NwFJAiACEyhtb4VBNJOD6mf98HTyh+DfAqt11kIq+saR1asmDw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"5121e772c65f95011f6af07770394d9644fe8769","gitHead":"d1880eec058489132c40bc09c6aafc7a6582d2a1","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.1.7"}},"3.0.4":{"name":"teishi","version":"3.0.4","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.0.4","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"5cc434e5aa8e1aaacd4bf73a5d8e57368c000c02","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.0.4.tgz","integrity":"sha512-sSF3HWNJkEiQbFGtpUyR+51+7Ww1ZRraHefAbjyoQq1/j9DFbGhAqmeSzyD9Si6z2ngc/lIH4CVQanZpAlroLA==","signatures":[{"sig":"MEUCIQCdrSbdZR3DBGm7lM1/oeUpx5h3aWEJA9LFiQsxeuASJwIgQ/f3zmJ8CtFBJp3XKtKGIF0iUNQ8Oz2ZyVIdt1rV474=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"5cc434e5aa8e1aaacd4bf73a5d8e57368c000c02","gitHead":"487a4725068d4e939544e63340124a788a2ef07f","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.1.8"}},"3.1.0":{"name":"teishi","version":"3.1.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.1.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"65063abe9a51aa48f1c63485a152663e3dd152eb","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.1.0.tgz","integrity":"sha512-GMIYPJTVhTm8/4QUhMw2uM4Qz+ZR2LwKhosXBDOIj+VPSCoe5zACyySo2+gX077mQ0wnvNrb0FvBAT9vcOO2Hw==","signatures":[{"sig":"MEUCIHvblVYJbxFIBgfY3YfLDDB8H9XBbBtBNekK7bK2VchKAiEAlPstKR9FTSh2axZoOyuy8uM/y2XKDQTTjr7Bp6TqlNg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"65063abe9a51aa48f1c63485a152663e3dd152eb","gitHead":"8eab96fd23384b66f0ee08719d60f2291e38442a","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.2.0"}},"3.1.1":{"name":"teishi","version":"3.1.1","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.1.1","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"a5a2235848ab20a9da53431111fe1ce16cd11dc6","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.1.1.tgz","integrity":"sha512-liTiLJ0KqNruTMzSAYWV31ClU44ZKLYG3Bn6dmy5OD+EVR5X33jzFPPNLFtOSsNEX82/kQh+JBC6rQQForqvQg==","signatures":[{"sig":"MEQCIBiWjy1O1QSHcbdXQFSr6YxOyGzL5Gj/C5JmJJiOiCo3AiAzqQ3MYCfdDAR1xg9hQHpr1B5KwAIyEArFIkyvFUFhug==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"a5a2235848ab20a9da53431111fe1ce16cd11dc6","gitHead":"521250349f4cb0a98198e2f7174cf9a522539341","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.2.0"}},"3.1.2":{"name":"teishi","version":"3.1.2","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.1.2","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"76fb9d558b941c4292d210ad5abec445dce10040","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.1.2.tgz","integrity":"sha512-C49RfeGjo8ivQwN2JCSJ4mnL3wwufzapEhEh7FRAPw/AD1O5R4fPrlvM6tLXKV9XjXifrL/fTBVlKkXFeewSYQ==","signatures":[{"sig":"MEQCIFWs65PIKTAIe7lsZsmKiCSt23yYsGCwL6V8PnEql5dzAiBvLAUh9c5gMM8pPsKPa/P8oCcEFLVoLZEfoDT5z+VRQQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"76fb9d558b941c4292d210ad5abec445dce10040","gitHead":"8994798ffc3107f75ad6800d96be3c3041410e2a","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"2.4.0"}},"3.1.3":{"name":"teishi","version":"3.1.3","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.1.3","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"e433b623840d481b43bf3290f36ac7b879e33d25","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.1.3.tgz","integrity":"sha512-9+Me/dB1R4/pCZEQpf7pmqXyMq6EapMCnAgdSk9yBGDE736wyd075Mj25BAHVvouGShRTqcaHpLuGWAVSeZ9zg==","signatures":[{"sig":"MEQCIDoCOQxfKzObEIj/FalJsdPEufncoDxymsbx+O0Ar4beAiB/CLF/QsCJF8GUfdaZIAtCLT0fHs39mnqYZd/pesOc5w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"e433b623840d481b43bf3290f36ac7b879e33d25","gitHead":"b10a36a6ba7886bd238aec8f5476ec72ceed5be5","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"3.0.0"}},"3.1.4":{"name":"teishi","version":"3.1.4","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.1.4","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"a32b4ce4b57158fab6c680a4c5f57812ae495a64","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.1.4.tgz","integrity":"sha512-HczPPJ8/ToLgAuJoFuOMOJ3W5eNsqfcJDyT1mJigOqRbACCt5+dEcPYwi9RxWcLXC8poxca4fb8ij4+ykJ6LOA==","signatures":[{"sig":"MEQCIG5g4Fb5eNJUzDBxsROFImar9hQ2A2iZOt/jFI43hmt0AiAxQOIng2obpqKZyaNYgMltczKE1u4v2DGx62KLopqCRA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"a32b4ce4b57158fab6c680a4c5f57812ae495a64","gitHead":"8720d82d39c45b85c61948e44a508a474b573baa","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"3.0.1"}},"3.1.5":{"name":"teishi","version":"3.1.5","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.1.5","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"00adf2d17acf10f2387696324cc519d7ef267b96","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.1.5.tgz","integrity":"sha512-3+aNeAvJKZlB/39yieS3qIGoBOV5I/PViZ7OT+eJgtUkHfsezaIO26t5C8EfbSkeVUdcsDET45HpCgFo0gogzQ==","signatures":[{"sig":"MEYCIQD+FmSUP/4Mn2LiXLcQIDvaZBcjxPhRUQec6B1CH+rcPgIhAJoXGornQGGiOJGFx0BFf23xt0T3eGXSoQ8azV8SGpDF","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"00adf2d17acf10f2387696324cc519d7ef267b96","gitHead":"2c8e70a16f59592807ba5c0bdb41072a51e25bc4","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"3.1.0"},"_npmOperationalInternal":{"tmp":"tmp/teishi-3.1.5.tgz_1454970754072_0.4828788556624204","host":"packages-9-west.internal.npmjs.com"}},"3.2.0":{"name":"teishi","version":"3.2.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.2.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"7c073082ae8c3967046f6fc3be2dec95e9ffc351","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.2.0.tgz","integrity":"sha512-KEKHvJ8CncDUDLXUd19KdvoqteM3xijmpELDaZ3651IVn2siTJiL1UYlSFtyZuZiyZXcfrpyImg16x3VTu/IfQ==","signatures":[{"sig":"MEUCIG4eUn5Uq5HF9zusGZtsdOi7ygpcBa/0JwcJxUyxKOzIAiEAiKYKV4w4XuhNv0XDdkB7a2p1w+tckiAraih81awGxgo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"7c073082ae8c3967046f6fc3be2dec95e9ffc351","gitHead":"70e7727bec6d14bb8796c0cb2b779c3cdf96561b","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/teishi-3.2.0.tgz_1461925959660_0.8060375519562513","host":"packages-16-east.internal.npmjs.com"}},"3.2.1":{"name":"teishi","version":"3.2.1","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.2.1","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"b14267cacdd7d75b4efd28a65a6364814d606e61","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.2.1.tgz","integrity":"sha512-YfJQdCnWTTU8fGmlFM62HWeRI4Es7h5Y9TuRxL/B0Kl9vxHggd0lhS0JJliCAtaHp6eWCI7GClJQ+YTsCytpuw==","signatures":[{"sig":"MEYCIQCXuOHs+fKtwuFShjeCTMWYVX+/zEwMlnXCXUJ9WNH93QIhAKXoWdSOnKRUy2jegBY/CGjcxKGAsUMxlXFtj/juplLn","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"b14267cacdd7d75b4efd28a65a6364814d606e61","gitHead":"8eefb205818f7a576433f72f2b1428821f4d7692","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/teishi-3.2.1.tgz_1461934463638_0.8379814170766622","host":"packages-12-west.internal.npmjs.com"}},"3.3.0":{"name":"teishi","version":"3.3.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.3.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"5e5fb64a3aaee7cdf2b24a0141be001db744f4a7","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.3.0.tgz","integrity":"sha512-noXqSSiEhEguTIsI/octuSu4yoWDwKmP7Je9QRdP/4v3SSqWaJwhaNGxeS2wcCwrO+KpXxM3weSphoEiGDG2UQ==","signatures":[{"sig":"MEUCIQDwoKGOHhRGkhhMTQfkBhPr8ZmvOkeldij4dC+HONvKIgIgDQOUlPbpfkSaTlYeQ19AmVAwB9EhK5yErwAhc3hPH24=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"5e5fb64a3aaee7cdf2b24a0141be001db744f4a7","gitHead":"fd00415eb9817f8e1d2732de2306f255674e861f","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"http://github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"1.4.28","description":"Tool for validating the input of functions.","directories":{},"dependencies":{"dale":"3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/teishi-3.3.0.tgz_1461936786848_0.08701723511330783","host":"packages-16-east.internal.npmjs.com"}},"3.4.0":{"name":"teishi","version":"3.4.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.4.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"5fd5868d9ddd67e1038c14c1f66deaa8c9784f6f","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.4.0.tgz","integrity":"sha512-70YAEc1WjpGpW6bu63T3SLfY43yTbQ+wYI8z5y4cnTy4Ecr794IbaR2VOhEVHCsyRfiUORFadwP7u+M1mOxyzA==","signatures":[{"sig":"MEQCIFyRJaJEZ/n6ElgbUihzyvj63S+Om7LSfj9gHq+FWm8gAiA/gIV6KPU1yreHCpPRW64UQFaS+2CH7FcfewbVq294wA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"5fd5868d9ddd67e1038c14c1f66deaa8c9784f6f","gitHead":"dd228bbe8cc0d45aff94ddef242b08152220eb70","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"3.5.2","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"4.2.6","dependencies":{"dale":"3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/teishi-3.4.0.tgz_1463600062077_0.09487098339013755","host":"packages-12-west.internal.npmjs.com"}},"3.5.0":{"name":"teishi","version":"3.5.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.5.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"c04d90a92e2df998327bafebdccc77e03716c347","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.5.0.tgz","integrity":"sha512-c7Q1l4YMRzzMdVqYHzcPl0gDuB/wja4mVBVgYpGvII7r65XsIGxp89pIC6ujUQEh8DKvjGHWWoZ/LkTtP4THvA==","signatures":[{"sig":"MEYCIQDZ40hu3O9KkphcGCILfzf52xNQL4V+OBzNHnkggk0iCgIhANrQCCLkgh2nBIOO8Hp2y8o0VdOYMPghkqSsmVqjLfid","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"c04d90a92e2df998327bafebdccc77e03716c347","gitHead":"27b2ddf84da6bde299b01394da1e971b20b98c6a","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"3.5.2","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"4.2.6","dependencies":{"dale":"3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/teishi-3.5.0.tgz_1469113144122_0.4027968202717602","host":"packages-12-west.internal.npmjs.com"}},"3.6.0":{"name":"teishi","version":"3.6.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.6.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"eeef662744af23e911b3b45047d817eafbd571c1","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.6.0.tgz","integrity":"sha512-zwL8pV3Xg+/OEy4Viw40QyWZujd9pJiZPguqMwwH0g0L8jcizvXw1UA6OuUfMX1tg5pC3lKRZX69aDzUfU/atA==","signatures":[{"sig":"MEYCIQDsoN0oVxnChpOHO+IvZmTdTHMISHsUM83olCGPFUhmGQIhAKt4AWzIGk1Zeg1gN2uB65vPMzRVcfReOqZJk+MDSib7","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"eeef662744af23e911b3b45047d817eafbd571c1","gitHead":"e5e785ba21bf0838e21044830e949f087e4bde19","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"3.5.2","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"4.2.6","dependencies":{"dale":"4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/teishi-3.6.0.tgz_1477571239256_0.5577820921316743","host":"packages-12-west.internal.npmjs.com"}},"3.7.0":{"name":"teishi","version":"3.7.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.7.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"a805ef1b9e7198202242a57638d3e10f3a2d3ec5","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.7.0.tgz","integrity":"sha512-w5aADj1sB8Mh1pHkah6UKAoDSBQGd4i5rzcFm7dqC3Sk4T/ofNIiHjOVz7FzQjms9vNrFW6QIeO/l+FxnHh3Tw==","signatures":[{"sig":"MEUCIQCpx4wuJfbi9xL1yDa1I98c7TTJsoqiQZbaOqVBS3VfQwIgUpBokJxhXHNlMsYjD2uFJdT6cyt7A1GjEEgXjn/Iit0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"a805ef1b9e7198202242a57638d3e10f3a2d3ec5","gitHead":"0215bb644f4956f42210cd03d4db8f9dc530acd2","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"3.5.2","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"4.2.6","dependencies":{"dale":"4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/teishi-3.7.0.tgz_1478871086559_0.32220382732339203","host":"packages-12-west.internal.npmjs.com"}},"3.8.0":{"name":"teishi","version":"3.8.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.8.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"9b666d19ffe867f0cde29914873431cda148a14d","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.8.0.tgz","integrity":"sha512-qP3y957LETsYtOmwgtIkJky5aH9dL6w78EGmxLP1nBdnMVviSkRWG5fj6m3PocoToP0Q6frY0LBjCFZuCRiN4g==","signatures":[{"sig":"MEUCIAg27T5eRGh1pUlKmC6bZiHHQCDV/TLuN/qjMkW/8mrPAiEAiQn9JQX8aBinH7bZBLnEAe1855mn8pbjDe9SlaIR7H8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"9b666d19ffe867f0cde29914873431cda148a14d","gitHead":"cb17ea6c274d18feb17baba3f5ab3d3a16dd2be3","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"3.5.2","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"4.2.6","dependencies":{"dale":"4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/teishi-3.8.0.tgz_1479659088811_0.4168601690325886","host":"packages-18-east.internal.npmjs.com"}},"3.9.0":{"name":"teishi","version":"3.9.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.9.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"993918652bcec5a2b2f07922d36a4226b345ca95","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.9.0.tgz","integrity":"sha512-sHCHNREE2UHaUMH1r00OLUMAlD80Z7GFE+RlNjkVZwQdDQjrZXlAhoJRvBMg1C3aXlaZ5kG8qv1yzp8jEg2DAg==","signatures":[{"sig":"MEYCIQCXmvBUxN4t5N20WpLa3AVDRxJ/FyrjV8HU2lKfTIEHuAIhALrHHor7M/v7WkFj5PS0SrhO/MWBafYXtSkx+F8HdMGJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"993918652bcec5a2b2f07922d36a4226b345ca95","gitHead":"8fbb11ad0a737f5a463ab0b28aa6c660c17d934f","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"3.5.2","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"4.2.6","dependencies":{"dale":"4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/teishi-3.9.0.tgz_1479852955135_0.3495933103840798","host":"packages-18-east.internal.npmjs.com"}},"3.10.0":{"name":"teishi","version":"3.10.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.10.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"99ec668b4f5da1c5e2a0e21ec29c464deea0580d","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.10.0.tgz","integrity":"sha512-jHCBRHSADPATDD6wJa4VaE77LDJkq3MjCuUUx9beENWWZIaB1tqd4BlJfnUoISZDFSYfqFbOrba+ReGSzJbwNg==","signatures":[{"sig":"MEQCIHbUzGak6sVB7XKLBfXqfbh0jWQQ4Acc/mSn3KrgRKL7AiAOlsozGNgfK4G0kRme4oHDbq8xoRDlR4bO7M3JNPzlcA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"99ec668b4f5da1c5e2a0e21ec29c464deea0580d","gitHead":"7ea23e2a00dad9ac7268bc608e43076257620ff8","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"3.5.2","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"4.2.6","dependencies":{"dale":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/teishi-3.10.0.tgz_1488070396096_0.9339732073713094","host":"packages-18-east.internal.npmjs.com"}},"3.11.0":{"name":"teishi","version":"3.11.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.11.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"06305829eca8425fbf0c3434488023f467877555","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.11.0.tgz","integrity":"sha512-c/eaNhyyhedj7JIjJhmFK4dMIp0eVruBjYZX8qyca16nAPKYMfmZJno/b8rE8EhuC+YEM/mAogTcWIg8z+9eWw==","signatures":[{"sig":"MEUCIQCOBjpfEZeX/YwN/4uCOgffPlzPc24eyl7042C4j6fI6AIgTQejj+2DGiZGt61pfaWUZaY/5aN43qYKiN1ai6q9A6c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"06305829eca8425fbf0c3434488023f467877555","gitHead":"1fb9c64188536eb8f6e712f50a538ecdb72fc26c","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"3.10.10","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"6.10.3","dependencies":{"dale":"4.3.0"},"_npmOperationalInternal":{"tmp":"tmp/teishi-3.11.0.tgz_1495384847784_0.4854664907325059","host":"s3://npm-registry-packages"}},"3.11.1":{"name":"teishi","version":"3.11.1","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.11.1","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"f35fc3156d5afb124ca0c8ab17eb20f9a3ab6ffa","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.11.1.tgz","integrity":"sha512-Hjs7MaHMbo/AXojqedbMkN0N25DWAN2UmQKujHyxcUXWIaimiTTtVwsaRde83YfP5fdZ3ieVHXpJ1/IbeOav0Q==","signatures":[{"sig":"MEUCIAUPggqxa5PN2aPqtZjxlEki8ckSsWAkdMZmkHSUx6UOAiEAsHTJTXbHOfV/hbF3x5UHDQ28bFi7qWYgq9ESPVDSFyU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"f35fc3156d5afb124ca0c8ab17eb20f9a3ab6ffa","gitHead":"93b433896e26bdbb77af3f21f685c4966dc8a741","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"3.10.10","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"6.11.3","dependencies":{"dale":"4.3.1"},"_npmOperationalInternal":{"tmp":"tmp/teishi-3.11.1.tgz_1509291695911_0.2768547269515693","host":"s3://npm-registry-packages"}},"3.12.0":{"name":"teishi","version":"3.12.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.12.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"3026f30be81901ca9bbd16c2700d12af7ad463c9","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.12.0.tgz","integrity":"sha512-JW+O057x3l+a9NAPFCZQArmg5ccq9qjW+8G9A0RebGi4MpSF4QO8Wnz2mDhD6xq9M+3lp3cZ0dRozxLNAGu5gA==","signatures":[{"sig":"MEYCIQD8z/9G3vBkes/Kf4kx/zBNNU/jRAM6Btf1zGpm/jmMDgIhAME+NfZXi1CTtFvGvC3JAo1EJ+XUlC8E8Ujz7IZ9Hkzf","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"teishi.js","_from":".","_shasum":"3026f30be81901ca9bbd16c2700d12af7ad463c9","gitHead":"02bbde4dfd6c43f07a484e1b78c39f3bbc6b207e","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"3.10.10","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"6.11.3","dependencies":{"dale":"4.3.1"},"_npmOperationalInternal":{"tmp":"tmp/teishi-3.12.0.tgz_1515404807595_0.015708499122411013","host":"s3://npm-registry-packages"}},"3.13.0":{"name":"teishi","version":"3.13.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.13.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"d8107bc6bcd3846c019bf99147db0842ac41aa83","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.13.0.tgz","fileCount":4,"integrity":"sha512-qKCJQBSgbC0pVaVrgmf70kEpNfDlsT3deUKDH/66T0Z/6ULxhAA9ZRwrRYyGcClN3fKrv4HT8TJuNslzZFGjBg==","signatures":[{"sig":"MEQCIC4kqvZ5o9V6TAj1u6eA9F9ZMRwkbAA+RG7W1vskMTuhAiBrl1jM0MQokOy46fEMD3E7GuhjaF9/yfHRvGGjlICeXQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":136319},"main":"teishi.js","_from":".","_shasum":"d8107bc6bcd3846c019bf99147db0842ac41aa83","gitHead":"20855dd46e7d19e4be32d8978c3d59b4249ae760","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"3.10.10","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"6.11.3","dependencies":{"dale":"4.3.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/teishi_3.13.0_1522088304319_0.2452416886111084","host":"s3://npm-registry-packages"}},"3.13.1":{"name":"teishi","version":"3.13.1","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.13.1","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"f7d77ebc05d7f6ab9a825074ad730164c84fbfb1","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.13.1.tgz","fileCount":4,"integrity":"sha512-acSo7q8fKBmRkZXqKvHr3+v7uqvd7Zy3nWCpDJUlFmUQ8a2XNKlH9n/4I8ABemnODO8fClQCl0KYrZYtqZC9iw==","signatures":[{"sig":"MEUCIQC6LOunrOliK9vk/PkiZPnWAQghNhEygILNkRNXrZan4AIge4offOCXNcK3MJY4ad4xJOBA9kEN4dPdQzZmD8oMQqc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":136319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtwVBCRA9TVsSAnZWagAAhQAP+wZvZDFsW43PE6TRHaMm\nhFYPRV2rv3u8wBATUWdP4Tp1lEjWNDGHP722FKl2g+U+VczNH67RGxxqJdcO\nJXZRpr5zyEeosexdCkYXvWZGDmumcnOxZeRGemZDShmTD1ihuk7K00Wctizv\nx3turG2rW/juCqJhurahmdFm+FsjIwRzgItDbRFtH01ubqhooZUZ3AYoF31q\nOsKn0sbtJIs/qUChEQXzFv9Xy7ZP3bRvumNcuNjOFwv1OEqBYRDnvauv6u2m\nzrsaMfOUZ9xfwVeHL0LiXC1roxPhowkiLue3pUlubfNGZeeR7Rabwh17ZFly\nVvSA7g6hi/HWAIAT4yGHQj2rCLlWds6mVmFITuihtzo87YTd5Emg62ok5con\nsMH/MRDU890uiYQO/a8mETEw4a0G/0watLYsTTxT0BofLZm3KwCKxjMXu0M9\nwez0P9iSEyz+4TO3ePvxbkqFDeOca5vODqrT9295JdodW8KWUe+JC/LB9dbK\nPdntG2n8Gpb5+9dNV1PU0v2u+uZKIUFTQ4v8qfKBD4zuX9AWB9pqs11ntlPI\nUUjU/zKD+JNcQy8HHHUakoSi8QannX5KKzMoDTCLUm3m7zlo82u//ueCMbtE\nefAbl7WxZpOAfkaI9YVSS9+kwfRXwBr+jYMLB0vBDIMmkkUldq63KXRRGwe6\nj4yL\r\n=xtNt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"teishi.js","_from":".","_shasum":"f7d77ebc05d7f6ab9a825074ad730164c84fbfb1","gitHead":"1243759731b0ab67c2086c734d1ac7e0740f5d9d","scripts":{},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"3.10.10","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"6.11.3","dependencies":{"dale":"4.3.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/teishi_3.13.1_1538721088875_0.6837808483646004","host":"s3://npm-registry-packages"}},"3.13.2":{"name":"teishi","version":"3.13.2","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.13.2","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"5c52ced126a1243134c27e1f493a88b018f1a462","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.13.2.tgz","fileCount":4,"integrity":"sha512-y4TwbPF6LNc5p6K6hQ7V4DLtEvLdDLNaNg/25We/NlTrJtD0igKapMoTC+sXUCZJWTd3B2j+sEd6Rj2WClUybQ==","signatures":[{"sig":"MEUCIQCM3PmOtzipWCrbJuZ3oGmDPHG1koonKyi8ncJ6x8idTgIgWGPkx9FMgbN+T8Nav73TYUDwY5vIfe3SoLNeW7o6U6Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":136431,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb7AB9CRA9TVsSAnZWagAARuAP/j7yMUUiQcYMLxs+1pUK\nh7u417ilXHVhXrThjvTW0T/DRcFcrqi9X3hePPidH8OK8Yf5nOvz+snbHZkG\n0K98vy7AQpnrYoiU0d/1PC20v6AkQERaiJ+4xhu975aiZDo4hiNjhD9n2wi2\nNujtr9Og8impT1YN01jUqB86PFH/fthfQH3I34F5OkD4Kzed49iqGnWepzkw\ngE1N7m6WjRPff2yEYsS8SvvGS9pFNZbKx63cS7SzGKxr9UZ7QLt3voxs030w\nEL8mt1HUHy4QZnfy36XNcrgRO5lAM1d/TNIvmbZiPuF4XbAqhP6sYX90//5l\nJ1SJo27R4PgjZcO6Gf+sSkw6OHtGCXZiDJn44D6qOut5Oio/bih9metd5qDI\n9ZfGKo/orGzLil7We80BDTUgGUaHSWOq0Jcj3NdMsLtd4EzAcPLhQ9BZJsDp\nCDNyh7uhJNnuU+W7SCs/5dYhdhgJzn4Xj3CTiepgIQxz8Paj9pX+YWgys25K\nFPIy9XqA/m5BmwIOqKzUYlGG1BsGgxIqcfotHa2b+jQxcBjnDinDYgobA2if\nW8c48q7slOK12txlQzz+g6xJVV6KDjIZNjEewVYImBCJkwrL8dRHseCn6eCr\nmniYat62jZ9MUToDCfd1HjVjt99Oj2L5JE9mINU6FyBdfANfuZFntFs5hUC7\n9Dgv\r\n=zk6u\r\n-----END PGP SIGNATURE-----\r\n"},"main":"teishi.js","gitHead":"719c7c999b832ab2c1d743f729c1dc1b0b5585e6","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"6.4.1","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"8.12.0","dependencies":{"dale":"4.3.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/teishi_3.13.2_1542193276296_0.07966565189422381","host":"s3://npm-registry-packages"}},"3.14.0":{"name":"teishi","version":"3.14.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.14.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"8b4a751398755eda88f8148082fcf9a50df44624","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.14.0.tgz","fileCount":4,"integrity":"sha512-kHkxhn2QJ+mnX1Ys2bcbjIu2rQTS19OHqa8cvxAcZ6XOFj/lqbddXGhHsKKOqrkbJKFJemWZWIWeO/CF5hVx8Q==","signatures":[{"sig":"MEYCIQCHg5XLQh7yjeKArNCUdq4iwhwBX1B85vcbtYzVytQJ6gIhAN/3wzex+m3tU8c3r3E09sGRehBGSr03H82EJqhjjI0Z","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":136382,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc8SVRCRA9TVsSAnZWagAAuWMP/ira/Lv09BhC8dkSZCq4\ncv/X6f/Jn/gUEAR9VhSMJFxzP5Lu8PqiFw+ao99fKEZj9hH5YMaanykNfbR1\nMXz+1VUQ0dXl3DL0B4b/OfsCpvJvoQ7ZDN0LnXEd0MkrWnFBpsW/CPPZ2UMF\nmDV/2ecG8rFTufPleMDxQEBKUxiRZeDhmZtT9heKk8s/tWb8N00HWlSwNxNB\ndFXXDCD3zQt6yunL1nnMaxK2r41kSt/gfAPjQxUZimJHm5uMrKXIQWaT2JBq\nU+RmhUrIUDsxGvDJGMCpMchQt9oRTruKMAeAFU3sVQp8+uRLarw6QBdbhRwm\nkniX5RHNBcqEBHHuxj4hOzf2dvvm3oH1qqCWiDnk1qNP3NbXJUbuMQrn5BP3\nH+n2ehMcSurTRgw3MFZ18CY8766awU5A2ytX+2+xMKRO4RSA1VaWcAj60gl4\n47ZBNDF8dB2f/GQwk0kqtZbZFWJCPBjMfxE8UR+A9TCLcDix7hkkCNsmnv2U\nXxlcyk66zaQB2E8hQtw1aVXHSv+z9vdkmnPriHOqZnXJ8FyXV9PmSNMkLUke\nz0k8Zhn0wV2wSNLnfrC14TlrM544CxmzJJXSV/iCrLOJzdW180NS7kxkJ141\nVqHVFtQxYLDKwcvjABQjCyduEae2wARYcGMN9inhbPjpzGJj+rZcc+3GqQOQ\nILa3\r\n=wUw7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"teishi.js","gitHead":"7487631c7e361b01ba3ba615fb41507e8c1be037","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"6.4.1","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"10.15.3","dependencies":{"dale":"4.3.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/teishi_3.14.0_1559307600484_0.1308563960362803","host":"s3://npm-registry-packages"}},"3.14.1":{"name":"teishi","version":"3.14.1","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@3.14.1","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"d6ff7d37d01fcdb0e6140a49ee462e8f58017143","tarball":"https://registry.npmjs.org/teishi/-/teishi-3.14.1.tgz","fileCount":4,"integrity":"sha512-q0haJNNDivh8K6PcqHVCOId0UAgIcRMMYDNbK2l0LYiL1uGCQ6Mo5tRQ60P5xTBDdF4SYzHTeTvVfEWZEyJByQ==","signatures":[{"sig":"MEUCIAOnMtlFKDPIrSmaa/l/WPpo0o+Xc3sV7fDgnXJ32m5oAiEAiSmBIeDEWYNtlq7CTsjis1ZAXZhJ/POTHtVkn0ae3qk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":136542,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+Q2dCRA9TVsSAnZWagAAbZUP/RTi2y9nWzqe0gUDEWtA\nNVRum1o7v3fdmEJcmCaps4sYQ0v8WA9rZQ+FSaN7hKgFkXTCjO3/0DgD5Xid\nF4gg3lnVgGa35KPtmWyhsqhHkSQckuBvquiRaQB0G7j4e0smjNIT9tFtfw9W\nrfr6kXh5HEBQjQtfI78+RHXUvKRTB9MBd5rfLPb/btDxFH2gCfsXV6bJeFJB\nNjfL/Qf7fZofPU8M8NJSqs56AmfJjvb79xY23uFd9reZoNrBPMM2tkm+VPKp\nPtybJp8s+4kdvVtaiCF4RdCBAWb1dyO+JMt2473F7JfO0JJKMCi/OiJDRDcW\n0DILyGdNEAfKfEG8DRm+qf6uYTA9psrffd53SvAv+31RtX24cSjBaykJ210b\nESu2KfKxbPlsXWkNlgmpQXHBv0X71y9yRSglCXOZrquRhU1oQvCTkTW9nC1Z\nKtF5EWMZOD8P+U3mbV4K4vPfRdh0+KUOmUw1fBlFUjCXEXVkuvc1MIxw+Zm1\n5N5vYpme4Ea7H5hjaeKRHyOJ/8xX15n3HppBLDNcl+oW+9RLV80bmOUT4R/D\nuUM0Net883R3INng4DRAD7Ec9nGHVtSlH8SIfeQ3KCQy6ZgXIqNvV0godeGn\n3Na3YJuHTq9KJg5huNzuZ8idz+iP0ziXcdpa8wucf7DRWokxfy6l+LrTk7Xo\nyPKn\r\n=tcvY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"teishi.js","gitHead":"9a8b79c8ce2eae6f72dbc3d60a5296f0c9a56573","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"6.4.1","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"10.15.3","dependencies":{"dale":"4.3.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/teishi_3.14.1_1559825820311_0.345172843832545","host":"s3://npm-registry-packages"}},"4.0.0":{"name":"teishi","version":"4.0.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@4.0.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"e3655ed952d35b304f1ff7e9ec71fc32367b3079","tarball":"https://registry.npmjs.org/teishi/-/teishi-4.0.0.tgz","fileCount":4,"integrity":"sha512-PPLRFZWas30Nb3xZ7srphEHRvab6nJXjVi3EzsMWEEwwPc+GEECyy5GWe1s2nbo9E4GLbAHtmzGJlfFbcFGWZw==","signatures":[{"sig":"MEYCIQCWyW0EfMnlqiNmFxilto/UTkZrTw1agWKWGi5jKSno7wIhAIVbTCNC/5mmXjbk2wILtwkxqvGlbPDbPeaKfsMgqhf0","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":141952,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQbeNCRA9TVsSAnZWagAA0vQP/jdgXeR2TQ2PFN69Z2vf\ns8bjcSGgCN6EG1O7/VbAzZqKnRAlp46o+xIVmQjD/br8VEBXPwc8t+OZDZsB\ngOaus4vjzCoDVIoYpnlsALVa/kJRHfNv/QC3lM2OFRpmA5Ax8hJz9+ajPPIh\nmSU6KW/7SrD25T1Md2ILiEYg8u/Z96WjN/wY76firp8IYQJxwigRhH0upAXL\n1Rh5sNE0a5k3GwHBzTcn7+Q8clW4ODhaYzhuO0BZ30Bgm95+jCVVytyqHxTH\nW8JOitdMp4teyxnoPM7miNdRmgy8v/0EbYusS587xyAFYqlB9tns2+SM5dxi\nWJfkq/TnRoDOQqC4gddurWCzCRo3JVO9mlMCPKsyojWZyur6UwUSbNw3I2eI\nc3d4sOcp2fZANGv13NzKzwObCxWuQ+4dRNo2dy6dvwlDvoI6By3pHuLQF+3V\nZHaA8/vALIAFLi74Wol5VxnPN+JQDVornoQ5km7KsUp7qL52NBKFaoNJcYS1\nDv/BakoGCmu2LsHl1P0Xt6J9F/CG1amNMnEmAndXlUS1a1PouuSVSAhmaEin\nWyIQ6YaIOk2HUa0jA2wKKM+hQYwuSBSPYOH+/MsqeThm2aRSW9H8NjxJukhg\nuxMG6Bnq3OESGEOZIOHc42ZFBovoXmORCOpHP/7iI/3+4TKANoaigqVS9+Eo\nGIKB\r\n=LpaR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"teishi.js","gitHead":"d67549e7782e2d685e1cdf25d09c0c731f785242","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"6.9.0","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"10.16.0","dependencies":{"dale":"5.0.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/teishi_4.0.0_1564587915973_0.46352518343279914","host":"s3://npm-registry-packages"}},"5.0.0":{"name":"teishi","version":"5.0.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@5.0.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"4c46728943cbe5e17667fe76f4dbbb9411a88342","tarball":"https://registry.npmjs.org/teishi/-/teishi-5.0.0.tgz","fileCount":4,"integrity":"sha512-c9GVc1W58smC9hWcNBw3dIM7IsJgQAq9QlNSPydpY6rtL/Gua92/2yK1eRj5xpX5cmFv85NDMIVwLtMsvm18IQ==","signatures":[{"sig":"MEUCIDHKfU8N8TX6KlC8P4Z15vIoDRePeQGz82axWJMT9kgrAiEAveAaM8IlRkaPrUGsC6Rkve8xVPqagKlCIb5Mkv/yIQQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":144215,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdwePbCRA9TVsSAnZWagAA/fkP/39nLOGxGKLM3rgmUSdU\n6mQ3fxitPmSICVNtz3BCWqyshwZhu81y+vEB1YoorZDfO8punAVHQlJwHuCB\n/oe3SRf7GS1xJ38eqKrfX6yoYUVQ5cGrLdO+SkT0OlZKeGcDjj3xrpjYbxsk\nnO74shL15o34nf4V31PmF1XidYuuvQN4JNnRpv6ogDxZjAnS6zeFNS2cc9KZ\nKtTEXEMlCNQ+e6afvXKWDdv0f3a41niZkQ7eICYxOCW+3M7Zep6PLruBPosm\nALyEqf5MxW2AHUBD46tQOgjGhpV0/Ds2p7gqHFRxqXdL9UuoWneuWVd7M3jG\nAsuY6Ivz/L8npakV+Ez3voU7Z5HMKHAncQKlLXXq8UG1p+UcC8eemLwd7c3a\n/G1/+GYXGPS9MQM+4Tnp9U4B7LFAQeTjcTiM5OM1mO+gTldF4r/I/oNZImTZ\nnw+g6q8tsfOO5js16lDG9A/98ScO9SMBE6ykbAcutR+W2TjHG7XTjpiS5X/2\nJ1tfnc7bzcqfDOfoSNuBfKk5TKsqDmUmKWyLImfLbeirqjsN1t2XOORX3gB/\nBHgJU+X+NVhgaTIYb7jZJxiS0qTjoiruyG5io1tKUyaTazMko1xxGQcx69iq\n0jMRD+nngqxzRLD4dFKivZw6lsJTdPBcrOD9whiJZPP/RODRgPsj/awDytYg\nVhCE\r\n=YN92\r\n-----END PGP SIGNATURE-----\r\n"},"main":"teishi.js","gitHead":"4b96ca8d11a9708b3ace002034721cd824201f3c","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"6.9.0","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"10.16.0","dependencies":{"dale":"5.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/teishi_5.0.0_1572987866510_0.6458379056315036","host":"s3://npm-registry-packages"}},"5.0.1":{"name":"teishi","version":"5.0.1","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@5.0.1","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"1d58b662561b72da8873a6b0d3aedaf6e98494b5","tarball":"https://registry.npmjs.org/teishi/-/teishi-5.0.1.tgz","fileCount":4,"integrity":"sha512-Bn4tRb4xMqmndPbTsdewgYY0UIWpOkkv7B0fb/yPQkNZnVN/jvDmEZjrNAFZnF4qhdwH7Pl61NTuxai2eA47AQ==","signatures":[{"sig":"MEYCIQD4GjlkCUCkVzZdujNBl8hgMDlT6SwkjCdKuLWCc6w7FgIhAOWEjLr/5OJPV7YEBhIuuARoIcvQS76ItGGNSfJwHE8a","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":144214,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0/QaCRA9TVsSAnZWagAA75MQAJklPv/1C1niwm0omAaV\nUVX3mea7OlsL6i3+3sZe/CeoIKMlJ+0pdFWq3jl+10kHwTbo9UCCEu3JV9HK\n4YqYvQQUPFHVZazwKWrDxUj3B73vBIYjIr2vPwNeDMzOpsabS5Y9G75Rw2kd\nGFvnzWMJHNx7K0JyRdVYyFQ/e75k634uEWhm/r6lh8rz2+i+whW6D065Fs9D\nEWx9hA+8psWodiaiwt2TbayC37ERCQsbE8MTESPqLG4b7ycMFV0rYay++FHh\nYRbFGIRKTVyEbuwj0eV04vSF5jdIoD6H0ekTwIQ2tKVuiVmZcE+CiTtVxHIr\nbRNwGEGQBPfmizO5wjNnK0gYM+XndPTa6l1BbUrqzbXCz07daoMd0OKO8jXX\nsOCI/9lqG7yQPimV8rHG2frPKnit3xPyyCT6CAcRGdxPoTnAzR0gtbWmlYDe\nnHmFsjmI2MNfRL7JldxOBl0iWoHb5x3zqo9I83dw1NGzEZfDitnmblVV5DZp\nfrWJSXhvWHPCoaFyArobrLF4KYYliSdhDlk3fXBVV0kQ7JzlunL51zLYcEAR\nEQJ2PzhAIWc9axZ8IC1UyGr6ap984Koz7AL6cchjr+6epIe+p0SAdBiPAjrn\nraI/lFC0vBkmezU+APGe8gK54RCezSFqEOE3yv6XoLN8Kc47I3NlETJwjTm1\ng145\r\n=ggIq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"teishi.js","gitHead":"1b9f299b9bb549d7dd41adeeebfb2e7b2bdaf923","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"6.12.0","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"12.13.0","dependencies":{"dale":"6.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/teishi_5.0.1_1574171674036_0.24037398062315618","host":"s3://npm-registry-packages"}},"5.0.2":{"name":"teishi","version":"5.0.2","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@5.0.2","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"8bf229b87790dd129a7810e365a3320560570448","tarball":"https://registry.npmjs.org/teishi/-/teishi-5.0.2.tgz","fileCount":4,"integrity":"sha512-IL3RQ/jABkmAw7gdJpDh9xtDq/sQXGVbFNA1Sm2pWF32jGKuIVmHZFO9d9+dUXwIHqcTZ+blI3unJfO3aqVcEA==","signatures":[{"sig":"MEUCIB0nvfJaQK3cf/8tgWUKghX1C0yuFA9Iacy8IcDZe4adAiEAznLQ/gDLQAvEpp8HWb0TqTjS2lM271Vx5ZrMgD4f4Yg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":144214,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd3TyHCRA9TVsSAnZWagAA9lAP/RA5hIYt2gqZb6icCyRo\ntAcppeFX+0hCEU/ASTVAwd3kvF4tDY7eZyVJCQERrWpatlWXF9W9r6oqHvcN\nqWRvPbOxtdXw2I+dq2FwXFljYcEwcZFtzz8B3wpQAROo5Vw6HcUitir3PtnC\noFkKR3J9NYaxqZXoLtvAlkqyDFx8yHPGBz2y5rhNKjfHKVAM6gxxnqHVkC7H\nmD3pc93aSTtYfqfVFR6mzglipMESGE4HWDisuc3epyUG2lfZpNG1hsKuVSeM\n6RL++oJnwRaePGKFrmR987EXAgninODV1+6Za7q00H4q7Z1ZIvFAxPQKx6oI\nbyNsjBr8zct/15n/D7pliTLcq31IzMMaX8aceA7W2IeW+lxPLS6Cqe+fcHSd\nY3wAk7rkkl+bGuQ2HfWLF3pxmsHscdf2nHNa6u7wlEMu1hv8Iz+5jRYa01cq\n25XrzcYx/6M40iwQbE1NC5uIYRi3x27G8RRyysteiYKqZy5zB4Z7zG/fZJtt\nqoWKkHNrKqf2IHfeaDPp4LgrqhUwjFhz1U4+t8adc5CZWXc8ZbS/jU71j0rY\nE6hJ9l7XBjUf/g5/M+QPv+g1PAQ1c6Wd5l5ge+kDppRYsMWOie3IsV1HAp+3\nYm0LS4PkPgMmyr1qixQJP86lnt5joclYojDEiXgjVt/uAiCcXKp+fKWbkwPO\nH7ul\r\n=E3fi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"teishi.js","gitHead":"4b7b973aa734ac2c7ffd88e36ee74f00e835daca","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"6.12.0","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"12.13.0","dependencies":{"dale":"6.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/teishi_5.0.2_1574780039325_0.951818357779239","host":"s3://npm-registry-packages"}},"5.0.3":{"name":"teishi","version":"5.0.3","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@5.0.3","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"a367467d1fe120f50a0d7f76c93598ea3ef35a63","tarball":"https://registry.npmjs.org/teishi/-/teishi-5.0.3.tgz","fileCount":4,"integrity":"sha512-ZTpkuf9gQ9ohkA5CzoN6Jn6pULOVuKtHLzcuA6mlKppgMbVOMVsg2rTozo18Hbl8HHRI/3X3PhIWgygkRH+v5Q==","signatures":[{"sig":"MEQCIDs5+K3718eGARW79cg1m5JnBidcUK3AmG2c5kGV0kWRAiBXn7ISfdoRV+JZWI3ptj2A4x+k9wzW7LWhLWcrKBblQw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":146342,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe59AZCRA9TVsSAnZWagAAzGQQAIFqyswfGc02zNrWeMmR\nwpo5TUZH9atlVCtejb9zwRXj0DYi3/xu3aQmTP3WRAYc4fH0fkNYxXCIdpJ+\nxp9tpne0MnH+bpsCZGXKnMwACjF9ra0LtCeEZX8529Mas+VOT5v+VmQNt+8u\ngx/75mw9N6ipYSIehfkt0qRwO5SwgNzb2pryLERN5qgiaS1+gKcltXwge9vD\nwkR5RRzJ/R8RT3SjnImPrxZmM6Vmddw3pSJ5NthPjQ44YKYTQAMJ///z4W40\nqmbZWSccdSuusLSgx7SX7FDlfmOq/HM/GAbB3R/MalM1Jl4Lz23N4mDQnGQU\nznlQIISWeA/IJJ3cIcvkbjHXBBoXB1XzYxvWoUrzLjdSqqHPaTKbIDf23M87\n02cvos9VJqILnrYvg21bmW6aXUfMaHpYLOLVSdll/dBD9tYmStRrEJdPBkBy\nKsTZ16ligADc3sO5o6KeknGy5OKKvvfOtWysXSyQeqvCgYwYQXHF2PUIhH+L\nscRNTRnAbndnidOFsel+tNHxhmhs6FboNW+mBN0THXGMJPrNARb7eFdpH83P\n25/3bOhR8/t1c4HT3RsDQ9r9oIjncIF5MfIeZT3Mf/K7w6chkyNha9OtH3M9\nWIq8CguKPPMs1O8MzLU0JgFxqAXy6zJdRLh9M4/Vpv8eFr+GWOCdaWVIuK05\nZ7Oq\r\n=ISX+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"teishi.js","gitHead":"87022781a084727a74d5bfac03c1c9a336f2cfa5","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"6.14.4","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"12.16.3","dependencies":{"dale":"6.0.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/teishi_5.0.3_1592250392649_0.9573642480191247","host":"s3://npm-registry-packages"}},"5.1.0":{"name":"teishi","version":"5.1.0","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@5.1.0","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"cf0c105aaf0954f9b34f2d645fcbae5771416279","tarball":"https://registry.npmjs.org/teishi/-/teishi-5.1.0.tgz","fileCount":4,"integrity":"sha512-pvsvec/r7/neSI2DWktnOpJu1rtnlPZYaaX/H+WgqhIsvUm5T/Wi8+bkbtPy5bG1eJ/pAo6ULf+z73lMSRPvmQ==","signatures":[{"sig":"MEYCIQCKKC/W1hW6y1CR+DSk2BAvbGV33N71+nNQn38gZBZVdgIhAKQwEFvMXHsKnq4dDokyeYEh6OWPbhymCSTvEFFlvu3J","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":147994,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2G27ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo8Vw/9G4a5fhgdpUn3Y0y/BXoDtEr3OheXzsZPVIoVGRuY1YjQFF+j\r\n//ebOUfCAw/5rz4hqAlvrZmKFraykIAcdcI4E4Zcj+dtNQ8JRj1Sq6LetKPq\r\nw1V1djZXphsfbsz1k+y/n7e+qBm90DTo6XwSt1qnorn3OoUgo+cmogYY/85C\r\nZpmwabi2fa5A4eBXPlcsMMVoyBigW5N3+sj1CWLsR/0Exhq5WTQxn3FYNlTg\r\nS46jSQMDeEfiGHJ/kYEPlYZT/6Y27YfHBgCww1RON931ysAS5hpysUvKhUMz\r\n9XEdqFSMFuUMqkusGXcB9z/Agv5sVeHbQ22RMB/v6a36myLlxETG56gEt00X\r\n8nC9x6/+Tdz3lPGM5Z2fIKV0yuobSkbDOPBWAZbYwnBjAH+MNsrYHrRTeCp3\r\nA4GlNcLAfYDd/HRVAPG80Fx0/AcwAw/kBtWhhs8EMN1aEgUs47UEYp9vy1hg\r\nv+hfVW1s6/glz6GJnU0GJZBF882TlWBBE4eg7xhaiN6UXqSAog0KEj9HsJRa\r\ntiKHJy7OU9aaf22ODbwvi1b7P6IJruYlZykajey3LYuR0JsiPtfP7bOtDmUz\r\n4rEmnOgUnjAJLPl7mJPEuDzfq2jiWRy1N2+zsrOqyCb5om/IQ1cxmjppbXJV\r\nY85zeTkv4ud6yqG4TNPnCOMdVooFxS82aps=\r\n=oHEw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"teishi.js","gitHead":"938cfba6b1cc80f571a6ec09d08d9f22cb3907fd","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"8.1.2","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"16.13.2","dependencies":{"dale":"6.0.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/teishi_5.1.0_1658351035104_0.3265958614478237","host":"s3://npm-registry-packages"}},"5.1.1":{"name":"teishi","version":"5.1.1","keywords":["error checking","functional","test","testing"],"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"url":"http://github.com/fpereiro/teishi#license","type":"Public Domain"}],"_id":"teishi@5.1.1","maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"}],"homepage":"https://github.com/fpereiro/teishi#readme","bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"dist":{"shasum":"bd4b1814961e2c20e80d94800d9ea705c0253c93","tarball":"https://registry.npmjs.org/teishi/-/teishi-5.1.1.tgz","fileCount":4,"integrity":"sha512-S5mmqMRq+U06zHPcyioHsNYM1+SliCU+CCt85n3w5Is7Cv2FhzoihZGIq63oS8ObpL48ZRP7IBbWyHcEF2Mf0A==","signatures":[{"sig":"MEQCIAye3NVoR3D2WegTzlOWDqGnIwI0vf7+8YkZ6D9AXv17AiBG0el0J+8Scu0bKqCAsFMuM9EvdyCqInVVJkTblOYU+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148010},"main":"teishi.js","gitHead":"fbda0209cb9cc37ebfce57380894d9b0fa25f386","_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"repository":{"url":"git+ssh://git@github.com/fpereiro/teishi.git","type":"git"},"_npmVersion":"11.6.0","description":"Tool for validating the input of functions.","directories":{},"_nodeVersion":"24.9.0","dependencies":{"dale":"6.0.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/teishi_5.1.1_1762513480083_0.8430142789964548","host":"s3://npm-registry-packages-npm-production"}},"5.1.2":{"name":"teishi","version":"5.1.2","description":"Tool for validating the input of functions.","dependencies":{"dale":"6.0.2"},"main":"teishi.js","types":"index.d.ts","author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},{"name":"Parya Rastegar","email":"rastegar.parya3@gmail.com"}],"license":[{"type":"Public Domain","url":"http://github.com/fpereiro/teishi#license"}],"keywords":["error checking","functional","test","testing"],"repository":{"type":"git","url":"git+ssh://git@github.com/fpereiro/teishi.git"},"bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"_id":"teishi@5.1.2","gitHead":"14a85bb5e07bffd9ce86da12018f115e3e3d9393","homepage":"https://github.com/fpereiro/teishi#readme","_nodeVersion":"24.9.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-/v6ok3Y0QSr1BCO+PnqAKjjRGimdCThPGZ5+fR0K3fKBnsQrgY/0Iio1kQ9niTRj/e8lJKmFmu2C8TPjZP5bUQ==","shasum":"5d6b93317ca0b97d19ad1c8e7c2aefa1853b84c9","tarball":"https://registry.npmjs.org/teishi/-/teishi-5.1.2.tgz","fileCount":6,"unpackedSize":158426,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFo4KNuFBno2IChG4YhWRdwOtk6XKZ06kzwGyAEEiplmAiBcxp+r/AuKsSn9ouG4L6XjMzegJJOHFubdgb90j0voZg=="}]},"_npmUser":{"name":"fpereiro","email":"fpereiro@gmail.com"},"directories":{},"maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/teishi_5.1.2_1766504754900_0.12702409439568485"},"_hasShrinkwrap":false}},"time":{"created":"2014-02-28T15:24:38.565Z","modified":"2025-12-23T15:45:55.223Z","1.0.0":"2014-02-28T15:24:38.565Z","1.0.1":"2014-02-28T15:41:07.105Z","1.0.2":"2014-02-28T15:47:32.754Z","1.0.3":"2014-02-28T19:06:19.774Z","1.0.4":"2014-03-01T01:31:24.754Z","1.0.5":"2014-03-01T01:59:35.531Z","1.0.6":"2014-04-12T19:46:05.217Z","1.0.7":"2014-04-15T01:26:31.391Z","1.0.8":"2014-04-15T01:29:42.185Z","1.0.9":"2014-04-22T00:59:57.242Z","1.0.10":"2014-04-23T14:18:36.216Z","1.0.11":"2014-04-24T18:07:57.372Z","1.0.12":"2014-06-01T05:50:41.743Z","2.0.0":"2014-12-04T11:44:12.431Z","2.1.0":"2014-12-07T02:19:14.039Z","2.1.1":"2014-12-08T07:02:28.978Z","2.1.2":"2014-12-14T01:28:17.496Z","2.1.3":"2014-12-17T06:25:53.934Z","2.1.4":"2014-12-30T22:55:24.383Z","2.1.5":"2014-12-30T23:06:58.467Z","2.1.6":"2014-12-30T23:29:24.931Z","2.1.7":"2014-12-31T01:18:29.752Z","2.1.8":"2015-01-06T11:27:03.944Z","2.1.9":"2015-01-11T20:15:09.153Z","2.1.10":"2015-01-31T23:40:04.264Z","3.0.0":"2015-03-09T17:05:40.739Z","3.0.1":"2015-03-11T11:42:07.795Z","3.0.2":"2015-03-19T16:03:34.949Z","3.0.3":"2015-04-13T12:20:01.321Z","3.0.4":"2015-04-28T14:45:36.585Z","3.1.0":"2015-06-16T01:07:50.187Z","3.1.1":"2015-07-10T12:24:12.057Z","3.1.2":"2015-08-23T13:35:42.578Z","3.1.3":"2016-01-12T01:34:01.680Z","3.1.4":"2016-01-12T01:46:19.703Z","3.1.5":"2016-02-08T22:32:36.951Z","3.2.0":"2016-04-29T10:32:40.719Z","3.2.1":"2016-04-29T12:54:26.475Z","3.3.0":"2016-04-29T13:33:08.076Z","3.4.0":"2016-05-18T19:34:24.527Z","3.5.0":"2016-07-21T14:59:06.474Z","3.6.0":"2016-10-27T12:27:21.634Z","3.7.0":"2016-11-11T13:31:28.969Z","3.8.0":"2016-11-20T16:24:49.620Z","3.9.0":"2016-11-22T22:15:55.974Z","3.10.0":"2017-02-26T00:53:17.092Z","3.11.0":"2017-05-21T16:40:49.069Z","3.11.1":"2017-10-29T15:41:37.105Z","3.12.0":"2018-01-08T09:46:47.680Z","3.13.0":"2018-03-26T18:18:24.410Z","3.13.1":"2018-10-05T06:31:29.069Z","3.13.2":"2018-11-14T11:01:16.416Z","3.14.0":"2019-05-31T13:00:00.624Z","3.14.1":"2019-06-06T12:57:00.556Z","4.0.0":"2019-07-31T15:45:16.140Z","5.0.0":"2019-11-05T21:04:26.652Z","5.0.1":"2019-11-19T13:54:34.196Z","5.0.2":"2019-11-26T14:53:59.483Z","5.0.3":"2020-06-15T19:46:32.804Z","5.1.0":"2022-07-20T21:03:55.290Z","5.1.1":"2025-11-07T11:04:40.330Z","5.1.2":"2025-12-23T15:45:55.036Z"},"bugs":{"url":"http://github.com/fpereiro/teishi/issues","email":"fpereiro@gmail.com"},"author":{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},"license":[{"type":"Public Domain","url":"http://github.com/fpereiro/teishi#license"}],"homepage":"https://github.com/fpereiro/teishi#readme","keywords":["error checking","functional","test","testing"],"repository":{"type":"git","url":"git+ssh://git@github.com/fpereiro/teishi.git"},"description":"Tool for validating the input of functions.","contributors":[{"name":"Federico Pereiro","email":"fpereiro@gmail.com"},{"name":"Parya Rastegar","email":"rastegar.parya3@gmail.com"}],"maintainers":[{"name":"fpereiro","email":"fpereiro@gmail.com"}],"readme":"# teishi\n\n> \"A string is a string is a string.\" --Gertrude Stein\n\nteishi is a tool for validating the input of functions.\n\nteishi means \"stop\" in Japanese. The inspiration for the library comes from the concept of \"auto-activation\", which is one of the two main pillars of the Toyota Production System (according to its creator, [Taiichi Ohno](http://en.wikipedia.org/wiki/Taiichi_Ohno)).\n\n## Current status of the project\n\nThe current version of teishi, v5.1.2, is considered to be *stable* and *complete*. [Suggestions](https://github.com/fpereiro/teishi/issues) and [patches](https://github.com/fpereiro/teishi/pulls) are welcome. Besides bug fixes, there are no future changes planned.\n\nteishi is part of the [ustack](https://github.com/fpereiro/ustack), a set of libraries to build web applications which aims to be fully understandable by those who use it.\n\n## Usage examples\n\nValidate the input of a function that receives two arguments, an integer (`counter`) and a function (`callback`). The second argument is optional.\n\n```javascript\nfunction example1 (counter, callback) {\n   if (teishi.stop ('example1', [\n      ['counter', counter, 'integer'],\n      ['callback', callback, ['function', 'undefined'], 'oneOf']\n   ])) return false;\n\n   // If we are here, the tests passed and we can trust the input.\n```\n\nValidate the input of a function that receives two arguments, a string (`action`) which can have four possible values ('create', 'read', 'update' and 'delete'), and an integer between 0 and 100 (`limit`).\n\n```javascript\nfunction example2 (action, limit) {\n   if (teishi.stop ('example2', [\n      ['action', action, ['create', 'read', 'update', 'delete'], 'oneOf', teishi.test.equal],\n      ['limit', limit, 'integer'],\n      [['limit', 'page size'], limit, {min: 0, max: 100}, teishi.test.range]\n   ])) return false;\n\n   // If we are here, the tests passed and we can trust the input.\n```\n\nValidate the input of a function that receives an object with two keys, `action` and `limit`. The applicable rules are the same than those in function `example2` above.\n\n```javascript\nfunction example3 (input) {\n   if (teishi.stop ('example3', [\n      ['input', input, 'object'],\n      ['keys of input', dale.keys (input), ['action', 'limit'], 'eachOf', teishi.test.equal],\n      function () {return [\n         ['input.action', input.action, ['create', 'read', 'update', 'delete'], 'oneOf', teishi.test.equal],\n         ['input.limit', input.limit, 'integer'],\n         [['input.limit', 'page size'], input.limit, {min: 0, max: 100}, teishi.test.range]\n      ]}\n   ])) return false;\n\n   // If we are here, the tests passed and we can trust the input.\n```\n\n### Using builders for more readable rules\n\nParya Rastegar has contributed an optional `builders.js` module with \"human-readable helper functions\". Using her logic, the same validation from `example2` above can be written as:\n\n```javascript\nvar b = require ('teishi/builder');\n\nfunction example2 (action, limit) {\n   if (teishi.stop ('example2', [\n      b.isOneOf   ('action', action, ['create', 'read', 'update', 'delete'], teishi.test.equal),\n      b.isInteger ('limit', limit),\n      b.isInRange (['limit', 'page size'], limit, {min: 0, max: 100})\n   ])) return false;\n\n   // If we are here, the tests passed and we can trust the input.\n```\n\n## Auto-activation\n\nAuto-activation means that a machine or process stops immediately when an error is found, instead of going on until the faults in the process make it break down completely. Let's restate this: **an auto-activated machine stops on its own when it detects an error.**\n\nThe purpose of auto-activation is twofold:\n- **No defective products are made**, because every machine involved in the process checks the state of the product and will stop the whole process if any abnormality is found.\n- By stopping the process on any error, the system **sharply distinguishes normal from abnormal operation**. The process cannot start again until that error is solved. Thus, errors are not ignored or dismissed, but rather brought into the light so that its root causes can be determined and eliminated.\n\n### Auto-activation in functional programming\n\nThis idea can fruitfully be applied to code. More specifically, here's how I think it can be applied to a (mostly) functional style of programming:\n\n- Every function is a machine. The \"product\" or \"throughput\" is the data flow that enters the function and then exits it.\n- Every function checks its input according to a set of rules.\n- If the function deems its input valid, it has the responsability to return valid output.\n- If the function deems its input invalid, it must do three things:\n   - Notify the user of the error, in the most precise terms possible.\n   - Stop its own execution.\n   - Return `false`.\n\nI propose returning `false` instead of throwing an exception for the following reasons:\n\n- An uncaught exception stops the whole program. If we want every error to stop the entire program, this approach is the most direct.\n- However, if we want our code to deal with an error on its own (and allow it to take correcting measures), each call to a function that might fail must be wrapped in a try/catch block. This is extremely cumbersome.\n- In contrast, using `false` to indicate invalid input is comparatively elegant and conforms to the structured data flow of a functional program.\n- In practice, the overloading of a valid return value (`false`) to indicate an exception has not exerted either restriction or confusion in other libraries currently based on teishi.\n\nLet's summarize the advantages of auto-activation, applied to code:\n\n- **Cleaner exception handling**: functions can return a false value on receiving a false input, so you can check for a false value instead of placing a try/catch block.\n- **Exception-less code**: if your program is correct, your program will never throw an exception or crash, no matter how wrong its input is. Although this doesn't reduce at all the difficulty of writing correct code, it at least offers the guarantee that no malformed input can break a properly written program.\n- **Errors can't run far**: in a non-auto-activated program, an invalid input can go through many functions before making one of them crash and burn. Hence, the source of an error can be far from the exception that it provokes later. If every function checks its input, the detection of the error will be much closer to its source.\n- **Meaningful error messages**: by specifying the difference between expected and actual input, error messages can convey more information. `argument [1] to myFunction must be a function` explains much more than `undefined is not a function`. If you forgot to pass a function as a second argument to another function, it is easier to just be told that you missed it, instead of debugging the first (failed) usage of that argument.\n- **Raise your own bar**: most importantly, you are <del>forced</del> encouraged to clearly specify the inputs of each function. This leads to clearer code and fewer bugs.\n\n### Auto-activation boilerplate\n\nWhen I started happily applying this concept to my code (as you can see in [old versions of lith](http://github.com/fpereiro/lith/blob/866b71457a5fcabfed246a869e31e4b884bb7ead/lith.js#L105)), I found myself writing this kind of code block, over and over.\n\n```javascript\nif (type (input) !== 'array' && type (input) !== 'undefined') {\n   console.log ('Input to myFunction must be either an array or undefined, but instead is', input);\n   return false;\n}\n\nif (type (input) === 'array') {\n   if (input.length !== 3) {\n      console.log ('Input to myFunction must be an array of length 3, but instead has length', input.length, 'and is', JSON.stringify (input));\n      return false;\n   }\n   for (var item in input) {\n      if (type (input [item]) !== 'string') {\n         console.log ('Each item of the input to myFunction must be a string, but instead is', input [item]);\n         return false;\n      }\n   }\n}\n```\n\nThese code blocks have three parts in common:\n\n1. Error detection.\n2. Error notification.\n3. Return immediately from the function, so that no further execution is performed and a false value is returned.\n\nThe repetitive parts of the three actions above are:\n\n1. Multiple comparisons:\n   - When you have a single input and many accepting values (as in the first example).\n   - When you have to iterate the input to see if it matches an accepting value (as in the second example).\n   - When you have to do both at the same time.\n2. Error notification:\n   - Writing the error message every time, such as \"Input can be of type array or object but instead is\".\n   - Having to stringify objects and arrays when printing them for error notification purposes.\n3. Returning early from the function requires to write one return clause per possible validation error.\n\nteishi simplifies the first two parts and allows you to return false just once, at the end of all the checks you want to perform. Using teishi, the example above can be rewritten like this:\n\n```javascript\nif (teishi.stop ('myFunction', [\n   ['input', input, ['array', 'undefined'], 'oneOf'],\n   [teishi.type (input) === 'array', [\n      function () {\n         return ['input.length', input.length, 3, teishi.test.equal]\n      },\n      ['items of input', input, 'string', 'each']\n   ]]\n])) return false;\n```\n\nAuto-activated validations using teishi are 50-75% smaller (counting either lines or tokens) than the boilerplate they replace.\n\nMore importantly, teishi allows you to express rules succintly and regularly, which makes rules easier to both read and write. Its core purpose is to facilitate as much as possible the exacting task of defining precisely the input of your functions.\n\n## Installation\n\nteishi depends on [dale](http://github.com/fpereiro/dale)\n\nteishi is written in Javascript. You can use it in the browser by sourcing dale and the main file:\n\n```html\n<script src=\"dale.js\"></script>\n<script src=\"teishi.js\"></script>\n```\n\nOr you can use these links to the latest version - courtesy of [jsDelivr](https://jsdelivr.com).\n\n```html\n<script src=\"https://cdn.jsdelivr.net/gh/fpereiro/dale@3199cebc19ec639abf242fd8788481b65c7dc3a3/dale.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/gh/fpereiro/teishi@f267d60f1cd5a552a9b27c572b07671b842643fb/teishi.js\"></script>\n```\n\nAnd you also can use it in node.js. To install: `npm install teishi`\n\nteishi should work in any version of node.js (tested in v0.8.0 and above). Browser compatibility has been tested in the following browsers:\n\n- Google Chrome 15 and above.\n- Mozilla Firefox 3 and above.\n- Safari 4 and above.\n- Internet Explorer 6 and above.\n- Microsoft Edge 14 and above.\n- Opera 10.6 and above.\n- Yandex 14.12 and above.\n\nThe author wishes to thank [Browserstack](https://browserstack.com) for providing tools to test cross-browser compatibility.\n\n## Simple rules\n\nThe fundamental pattern of teishi is to compare a variable to an expected value and see if the variable conforms or not to our expectations. Each of these expectations conforms a `rule`. Within a `rule`:\n\n- We will call the variable `compare`, and call the expected value `to`.\n- We will also need a `name` to describe what `compare` stands for.\n\nThe most basic teishi rules have this form: `[name, compare, to]`.\n\n### The simplest rule\n\nTake this rule from `example1` above:\n\n```javascript\n['counter', counter, 'integer']\n```\n\nThis rule enforces that `counter` will be of type `integer`. If this rule is not fulfulled, teishi will return the following error message: `counter should have as type \"integer\" but instead has value VALUE and type TYPE.` (with VALUE and TYPE being the value and the type of `counter`, respectively).\n\nThings to notice here:\n\n- The whole rule is an array with three elements.\n- The `name` field is `'counter'`.\n- The `compare` field is whatever the value of `counter` is.\n- The `to` field is `'integer'`.\n\n### The `multi` operator\n\nLet's take a slightly more complex rule, also from `example1`:\n\n```javascript\n['callback', callback, ['function', 'undefined'], 'oneOf']\n```\n\nThis rule enforces that `callback` will be either of type `function` or `undefined`.\n\nThings to notice here:\n\n- The `to` field is an array with two strings, `function` and `undefined`. This is because we have two possible `to` values we accept.\n- We add a fourth element to the rule, the string `'oneOf'`. This addition ensures that `compare` should conform to *one of* the `to` values.\n\n`'oneOf'` is an instance of the `multi` operator, which allows you to do one-to-many comparisons (`'oneOf'`), many-to-one comparisons (`'each'`) and many-to-many comparisons (`'eachOf'`). These are the three possible values for the `multi` operator:\n- `'oneOf'`: when you have a single `compare` and two or more accepting values, like in the example we just saw.\n- `'each'`: when you have many `compare` values and a single accepting value. For example, if we want to check that `strings` is an array of strings, we write the rule: `['strings', strings, 'string', 'each']`\n- `'eachOf'`: this variant combines both `'each'` and `'oneOf'`, and it compares multiple `compare` values to multiple `to` values. For example, if we want to check that `input` is an array made of strings or integers, we write the rule: `['input', input, ['string', 'integer'], 'eachOf']`.\n\nIf no `multi` operator is present, the rule just compares a single `compare` value to a single `to` value.\n\n### The `test` operator\n\nNotice that so far, we've only checked the *type* of `compare`. Let's see how we can check, for example, its actual value.\n\nLet's take this rule from `example2` above:\n\n```javascript\n['action', action, ['create', 'read', 'update', 'delete'], 'oneOf', teishi.test.equal]\n```\n\nIn this rule, we state that `action` should be either `'create'`, `'read'`, `'update'` or `'delete'`.\n\nThings to notice here:\n- As in the previous example, `to` is an array of values.\n- Also as in the previous example, the `multi` operator is `'oneOf'`, since we want `compare` to be equal to *one of* `'create'`, `'read'`, `'update'` and `'delete'`.\n- In contrast to the previous example, we set the *test function* to `teishi.test.equal`, which is one of the five test functions bundled with teishi.\n\nIn any rule, you can add a `multi` operator, a test function, or both of them, in any order you prefer, as long as they are after the three mandatory elements of the rule (`name`, `compare` and `to`).\n\n### Test functions\n\nteishi comes bundled with five test functions.\n\n#### `teishi.test.type`\n\n`teishi.test.type` is the default test function (in these days of dynamic typing, it is remarkable how much we want our inputs to conform to certain types). This function will check the type of *any* input and return a string with one of the following values:\n\n- `'integer'`\n- `'float'`\n- `'nan'`\n- `'infinity'`\n- `'object'`\n- `'array'`\n- `'regex'`\n- `'date'`\n- `'null'`\n- `'function'`\n- `'undefined'`\n- `'string'`\n\nType detection is different to the native `typeof` operator in two ways:\n\n- We distinguish between `object`, `array`, `regex`, `date` and `null` (all of which return `object` using `typeof`).\n- We distinguish between types of numbers: `nan`, `infinity`, `integer` and `float` (all of which return `number` using `typeof`).\n\nPlease remember **that you cannot use `'number'` as a type** since teishi requires more specificity. Instead use one of `'integer'`, `'float'`, `'nan'` or `'infinity'`.\n\n#### `teishi.test.equal`\n\n`teishi.test.equal` checks that two elements are equal, using the `===` operator.\n\nIn javascript, when you compare complex objects (arrays and objects), the language does not compare that the value of the two objects is the same, but rather *that both objects are the same object*.\n\nWhat this means is that if you compare (for example) two arrays with the same values, you will get a `false` value.\n\n```javascript\n[1, 2, 3] === [1, 2, 3] // returns false\n```\n\nWhereas if you do:\n\n```javascript\nvar array = [1, 2, 3];\narray === array // returns true\n```\n\nIn practice, most often you will want to compare whether the values of two arrays or objects are equal.\n\nAs a result, `teishi.test.equal` will compare the values of two objects or arrays and will return `true` if their values are equal (and `false` if they are not). This kind of comparison is often named *deep equality*.\n\n```javascript\n['input', [1, 2, 3], [1, 2, 3], teishi.test.equal] // this will return true\n```\n\nHistorical note: in a previous version of teishi, `teishi.test.equal` was the default test function, until after dutifully writing `teishi.test.type` in my teishi rules a few hundred times I realized that type checking was 5-10 times more prevalent than equality checks.\n\n#### `teishi.test.notEqual`\n\n`teishi.test.notEqual` is just like `teishi.test.equal`, but will return true if two things are **different** (and false otherwise).\n\nOne very important caveat: if you use the `oneOf` or `eachOf` operator with this test function, you will probably not get the results you want. Take the following example:\n\n```javascript\n  ['not a stooge', name, ['moe', 'larry', 'curly'], 'oneOf', teishi.test.notEqual] // this will return true even if name is `moe`, `larry` or `curly`.\n```\n\nEven if `name` is `'moe'`, this will still be true because `'moe'` is not equal to `'larry'` or `'curly'`. To achieve what you want, you can rewrite this rule as follows:\n\n```javascript\n  ['not a stooge', ['moe', 'larry', 'curly'], name, 'each', teishi.test.notEqual] // this won't let `moe` through\n```\n\nHowever, this is but a workaround, since the error message will look a bit strange. Because how `multi` operators work, negations against a set cannot be expressed directly. If you're experiencing a problem with this, please [open an issue](https://github.com/fpereiro/teishi/issues).\n\n#### `teishi.test.range`\n\n`teishi.test.range` checks that `compare` is in a certain range. This function is useful for testing the range of numbers.\n\nWe've already used this function in `example2` above:\n\n```javascript\n[['limit', 'page size'], limit, {min: 0, max: 100}, teishi.test.range]\n```\n\nHere, we ensure that `limit` can be 0, 100 or any number in between.\n\n`min` and `max` allow the `compare` value to be equal to them. In mathematical terms, they determine a *closed* line segment.\n\nIf we want `limit` to be between 0 and 100, but we don't want it to be 0 or 100, we write:\n\n```javascript\n[['limit', 'page size'], limit, {more: 0, less: 100}, teishi.test.range]\n```\n\n`more` and `less` don't allow the `compare` value to be equal to them. In mathematical terms, they determine an *open* line segment.\n\nIf you are using `teishi.test.range`, a valid `to` value is an object with one or more of the following keys: `min`, `max`, `less`, `more`.\n\nNotice that you can mix *open* and *closed* operators. For example:\n\n```javascript\n[['limit', 'page size'], limit, {min: 0, less: 100}, teishi.test.range]\n```\n\nThis rule will allow `limit` to be 0 but it won't allow it to be 100.\n\n#### `teishi.test.match`\n\n`teishi.test.match` checks that `compare` is a string that matches the regex specified in the `to` field.\n\nFor example, imagine we want a certain `identifier` to be a string of at least one character composed only of letters and numbers. We can determine this by using the following rule:\n\n```javascript\n[['identifier', 'alphanumeric string'], identifier, /^[0-9a-zA-Z]+$/, teishi.test.match]\n```\n\nIf `compare` is not a string and `to` is not a regex, a proper error message will be displayed.\n\n#### Writing your own test functions\n\nAlthough the five functions above will take you surprisingly far, you may need to write your own test functions. While this is certainly possible and encouraged, it is an advanced topic that deserves [its own section](http://github.com/fpereiro/teishi#custom-test-functions).\n\n### Two `names` instead of one\n\nNotice this rule, which we've already seen before:\n\n```javascript\n[['limit', 'page size'], limit, {min: 0, max: 100}, teishi.test.range]\n```\n\nHere, `name` (the first element of the rule) is not a string, but rather an array with two strings. The purpose of the second string is to provide a verbal description of the `to` field.\n\nIn this case, if `limit` was out of range, you would get the following error message:\n\n`limit should be in range {min: 0, max: 100} (page size) but instead is LIMIT`, where LIMIT is the actual value of `limit`.\n\nWhy didn't we do this for every rule? In practice, the `to` field is usually self-explanatory. When this is not the case, use two names instead of one. The second name will give additional information about the `to` value.\n\nFrom now on we will refer to `name` as `names`.\n\n### All you need to know about `multi`\n\nThere are a few things we haven't explained about the `multi` operator.\n\nLet's first state a few definitions:\n\n- `simple value`: anything that is neither an array, nor an object, nor `undefined`\n- `complex value`: an array or an object\n- `empty value`: either `undefined` or an empty complex array or object\n\n**What happens if `compare` or `to` are objects instead of arrays?**\n\nIf you use an object instead of an array and `multi` goes through each of its elements, teishi will *ignore the keys* of the object and *only take into account its values*. For example, these two rules are equivalent:\n\n```javascript\n['length of input', input.length, [1, 2, 3], 'oneOf', teishi.test.equal]\n```\n\n```javascript\n['length of input', input.length, {cant: 1, touch: 2, this: 3}, 'oneOf', teishi.test.equal]\n```\n\n**What happens if `compare` is a `simple value` and you set `multi` to `'each'` or `'eachOf'`?**\n\nIf `multi` is set to `'each'` or `'eachOf'`, this is the same as setting `compare` to an array with a single element. For example, these two rules will be the same.\n\n```javascript\n['input', 1, 'integer', 'each']\n```\n\n```javascript\n['input', [1], 'integer', 'each']\n```\n\n**What happens if `to` is a `simple value` and you set `multi` to `'oneOf'` or `'eachOf'`?**\n\nSame than above, `to` will be treated as an array with one element. For example, these two rules are equivalent:\n\n```javascript\n['input', input, 'integer', 'oneOf']\n```\n\n```javascript\n['input', input, ['integer'], 'oneOf']\n```\n\n**What happens if `compare` is an `empty value` and you set `multi` to `'each'` or `'eachOf'`?**\n\nIf `compare` is empty and `multi` is either `'each'` or `'eachOf'`, teishi assumes that there are no values to compare, so there cannot be possibly a source of error. Hence, it will always return `true`. Here are examples of rules that will always return `true`:\n\n```javascript\n['input', undefined, 'integer', 'each']\n```\n\n```javascript\n['input', [], 'integer', 'each']\n```\n\n```javascript\n['input', {}, 'integer', 'each']\n```\n\n**What happens if `to` is an `empty value` and you set `multi` to `'oneOf'` or `'eachOf'`?**\n\nIf `to` is empty and `multi` is either `'oneOf'` or `'eachOf'`, teishi assumes that there are no values that `compare` can match, so there cannot be any possible way to pass the test. Hence, it will always return `false`, plus an error message. Here are examples of rules that will always return `false`:\n\n```javascript\n['input', input, undefined, 'oneOf']\n```\n\n```javascript\n['input', input, [], 'oneOf']\n```\n\n```javascript\n['input', input, {}, 'oneOf']\n```\n\n### Summary: teishi simple rules expressed as teishi rules\n\nTo sum up what a teishi simple rule is, let's express it in terms of teishi simple rules!\n\nA teishi simple rule is an array.\n\n```javascript\n['teishi simple rule', rule, 'array']\n```\n\nThe rule can have three to five elements.\n\n```javascript\n['length of teishi simple rule', rule.length, {min: 3, max: 5}, teishi.test.range],\n```\n\nThe `names` of the rule must be either a string or an array.\n\n```javascript\n['rule name', rule [0], ['string', 'array'], 'oneOf']\n```\n\nIf `names` is an array, it must have length 2 and only contain strings.\n\n```javascript\n['rule name', rule [0].length, 2, teishi.test.equal]\n```\n\n```javascript\n['rule name', rule [0], 'string', 'each']\n```\n\n`compare` and `to` can be *anything*, so we don't have to write any validation rules for them!\n\nThe fourth element of the rule can be either the `multi` operator or a test function. Also, it can be `undefined`.\n\n```javascript\n['rule options', rule [3], ['string', 'function', 'undefined'], 'oneOf']\n```\n\nSame thing with the fifth element.\n\n```javascript\n['rule options', rule [4], ['string', 'function', 'undefined'], 'oneOf']\n```\n\nIf the fourth element of the rule is a string, it needs to be a valid `multi` operator.\n\n```javascript\n['multi operator', rule [3], ['each', 'oneOf', 'eachOf'], 'oneOf', teishi.test.equal]\n```\n\nSame with the fifth element of the rule, in case it is a string.\n\n```javascript\n['multi operator', rule [4], ['each', 'oneOf', 'eachOf'], 'oneOf', teishi.test.equal]\n```\n\nIf both the fourth and the fifth element are defined, they have to be of different types (one being a string, the other a function).\n\n```javascript\n[['type of multi operator', 'type of test function'], teishi.type (rule [3]), teishi.type (rule [4]), teishi.test.notEqual],\n```\n\n## Complex rules\n\nThere are four kinds of complex rules in teishi. Let's take a look at them.\n\n### Nested rules\n\nA nested teishi rule is an array containing teishi rules. If `a`, `b` and `c` are teishi rules, all of these are valid teishi rules:\n\n```javascript\n[a, b, c]\n```\n\n```javascript\n[[a, b, c]]\n```\n\n```javascript\n[[a], b, c]\n```\n\n`(any other concoction of arrays and a, b, c that you can imagine)`\n\nIf you check `example1` through `example3` above, you will notice that the rule passed to the main teishi functions receive an array enclosing many rules. That enclosing array is a nested rule.\n\nA nested rule is just a sequence of rules. When teishi finds a complex rule, it will first test the first rule inside it. If the rule is valid, it will then proceed to the next rule. Otherwise, it will return `false` and display the proper error message.\n\n### Boolean rules\n\nIf teishi finds a boolean (`true` or `false`) in place of a rule, it will interpret this result as either a valid or an invalid result. This is useful when you want to reuse your validation functions.\n\nFor example, imagine you have a function `validateWidget` that returns `true` if a `widget` is valid and `false` otherwise.\n\nIf you want to validate a `widget` as part of the validations on a certain function, you can write the following:\n\n```javascript\nfunction validateSomething (widget, ...) {\n   if (teishi.stop ([\n      // a rule here...\n      // another rule here...\n      validateWidget (widget),\n      // more rules here...\n   ])) return false;\n```\n\nWhen `validateSomething` is invoked, `validateWidget (widget)` will be evaluated to either `true` or `false`, so that when teishi encounters the rule, it will be a simple boolean which can make it either stop or proceed.\n\n### Function guards\n\nImagine that you want to validate a certain `array`. You want `array` to be an array, and you want it to have a length of 3. So you write the following rules:\n\n```javascript\n['array', array, 'array']\n```\n\n```javascript\n['array length', array.length, 3, teishi.test.equal]\n```\n\nHowever, if `array` is not an array, instead of getting a nice teishi error, you will get an exception! For example, if `array` is `null`, you will get an exception that says something like: `TypeError: Cannot read property 'length' of null`.\n\nBecause of [how javascript works](http://en.wikipedia.org/wiki/Eager_evaluation), as soon as teishi receives those two rules, javascript replaces `array` by `null` in the first rule and `array` by `null.length` in the second rule. Of course, this last replacement yields an exception, because `null` has no method `length`.\n\nTo prevent this, we want javascript to evaluate the elements of a rule only when teishi is about to use that rule. To do this, we wrap the *potentially dangerous rules* in a function. The function effectively guards the rules to be evaluated before we know it is safe to do so.\n\nWhen teishi finds a function, it executes it and then considers the result as a rule. So, we can express these two rules as follows:\n\n```javascript\n['array', array, 'array']\n```\n\n```javascript\nfunction () {\n   return ['array length', array.length, 3, teishi.test.equal]\n}\n```\n\nIf `array` is `null`, when teishi is evaluating the first rule, it will find the type discrepancy, return `false` and report the problem. The second rule, wrapped in a function, will never be evaluated, and in this way no exceptions will be generated.\n\nNow, how can we know which are *potentially dangerous rules*? All *dangerous* rules can potentially raise exceptions because of a mismatch between the expected and the actual type of the `compare` field. More specifically, exceptions can be raised when:\n\n- `compare` references an element of an array (for example `input [0]`) but the expected array is not of type `array`.\n- `compare` references a property of an object (for example `input.limit`) but the expected object is not of type `object`.\n- `compare` invokes a method that is supported on a certain type (for example, `length`, which is supported for strings and arrays) but then the expected element is not of the expected type and hence does not support the method.\n\nFunction guards make teishi rules more verbose and they are not easy to grasp at first. And, as you can notice from the examples above, they have to be employed very often.\n\nOn the flip side, you will quickly learn where to write them and also quickly you will learn to ignore them while reading a set of rules.\n\n### Conditional rules\n\nConditional rules allow you to enforce certain teishi rules only when a condition is met. Let's see an example:\n\n```javascript\n[teishi.type (input) === 'array', [\n   function () {\n      return ['input.length', input.length, 3, teishi.test.equal]\n   },\n   ['items of input', input, 'string', 'each']\n]]\n```\n\n`teishi.type` is a simple function that returns the type of a value. When teishi is invoked, the expression `teishi.type (input) === 'array'` will be replaced by `true` or `false`, depending on the type of `input`.\n\nWhen teishi encounters a rule with the form `[boolean, array]`, teishi will only use the rules contained in `array` only if `boolean` is `true`. If the boolean is `false`, teishi will skip the rules contained in array.\n\nIn the example above, if `input` is an array, teishi will execute the two rules contained in the array (one of them is contained in a function guard as well!). If `input` is of another type, these rules will be ignored.\n\nLet's see another example:\n\n```javascript\n[\n   options.port !== undefined,\n   ['options.port', options.port, {min: 1, max: 65536}, teishi.test.range]\n]\n```\n\nAs you can see, if `options.port` is not `undefined`, the rule that specifies that `options.port` should be between 1 and 65536 will be enforced. If `options.port` is `undefined`, the rule will be ignored.\n\nTo sum up, a conditional rule:\n- Is a nested rule.\n- Contains exactly two rules.\n- The first rule is something that evaluates to a boolean (usually a function call or a comparison).\n- The second rule is an array (which can be either a nested rule or a simple rule).\n\nWhen you use boolean rules (because you are using another validation function as a teishi rule), you must be careful of *conditional capture*. *Conditional capture* happens when you want to express two teishi rules in succession, but teishi thinks that you are using a conditional.\n\nLet's see an example of conditional capture:\n\n```javascript\n[\n   validateWidget (widget),\n   ['sprocket', sprocket, 'object']\n]\n```\n\nIn your eyes, this is a nested rule containing two simple rules. However, since the nested rule is composed of two rules, the first a boolean and the second an array, teishi will interpret this a conditional. Which means that if `validateWidget (widget)` returns `false`, not only it won't return `false`, but it will also ignore the next rule! This is dangerous because if the first rule is not met, not only teishi won't stop, but it will also ignore the next rule.\n\nAlthough `validateWidget` will print an error message, teishi will proceed as if no errors had been reported.\n\nTo avoid conditional capture, you need to bear in mind the following rule:\n\n*When writing a nested rule of length 2 where the first rule is a boolean*, **wrap the second rule in a function guard**.\n\n```javascript\n[\n   validateWidget (widget),\n   function () {return ['sprocket', sprocket, 'object']}\n]\n```\n\nBy doing this, teishi will interpret the rule as a normal nested rule.\n\nThis hack has the added benefit of further dignifying the other hack (function guards).\n\n### Summary: teishi rules expressed as teishi rules\n\nNow that we know complex rules, we can write a teishi rule that validates teishi rules!\n\n```javascript\n[\n   ['teishi rule', rule, ['function', 'boolean', 'array'], 'oneOf'],\n   [teishi.type (rule) === 'array', [\n      function () {\n         return [\n            [<conditional which will be true if this is a simple rule>, [\n               ['teishi simple rule', rule, 'array'],\n               ['length of teishi simple rule', rule.length, {min: 3, max: 5}, teishi.test.range],\n               ['rule name', rule [0], ['string', 'array'], 'oneOf'],\n               [teishi.type (rule [0]) === 'array', [\n                  function () {return ['rule name', rule [0].length, 2, teishi.test.equal]},\n                  ['rule name', rule [0], 'string', 'each'],\n               ]],\n               ['rule options', rule [3], ['string', 'function', 'undefined'], 'oneOf'],\n               ['rule options', rule [4], ['string', 'function', 'undefined'], 'oneOf'],\n               [teishi.type (rule [3]) === 'string', ['multi operator', rule [3], ['each', 'oneOf', 'eachOf'], 'oneOf', teishi.test.equal]],\n               [teishi.type (rule [4]) === 'string', ['multi operator', rule [4], ['each', 'oneOf', 'eachOf'], 'oneOf', teishi.test.equal]],\n               [rule [3] !== undefined && rule [4] !== undefined, [\n                  [['type of multi operator', 'type of test function'], teishi.type (rule [3]), teishi.type (rule [4]), teishi.test.notEqual],\n               ]],\n            ]]\n         ]\n      }\n   ]]\n]\n```\n\nAnd there it is! This teishi rule will verify that any teishi rule is indeed valid. As a matter of fact, we will use this rule in `example.js` to validate teishi rules. The only thing I haven't specified here is the intricate conditional which I use to distinguish a simple rule from a nested one.\n\nI wish I could use this code in teishi proper, but we can't because we need to write teishi without teishi. Such are the demands of bootstrapping. To see how teishi actually validates its input, please refer to the annotated source below.\n\n## teishi main functions\n\n### teishi.v\n\n`teishi.v` is a function that receives three arguments:\n- `functionName`, a string. This argument is optional.\n- `rule`, which is a teishi rule (simple or complex). This argument is required.\n- `apres`, an optional argument that can be set to either `true` or a function.\n- `prod`, an optional argument that can be set to `true`.\n\n`rule` is a simple or complex teishi rule. We've already explained these in the previous two sections.\n\n`teishi.v` will test that the `rule` (including any sub-rules nested within it) are enforced for the given input. If any rule returns `false`, of them fails, the function does two things:\n- Report an error.\n- Return `false`.\n\nThe canonical usage example of `teishi.v` is to create validation functions. For example:\n\n```javascript\nfunction validateWidget (widget) {\n   return teishi.v (['widget', widget, 'object']);\n}\n```\n\nThe function above will return `true` if `widget` is an object, and `false` otherwise.\n\nThe purpose of `functionName` is to provide the name of the calling function to the error messages, to locate errors more easily. For example:\n\n```javascript\nfunction validateWidget (widget) {\n   return teishi.v ('validateWidget', ['widget', widget, 'object']);\n}\n```\n\nIf `validateWidget` receives a `widget` that is not an object, teishi.v will print the following error:\n\n`widget passed to validateWidget should have as type object but instead is WIDGET with type WIDGETTYPE`\n\nIf `functionName` hadn't been specified, the error message would be:\n\n`widget should have as type object but instead is WIDGET with type WIDGETTYPE`\n\nLet's explain `apres`. `apres` is a variable that determines what is to be done if `teishi.v` finds an error.\n\nWhen `apres` is set to `true`, if `teishi.v` finds an error, instead of reporting it and returning `false`, *it returns the error message itself*. By doing this, you let the function calling `teishi.v` to capture the error message and decide if it should be printed or not to the user. Sometimes it is useful to use teishi's machinery to to find out whether a given condition is matched or not, without having to report an error. I had to use this functionality in lith, when checking whether a given input was of a [certain kind](https://github.com/fpereiro/lith/blob/9bdb176118026607f2c047a3b315954fcbd111d5/lith.js#L58) or of [some other kind](https://github.com/fpereiro/lith/blob/9bdb176118026607f2c047a3b315954fcbd111d5/lith.js#L61). If it belonged to neither kind, the error message would be reported, otherwise it wouldn't.\n\nFor certain situations, you might want to do some other thing with the error message. For example, if you are validating an HTTP request, you might want to write the error into the response object. This is where you can set `apres` to a function that receives the `error` as its sole argument:\n\n```javascript\nfunction (request, response) {\n   teishi.v (['id', response.body.id, 'integer'], function (error) {\n      response.end (error);\n   });\n}\n```\n\nIn the case above, the error will not be printed to the console, but rather it will be written to the `response`.\n\nFinally, let's cover the `prod` parameter. When `prod` is set to `true`, it will turn off rule validation; in other words, the rules you pass to `teishi.v` will be assumed to be valid. This will increase teishi's performance in production settings, but should only be done when your code is thoroughly debugged.\n\nIf you want to turn off validations globally, you can directly set `teishi.prod` to `true`. This will be equivalent as passing a truthy `prod` parameter to every invocation of `teishi.v`.\n\n### teishi.stop\n\n`teishi.stop` takes the same arguments as `teishi.v`.\n\nThe main difference between `teishi.v` and this function is that when `teishi.stop` finds an error, it returns `true` and when it finds no errors, it returns `false`. Let's state it again: **teishi.stop returns FALSE if there were NO validation errors**.\n\n`teishi.stop` exists because of the following pattern:\n\n```javascript\nif (teishi.stop ('myFunction', [\n   // here be rules\n   // and more rules\n])) return false;\n```\n\nteishi already does two things for us: a) multiple comparisons; b) automatic error messages. The final thing we need to do to have properly auto-activated code is to return `false` when we find an error. If we were to do this with `teishi.v`, you would use the following pattern:\n\n```javascript\nif (teishi.v ('myFunction', [\n   // here be rules\n   // and more rules\n]) === false) return false;\n```\n\nOr this other pattern, which is shorter but error-prone:\n\n```javascript\nif (! teishi.v ('myFunction', [\n   // here be rules\n   // and more rules\n])) return false;\n```\n\nThanks to `teishi.stop`, we can get rid of the `=== false` or the `!` in the examples above. There is no way, however, to get rid of the conditional wrapping the call to `teishi.stop`, nor a way of omitting the `return false`. The above pattern is the most succint auto-activation code you can get from teishi.\n\nIf `apres` set to `true` and a validation error is found, the error will be lost, since `teishi.stop` only returns `true` or `false`. This is useful for when you want to check the absence of a condition, but you don't consider this absence to be an error, just a result that will control the flow of your program. Here's [an example](https://github.com/fpereiro/lith/blob/9bdb176118026607f2c047a3b315954fcbd111d5/lith.js#L167).\n\nIf `apres` is set to a function and a validation error is found, you can still do something meaningful with the error. For example:\n\n```javascript\nfunction (request, response) {\n   if (teishi.stop (['id', response.body.id, 'integer'], function (error) {\n      response.end (error);\n   })) return false;\n}\n```\n\n## Helper functions\n\nteishi relies on eleven helper functions which can also be helpful beyond the domain of error checking. You can use these functions directly in your code.\n\n### teishi.type\n\n`teishi.type` takes an argument and returns a string indicating the value of that argument.\n\nThe purpose of `teishi.type` is to create an improved version of `typeof`. The improvements are two:\n\n- Distinguish between types of numbers: `nan`, `infinity`, `integer` and `float` (all of which return `number` in `typeof`).\n- Distinguish between `array`, `date`, `null`, `regex` and `object` (all of which return `object` in `typeof`).\n\nThe possible types of a value can be grouped into three:\n- **Values which `typeof` detects appropriately**: `boolean`, `string`, `undefined`, `function`.\n- **Values which `typeof` considers `number`**: `nan`, `infinity`, `integer`, `float`.\n- **values which `typeof` considers `object`**: `array`, `date`, `null`, `regex` and `object`.\n\nIf you pass `true` as a second argument, `type` will distinguish between *plain objects* (ie: object literals) and other objects. If you pass an object that belongs to a class, `type` will return the lowercased class name instead.\n\nThe clearest example of this is the `arguments` object:\n\n```javascript\ntype (arguments)        // returns 'object'\ntype (arguments, true)  // returns 'arguments'\n```\n\n### teishi.str and teishi.parse\n\nTwo very useful javascript functions, `JSON.stringify` and `JSON.parse`, throw an exception if they receive an invalid input.\n\nIn keeping with the principle of exception-less code, teishi provides two wrappers to these functions:\n- `teishi.str`, which wraps `JSON.stringify`.\n- `teishi.parse`, which wraps `JSON.parse`.\n\nIf they receive invalid input, these two functions will return `false` instead of throwing an exception. If the input is valid, they will return the output of `JSON.stringify` and `JSON.parse`, respectively.\n\n### teishi.simple and teishi.complex\n\n`teishi.simple` takes an `input` and returns `true` if it's a simple object (anything but an array or an object).\n\n`teishi.complex` takes an `input` and returns `true` if it's a complex object (array or object).\n\n### teishi.inc\n\nA function that takes an array or an `arguments` pseudo-array as its first element and a `value` as its second argument. If `value` is contained inside the array, the function returns `true`; otherwise, it returns `false`. This is the sole teishi function that doesn't validate its arguments - this is done to save execution time in libraries that depend on teishi.\n\n### teishi.copy\n\n`teishi.copy` takes any input and returns a copy of it.\n\nThis function is useful when you want to pass an array or object to a function that will modify it *and* you want the array or object in question to remain modified outside of the scope of that function. [javascript passes objects and arrays by reference](http://stackoverflow.com/questions/13104494/does-javascript-pass-by-reference/13104500#13104500), so in this case you need to copy the array or object to avoid side effects.\n\nIf `input` has any [circular references](https://stackoverflow.com/questions/1493453/example-of-a-circular-reference-in-javascript), `teishi.copy` will replace them with a string with the form `'[Circular]'`.\n\nIf `input` is (or contains) an `arguments` pseudo-array, it will be copied into a standard array.\n\n### teishi.eq\n\n`teishi.eq` (short for `teishi.equal`) takes two elements and returns `true` if they are equal and `false` otherwise. This function is mostly useful for comparing whether two arrays or objects contain the same things, despite being occupying distinct locations in memory. The rules for equality are as follows:\n\n- If both arguments are simple, the strict equality check is used (`===`).\n- If both arguments are complex, 1) their types must be the same (as per `teishi.type`); 2) their keys must be the same; and 3) the values for each of the keys must fulfill the same equality conditions, whether they are simple or complex.\n\n### teishi.last\n\n`teishi.last` takes an array as its first argument and returns its last element. If you pass an argument that is not an array, an error will be printed through `teishi.clog` and the function will return `false`. This function can also receive an `arguments` pseudo-array.\n\nYou can pass an integer larger than 0 as the second argument to `teishi.last`. This will make `teishi.last` to retrieve the nth element from the end instead of the last one; for example, if you pass 2 as the second argument, `teishi.last` will return the next-to-last element of the passed array.\n\n### teishi.time\n\nA function that returns the current date in milliseconds. If you pass a single argument to it, the date will be constructed with that argument instead of representing the current date.\n\n### teishi.clog\n\n`teishi.clog` serves the noble purpose of printing output to the console. All teishi functions print error messages through this function.\n\nWhy use `teishi.clog` instead of `console.log`?\n- Output comes in pretty colors, thanks to [cutting edge 1980s technology](http://en.wikipedia.org/wiki/ANSI_escape_code).\n- Complex values (arrays and objects) are expanded, so you can print nested objects without having to stringify them.\n- It prints a timestamp that can be helpful when profiling or debugging code.\n- Defaults to `alert` for very old browsers that don't support `console.log`.\n\n`teishi.clog` takes one or more arguments, of any type. If the first argument is a string, and there's more than one argument passed to `teishi.clog`, the first argument will be treated as a `label`, which is just some text with a different background color, followed by a colon (`:`).\n\nIt is important to notice that colorized output will only be present in node.js, since there's no standard way of giving format to the javascript console in browsers.\n\nIf you want to send the output of `teishi.clog` to a logfile, the color codes will bother you. In this case, invoke once `teishi.lno` (short for **l**og with **no** colors), which will turn off all colorized output for any subsequent invocation to `teishi.clog`.\n\n## Custom test functions\n\nWhat if the five test functions provided with teishi are not enough? Well, you can write your own custom test functions! Earlier I mentioned that this is an advanced topic. However, if you've made it through the readme, you are ready to do this.\n\nTo dispel your fears, here's the code of `teishi.test.type`, the most useful test function in teishi:\n\n```javascript\nteishi.test.type = teishi.makeTest (\n   function (a, b) {return teishi.type (a) === b},\n   ['should have as type', ['with type', teishi.type]]\n);\n```\n\nTo create a test function, you need to invoke the function `teishi.makeTest`. This function takes two arguments:\n- `fun`, a function that takes two arguments and returns `true` or `false`. These two arguments will be, as you might imagine, the `compare` and the `to` of each rule.\n- `clauses`, which can be one of the following:\n   - a string (`shouldClause`).\n   - an array containing a `shouldClause`.\n   - an array containing a `shouldClause` and a `finalClause`.\n\n`shouldClause` is required, but `finalClause` is optional. In fact, of all five teishi test functions, only `teishi.test.type` uses a `finalClause`.\n\nThe `shouldClause` is the string that teishi will use to specify what kind of validation error was encountered. For example, the `shouldClause` of `teishi.test.type` is `'should have as type'`. In the error message below, the `shouldClause` is responsible for the bolded text:\n\ninput **should have as type integer** but instead is INPUT with type INPUTTYPE\n\nThe `finalClause` is responsible for the final part of the error message. It is displayed at the end of the error, after the `compare` value. For example, in `teishi.test.type`, the `finalClause` is `['with type', teishi.type]`. In the error message below, the `finalClause` is responsible for the bolded text:\n\ninput should have as type integer but instead is INPUT **with type INPUTTYPE**\n\nThe `finalClause` can be any of the following:\n- `undefined`\n- a string or function\n- an array containing one or more strings/functions\n\nWhen you place a function in the `finalClause`, that function will be evaluated with `compare` and `to` as its arguments. This is why we put `teishi.type` in the `finalClause`, so that `teishi.type` will receive `compare` as argument and return its type.\n\nEarlier I said that `fun` can return either `true` or `false`, depending on the result of the validation. However, what happens if `fun` receives invalid arguments altogether? In this case, `fun` can return a special error message, in the form of an array containing text.\n\nTo illustrate this, let's take at look at the slightly more intimidating `teishi.test.match`:\n\n```javascript\nteishi.test.match = teishi.makeTest (function (a, b) {\n   if (teishi.type (a) !== 'string') {\n      return ['Invalid comparison string passed to teishi.test.match. Comparison string must be of type string but instead is', a, 'with type', teishi.type (a)];\n   }\n   if (teishi.type (b) !== 'regex') {\n      return ['Invalid regex passed to teishi.test.match. Regex must be of type regex but instead is', b, 'with type', teishi.type (b)];\n   }\n   return a.match (b) !== null;\n}, 'should match');\n```\n\nAs you can see, if `teishi.test.match` receives a `compare` field that is not a string, or a `to` field that is not a regex, the `fun` will return custom error messages that are more illustrative than the standard one.\n\nWhen teishi invokes `fun`, it will treat both `false` and a custom error message as indication that the test failed. The only difference between `false` and an error message is that when `false` is returned, the standard error message will be printed, whereas if an error is returned, the error itself will be printed.\n\nThe purpose of returning a custom error message is because this kind of error implies a programming error on the way that the teishi rules were written. If, for example, `teishi.test.match` is invoked with a non-string argument, this is because your function didn't check the type of the input before. For this category of errors, the default error message would be misleading, so that's why we print custom errors.\n\nFor more information, please refer to the annotated source code below, where I describe `teishi.makeTest` and all the test functions in detail.\n\n## Source code\n\nThe complete source code is contained in `teishi.js`. It is about 410 lines long.\n\nBelow is the annotated source.\n\n```javascript\n/*\nteishi - v5.1.2\n\nWritten by Federico Pereiro (fpereiro@gmail.com) and released into the public domain.\n\nPlease refer to readme.md to read the annotated source.\n*/\n```\n\n### Setup\n\nWe wrap the entire file in a self-executing anonymous function. This practice is commonly named [the javascript module pattern](http://yuiblog.com/blog/2007/06/12/module-pattern/). The purpose of it is to wrap our code in a closure and hence avoid making the local variables we define here to be available outside of this module. A cursory test indicates that local variables exceed the scope of a script in the browser, but not in node.js. This means that this pattern is useful only on the browser.\n\n```javascript\n(function () {\n```\n\nSince this file must run both in the browser and in node.js, we define a variable `isNode` to check where we are. The `exports` object only exists in node.js.\n\n```javascript\n   var isNode = typeof exports === 'object';\n```\n\nWe require [dale](http://github.com/fpereiro/dale). Note that, in the browser, `dale` will be loaded as a global variable.\n\n```javascript\n   var dale   = isNode ? require ('dale') : window.dale;\n```\n\nThis is the most succinct form I found to export an object containing all the public members (functions and constants) of a javascript module. Note that, in the browser, we use the global variable `teishi` to export the library.\n\n```javascript\n   if (isNode) var teishi = exports;\n   else        var teishi = window.teishi = {};\n```\n\n### `indexOf` polyfill\n\nTo provide compatibility with older browsers, teishi provides its own `indexOf` [polyfill](https://en.wikipedia.org/wiki/Polyfill_(programming)) for arrays. If the method is already defined (as it will be on any [ES5 compatible browser](https://caniuse.com/es5)), the polyfill won't be set. You can also override it by loading your own polyfill before loading teishi.\n\nThe function takes two arguments, `element` and `fromIndex`.\n\n```javascript\n   if (! Array.prototype.indexOf) Array.prototype.indexOf = function (element, fromIndex) {\n```\n\nWithin the function, `this` will refer to the array on which we're applying the operation. We iterate its elements using `dale.stopNot`, stopping when we find the first value that is not undefined.\n\n```javascript\n      var result = dale.stopNot (this, undefined, function (v, k) {\n```\n\nIf `fromIndex` is present and it is larger than the index of the element currently being scanned, we ignore the element.\n\n```javascript\n         if (fromIndex && k < fromIndex) return;\n```\n\nIf we found an element in the array that is equal to `element`, we return the index.\n\n```javascript\n         if (element === v) return k;\n      });\n```\n\nIf `result` is `undefined`, we could not find `element`, so we return -1. Otherwise, we return `result` which contains the index of`element` within the array. There's nothing else, so we close the function.\n\n```javascript\n      return result === undefined ? -1 : result;\n   }\n```\n\n### Helper functions\n\nWe start by defining `teishi.type`, by far the most useful function of the bunch. This function is inspired on [Douglas Crockford's remedial type function](http://javascript.crockford.com/remedial.html).\n\nThe purpose of `teishi.type` is to create an improved version of `typeof`. The improvements are two:\n\n- Distinguish between `object`, `array`, `regex`, `date` and `null` (all of which return `object` in `typeof`).\n- Distinguish between types of numbers: `nan`, `infinity`, `integer` and `float` (all of which return `number` in `typeof`).\n\nBefore we define `teishi.type`, we define `argdetect`, a local variable that will be `true` in most javascript engines. In Internet Explorer 8 and below, however, it is not possible to get the type of the prototype of an `arguments` pseudo-array, hence the definition of this variable (which will be used in `type` and also once more later).\n\nThe variable gets its value from a self-execution anonymous function. We need to do this since the `arguments` pseudo-array is only defined in the context of a function.\n\n```javascript\n   var argdetect = (function () {return Object.prototype.toString.call (arguments).match ('arguments')}) ();\n```\n\n`teishi.type` takes a single argument (of any type, naturally) and returns a string which can be any of: `nan`, `infinity`, `integer`, `float`, `array`, `object`, `function`, `string`, `regex`, `date`, `null` and `undefined`.\n\nIf we pass a truthy second argument to `teishi.type`, and `input` turns out to be an object, `teishi.type` will return the lowercased name of the class of the object (which, for example, can be `object` for object literals, `arguments` for `arguments` pseudo-arrays, and other, user-created classes).\n\n```javascript\n   teishi.type = function (value, objectType) {\n```\n\nWe first apply `typeof` to `value`.\n\n```javascript\n      var type = typeof value;\n```\n\nIn Safari 5 and below, `typeof` returns `function` for regexes, so we need to perform instead a check using `Object.prototype.toString`.\n\n```javascript\n      if (type === 'function') return Object.prototype.toString.call (value).match (/regexp/i) ? 'regex' : 'function';\n```\n\nExcept for the exception of regexes in Safari we just saw above, `teishi.type` will only a result different from `typeof` if `type` is neither `object` nor `number`. If it's not the case, we `return` the `type`.\n\n```javascript\n      if (type !== 'object' && type !== 'number') return type;\n```\n\nIf `value` fulfills the condition below, it is an array. Hence, we return `array`.\n\n```javascript\n      if (value instanceof Array) return 'array';\n```\n\nIf `type` is `number`, we distinguish between `nan`, `infinity`, `integer` and `float`.\n\n```javascript\n      if (type === 'number') {\n         if      (isNaN (value))      return 'nan';\n         else if (! isFinite (value)) return 'infinity';\n         else if (value % 1 === 0)    return 'integer';\n         else                         return 'float';\n      }\n```\n\nWe test whether `value` is `null`.\n\n```javascript\n      if (value === null) return 'null';\n```\n\nIf we're here, `type` is `object`, so now we want to find out which kind of object we're dealing with. We will do the following:\n\n- Stringify `value` through the function `Object.prototype.toString` and assign it to `type`.\n- `type` will now be a string of the form `'[object CLASSNAME]'`, where `CLASSNAME` is what we're looking for.\n- We get rid of everything but the `CLASSNAME`, and we lowercase the result.\n\n```javascript\n      type = Object.prototype.toString.call (value).replace ('[object ', '').replace (']', '').toLowerCase ();\n```\n\nNow, if `type` is `array` or `date`, we simply return the `type`. And if `type` is `regexp`, we return `regex` instead.\n\n```javascript\n      if (type === 'array' || type === 'date') return type;\n      if (type === 'regexp') return 'regex';\n```\n\nYou may ask: why did we check for `array`, if we already covered this case before? If an array is created in a [different frame](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/instanceof), the `instanceof` check will fail, so the check above is a good fallback. The reason we use both checks is that the latter check is considerably slower than the `instanceof` check, so we use it as a failover.\n\nNow, if the function received a truthy second argument, we want to return the exact class name of this object. In that case, we return `type`. Otherwise, we just return `object`.\n\nNotice however that if `argdetect` is false (which means we're in Internet Explorer 8 and below), we will perform an extra check on `value.callee` - if it is of type `function`, we consider the object to be an `arguments` pseudo-array; there's no other way to check for this type, to the best of my knowledge.\n\n\n```javascript\n      if (objectType) return argdetect ? type : (type (value.callee) === 'function' ? 'arguments' : type);\n```\n\nAfter this, there's nothing left to do, so we close the function.\n\n```javascript\n      return 'object';\n   }\n```\n\n`teishi.str` and `teishi.parse` are wrappers around `JSON.stringify` and `JSON.parse`, respectively. The only difference between these functions and their `JSON` counterparts is that if they receive invalid output, they will return `false` instead of throwing an exception.\n\n```javascript\n   teishi.str = function () {\n      try {return JSON.stringify.apply (JSON.stringify, arguments)}\n      catch (error) {return false}\n   }\n\n   teishi.parse = function () {\n      try {return JSON.parse.apply (JSON.parse, arguments)}\n      catch (error) {return false}\n   }\n```\n\n`teishi.simple` and `teishi.complex` return `false`/`true` (respectively) if their `input` is a complex value (array or object) and `true`/`false` otherwise.\n\n```javascript\n   teishi.simple = function (input) {\n      var type = teishi.type (input);\n      return type !== 'array' && type !== 'object';\n   }\n\n   teishi.complex = function (input) {\n      return ! teishi.simple (input);\n   }\n```\n\n`teishi.inc` returns `true` or `false` depending on whether the value `v` is contained in the array (or `arguments` pseudo-array) `a`. Note we don't validate whether `a` is an array or pseudo-array.\n\n```\n   teishi.inc = function (a, v) {return a.indexOf (v) > -1}\n```\n\n`teishi.copy` does two things: 1) copy an input; 2) eliminate any circular references within the copied input.\n\nThe \"public\" interface of the function (if we allow that distinction, since in practice the user can pass extra arguments) takes a single argument, the `input` we want to copy. However, we define a private argument (`seen`) that the function will use to pass information to recursive calls.\n\nThis function is recursive. On recursive calls, `input` won't represent the `input` that the user passed to the function, but rather one of the elements that are contained within the original `input`.\n\n```javascript\n   teishi.copy = function (input, seen) {\n```\n\nIf `input` is not an array or object, we just return the `input` itself.\n\n```javascript\n      if (teishi.simple (input)) return input;\n```\n\nIf we're here, we know our object is complex. We detect the `inputType` of `input`. What we want to know here is if we're dealing with an array, an object, or an `arguments` pseudo-array - we want to treat the latter as an array.\n\nWe initialize the `output` variable to either an empty array or object, depending on the type of input.\n\n```javascript\n      var inputType = teishi.type (input, true);\n      var output    = inputType === 'array' || inputType === 'arguments' ? [] : {};\n```\n\nWe iterate through the elements of `input`.\n\n\n```javascript\n      dale.go (input, function (v, k) {\n```\n\nIf `v` is neither an array nor an object, we set `output [k]` to `v` and return from this inner function.\n\n```javascript\n         if (teishi.simple (v)) return output [k] = v;\n```\n\nIf we're here, `v` is a complex object itself.\n\n`seen` is a list of references to objects/arrays that are parents of the current element (`v`) we are iterating. The first time we invoke this function, `seen` is undefined, so we initialize it to `[input]`. If `seen` already exists, we copy it (through the `concat` function, which returns a copy of the array to which it is applied).\n\nWe store the `seen` array in a new local variable named `Seen`.\n\n```javascript\n         var Seen = seen ? seen.concat () : [input];\n```\n\nIf the element currently being iterated has already been seen, we found a circular reference! We set `output [k]` to a string of the form `[Circular]`.\n\n```javascript\n         if (teishi.inc (Seen, v)) return output [k] = '[Circular]';\n```\n\nIf we're here, `v` is not circular. We push it onto `seen`.\n\n```javascript\n         Seen.push (v);\n```\n\nWe do a recursive call to `teishi.copy`, where the new `input` will be `v` itself. Note we pass a copy of `path` and append to it the key `k`. Note also we pass the `seen` array as well.\n\nThe result of this recursive call will be set to `output [k]`.\n\nThis concludes the inner function.\n\n```javascript\n         return output [k] = teishi.copy (v, Seen);\n      });\n```\n\nWe return the output. There's nothing else to do, so we close the function.\n\n```javascript\n      return output;\n   }\n```\n\n`teishi.eq` is a function that checks for deep equality between objects. It takes two arguments.\n\n```javascript\n   teishi.eq = function (a, b) {\n```\n\nIf `a` and `b` are simple, we compare them with `===` and return the result.\n\n```javascript\n      if (teishi.simple (a) && teishi.simple (b)) return a === b;\n```\n\nIf we are here, at least one of the arguments is complex. If their type is different, we return `false`, since they can't be equal.\n\n```javascript\n      if (teishi.type (a, true) !== teishi.type (b, true)) return false;\n```\n\nIf we're here, both elements are complex and have the same type. We now compare their keys and check that they are exactly the same. To do this, instead of iterating the keys, we simply take all of them, sort them, stringify them and then compare them. If this comparison is not `true`, we know there is one key in one object that's not present in the other, hence we return `false`.\n\n```javascript\n      if (teishi.str (dale.keys (a).sort ()) !== teishi.str (dale.keys (b).sort ())) return false;\n```\n\nWe loop through the elements of `a`.\n\n```javascript\n      return dale.stop (a, false, function (v, k) {\n```\n\nHere `v` is a given element of `a`, and `k` is the key of that element (if `a` is an array, `k` will be a number, and if `a` is an object, `k` will be a string). We invoke `inner` recursively passing it `v` and `b [k]`, the latter being the corresponding element to `v` in `b`.\n\nIf a difference is found, this function will return `false`. If, however, both elements are either empty arrays or objects, the invocation to `dale.stop` will return `undefined`. In this case, they must be true, since they are elements of the same type with no elements, so we return `true`. At this point, there's nothing else to do, so we close the function.\n\n```javascript\n         return teishi.eq (v, b [k]);\n      }) === false ? false : true;\n   }\n```\n\nWe define `teishi.last`, which will return the last element of the array which it receives as its first argument. If a second element is passed to it, the function will instead return the nth element from the end.\n\nIf its first argument is not an array, we print an error and return `false`. If its second argument is not undefined, it must be an integer larger than 0, otherwise we print an error and return `false`.\n\n```javascript\n   teishi.l","readmeFilename":"readme.md"}