1085 changed files with 0 additions and 160683 deletions
			
			
		@ -1 +0,0 @@
					 | 
				
			||||
../mkdirp/bin/cmd.js | 
				
			||||
@ -1 +0,0 @@
					 | 
				
			||||
../node-gyp/bin/node-gyp.js | 
				
			||||
@ -1 +0,0 @@
					 | 
				
			||||
../nopt/bin/nopt.js | 
				
			||||
@ -1 +0,0 @@
					 | 
				
			||||
../rimraf/bin.js | 
				
			||||
@ -1 +0,0 @@
					 | 
				
			||||
../semver/bin/semver | 
				
			||||
@ -1 +0,0 @@
					 | 
				
			||||
../sshpk/bin/sshpk-conv | 
				
			||||
@ -1 +0,0 @@
					 | 
				
			||||
../sshpk/bin/sshpk-sign | 
				
			||||
@ -1 +0,0 @@
					 | 
				
			||||
../sshpk/bin/sshpk-verify | 
				
			||||
@ -1 +0,0 @@
					 | 
				
			||||
../uuid/bin/uuid | 
				
			||||
@ -1 +0,0 @@
					 | 
				
			||||
../which/bin/which | 
				
			||||
@ -1,959 +0,0 @@
					 | 
				
			||||
{ | 
				
			||||
  "flags": [], | 
				
			||||
  "linkedModules": [], | 
				
			||||
  "topLevelPatters": [ | 
				
			||||
    "babel-jest@22.0.4", | 
				
			||||
    "babel-preset-react-native@4.0.0", | 
				
			||||
    "jest@22.0.4", | 
				
			||||
    "react-native@0.51.0", | 
				
			||||
    "react-test-renderer@16.0.0", | 
				
			||||
    "react@16.0.0" | 
				
			||||
  ], | 
				
			||||
  "lockfileEntries": { | 
				
			||||
    "@babel/code-frame@^7.0.0-beta.35": "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.36.tgz#2349d7ec04b3a06945ae173280ef8579b63728e4", | 
				
			||||
    "@types/node@*": "https://registry.yarnpkg.com/@types/node/-/node-8.5.7.tgz#9c498c35af354dcfbca3790fb2e81129e93cf0e2", | 
				
			||||
    "abab@^1.0.3": "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e", | 
				
			||||
    "abbrev@1": "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8", | 
				
			||||
    "absolute-path@^0.0.0": "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7", | 
				
			||||
    "accepts@~1.2.12": "https://registry.yarnpkg.com/accepts/-/accepts-1.2.13.tgz#e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea", | 
				
			||||
    "accepts@~1.2.13": "https://registry.yarnpkg.com/accepts/-/accepts-1.2.13.tgz#e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea", | 
				
			||||
    "accepts@~1.3.0": "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f", | 
				
			||||
    "acorn-globals@^4.0.0": "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538", | 
				
			||||
    "acorn@^5.0.0": "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822", | 
				
			||||
    "acorn@^5.1.2": "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822", | 
				
			||||
    "ajv@^4.9.1": "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536", | 
				
			||||
    "ajv@^5.1.0": "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965", | 
				
			||||
    "align-text@^0.1.1": "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117", | 
				
			||||
    "align-text@^0.1.3": "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117", | 
				
			||||
    "amdefine@>=0.0.4": "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5", | 
				
			||||
    "ansi-escapes@^3.0.0": "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92", | 
				
			||||
    "ansi-gray@^0.1.1": "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251", | 
				
			||||
    "ansi-regex@^2.0.0": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df", | 
				
			||||
    "ansi-regex@^3.0.0": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998", | 
				
			||||
    "ansi-styles@^2.2.1": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe", | 
				
			||||
    "ansi-styles@^3.1.0": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88", | 
				
			||||
    "ansi-styles@^3.2.0": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88", | 
				
			||||
    "ansi-wrap@0.1.0": "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf", | 
				
			||||
    "ansi@^0.3.0": "https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21", | 
				
			||||
    "ansi@~0.3.1": "https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21", | 
				
			||||
    "anymatch@^1.3.0": "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a", | 
				
			||||
    "append-transform@^0.4.0": "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991", | 
				
			||||
    "aproba@^1.0.3": "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a", | 
				
			||||
    "are-we-there-yet@~1.1.2": "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d", | 
				
			||||
    "argparse@^1.0.7": "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86", | 
				
			||||
    "arr-diff@^2.0.0": "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf", | 
				
			||||
    "arr-flatten@^1.0.1": "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1", | 
				
			||||
    "array-differ@^1.0.0": "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031", | 
				
			||||
    "array-equal@^1.0.0": "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93", | 
				
			||||
    "array-filter@~0.0.0": "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec", | 
				
			||||
    "array-map@~0.0.0": "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662", | 
				
			||||
    "array-reduce@~0.0.0": "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b", | 
				
			||||
    "array-uniq@^1.0.2": "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6", | 
				
			||||
    "array-unique@^0.2.1": "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53", | 
				
			||||
    "arrify@^1.0.1": "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d", | 
				
			||||
    "art@^0.10.0": "https://registry.yarnpkg.com/art/-/art-0.10.1.tgz#38541883e399225c5e193ff246e8f157cf7b2146", | 
				
			||||
    "asap@~2.0.3": "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46", | 
				
			||||
    "asn1@~0.2.3": "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86", | 
				
			||||
    "assert-plus@1.0.0": "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525", | 
				
			||||
    "assert-plus@^0.2.0": "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234", | 
				
			||||
    "assert-plus@^1.0.0": "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525", | 
				
			||||
    "astral-regex@^1.0.0": "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9", | 
				
			||||
    "async@^1.4.0": "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a", | 
				
			||||
    "async@^2.1.4": "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4", | 
				
			||||
    "async@^2.4.0": "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4", | 
				
			||||
    "asynckit@^0.4.0": "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79", | 
				
			||||
    "aws-sign2@~0.6.0": "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f", | 
				
			||||
    "aws-sign2@~0.7.0": "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8", | 
				
			||||
    "aws4@^1.2.1": "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e", | 
				
			||||
    "aws4@^1.6.0": "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e", | 
				
			||||
    "babel-code-frame@^6.26.0": "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b", | 
				
			||||
    "babel-core@^6.0.0": "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8", | 
				
			||||
    "babel-core@^6.24.1": "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8", | 
				
			||||
    "babel-core@^6.26.0": "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8", | 
				
			||||
    "babel-core@^6.7.2": "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8", | 
				
			||||
    "babel-generator@^6.18.0": "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5", | 
				
			||||
    "babel-generator@^6.24.1": "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5", | 
				
			||||
    "babel-generator@^6.26.0": "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5", | 
				
			||||
    "babel-helper-builder-binary-assignment-operator-visitor@^6.24.1": "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664", | 
				
			||||
    "babel-helper-builder-react-jsx@^6.24.1": "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0", | 
				
			||||
    "babel-helper-call-delegate@^6.24.1": "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d", | 
				
			||||
    "babel-helper-define-map@^6.24.1": "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f", | 
				
			||||
    "babel-helper-explode-assignable-expression@^6.24.1": "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa", | 
				
			||||
    "babel-helper-function-name@^6.24.1": "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9", | 
				
			||||
    "babel-helper-get-function-arity@^6.24.1": "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d", | 
				
			||||
    "babel-helper-hoist-variables@^6.24.1": "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76", | 
				
			||||
    "babel-helper-optimise-call-expression@^6.24.1": "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257", | 
				
			||||
    "babel-helper-regex@^6.24.1": "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72", | 
				
			||||
    "babel-helper-remap-async-to-generator@^6.16.0": "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b", | 
				
			||||
    "babel-helper-replace-supers@^6.24.1": "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a", | 
				
			||||
    "babel-helpers@^6.24.1": "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2", | 
				
			||||
    "babel-jest@22.0.4": "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.0.4.tgz#533c46de37d7c9d7612f408c76314be9277e0c26", | 
				
			||||
    "babel-jest@^22.0.4": "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.0.4.tgz#533c46de37d7c9d7612f408c76314be9277e0c26", | 
				
			||||
    "babel-messages@^6.23.0": "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e", | 
				
			||||
    "babel-plugin-check-es2015-constants@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a", | 
				
			||||
    "babel-plugin-check-es2015-constants@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a", | 
				
			||||
    "babel-plugin-external-helpers@^6.18.0": "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1", | 
				
			||||
    "babel-plugin-istanbul@^4.1.5": "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e", | 
				
			||||
    "babel-plugin-jest-hoist@^22.0.3": "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.0.3.tgz#62cde5fe962fd41ae89c119f481ca5cd7dd48bb4", | 
				
			||||
    "babel-plugin-react-transform@^3.0.0": "https://registry.yarnpkg.com/babel-plugin-react-transform/-/babel-plugin-react-transform-3.0.0.tgz#402f25137b7bb66e9b54ead75557dfbc7ecaaa74", | 
				
			||||
    "babel-plugin-syntax-async-functions@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95", | 
				
			||||
    "babel-plugin-syntax-async-functions@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95", | 
				
			||||
    "babel-plugin-syntax-class-properties@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de", | 
				
			||||
    "babel-plugin-syntax-class-properties@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de", | 
				
			||||
    "babel-plugin-syntax-dynamic-import@^6.18.0": "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da", | 
				
			||||
    "babel-plugin-syntax-exponentiation-operator@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de", | 
				
			||||
    "babel-plugin-syntax-flow@^6.18.0": "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d", | 
				
			||||
    "babel-plugin-syntax-flow@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d", | 
				
			||||
    "babel-plugin-syntax-flow@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d", | 
				
			||||
    "babel-plugin-syntax-jsx@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946", | 
				
			||||
    "babel-plugin-syntax-jsx@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946", | 
				
			||||
    "babel-plugin-syntax-object-rest-spread@^6.13.0": "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5", | 
				
			||||
    "babel-plugin-syntax-object-rest-spread@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5", | 
				
			||||
    "babel-plugin-syntax-trailing-function-commas@^6.20.0": "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3", | 
				
			||||
    "babel-plugin-syntax-trailing-function-commas@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3", | 
				
			||||
    "babel-plugin-syntax-trailing-function-commas@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3", | 
				
			||||
    "babel-plugin-transform-async-to-generator@6.16.0": "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999", | 
				
			||||
    "babel-plugin-transform-class-properties@^6.18.0": "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac", | 
				
			||||
    "babel-plugin-transform-class-properties@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac", | 
				
			||||
    "babel-plugin-transform-class-properties@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac", | 
				
			||||
    "babel-plugin-transform-es2015-arrow-functions@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221", | 
				
			||||
    "babel-plugin-transform-es2015-arrow-functions@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221", | 
				
			||||
    "babel-plugin-transform-es2015-block-scoped-functions@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141", | 
				
			||||
    "babel-plugin-transform-es2015-block-scoping@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f", | 
				
			||||
    "babel-plugin-transform-es2015-block-scoping@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f", | 
				
			||||
    "babel-plugin-transform-es2015-classes@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db", | 
				
			||||
    "babel-plugin-transform-es2015-classes@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db", | 
				
			||||
    "babel-plugin-transform-es2015-computed-properties@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3", | 
				
			||||
    "babel-plugin-transform-es2015-computed-properties@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3", | 
				
			||||
    "babel-plugin-transform-es2015-destructuring@6.x": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d", | 
				
			||||
    "babel-plugin-transform-es2015-destructuring@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d", | 
				
			||||
    "babel-plugin-transform-es2015-destructuring@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d", | 
				
			||||
    "babel-plugin-transform-es2015-for-of@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691", | 
				
			||||
    "babel-plugin-transform-es2015-for-of@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691", | 
				
			||||
    "babel-plugin-transform-es2015-function-name@6.x": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b", | 
				
			||||
    "babel-plugin-transform-es2015-function-name@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b", | 
				
			||||
    "babel-plugin-transform-es2015-function-name@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b", | 
				
			||||
    "babel-plugin-transform-es2015-literals@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e", | 
				
			||||
    "babel-plugin-transform-es2015-literals@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e", | 
				
			||||
    "babel-plugin-transform-es2015-modules-commonjs@6.x": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a", | 
				
			||||
    "babel-plugin-transform-es2015-modules-commonjs@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a", | 
				
			||||
    "babel-plugin-transform-es2015-modules-commonjs@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a", | 
				
			||||
    "babel-plugin-transform-es2015-object-super@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d", | 
				
			||||
    "babel-plugin-transform-es2015-parameters@6.x": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b", | 
				
			||||
    "babel-plugin-transform-es2015-parameters@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b", | 
				
			||||
    "babel-plugin-transform-es2015-parameters@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b", | 
				
			||||
    "babel-plugin-transform-es2015-shorthand-properties@6.x": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0", | 
				
			||||
    "babel-plugin-transform-es2015-shorthand-properties@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0", | 
				
			||||
    "babel-plugin-transform-es2015-shorthand-properties@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0", | 
				
			||||
    "babel-plugin-transform-es2015-spread@6.x": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1", | 
				
			||||
    "babel-plugin-transform-es2015-spread@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1", | 
				
			||||
    "babel-plugin-transform-es2015-spread@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1", | 
				
			||||
    "babel-plugin-transform-es2015-sticky-regex@6.x": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc", | 
				
			||||
    "babel-plugin-transform-es2015-template-literals@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d", | 
				
			||||
    "babel-plugin-transform-es2015-template-literals@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d", | 
				
			||||
    "babel-plugin-transform-es2015-unicode-regex@6.x": "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9", | 
				
			||||
    "babel-plugin-transform-es3-member-expression-literals@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz#733d3444f3ecc41bef8ed1a6a4e09657b8969ebb", | 
				
			||||
    "babel-plugin-transform-es3-property-literals@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz#b2078d5842e22abf40f73e8cde9cd3711abd5758", | 
				
			||||
    "babel-plugin-transform-exponentiation-operator@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e", | 
				
			||||
    "babel-plugin-transform-flow-strip-types@^6.21.0": "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf", | 
				
			||||
    "babel-plugin-transform-flow-strip-types@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf", | 
				
			||||
    "babel-plugin-transform-flow-strip-types@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf", | 
				
			||||
    "babel-plugin-transform-object-assign@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz#f99d2f66f1a0b0d498e346c5359684740caa20ba", | 
				
			||||
    "babel-plugin-transform-object-rest-spread@^6.20.2": "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06", | 
				
			||||
    "babel-plugin-transform-object-rest-spread@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06", | 
				
			||||
    "babel-plugin-transform-object-rest-spread@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06", | 
				
			||||
    "babel-plugin-transform-react-display-name@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1", | 
				
			||||
    "babel-plugin-transform-react-display-name@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1", | 
				
			||||
    "babel-plugin-transform-react-jsx-source@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6", | 
				
			||||
    "babel-plugin-transform-react-jsx@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3", | 
				
			||||
    "babel-plugin-transform-react-jsx@^6.8.0": "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3", | 
				
			||||
    "babel-plugin-transform-regenerator@^6.5.0": "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f", | 
				
			||||
    "babel-plugin-transform-strict-mode@^6.24.1": "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758", | 
				
			||||
    "babel-preset-es2015-node@^6.1.1": "https://registry.yarnpkg.com/babel-preset-es2015-node/-/babel-preset-es2015-node-6.1.1.tgz#60b23157024b0cfebf3a63554cb05ee035b4e55f", | 
				
			||||
    "babel-preset-fbjs@^2.1.2": "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-2.1.4.tgz#22f358e6654073acf61e47a052a777d7bccf03af", | 
				
			||||
    "babel-preset-fbjs@^2.1.4": "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-2.1.4.tgz#22f358e6654073acf61e47a052a777d7bccf03af", | 
				
			||||
    "babel-preset-jest@^22.0.3": "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.0.3.tgz#e2bb6f6b4a509d3ea0931f013db78c5a84856693", | 
				
			||||
    "babel-preset-react-native@4.0.0": "https://registry.yarnpkg.com/babel-preset-react-native/-/babel-preset-react-native-4.0.0.tgz#3df80dd33a453888cdd33bdb87224d17a5d73959", | 
				
			||||
    "babel-preset-react-native@^4.0.0": "https://registry.yarnpkg.com/babel-preset-react-native/-/babel-preset-react-native-4.0.0.tgz#3df80dd33a453888cdd33bdb87224d17a5d73959", | 
				
			||||
    "babel-register@^6.24.1": "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071", | 
				
			||||
    "babel-register@^6.26.0": "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071", | 
				
			||||
    "babel-runtime@^6.0.0": "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe", | 
				
			||||
    "babel-runtime@^6.18.0": "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe", | 
				
			||||
    "babel-runtime@^6.22.0": "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe", | 
				
			||||
    "babel-runtime@^6.23.0": "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe", | 
				
			||||
    "babel-runtime@^6.26.0": "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe", | 
				
			||||
    "babel-template@^6.16.0": "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02", | 
				
			||||
    "babel-template@^6.24.1": "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02", | 
				
			||||
    "babel-template@^6.26.0": "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02", | 
				
			||||
    "babel-traverse@^6.18.0": "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee", | 
				
			||||
    "babel-traverse@^6.24.1": "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee", | 
				
			||||
    "babel-traverse@^6.26.0": "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee", | 
				
			||||
    "babel-types@^6.18.0": "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497", | 
				
			||||
    "babel-types@^6.19.0": "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497", | 
				
			||||
    "babel-types@^6.24.1": "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497", | 
				
			||||
    "babel-types@^6.26.0": "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497", | 
				
			||||
    "babylon@^6.18.0": "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3", | 
				
			||||
    "balanced-match@^1.0.0": "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767", | 
				
			||||
    "base64-js@0.0.8": "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978", | 
				
			||||
    "base64-js@1.1.2": "https://registry.yarnpkg.com/base64-js/-/base64-js-1.1.2.tgz#d6400cac1c4c660976d90d07a04351d89395f5e8", | 
				
			||||
    "base64-js@^1.1.2": "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886", | 
				
			||||
    "base64-url@1.2.1": "https://registry.yarnpkg.com/base64-url/-/base64-url-1.2.1.tgz#199fd661702a0e7b7dcae6e0698bb089c52f6d78", | 
				
			||||
    "basic-auth-connect@1.0.0": "https://registry.yarnpkg.com/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz#fdb0b43962ca7b40456a7c2bb48fe173da2d2122", | 
				
			||||
    "basic-auth@~1.0.3": "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.0.4.tgz#030935b01de7c9b94a824b29f3fccb750d3a5290", | 
				
			||||
    "batch@0.5.3": "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464", | 
				
			||||
    "bcrypt-pbkdf@^1.0.0": "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d", | 
				
			||||
    "beeper@^1.0.0": "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809", | 
				
			||||
    "big-integer@^1.6.7": "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.26.tgz#3af1672fa62daf2d5ecafacf6e5aa0d25e02c1c8", | 
				
			||||
    "bindings@^1.2.1": "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7", | 
				
			||||
    "block-stream@*": "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a", | 
				
			||||
    "body-parser@~1.13.3": "https://registry.yarnpkg.com/body-parser/-/body-parser-1.13.3.tgz#c08cf330c3358e151016a05746f13f029c97fa97", | 
				
			||||
    "boom@2.x.x": "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f", | 
				
			||||
    "boom@4.x.x": "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31", | 
				
			||||
    "boom@5.x.x": "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02", | 
				
			||||
    "bplist-creator@0.0.7": "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45", | 
				
			||||
    "bplist-parser@0.1.1": "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6", | 
				
			||||
    "brace-expansion@^1.1.7": "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292", | 
				
			||||
    "braces@^1.8.2": "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7", | 
				
			||||
    "browser-process-hrtime@^0.1.2": "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e", | 
				
			||||
    "browser-resolve@^1.11.2": "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce", | 
				
			||||
    "bser@^2.0.0": "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719", | 
				
			||||
    "builtin-modules@^1.0.0": "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f", | 
				
			||||
    "bytes@2.1.0": "https://registry.yarnpkg.com/bytes/-/bytes-2.1.0.tgz#ac93c410e2ffc9cc7cf4b464b38289067f5e47b4", | 
				
			||||
    "bytes@2.4.0": "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339", | 
				
			||||
    "callsites@^2.0.0": "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50", | 
				
			||||
    "camelcase@^1.0.2": "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39", | 
				
			||||
    "camelcase@^4.1.0": "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd", | 
				
			||||
    "caseless@~0.12.0": "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc", | 
				
			||||
    "center-align@^0.1.1": "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad", | 
				
			||||
    "chalk@^1.0.0": "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98", | 
				
			||||
    "chalk@^1.1.1": "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98", | 
				
			||||
    "chalk@^1.1.3": "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98", | 
				
			||||
    "chalk@^2.0.0": "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba", | 
				
			||||
    "chalk@^2.0.1": "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba", | 
				
			||||
    "chardet@^0.4.0": "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2", | 
				
			||||
    "ci-info@^1.0.0": "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4", | 
				
			||||
    "cli-cursor@^2.1.0": "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5", | 
				
			||||
    "cli-width@^2.0.0": "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639", | 
				
			||||
    "cliui@^2.1.0": "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1", | 
				
			||||
    "cliui@^3.2.0": "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d", | 
				
			||||
    "cliui@^4.0.0": "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc", | 
				
			||||
    "clone-stats@^0.0.1": "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1", | 
				
			||||
    "clone@^1.0.0": "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f", | 
				
			||||
    "co@^4.6.0": "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184", | 
				
			||||
    "code-point-at@^1.0.0": "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77", | 
				
			||||
    "color-convert@^1.9.0": "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed", | 
				
			||||
    "color-name@^1.1.1": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25", | 
				
			||||
    "color-support@^1.1.3": "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2", | 
				
			||||
    "combined-stream@^1.0.5": "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009", | 
				
			||||
    "combined-stream@~1.0.5": "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009", | 
				
			||||
    "commander@^2.9.0": "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555", | 
				
			||||
    "commander@~2.12.1": "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555", | 
				
			||||
    "compressible@~2.0.5": "https://registry.yarnpkg.com/compressible/-/compressible-2.0.12.tgz#c59a5c99db76767e9876500e271ef63b3493bd66", | 
				
			||||
    "compression@~1.5.2": "https://registry.yarnpkg.com/compression/-/compression-1.5.2.tgz#b03b8d86e6f8ad29683cba8df91ddc6ffc77b395", | 
				
			||||
    "concat-map@0.0.1": "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b", | 
				
			||||
    "concat-stream@^1.6.0": "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7", | 
				
			||||
    "connect-timeout@~1.6.2": "https://registry.yarnpkg.com/connect-timeout/-/connect-timeout-1.6.2.tgz#de9a5ec61e33a12b6edaab7b5f062e98c599b88e", | 
				
			||||
    "connect@^2.8.3": "https://registry.yarnpkg.com/connect/-/connect-2.30.2.tgz#8da9bcbe8a054d3d318d74dfec903b5c39a1b609", | 
				
			||||
    "console-control-strings@^1.0.0": "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e", | 
				
			||||
    "console-control-strings@~1.1.0": "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e", | 
				
			||||
    "content-type-parser@^1.0.1": "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7", | 
				
			||||
    "content-type@~1.0.1": "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b", | 
				
			||||
    "convert-source-map@^1.4.0": "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5", | 
				
			||||
    "convert-source-map@^1.5.0": "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5", | 
				
			||||
    "cookie-parser@~1.3.5": "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.3.5.tgz#9d755570fb5d17890771227a02314d9be7cf8356", | 
				
			||||
    "cookie-signature@1.0.6": "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c", | 
				
			||||
    "cookie@0.1.3": "https://registry.yarnpkg.com/cookie/-/cookie-0.1.3.tgz#e734a5c1417fce472d5aef82c381cabb64d1a435", | 
				
			||||
    "copy-paste@^1.3.0": "https://registry.yarnpkg.com/copy-paste/-/copy-paste-1.3.0.tgz#a7e6c4a1c28fdedf2b081e72b97df2ef95f471ed", | 
				
			||||
    "core-js@^1.0.0": "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636", | 
				
			||||
    "core-js@^2.2.2": "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e", | 
				
			||||
    "core-js@^2.4.0": "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e", | 
				
			||||
    "core-js@^2.4.1": "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e", | 
				
			||||
    "core-js@^2.5.0": "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e", | 
				
			||||
    "core-util-is@1.0.2": "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7", | 
				
			||||
    "core-util-is@~1.0.0": "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7", | 
				
			||||
    "crc@3.3.0": "https://registry.yarnpkg.com/crc/-/crc-3.3.0.tgz#fa622e1bc388bf257309082d6b65200ce67090ba", | 
				
			||||
    "create-react-class@^15.5.2": "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.2.tgz#cf1ed15f12aad7f14ef5f2dfe05e6c42f91ef02a", | 
				
			||||
    "cross-spawn@^5.0.1": "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449", | 
				
			||||
    "cross-spawn@^5.1.0": "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449", | 
				
			||||
    "cryptiles@2.x.x": "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8", | 
				
			||||
    "cryptiles@3.x.x": "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe", | 
				
			||||
    "csrf@~3.0.0": "https://registry.yarnpkg.com/csrf/-/csrf-3.0.6.tgz#b61120ddceeafc91e76ed5313bb5c0b2667b710a", | 
				
			||||
    "cssom@0.3.x": "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b", | 
				
			||||
    "cssom@>= 0.3.2 < 0.4.0": "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b", | 
				
			||||
    "cssstyle@>= 0.2.37 < 0.3.0": "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54", | 
				
			||||
    "csurf@~1.8.3": "https://registry.yarnpkg.com/csurf/-/csurf-1.8.3.tgz#23f2a13bf1d8fce1d0c996588394442cba86a56a", | 
				
			||||
    "dashdash@^1.12.0": "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0", | 
				
			||||
    "dateformat@^2.0.0": "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062", | 
				
			||||
    "debug@2.6.9": "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f", | 
				
			||||
    "debug@^2.2.0": "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f", | 
				
			||||
    "debug@^2.6.8": "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f", | 
				
			||||
    "debug@^3.1.0": "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261", | 
				
			||||
    "debug@~2.2.0": "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da", | 
				
			||||
    "decamelize@^1.0.0": "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290", | 
				
			||||
    "decamelize@^1.1.1": "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290", | 
				
			||||
    "deep-extend@~0.4.0": "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f", | 
				
			||||
    "deep-is@~0.1.3": "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34", | 
				
			||||
    "default-require-extensions@^1.0.0": "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8", | 
				
			||||
    "define-properties@^1.1.2": "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94", | 
				
			||||
    "delayed-stream@~1.0.0": "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619", | 
				
			||||
    "delegates@^1.0.0": "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a", | 
				
			||||
    "denodeify@^1.2.1": "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631", | 
				
			||||
    "depd@~1.0.1": "https://registry.yarnpkg.com/depd/-/depd-1.0.1.tgz#80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa", | 
				
			||||
    "depd@~1.1.0": "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359", | 
				
			||||
    "destroy@~1.0.4": "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80", | 
				
			||||
    "detect-indent@^4.0.0": "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208", | 
				
			||||
    "detect-libc@^1.0.2": "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b", | 
				
			||||
    "detect-newline@^2.1.0": "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2", | 
				
			||||
    "diff@^3.2.0": "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c", | 
				
			||||
    "dom-walk@^0.1.0": "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018", | 
				
			||||
    "domexception@^1.0.0": "https://registry.yarnpkg.com/domexception/-/domexception-1.0.0.tgz#81fe5df81b3f057052cde3a9fa9bf536a85b9ab0", | 
				
			||||
    "duplexer2@0.0.2": "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db", | 
				
			||||
    "ecc-jsbn@~0.1.1": "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505", | 
				
			||||
    "ee-first@1.1.1": "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d", | 
				
			||||
    "encoding@^0.1.11": "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb", | 
				
			||||
    "envinfo@^3.0.0": "https://registry.yarnpkg.com/envinfo/-/envinfo-3.10.0.tgz#24b52a5c19af379dc32465d1909e37344dc41c20", | 
				
			||||
    "errno@^0.1.4": "https://registry.yarnpkg.com/errno/-/errno-0.1.6.tgz#c386ce8a6283f14fc09563b71560908c9bf53026", | 
				
			||||
    "error-ex@^1.2.0": "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc", | 
				
			||||
    "errorhandler@~1.4.2": "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.4.3.tgz#b7b70ed8f359e9db88092f2d20c0f831420ad83f", | 
				
			||||
    "es-abstract@^1.5.1": "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864", | 
				
			||||
    "es-to-primitive@^1.1.1": "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d", | 
				
			||||
    "escape-html@1.0.2": "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.2.tgz#d77d32fa98e38c2f41ae85e9278e0e0e6ba1022c", | 
				
			||||
    "escape-html@~1.0.3": "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988", | 
				
			||||
    "escape-string-regexp@^1.0.2": "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4", | 
				
			||||
    "escape-string-regexp@^1.0.5": "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4", | 
				
			||||
    "escodegen@^1.9.0": "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852", | 
				
			||||
    "esprima@^3.1.3": "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633", | 
				
			||||
    "esprima@^4.0.0": "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804", | 
				
			||||
    "estraverse@^4.2.0": "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13", | 
				
			||||
    "esutils@^2.0.2": "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b", | 
				
			||||
    "etag@~1.7.0": "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8", | 
				
			||||
    "event-target-shim@^1.0.5": "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-1.1.1.tgz#a86e5ee6bdaa16054475da797ccddf0c55698491", | 
				
			||||
    "exec-sh@^0.2.0": "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38", | 
				
			||||
    "execa@^0.7.0": "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777", | 
				
			||||
    "expand-brackets@^0.1.4": "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b", | 
				
			||||
    "expand-range@^1.8.1": "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337", | 
				
			||||
    "expect@^22.0.3": "https://registry.yarnpkg.com/expect/-/expect-22.0.3.tgz#bb486de7d41bf3eb60d3b16dfd1c158a4d91ddfa", | 
				
			||||
    "express-session@~1.11.3": "https://registry.yarnpkg.com/express-session/-/express-session-1.11.3.tgz#5cc98f3f5ff84ed835f91cbf0aabd0c7107400af", | 
				
			||||
    "extend@~3.0.0": "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444", | 
				
			||||
    "extend@~3.0.1": "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444", | 
				
			||||
    "external-editor@^2.0.4": "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48", | 
				
			||||
    "extglob@^0.3.1": "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1", | 
				
			||||
    "extsprintf@1.3.0": "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05", | 
				
			||||
    "extsprintf@^1.2.0": "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f", | 
				
			||||
    "fancy-log@^1.1.0": "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.2.tgz#f41125e3d84f2e7d89a43d06d958c8f78be16be1", | 
				
			||||
    "fast-deep-equal@^1.0.0": "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff", | 
				
			||||
    "fast-json-stable-stringify@^2.0.0": "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2", | 
				
			||||
    "fast-levenshtein@~2.0.4": "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917", | 
				
			||||
    "fb-watchman@^2.0.0": "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58", | 
				
			||||
    "fbjs-scripts@^0.8.1": "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-0.8.1.tgz#c1c6efbecb7f008478468976b783880c2f669765", | 
				
			||||
    "fbjs@^0.8.14": "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db", | 
				
			||||
    "fbjs@^0.8.16": "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db", | 
				
			||||
    "fbjs@^0.8.9": "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db", | 
				
			||||
    "figures@^2.0.0": "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962", | 
				
			||||
    "filename-regex@^2.0.0": "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26", | 
				
			||||
    "fileset@^2.0.2": "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0", | 
				
			||||
    "fill-range@^2.1.0": "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723", | 
				
			||||
    "finalhandler@0.4.0": "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.4.0.tgz#965a52d9e8d05d2b857548541fb89b53a2497d9b", | 
				
			||||
    "find-up@^1.0.0": "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f", | 
				
			||||
    "find-up@^2.0.0": "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7", | 
				
			||||
    "find-up@^2.1.0": "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7", | 
				
			||||
    "for-in@^1.0.1": "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80", | 
				
			||||
    "for-own@^0.1.4": "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce", | 
				
			||||
    "foreach@^2.0.5": "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99", | 
				
			||||
    "forever-agent@~0.6.1": "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91", | 
				
			||||
    "form-data@~2.1.1": "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1", | 
				
			||||
    "form-data@~2.3.1": "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf", | 
				
			||||
    "fresh@0.3.0": "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f", | 
				
			||||
    "fs-extra@^1.0.0": "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950", | 
				
			||||
    "fs.realpath@^1.0.0": "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f", | 
				
			||||
    "fsevents@^1.1.1": "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8", | 
				
			||||
    "fstream-ignore@^1.0.5": "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105", | 
				
			||||
    "fstream@^1.0.0": "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171", | 
				
			||||
    "fstream@^1.0.10": "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171", | 
				
			||||
    "fstream@^1.0.2": "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171", | 
				
			||||
    "function-bind@^1.0.2": "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d", | 
				
			||||
    "function-bind@^1.1.1": "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d", | 
				
			||||
    "gauge@~1.2.5": "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93", | 
				
			||||
    "gauge@~2.7.3": "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7", | 
				
			||||
    "get-caller-file@^1.0.1": "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5", | 
				
			||||
    "get-stream@^3.0.0": "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14", | 
				
			||||
    "getpass@^0.1.1": "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa", | 
				
			||||
    "glob-base@^0.3.0": "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4", | 
				
			||||
    "glob-parent@^2.0.0": "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28", | 
				
			||||
    "glob@^7.0.3": "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15", | 
				
			||||
    "glob@^7.0.5": "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15", | 
				
			||||
    "glob@^7.1.1": "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15", | 
				
			||||
    "glob@^7.1.2": "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15", | 
				
			||||
    "global@^4.3.0": "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f", | 
				
			||||
    "globals@^9.18.0": "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a", | 
				
			||||
    "glogg@^1.0.0": "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5", | 
				
			||||
    "graceful-fs@^4.1.11": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658", | 
				
			||||
    "graceful-fs@^4.1.2": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658", | 
				
			||||
    "graceful-fs@^4.1.3": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658", | 
				
			||||
    "graceful-fs@^4.1.6": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658", | 
				
			||||
    "graceful-fs@^4.1.9": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658", | 
				
			||||
    "growly@^1.3.0": "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081", | 
				
			||||
    "gulp-util@^3.0.4": "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f", | 
				
			||||
    "gulplog@^1.0.0": "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5", | 
				
			||||
    "handlebars@^4.0.3": "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc", | 
				
			||||
    "har-schema@^1.0.5": "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e", | 
				
			||||
    "har-schema@^2.0.0": "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92", | 
				
			||||
    "har-validator@~4.2.1": "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a", | 
				
			||||
    "har-validator@~5.0.3": "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd", | 
				
			||||
    "has-ansi@^2.0.0": "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91", | 
				
			||||
    "has-flag@^1.0.0": "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa", | 
				
			||||
    "has-flag@^2.0.0": "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51", | 
				
			||||
    "has-gulplog@^0.1.0": "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce", | 
				
			||||
    "has-unicode@^2.0.0": "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9", | 
				
			||||
    "has@^1.0.1": "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28", | 
				
			||||
    "hawk@3.1.3": "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4", | 
				
			||||
    "hawk@~3.1.3": "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4", | 
				
			||||
    "hawk@~6.0.2": "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038", | 
				
			||||
    "hoek@2.x.x": "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed", | 
				
			||||
    "hoek@4.x.x": "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d", | 
				
			||||
    "home-or-tmp@^2.0.0": "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8", | 
				
			||||
    "hosted-git-info@^2.1.4": "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c", | 
				
			||||
    "html-encoding-sniffer@^1.0.1": "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8", | 
				
			||||
    "http-errors@~1.3.1": "https://registry.yarnpkg.com/http-errors/-/http-errors-1.3.1.tgz#197e22cdebd4198585e8694ef6786197b91ed942", | 
				
			||||
    "http-signature@~1.1.0": "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf", | 
				
			||||
    "http-signature@~1.2.0": "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1", | 
				
			||||
    "iconv-lite@0.4.11": "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.11.tgz#2ecb42fd294744922209a2e7c404dac8793d8ade", | 
				
			||||
    "iconv-lite@0.4.13": "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2", | 
				
			||||
    "iconv-lite@0.4.19": "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b", | 
				
			||||
    "iconv-lite@^0.4.17": "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b", | 
				
			||||
    "iconv-lite@^0.4.8": "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b", | 
				
			||||
    "iconv-lite@~0.4.13": "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b", | 
				
			||||
    "image-size@^0.6.0": "https://registry.yarnpkg.com/image-size/-/image-size-0.6.2.tgz#8ee316d4298b028b965091b673d5f1537adee5b4", | 
				
			||||
    "imurmurhash@^0.1.4": "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea", | 
				
			||||
    "inflight@^1.0.4": "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9", | 
				
			||||
    "inherits@2": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de", | 
				
			||||
    "inherits@^2.0.3": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de", | 
				
			||||
    "inherits@~2.0.0": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de", | 
				
			||||
    "inherits@~2.0.1": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de", | 
				
			||||
    "inherits@~2.0.3": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de", | 
				
			||||
    "ini@~1.3.0": "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927", | 
				
			||||
    "inquirer@^3.0.6": "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9", | 
				
			||||
    "invariant@^2.2.2": "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360", | 
				
			||||
    "invert-kv@^1.0.0": "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6", | 
				
			||||
    "is-arrayish@^0.2.1": "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d", | 
				
			||||
    "is-buffer@^1.1.5": "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be", | 
				
			||||
    "is-builtin-module@^1.0.0": "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe", | 
				
			||||
    "is-callable@^1.1.1": "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2", | 
				
			||||
    "is-callable@^1.1.3": "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2", | 
				
			||||
    "is-ci@^1.0.10": "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5", | 
				
			||||
    "is-date-object@^1.0.1": "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16", | 
				
			||||
    "is-dotfile@^1.0.0": "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1", | 
				
			||||
    "is-equal-shallow@^0.1.3": "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534", | 
				
			||||
    "is-extendable@^0.1.1": "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89", | 
				
			||||
    "is-extglob@^1.0.0": "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0", | 
				
			||||
    "is-finite@^1.0.0": "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa", | 
				
			||||
    "is-fullwidth-code-point@^1.0.0": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb", | 
				
			||||
    "is-fullwidth-code-point@^2.0.0": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f", | 
				
			||||
    "is-glob@^2.0.0": "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863", | 
				
			||||
    "is-glob@^2.0.1": "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863", | 
				
			||||
    "is-number@^2.1.0": "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f", | 
				
			||||
    "is-number@^3.0.0": "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195", | 
				
			||||
    "is-posix-bracket@^0.1.0": "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4", | 
				
			||||
    "is-primitive@^2.0.0": "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575", | 
				
			||||
    "is-promise@^2.1.0": "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa", | 
				
			||||
    "is-regex@^1.0.4": "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491", | 
				
			||||
    "is-stream@^1.0.1": "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44", | 
				
			||||
    "is-stream@^1.1.0": "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44", | 
				
			||||
    "is-symbol@^1.0.1": "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572", | 
				
			||||
    "is-typedarray@~1.0.0": "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a", | 
				
			||||
    "is-utf8@^0.2.0": "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72", | 
				
			||||
    "isarray@0.0.1": "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf", | 
				
			||||
    "isarray@1.0.0": "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11", | 
				
			||||
    "isarray@~1.0.0": "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11", | 
				
			||||
    "isexe@^2.0.0": "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10", | 
				
			||||
    "isobject@^2.0.0": "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89", | 
				
			||||
    "isomorphic-fetch@^2.1.1": "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9", | 
				
			||||
    "isstream@~0.1.2": "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a", | 
				
			||||
    "istanbul-api@^1.1.14": "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620", | 
				
			||||
    "istanbul-lib-coverage@^1.1.1": "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da", | 
				
			||||
    "istanbul-lib-hook@^1.1.0": "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b", | 
				
			||||
    "istanbul-lib-instrument@^1.7.5": "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e", | 
				
			||||
    "istanbul-lib-instrument@^1.8.0": "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e", | 
				
			||||
    "istanbul-lib-instrument@^1.9.1": "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e", | 
				
			||||
    "istanbul-lib-report@^1.1.2": "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425", | 
				
			||||
    "istanbul-lib-source-maps@^1.2.1": "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c", | 
				
			||||
    "istanbul-lib-source-maps@^1.2.2": "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c", | 
				
			||||
    "istanbul-reports@^1.1.3": "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10", | 
				
			||||
    "jest-changed-files@^22.0.3": "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.0.3.tgz#3771315acfa24a0ed7e6c545de620db6f1b2d164", | 
				
			||||
    "jest-cli@^22.0.4": "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.0.4.tgz#0052abaad45c57861c05da8ab5d27bad13ad224d", | 
				
			||||
    "jest-config@^22.0.4": "https://registry.yarnpkg.com/jest-config/-/jest-config-22.0.4.tgz#9c2a46c0907b1a1af54d9cdbf18e99b447034e11", | 
				
			||||
    "jest-diff@^22.0.3": "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.0.3.tgz#ffed5aba6beaf63bb77819ba44dd520168986321", | 
				
			||||
    "jest-docblock@^21": "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414", | 
				
			||||
    "jest-docblock@^21.2.0": "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414", | 
				
			||||
    "jest-docblock@^22.0.3": "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.0.3.tgz#c33aa22682b9fc68a5373f5f82994428a2ded601", | 
				
			||||
    "jest-environment-jsdom@^22.0.4": "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.0.4.tgz#5723d4e724775ed38948de792e62f2d6a7f452df", | 
				
			||||
    "jest-environment-node@^22.0.4": "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.0.4.tgz#068671f85a545f96a5469be3a3dd228fca79c709", | 
				
			||||
    "jest-get-type@^22.0.3": "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.0.3.tgz#fa894b677c0fcd55eff3fd8ee28c7be942e32d36", | 
				
			||||
    "jest-haste-map@^21": "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-21.2.0.tgz#1363f0a8bb4338f24f001806571eff7a4b2ff3d8", | 
				
			||||
    "jest-haste-map@^22.0.3": "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.0.3.tgz#c9ecb5c871c5465d4bde4139e527fa0dc784aa2d", | 
				
			||||
    "jest-jasmine2@^22.0.4": "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.0.4.tgz#f7c0965116efe831ec674dc954b0134639b3dcee", | 
				
			||||
    "jest-leak-detector@^22.0.3": "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.0.3.tgz#b64904f0e8954a11edb79b0809ff4717fa762d99", | 
				
			||||
    "jest-matcher-utils@^22.0.3": "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.0.3.tgz#2ec15ca1af7dcabf4daddc894ccce224b948674e", | 
				
			||||
    "jest-message-util@^22.0.3": "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.0.3.tgz#bf674b2762ef2dd53facf2136423fcca264976df", | 
				
			||||
    "jest-mock@^22.0.3": "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.0.3.tgz#c875e47b5b729c6c020a2fab317b275c0cf88961", | 
				
			||||
    "jest-regex-util@^22.0.3": "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.0.3.tgz#c5c10229de5ce2b27bf4347916d95b802ae9aa4d", | 
				
			||||
    "jest-resolve-dependencies@^22.0.3": "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.0.3.tgz#202ddf370069702cd1865a1952fcc7e52c92720e", | 
				
			||||
    "jest-resolve@^22.0.4": "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.0.4.tgz#a6e47f55e9388c7341b5e9732aedc6fe30906121", | 
				
			||||
    "jest-runner@^22.0.4": "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.0.4.tgz#3aa43a31b05ce8271539df580c2eb916023d3367", | 
				
			||||
    "jest-runtime@^22.0.4": "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.0.4.tgz#8f69aa7b5fbb3acd35dc262cbf654e563f69b7b4", | 
				
			||||
    "jest-snapshot@^22.0.3": "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.0.3.tgz#a949b393781d2fdb4773f6ea765dd67ad1da291e", | 
				
			||||
    "jest-util@^22.0.4": "https://registry.yarnpkg.com/jest-util/-/jest-util-22.0.4.tgz#d920a513e0645aaab030cee38e4fe7d5bed8bb6d", | 
				
			||||
    "jest-validate@^22.0.3": "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.0.3.tgz#2850d949a36c48b1a40f7eebae1d8539126f7829", | 
				
			||||
    "jest-worker@^22.0.3": "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.0.3.tgz#30433faca67814a8f80559f75ab2ceaa61332fd2", | 
				
			||||
    "jest@22.0.4": "https://registry.yarnpkg.com/jest/-/jest-22.0.4.tgz#d3cf560ece6b825b115dce80b9826ceb40f87961", | 
				
			||||
    "js-tokens@^3.0.0": "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b", | 
				
			||||
    "js-tokens@^3.0.2": "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b", | 
				
			||||
    "js-yaml@^3.7.0": "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc", | 
				
			||||
    "jsbn@~0.1.0": "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513", | 
				
			||||
    "jsdom@^11.5.1": "https://registry.yarnpkg.com/jsdom/-/jsdom-11.5.1.tgz#5df753b8d0bca20142ce21f4f6c039f99a992929", | 
				
			||||
    "jsesc@^1.3.0": "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b", | 
				
			||||
    "jsesc@~0.5.0": "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d", | 
				
			||||
    "json-schema-traverse@^0.3.0": "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340", | 
				
			||||
    "json-schema@0.2.3": "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13", | 
				
			||||
    "json-stable-stringify@^1.0.1": "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af", | 
				
			||||
    "json-stringify-safe@~5.0.1": "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb", | 
				
			||||
    "json5@^0.4.0": "https://registry.yarnpkg.com/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d", | 
				
			||||
    "json5@^0.5.1": "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821", | 
				
			||||
    "jsonfile@^2.1.0": "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8", | 
				
			||||
    "jsonify@~0.0.0": "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73", | 
				
			||||
    "jsprim@^1.2.2": "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2", | 
				
			||||
    "kind-of@^3.0.2": "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64", | 
				
			||||
    "kind-of@^4.0.0": "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57", | 
				
			||||
    "klaw@^1.0.0": "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439", | 
				
			||||
    "lazy-cache@^1.0.3": "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e", | 
				
			||||
    "lcid@^1.0.0": "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835", | 
				
			||||
    "left-pad@^1.1.3": "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee", | 
				
			||||
    "left-pad@^1.2.0": "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee", | 
				
			||||
    "leven@^2.1.0": "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580", | 
				
			||||
    "levn@~0.3.0": "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee", | 
				
			||||
    "load-json-file@^1.0.0": "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0", | 
				
			||||
    "load-json-file@^2.0.0": "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8", | 
				
			||||
    "locate-path@^2.0.0": "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e", | 
				
			||||
    "lodash._basecopy@^3.0.0": "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36", | 
				
			||||
    "lodash._basetostring@^3.0.0": "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5", | 
				
			||||
    "lodash._basevalues@^3.0.0": "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7", | 
				
			||||
    "lodash._getnative@^3.0.0": "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5", | 
				
			||||
    "lodash._isiterateecall@^3.0.0": "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c", | 
				
			||||
    "lodash._reescape@^3.0.0": "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a", | 
				
			||||
    "lodash._reevaluate@^3.0.0": "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed", | 
				
			||||
    "lodash._reinterpolate@^3.0.0": "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d", | 
				
			||||
    "lodash._root@^3.0.0": "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692", | 
				
			||||
    "lodash.escape@^3.0.0": "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698", | 
				
			||||
    "lodash.isarguments@^3.0.0": "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a", | 
				
			||||
    "lodash.isarray@^3.0.0": "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55", | 
				
			||||
    "lodash.keys@^3.0.0": "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a", | 
				
			||||
    "lodash.pad@^4.1.0": "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70", | 
				
			||||
    "lodash.padend@^4.1.0": "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e", | 
				
			||||
    "lodash.padstart@^4.1.0": "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b", | 
				
			||||
    "lodash.restparam@^3.0.0": "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805", | 
				
			||||
    "lodash.sortby@^4.7.0": "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438", | 
				
			||||
    "lodash.template@^3.0.0": "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f", | 
				
			||||
    "lodash.templatesettings@^3.0.0": "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5", | 
				
			||||
    "lodash@^3.5.0": "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6", | 
				
			||||
    "lodash@^4.13.1": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae", | 
				
			||||
    "lodash@^4.14.0": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae", | 
				
			||||
    "lodash@^4.16.6": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae", | 
				
			||||
    "lodash@^4.17.4": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae", | 
				
			||||
    "lodash@^4.3.0": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae", | 
				
			||||
    "lodash@^4.6.1": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae", | 
				
			||||
    "longest@^1.0.1": "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097", | 
				
			||||
    "loose-envify@^1.0.0": "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848", | 
				
			||||
    "loose-envify@^1.1.0": "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848", | 
				
			||||
    "loose-envify@^1.3.1": "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848", | 
				
			||||
    "lru-cache@^4.0.1": "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55", | 
				
			||||
    "macos-release@^1.0.0": "https://registry.yarnpkg.com/macos-release/-/macos-release-1.1.0.tgz#831945e29365b470aa8724b0ab36c8f8959d10fb", | 
				
			||||
    "makeerror@1.0.x": "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c", | 
				
			||||
    "media-typer@0.3.0": "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748", | 
				
			||||
    "mem@^1.1.0": "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76", | 
				
			||||
    "merge-stream@^1.0.1": "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1", | 
				
			||||
    "merge@^1.1.3": "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da", | 
				
			||||
    "method-override@~2.3.5": "https://registry.yarnpkg.com/method-override/-/method-override-2.3.10.tgz#e3daf8d5dee10dd2dce7d4ae88d62bbee77476b4", | 
				
			||||
    "methods@~1.1.2": "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee", | 
				
			||||
    "metro-bundler@^0.20.0": "https://registry.yarnpkg.com/metro-bundler/-/metro-bundler-0.20.3.tgz#0ded01b64e8963117017b106f75b83cfc34f3656", | 
				
			||||
    "micromatch@^2.1.5": "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565", | 
				
			||||
    "micromatch@^2.3.11": "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565", | 
				
			||||
    "mime-db@>= 1.30.0 < 2": "https://registry.yarnpkg.com/mime-db/-/mime-db-1.32.0.tgz#485b3848b01a3cda5f968b4882c0771e58e09414", | 
				
			||||
    "mime-db@~1.23.0": "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659", | 
				
			||||
    "mime-db@~1.30.0": "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01", | 
				
			||||
    "mime-types@2.1.11": "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c", | 
				
			||||
    "mime-types@^2.1.12": "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a", | 
				
			||||
    "mime-types@~2.1.15": "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a", | 
				
			||||
    "mime-types@~2.1.16": "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a", | 
				
			||||
    "mime-types@~2.1.17": "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a", | 
				
			||||
    "mime-types@~2.1.6": "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a", | 
				
			||||
    "mime-types@~2.1.7": "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a", | 
				
			||||
    "mime-types@~2.1.9": "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a", | 
				
			||||
    "mime@1.3.4": "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53", | 
				
			||||
    "mime@^1.3.4": "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1", | 
				
			||||
    "mimic-fn@^1.0.0": "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18", | 
				
			||||
    "min-document@^2.19.0": "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685", | 
				
			||||
    "minimatch@^3.0.0": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083", | 
				
			||||
    "minimatch@^3.0.2": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083", | 
				
			||||
    "minimatch@^3.0.3": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083", | 
				
			||||
    "minimatch@^3.0.4": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083", | 
				
			||||
    "minimist@0.0.8": "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d", | 
				
			||||
    "minimist@^1.1.0": "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284", | 
				
			||||
    "minimist@^1.1.1": "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284", | 
				
			||||
    "minimist@^1.2.0": "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284", | 
				
			||||
    "minimist@~0.0.1": "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf", | 
				
			||||
    "mkdirp@>=0.5 0": "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903", | 
				
			||||
    "mkdirp@^0.5.1": "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903", | 
				
			||||
    "morgan@~1.6.1": "https://registry.yarnpkg.com/morgan/-/morgan-1.6.1.tgz#5fd818398c6819cba28a7cd6664f292fe1c0bbf2", | 
				
			||||
    "ms@0.7.1": "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098", | 
				
			||||
    "ms@0.7.2": "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765", | 
				
			||||
    "ms@2.0.0": "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8", | 
				
			||||
    "multiparty@3.3.2": "https://registry.yarnpkg.com/multiparty/-/multiparty-3.3.2.tgz#35de6804dc19643e5249f3d3e3bdc6c8ce301d3f", | 
				
			||||
    "multipipe@^0.1.2": "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b", | 
				
			||||
    "mute-stream@0.0.7": "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab", | 
				
			||||
    "nan@^2.0.5": "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a", | 
				
			||||
    "nan@^2.3.0": "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a", | 
				
			||||
    "natural-compare@^1.4.0": "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7", | 
				
			||||
    "negotiator@0.5.3": "https://registry.yarnpkg.com/negotiator/-/negotiator-0.5.3.tgz#269d5c476810ec92edbe7b6c2f28316384f9a7e8", | 
				
			||||
    "negotiator@0.6.1": "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9", | 
				
			||||
    "node-fetch@^1.0.1": "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef", | 
				
			||||
    "node-fetch@^1.3.3": "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef", | 
				
			||||
    "node-int64@^0.4.0": "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b", | 
				
			||||
    "node-notifier@^5.1.2": "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff", | 
				
			||||
    "node-pre-gyp@^0.6.39": "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649", | 
				
			||||
    "nopt@^4.0.1": "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d", | 
				
			||||
    "normalize-package-data@^2.3.2": "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f", | 
				
			||||
    "normalize-path@^2.0.0": "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9", | 
				
			||||
    "normalize-path@^2.0.1": "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9", | 
				
			||||
    "npm-run-path@^2.0.0": "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f", | 
				
			||||
    "npmlog@^2.0.4": "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692", | 
				
			||||
    "npmlog@^4.0.2": "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b", | 
				
			||||
    "number-is-nan@^1.0.0": "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d", | 
				
			||||
    "nwmatcher@^1.4.3": "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c", | 
				
			||||
    "oauth-sign@~0.8.1": "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43", | 
				
			||||
    "oauth-sign@~0.8.2": "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43", | 
				
			||||
    "object-assign@^3.0.0": "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2", | 
				
			||||
    "object-assign@^4.0.1": "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863", | 
				
			||||
    "object-assign@^4.1.0": "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863", | 
				
			||||
    "object-assign@^4.1.1": "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863", | 
				
			||||
    "object-keys@^1.0.8": "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d", | 
				
			||||
    "object.getownpropertydescriptors@^2.0.3": "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16", | 
				
			||||
    "object.omit@^2.0.0": "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa", | 
				
			||||
    "on-finished@~2.3.0": "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947", | 
				
			||||
    "on-headers@~1.0.0": "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7", | 
				
			||||
    "on-headers@~1.0.1": "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7", | 
				
			||||
    "once@^1.3.0": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1", | 
				
			||||
    "once@^1.3.3": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1", | 
				
			||||
    "once@^1.4.0": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1", | 
				
			||||
    "onetime@^2.0.0": "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4", | 
				
			||||
    "opn@^3.0.2": "https://registry.yarnpkg.com/opn/-/opn-3.0.3.tgz#b6d99e7399f78d65c3baaffef1fb288e9b85243a", | 
				
			||||
    "optimist@^0.6.1": "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686", | 
				
			||||
    "optionator@^0.8.1": "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64", | 
				
			||||
    "options@>=0.0.5": "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f", | 
				
			||||
    "os-homedir@^1.0.0": "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3", | 
				
			||||
    "os-locale@^2.0.0": "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2", | 
				
			||||
    "os-name@^2.0.1": "https://registry.yarnpkg.com/os-name/-/os-name-2.0.1.tgz#b9a386361c17ae3a21736ef0599405c9a8c5dc5e", | 
				
			||||
    "os-tmpdir@^1.0.0": "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274", | 
				
			||||
    "os-tmpdir@^1.0.1": "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274", | 
				
			||||
    "os-tmpdir@~1.0.2": "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274", | 
				
			||||
    "osenv@^0.1.4": "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644", | 
				
			||||
    "p-finally@^1.0.0": "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae", | 
				
			||||
    "p-limit@^1.1.0": "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c", | 
				
			||||
    "p-locate@^2.0.0": "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43", | 
				
			||||
    "p-try@^1.0.0": "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3", | 
				
			||||
    "parse-glob@^3.0.4": "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c", | 
				
			||||
    "parse-json@^2.2.0": "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9", | 
				
			||||
    "parse5@^3.0.2": "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c", | 
				
			||||
    "parseurl@~1.3.0": "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3", | 
				
			||||
    "parseurl@~1.3.1": "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3", | 
				
			||||
    "parseurl@~1.3.2": "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3", | 
				
			||||
    "path-exists@^2.0.0": "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b", | 
				
			||||
    "path-exists@^3.0.0": "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515", | 
				
			||||
    "path-is-absolute@^1.0.0": "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f", | 
				
			||||
    "path-is-absolute@^1.0.1": "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f", | 
				
			||||
    "path-key@^2.0.0": "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40", | 
				
			||||
    "path-parse@^1.0.5": "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1", | 
				
			||||
    "path-type@^1.0.0": "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441", | 
				
			||||
    "path-type@^2.0.0": "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73", | 
				
			||||
    "pause@0.1.0": "https://registry.yarnpkg.com/pause/-/pause-0.1.0.tgz#ebc8a4a8619ff0b8a81ac1513c3434ff469fdb74", | 
				
			||||
    "pegjs@^0.10.0": "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd", | 
				
			||||
    "performance-now@^0.2.0": "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5", | 
				
			||||
    "performance-now@^2.1.0": "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b", | 
				
			||||
    "pify@^2.0.0": "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c", | 
				
			||||
    "pinkie-promise@^2.0.0": "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa", | 
				
			||||
    "pinkie@^2.0.0": "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870", | 
				
			||||
    "plist@2.0.1": "https://registry.yarnpkg.com/plist/-/plist-2.0.1.tgz#0a32ca9481b1c364e92e18dc55c876de9d01da8b", | 
				
			||||
    "plist@^1.2.0": "https://registry.yarnpkg.com/plist/-/plist-1.2.0.tgz#084b5093ddc92506e259f874b8d9b1afb8c79593", | 
				
			||||
    "pn@^1.0.0": "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb", | 
				
			||||
    "prelude-ls@~1.1.2": "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54", | 
				
			||||
    "preserve@^0.2.0": "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b", | 
				
			||||
    "pretty-format@^22.0.3": "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.0.3.tgz#a2bfa59fc33ad24aa4429981bb52524b41ba5dd7", | 
				
			||||
    "pretty-format@^4.2.1": "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.3.1.tgz#530be5c42b3c05b36414a7a2a4337aa80acd0e8d", | 
				
			||||
    "private@^0.1.6": "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff", | 
				
			||||
    "private@^0.1.7": "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff", | 
				
			||||
    "process-nextick-args@~1.0.6": "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3", | 
				
			||||
    "process@~0.5.1": "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf", | 
				
			||||
    "promise@^7.1.1": "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf", | 
				
			||||
    "prop-types@^15.5.8": "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856", | 
				
			||||
    "prop-types@^15.6.0": "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856", | 
				
			||||
    "prr@~1.0.1": "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476", | 
				
			||||
    "pseudomap@^1.0.2": "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3", | 
				
			||||
    "punycode@^1.4.1": "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e", | 
				
			||||
    "punycode@^2.1.0": "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d", | 
				
			||||
    "qs@4.0.0": "https://registry.yarnpkg.com/qs/-/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607", | 
				
			||||
    "qs@~6.4.0": "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233", | 
				
			||||
    "qs@~6.5.1": "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8", | 
				
			||||
    "random-bytes@~1.0.0": "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b", | 
				
			||||
    "randomatic@^1.1.3": "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c", | 
				
			||||
    "range-parser@~1.0.3": "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz#6872823535c692e2c2a0103826afd82c2e0ff175", | 
				
			||||
    "raw-body@~2.1.2": "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774", | 
				
			||||
    "rc@^1.1.7": "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077", | 
				
			||||
    "react-clone-referenced-element@^1.0.1": "https://registry.yarnpkg.com/react-clone-referenced-element/-/react-clone-referenced-element-1.0.1.tgz#2bba8c69404c5e4a944398600bcc4c941f860682", | 
				
			||||
    "react-deep-force-update@^1.0.0": "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.1.tgz#bcd31478027b64b3339f108921ab520b4313dc2c", | 
				
			||||
    "react-devtools-core@^2.5.0": "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-2.5.2.tgz#f97bec5afae5d9318d16778065e0c214c4d5714c", | 
				
			||||
    "react-native@0.51.0": "https://registry.yarnpkg.com/react-native/-/react-native-0.51.0.tgz#fe25934b3030fd323f3ca1a70f034133465955ed", | 
				
			||||
    "react-proxy@^1.1.7": "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a", | 
				
			||||
    "react-test-renderer@16.0.0": "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.0.0.tgz#9fe7b8308f2f71f29fc356d4102086f131c9cb15", | 
				
			||||
    "react-timer-mixin@^0.13.2": "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.3.tgz#0da8b9f807ec07dc3e854d082c737c65605b3d22", | 
				
			||||
    "react-transform-hmr@^1.0.4": "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb", | 
				
			||||
    "react@16.0.0": "https://registry.yarnpkg.com/react/-/react-16.0.0.tgz#ce7df8f1941b036f02b2cca9dbd0cb1f0e855e2d", | 
				
			||||
    "read-pkg-up@^1.0.1": "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02", | 
				
			||||
    "read-pkg-up@^2.0.0": "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be", | 
				
			||||
    "read-pkg@^1.0.0": "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28", | 
				
			||||
    "read-pkg@^2.0.0": "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8", | 
				
			||||
    "readable-stream@^2.0.1": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c", | 
				
			||||
    "readable-stream@^2.0.6": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c", | 
				
			||||
    "readable-stream@^2.1.4": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c", | 
				
			||||
    "readable-stream@^2.1.5": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c", | 
				
			||||
    "readable-stream@^2.2.2": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c", | 
				
			||||
    "readable-stream@~1.1.8": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9", | 
				
			||||
    "readable-stream@~1.1.9": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9", | 
				
			||||
    "realpath-native@^1.0.0": "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0", | 
				
			||||
    "regenerate@^1.2.1": "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f", | 
				
			||||
    "regenerator-runtime@^0.11.0": "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9", | 
				
			||||
    "regenerator-transform@^0.10.0": "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd", | 
				
			||||
    "regex-cache@^0.4.2": "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd", | 
				
			||||
    "regexpu-core@^2.0.0": "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240", | 
				
			||||
    "regjsgen@^0.2.0": "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7", | 
				
			||||
    "regjsparser@^0.1.4": "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c", | 
				
			||||
    "remove-trailing-separator@^1.0.1": "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef", | 
				
			||||
    "repeat-element@^1.1.2": "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a", | 
				
			||||
    "repeat-string@^1.5.2": "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637", | 
				
			||||
    "repeating@^2.0.0": "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda", | 
				
			||||
    "replace-ext@0.0.1": "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924", | 
				
			||||
    "request-promise-core@1.1.1": "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6", | 
				
			||||
    "request-promise-native@^1.0.3": "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5", | 
				
			||||
    "request@2.81.0": "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0", | 
				
			||||
    "request@^2.79.0": "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356", | 
				
			||||
    "request@^2.83.0": "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356", | 
				
			||||
    "require-directory@^2.1.1": "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42", | 
				
			||||
    "require-main-filename@^1.0.1": "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1", | 
				
			||||
    "resolve@1.1.7": "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b", | 
				
			||||
    "response-time@~2.3.1": "https://registry.yarnpkg.com/response-time/-/response-time-2.3.2.tgz#ffa71bab952d62f7c1d49b7434355fbc68dffc5a", | 
				
			||||
    "restore-cursor@^2.0.0": "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf", | 
				
			||||
    "right-align@^0.1.1": "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef", | 
				
			||||
    "rimraf@2": "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36", | 
				
			||||
    "rimraf@^2.5.1": "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36", | 
				
			||||
    "rimraf@^2.5.4": "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36", | 
				
			||||
    "rimraf@^2.6.1": "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36", | 
				
			||||
    "rimraf@~2.2.6": "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582", | 
				
			||||
    "rndm@1.2.0": "https://registry.yarnpkg.com/rndm/-/rndm-1.2.0.tgz#f33fe9cfb52bbfd520aa18323bc65db110a1b76c", | 
				
			||||
    "run-async@^2.2.0": "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0", | 
				
			||||
    "rx-lite-aggregates@^4.0.8": "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be", | 
				
			||||
    "rx-lite@*": "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444", | 
				
			||||
    "rx-lite@^4.0.8": "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444", | 
				
			||||
    "safe-buffer@^5.0.1": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853", | 
				
			||||
    "safe-buffer@^5.1.1": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853", | 
				
			||||
    "safe-buffer@~5.0.1": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7", | 
				
			||||
    "safe-buffer@~5.1.0": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853", | 
				
			||||
    "safe-buffer@~5.1.1": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853", | 
				
			||||
    "sane@^2.0.0": "https://registry.yarnpkg.com/sane/-/sane-2.2.0.tgz#d6d2e2fcab00e3d283c93b912b7c3a20846f1d56", | 
				
			||||
    "sax@^1.2.1": "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9", | 
				
			||||
    "sax@~1.1.1": "https://registry.yarnpkg.com/sax/-/sax-1.1.6.tgz#5d616be8a5e607d54e114afae55b7eaf2fcc3240", | 
				
			||||
    "semver@2 || 3 || 4 || 5": "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e", | 
				
			||||
    "semver@5.x": "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e", | 
				
			||||
    "semver@^5.0.1": "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e", | 
				
			||||
    "semver@^5.0.3": "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e", | 
				
			||||
    "semver@^5.1.0": "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e", | 
				
			||||
    "semver@^5.3.0": "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e", | 
				
			||||
    "send@0.13.2": "https://registry.yarnpkg.com/send/-/send-0.13.2.tgz#765e7607c8055452bba6f0b052595350986036de", | 
				
			||||
    "serve-favicon@~2.3.0": "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.3.2.tgz#dd419e268de012ab72b319d337f2105013f9381f", | 
				
			||||
    "serve-index@~1.7.2": "https://registry.yarnpkg.com/serve-index/-/serve-index-1.7.3.tgz#7a057fc6ee28dc63f64566e5fa57b111a86aecd2", | 
				
			||||
    "serve-static@~1.10.0": "https://registry.yarnpkg.com/serve-static/-/serve-static-1.10.3.tgz#ce5a6ecd3101fed5ec09827dac22a9c29bfb0535", | 
				
			||||
    "set-blocking@^2.0.0": "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7", | 
				
			||||
    "set-blocking@~2.0.0": "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7", | 
				
			||||
    "setimmediate@^1.0.5": "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285", | 
				
			||||
    "shebang-command@^1.2.0": "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea", | 
				
			||||
    "shebang-regex@^1.0.0": "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3", | 
				
			||||
    "shell-quote@1.6.1": "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767", | 
				
			||||
    "shell-quote@^1.6.1": "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767", | 
				
			||||
    "shellwords@^0.1.0": "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b", | 
				
			||||
    "signal-exit@^3.0.0": "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d", | 
				
			||||
    "signal-exit@^3.0.2": "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d", | 
				
			||||
    "simple-plist@^0.2.1": "https://registry.yarnpkg.com/simple-plist/-/simple-plist-0.2.1.tgz#71766db352326928cf3a807242ba762322636723", | 
				
			||||
    "slash@^1.0.0": "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55", | 
				
			||||
    "slide@^1.1.5": "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707", | 
				
			||||
    "sntp@1.x.x": "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198", | 
				
			||||
    "sntp@2.x.x": "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8", | 
				
			||||
    "source-map-support@^0.4.15": "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f", | 
				
			||||
    "source-map-support@^0.5.0": "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.0.tgz#2018a7ad2bdf8faf2691e5fddab26bed5a2bacab", | 
				
			||||
    "source-map@^0.4.4": "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b", | 
				
			||||
    "source-map@^0.5.3": "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc", | 
				
			||||
    "source-map@^0.5.6": "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc", | 
				
			||||
    "source-map@^0.6.0": "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263", | 
				
			||||
    "source-map@~0.5.1": "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc", | 
				
			||||
    "source-map@~0.5.6": "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc", | 
				
			||||
    "source-map@~0.6.1": "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263", | 
				
			||||
    "sparkles@^1.0.0": "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3", | 
				
			||||
    "spdx-correct@~1.0.0": "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40", | 
				
			||||
    "spdx-expression-parse@~1.0.0": "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c", | 
				
			||||
    "spdx-license-ids@^1.0.2": "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57", | 
				
			||||
    "sprintf-js@~1.0.2": "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c", | 
				
			||||
    "sshpk@^1.7.0": "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3", | 
				
			||||
    "stack-utils@^1.0.1": "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620", | 
				
			||||
    "stacktrace-parser@^0.1.3": "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.4.tgz#01397922e5f62ecf30845522c95c4fe1d25e7d4e", | 
				
			||||
    "statuses@1": "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087", | 
				
			||||
    "statuses@~1.2.1": "https://registry.yarnpkg.com/statuses/-/statuses-1.2.1.tgz#dded45cc18256d51ed40aec142489d5c61026d28", | 
				
			||||
    "stealthy-require@^1.1.0": "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b", | 
				
			||||
    "stream-buffers@~2.2.0": "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4", | 
				
			||||
    "stream-counter@~0.2.0": "https://registry.yarnpkg.com/stream-counter/-/stream-counter-0.2.0.tgz#ded266556319c8b0e222812b9cf3b26fa7d947de", | 
				
			||||
    "string-length@^2.0.0": "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed", | 
				
			||||
    "string-width@^1.0.1": "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3", | 
				
			||||
    "string-width@^1.0.2": "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3", | 
				
			||||
    "string-width@^2.0.0": "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e", | 
				
			||||
    "string-width@^2.1.0": "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e", | 
				
			||||
    "string-width@^2.1.1": "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e", | 
				
			||||
    "string_decoder@~0.10.x": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94", | 
				
			||||
    "string_decoder@~1.0.3": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab", | 
				
			||||
    "stringstream@~0.0.4": "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878", | 
				
			||||
    "stringstream@~0.0.5": "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878", | 
				
			||||
    "strip-ansi@^3.0.0": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf", | 
				
			||||
    "strip-ansi@^3.0.1": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf", | 
				
			||||
    "strip-ansi@^4.0.0": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f", | 
				
			||||
    "strip-bom@3.0.0": "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3", | 
				
			||||
    "strip-bom@^2.0.0": "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e", | 
				
			||||
    "strip-bom@^3.0.0": "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3", | 
				
			||||
    "strip-eof@^1.0.0": "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf", | 
				
			||||
    "strip-json-comments@~2.0.1": "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a", | 
				
			||||
    "supports-color@^2.0.0": "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7", | 
				
			||||
    "supports-color@^3.1.2": "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6", | 
				
			||||
    "supports-color@^4.0.0": "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b", | 
				
			||||
    "symbol-tree@^3.2.1": "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6", | 
				
			||||
    "sync-exec@~0.6.x": "https://registry.yarnpkg.com/sync-exec/-/sync-exec-0.6.2.tgz#717d22cc53f0ce1def5594362f3a89a2ebb91105", | 
				
			||||
    "tar-pack@^3.4.0": "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f", | 
				
			||||
    "tar@^2.2.1": "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1", | 
				
			||||
    "temp@0.8.3": "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59", | 
				
			||||
    "test-exclude@^4.1.1": "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26", | 
				
			||||
    "throat@^4.0.0": "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a", | 
				
			||||
    "throat@^4.1.0": "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a", | 
				
			||||
    "through2@^2.0.0": "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be", | 
				
			||||
    "through@^2.3.6": "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5", | 
				
			||||
    "time-stamp@^1.0.0": "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3", | 
				
			||||
    "tmp@^0.0.33": "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9", | 
				
			||||
    "tmpl@1.0.x": "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1", | 
				
			||||
    "to-fast-properties@^1.0.3": "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47", | 
				
			||||
    "tough-cookie@>=2.3.3": "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561", | 
				
			||||
    "tough-cookie@^2.3.3": "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561", | 
				
			||||
    "tough-cookie@~2.3.0": "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561", | 
				
			||||
    "tough-cookie@~2.3.3": "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561", | 
				
			||||
    "tr46@^1.0.0": "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09", | 
				
			||||
    "trim-right@^1.0.1": "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003", | 
				
			||||
    "tsscmp@1.0.5": "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97", | 
				
			||||
    "tunnel-agent@^0.6.0": "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd", | 
				
			||||
    "tweetnacl@^0.14.3": "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64", | 
				
			||||
    "tweetnacl@~0.14.0": "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64", | 
				
			||||
    "type-check@~0.3.2": "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72", | 
				
			||||
    "type-is@~1.6.6": "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410", | 
				
			||||
    "typedarray@^0.0.6": "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777", | 
				
			||||
    "ua-parser-js@^0.7.9": "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac", | 
				
			||||
    "uglify-es@^3.1.8": "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.4.tgz#2d592678791e5310456bbc95e952139e3b13167a", | 
				
			||||
    "uglify-js@^2.6": "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd", | 
				
			||||
    "uglify-to-browserify@~1.0.0": "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7", | 
				
			||||
    "uid-number@^0.0.6": "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81", | 
				
			||||
    "uid-safe@2.1.4": "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.4.tgz#3ad6f38368c6d4c8c75ec17623fb79aa1d071d81", | 
				
			||||
    "uid-safe@~2.0.0": "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.0.0.tgz#a7f3c6ca64a1f6a5d04ec0ef3e4c3d5367317137", | 
				
			||||
    "ultron@1.0.x": "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa", | 
				
			||||
    "ultron@~1.1.0": "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c", | 
				
			||||
    "unpipe@1.0.0": "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec", | 
				
			||||
    "unpipe@~1.0.0": "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec", | 
				
			||||
    "util-deprecate@1.0.2": "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf", | 
				
			||||
    "util-deprecate@~1.0.1": "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf", | 
				
			||||
    "util.promisify@^1.0.0": "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030", | 
				
			||||
    "utils-merge@1.0.0": "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8", | 
				
			||||
    "uuid@3.0.1": "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1", | 
				
			||||
    "uuid@^3.0.0": "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04", | 
				
			||||
    "uuid@^3.1.0": "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04", | 
				
			||||
    "validate-npm-package-license@^3.0.1": "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc", | 
				
			||||
    "vary@~1.0.1": "https://registry.yarnpkg.com/vary/-/vary-1.0.1.tgz#99e4981566a286118dfb2b817357df7993376d10", | 
				
			||||
    "vary@~1.1.2": "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc", | 
				
			||||
    "verror@1.10.0": "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400", | 
				
			||||
    "vhost@~3.0.1": "https://registry.yarnpkg.com/vhost/-/vhost-3.0.2.tgz#2fb1decd4c466aa88b0f9341af33dc1aff2478d5", | 
				
			||||
    "vinyl@^0.5.0": "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde", | 
				
			||||
    "walker@~1.0.5": "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb", | 
				
			||||
    "watch@~0.18.0": "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986", | 
				
			||||
    "weak@^1.0.1": "https://registry.yarnpkg.com/weak/-/weak-1.0.1.tgz#ab99aab30706959aa0200cb8cf545bb9cb33b99e", | 
				
			||||
    "webidl-conversions@^4.0.1": "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad", | 
				
			||||
    "webidl-conversions@^4.0.2": "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad", | 
				
			||||
    "whatwg-encoding@^1.0.1": "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3", | 
				
			||||
    "whatwg-fetch@>=0.10.0": "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84", | 
				
			||||
    "whatwg-fetch@^1.0.0": "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz#ac3c9d39f320c6dce5339969d054ef43dd333319", | 
				
			||||
    "whatwg-url@^6.3.0": "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08", | 
				
			||||
    "which-module@^2.0.0": "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a", | 
				
			||||
    "which@^1.2.12": "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a", | 
				
			||||
    "which@^1.2.14": "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a", | 
				
			||||
    "which@^1.2.9": "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a", | 
				
			||||
    "wide-align@^1.1.0": "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710", | 
				
			||||
    "win-release@^1.0.0": "https://registry.yarnpkg.com/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209", | 
				
			||||
    "window-size@0.1.0": "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d", | 
				
			||||
    "wordwrap@0.0.2": "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f", | 
				
			||||
    "wordwrap@^1.0.0": "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb", | 
				
			||||
    "wordwrap@~0.0.2": "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107", | 
				
			||||
    "wordwrap@~1.0.0": "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb", | 
				
			||||
    "worker-farm@^1.3.1": "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae", | 
				
			||||
    "wrap-ansi@^2.0.0": "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85", | 
				
			||||
    "wrappy@1": "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", | 
				
			||||
    "write-file-atomic@^1.2.0": "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f", | 
				
			||||
    "write-file-atomic@^2.1.0": "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab", | 
				
			||||
    "ws@^1.1.0": "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51", | 
				
			||||
    "ws@^2.0.3": "https://registry.yarnpkg.com/ws/-/ws-2.3.1.tgz#6b94b3e447cb6a363f785eaf94af6359e8e81c80", | 
				
			||||
    "xcode@^0.9.1": "https://registry.yarnpkg.com/xcode/-/xcode-0.9.3.tgz#910a89c16aee6cc0b42ca805a6d0b4cf87211cf3", | 
				
			||||
    "xml-name-validator@^2.0.1": "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635", | 
				
			||||
    "xmlbuilder@4.0.0": "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.0.0.tgz#98b8f651ca30aa624036f127d11cc66dc7b907a3", | 
				
			||||
    "xmlbuilder@8.2.2": "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773", | 
				
			||||
    "xmldoc@^0.4.0": "https://registry.yarnpkg.com/xmldoc/-/xmldoc-0.4.0.tgz#d257224be8393eaacbf837ef227fd8ec25b36888", | 
				
			||||
    "xmldom@0.1.x": "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9", | 
				
			||||
    "xpipe@^1.0.5": "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf", | 
				
			||||
    "xtend@^4.0.1": "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af", | 
				
			||||
    "xtend@~4.0.1": "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af", | 
				
			||||
    "y18n@^3.2.1": "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41", | 
				
			||||
    "yallist@^2.1.2": "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52", | 
				
			||||
    "yargs-parser@^7.0.0": "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9", | 
				
			||||
    "yargs-parser@^8.1.0": "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950", | 
				
			||||
    "yargs@^10.0.3": "https://registry.yarnpkg.com/yargs/-/yargs-10.1.0.tgz#85d98f2264c7487f18c4607b79c7e4e3b160e69e", | 
				
			||||
    "yargs@^9.0.0": "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c", | 
				
			||||
    "yargs@~3.10.0": "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" | 
				
			||||
  }, | 
				
			||||
  "files": [], | 
				
			||||
  "artifacts": { | 
				
			||||
    "weak@1.0.1": [ | 
				
			||||
      "build", | 
				
			||||
      "build/Makefile", | 
				
			||||
      "build/Release", | 
				
			||||
      "build/Release/.deps", | 
				
			||||
      "build/Release/.deps/Release", | 
				
			||||
      "build/Release/.deps/Release/obj.target", | 
				
			||||
      "build/Release/.deps/Release/obj.target/weakref", | 
				
			||||
      "build/Release/.deps/Release/obj.target/weakref/src", | 
				
			||||
      "build/Release/.deps/Release/obj.target/weakref/src/weakref.o.d", | 
				
			||||
      "build/Release/.deps/Release/weakref.node.d", | 
				
			||||
      "build/Release/obj.target", | 
				
			||||
      "build/Release/obj.target/weakref", | 
				
			||||
      "build/Release/obj.target/weakref/src", | 
				
			||||
      "build/Release/obj.target/weakref/src/weakref.o", | 
				
			||||
      "build/Release/weakref.node", | 
				
			||||
      "build/binding.Makefile", | 
				
			||||
      "build/config.gypi", | 
				
			||||
      "build/gyp-mac-tool", | 
				
			||||
      "build/weakref.target.mk" | 
				
			||||
    ] | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -1,46 +0,0 @@
					 | 
				
			||||
This software is dual-licensed under the ISC and MIT licenses. | 
				
			||||
You may use this software under EITHER of the following licenses. | 
				
			||||
 | 
				
			||||
---------- | 
				
			||||
 | 
				
			||||
The ISC License | 
				
			||||
 | 
				
			||||
Copyright (c) Isaac Z. Schlueter and Contributors | 
				
			||||
 | 
				
			||||
Permission to use, copy, modify, and/or distribute this software for any | 
				
			||||
purpose with or without fee is hereby granted, provided that the above | 
				
			||||
copyright notice and this permission notice appear in all copies. | 
				
			||||
 | 
				
			||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | 
				
			||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | 
				
			||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | 
				
			||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | 
				
			||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | 
				
			||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR | 
				
			||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 
				
			||||
 | 
				
			||||
---------- | 
				
			||||
 | 
				
			||||
Copyright Isaac Z. Schlueter and Contributors | 
				
			||||
All rights reserved. | 
				
			||||
 | 
				
			||||
Permission is hereby granted, free of charge, to any person | 
				
			||||
obtaining a copy of this software and associated documentation | 
				
			||||
files (the "Software"), to deal in the Software without | 
				
			||||
restriction, including without limitation the rights to use, | 
				
			||||
copy, modify, merge, publish, distribute, sublicense, and/or sell | 
				
			||||
copies of the Software, and to permit persons to whom the | 
				
			||||
Software is furnished to do so, subject to the following | 
				
			||||
conditions: | 
				
			||||
 | 
				
			||||
The above copyright notice and this permission notice shall be | 
				
			||||
included in all copies or substantial portions of the Software. | 
				
			||||
 | 
				
			||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | 
				
			||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES | 
				
			||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | 
				
			||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT | 
				
			||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | 
				
			||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | 
				
			||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | 
				
			||||
OTHER DEALINGS IN THE SOFTWARE. | 
				
			||||
@ -1,23 +0,0 @@
					 | 
				
			||||
# abbrev-js | 
				
			||||
 | 
				
			||||
Just like [ruby's Abbrev](http://apidock.com/ruby/Abbrev). | 
				
			||||
 | 
				
			||||
Usage: | 
				
			||||
 | 
				
			||||
    var abbrev = require("abbrev"); | 
				
			||||
    abbrev("foo", "fool", "folding", "flop"); | 
				
			||||
     | 
				
			||||
    // returns: | 
				
			||||
    { fl: 'flop' | 
				
			||||
    , flo: 'flop' | 
				
			||||
    , flop: 'flop' | 
				
			||||
    , fol: 'folding' | 
				
			||||
    , fold: 'folding' | 
				
			||||
    , foldi: 'folding' | 
				
			||||
    , foldin: 'folding' | 
				
			||||
    , folding: 'folding' | 
				
			||||
    , foo: 'foo' | 
				
			||||
    , fool: 'fool' | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
This is handy for command-line scripts, or other cases where you want to be able to accept shorthands. | 
				
			||||
@ -1,61 +0,0 @@
					 | 
				
			||||
module.exports = exports = abbrev.abbrev = abbrev | 
				
			||||
 | 
				
			||||
abbrev.monkeyPatch = monkeyPatch | 
				
			||||
 | 
				
			||||
function monkeyPatch () { | 
				
			||||
  Object.defineProperty(Array.prototype, 'abbrev', { | 
				
			||||
    value: function () { return abbrev(this) }, | 
				
			||||
    enumerable: false, configurable: true, writable: true | 
				
			||||
  }) | 
				
			||||
 | 
				
			||||
  Object.defineProperty(Object.prototype, 'abbrev', { | 
				
			||||
    value: function () { return abbrev(Object.keys(this)) }, | 
				
			||||
    enumerable: false, configurable: true, writable: true | 
				
			||||
  }) | 
				
			||||
} | 
				
			||||
 | 
				
			||||
function abbrev (list) { | 
				
			||||
  if (arguments.length !== 1 || !Array.isArray(list)) { | 
				
			||||
    list = Array.prototype.slice.call(arguments, 0) | 
				
			||||
  } | 
				
			||||
  for (var i = 0, l = list.length, args = [] ; i < l ; i ++) { | 
				
			||||
    args[i] = typeof list[i] === "string" ? list[i] : String(list[i]) | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  // sort them lexicographically, so that they're next to their nearest kin
 | 
				
			||||
  args = args.sort(lexSort) | 
				
			||||
 | 
				
			||||
  // walk through each, seeing how much it has in common with the next and previous
 | 
				
			||||
  var abbrevs = {} | 
				
			||||
    , prev = "" | 
				
			||||
  for (var i = 0, l = args.length ; i < l ; i ++) { | 
				
			||||
    var current = args[i] | 
				
			||||
      , next = args[i + 1] || "" | 
				
			||||
      , nextMatches = true | 
				
			||||
      , prevMatches = true | 
				
			||||
    if (current === next) continue | 
				
			||||
    for (var j = 0, cl = current.length ; j < cl ; j ++) { | 
				
			||||
      var curChar = current.charAt(j) | 
				
			||||
      nextMatches = nextMatches && curChar === next.charAt(j) | 
				
			||||
      prevMatches = prevMatches && curChar === prev.charAt(j) | 
				
			||||
      if (!nextMatches && !prevMatches) { | 
				
			||||
        j ++ | 
				
			||||
        break | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
    prev = current | 
				
			||||
    if (j === cl) { | 
				
			||||
      abbrevs[current] = current | 
				
			||||
      continue | 
				
			||||
    } | 
				
			||||
    for (var a = current.substr(0, j) ; j <= cl ; j ++) { | 
				
			||||
      abbrevs[a] = current | 
				
			||||
      a += current.charAt(j) | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  return abbrevs | 
				
			||||
} | 
				
			||||
 | 
				
			||||
function lexSort (a, b) { | 
				
			||||
  return a === b ? 0 : a > b ? 1 : -1 | 
				
			||||
} | 
				
			||||
@ -1,21 +0,0 @@
					 | 
				
			||||
{ | 
				
			||||
  "name": "abbrev", | 
				
			||||
  "version": "1.1.1", | 
				
			||||
  "description": "Like ruby's abbrev module, but in js", | 
				
			||||
  "author": "Isaac Z. Schlueter <i@izs.me>", | 
				
			||||
  "main": "abbrev.js", | 
				
			||||
  "scripts": { | 
				
			||||
    "test": "tap test.js --100", | 
				
			||||
    "preversion": "npm test", | 
				
			||||
    "postversion": "npm publish", | 
				
			||||
    "postpublish": "git push origin --all; git push origin --tags" | 
				
			||||
  }, | 
				
			||||
  "repository": "http://github.com/isaacs/abbrev-js", | 
				
			||||
  "license": "ISC", | 
				
			||||
  "devDependencies": { | 
				
			||||
    "tap": "^10.1" | 
				
			||||
  }, | 
				
			||||
  "files": [ | 
				
			||||
    "abbrev.js" | 
				
			||||
  ] | 
				
			||||
} | 
				
			||||
@ -1,20 +0,0 @@
					 | 
				
			||||
var Ajv = require('ajv'); | 
				
			||||
var ajv = new Ajv({allErrors: true}); | 
				
			||||
 | 
				
			||||
var schema = { | 
				
			||||
  "properties": { | 
				
			||||
    "foo": { "type": "string" }, | 
				
			||||
    "bar": { "type": "number", "maximum": 3 } | 
				
			||||
  } | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
var validate = ajv.compile(schema); | 
				
			||||
 | 
				
			||||
test({"foo": "abc", "bar": 2}); | 
				
			||||
test({"foo": 2, "bar": 4}); | 
				
			||||
 | 
				
			||||
function test(data) { | 
				
			||||
  var valid = validate(data); | 
				
			||||
  if (valid) console.log('Valid!'); | 
				
			||||
  else console.log('Invalid: ' + ajv.errorsText(validate.errors)); | 
				
			||||
} | 
				
			||||
@ -1,22 +0,0 @@
					 | 
				
			||||
The MIT License (MIT) | 
				
			||||
 | 
				
			||||
Copyright (c) 2015 Evgeny Poberezkin | 
				
			||||
 | 
				
			||||
Permission is hereby granted, free of charge, to any person obtaining a copy | 
				
			||||
of this software and associated documentation files (the "Software"), to deal | 
				
			||||
in the Software without restriction, including without limitation the rights | 
				
			||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | 
				
			||||
copies of the Software, and to permit persons to whom the Software is | 
				
			||||
furnished to do so, subject to the following conditions: | 
				
			||||
 | 
				
			||||
The above copyright notice and this permission notice shall be included in all | 
				
			||||
copies or substantial portions of the Software. | 
				
			||||
 | 
				
			||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
				
			||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
				
			||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | 
				
			||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
				
			||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 
				
			||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 
				
			||||
SOFTWARE. | 
				
			||||
 | 
				
			||||
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						
									
										
											File diff suppressed because one or more lines are too long
										
									
								
							
						
									
										
											File diff suppressed because one or more lines are too long
										
									
								
							
						
									
										
											File diff suppressed because one or more lines are too long
										
									
								
							
						
									
										
											File diff suppressed because one or more lines are too long
										
									
								
							
						@ -1,49 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
var KEYWORDS = [ | 
				
			||||
  'multipleOf', | 
				
			||||
  'maximum', | 
				
			||||
  'exclusiveMaximum', | 
				
			||||
  'minimum', | 
				
			||||
  'exclusiveMinimum', | 
				
			||||
  'maxLength', | 
				
			||||
  'minLength', | 
				
			||||
  'pattern', | 
				
			||||
  'additionalItems', | 
				
			||||
  'maxItems', | 
				
			||||
  'minItems', | 
				
			||||
  'uniqueItems', | 
				
			||||
  'maxProperties', | 
				
			||||
  'minProperties', | 
				
			||||
  'required', | 
				
			||||
  'additionalProperties', | 
				
			||||
  'enum', | 
				
			||||
  'format', | 
				
			||||
  'const' | 
				
			||||
]; | 
				
			||||
 | 
				
			||||
module.exports = function (metaSchema, keywordsJsonPointers) { | 
				
			||||
  for (var i=0; i<keywordsJsonPointers.length; i++) { | 
				
			||||
    metaSchema = JSON.parse(JSON.stringify(metaSchema)); | 
				
			||||
    var segments = keywordsJsonPointers[i].split('/'); | 
				
			||||
    var keywords = metaSchema; | 
				
			||||
    var j; | 
				
			||||
    for (j=1; j<segments.length; j++) | 
				
			||||
      keywords = keywords[segments[j]]; | 
				
			||||
 | 
				
			||||
    for (j=0; j<KEYWORDS.length; j++) { | 
				
			||||
      var key = KEYWORDS[j]; | 
				
			||||
      var schema = keywords[key]; | 
				
			||||
      if (schema) { | 
				
			||||
        keywords[key] = { | 
				
			||||
          anyOf: [ | 
				
			||||
            schema, | 
				
			||||
            { $ref: 'https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/$data.json#' } | 
				
			||||
          ] | 
				
			||||
        }; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  return metaSchema; | 
				
			||||
}; | 
				
			||||
@ -1,358 +0,0 @@
					 | 
				
			||||
declare var ajv: { 
 | 
				
			||||
  (options?: ajv.Options): ajv.Ajv; | 
				
			||||
  new (options?: ajv.Options): ajv.Ajv; | 
				
			||||
  ValidationError: ValidationError; | 
				
			||||
  MissingRefError: MissingRefError; | 
				
			||||
  $dataMetaSchema: object; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
declare namespace ajv { | 
				
			||||
  interface Ajv { | 
				
			||||
    /** | 
				
			||||
    * Validate data using schema | 
				
			||||
    * Schema will be compiled and cached (using serialized JSON as key, [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize by default).
 | 
				
			||||
    * @param  {string|object|Boolean} schemaKeyRef key, ref or schema object | 
				
			||||
    * @param  {Any} data to be validated | 
				
			||||
    * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`). | 
				
			||||
    */ | 
				
			||||
    validate(schemaKeyRef: object | string | boolean, data: any): boolean | Thenable<any>; | 
				
			||||
    /** | 
				
			||||
    * Create validating function for passed schema. | 
				
			||||
    * @param  {object|Boolean} schema schema object | 
				
			||||
    * @return {Function} validating function | 
				
			||||
    */ | 
				
			||||
    compile(schema: object | boolean): ValidateFunction; | 
				
			||||
    /** | 
				
			||||
    * Creates validating function for passed schema with asynchronous loading of missing schemas. | 
				
			||||
    * `loadSchema` option should be a function that accepts schema uri and node-style callback. | 
				
			||||
    * @this  Ajv | 
				
			||||
    * @param {object|Boolean} schema schema object | 
				
			||||
    * @param {Boolean} meta optional true to compile meta-schema; this parameter can be skipped | 
				
			||||
    * @param {Function} callback optional node-style callback, it is always called with 2 parameters: error (or null) and validating function. | 
				
			||||
    * @return {Thenable<ValidateFunction>} validating function | 
				
			||||
    */ | 
				
			||||
    compileAsync(schema: object | boolean, meta?: Boolean, callback?: (err: Error, validate: ValidateFunction) => any): Thenable<ValidateFunction>; | 
				
			||||
    /** | 
				
			||||
    * Adds schema to the instance. | 
				
			||||
    * @param {object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored. | 
				
			||||
    * @param {string} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`. | 
				
			||||
    * @return {Ajv} this for method chaining | 
				
			||||
    */ | 
				
			||||
    addSchema(schema: Array<object> | object, key?: string): Ajv; | 
				
			||||
    /** | 
				
			||||
    * Add schema that will be used to validate other schemas | 
				
			||||
    * options in META_IGNORE_OPTIONS are alway set to false | 
				
			||||
    * @param {object} schema schema object | 
				
			||||
    * @param {string} key optional schema key | 
				
			||||
    * @return {Ajv} this for method chaining | 
				
			||||
    */ | 
				
			||||
    addMetaSchema(schema: object, key?: string): Ajv; | 
				
			||||
    /** | 
				
			||||
    * Validate schema | 
				
			||||
    * @param {object|Boolean} schema schema to validate | 
				
			||||
    * @return {Boolean} true if schema is valid | 
				
			||||
    */ | 
				
			||||
    validateSchema(schema: object | boolean): boolean; | 
				
			||||
    /** | 
				
			||||
    * Get compiled schema from the instance by `key` or `ref`. | 
				
			||||
    * @param  {string} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id). | 
				
			||||
    * @return {Function} schema validating function (with property `schema`). | 
				
			||||
    */ | 
				
			||||
    getSchema(keyRef: string): ValidateFunction; | 
				
			||||
    /** | 
				
			||||
    * Remove cached schema(s). | 
				
			||||
    * If no parameter is passed all schemas but meta-schemas are removed. | 
				
			||||
    * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed. | 
				
			||||
    * Even if schema is referenced by other schemas it still can be removed as other schemas have local references. | 
				
			||||
    * @param  {string|object|RegExp|Boolean} schemaKeyRef key, ref, pattern to match key/ref or schema object | 
				
			||||
    * @return {Ajv} this for method chaining | 
				
			||||
    */ | 
				
			||||
    removeSchema(schemaKeyRef?: object | string | RegExp | boolean): Ajv; | 
				
			||||
    /** | 
				
			||||
    * Add custom format | 
				
			||||
    * @param {string} name format name | 
				
			||||
    * @param {string|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid) | 
				
			||||
    * @return {Ajv} this for method chaining | 
				
			||||
    */ | 
				
			||||
    addFormat(name: string, format: FormatValidator | FormatDefinition): Ajv; | 
				
			||||
    /** | 
				
			||||
    * Define custom keyword | 
				
			||||
    * @this  Ajv | 
				
			||||
    * @param {string} keyword custom keyword, should be a valid identifier, should be different from all standard, custom and macro keywords. | 
				
			||||
    * @param {object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`. | 
				
			||||
    * @return {Ajv} this for method chaining | 
				
			||||
    */ | 
				
			||||
    addKeyword(keyword: string, definition: KeywordDefinition): Ajv; | 
				
			||||
    /** | 
				
			||||
    * Get keyword definition | 
				
			||||
    * @this  Ajv | 
				
			||||
    * @param {string} keyword pre-defined or custom keyword. | 
				
			||||
    * @return {object|Boolean} custom keyword definition, `true` if it is a predefined keyword, `false` otherwise. | 
				
			||||
    */ | 
				
			||||
    getKeyword(keyword: string): object | boolean; | 
				
			||||
    /** | 
				
			||||
    * Remove keyword | 
				
			||||
    * @this  Ajv | 
				
			||||
    * @param {string} keyword pre-defined or custom keyword. | 
				
			||||
    * @return {Ajv} this for method chaining | 
				
			||||
    */ | 
				
			||||
    removeKeyword(keyword: string): Ajv; | 
				
			||||
    /** | 
				
			||||
    * Convert array of error message objects to string | 
				
			||||
    * @param  {Array<object>} errors optional array of validation errors, if not passed errors from the instance are used. | 
				
			||||
    * @param  {object} options optional options with properties `separator` and `dataVar`. | 
				
			||||
    * @return {string} human readable string with all errors descriptions | 
				
			||||
    */ | 
				
			||||
    errorsText(errors?: Array<ErrorObject>, options?: ErrorsTextOptions): string; | 
				
			||||
    errors?: Array<ErrorObject>; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface Thenable <R> { | 
				
			||||
    then <U> (onFulfilled?: (value: R) => U | Thenable<U>, onRejected?: (error: any) => U | Thenable<U>): Thenable<U>; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface ValidateFunction { | 
				
			||||
    ( | 
				
			||||
      data: any, | 
				
			||||
      dataPath?: string, | 
				
			||||
      parentData?: object | Array<any>, | 
				
			||||
      parentDataProperty?: string | number, | 
				
			||||
      rootData?: object | Array<any> | 
				
			||||
    ): boolean | Thenable<any>; | 
				
			||||
    schema?: object | boolean; | 
				
			||||
    errors?: null | Array<ErrorObject>; | 
				
			||||
    refs?: object; | 
				
			||||
    refVal?: Array<any>; | 
				
			||||
    root?: ValidateFunction | object; | 
				
			||||
    $async?: true; | 
				
			||||
    source?: object; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface Options { | 
				
			||||
    $data?: boolean; | 
				
			||||
    allErrors?: boolean; | 
				
			||||
    verbose?: boolean; | 
				
			||||
    jsonPointers?: boolean; | 
				
			||||
    uniqueItems?: boolean; | 
				
			||||
    unicode?: boolean; | 
				
			||||
    format?: string; | 
				
			||||
    formats?: object; | 
				
			||||
    unknownFormats?: true | string[] | 'ignore'; | 
				
			||||
    schemas?: Array<object> | object; | 
				
			||||
    schemaId?: '$id' | 'id'; | 
				
			||||
    missingRefs?: true | 'ignore' | 'fail'; | 
				
			||||
    extendRefs?: true | 'ignore' | 'fail'; | 
				
			||||
    loadSchema?: (uri: string, cb?: (err: Error, schema: object) => void) => Thenable<object | boolean>; | 
				
			||||
    removeAdditional?: boolean | 'all' | 'failing'; | 
				
			||||
    useDefaults?: boolean | 'shared'; | 
				
			||||
    coerceTypes?: boolean | 'array'; | 
				
			||||
    async?: boolean | string; | 
				
			||||
    transpile?: string | ((code: string) => string); | 
				
			||||
    meta?: boolean | object; | 
				
			||||
    validateSchema?: boolean | 'log'; | 
				
			||||
    addUsedSchema?: boolean; | 
				
			||||
    inlineRefs?: boolean | number; | 
				
			||||
    passContext?: boolean; | 
				
			||||
    loopRequired?: number; | 
				
			||||
    ownProperties?: boolean; | 
				
			||||
    multipleOfPrecision?: boolean | number; | 
				
			||||
    errorDataPath?: string, | 
				
			||||
    messages?: boolean; | 
				
			||||
    sourceCode?: boolean; | 
				
			||||
    processCode?: (code: string) => string; | 
				
			||||
    cache?: object; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  type FormatValidator = string | RegExp | ((data: string) => boolean | Thenable<any>); | 
				
			||||
 | 
				
			||||
  interface FormatDefinition { | 
				
			||||
    validate: FormatValidator; | 
				
			||||
    compare: (data1: string, data2: string) => number; | 
				
			||||
    async?: boolean; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface KeywordDefinition { | 
				
			||||
    type?: string | Array<string>; | 
				
			||||
    async?: boolean; | 
				
			||||
    $data?: boolean; | 
				
			||||
    errors?: boolean | string; | 
				
			||||
    metaSchema?: object; | 
				
			||||
    // schema: false makes validate not to expect schema (ValidateFunction)
 | 
				
			||||
    schema?: boolean; | 
				
			||||
    modifying?: boolean; | 
				
			||||
    valid?: boolean; | 
				
			||||
    // one and only one of the following properties should be present
 | 
				
			||||
    validate?: SchemaValidateFunction | ValidateFunction; | 
				
			||||
    compile?: (schema: any, parentSchema: object, it: CompilationContext) => ValidateFunction; | 
				
			||||
    macro?: (schema: any, parentSchema: object, it: CompilationContext) => object | boolean; | 
				
			||||
    inline?: (it: CompilationContext, keyword: string, schema: any, parentSchema: object) => string; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface CompilationContext { | 
				
			||||
    level: number; | 
				
			||||
    dataLevel: number; | 
				
			||||
    schema: any; | 
				
			||||
    schemaPath: string; | 
				
			||||
    baseId: string; | 
				
			||||
    async: boolean; | 
				
			||||
    opts: Options; | 
				
			||||
    formats: { | 
				
			||||
      [index: string]: FormatDefinition | undefined; | 
				
			||||
    }; | 
				
			||||
    compositeRule: boolean; | 
				
			||||
    validate: (schema: object) => boolean; | 
				
			||||
    util: { | 
				
			||||
      copy(obj: any, target?: any): any; | 
				
			||||
      toHash(source: string[]): { [index: string]: true | undefined }; | 
				
			||||
      equal(obj: any, target: any): boolean; | 
				
			||||
      getProperty(str: string): string; | 
				
			||||
      schemaHasRules(schema: object, rules: any): string; | 
				
			||||
      escapeQuotes(str: string): string; | 
				
			||||
      toQuotedString(str: string): string; | 
				
			||||
      getData(jsonPointer: string, dataLevel: number, paths: string[]): string; | 
				
			||||
      escapeJsonPointer(str: string): string; | 
				
			||||
      unescapeJsonPointer(str: string): string; | 
				
			||||
      escapeFragment(str: string): string; | 
				
			||||
      unescapeFragment(str: string): string; | 
				
			||||
    }; | 
				
			||||
    self: Ajv; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface SchemaValidateFunction { | 
				
			||||
    ( | 
				
			||||
      schema: any, | 
				
			||||
      data: any, | 
				
			||||
      parentSchema?: object, | 
				
			||||
      dataPath?: string, | 
				
			||||
      parentData?: object | Array<any>, | 
				
			||||
      parentDataProperty?: string | number, | 
				
			||||
      rootData?: object | Array<any> | 
				
			||||
    ): boolean | Thenable<any>; | 
				
			||||
    errors?: Array<ErrorObject>; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface ErrorsTextOptions { | 
				
			||||
    separator?: string; | 
				
			||||
    dataVar?: string; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface ErrorObject { | 
				
			||||
    keyword: string; | 
				
			||||
    dataPath: string; | 
				
			||||
    schemaPath: string; | 
				
			||||
    params: ErrorParameters; | 
				
			||||
    // Added to validation errors of propertyNames keyword schema
 | 
				
			||||
    propertyName?: string; | 
				
			||||
    // Excluded if messages set to false.
 | 
				
			||||
    message?: string; | 
				
			||||
    // These are added with the `verbose` option.
 | 
				
			||||
    schema?: any; | 
				
			||||
    parentSchema?: object; | 
				
			||||
    data?: any; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  type ErrorParameters = RefParams | LimitParams | AdditionalPropertiesParams | | 
				
			||||
                          DependenciesParams | FormatParams | ComparisonParams | | 
				
			||||
                          MultipleOfParams | PatternParams | RequiredParams | | 
				
			||||
                          TypeParams | UniqueItemsParams | CustomParams | | 
				
			||||
                          PatternGroupsParams | PatternRequiredParams | | 
				
			||||
                          PropertyNamesParams | SwitchParams | NoParams | EnumParams; | 
				
			||||
 | 
				
			||||
  interface RefParams { | 
				
			||||
    ref: string; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface LimitParams { | 
				
			||||
    limit: number; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface AdditionalPropertiesParams { | 
				
			||||
    additionalProperty: string; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface DependenciesParams { | 
				
			||||
    property: string; | 
				
			||||
    missingProperty: string; | 
				
			||||
    depsCount: number; | 
				
			||||
    deps: string; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface FormatParams { | 
				
			||||
    format: string | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface ComparisonParams { | 
				
			||||
    comparison: string; | 
				
			||||
    limit: number | string; | 
				
			||||
    exclusive: boolean; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface MultipleOfParams { | 
				
			||||
    multipleOf: number; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface PatternParams { | 
				
			||||
    pattern: string; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface RequiredParams { | 
				
			||||
    missingProperty: string; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface TypeParams { | 
				
			||||
    type: string; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface UniqueItemsParams { | 
				
			||||
    i: number; | 
				
			||||
    j: number; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface CustomParams { | 
				
			||||
    keyword: string; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface PatternGroupsParams { | 
				
			||||
    reason: string; | 
				
			||||
    limit: number; | 
				
			||||
    pattern: string; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface PatternRequiredParams { | 
				
			||||
    missingPattern: string; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface PropertyNamesParams { | 
				
			||||
    propertyName: string; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface SwitchParams { | 
				
			||||
    caseIndex: number; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  interface NoParams {} | 
				
			||||
 | 
				
			||||
  interface EnumParams { | 
				
			||||
    allowedValues: Array<any>; | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
declare class ValidationError extends Error { | 
				
			||||
  constructor(errors: Array<ajv.ErrorObject>); | 
				
			||||
 | 
				
			||||
  message: string; | 
				
			||||
  errors: Array<ajv.ErrorObject>; | 
				
			||||
  ajv: true; | 
				
			||||
  validation: true; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
declare class MissingRefError extends Error { | 
				
			||||
  constructor(baseId: string, ref: string, message?: string); | 
				
			||||
  static message: (baseId: string, ref: string) => string; | 
				
			||||
 | 
				
			||||
  message: string; | 
				
			||||
  missingRef: string; | 
				
			||||
  missingSchema: string; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
export = ajv; | 
				
			||||
@ -1,502 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
var compileSchema = require('./compile') | 
				
			||||
  , resolve = require('./compile/resolve') | 
				
			||||
  , Cache = require('./cache') | 
				
			||||
  , SchemaObject = require('./compile/schema_obj') | 
				
			||||
  , stableStringify = require('fast-json-stable-stringify') | 
				
			||||
  , formats = require('./compile/formats') | 
				
			||||
  , rules = require('./compile/rules') | 
				
			||||
  , $dataMetaSchema = require('./$data') | 
				
			||||
  , patternGroups = require('./patternGroups') | 
				
			||||
  , util = require('./compile/util') | 
				
			||||
  , co = require('co'); | 
				
			||||
 | 
				
			||||
module.exports = Ajv; | 
				
			||||
 | 
				
			||||
Ajv.prototype.validate = validate; | 
				
			||||
Ajv.prototype.compile = compile; | 
				
			||||
Ajv.prototype.addSchema = addSchema; | 
				
			||||
Ajv.prototype.addMetaSchema = addMetaSchema; | 
				
			||||
Ajv.prototype.validateSchema = validateSchema; | 
				
			||||
Ajv.prototype.getSchema = getSchema; | 
				
			||||
Ajv.prototype.removeSchema = removeSchema; | 
				
			||||
Ajv.prototype.addFormat = addFormat; | 
				
			||||
Ajv.prototype.errorsText = errorsText; | 
				
			||||
 | 
				
			||||
Ajv.prototype._addSchema = _addSchema; | 
				
			||||
Ajv.prototype._compile = _compile; | 
				
			||||
 | 
				
			||||
Ajv.prototype.compileAsync = require('./compile/async'); | 
				
			||||
var customKeyword = require('./keyword'); | 
				
			||||
Ajv.prototype.addKeyword = customKeyword.add; | 
				
			||||
Ajv.prototype.getKeyword = customKeyword.get; | 
				
			||||
Ajv.prototype.removeKeyword = customKeyword.remove; | 
				
			||||
 | 
				
			||||
var errorClasses = require('./compile/error_classes'); | 
				
			||||
Ajv.ValidationError = errorClasses.Validation; | 
				
			||||
Ajv.MissingRefError = errorClasses.MissingRef; | 
				
			||||
Ajv.$dataMetaSchema = $dataMetaSchema; | 
				
			||||
 | 
				
			||||
var META_SCHEMA_ID = 'http://json-schema.org/draft-06/schema'; | 
				
			||||
 | 
				
			||||
var META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes' ]; | 
				
			||||
var META_SUPPORT_DATA = ['/properties']; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Creates validator instance. | 
				
			||||
 * Usage: `Ajv(opts)` | 
				
			||||
 * @param {Object} opts optional options | 
				
			||||
 * @return {Object} ajv instance | 
				
			||||
 */ | 
				
			||||
function Ajv(opts) { | 
				
			||||
  if (!(this instanceof Ajv)) return new Ajv(opts); | 
				
			||||
  opts = this._opts = util.copy(opts) || {}; | 
				
			||||
  setLogger(this); | 
				
			||||
  this._schemas = {}; | 
				
			||||
  this._refs = {}; | 
				
			||||
  this._fragments = {}; | 
				
			||||
  this._formats = formats(opts.format); | 
				
			||||
  var schemaUriFormat = this._schemaUriFormat = this._formats['uri-reference']; | 
				
			||||
  this._schemaUriFormatFunc = function (str) { return schemaUriFormat.test(str); }; | 
				
			||||
 | 
				
			||||
  this._cache = opts.cache || new Cache; | 
				
			||||
  this._loadingSchemas = {}; | 
				
			||||
  this._compilations = []; | 
				
			||||
  this.RULES = rules(); | 
				
			||||
  this._getId = chooseGetId(opts); | 
				
			||||
 | 
				
			||||
  opts.loopRequired = opts.loopRequired || Infinity; | 
				
			||||
  if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true; | 
				
			||||
  if (opts.serialize === undefined) opts.serialize = stableStringify; | 
				
			||||
  this._metaOpts = getMetaSchemaOptions(this); | 
				
			||||
 | 
				
			||||
  if (opts.formats) addInitialFormats(this); | 
				
			||||
  addDraft6MetaSchema(this); | 
				
			||||
  if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta); | 
				
			||||
  addInitialSchemas(this); | 
				
			||||
  if (opts.patternGroups) patternGroups(this); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Validate data using schema | 
				
			||||
 * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize.
 | 
				
			||||
 * @this   Ajv | 
				
			||||
 * @param  {String|Object} schemaKeyRef key, ref or schema object | 
				
			||||
 * @param  {Any} data to be validated | 
				
			||||
 * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`). | 
				
			||||
 */ | 
				
			||||
function validate(schemaKeyRef, data) { | 
				
			||||
  var v; | 
				
			||||
  if (typeof schemaKeyRef == 'string') { | 
				
			||||
    v = this.getSchema(schemaKeyRef); | 
				
			||||
    if (!v) throw new Error('no schema with key or ref "' + schemaKeyRef + '"'); | 
				
			||||
  } else { | 
				
			||||
    var schemaObj = this._addSchema(schemaKeyRef); | 
				
			||||
    v = schemaObj.validate || this._compile(schemaObj); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  var valid = v(data); | 
				
			||||
  if (v.$async === true) | 
				
			||||
    return this._opts.async == '*' ? co(valid) : valid; | 
				
			||||
  this.errors = v.errors; | 
				
			||||
  return valid; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Create validating function for passed schema. | 
				
			||||
 * @this   Ajv | 
				
			||||
 * @param  {Object} schema schema object | 
				
			||||
 * @param  {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords. | 
				
			||||
 * @return {Function} validating function | 
				
			||||
 */ | 
				
			||||
function compile(schema, _meta) { | 
				
			||||
  var schemaObj = this._addSchema(schema, undefined, _meta); | 
				
			||||
  return schemaObj.validate || this._compile(schemaObj); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Adds schema to the instance. | 
				
			||||
 * @this   Ajv | 
				
			||||
 * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored. | 
				
			||||
 * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`. | 
				
			||||
 * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead. | 
				
			||||
 * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead. | 
				
			||||
 * @return {Ajv} this for method chaining | 
				
			||||
 */ | 
				
			||||
function addSchema(schema, key, _skipValidation, _meta) { | 
				
			||||
  if (Array.isArray(schema)){ | 
				
			||||
    for (var i=0; i<schema.length; i++) this.addSchema(schema[i], undefined, _skipValidation, _meta); | 
				
			||||
    return this; | 
				
			||||
  } | 
				
			||||
  var id = this._getId(schema); | 
				
			||||
  if (id !== undefined && typeof id != 'string') | 
				
			||||
    throw new Error('schema id must be string'); | 
				
			||||
  key = resolve.normalizeId(key || id); | 
				
			||||
  checkUnique(this, key); | 
				
			||||
  this._schemas[key] = this._addSchema(schema, _skipValidation, _meta, true); | 
				
			||||
  return this; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Add schema that will be used to validate other schemas | 
				
			||||
 * options in META_IGNORE_OPTIONS are alway set to false | 
				
			||||
 * @this   Ajv | 
				
			||||
 * @param {Object} schema schema object | 
				
			||||
 * @param {String} key optional schema key | 
				
			||||
 * @param {Boolean} skipValidation true to skip schema validation, can be used to override validateSchema option for meta-schema | 
				
			||||
 * @return {Ajv} this for method chaining | 
				
			||||
 */ | 
				
			||||
function addMetaSchema(schema, key, skipValidation) { | 
				
			||||
  this.addSchema(schema, key, skipValidation, true); | 
				
			||||
  return this; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Validate schema | 
				
			||||
 * @this   Ajv | 
				
			||||
 * @param {Object} schema schema to validate | 
				
			||||
 * @param {Boolean} throwOrLogError pass true to throw (or log) an error if invalid | 
				
			||||
 * @return {Boolean} true if schema is valid | 
				
			||||
 */ | 
				
			||||
function validateSchema(schema, throwOrLogError) { | 
				
			||||
  var $schema = schema.$schema; | 
				
			||||
  if ($schema !== undefined && typeof $schema != 'string') | 
				
			||||
    throw new Error('$schema must be a string'); | 
				
			||||
  $schema = $schema || this._opts.defaultMeta || defaultMeta(this); | 
				
			||||
  if (!$schema) { | 
				
			||||
    this.logger.warn('meta-schema not available'); | 
				
			||||
    this.errors = null; | 
				
			||||
    return true; | 
				
			||||
  } | 
				
			||||
  var currentUriFormat = this._formats.uri; | 
				
			||||
  this._formats.uri = typeof currentUriFormat == 'function' | 
				
			||||
                      ? this._schemaUriFormatFunc | 
				
			||||
                      : this._schemaUriFormat; | 
				
			||||
  var valid; | 
				
			||||
  try { valid = this.validate($schema, schema); } | 
				
			||||
  finally { this._formats.uri = currentUriFormat; } | 
				
			||||
  if (!valid && throwOrLogError) { | 
				
			||||
    var message = 'schema is invalid: ' + this.errorsText(); | 
				
			||||
    if (this._opts.validateSchema == 'log') this.logger.error(message); | 
				
			||||
    else throw new Error(message); | 
				
			||||
  } | 
				
			||||
  return valid; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function defaultMeta(self) { | 
				
			||||
  var meta = self._opts.meta; | 
				
			||||
  self._opts.defaultMeta = typeof meta == 'object' | 
				
			||||
                            ? self._getId(meta) || meta | 
				
			||||
                            : self.getSchema(META_SCHEMA_ID) | 
				
			||||
                              ? META_SCHEMA_ID | 
				
			||||
                              : undefined; | 
				
			||||
  return self._opts.defaultMeta; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Get compiled schema from the instance by `key` or `ref`. | 
				
			||||
 * @this   Ajv | 
				
			||||
 * @param  {String} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id). | 
				
			||||
 * @return {Function} schema validating function (with property `schema`). | 
				
			||||
 */ | 
				
			||||
function getSchema(keyRef) { | 
				
			||||
  var schemaObj = _getSchemaObj(this, keyRef); | 
				
			||||
  switch (typeof schemaObj) { | 
				
			||||
    case 'object': return schemaObj.validate || this._compile(schemaObj); | 
				
			||||
    case 'string': return this.getSchema(schemaObj); | 
				
			||||
    case 'undefined': return _getSchemaFragment(this, keyRef); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function _getSchemaFragment(self, ref) { | 
				
			||||
  var res = resolve.schema.call(self, { schema: {} }, ref); | 
				
			||||
  if (res) { | 
				
			||||
    var schema = res.schema | 
				
			||||
      , root = res.root | 
				
			||||
      , baseId = res.baseId; | 
				
			||||
    var v = compileSchema.call(self, schema, root, undefined, baseId); | 
				
			||||
    self._fragments[ref] = new SchemaObject({ | 
				
			||||
      ref: ref, | 
				
			||||
      fragment: true, | 
				
			||||
      schema: schema, | 
				
			||||
      root: root, | 
				
			||||
      baseId: baseId, | 
				
			||||
      validate: v | 
				
			||||
    }); | 
				
			||||
    return v; | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function _getSchemaObj(self, keyRef) { | 
				
			||||
  keyRef = resolve.normalizeId(keyRef); | 
				
			||||
  return self._schemas[keyRef] || self._refs[keyRef] || self._fragments[keyRef]; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Remove cached schema(s). | 
				
			||||
 * If no parameter is passed all schemas but meta-schemas are removed. | 
				
			||||
 * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed. | 
				
			||||
 * Even if schema is referenced by other schemas it still can be removed as other schemas have local references. | 
				
			||||
 * @this   Ajv | 
				
			||||
 * @param  {String|Object|RegExp} schemaKeyRef key, ref, pattern to match key/ref or schema object | 
				
			||||
 * @return {Ajv} this for method chaining | 
				
			||||
 */ | 
				
			||||
function removeSchema(schemaKeyRef) { | 
				
			||||
  if (schemaKeyRef instanceof RegExp) { | 
				
			||||
    _removeAllSchemas(this, this._schemas, schemaKeyRef); | 
				
			||||
    _removeAllSchemas(this, this._refs, schemaKeyRef); | 
				
			||||
    return this; | 
				
			||||
  } | 
				
			||||
  switch (typeof schemaKeyRef) { | 
				
			||||
    case 'undefined': | 
				
			||||
      _removeAllSchemas(this, this._schemas); | 
				
			||||
      _removeAllSchemas(this, this._refs); | 
				
			||||
      this._cache.clear(); | 
				
			||||
      return this; | 
				
			||||
    case 'string': | 
				
			||||
      var schemaObj = _getSchemaObj(this, schemaKeyRef); | 
				
			||||
      if (schemaObj) this._cache.del(schemaObj.cacheKey); | 
				
			||||
      delete this._schemas[schemaKeyRef]; | 
				
			||||
      delete this._refs[schemaKeyRef]; | 
				
			||||
      return this; | 
				
			||||
    case 'object': | 
				
			||||
      var serialize = this._opts.serialize; | 
				
			||||
      var cacheKey = serialize ? serialize(schemaKeyRef) : schemaKeyRef; | 
				
			||||
      this._cache.del(cacheKey); | 
				
			||||
      var id = this._getId(schemaKeyRef); | 
				
			||||
      if (id) { | 
				
			||||
        id = resolve.normalizeId(id); | 
				
			||||
        delete this._schemas[id]; | 
				
			||||
        delete this._refs[id]; | 
				
			||||
      } | 
				
			||||
  } | 
				
			||||
  return this; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function _removeAllSchemas(self, schemas, regex) { | 
				
			||||
  for (var keyRef in schemas) { | 
				
			||||
    var schemaObj = schemas[keyRef]; | 
				
			||||
    if (!schemaObj.meta && (!regex || regex.test(keyRef))) { | 
				
			||||
      self._cache.del(schemaObj.cacheKey); | 
				
			||||
      delete schemas[keyRef]; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/* @this   Ajv */ | 
				
			||||
function _addSchema(schema, skipValidation, meta, shouldAddSchema) { | 
				
			||||
  if (typeof schema != 'object' && typeof schema != 'boolean') | 
				
			||||
    throw new Error('schema should be object or boolean'); | 
				
			||||
  var serialize = this._opts.serialize; | 
				
			||||
  var cacheKey = serialize ? serialize(schema) : schema; | 
				
			||||
  var cached = this._cache.get(cacheKey); | 
				
			||||
  if (cached) return cached; | 
				
			||||
 | 
				
			||||
  shouldAddSchema = shouldAddSchema || this._opts.addUsedSchema !== false; | 
				
			||||
 | 
				
			||||
  var id = resolve.normalizeId(this._getId(schema)); | 
				
			||||
  if (id && shouldAddSchema) checkUnique(this, id); | 
				
			||||
 | 
				
			||||
  var willValidate = this._opts.validateSchema !== false && !skipValidation; | 
				
			||||
  var recursiveMeta; | 
				
			||||
  if (willValidate && !(recursiveMeta = id && id == resolve.normalizeId(schema.$schema))) | 
				
			||||
    this.validateSchema(schema, true); | 
				
			||||
 | 
				
			||||
  var localRefs = resolve.ids.call(this, schema); | 
				
			||||
 | 
				
			||||
  var schemaObj = new SchemaObject({ | 
				
			||||
    id: id, | 
				
			||||
    schema: schema, | 
				
			||||
    localRefs: localRefs, | 
				
			||||
    cacheKey: cacheKey, | 
				
			||||
    meta: meta | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  if (id[0] != '#' && shouldAddSchema) this._refs[id] = schemaObj; | 
				
			||||
  this._cache.put(cacheKey, schemaObj); | 
				
			||||
 | 
				
			||||
  if (willValidate && recursiveMeta) this.validateSchema(schema, true); | 
				
			||||
 | 
				
			||||
  return schemaObj; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/* @this   Ajv */ | 
				
			||||
function _compile(schemaObj, root) { | 
				
			||||
  if (schemaObj.compiling) { | 
				
			||||
    schemaObj.validate = callValidate; | 
				
			||||
    callValidate.schema = schemaObj.schema; | 
				
			||||
    callValidate.errors = null; | 
				
			||||
    callValidate.root = root ? root : callValidate; | 
				
			||||
    if (schemaObj.schema.$async === true) | 
				
			||||
      callValidate.$async = true; | 
				
			||||
    return callValidate; | 
				
			||||
  } | 
				
			||||
  schemaObj.compiling = true; | 
				
			||||
 | 
				
			||||
  var currentOpts; | 
				
			||||
  if (schemaObj.meta) { | 
				
			||||
    currentOpts = this._opts; | 
				
			||||
    this._opts = this._metaOpts; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  var v; | 
				
			||||
  try { v = compileSchema.call(this, schemaObj.schema, root, schemaObj.localRefs); } | 
				
			||||
  finally { | 
				
			||||
    schemaObj.compiling = false; | 
				
			||||
    if (schemaObj.meta) this._opts = currentOpts; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  schemaObj.validate = v; | 
				
			||||
  schemaObj.refs = v.refs; | 
				
			||||
  schemaObj.refVal = v.refVal; | 
				
			||||
  schemaObj.root = v.root; | 
				
			||||
  return v; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
  function callValidate() { | 
				
			||||
    var _validate = schemaObj.validate; | 
				
			||||
    var result = _validate.apply(null, arguments); | 
				
			||||
    callValidate.errors = _validate.errors; | 
				
			||||
    return result; | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function chooseGetId(opts) { | 
				
			||||
  switch (opts.schemaId) { | 
				
			||||
    case '$id': return _get$Id; | 
				
			||||
    case 'id': return _getId; | 
				
			||||
    default: return _get$IdOrId; | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/* @this   Ajv */ | 
				
			||||
function _getId(schema) { | 
				
			||||
  if (schema.$id) this.logger.warn('schema $id ignored', schema.$id); | 
				
			||||
  return schema.id; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/* @this   Ajv */ | 
				
			||||
function _get$Id(schema) { | 
				
			||||
  if (schema.id) this.logger.warn('schema id ignored', schema.id); | 
				
			||||
  return schema.$id; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function _get$IdOrId(schema) { | 
				
			||||
  if (schema.$id && schema.id && schema.$id != schema.id) | 
				
			||||
    throw new Error('schema $id is different from id'); | 
				
			||||
  return schema.$id || schema.id; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Convert array of error message objects to string | 
				
			||||
 * @this   Ajv | 
				
			||||
 * @param  {Array<Object>} errors optional array of validation errors, if not passed errors from the instance are used. | 
				
			||||
 * @param  {Object} options optional options with properties `separator` and `dataVar`. | 
				
			||||
 * @return {String} human readable string with all errors descriptions | 
				
			||||
 */ | 
				
			||||
function errorsText(errors, options) { | 
				
			||||
  errors = errors || this.errors; | 
				
			||||
  if (!errors) return 'No errors'; | 
				
			||||
  options = options || {}; | 
				
			||||
  var separator = options.separator === undefined ? ', ' : options.separator; | 
				
			||||
  var dataVar = options.dataVar === undefined ? 'data' : options.dataVar; | 
				
			||||
 | 
				
			||||
  var text = ''; | 
				
			||||
  for (var i=0; i<errors.length; i++) { | 
				
			||||
    var e = errors[i]; | 
				
			||||
    if (e) text += dataVar + e.dataPath + ' ' + e.message + separator; | 
				
			||||
  } | 
				
			||||
  return text.slice(0, -separator.length); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Add custom format | 
				
			||||
 * @this   Ajv | 
				
			||||
 * @param {String} name format name | 
				
			||||
 * @param {String|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid) | 
				
			||||
 * @return {Ajv} this for method chaining | 
				
			||||
 */ | 
				
			||||
function addFormat(name, format) { | 
				
			||||
  if (typeof format == 'string') format = new RegExp(format); | 
				
			||||
  this._formats[name] = format; | 
				
			||||
  return this; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function addDraft6MetaSchema(self) { | 
				
			||||
  var $dataSchema; | 
				
			||||
  if (self._opts.$data) { | 
				
			||||
    $dataSchema = require('./refs/$data.json'); | 
				
			||||
    self.addMetaSchema($dataSchema, $dataSchema.$id, true); | 
				
			||||
  } | 
				
			||||
  if (self._opts.meta === false) return; | 
				
			||||
  var metaSchema = require('./refs/json-schema-draft-06.json'); | 
				
			||||
  if (self._opts.$data) metaSchema = $dataMetaSchema(metaSchema, META_SUPPORT_DATA); | 
				
			||||
  self.addMetaSchema(metaSchema, META_SCHEMA_ID, true); | 
				
			||||
  self._refs['http://json-schema.org/schema'] = META_SCHEMA_ID; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function addInitialSchemas(self) { | 
				
			||||
  var optsSchemas = self._opts.schemas; | 
				
			||||
  if (!optsSchemas) return; | 
				
			||||
  if (Array.isArray(optsSchemas)) self.addSchema(optsSchemas); | 
				
			||||
  else for (var key in optsSchemas) self.addSchema(optsSchemas[key], key); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function addInitialFormats(self) { | 
				
			||||
  for (var name in self._opts.formats) { | 
				
			||||
    var format = self._opts.formats[name]; | 
				
			||||
    self.addFormat(name, format); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function checkUnique(self, id) { | 
				
			||||
  if (self._schemas[id] || self._refs[id]) | 
				
			||||
    throw new Error('schema with key or id "' + id + '" already exists'); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function getMetaSchemaOptions(self) { | 
				
			||||
  var metaOpts = util.copy(self._opts); | 
				
			||||
  for (var i=0; i<META_IGNORE_OPTIONS.length; i++) | 
				
			||||
    delete metaOpts[META_IGNORE_OPTIONS[i]]; | 
				
			||||
  return metaOpts; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function setLogger(self) { | 
				
			||||
  var logger = self._opts.logger; | 
				
			||||
  if (logger === false) { | 
				
			||||
    self.logger = {log: noop, warn: noop, error: noop}; | 
				
			||||
  } else { | 
				
			||||
    if (logger === undefined) logger = console; | 
				
			||||
    if (!(typeof logger == 'object' && logger.log && logger.warn && logger.error)) | 
				
			||||
      throw new Error('logger must implement log, warn and error methods'); | 
				
			||||
    self.logger = logger; | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function noop() {} | 
				
			||||
@ -1,26 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
var Cache = module.exports = function Cache() { | 
				
			||||
  this._cache = {}; | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
Cache.prototype.put = function Cache_put(key, value) { | 
				
			||||
  this._cache[key] = value; | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
Cache.prototype.get = function Cache_get(key) { | 
				
			||||
  return this._cache[key]; | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
Cache.prototype.del = function Cache_del(key) { | 
				
			||||
  delete this._cache[key]; | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
Cache.prototype.clear = function Cache_clear() { | 
				
			||||
  this._cache = {}; | 
				
			||||
}; | 
				
			||||
@ -1,31 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
//all requires must be explicit because browserify won't work with dynamic requires
 | 
				
			||||
module.exports = { | 
				
			||||
  '$ref': require('../dotjs/ref'), | 
				
			||||
  allOf: require('../dotjs/allOf'), | 
				
			||||
  anyOf: require('../dotjs/anyOf'), | 
				
			||||
  const: require('../dotjs/const'), | 
				
			||||
  contains: require('../dotjs/contains'), | 
				
			||||
  dependencies: require('../dotjs/dependencies'), | 
				
			||||
  'enum': require('../dotjs/enum'), | 
				
			||||
  format: require('../dotjs/format'), | 
				
			||||
  items: require('../dotjs/items'), | 
				
			||||
  maximum: require('../dotjs/_limit'), | 
				
			||||
  minimum: require('../dotjs/_limit'), | 
				
			||||
  maxItems: require('../dotjs/_limitItems'), | 
				
			||||
  minItems: require('../dotjs/_limitItems'), | 
				
			||||
  maxLength: require('../dotjs/_limitLength'), | 
				
			||||
  minLength: require('../dotjs/_limitLength'), | 
				
			||||
  maxProperties: require('../dotjs/_limitProperties'), | 
				
			||||
  minProperties: require('../dotjs/_limitProperties'), | 
				
			||||
  multipleOf: require('../dotjs/multipleOf'), | 
				
			||||
  not: require('../dotjs/not'), | 
				
			||||
  oneOf: require('../dotjs/oneOf'), | 
				
			||||
  pattern: require('../dotjs/pattern'), | 
				
			||||
  properties: require('../dotjs/properties'), | 
				
			||||
  propertyNames: require('../dotjs/propertyNames'), | 
				
			||||
  required: require('../dotjs/required'), | 
				
			||||
  uniqueItems: require('../dotjs/uniqueItems'), | 
				
			||||
  validate: require('../dotjs/validate') | 
				
			||||
}; | 
				
			||||
@ -1,90 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
var MissingRefError = require('./error_classes').MissingRef; | 
				
			||||
 | 
				
			||||
module.exports = compileAsync; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Creates validating function for passed schema with asynchronous loading of missing schemas. | 
				
			||||
 * `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema. | 
				
			||||
 * @this  Ajv | 
				
			||||
 * @param {Object}   schema schema object | 
				
			||||
 * @param {Boolean}  meta optional true to compile meta-schema; this parameter can be skipped | 
				
			||||
 * @param {Function} callback an optional node-style callback, it is called with 2 parameters: error (or null) and validating function. | 
				
			||||
 * @return {Promise} promise that resolves with a validating function. | 
				
			||||
 */ | 
				
			||||
function compileAsync(schema, meta, callback) { | 
				
			||||
  /* eslint no-shadow: 0 */ | 
				
			||||
  /* global Promise */ | 
				
			||||
  /* jshint validthis: true */ | 
				
			||||
  var self = this; | 
				
			||||
  if (typeof this._opts.loadSchema != 'function') | 
				
			||||
    throw new Error('options.loadSchema should be a function'); | 
				
			||||
 | 
				
			||||
  if (typeof meta == 'function') { | 
				
			||||
    callback = meta; | 
				
			||||
    meta = undefined; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  var p = loadMetaSchemaOf(schema).then(function () { | 
				
			||||
    var schemaObj = self._addSchema(schema, undefined, meta); | 
				
			||||
    return schemaObj.validate || _compileAsync(schemaObj); | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  if (callback) { | 
				
			||||
    p.then( | 
				
			||||
      function(v) { callback(null, v); }, | 
				
			||||
      callback | 
				
			||||
    ); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  return p; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
  function loadMetaSchemaOf(sch) { | 
				
			||||
    var $schema = sch.$schema; | 
				
			||||
    return $schema && !self.getSchema($schema) | 
				
			||||
            ? compileAsync.call(self, { $ref: $schema }, true) | 
				
			||||
            : Promise.resolve(); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
  function _compileAsync(schemaObj) { | 
				
			||||
    try { return self._compile(schemaObj); } | 
				
			||||
    catch(e) { | 
				
			||||
      if (e instanceof MissingRefError) return loadMissingSchema(e); | 
				
			||||
      throw e; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    function loadMissingSchema(e) { | 
				
			||||
      var ref = e.missingSchema; | 
				
			||||
      if (added(ref)) throw new Error('Schema ' + ref + ' is loaded but ' + e.missingRef + ' cannot be resolved'); | 
				
			||||
 | 
				
			||||
      var schemaPromise = self._loadingSchemas[ref]; | 
				
			||||
      if (!schemaPromise) { | 
				
			||||
        schemaPromise = self._loadingSchemas[ref] = self._opts.loadSchema(ref); | 
				
			||||
        schemaPromise.then(removePromise, removePromise); | 
				
			||||
      } | 
				
			||||
 | 
				
			||||
      return schemaPromise.then(function (sch) { | 
				
			||||
        if (!added(ref)) { | 
				
			||||
          return loadMetaSchemaOf(sch).then(function () { | 
				
			||||
            if (!added(ref)) self.addSchema(sch, ref, undefined, meta); | 
				
			||||
          }); | 
				
			||||
        } | 
				
			||||
      }).then(function() { | 
				
			||||
        return _compileAsync(schemaObj); | 
				
			||||
      }); | 
				
			||||
 | 
				
			||||
      function removePromise() { | 
				
			||||
        delete self._loadingSchemas[ref]; | 
				
			||||
      } | 
				
			||||
 | 
				
			||||
      function added(ref) { | 
				
			||||
        return self._refs[ref] || self._schemas[ref]; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -1,3 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
module.exports = require('fast-deep-equal'); | 
				
			||||
@ -1,34 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
var resolve = require('./resolve'); | 
				
			||||
 | 
				
			||||
module.exports = { | 
				
			||||
  Validation: errorSubclass(ValidationError), | 
				
			||||
  MissingRef: errorSubclass(MissingRefError) | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function ValidationError(errors) { | 
				
			||||
  this.message = 'validation failed'; | 
				
			||||
  this.errors = errors; | 
				
			||||
  this.ajv = this.validation = true; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
MissingRefError.message = function (baseId, ref) { | 
				
			||||
  return 'can\'t resolve reference ' + ref + ' from id ' + baseId; | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function MissingRefError(baseId, ref, message) { | 
				
			||||
  this.message = message || MissingRefError.message(baseId, ref); | 
				
			||||
  this.missingRef = resolve.url(baseId, ref); | 
				
			||||
  this.missingSchema = resolve.normalizeId(resolve.fullPath(this.missingRef)); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function errorSubclass(Subclass) { | 
				
			||||
  Subclass.prototype = Object.create(Error.prototype); | 
				
			||||
  Subclass.prototype.constructor = Subclass; | 
				
			||||
  return Subclass; | 
				
			||||
} | 
				
			||||
@ -1,135 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
var util = require('./util'); | 
				
			||||
 | 
				
			||||
var DATE = /^\d\d\d\d-(\d\d)-(\d\d)$/; | 
				
			||||
var DAYS = [0,31,29,31,30,31,30,31,31,30,31,30,31]; | 
				
			||||
var TIME = /^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d:\d\d)?$/i; | 
				
			||||
var HOSTNAME = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*$/i; | 
				
			||||
var URI = /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i; | 
				
			||||
var URIREF = /^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i; | 
				
			||||
// uri-template: https://tools.ietf.org/html/rfc6570
 | 
				
			||||
var URITEMPLATE = /^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i; | 
				
			||||
// For the source: https://gist.github.com/dperini/729294
 | 
				
			||||
// For test cases: https://mathiasbynens.be/demo/url-regex
 | 
				
			||||
// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983.
 | 
				
			||||
// var URL = /^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)(?:\.(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu;
 | 
				
			||||
var URL = /^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i; | 
				
			||||
var UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i; | 
				
			||||
var JSON_POINTER = /^(?:\/(?:[^~/]|~0|~1)*)*$|^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i; | 
				
			||||
var RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
module.exports = formats; | 
				
			||||
 | 
				
			||||
function formats(mode) { | 
				
			||||
  mode = mode == 'full' ? 'full' : 'fast'; | 
				
			||||
  return util.copy(formats[mode]); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
formats.fast = { | 
				
			||||
  // date: http://tools.ietf.org/html/rfc3339#section-5.6
 | 
				
			||||
  date: /^\d\d\d\d-[0-1]\d-[0-3]\d$/, | 
				
			||||
  // date-time: http://tools.ietf.org/html/rfc3339#section-5.6
 | 
				
			||||
  time: /^[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i, | 
				
			||||
  'date-time': /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s][0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)$/i, | 
				
			||||
  // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js
 | 
				
			||||
  uri: /^(?:[a-z][a-z0-9+-.]*)(?::|\/)\/?[^\s]*$/i, | 
				
			||||
  'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\/\/)?[^\s]*$/i, | 
				
			||||
  'uri-template': URITEMPLATE, | 
				
			||||
  url: URL, | 
				
			||||
  // email (sources from jsen validator):
 | 
				
			||||
  // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363
 | 
				
			||||
  // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')
 | 
				
			||||
  email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i, | 
				
			||||
  hostname: HOSTNAME, | 
				
			||||
  // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html
 | 
				
			||||
  ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, | 
				
			||||
  // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses
 | 
				
			||||
  ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i, | 
				
			||||
  regex: regex, | 
				
			||||
  // uuid: http://tools.ietf.org/html/rfc4122
 | 
				
			||||
  uuid: UUID, | 
				
			||||
  // JSON-pointer: https://tools.ietf.org/html/rfc6901
 | 
				
			||||
  // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A
 | 
				
			||||
  'json-pointer': JSON_POINTER, | 
				
			||||
  // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00
 | 
				
			||||
  'relative-json-pointer': RELATIVE_JSON_POINTER | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
formats.full = { | 
				
			||||
  date: date, | 
				
			||||
  time: time, | 
				
			||||
  'date-time': date_time, | 
				
			||||
  uri: uri, | 
				
			||||
  'uri-reference': URIREF, | 
				
			||||
  'uri-template': URITEMPLATE, | 
				
			||||
  url: URL, | 
				
			||||
  email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&''*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i, | 
				
			||||
  hostname: hostname, | 
				
			||||
  ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, | 
				
			||||
  ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i, | 
				
			||||
  regex: regex, | 
				
			||||
  uuid: UUID, | 
				
			||||
  'json-pointer': JSON_POINTER, | 
				
			||||
  'relative-json-pointer': RELATIVE_JSON_POINTER | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function date(str) { | 
				
			||||
  // full-date from http://tools.ietf.org/html/rfc3339#section-5.6
 | 
				
			||||
  var matches = str.match(DATE); | 
				
			||||
  if (!matches) return false; | 
				
			||||
 | 
				
			||||
  var month = +matches[1]; | 
				
			||||
  var day = +matches[2]; | 
				
			||||
  return month >= 1 && month <= 12 && day >= 1 && day <= DAYS[month]; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function time(str, full) { | 
				
			||||
  var matches = str.match(TIME); | 
				
			||||
  if (!matches) return false; | 
				
			||||
 | 
				
			||||
  var hour = matches[1]; | 
				
			||||
  var minute = matches[2]; | 
				
			||||
  var second = matches[3]; | 
				
			||||
  var timeZone = matches[5]; | 
				
			||||
  return hour <= 23 && minute <= 59 && second <= 59 && (!full || timeZone); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
var DATE_TIME_SEPARATOR = /t|\s/i; | 
				
			||||
function date_time(str) { | 
				
			||||
  // http://tools.ietf.org/html/rfc3339#section-5.6
 | 
				
			||||
  var dateTime = str.split(DATE_TIME_SEPARATOR); | 
				
			||||
  return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function hostname(str) { | 
				
			||||
  // https://tools.ietf.org/html/rfc1034#section-3.5
 | 
				
			||||
  // https://tools.ietf.org/html/rfc1123#section-2
 | 
				
			||||
  return str.length <= 255 && HOSTNAME.test(str); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
var NOT_URI_FRAGMENT = /\/|:/; | 
				
			||||
function uri(str) { | 
				
			||||
  // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required "."
 | 
				
			||||
  return NOT_URI_FRAGMENT.test(str) && URI.test(str); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
var Z_ANCHOR = /[^\\]\\Z/; | 
				
			||||
function regex(str) { | 
				
			||||
  if (Z_ANCHOR.test(str)) return false; | 
				
			||||
  try { | 
				
			||||
    new RegExp(str); | 
				
			||||
    return true; | 
				
			||||
  } catch(e) { | 
				
			||||
    return false; | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -1,380 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
var resolve = require('./resolve') | 
				
			||||
  , util = require('./util') | 
				
			||||
  , errorClasses = require('./error_classes') | 
				
			||||
  , stableStringify = require('fast-json-stable-stringify'); | 
				
			||||
 | 
				
			||||
var validateGenerator = require('../dotjs/validate'); | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Functions below are used inside compiled validations function | 
				
			||||
 */ | 
				
			||||
 | 
				
			||||
var co = require('co'); | 
				
			||||
var ucs2length = util.ucs2length; | 
				
			||||
var equal = require('fast-deep-equal'); | 
				
			||||
 | 
				
			||||
// this error is thrown by async schemas to return validation errors via exception
 | 
				
			||||
var ValidationError = errorClasses.Validation; | 
				
			||||
 | 
				
			||||
module.exports = compile; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Compiles schema to validation function | 
				
			||||
 * @this   Ajv | 
				
			||||
 * @param  {Object} schema schema object | 
				
			||||
 * @param  {Object} root object with information about the root schema for this schema | 
				
			||||
 * @param  {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution | 
				
			||||
 * @param  {String} baseId base ID for IDs in the schema | 
				
			||||
 * @return {Function} validation function | 
				
			||||
 */ | 
				
			||||
function compile(schema, root, localRefs, baseId) { | 
				
			||||
  /* jshint validthis: true, evil: true */ | 
				
			||||
  /* eslint no-shadow: 0 */ | 
				
			||||
  var self = this | 
				
			||||
    , opts = this._opts | 
				
			||||
    , refVal = [ undefined ] | 
				
			||||
    , refs = {} | 
				
			||||
    , patterns = [] | 
				
			||||
    , patternsHash = {} | 
				
			||||
    , defaults = [] | 
				
			||||
    , defaultsHash = {} | 
				
			||||
    , customRules = []; | 
				
			||||
 | 
				
			||||
  root = root || { schema: schema, refVal: refVal, refs: refs }; | 
				
			||||
 | 
				
			||||
  var c = checkCompiling.call(this, schema, root, baseId); | 
				
			||||
  var compilation = this._compilations[c.index]; | 
				
			||||
  if (c.compiling) return (compilation.callValidate = callValidate); | 
				
			||||
 | 
				
			||||
  var formats = this._formats; | 
				
			||||
  var RULES = this.RULES; | 
				
			||||
 | 
				
			||||
  try { | 
				
			||||
    var v = localCompile(schema, root, localRefs, baseId); | 
				
			||||
    compilation.validate = v; | 
				
			||||
    var cv = compilation.callValidate; | 
				
			||||
    if (cv) { | 
				
			||||
      cv.schema = v.schema; | 
				
			||||
      cv.errors = null; | 
				
			||||
      cv.refs = v.refs; | 
				
			||||
      cv.refVal = v.refVal; | 
				
			||||
      cv.root = v.root; | 
				
			||||
      cv.$async = v.$async; | 
				
			||||
      if (opts.sourceCode) cv.source = v.source; | 
				
			||||
    } | 
				
			||||
    return v; | 
				
			||||
  } finally { | 
				
			||||
    endCompiling.call(this, schema, root, baseId); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function callValidate() { | 
				
			||||
    var validate = compilation.validate; | 
				
			||||
    var result = validate.apply(null, arguments); | 
				
			||||
    callValidate.errors = validate.errors; | 
				
			||||
    return result; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function localCompile(_schema, _root, localRefs, baseId) { | 
				
			||||
    var isRoot = !_root || (_root && _root.schema == _schema); | 
				
			||||
    if (_root.schema != root.schema) | 
				
			||||
      return compile.call(self, _schema, _root, localRefs, baseId); | 
				
			||||
 | 
				
			||||
    var $async = _schema.$async === true; | 
				
			||||
 | 
				
			||||
    var sourceCode = validateGenerator({ | 
				
			||||
      isTop: true, | 
				
			||||
      schema: _schema, | 
				
			||||
      isRoot: isRoot, | 
				
			||||
      baseId: baseId, | 
				
			||||
      root: _root, | 
				
			||||
      schemaPath: '', | 
				
			||||
      errSchemaPath: '#', | 
				
			||||
      errorPath: '""', | 
				
			||||
      MissingRefError: errorClasses.MissingRef, | 
				
			||||
      RULES: RULES, | 
				
			||||
      validate: validateGenerator, | 
				
			||||
      util: util, | 
				
			||||
      resolve: resolve, | 
				
			||||
      resolveRef: resolveRef, | 
				
			||||
      usePattern: usePattern, | 
				
			||||
      useDefault: useDefault, | 
				
			||||
      useCustomRule: useCustomRule, | 
				
			||||
      opts: opts, | 
				
			||||
      formats: formats, | 
				
			||||
      logger: self.logger, | 
				
			||||
      self: self | 
				
			||||
    }); | 
				
			||||
 | 
				
			||||
    sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode) | 
				
			||||
                   + vars(defaults, defaultCode) + vars(customRules, customRuleCode) | 
				
			||||
                   + sourceCode; | 
				
			||||
 | 
				
			||||
    if (opts.processCode) sourceCode = opts.processCode(sourceCode); | 
				
			||||
    // console.log('\n\n\n *** \n', JSON.stringify(sourceCode));
 | 
				
			||||
    var validate; | 
				
			||||
    try { | 
				
			||||
      var makeValidate = new Function( | 
				
			||||
        'self', | 
				
			||||
        'RULES', | 
				
			||||
        'formats', | 
				
			||||
        'root', | 
				
			||||
        'refVal', | 
				
			||||
        'defaults', | 
				
			||||
        'customRules', | 
				
			||||
        'co', | 
				
			||||
        'equal', | 
				
			||||
        'ucs2length', | 
				
			||||
        'ValidationError', | 
				
			||||
        sourceCode | 
				
			||||
      ); | 
				
			||||
 | 
				
			||||
      validate = makeValidate( | 
				
			||||
        self, | 
				
			||||
        RULES, | 
				
			||||
        formats, | 
				
			||||
        root, | 
				
			||||
        refVal, | 
				
			||||
        defaults, | 
				
			||||
        customRules, | 
				
			||||
        co, | 
				
			||||
        equal, | 
				
			||||
        ucs2length, | 
				
			||||
        ValidationError | 
				
			||||
      ); | 
				
			||||
 | 
				
			||||
      refVal[0] = validate; | 
				
			||||
    } catch(e) { | 
				
			||||
      self.logger.error('Error compiling schema, function code:', sourceCode); | 
				
			||||
      throw e; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    validate.schema = _schema; | 
				
			||||
    validate.errors = null; | 
				
			||||
    validate.refs = refs; | 
				
			||||
    validate.refVal = refVal; | 
				
			||||
    validate.root = isRoot ? validate : _root; | 
				
			||||
    if ($async) validate.$async = true; | 
				
			||||
    if (opts.sourceCode === true) { | 
				
			||||
      validate.source = { | 
				
			||||
        code: sourceCode, | 
				
			||||
        patterns: patterns, | 
				
			||||
        defaults: defaults | 
				
			||||
      }; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    return validate; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function resolveRef(baseId, ref, isRoot) { | 
				
			||||
    ref = resolve.url(baseId, ref); | 
				
			||||
    var refIndex = refs[ref]; | 
				
			||||
    var _refVal, refCode; | 
				
			||||
    if (refIndex !== undefined) { | 
				
			||||
      _refVal = refVal[refIndex]; | 
				
			||||
      refCode = 'refVal[' + refIndex + ']'; | 
				
			||||
      return resolvedRef(_refVal, refCode); | 
				
			||||
    } | 
				
			||||
    if (!isRoot && root.refs) { | 
				
			||||
      var rootRefId = root.refs[ref]; | 
				
			||||
      if (rootRefId !== undefined) { | 
				
			||||
        _refVal = root.refVal[rootRefId]; | 
				
			||||
        refCode = addLocalRef(ref, _refVal); | 
				
			||||
        return resolvedRef(_refVal, refCode); | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    refCode = addLocalRef(ref); | 
				
			||||
    var v = resolve.call(self, localCompile, root, ref); | 
				
			||||
    if (v === undefined) { | 
				
			||||
      var localSchema = localRefs && localRefs[ref]; | 
				
			||||
      if (localSchema) { | 
				
			||||
        v = resolve.inlineRef(localSchema, opts.inlineRefs) | 
				
			||||
            ? localSchema | 
				
			||||
            : compile.call(self, localSchema, root, localRefs, baseId); | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    if (v === undefined) { | 
				
			||||
      removeLocalRef(ref); | 
				
			||||
    } else { | 
				
			||||
      replaceLocalRef(ref, v); | 
				
			||||
      return resolvedRef(v, refCode); | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function addLocalRef(ref, v) { | 
				
			||||
    var refId = refVal.length; | 
				
			||||
    refVal[refId] = v; | 
				
			||||
    refs[ref] = refId; | 
				
			||||
    return 'refVal' + refId; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function removeLocalRef(ref) { | 
				
			||||
    delete refs[ref]; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function replaceLocalRef(ref, v) { | 
				
			||||
    var refId = refs[ref]; | 
				
			||||
    refVal[refId] = v; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function resolvedRef(refVal, code) { | 
				
			||||
    return typeof refVal == 'object' || typeof refVal == 'boolean' | 
				
			||||
            ? { code: code, schema: refVal, inline: true } | 
				
			||||
            : { code: code, $async: refVal && refVal.$async }; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function usePattern(regexStr) { | 
				
			||||
    var index = patternsHash[regexStr]; | 
				
			||||
    if (index === undefined) { | 
				
			||||
      index = patternsHash[regexStr] = patterns.length; | 
				
			||||
      patterns[index] = regexStr; | 
				
			||||
    } | 
				
			||||
    return 'pattern' + index; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function useDefault(value) { | 
				
			||||
    switch (typeof value) { | 
				
			||||
      case 'boolean': | 
				
			||||
      case 'number': | 
				
			||||
        return '' + value; | 
				
			||||
      case 'string': | 
				
			||||
        return util.toQuotedString(value); | 
				
			||||
      case 'object': | 
				
			||||
        if (value === null) return 'null'; | 
				
			||||
        var valueStr = stableStringify(value); | 
				
			||||
        var index = defaultsHash[valueStr]; | 
				
			||||
        if (index === undefined) { | 
				
			||||
          index = defaultsHash[valueStr] = defaults.length; | 
				
			||||
          defaults[index] = value; | 
				
			||||
        } | 
				
			||||
        return 'default' + index; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function useCustomRule(rule, schema, parentSchema, it) { | 
				
			||||
    var validateSchema = rule.definition.validateSchema; | 
				
			||||
    if (validateSchema && self._opts.validateSchema !== false) { | 
				
			||||
      var valid = validateSchema(schema); | 
				
			||||
      if (!valid) { | 
				
			||||
        var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors); | 
				
			||||
        if (self._opts.validateSchema == 'log') self.logger.error(message); | 
				
			||||
        else throw new Error(message); | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    var compile = rule.definition.compile | 
				
			||||
      , inline = rule.definition.inline | 
				
			||||
      , macro = rule.definition.macro; | 
				
			||||
 | 
				
			||||
    var validate; | 
				
			||||
    if (compile) { | 
				
			||||
      validate = compile.call(self, schema, parentSchema, it); | 
				
			||||
    } else if (macro) { | 
				
			||||
      validate = macro.call(self, schema, parentSchema, it); | 
				
			||||
      if (opts.validateSchema !== false) self.validateSchema(validate, true); | 
				
			||||
    } else if (inline) { | 
				
			||||
      validate = inline.call(self, it, rule.keyword, schema, parentSchema); | 
				
			||||
    } else { | 
				
			||||
      validate = rule.definition.validate; | 
				
			||||
      if (!validate) return; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    if (validate === undefined) | 
				
			||||
      throw new Error('custom keyword "' + rule.keyword + '"failed to compile'); | 
				
			||||
 | 
				
			||||
    var index = customRules.length; | 
				
			||||
    customRules[index] = validate; | 
				
			||||
 | 
				
			||||
    return { | 
				
			||||
      code: 'customRule' + index, | 
				
			||||
      validate: validate | 
				
			||||
    }; | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Checks if the schema is currently compiled | 
				
			||||
 * @this   Ajv | 
				
			||||
 * @param  {Object} schema schema to compile | 
				
			||||
 * @param  {Object} root root object | 
				
			||||
 * @param  {String} baseId base schema ID | 
				
			||||
 * @return {Object} object with properties "index" (compilation index) and "compiling" (boolean) | 
				
			||||
 */ | 
				
			||||
function checkCompiling(schema, root, baseId) { | 
				
			||||
  /* jshint validthis: true */ | 
				
			||||
  var index = compIndex.call(this, schema, root, baseId); | 
				
			||||
  if (index >= 0) return { index: index, compiling: true }; | 
				
			||||
  index = this._compilations.length; | 
				
			||||
  this._compilations[index] = { | 
				
			||||
    schema: schema, | 
				
			||||
    root: root, | 
				
			||||
    baseId: baseId | 
				
			||||
  }; | 
				
			||||
  return { index: index, compiling: false }; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Removes the schema from the currently compiled list | 
				
			||||
 * @this   Ajv | 
				
			||||
 * @param  {Object} schema schema to compile | 
				
			||||
 * @param  {Object} root root object | 
				
			||||
 * @param  {String} baseId base schema ID | 
				
			||||
 */ | 
				
			||||
function endCompiling(schema, root, baseId) { | 
				
			||||
  /* jshint validthis: true */ | 
				
			||||
  var i = compIndex.call(this, schema, root, baseId); | 
				
			||||
  if (i >= 0) this._compilations.splice(i, 1); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Index of schema compilation in the currently compiled list | 
				
			||||
 * @this   Ajv | 
				
			||||
 * @param  {Object} schema schema to compile | 
				
			||||
 * @param  {Object} root root object | 
				
			||||
 * @param  {String} baseId base schema ID | 
				
			||||
 * @return {Integer} compilation index | 
				
			||||
 */ | 
				
			||||
function compIndex(schema, root, baseId) { | 
				
			||||
  /* jshint validthis: true */ | 
				
			||||
  for (var i=0; i<this._compilations.length; i++) { | 
				
			||||
    var c = this._compilations[i]; | 
				
			||||
    if (c.schema == schema && c.root == root && c.baseId == baseId) return i; | 
				
			||||
  } | 
				
			||||
  return -1; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function patternCode(i, patterns) { | 
				
			||||
  return 'var pattern' + i + ' = new RegExp(' + util.toQuotedString(patterns[i]) + ');'; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function defaultCode(i) { | 
				
			||||
  return 'var default' + i + ' = defaults[' + i + '];'; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function refValCode(i, refVal) { | 
				
			||||
  return refVal[i] === undefined ? '' : 'var refVal' + i + ' = refVal[' + i + '];'; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function customRuleCode(i) { | 
				
			||||
  return 'var customRule' + i + ' = customRules[' + i + '];'; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function vars(arr, statement) { | 
				
			||||
  if (!arr.length) return ''; | 
				
			||||
  var code = ''; | 
				
			||||
  for (var i=0; i<arr.length; i++) | 
				
			||||
    code += statement(i, arr); | 
				
			||||
  return code; | 
				
			||||
} | 
				
			||||
@ -1,271 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
var url = require('url') | 
				
			||||
  , equal = require('fast-deep-equal') | 
				
			||||
  , util = require('./util') | 
				
			||||
  , SchemaObject = require('./schema_obj') | 
				
			||||
  , traverse = require('json-schema-traverse'); | 
				
			||||
 | 
				
			||||
module.exports = resolve; | 
				
			||||
 | 
				
			||||
resolve.normalizeId = normalizeId; | 
				
			||||
resolve.fullPath = getFullPath; | 
				
			||||
resolve.url = resolveUrl; | 
				
			||||
resolve.ids = resolveIds; | 
				
			||||
resolve.inlineRef = inlineRef; | 
				
			||||
resolve.schema = resolveSchema; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * [resolve and compile the references ($ref)] | 
				
			||||
 * @this   Ajv | 
				
			||||
 * @param  {Function} compile reference to schema compilation funciton (localCompile) | 
				
			||||
 * @param  {Object} root object with information about the root schema for the current schema | 
				
			||||
 * @param  {String} ref reference to resolve | 
				
			||||
 * @return {Object|Function} schema object (if the schema can be inlined) or validation function | 
				
			||||
 */ | 
				
			||||
function resolve(compile, root, ref) { | 
				
			||||
  /* jshint validthis: true */ | 
				
			||||
  var refVal = this._refs[ref]; | 
				
			||||
  if (typeof refVal == 'string') { | 
				
			||||
    if (this._refs[refVal]) refVal = this._refs[refVal]; | 
				
			||||
    else return resolve.call(this, compile, root, refVal); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  refVal = refVal || this._schemas[ref]; | 
				
			||||
  if (refVal instanceof SchemaObject) { | 
				
			||||
    return inlineRef(refVal.schema, this._opts.inlineRefs) | 
				
			||||
            ? refVal.schema | 
				
			||||
            : refVal.validate || this._compile(refVal); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  var res = resolveSchema.call(this, root, ref); | 
				
			||||
  var schema, v, baseId; | 
				
			||||
  if (res) { | 
				
			||||
    schema = res.schema; | 
				
			||||
    root = res.root; | 
				
			||||
    baseId = res.baseId; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  if (schema instanceof SchemaObject) { | 
				
			||||
    v = schema.validate || compile.call(this, schema.schema, root, undefined, baseId); | 
				
			||||
  } else if (schema !== undefined) { | 
				
			||||
    v = inlineRef(schema, this._opts.inlineRefs) | 
				
			||||
        ? schema | 
				
			||||
        : compile.call(this, schema, root, undefined, baseId); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  return v; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Resolve schema, its root and baseId | 
				
			||||
 * @this Ajv | 
				
			||||
 * @param  {Object} root root object with properties schema, refVal, refs | 
				
			||||
 * @param  {String} ref  reference to resolve | 
				
			||||
 * @return {Object} object with properties schema, root, baseId | 
				
			||||
 */ | 
				
			||||
function resolveSchema(root, ref) { | 
				
			||||
  /* jshint validthis: true */ | 
				
			||||
  var p = url.parse(ref, false, true) | 
				
			||||
    , refPath = _getFullPath(p) | 
				
			||||
    , baseId = getFullPath(this._getId(root.schema)); | 
				
			||||
  if (refPath !== baseId) { | 
				
			||||
    var id = normalizeId(refPath); | 
				
			||||
    var refVal = this._refs[id]; | 
				
			||||
    if (typeof refVal == 'string') { | 
				
			||||
      return resolveRecursive.call(this, root, refVal, p); | 
				
			||||
    } else if (refVal instanceof SchemaObject) { | 
				
			||||
      if (!refVal.validate) this._compile(refVal); | 
				
			||||
      root = refVal; | 
				
			||||
    } else { | 
				
			||||
      refVal = this._schemas[id]; | 
				
			||||
      if (refVal instanceof SchemaObject) { | 
				
			||||
        if (!refVal.validate) this._compile(refVal); | 
				
			||||
        if (id == normalizeId(ref)) | 
				
			||||
          return { schema: refVal, root: root, baseId: baseId }; | 
				
			||||
        root = refVal; | 
				
			||||
      } else { | 
				
			||||
        return; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
    if (!root.schema) return; | 
				
			||||
    baseId = getFullPath(this._getId(root.schema)); | 
				
			||||
  } | 
				
			||||
  return getJsonPointer.call(this, p, baseId, root.schema, root); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/* @this Ajv */ | 
				
			||||
function resolveRecursive(root, ref, parsedRef) { | 
				
			||||
  /* jshint validthis: true */ | 
				
			||||
  var res = resolveSchema.call(this, root, ref); | 
				
			||||
  if (res) { | 
				
			||||
    var schema = res.schema; | 
				
			||||
    var baseId = res.baseId; | 
				
			||||
    root = res.root; | 
				
			||||
    var id = this._getId(schema); | 
				
			||||
    if (id) baseId = resolveUrl(baseId, id); | 
				
			||||
    return getJsonPointer.call(this, parsedRef, baseId, schema, root); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
var PREVENT_SCOPE_CHANGE = util.toHash(['properties', 'patternProperties', 'enum', 'dependencies', 'definitions']); | 
				
			||||
/* @this Ajv */ | 
				
			||||
function getJsonPointer(parsedRef, baseId, schema, root) { | 
				
			||||
  /* jshint validthis: true */ | 
				
			||||
  parsedRef.hash = parsedRef.hash || ''; | 
				
			||||
  if (parsedRef.hash.slice(0,2) != '#/') return; | 
				
			||||
  var parts = parsedRef.hash.split('/'); | 
				
			||||
 | 
				
			||||
  for (var i = 1; i < parts.length; i++) { | 
				
			||||
    var part = parts[i]; | 
				
			||||
    if (part) { | 
				
			||||
      part = util.unescapeFragment(part); | 
				
			||||
      schema = schema[part]; | 
				
			||||
      if (schema === undefined) break; | 
				
			||||
      var id; | 
				
			||||
      if (!PREVENT_SCOPE_CHANGE[part]) { | 
				
			||||
        id = this._getId(schema); | 
				
			||||
        if (id) baseId = resolveUrl(baseId, id); | 
				
			||||
        if (schema.$ref) { | 
				
			||||
          var $ref = resolveUrl(baseId, schema.$ref); | 
				
			||||
          var res = resolveSchema.call(this, root, $ref); | 
				
			||||
          if (res) { | 
				
			||||
            schema = res.schema; | 
				
			||||
            root = res.root; | 
				
			||||
            baseId = res.baseId; | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  if (schema !== undefined && schema !== root.schema) | 
				
			||||
    return { schema: schema, root: root, baseId: baseId }; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
var SIMPLE_INLINED = util.toHash([ | 
				
			||||
  'type', 'format', 'pattern', | 
				
			||||
  'maxLength', 'minLength', | 
				
			||||
  'maxProperties', 'minProperties', | 
				
			||||
  'maxItems', 'minItems', | 
				
			||||
  'maximum', 'minimum', | 
				
			||||
  'uniqueItems', 'multipleOf', | 
				
			||||
  'required', 'enum' | 
				
			||||
]); | 
				
			||||
function inlineRef(schema, limit) { | 
				
			||||
  if (limit === false) return false; | 
				
			||||
  if (limit === undefined || limit === true) return checkNoRef(schema); | 
				
			||||
  else if (limit) return countKeys(schema) <= limit; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function checkNoRef(schema) { | 
				
			||||
  var item; | 
				
			||||
  if (Array.isArray(schema)) { | 
				
			||||
    for (var i=0; i<schema.length; i++) { | 
				
			||||
      item = schema[i]; | 
				
			||||
      if (typeof item == 'object' && !checkNoRef(item)) return false; | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    for (var key in schema) { | 
				
			||||
      if (key == '$ref') return false; | 
				
			||||
      item = schema[key]; | 
				
			||||
      if (typeof item == 'object' && !checkNoRef(item)) return false; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  return true; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function countKeys(schema) { | 
				
			||||
  var count = 0, item; | 
				
			||||
  if (Array.isArray(schema)) { | 
				
			||||
    for (var i=0; i<schema.length; i++) { | 
				
			||||
      item = schema[i]; | 
				
			||||
      if (typeof item == 'object') count += countKeys(item); | 
				
			||||
      if (count == Infinity) return Infinity; | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    for (var key in schema) { | 
				
			||||
      if (key == '$ref') return Infinity; | 
				
			||||
      if (SIMPLE_INLINED[key]) { | 
				
			||||
        count++; | 
				
			||||
      } else { | 
				
			||||
        item = schema[key]; | 
				
			||||
        if (typeof item == 'object') count += countKeys(item) + 1; | 
				
			||||
        if (count == Infinity) return Infinity; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  return count; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function getFullPath(id, normalize) { | 
				
			||||
  if (normalize !== false) id = normalizeId(id); | 
				
			||||
  var p = url.parse(id, false, true); | 
				
			||||
  return _getFullPath(p); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function _getFullPath(p) { | 
				
			||||
  var protocolSeparator = p.protocol || p.href.slice(0,2) == '//' ? '//' : ''; | 
				
			||||
  return (p.protocol||'') + protocolSeparator + (p.host||'') + (p.path||'')  + '#'; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
var TRAILING_SLASH_HASH = /#\/?$/; | 
				
			||||
function normalizeId(id) { | 
				
			||||
  return id ? id.replace(TRAILING_SLASH_HASH, '') : ''; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function resolveUrl(baseId, id) { | 
				
			||||
  id = normalizeId(id); | 
				
			||||
  return url.resolve(baseId, id); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/* @this Ajv */ | 
				
			||||
function resolveIds(schema) { | 
				
			||||
  var schemaId = normalizeId(this._getId(schema)); | 
				
			||||
  var baseIds = {'': schemaId}; | 
				
			||||
  var fullPaths = {'': getFullPath(schemaId, false)}; | 
				
			||||
  var localRefs = {}; | 
				
			||||
  var self = this; | 
				
			||||
 | 
				
			||||
  traverse(schema, {allKeys: true}, function(sch, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) { | 
				
			||||
    if (jsonPtr === '') return; | 
				
			||||
    var id = self._getId(sch); | 
				
			||||
    var baseId = baseIds[parentJsonPtr]; | 
				
			||||
    var fullPath = fullPaths[parentJsonPtr] + '/' + parentKeyword; | 
				
			||||
    if (keyIndex !== undefined) | 
				
			||||
      fullPath += '/' + (typeof keyIndex == 'number' ? keyIndex : util.escapeFragment(keyIndex)); | 
				
			||||
 | 
				
			||||
    if (typeof id == 'string') { | 
				
			||||
      id = baseId = normalizeId(baseId ? url.resolve(baseId, id) : id); | 
				
			||||
 | 
				
			||||
      var refVal = self._refs[id]; | 
				
			||||
      if (typeof refVal == 'string') refVal = self._refs[refVal]; | 
				
			||||
      if (refVal && refVal.schema) { | 
				
			||||
        if (!equal(sch, refVal.schema)) | 
				
			||||
          throw new Error('id "' + id + '" resolves to more than one schema'); | 
				
			||||
      } else if (id != normalizeId(fullPath)) { | 
				
			||||
        if (id[0] == '#') { | 
				
			||||
          if (localRefs[id] && !equal(sch, localRefs[id])) | 
				
			||||
            throw new Error('id "' + id + '" resolves to more than one schema'); | 
				
			||||
          localRefs[id] = sch; | 
				
			||||
        } else { | 
				
			||||
          self._refs[id] = fullPath; | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
    baseIds[jsonPtr] = baseId; | 
				
			||||
    fullPaths[jsonPtr] = fullPath; | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  return localRefs; | 
				
			||||
} | 
				
			||||
@ -1,58 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
var ruleModules = require('./_rules') | 
				
			||||
  , toHash = require('./util').toHash; | 
				
			||||
 | 
				
			||||
module.exports = function rules() { | 
				
			||||
  var RULES = [ | 
				
			||||
    { type: 'number', | 
				
			||||
      rules: [ { 'maximum': ['exclusiveMaximum'] }, | 
				
			||||
               { 'minimum': ['exclusiveMinimum'] }, 'multipleOf', 'format'] }, | 
				
			||||
    { type: 'string', | 
				
			||||
      rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] }, | 
				
			||||
    { type: 'array', | 
				
			||||
      rules: [ 'maxItems', 'minItems', 'uniqueItems', 'contains', 'items' ] }, | 
				
			||||
    { type: 'object', | 
				
			||||
      rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'propertyNames', | 
				
			||||
               { 'properties': ['additionalProperties', 'patternProperties'] } ] }, | 
				
			||||
    { rules: [ '$ref', 'const', 'enum', 'not', 'anyOf', 'oneOf', 'allOf' ] } | 
				
			||||
  ]; | 
				
			||||
 | 
				
			||||
  var ALL = [ 'type' ]; | 
				
			||||
  var KEYWORDS = [ | 
				
			||||
    'additionalItems', '$schema', '$id', 'id', 'title', | 
				
			||||
    'description', 'default', 'definitions' | 
				
			||||
  ]; | 
				
			||||
  var TYPES = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ]; | 
				
			||||
  RULES.all = toHash(ALL); | 
				
			||||
  RULES.types = toHash(TYPES); | 
				
			||||
 | 
				
			||||
  RULES.forEach(function (group) { | 
				
			||||
    group.rules = group.rules.map(function (keyword) { | 
				
			||||
      var implKeywords; | 
				
			||||
      if (typeof keyword == 'object') { | 
				
			||||
        var key = Object.keys(keyword)[0]; | 
				
			||||
        implKeywords = keyword[key]; | 
				
			||||
        keyword = key; | 
				
			||||
        implKeywords.forEach(function (k) { | 
				
			||||
          ALL.push(k); | 
				
			||||
          RULES.all[k] = true; | 
				
			||||
        }); | 
				
			||||
      } | 
				
			||||
      ALL.push(keyword); | 
				
			||||
      var rule = RULES.all[keyword] = { | 
				
			||||
        keyword: keyword, | 
				
			||||
        code: ruleModules[keyword], | 
				
			||||
        implements: implKeywords | 
				
			||||
      }; | 
				
			||||
      return rule; | 
				
			||||
    }); | 
				
			||||
 | 
				
			||||
    if (group.type) RULES.types[group.type] = group; | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  RULES.keywords = toHash(ALL.concat(KEYWORDS)); | 
				
			||||
  RULES.custom = {}; | 
				
			||||
 | 
				
			||||
  return RULES; | 
				
			||||
}; | 
				
			||||
@ -1,9 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
var util = require('./util'); | 
				
			||||
 | 
				
			||||
module.exports = SchemaObject; | 
				
			||||
 | 
				
			||||
function SchemaObject(obj) { | 
				
			||||
  util.copy(obj, this); | 
				
			||||
} | 
				
			||||
@ -1,20 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
// https://mathiasbynens.be/notes/javascript-encoding
 | 
				
			||||
// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode
 | 
				
			||||
module.exports = function ucs2length(str) { | 
				
			||||
  var length = 0 | 
				
			||||
    , len = str.length | 
				
			||||
    , pos = 0 | 
				
			||||
    , value; | 
				
			||||
  while (pos < len) { | 
				
			||||
    length++; | 
				
			||||
    value = str.charCodeAt(pos++); | 
				
			||||
    if (value >= 0xD800 && value <= 0xDBFF && pos < len) { | 
				
			||||
      // high surrogate, and there is a next character
 | 
				
			||||
      value = str.charCodeAt(pos); | 
				
			||||
      if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate
 | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  return length; | 
				
			||||
}; | 
				
			||||
@ -1,267 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
module.exports = { | 
				
			||||
  copy: copy, | 
				
			||||
  checkDataType: checkDataType, | 
				
			||||
  checkDataTypes: checkDataTypes, | 
				
			||||
  coerceToTypes: coerceToTypes, | 
				
			||||
  toHash: toHash, | 
				
			||||
  getProperty: getProperty, | 
				
			||||
  escapeQuotes: escapeQuotes, | 
				
			||||
  equal: require('fast-deep-equal'), | 
				
			||||
  ucs2length: require('./ucs2length'), | 
				
			||||
  varOccurences: varOccurences, | 
				
			||||
  varReplace: varReplace, | 
				
			||||
  cleanUpCode: cleanUpCode, | 
				
			||||
  finalCleanUpCode: finalCleanUpCode, | 
				
			||||
  schemaHasRules: schemaHasRules, | 
				
			||||
  schemaHasRulesExcept: schemaHasRulesExcept, | 
				
			||||
  toQuotedString: toQuotedString, | 
				
			||||
  getPathExpr: getPathExpr, | 
				
			||||
  getPath: getPath, | 
				
			||||
  getData: getData, | 
				
			||||
  unescapeFragment: unescapeFragment, | 
				
			||||
  unescapeJsonPointer: unescapeJsonPointer, | 
				
			||||
  escapeFragment: escapeFragment, | 
				
			||||
  escapeJsonPointer: escapeJsonPointer | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function copy(o, to) { | 
				
			||||
  to = to || {}; | 
				
			||||
  for (var key in o) to[key] = o[key]; | 
				
			||||
  return to; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function checkDataType(dataType, data, negate) { | 
				
			||||
  var EQUAL = negate ? ' !== ' : ' === ' | 
				
			||||
    , AND = negate ? ' || ' : ' && ' | 
				
			||||
    , OK = negate ? '!' : '' | 
				
			||||
    , NOT = negate ? '' : '!'; | 
				
			||||
  switch (dataType) { | 
				
			||||
    case 'null': return data + EQUAL + 'null'; | 
				
			||||
    case 'array': return OK + 'Array.isArray(' + data + ')'; | 
				
			||||
    case 'object': return '(' + OK + data + AND + | 
				
			||||
                          'typeof ' + data + EQUAL + '"object"' + AND + | 
				
			||||
                          NOT + 'Array.isArray(' + data + '))'; | 
				
			||||
    case 'integer': return '(typeof ' + data + EQUAL + '"number"' + AND + | 
				
			||||
                           NOT + '(' + data + ' % 1)' + | 
				
			||||
                           AND + data + EQUAL + data + ')'; | 
				
			||||
    default: return 'typeof ' + data + EQUAL + '"' + dataType + '"'; | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function checkDataTypes(dataTypes, data) { | 
				
			||||
  switch (dataTypes.length) { | 
				
			||||
    case 1: return checkDataType(dataTypes[0], data, true); | 
				
			||||
    default: | 
				
			||||
      var code = ''; | 
				
			||||
      var types = toHash(dataTypes); | 
				
			||||
      if (types.array && types.object) { | 
				
			||||
        code = types.null ? '(': '(!' + data + ' || '; | 
				
			||||
        code += 'typeof ' + data + ' !== "object")'; | 
				
			||||
        delete types.null; | 
				
			||||
        delete types.array; | 
				
			||||
        delete types.object; | 
				
			||||
      } | 
				
			||||
      if (types.number) delete types.integer; | 
				
			||||
      for (var t in types) | 
				
			||||
        code += (code ? ' && ' : '' ) + checkDataType(t, data, true); | 
				
			||||
 | 
				
			||||
      return code; | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
var COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]); | 
				
			||||
function coerceToTypes(optionCoerceTypes, dataTypes) { | 
				
			||||
  if (Array.isArray(dataTypes)) { | 
				
			||||
    var types = []; | 
				
			||||
    for (var i=0; i<dataTypes.length; i++) { | 
				
			||||
      var t = dataTypes[i]; | 
				
			||||
      if (COERCE_TO_TYPES[t]) types[types.length] = t; | 
				
			||||
      else if (optionCoerceTypes === 'array' && t === 'array') types[types.length] = t; | 
				
			||||
    } | 
				
			||||
    if (types.length) return types; | 
				
			||||
  } else if (COERCE_TO_TYPES[dataTypes]) { | 
				
			||||
    return [dataTypes]; | 
				
			||||
  } else if (optionCoerceTypes === 'array' && dataTypes === 'array') { | 
				
			||||
    return ['array']; | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function toHash(arr) { | 
				
			||||
  var hash = {}; | 
				
			||||
  for (var i=0; i<arr.length; i++) hash[arr[i]] = true; | 
				
			||||
  return hash; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
var IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i; | 
				
			||||
var SINGLE_QUOTE = /'|\\/g; | 
				
			||||
function getProperty(key) { | 
				
			||||
  return typeof key == 'number' | 
				
			||||
          ? '[' + key + ']' | 
				
			||||
          : IDENTIFIER.test(key) | 
				
			||||
            ? '.' + key | 
				
			||||
            : "['" + escapeQuotes(key) + "']"; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function escapeQuotes(str) { | 
				
			||||
  return str.replace(SINGLE_QUOTE, '\\$&') | 
				
			||||
            .replace(/\n/g, '\\n') | 
				
			||||
            .replace(/\r/g, '\\r') | 
				
			||||
            .replace(/\f/g, '\\f') | 
				
			||||
            .replace(/\t/g, '\\t'); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function varOccurences(str, dataVar) { | 
				
			||||
  dataVar += '[^0-9]'; | 
				
			||||
  var matches = str.match(new RegExp(dataVar, 'g')); | 
				
			||||
  return matches ? matches.length : 0; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function varReplace(str, dataVar, expr) { | 
				
			||||
  dataVar += '([^0-9])'; | 
				
			||||
  expr = expr.replace(/\$/g, '$$$$'); | 
				
			||||
  return str.replace(new RegExp(dataVar, 'g'), expr + '$1'); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
var EMPTY_ELSE = /else\s*{\s*}/g | 
				
			||||
  , EMPTY_IF_NO_ELSE = /if\s*\([^)]+\)\s*\{\s*\}(?!\s*else)/g | 
				
			||||
  , EMPTY_IF_WITH_ELSE = /if\s*\(([^)]+)\)\s*\{\s*\}\s*else(?!\s*if)/g; | 
				
			||||
function cleanUpCode(out) { | 
				
			||||
  return out.replace(EMPTY_ELSE, '') | 
				
			||||
            .replace(EMPTY_IF_NO_ELSE, '') | 
				
			||||
            .replace(EMPTY_IF_WITH_ELSE, 'if (!($1))'); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
var ERRORS_REGEXP = /[^v.]errors/g | 
				
			||||
  , REMOVE_ERRORS = /var errors = 0;|var vErrors = null;|validate.errors = vErrors;/g | 
				
			||||
  , REMOVE_ERRORS_ASYNC = /var errors = 0;|var vErrors = null;/g | 
				
			||||
  , RETURN_VALID = 'return errors === 0;' | 
				
			||||
  , RETURN_TRUE = 'validate.errors = null; return true;' | 
				
			||||
  , RETURN_ASYNC = /if \(errors === 0\) return data;\s*else throw new ValidationError\(vErrors\);/ | 
				
			||||
  , RETURN_DATA_ASYNC = 'return data;' | 
				
			||||
  , ROOTDATA_REGEXP = /[^A-Za-z_$]rootData[^A-Za-z0-9_$]/g | 
				
			||||
  , REMOVE_ROOTDATA = /if \(rootData === undefined\) rootData = data;/; | 
				
			||||
 | 
				
			||||
function finalCleanUpCode(out, async) { | 
				
			||||
  var matches = out.match(ERRORS_REGEXP); | 
				
			||||
  if (matches && matches.length == 2) { | 
				
			||||
    out = async | 
				
			||||
          ? out.replace(REMOVE_ERRORS_ASYNC, '') | 
				
			||||
               .replace(RETURN_ASYNC, RETURN_DATA_ASYNC) | 
				
			||||
          : out.replace(REMOVE_ERRORS, '') | 
				
			||||
               .replace(RETURN_VALID, RETURN_TRUE); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  matches = out.match(ROOTDATA_REGEXP); | 
				
			||||
  if (!matches || matches.length !== 3) return out; | 
				
			||||
  return out.replace(REMOVE_ROOTDATA, ''); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function schemaHasRules(schema, rules) { | 
				
			||||
  if (typeof schema == 'boolean') return !schema; | 
				
			||||
  for (var key in schema) if (rules[key]) return true; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function schemaHasRulesExcept(schema, rules, exceptKeyword) { | 
				
			||||
  if (typeof schema == 'boolean') return !schema && exceptKeyword != 'not'; | 
				
			||||
  for (var key in schema) if (key != exceptKeyword && rules[key]) return true; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function toQuotedString(str) { | 
				
			||||
  return '\'' + escapeQuotes(str) + '\''; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function getPathExpr(currentPath, expr, jsonPointers, isNumber) { | 
				
			||||
  var path = jsonPointers // false by default
 | 
				
			||||
              ? '\'/\' + ' + expr + (isNumber ? '' : '.replace(/~/g, \'~0\').replace(/\\//g, \'~1\')') | 
				
			||||
              : (isNumber ? '\'[\' + ' + expr + ' + \']\'' : '\'[\\\'\' + ' + expr + ' + \'\\\']\''); | 
				
			||||
  return joinPaths(currentPath, path); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function getPath(currentPath, prop, jsonPointers) { | 
				
			||||
  var path = jsonPointers // false by default
 | 
				
			||||
              ? toQuotedString('/' + escapeJsonPointer(prop)) | 
				
			||||
              : toQuotedString(getProperty(prop)); | 
				
			||||
  return joinPaths(currentPath, path); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
var JSON_POINTER = /^\/(?:[^~]|~0|~1)*$/; | 
				
			||||
var RELATIVE_JSON_POINTER = /^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/; | 
				
			||||
function getData($data, lvl, paths) { | 
				
			||||
  var up, jsonPointer, data, matches; | 
				
			||||
  if ($data === '') return 'rootData'; | 
				
			||||
  if ($data[0] == '/') { | 
				
			||||
    if (!JSON_POINTER.test($data)) throw new Error('Invalid JSON-pointer: ' + $data); | 
				
			||||
    jsonPointer = $data; | 
				
			||||
    data = 'rootData'; | 
				
			||||
  } else { | 
				
			||||
    matches = $data.match(RELATIVE_JSON_POINTER); | 
				
			||||
    if (!matches) throw new Error('Invalid JSON-pointer: ' + $data); | 
				
			||||
    up = +matches[1]; | 
				
			||||
    jsonPointer = matches[2]; | 
				
			||||
    if (jsonPointer == '#') { | 
				
			||||
      if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl); | 
				
			||||
      return paths[lvl - up]; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl); | 
				
			||||
    data = 'data' + ((lvl - up) || ''); | 
				
			||||
    if (!jsonPointer) return data; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  var expr = data; | 
				
			||||
  var segments = jsonPointer.split('/'); | 
				
			||||
  for (var i=0; i<segments.length; i++) { | 
				
			||||
    var segment = segments[i]; | 
				
			||||
    if (segment) { | 
				
			||||
      data += getProperty(unescapeJsonPointer(segment)); | 
				
			||||
      expr += ' && ' + data; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  return expr; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function joinPaths (a, b) { | 
				
			||||
  if (a == '""') return b; | 
				
			||||
  return (a + ' + ' + b).replace(/' \+ '/g, ''); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function unescapeFragment(str) { | 
				
			||||
  return unescapeJsonPointer(decodeURIComponent(str)); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function escapeFragment(str) { | 
				
			||||
  return encodeURIComponent(escapeJsonPointer(str)); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function escapeJsonPointer(str) { | 
				
			||||
  return str.replace(/~/g, '~0').replace(/\//g, '~1'); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
function unescapeJsonPointer(str) { | 
				
			||||
  return str.replace(/~1/g, '/').replace(/~0/g, '~'); | 
				
			||||
} | 
				
			||||
@ -1,96 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.$data }} | 
				
			||||
 | 
				
			||||
{{## def.setExclusiveLimit: | 
				
			||||
  $exclusive = true; | 
				
			||||
  $errorKeyword = $exclusiveKeyword; | 
				
			||||
  $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
{{ | 
				
			||||
  var $isMax = $keyword == 'maximum' | 
				
			||||
    , $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum' | 
				
			||||
    , $schemaExcl = it.schema[$exclusiveKeyword] | 
				
			||||
    , $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data | 
				
			||||
    , $op = $isMax ? '<' : '>' | 
				
			||||
    , $notOp = $isMax ? '>' : '<' | 
				
			||||
    , $errorKeyword = undefined; | 
				
			||||
}} | 
				
			||||
 | 
				
			||||
{{? $isDataExcl }} | 
				
			||||
  {{ | 
				
			||||
    var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr) | 
				
			||||
      , $exclusive = 'exclusive' + $lvl | 
				
			||||
      , $exclType = 'exclType' + $lvl | 
				
			||||
      , $exclIsNumber = 'exclIsNumber' + $lvl | 
				
			||||
      , $opExpr = 'op' + $lvl | 
				
			||||
      , $opStr = '\' + ' + $opExpr + ' + \''; | 
				
			||||
  }} | 
				
			||||
  var schemaExcl{{=$lvl}} = {{=$schemaValueExcl}}; | 
				
			||||
  {{ $schemaValueExcl = 'schemaExcl' + $lvl; }} | 
				
			||||
 | 
				
			||||
  var {{=$exclusive}}; | 
				
			||||
  var {{=$exclType}} = typeof {{=$schemaValueExcl}}; | 
				
			||||
  if ({{=$exclType}} != 'boolean' && {{=$exclType}} != 'undefined' && {{=$exclType}} != 'number') { | 
				
			||||
    {{ var $errorKeyword = $exclusiveKeyword; }} | 
				
			||||
    {{# def.error:'_exclusiveLimit' }} | 
				
			||||
  } else if ({{# def.$dataNotType:'number' }} | 
				
			||||
            {{=$exclType}} == 'number' | 
				
			||||
              ? ( | 
				
			||||
                  ({{=$exclusive}} = {{=$schemaValue}} === undefined || {{=$schemaValueExcl}} {{=$op}}= {{=$schemaValue}}) | 
				
			||||
                    ? {{=$data}} {{=$notOp}}= {{=$schemaValueExcl}} | 
				
			||||
                    : {{=$data}} {{=$notOp}} {{=$schemaValue}} | 
				
			||||
                ) | 
				
			||||
              : ( | 
				
			||||
                  ({{=$exclusive}} = {{=$schemaValueExcl}} === true) | 
				
			||||
                    ? {{=$data}} {{=$notOp}}= {{=$schemaValue}} | 
				
			||||
                    : {{=$data}} {{=$notOp}} {{=$schemaValue}} | 
				
			||||
                ) | 
				
			||||
            || {{=$data}} !== {{=$data}}) { | 
				
			||||
    var op{{=$lvl}} = {{=$exclusive}} ? '{{=$op}}' : '{{=$op}}='; | 
				
			||||
{{??}} | 
				
			||||
  {{ | 
				
			||||
    var $exclIsNumber = typeof $schemaExcl == 'number' | 
				
			||||
      , $opStr = $op;  /*used in error*/ | 
				
			||||
  }} | 
				
			||||
 | 
				
			||||
  {{? $exclIsNumber && $isData }} | 
				
			||||
    {{ var $opExpr = '\'' + $opStr + '\''; /*used in error*/ }} | 
				
			||||
    if ({{# def.$dataNotType:'number' }} | 
				
			||||
        ( {{=$schemaValue}} === undefined | 
				
			||||
          || {{=$schemaExcl}} {{=$op}}= {{=$schemaValue}} | 
				
			||||
            ? {{=$data}} {{=$notOp}}= {{=$schemaExcl}} | 
				
			||||
            : {{=$data}} {{=$notOp}} {{=$schemaValue}} ) | 
				
			||||
        || {{=$data}} !== {{=$data}}) { | 
				
			||||
  {{??}} | 
				
			||||
    {{ | 
				
			||||
      if ($exclIsNumber && $schema === undefined) { | 
				
			||||
          {{# def.setExclusiveLimit }} | 
				
			||||
          $schemaValue = $schemaExcl; | 
				
			||||
          $notOp += '='; | 
				
			||||
      } else { | 
				
			||||
        if ($exclIsNumber) | 
				
			||||
          $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema); | 
				
			||||
 | 
				
			||||
        if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) { | 
				
			||||
          {{# def.setExclusiveLimit }} | 
				
			||||
          $notOp += '='; | 
				
			||||
        } else { | 
				
			||||
          $exclusive = false; | 
				
			||||
          $opStr += '='; | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
 | 
				
			||||
      var $opExpr = '\'' + $opStr + '\''; /*used in error*/ | 
				
			||||
    }} | 
				
			||||
 | 
				
			||||
    if ({{# def.$dataNotType:'number' }} | 
				
			||||
        {{=$data}} {{=$notOp}} {{=$schemaValue}} | 
				
			||||
        || {{=$data}} !== {{=$data}}) { | 
				
			||||
  {{?}} | 
				
			||||
{{?}} | 
				
			||||
    {{ $errorKeyword = $errorKeyword || $keyword; }} | 
				
			||||
    {{# def.error:'_limit' }} | 
				
			||||
  } {{? $breakOnError }} else { {{?}} | 
				
			||||
@ -1,10 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.$data }} | 
				
			||||
 | 
				
			||||
{{ var $op = $keyword == 'maxItems' ? '>' : '<'; }} | 
				
			||||
if ({{# def.$dataNotType:'number' }} {{=$data}}.length {{=$op}} {{=$schemaValue}}) { | 
				
			||||
  {{ var $errorKeyword = $keyword; }} | 
				
			||||
  {{# def.error:'_limitItems' }} | 
				
			||||
} {{? $breakOnError }} else { {{?}} | 
				
			||||
@ -1,10 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.$data }} | 
				
			||||
 | 
				
			||||
{{ var $op = $keyword == 'maxLength' ? '>' : '<'; }} | 
				
			||||
if ({{# def.$dataNotType:'number' }} {{# def.strLength }} {{=$op}} {{=$schemaValue}}) { | 
				
			||||
  {{ var $errorKeyword = $keyword; }} | 
				
			||||
  {{# def.error:'_limitLength' }} | 
				
			||||
} {{? $breakOnError }} else { {{?}} | 
				
			||||
@ -1,10 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.$data }} | 
				
			||||
 | 
				
			||||
{{ var $op = $keyword == 'maxProperties' ? '>' : '<'; }} | 
				
			||||
if ({{# def.$dataNotType:'number' }} Object.keys({{=$data}}).length {{=$op}} {{=$schemaValue}}) { | 
				
			||||
  {{ var $errorKeyword = $keyword; }} | 
				
			||||
  {{# def.error:'_limitProperties' }} | 
				
			||||
} {{? $breakOnError }} else { {{?}} | 
				
			||||
@ -1,34 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.setupNextLevel }} | 
				
			||||
 | 
				
			||||
{{ | 
				
			||||
  var $currentBaseId = $it.baseId | 
				
			||||
    , $allSchemasEmpty = true; | 
				
			||||
}} | 
				
			||||
 | 
				
			||||
{{~ $schema:$sch:$i }} | 
				
			||||
  {{? {{# def.nonEmptySchema:$sch }} }} | 
				
			||||
    {{ | 
				
			||||
      $allSchemasEmpty = false; | 
				
			||||
      $it.schema = $sch; | 
				
			||||
      $it.schemaPath = $schemaPath + '[' + $i + ']'; | 
				
			||||
      $it.errSchemaPath = $errSchemaPath + '/' + $i; | 
				
			||||
    }} | 
				
			||||
 | 
				
			||||
    {{# def.insertSubschemaCode }} | 
				
			||||
 | 
				
			||||
    {{# def.ifResultValid }} | 
				
			||||
  {{?}} | 
				
			||||
{{~}} | 
				
			||||
 | 
				
			||||
{{? $breakOnError }} | 
				
			||||
  {{? $allSchemasEmpty }} | 
				
			||||
    if (true) { | 
				
			||||
  {{??}} | 
				
			||||
    {{= $closingBraces.slice(0,-1) }} | 
				
			||||
  {{?}} | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{# def.cleanUp }} | 
				
			||||
@ -1,48 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.setupNextLevel }} | 
				
			||||
 | 
				
			||||
{{ | 
				
			||||
  var $noEmptySchema = $schema.every(function($sch) { | 
				
			||||
    return {{# def.nonEmptySchema:$sch }}; | 
				
			||||
  }); | 
				
			||||
}} | 
				
			||||
{{? $noEmptySchema }} | 
				
			||||
  {{ var $currentBaseId = $it.baseId; }} | 
				
			||||
  var {{=$errs}} = errors; | 
				
			||||
  var {{=$valid}} = false; | 
				
			||||
 | 
				
			||||
  {{# def.setCompositeRule }} | 
				
			||||
 | 
				
			||||
  {{~ $schema:$sch:$i }} | 
				
			||||
    {{ | 
				
			||||
      $it.schema = $sch; | 
				
			||||
      $it.schemaPath = $schemaPath + '[' + $i + ']'; | 
				
			||||
      $it.errSchemaPath = $errSchemaPath + '/' + $i; | 
				
			||||
    }} | 
				
			||||
 | 
				
			||||
    {{# def.insertSubschemaCode }} | 
				
			||||
 | 
				
			||||
    {{=$valid}} = {{=$valid}} || {{=$nextValid}}; | 
				
			||||
 | 
				
			||||
    if (!{{=$valid}}) { | 
				
			||||
    {{ $closingBraces += '}'; }} | 
				
			||||
  {{~}} | 
				
			||||
 | 
				
			||||
  {{# def.resetCompositeRule }} | 
				
			||||
 | 
				
			||||
  {{= $closingBraces }} | 
				
			||||
 | 
				
			||||
  if (!{{=$valid}}) { | 
				
			||||
    {{# def.extraError:'anyOf' }} | 
				
			||||
  } else { | 
				
			||||
    {{# def.resetErrors }} | 
				
			||||
  {{? it.opts.allErrors }} } {{?}} | 
				
			||||
 | 
				
			||||
  {{# def.cleanUp }} | 
				
			||||
{{??}} | 
				
			||||
  {{? $breakOnError }} | 
				
			||||
    if (true) { | 
				
			||||
  {{?}} | 
				
			||||
{{?}} | 
				
			||||
@ -1,61 +0,0 @@
					 | 
				
			||||
{{## def.coerceType: | 
				
			||||
  {{ | 
				
			||||
    var $dataType = 'dataType' + $lvl | 
				
			||||
      , $coerced = 'coerced' + $lvl; | 
				
			||||
  }} | 
				
			||||
  var {{=$dataType}} = typeof {{=$data}}; | 
				
			||||
  {{? it.opts.coerceTypes == 'array'}} | 
				
			||||
    if ({{=$dataType}} == 'object' && Array.isArray({{=$data}})) {{=$dataType}} = 'array'; | 
				
			||||
  {{?}} | 
				
			||||
 | 
				
			||||
  var {{=$coerced}} = undefined; | 
				
			||||
 | 
				
			||||
  {{ var $bracesCoercion = ''; }} | 
				
			||||
  {{~ $coerceToTypes:$type:$i }} | 
				
			||||
    {{? $i }} | 
				
			||||
      if ({{=$coerced}} === undefined) { | 
				
			||||
      {{ $bracesCoercion += '}'; }} | 
				
			||||
    {{?}} | 
				
			||||
 | 
				
			||||
    {{? it.opts.coerceTypes == 'array' && $type != 'array' }} | 
				
			||||
      if ({{=$dataType}} == 'array' && {{=$data}}.length == 1) { | 
				
			||||
        {{=$coerced}} = {{=$data}} = {{=$data}}[0]; | 
				
			||||
        {{=$dataType}} = typeof {{=$data}}; | 
				
			||||
        /*if ({{=$dataType}} == 'object' && Array.isArray({{=$data}})) {{=$dataType}} = 'array';*/ | 
				
			||||
      } | 
				
			||||
    {{?}} | 
				
			||||
 | 
				
			||||
    {{? $type == 'string' }} | 
				
			||||
      if ({{=$dataType}} == 'number' || {{=$dataType}} == 'boolean') | 
				
			||||
        {{=$coerced}} = '' + {{=$data}}; | 
				
			||||
      else if ({{=$data}} === null) {{=$coerced}} = ''; | 
				
			||||
    {{?? $type == 'number' || $type == 'integer' }} | 
				
			||||
      if ({{=$dataType}} == 'boolean' || {{=$data}} === null | 
				
			||||
          || ({{=$dataType}} == 'string' && {{=$data}} && {{=$data}} == +{{=$data}} | 
				
			||||
          {{? $type == 'integer' }} && !({{=$data}} % 1){{?}})) | 
				
			||||
        {{=$coerced}} = +{{=$data}}; | 
				
			||||
    {{?? $type == 'boolean' }} | 
				
			||||
      if ({{=$data}} === 'false' || {{=$data}} === 0 || {{=$data}} === null) | 
				
			||||
        {{=$coerced}} = false; | 
				
			||||
      else if ({{=$data}} === 'true' || {{=$data}} === 1) | 
				
			||||
        {{=$coerced}} = true; | 
				
			||||
    {{?? $type == 'null' }} | 
				
			||||
      if ({{=$data}} === '' || {{=$data}} === 0 || {{=$data}} === false) | 
				
			||||
        {{=$coerced}} = null; | 
				
			||||
    {{?? it.opts.coerceTypes == 'array' && $type == 'array' }} | 
				
			||||
      if ({{=$dataType}} == 'string' || {{=$dataType}} == 'number' || {{=$dataType}} == 'boolean' || {{=$data}} == null) | 
				
			||||
        {{=$coerced}} = [{{=$data}}]; | 
				
			||||
    {{?}} | 
				
			||||
  {{~}} | 
				
			||||
 | 
				
			||||
  {{= $bracesCoercion }} | 
				
			||||
 | 
				
			||||
  if ({{=$coerced}} === undefined) { | 
				
			||||
    {{# def.error:'type' }} | 
				
			||||
  } else { | 
				
			||||
    {{# def.setParentData }} | 
				
			||||
    {{=$data}} = {{=$coerced}}; | 
				
			||||
    {{? !$dataLvl }}if ({{=$parentData}} !== undefined){{?}} | 
				
			||||
      {{=$parentData}}[{{=$parentDataProperty}}] = {{=$coerced}}; | 
				
			||||
  } | 
				
			||||
#}} | 
				
			||||
@ -1,11 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.$data }} | 
				
			||||
 | 
				
			||||
{{? !$isData }} | 
				
			||||
  var schema{{=$lvl}} = validate.schema{{=$schemaPath}}; | 
				
			||||
{{?}} | 
				
			||||
var {{=$valid}} = equal({{=$data}}, schema{{=$lvl}}); | 
				
			||||
{{# def.checkError:'const' }} | 
				
			||||
{{? $breakOnError }} else { {{?}} | 
				
			||||
@ -1,57 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.setupNextLevel }} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{ | 
				
			||||
  var $idx = 'i' + $lvl | 
				
			||||
    , $dataNxt = $it.dataLevel = it.dataLevel + 1 | 
				
			||||
    , $nextData = 'data' + $dataNxt | 
				
			||||
    , $currentBaseId = it.baseId | 
				
			||||
    , $nonEmptySchema = {{# def.nonEmptySchema:$schema }}; | 
				
			||||
}} | 
				
			||||
 | 
				
			||||
var {{=$errs}} = errors; | 
				
			||||
var {{=$valid}}; | 
				
			||||
 | 
				
			||||
{{? $nonEmptySchema }} | 
				
			||||
  {{# def.setCompositeRule }} | 
				
			||||
 | 
				
			||||
  {{ | 
				
			||||
    $it.schema = $schema; | 
				
			||||
    $it.schemaPath = $schemaPath; | 
				
			||||
    $it.errSchemaPath = $errSchemaPath; | 
				
			||||
  }} | 
				
			||||
 | 
				
			||||
  var {{=$nextValid}} = false; | 
				
			||||
 | 
				
			||||
  for (var {{=$idx}} = 0; {{=$idx}} < {{=$data}}.length; {{=$idx}}++) { | 
				
			||||
    {{ | 
				
			||||
      $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); | 
				
			||||
      var $passData = $data + '[' + $idx + ']'; | 
				
			||||
      $it.dataPathArr[$dataNxt] = $idx; | 
				
			||||
    }} | 
				
			||||
 | 
				
			||||
    {{# def.generateSubschemaCode }} | 
				
			||||
    {{# def.optimizeValidate }} | 
				
			||||
 | 
				
			||||
    if ({{=$nextValid}}) break; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  {{# def.resetCompositeRule }} | 
				
			||||
  {{= $closingBraces }} | 
				
			||||
 | 
				
			||||
  if (!{{=$nextValid}}) { | 
				
			||||
{{??}} | 
				
			||||
  if ({{=$data}}.length == 0) { | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
    {{# def.error:'contains' }} | 
				
			||||
  } else { | 
				
			||||
    {{? $nonEmptySchema }} | 
				
			||||
      {{# def.resetErrors }} | 
				
			||||
    {{?}} | 
				
			||||
  {{? it.opts.allErrors }} } {{?}} | 
				
			||||
 | 
				
			||||
{{# def.cleanUp }} | 
				
			||||
@ -1,191 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.$data }} | 
				
			||||
 | 
				
			||||
{{ | 
				
			||||
  var $rule = this | 
				
			||||
    , $definition = 'definition' + $lvl | 
				
			||||
    , $rDef = $rule.definition | 
				
			||||
    , $closingBraces = ''; | 
				
			||||
  var $validate = $rDef.validate; | 
				
			||||
  var $compile, $inline, $macro, $ruleValidate, $validateCode; | 
				
			||||
}} | 
				
			||||
 | 
				
			||||
{{? $isData && $rDef.$data }} | 
				
			||||
  {{ | 
				
			||||
    $validateCode = 'keywordValidate' + $lvl; | 
				
			||||
    var $validateSchema = $rDef.validateSchema; | 
				
			||||
  }} | 
				
			||||
  var {{=$definition}} = RULES.custom['{{=$keyword}}'].definition; | 
				
			||||
  var {{=$validateCode}} = {{=$definition}}.validate; | 
				
			||||
{{??}} | 
				
			||||
  {{ | 
				
			||||
    $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it); | 
				
			||||
    if (!$ruleValidate) return; | 
				
			||||
    $schemaValue = 'validate.schema' + $schemaPath; | 
				
			||||
    $validateCode = $ruleValidate.code; | 
				
			||||
    $compile = $rDef.compile; | 
				
			||||
    $inline = $rDef.inline; | 
				
			||||
    $macro = $rDef.macro; | 
				
			||||
  }} | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{ | 
				
			||||
  var $ruleErrs = $validateCode + '.errors' | 
				
			||||
    , $i = 'i' + $lvl | 
				
			||||
    , $ruleErr = 'ruleErr' + $lvl | 
				
			||||
    , $asyncKeyword = $rDef.async; | 
				
			||||
 | 
				
			||||
  if ($asyncKeyword && !it.async) | 
				
			||||
    throw new Error('async keyword in sync schema'); | 
				
			||||
}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{? !($inline || $macro) }}{{=$ruleErrs}} = null;{{?}} | 
				
			||||
var {{=$errs}} = errors; | 
				
			||||
var {{=$valid}}; | 
				
			||||
 | 
				
			||||
{{## def.callRuleValidate: | 
				
			||||
  {{=$validateCode}}.call( | 
				
			||||
    {{? it.opts.passContext }}this{{??}}self{{?}} | 
				
			||||
    {{? $compile || $rDef.schema === false }} | 
				
			||||
      , {{=$data}} | 
				
			||||
    {{??}} | 
				
			||||
      , {{=$schemaValue}} | 
				
			||||
      , {{=$data}} | 
				
			||||
      , validate.schema{{=it.schemaPath}} | 
				
			||||
    {{?}} | 
				
			||||
    , {{# def.dataPath }} | 
				
			||||
    {{# def.passParentData }} | 
				
			||||
    , rootData | 
				
			||||
  ) | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
{{## def.extendErrors:_inline: | 
				
			||||
  for (var {{=$i}}={{=$errs}}; {{=$i}}<errors; {{=$i}}++) { | 
				
			||||
    var {{=$ruleErr}} = vErrors[{{=$i}}]; | 
				
			||||
    if ({{=$ruleErr}}.dataPath === undefined) | 
				
			||||
      {{=$ruleErr}}.dataPath = (dataPath || '') + {{= it.errorPath }}; | 
				
			||||
    {{# _inline ? 'if (\{\{=$ruleErr\}\}.schemaPath === undefined) {' : '' }} | 
				
			||||
      {{=$ruleErr}}.schemaPath = "{{=$errSchemaPath}}"; | 
				
			||||
    {{# _inline ? '}' : '' }} | 
				
			||||
    {{? it.opts.verbose }} | 
				
			||||
      {{=$ruleErr}}.schema = {{=$schemaValue}}; | 
				
			||||
      {{=$ruleErr}}.data = {{=$data}}; | 
				
			||||
    {{?}} | 
				
			||||
  } | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{? $isData && $rDef.$data }} | 
				
			||||
  {{ $closingBraces += '}'; }} | 
				
			||||
  if ({{=$schemaValue}} === undefined) { | 
				
			||||
    {{=$valid}} = true; | 
				
			||||
  } else { | 
				
			||||
  {{? $validateSchema }} | 
				
			||||
    {{ $closingBraces += '}'; }} | 
				
			||||
    {{=$valid}} = {{=$definition}}.validateSchema({{=$schemaValue}}); | 
				
			||||
    if ({{=$valid}}) { | 
				
			||||
  {{?}} | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{? $inline }} | 
				
			||||
  {{? $rDef.statements }} | 
				
			||||
    {{= $ruleValidate.validate }} | 
				
			||||
  {{??}} | 
				
			||||
    {{=$valid}} = {{= $ruleValidate.validate }}; | 
				
			||||
  {{?}} | 
				
			||||
{{?? $macro }} | 
				
			||||
  {{# def.setupNextLevel }} | 
				
			||||
  {{ | 
				
			||||
    $it.schema = $ruleValidate.validate; | 
				
			||||
    $it.schemaPath = ''; | 
				
			||||
  }} | 
				
			||||
  {{# def.setCompositeRule }} | 
				
			||||
  {{ var $code = it.validate($it).replace(/validate\.schema/g, $validateCode); }} | 
				
			||||
  {{# def.resetCompositeRule }} | 
				
			||||
  {{= $code }} | 
				
			||||
{{??}} | 
				
			||||
  {{# def.beginDefOut}} | 
				
			||||
    {{# def.callRuleValidate }} | 
				
			||||
  {{# def.storeDefOut:def_callRuleValidate }} | 
				
			||||
 | 
				
			||||
  {{? $rDef.errors === false }} | 
				
			||||
    {{=$valid}} = {{? $asyncKeyword }}{{=it.yieldAwait}}{{?}}{{= def_callRuleValidate }}; | 
				
			||||
  {{??}} | 
				
			||||
    {{? $asyncKeyword }} | 
				
			||||
      {{ $ruleErrs = 'customErrors' + $lvl; }} | 
				
			||||
      var {{=$ruleErrs}} = null; | 
				
			||||
      try { | 
				
			||||
        {{=$valid}} = {{=it.yieldAwait}}{{= def_callRuleValidate }}; | 
				
			||||
      } catch (e) { | 
				
			||||
        {{=$valid}} = false; | 
				
			||||
        if (e instanceof ValidationError) {{=$ruleErrs}} = e.errors; | 
				
			||||
        else throw e; | 
				
			||||
      } | 
				
			||||
    {{??}} | 
				
			||||
      {{=$ruleErrs}} = null; | 
				
			||||
      {{=$valid}} = {{= def_callRuleValidate }}; | 
				
			||||
    {{?}} | 
				
			||||
  {{?}} | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{? $rDef.modifying }} | 
				
			||||
  if ({{=$parentData}}) {{=$data}} = {{=$parentData}}[{{=$parentDataProperty}}]; | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{= $closingBraces }} | 
				
			||||
 | 
				
			||||
{{## def.notValidationResult: | 
				
			||||
  {{? $rDef.valid === undefined }} | 
				
			||||
    !{{? $macro }}{{=$nextValid}}{{??}}{{=$valid}}{{?}} | 
				
			||||
  {{??}} | 
				
			||||
    {{= !$rDef.valid }} | 
				
			||||
  {{?}} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
{{? $rDef.valid }} | 
				
			||||
  {{? $breakOnError }} if (true) { {{?}} | 
				
			||||
{{??}} | 
				
			||||
  if ({{# def.notValidationResult }}) { | 
				
			||||
    {{ $errorKeyword = $rule.keyword; }} | 
				
			||||
    {{# def.beginDefOut}} | 
				
			||||
      {{# def.error:'custom' }} | 
				
			||||
    {{# def.storeDefOut:def_customError }} | 
				
			||||
 | 
				
			||||
    {{? $inline }} | 
				
			||||
      {{? $rDef.errors }} | 
				
			||||
        {{? $rDef.errors != 'full' }} | 
				
			||||
          {{# def.extendErrors:true }} | 
				
			||||
        {{?}} | 
				
			||||
      {{??}} | 
				
			||||
        {{? $rDef.errors === false}} | 
				
			||||
          {{= def_customError }} | 
				
			||||
        {{??}} | 
				
			||||
          if ({{=$errs}} == errors) { | 
				
			||||
            {{= def_customError }} | 
				
			||||
          } else { | 
				
			||||
            {{# def.extendErrors:true }} | 
				
			||||
          } | 
				
			||||
        {{?}} | 
				
			||||
      {{?}} | 
				
			||||
    {{?? $macro }} | 
				
			||||
      {{# def.extraError:'custom' }} | 
				
			||||
    {{??}} | 
				
			||||
      {{? $rDef.errors === false}} | 
				
			||||
        {{= def_customError }} | 
				
			||||
      {{??}} | 
				
			||||
        if (Array.isArray({{=$ruleErrs}})) { | 
				
			||||
          if (vErrors === null) vErrors = {{=$ruleErrs}}; | 
				
			||||
          else vErrors = vErrors.concat({{=$ruleErrs}}); | 
				
			||||
          errors = vErrors.length; | 
				
			||||
          {{# def.extendErrors:false }} | 
				
			||||
        } else { | 
				
			||||
          {{= def_customError }} | 
				
			||||
        } | 
				
			||||
      {{?}} | 
				
			||||
    {{?}} | 
				
			||||
 | 
				
			||||
  } {{? $breakOnError }} else { {{?}} | 
				
			||||
{{?}} | 
				
			||||
@ -1,32 +0,0 @@
					 | 
				
			||||
{{## def.assignDefault: | 
				
			||||
  if ({{=$passData}} === undefined) | 
				
			||||
    {{=$passData}} = {{? it.opts.useDefaults == 'shared' }} | 
				
			||||
                       {{= it.useDefault($sch.default) }} | 
				
			||||
                     {{??}} | 
				
			||||
                       {{= JSON.stringify($sch.default) }} | 
				
			||||
                     {{?}}; | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.defaultProperties: | 
				
			||||
  {{ | 
				
			||||
    var $schema = it.schema.properties | 
				
			||||
      , $schemaKeys = Object.keys($schema); }} | 
				
			||||
  {{~ $schemaKeys:$propertyKey }} | 
				
			||||
    {{ var $sch = $schema[$propertyKey]; }} | 
				
			||||
    {{? $sch.default !== undefined }} | 
				
			||||
      {{ var $passData = $data + it.util.getProperty($propertyKey); }} | 
				
			||||
      {{# def.assignDefault }} | 
				
			||||
    {{?}} | 
				
			||||
  {{~}} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.defaultItems: | 
				
			||||
  {{~ it.schema.items:$sch:$i }} | 
				
			||||
    {{? $sch.default !== undefined }} | 
				
			||||
      {{ var $passData = $data + '[' + $i + ']'; }} | 
				
			||||
      {{# def.assignDefault }} | 
				
			||||
    {{?}} | 
				
			||||
  {{~}} | 
				
			||||
#}} | 
				
			||||
@ -1,199 +0,0 @@
					 | 
				
			||||
{{## def.setupKeyword: | 
				
			||||
  {{ | 
				
			||||
    var $lvl = it.level; | 
				
			||||
    var $dataLvl = it.dataLevel; | 
				
			||||
    var $schema = it.schema[$keyword]; | 
				
			||||
    var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
    var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
    var $breakOnError = !it.opts.allErrors; | 
				
			||||
    var $errorKeyword; | 
				
			||||
 | 
				
			||||
    var $data = 'data' + ($dataLvl || ''); | 
				
			||||
    var $valid = 'valid' + $lvl; | 
				
			||||
    var $errs = 'errs__' + $lvl; | 
				
			||||
  }} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.setCompositeRule: | 
				
			||||
  {{ | 
				
			||||
    var $wasComposite = it.compositeRule; | 
				
			||||
    it.compositeRule = $it.compositeRule = true; | 
				
			||||
  }} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.resetCompositeRule: | 
				
			||||
  {{ it.compositeRule = $it.compositeRule = $wasComposite; }} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.setupNextLevel: | 
				
			||||
  {{ | 
				
			||||
    var $it = it.util.copy(it); | 
				
			||||
    var $closingBraces = ''; | 
				
			||||
    $it.level++; | 
				
			||||
    var $nextValid = 'valid' + $it.level; | 
				
			||||
  }} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.ifValid: | 
				
			||||
  {{? $breakOnError }} | 
				
			||||
    if ({{=$valid}}) { | 
				
			||||
    {{ $closingBraces += '}'; }} | 
				
			||||
  {{?}} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.ifResultValid: | 
				
			||||
  {{? $breakOnError }} | 
				
			||||
    if ({{=$nextValid}}) { | 
				
			||||
    {{ $closingBraces += '}'; }} | 
				
			||||
  {{?}} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.elseIfValid: | 
				
			||||
  {{? $breakOnError }} | 
				
			||||
    {{ $closingBraces += '}'; }} | 
				
			||||
    else { | 
				
			||||
  {{?}} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.nonEmptySchema:_schema: | 
				
			||||
  it.util.schemaHasRules(_schema, it.RULES.all) | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.strLength: | 
				
			||||
  {{? it.opts.unicode === false }} | 
				
			||||
    {{=$data}}.length | 
				
			||||
  {{??}} | 
				
			||||
    ucs2length({{=$data}}) | 
				
			||||
  {{?}} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.willOptimize: | 
				
			||||
  it.util.varOccurences($code, $nextData) < 2 | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.generateSubschemaCode: | 
				
			||||
  {{ | 
				
			||||
    var $code = it.validate($it); | 
				
			||||
    $it.baseId = $currentBaseId; | 
				
			||||
  }} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.insertSubschemaCode: | 
				
			||||
  {{= it.validate($it) }} | 
				
			||||
  {{ $it.baseId = $currentBaseId; }} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def._optimizeValidate: | 
				
			||||
  it.util.varReplace($code, $nextData, $passData) | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.optimizeValidate: | 
				
			||||
  {{? {{# def.willOptimize}} }} | 
				
			||||
    {{= {{# def._optimizeValidate }} }} | 
				
			||||
  {{??}} | 
				
			||||
    var {{=$nextData}} = {{=$passData}}; | 
				
			||||
    {{= $code }} | 
				
			||||
  {{?}} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.cleanUp: {{ out = it.util.cleanUpCode(out); }} #}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.finalCleanUp: {{ out = it.util.finalCleanUpCode(out, $async); }} #}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.$data: | 
				
			||||
  {{ | 
				
			||||
    var $isData = it.opts.$data && $schema && $schema.$data | 
				
			||||
      , $schemaValue; | 
				
			||||
  }} | 
				
			||||
  {{? $isData }} | 
				
			||||
    var schema{{=$lvl}} = {{= it.util.getData($schema.$data, $dataLvl, it.dataPathArr) }}; | 
				
			||||
    {{ $schemaValue = 'schema' + $lvl; }} | 
				
			||||
  {{??}} | 
				
			||||
    {{ $schemaValue = $schema; }} | 
				
			||||
  {{?}} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.$dataNotType:_type: | 
				
			||||
  {{?$isData}} ({{=$schemaValue}} !== undefined && typeof {{=$schemaValue}} != _type) || {{?}} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.check$dataIsArray: | 
				
			||||
  if (schema{{=$lvl}} === undefined) {{=$valid}} = true; | 
				
			||||
  else if (!Array.isArray(schema{{=$lvl}})) {{=$valid}} = false; | 
				
			||||
  else { | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.beginDefOut: | 
				
			||||
  {{ | 
				
			||||
    var $$outStack = $$outStack || []; | 
				
			||||
    $$outStack.push(out); | 
				
			||||
    out = ''; | 
				
			||||
  }} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.storeDefOut:_variable: | 
				
			||||
  {{ | 
				
			||||
    var _variable = out; | 
				
			||||
    out = $$outStack.pop(); | 
				
			||||
  }} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.dataPath:(dataPath || ''){{? it.errorPath != '""'}} + {{= it.errorPath }}{{?}}#}} | 
				
			||||
 | 
				
			||||
{{## def.setParentData: | 
				
			||||
  {{ | 
				
			||||
    var $parentData = $dataLvl ? 'data' + (($dataLvl-1)||'') : 'parentData' | 
				
			||||
      , $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; | 
				
			||||
  }} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
{{## def.passParentData: | 
				
			||||
  {{# def.setParentData }} | 
				
			||||
  , {{= $parentData }} | 
				
			||||
  , {{= $parentDataProperty }} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.iterateProperties: | 
				
			||||
  {{? $ownProperties }} | 
				
			||||
    {{=$dataProperties}} = {{=$dataProperties}} || Object.keys({{=$data}}); | 
				
			||||
    for (var {{=$idx}}=0; {{=$idx}}<{{=$dataProperties}}.length; {{=$idx}}++) { | 
				
			||||
      var {{=$key}} = {{=$dataProperties}}[{{=$idx}}]; | 
				
			||||
  {{??}} | 
				
			||||
    for (var {{=$key}} in {{=$data}}) { | 
				
			||||
  {{?}} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.noPropertyInData: | 
				
			||||
  {{=$useData}} === undefined | 
				
			||||
  {{? $ownProperties }} | 
				
			||||
    || !{{# def.isOwnProperty }} | 
				
			||||
  {{?}} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.isOwnProperty: | 
				
			||||
  Object.prototype.hasOwnProperty.call({{=$data}}, '{{=it.util.escapeQuotes($propertyKey)}}') | 
				
			||||
#}} | 
				
			||||
@ -1,80 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.missing }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.setupNextLevel }} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.propertyInData: | 
				
			||||
  {{=$data}}{{= it.util.getProperty($property) }} !== undefined | 
				
			||||
  {{? $ownProperties }} | 
				
			||||
    && Object.prototype.hasOwnProperty.call({{=$data}}, '{{=it.util.escapeQuotes($property)}}') | 
				
			||||
  {{?}} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{ | 
				
			||||
  var $schemaDeps = {} | 
				
			||||
    , $propertyDeps = {} | 
				
			||||
    , $ownProperties = it.opts.ownProperties; | 
				
			||||
 | 
				
			||||
  for ($property in $schema) { | 
				
			||||
    var $sch = $schema[$property]; | 
				
			||||
    var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps; | 
				
			||||
    $deps[$property] = $sch; | 
				
			||||
  } | 
				
			||||
}} | 
				
			||||
 | 
				
			||||
var {{=$errs}} = errors; | 
				
			||||
 | 
				
			||||
{{ var $currentErrorPath = it.errorPath; }} | 
				
			||||
 | 
				
			||||
var missing{{=$lvl}}; | 
				
			||||
{{ for (var $property in $propertyDeps) { }} | 
				
			||||
  {{ $deps = $propertyDeps[$property]; }} | 
				
			||||
  {{? $deps.length }} | 
				
			||||
    if ({{# def.propertyInData }} | 
				
			||||
      {{? $breakOnError }} | 
				
			||||
          && ({{# def.checkMissingProperty:$deps }})) { | 
				
			||||
          {{# def.errorMissingProperty:'dependencies' }} | 
				
			||||
      {{??}} | 
				
			||||
        ) { | 
				
			||||
          {{~ $deps:$propertyKey }} | 
				
			||||
            {{# def.allErrorsMissingProperty:'dependencies' }} | 
				
			||||
          {{~}} | 
				
			||||
      {{?}} | 
				
			||||
    } {{# def.elseIfValid }} | 
				
			||||
  {{?}} | 
				
			||||
{{ } }} | 
				
			||||
 | 
				
			||||
{{ | 
				
			||||
  it.errorPath = $currentErrorPath; | 
				
			||||
  var $currentBaseId = $it.baseId; | 
				
			||||
}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{ for (var $property in $schemaDeps) { }} | 
				
			||||
  {{ var $sch = $schemaDeps[$property]; }} | 
				
			||||
  {{? {{# def.nonEmptySchema:$sch }} }} | 
				
			||||
    {{=$nextValid}} = true; | 
				
			||||
 | 
				
			||||
    if ({{# def.propertyInData }}) { | 
				
			||||
      {{  | 
				
			||||
        $it.schema = $sch; | 
				
			||||
        $it.schemaPath = $schemaPath + it.util.getProperty($property); | 
				
			||||
        $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property); | 
				
			||||
      }} | 
				
			||||
 | 
				
			||||
      {{# def.insertSubschemaCode }} | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    {{# def.ifResultValid }} | 
				
			||||
  {{?}} | 
				
			||||
{{ } }} | 
				
			||||
 | 
				
			||||
{{? $breakOnError }}  | 
				
			||||
  {{= $closingBraces }} | 
				
			||||
  if ({{=$errs}} == errors) { | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{# def.cleanUp }} | 
				
			||||
@ -1,30 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.$data }} | 
				
			||||
 | 
				
			||||
{{ | 
				
			||||
  var $i = 'i' + $lvl | 
				
			||||
    , $vSchema = 'schema' + $lvl; | 
				
			||||
}} | 
				
			||||
 | 
				
			||||
{{? !$isData }} | 
				
			||||
  var {{=$vSchema}} = validate.schema{{=$schemaPath}}; | 
				
			||||
{{?}} | 
				
			||||
var {{=$valid}}; | 
				
			||||
 | 
				
			||||
{{?$isData}}{{# def.check$dataIsArray }}{{?}} | 
				
			||||
 | 
				
			||||
{{=$valid}} = false; | 
				
			||||
 | 
				
			||||
for (var {{=$i}}=0; {{=$i}}<{{=$vSchema}}.length; {{=$i}}++) | 
				
			||||
  if (equal({{=$data}}, {{=$vSchema}}[{{=$i}}])) { | 
				
			||||
    {{=$valid}} = true; | 
				
			||||
    break; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
{{? $isData }}  }  {{?}} | 
				
			||||
 | 
				
			||||
{{# def.checkError:'enum' }} | 
				
			||||
 | 
				
			||||
{{? $breakOnError }} else { {{?}} | 
				
			||||
@ -1,194 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
 | 
				
			||||
{{## def._error:_rule: | 
				
			||||
  {{ 'istanbul ignore else'; }} | 
				
			||||
  {{? it.createErrors !== false }} | 
				
			||||
    { | 
				
			||||
      keyword: '{{= $errorKeyword || _rule }}' | 
				
			||||
      , dataPath: (dataPath || '') + {{= it.errorPath }} | 
				
			||||
      , schemaPath: {{=it.util.toQuotedString($errSchemaPath)}} | 
				
			||||
      , params: {{# def._errorParams[_rule] }} | 
				
			||||
      {{? it.opts.messages !== false }} | 
				
			||||
        , message: {{# def._errorMessages[_rule] }} | 
				
			||||
      {{?}} | 
				
			||||
      {{? it.opts.verbose }} | 
				
			||||
        , schema: {{# def._errorSchemas[_rule] }} | 
				
			||||
        , parentSchema: validate.schema{{=it.schemaPath}} | 
				
			||||
        , data: {{=$data}} | 
				
			||||
      {{?}} | 
				
			||||
    } | 
				
			||||
  {{??}} | 
				
			||||
    {} | 
				
			||||
  {{?}} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def._addError:_rule: | 
				
			||||
  if (vErrors === null) vErrors = [err]; | 
				
			||||
  else vErrors.push(err); | 
				
			||||
  errors++; | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.addError:_rule: | 
				
			||||
  var err = {{# def._error:_rule }}; | 
				
			||||
  {{# def._addError:_rule }} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.error:_rule: | 
				
			||||
  {{# def.beginDefOut}} | 
				
			||||
    {{# def._error:_rule }} | 
				
			||||
  {{# def.storeDefOut:__err }} | 
				
			||||
 | 
				
			||||
  {{? !it.compositeRule && $breakOnError }} | 
				
			||||
    {{ 'istanbul ignore if'; }} | 
				
			||||
    {{? it.async }} | 
				
			||||
      throw new ValidationError([{{=__err}}]); | 
				
			||||
    {{??}} | 
				
			||||
      validate.errors = [{{=__err}}]; | 
				
			||||
      return false; | 
				
			||||
    {{?}} | 
				
			||||
  {{??}} | 
				
			||||
    var err = {{=__err}}; | 
				
			||||
    {{# def._addError:_rule }} | 
				
			||||
  {{?}} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.extraError:_rule: | 
				
			||||
  {{# def.addError:_rule}} | 
				
			||||
  {{? !it.compositeRule && $breakOnError }} | 
				
			||||
    {{ 'istanbul ignore if'; }} | 
				
			||||
    {{? it.async }} | 
				
			||||
      throw new ValidationError(vErrors); | 
				
			||||
    {{??}} | 
				
			||||
      validate.errors = vErrors; | 
				
			||||
      return false; | 
				
			||||
    {{?}} | 
				
			||||
  {{?}} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.checkError:_rule: | 
				
			||||
  if (!{{=$valid}}) { | 
				
			||||
    {{# def.error:_rule }} | 
				
			||||
  } | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.resetErrors: | 
				
			||||
  errors = {{=$errs}}; | 
				
			||||
  if (vErrors !== null) { | 
				
			||||
    if ({{=$errs}}) vErrors.length = {{=$errs}}; | 
				
			||||
    else vErrors = null; | 
				
			||||
  } | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.concatSchema:{{?$isData}}' + {{=$schemaValue}} + '{{??}}{{=$schema}}{{?}}#}} | 
				
			||||
{{## def.appendSchema:{{?$isData}}' + {{=$schemaValue}}{{??}}{{=$schemaValue}}'{{?}}#}} | 
				
			||||
{{## def.concatSchemaEQ:{{?$isData}}' + {{=$schemaValue}} + '{{??}}{{=it.util.escapeQuotes($schema)}}{{?}}#}} | 
				
			||||
 | 
				
			||||
{{## def._errorMessages = { | 
				
			||||
  'false schema':  "'boolean schema is false'", | 
				
			||||
  $ref:            "'can\\\'t resolve reference {{=it.util.escapeQuotes($schema)}}'", | 
				
			||||
  additionalItems: "'should NOT have more than {{=$schema.length}} items'", | 
				
			||||
  additionalProperties: "'should NOT have additional properties'", | 
				
			||||
  anyOf:           "'should match some schema in anyOf'", | 
				
			||||
  const:           "'should be equal to constant'", | 
				
			||||
  contains:        "'should contain a valid item'", | 
				
			||||
  dependencies:    "'should have {{? $deps.length == 1 }}property {{= it.util.escapeQuotes($deps[0]) }}{{??}}properties {{= it.util.escapeQuotes($deps.join(\", \")) }}{{?}} when property {{= it.util.escapeQuotes($property) }} is present'", | 
				
			||||
  'enum':          "'should be equal to one of the allowed values'", | 
				
			||||
  format:          "'should match format \"{{#def.concatSchemaEQ}}\"'", | 
				
			||||
  _limit:          "'should be {{=$opStr}} {{#def.appendSchema}}", | 
				
			||||
  _exclusiveLimit: "'{{=$exclusiveKeyword}} should be boolean'", | 
				
			||||
  _limitItems:     "'should NOT have {{?$keyword=='maxItems'}}more{{??}}less{{?}} than {{#def.concatSchema}} items'", | 
				
			||||
  _limitLength:    "'should NOT be {{?$keyword=='maxLength'}}longer{{??}}shorter{{?}} than {{#def.concatSchema}} characters'", | 
				
			||||
  _limitProperties:"'should NOT have {{?$keyword=='maxProperties'}}more{{??}}less{{?}} than {{#def.concatSchema}} properties'", | 
				
			||||
  multipleOf:      "'should be multiple of {{#def.appendSchema}}", | 
				
			||||
  not:             "'should NOT be valid'", | 
				
			||||
  oneOf:           "'should match exactly one schema in oneOf'", | 
				
			||||
  pattern:         "'should match pattern \"{{#def.concatSchemaEQ}}\"'", | 
				
			||||
  patternGroups:   "'should NOT have {{=$moreOrLess}} than {{=$limit}} properties matching pattern \"{{=it.util.escapeQuotes($pgProperty)}}\"'", | 
				
			||||
  propertyNames:   "'property name \\'{{=$invalidName}}\\' is invalid'", | 
				
			||||
  required:        "'{{? it.opts._errorDataPathProperty }}is a required property{{??}}should have required property \\'{{=$missingProperty}}\\'{{?}}'", | 
				
			||||
  type:            "'should be {{? $typeIsArray }}{{= $typeSchema.join(\",\") }}{{??}}{{=$typeSchema}}{{?}}'", | 
				
			||||
  uniqueItems:     "'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)'", | 
				
			||||
  custom:          "'should pass \"{{=$rule.keyword}}\" keyword validation'", | 
				
			||||
  patternRequired: "'should have property matching pattern \\'{{=$missingPattern}}\\''", | 
				
			||||
  switch:          "'should pass \"switch\" keyword validation'", | 
				
			||||
  _formatLimit:    "'should be {{=$opStr}} \"{{#def.concatSchemaEQ}}\"'", | 
				
			||||
  _formatExclusiveLimit: "'{{=$exclusiveKeyword}} should be boolean'" | 
				
			||||
} #}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.schemaRefOrVal: {{?$isData}}validate.schema{{=$schemaPath}}{{??}}{{=$schema}}{{?}} #}} | 
				
			||||
{{## def.schemaRefOrQS: {{?$isData}}validate.schema{{=$schemaPath}}{{??}}{{=it.util.toQuotedString($schema)}}{{?}} #}} | 
				
			||||
 | 
				
			||||
{{## def._errorSchemas = { | 
				
			||||
  'false schema':  "false", | 
				
			||||
  $ref:            "{{=it.util.toQuotedString($schema)}}", | 
				
			||||
  additionalItems: "false", | 
				
			||||
  additionalProperties: "false", | 
				
			||||
  anyOf:           "validate.schema{{=$schemaPath}}", | 
				
			||||
  const:           "validate.schema{{=$schemaPath}}", | 
				
			||||
  contains:        "validate.schema{{=$schemaPath}}", | 
				
			||||
  dependencies:    "validate.schema{{=$schemaPath}}", | 
				
			||||
  'enum':          "validate.schema{{=$schemaPath}}", | 
				
			||||
  format:          "{{#def.schemaRefOrQS}}", | 
				
			||||
  _limit:          "{{#def.schemaRefOrVal}}", | 
				
			||||
  _exclusiveLimit: "validate.schema{{=$schemaPath}}", | 
				
			||||
  _limitItems:     "{{#def.schemaRefOrVal}}", | 
				
			||||
  _limitLength:    "{{#def.schemaRefOrVal}}", | 
				
			||||
  _limitProperties:"{{#def.schemaRefOrVal}}", | 
				
			||||
  multipleOf:      "{{#def.schemaRefOrVal}}", | 
				
			||||
  not:             "validate.schema{{=$schemaPath}}", | 
				
			||||
  oneOf:           "validate.schema{{=$schemaPath}}", | 
				
			||||
  pattern:         "{{#def.schemaRefOrQS}}", | 
				
			||||
  patternGroups:   "validate.schema{{=$schemaPath}}", | 
				
			||||
  propertyNames:   "validate.schema{{=$schemaPath}}", | 
				
			||||
  required:        "validate.schema{{=$schemaPath}}", | 
				
			||||
  type:            "validate.schema{{=$schemaPath}}", | 
				
			||||
  uniqueItems:     "{{#def.schemaRefOrVal}}", | 
				
			||||
  custom:          "validate.schema{{=$schemaPath}}", | 
				
			||||
  patternRequired: "validate.schema{{=$schemaPath}}", | 
				
			||||
  switch:          "validate.schema{{=$schemaPath}}", | 
				
			||||
  _formatLimit:    "{{#def.schemaRefOrQS}}", | 
				
			||||
  _formatExclusiveLimit: "validate.schema{{=$schemaPath}}" | 
				
			||||
} #}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.schemaValueQS: {{?$isData}}{{=$schemaValue}}{{??}}{{=it.util.toQuotedString($schema)}}{{?}} #}} | 
				
			||||
 | 
				
			||||
{{## def._errorParams = { | 
				
			||||
  'false schema':  "{}", | 
				
			||||
  $ref:            "{ ref: '{{=it.util.escapeQuotes($schema)}}' }", | 
				
			||||
  additionalItems: "{ limit: {{=$schema.length}} }", | 
				
			||||
  additionalProperties: "{ additionalProperty: '{{=$additionalProperty}}' }", | 
				
			||||
  anyOf:           "{}", | 
				
			||||
  const:           "{}", | 
				
			||||
  contains:        "{}", | 
				
			||||
  dependencies:    "{ property: '{{= it.util.escapeQuotes($property) }}', missingProperty: '{{=$missingProperty}}', depsCount: {{=$deps.length}}, deps: '{{= it.util.escapeQuotes($deps.length==1 ? $deps[0] : $deps.join(\", \")) }}' }", | 
				
			||||
  'enum':          "{ allowedValues: schema{{=$lvl}} }", | 
				
			||||
  format:          "{ format: {{#def.schemaValueQS}} }", | 
				
			||||
  _limit:          "{ comparison: {{=$opExpr}}, limit: {{=$schemaValue}}, exclusive: {{=$exclusive}} }", | 
				
			||||
  _exclusiveLimit: "{}", | 
				
			||||
  _limitItems:     "{ limit: {{=$schemaValue}} }", | 
				
			||||
  _limitLength:    "{ limit: {{=$schemaValue}} }", | 
				
			||||
  _limitProperties:"{ limit: {{=$schemaValue}} }", | 
				
			||||
  multipleOf:      "{ multipleOf: {{=$schemaValue}} }", | 
				
			||||
  not:             "{}", | 
				
			||||
  oneOf:           "{}", | 
				
			||||
  pattern:         "{ pattern: {{#def.schemaValueQS}} }", | 
				
			||||
  patternGroups:   "{ reason: '{{=$reason}}', limit: {{=$limit}}, pattern: '{{=it.util.escapeQuotes($pgProperty)}}' }", | 
				
			||||
  propertyNames:   "{ propertyName: '{{=$invalidName}}' }", | 
				
			||||
  required:        "{ missingProperty: '{{=$missingProperty}}' }", | 
				
			||||
  type:            "{ type: '{{? $typeIsArray }}{{= $typeSchema.join(\",\") }}{{??}}{{=$typeSchema}}{{?}}' }", | 
				
			||||
  uniqueItems:     "{ i: i, j: j }", | 
				
			||||
  custom:          "{ keyword: '{{=$rule.keyword}}' }", | 
				
			||||
  patternRequired: "{ missingPattern: '{{=$missingPattern}}' }", | 
				
			||||
  switch:          "{ caseIndex: {{=$caseIndex}} }", | 
				
			||||
  _formatLimit:    "{ comparison: {{=$opExpr}}, limit: {{#def.schemaValueQS}}, exclusive: {{=$exclusive}} }", | 
				
			||||
  _formatExclusiveLimit: "{}" | 
				
			||||
} #}} | 
				
			||||
@ -1,106 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
 | 
				
			||||
{{## def.skipFormat: | 
				
			||||
  {{? $breakOnError }} if (true) { {{?}} | 
				
			||||
  {{ return out; }} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
{{? it.opts.format === false }}{{# def.skipFormat }}{{?}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{# def.$data }} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.$dataCheckFormat: | 
				
			||||
  {{# def.$dataNotType:'string' }} | 
				
			||||
  ({{? $unknownFormats != 'ignore' }} | 
				
			||||
     ({{=$schemaValue}} && !{{=$format}} | 
				
			||||
      {{? $allowUnknown }} | 
				
			||||
        && self._opts.unknownFormats.indexOf({{=$schemaValue}}) == -1 | 
				
			||||
      {{?}}) || | 
				
			||||
   {{?}} | 
				
			||||
   ({{=$format}} && {{=$formatType}} == '{{=$ruleType}}' | 
				
			||||
                 && !(typeof {{=$format}} == 'function' | 
				
			||||
                     ? {{? it.async}} | 
				
			||||
                        (async{{=$lvl}} ? {{=it.yieldAwait}} {{=$format}}({{=$data}}) : {{=$format}}({{=$data}})) | 
				
			||||
                       {{??}} | 
				
			||||
                        {{=$format}}({{=$data}}) | 
				
			||||
                       {{?}} | 
				
			||||
                     : {{=$format}}.test({{=$data}})))) | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
{{## def.checkFormat: | 
				
			||||
  {{ | 
				
			||||
    var $formatRef = 'formats' + it.util.getProperty($schema); | 
				
			||||
    if ($isObject) $formatRef += '.validate'; | 
				
			||||
  }} | 
				
			||||
  {{? typeof $format == 'function' }} | 
				
			||||
    {{=$formatRef}}({{=$data}}) | 
				
			||||
  {{??}} | 
				
			||||
    {{=$formatRef}}.test({{=$data}}) | 
				
			||||
  {{?}} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{ | 
				
			||||
  var $unknownFormats = it.opts.unknownFormats | 
				
			||||
    , $allowUnknown = Array.isArray($unknownFormats); | 
				
			||||
}} | 
				
			||||
 | 
				
			||||
{{? $isData }} | 
				
			||||
  {{ | 
				
			||||
    var $format = 'format' + $lvl | 
				
			||||
      , $isObject = 'isObject' + $lvl | 
				
			||||
      , $formatType = 'formatType' + $lvl; | 
				
			||||
  }} | 
				
			||||
  var {{=$format}} = formats[{{=$schemaValue}}]; | 
				
			||||
  var {{=$isObject}} = typeof {{=$format}} == 'object' | 
				
			||||
                        && !({{=$format}} instanceof RegExp) | 
				
			||||
                        && {{=$format}}.validate; | 
				
			||||
  var {{=$formatType}} = {{=$isObject}} && {{=$format}}.type || 'string'; | 
				
			||||
  if ({{=$isObject}}) { | 
				
			||||
    {{? it.async}} | 
				
			||||
      var async{{=$lvl}} = {{=$format}}.async; | 
				
			||||
    {{?}} | 
				
			||||
    {{=$format}} = {{=$format}}.validate; | 
				
			||||
  } | 
				
			||||
  if ({{# def.$dataCheckFormat }}) { | 
				
			||||
{{??}} | 
				
			||||
  {{ var $format = it.formats[$schema]; }} | 
				
			||||
  {{? !$format }} | 
				
			||||
    {{? $unknownFormats == 'ignore' }} | 
				
			||||
      {{ it.logger.warn('unknown format "' + $schema + '" ignored in schema at path "' + it.errSchemaPath + '"'); }} | 
				
			||||
      {{# def.skipFormat }} | 
				
			||||
    {{?? $allowUnknown && $unknownFormats.indexOf($schema) >= 0 }} | 
				
			||||
      {{# def.skipFormat }} | 
				
			||||
    {{??}} | 
				
			||||
      {{ throw new Error('unknown format "' + $schema + '" is used in schema at path "' + it.errSchemaPath + '"'); }} | 
				
			||||
    {{?}} | 
				
			||||
  {{?}} | 
				
			||||
  {{ | 
				
			||||
    var $isObject = typeof $format == 'object' | 
				
			||||
                    && !($format instanceof RegExp) | 
				
			||||
                    && $format.validate; | 
				
			||||
    var $formatType = $isObject && $format.type || 'string'; | 
				
			||||
    if ($isObject) { | 
				
			||||
      var $async = $format.async === true; | 
				
			||||
      $format = $format.validate; | 
				
			||||
    } | 
				
			||||
  }} | 
				
			||||
  {{? $formatType != $ruleType }} | 
				
			||||
    {{# def.skipFormat }} | 
				
			||||
  {{?}} | 
				
			||||
  {{? $async }} | 
				
			||||
    {{ | 
				
			||||
      if (!it.async) throw new Error('async format in sync schema'); | 
				
			||||
      var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate'; | 
				
			||||
    }} | 
				
			||||
    if (!({{=it.yieldAwait}} {{=$formatRef}}({{=$data}}))) { | 
				
			||||
  {{??}} | 
				
			||||
    if (!{{# def.checkFormat }}) { | 
				
			||||
  {{?}} | 
				
			||||
{{?}} | 
				
			||||
    {{# def.error:'format' }} | 
				
			||||
  } {{? $breakOnError }} else { {{?}} | 
				
			||||
@ -1,100 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.setupNextLevel }} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.validateItems:startFrom: | 
				
			||||
  for (var {{=$idx}} = {{=startFrom}}; {{=$idx}} < {{=$data}}.length; {{=$idx}}++) { | 
				
			||||
    {{ | 
				
			||||
      $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); | 
				
			||||
      var $passData = $data + '[' + $idx + ']'; | 
				
			||||
      $it.dataPathArr[$dataNxt] = $idx; | 
				
			||||
    }} | 
				
			||||
 | 
				
			||||
    {{# def.generateSubschemaCode }} | 
				
			||||
    {{# def.optimizeValidate }} | 
				
			||||
 | 
				
			||||
    {{? $breakOnError }} | 
				
			||||
      if (!{{=$nextValid}}) break; | 
				
			||||
    {{?}} | 
				
			||||
  } | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
{{ | 
				
			||||
  var $idx = 'i' + $lvl | 
				
			||||
    , $dataNxt = $it.dataLevel = it.dataLevel + 1 | 
				
			||||
    , $nextData = 'data' + $dataNxt | 
				
			||||
    , $currentBaseId = it.baseId; | 
				
			||||
}} | 
				
			||||
 | 
				
			||||
var {{=$errs}} = errors; | 
				
			||||
var {{=$valid}}; | 
				
			||||
 | 
				
			||||
{{? Array.isArray($schema) }} | 
				
			||||
  {{ /* 'items' is an array of schemas */}} | 
				
			||||
  {{ var $additionalItems = it.schema.additionalItems; }} | 
				
			||||
  {{? $additionalItems === false }} | 
				
			||||
    {{=$valid}} = {{=$data}}.length <= {{= $schema.length }}; | 
				
			||||
    {{ | 
				
			||||
      var $currErrSchemaPath = $errSchemaPath; | 
				
			||||
      $errSchemaPath = it.errSchemaPath + '/additionalItems';       | 
				
			||||
    }} | 
				
			||||
    {{# def.checkError:'additionalItems' }} | 
				
			||||
    {{ $errSchemaPath = $currErrSchemaPath; }} | 
				
			||||
    {{# def.elseIfValid}} | 
				
			||||
  {{?}} | 
				
			||||
 | 
				
			||||
  {{~ $schema:$sch:$i }} | 
				
			||||
    {{? {{# def.nonEmptySchema:$sch }} }} | 
				
			||||
      {{=$nextValid}} = true; | 
				
			||||
 | 
				
			||||
      if ({{=$data}}.length > {{=$i}}) { | 
				
			||||
        {{ | 
				
			||||
          var $passData = $data + '[' + $i + ']'; | 
				
			||||
          $it.schema = $sch; | 
				
			||||
          $it.schemaPath = $schemaPath + '[' + $i + ']'; | 
				
			||||
          $it.errSchemaPath = $errSchemaPath + '/' + $i; | 
				
			||||
          $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true); | 
				
			||||
          $it.dataPathArr[$dataNxt] = $i; | 
				
			||||
        }} | 
				
			||||
 | 
				
			||||
        {{# def.generateSubschemaCode }} | 
				
			||||
        {{# def.optimizeValidate }} | 
				
			||||
      } | 
				
			||||
 | 
				
			||||
      {{# def.ifResultValid }} | 
				
			||||
    {{?}} | 
				
			||||
  {{~}} | 
				
			||||
 | 
				
			||||
  {{? typeof $additionalItems == 'object' && {{# def.nonEmptySchema:$additionalItems }} }} | 
				
			||||
    {{ | 
				
			||||
      $it.schema = $additionalItems; | 
				
			||||
      $it.schemaPath = it.schemaPath + '.additionalItems'; | 
				
			||||
      $it.errSchemaPath = it.errSchemaPath + '/additionalItems'; | 
				
			||||
    }} | 
				
			||||
    {{=$nextValid}} = true; | 
				
			||||
 | 
				
			||||
    if ({{=$data}}.length > {{= $schema.length }}) { | 
				
			||||
      {{# def.validateItems: $schema.length }} | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    {{# def.ifResultValid }} | 
				
			||||
  {{?}} | 
				
			||||
 | 
				
			||||
{{?? {{# def.nonEmptySchema:$schema }} }} | 
				
			||||
  {{ /* 'items' is a single schema */}} | 
				
			||||
  {{ | 
				
			||||
    $it.schema = $schema; | 
				
			||||
    $it.schemaPath = $schemaPath; | 
				
			||||
    $it.errSchemaPath = $errSchemaPath; | 
				
			||||
  }} | 
				
			||||
  {{# def.validateItems: 0 }} | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{? $breakOnError }} | 
				
			||||
  {{= $closingBraces }} | 
				
			||||
  if ({{=$errs}} == errors) { | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{# def.cleanUp }} | 
				
			||||
@ -1,39 +0,0 @@
					 | 
				
			||||
{{## def.checkMissingProperty:_properties: | 
				
			||||
  {{~ _properties:$propertyKey:$i }} | 
				
			||||
    {{?$i}} || {{?}} | 
				
			||||
    {{ | 
				
			||||
      var $prop = it.util.getProperty($propertyKey) | 
				
			||||
        , $useData = $data + $prop; | 
				
			||||
    }} | 
				
			||||
    ( ({{# def.noPropertyInData }}) && (missing{{=$lvl}} = {{= it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop) }}) ) | 
				
			||||
  {{~}} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.errorMissingProperty:_error: | 
				
			||||
  {{ | 
				
			||||
    var $propertyPath = 'missing' + $lvl | 
				
			||||
      , $missingProperty = '\' + ' + $propertyPath + ' + \''; | 
				
			||||
    if (it.opts._errorDataPathProperty) { | 
				
			||||
      it.errorPath = it.opts.jsonPointers | 
				
			||||
                      ? it.util.getPathExpr($currentErrorPath,  $propertyPath, true) | 
				
			||||
                      : $currentErrorPath + ' + ' + $propertyPath; | 
				
			||||
    } | 
				
			||||
  }} | 
				
			||||
  {{# def.error:_error }} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.allErrorsMissingProperty:_error: | 
				
			||||
  {{ | 
				
			||||
    var $prop = it.util.getProperty($propertyKey) | 
				
			||||
      , $missingProperty = it.util.escapeQuotes($propertyKey) | 
				
			||||
      , $useData = $data + $prop; | 
				
			||||
    if (it.opts._errorDataPathProperty) { | 
				
			||||
      it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); | 
				
			||||
    } | 
				
			||||
  }} | 
				
			||||
  if ({{# def.noPropertyInData }}) { | 
				
			||||
    {{# def.addError:_error }} | 
				
			||||
  } | 
				
			||||
#}} | 
				
			||||
@ -1,20 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.$data }} | 
				
			||||
 | 
				
			||||
var division{{=$lvl}}; | 
				
			||||
if ({{?$isData}} | 
				
			||||
      {{=$schemaValue}} !== undefined && ( | 
				
			||||
      typeof {{=$schemaValue}} != 'number' || | 
				
			||||
    {{?}} | 
				
			||||
      (division{{=$lvl}} = {{=$data}} / {{=$schemaValue}}, | 
				
			||||
      {{? it.opts.multipleOfPrecision }} | 
				
			||||
        Math.abs(Math.round(division{{=$lvl}}) - division{{=$lvl}}) > 1e-{{=it.opts.multipleOfPrecision}} | 
				
			||||
      {{??}} | 
				
			||||
        division{{=$lvl}} !== parseInt(division{{=$lvl}}) | 
				
			||||
      {{?}} | 
				
			||||
      ) | 
				
			||||
    {{?$isData}}  )  {{?}} ) { | 
				
			||||
  {{# def.error:'multipleOf' }} | 
				
			||||
} {{? $breakOnError }} else { {{?}} | 
				
			||||
@ -1,43 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.setupNextLevel }} | 
				
			||||
 | 
				
			||||
{{? {{# def.nonEmptySchema:$schema }} }} | 
				
			||||
  {{ | 
				
			||||
    $it.schema = $schema; | 
				
			||||
    $it.schemaPath = $schemaPath; | 
				
			||||
    $it.errSchemaPath = $errSchemaPath; | 
				
			||||
  }} | 
				
			||||
 | 
				
			||||
  var {{=$errs}} = errors; | 
				
			||||
 | 
				
			||||
  {{# def.setCompositeRule }} | 
				
			||||
 | 
				
			||||
  {{ | 
				
			||||
    $it.createErrors = false; | 
				
			||||
    var $allErrorsOption; | 
				
			||||
    if ($it.opts.allErrors) { | 
				
			||||
      $allErrorsOption = $it.opts.allErrors; | 
				
			||||
      $it.opts.allErrors = false; | 
				
			||||
    } | 
				
			||||
  }} | 
				
			||||
  {{= it.validate($it) }} | 
				
			||||
  {{ | 
				
			||||
    $it.createErrors = true; | 
				
			||||
    if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption; | 
				
			||||
  }} | 
				
			||||
 | 
				
			||||
  {{# def.resetCompositeRule }} | 
				
			||||
 | 
				
			||||
  if ({{=$nextValid}}) { | 
				
			||||
    {{# def.error:'not' }} | 
				
			||||
  } else { | 
				
			||||
    {{# def.resetErrors }} | 
				
			||||
  {{? it.opts.allErrors }} } {{?}} | 
				
			||||
{{??}} | 
				
			||||
  {{# def.addError:'not' }} | 
				
			||||
  {{? $breakOnError}} | 
				
			||||
    if (false) { | 
				
			||||
  {{?}} | 
				
			||||
{{?}} | 
				
			||||
@ -1,44 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.setupNextLevel }} | 
				
			||||
 | 
				
			||||
var {{=$errs}} = errors; | 
				
			||||
var prevValid{{=$lvl}} = false; | 
				
			||||
var {{=$valid}} = false; | 
				
			||||
 | 
				
			||||
{{ var $currentBaseId = $it.baseId; }} | 
				
			||||
{{# def.setCompositeRule }} | 
				
			||||
 | 
				
			||||
{{~ $schema:$sch:$i }} | 
				
			||||
  {{? {{# def.nonEmptySchema:$sch }} }} | 
				
			||||
    {{ | 
				
			||||
      $it.schema = $sch; | 
				
			||||
      $it.schemaPath = $schemaPath + '[' + $i + ']'; | 
				
			||||
      $it.errSchemaPath = $errSchemaPath + '/' + $i; | 
				
			||||
    }} | 
				
			||||
 | 
				
			||||
    {{# def.insertSubschemaCode }} | 
				
			||||
  {{??}} | 
				
			||||
    var {{=$nextValid}} = true; | 
				
			||||
  {{?}} | 
				
			||||
 | 
				
			||||
  {{? $i }} | 
				
			||||
    if ({{=$nextValid}} && prevValid{{=$lvl}}) | 
				
			||||
      {{=$valid}} = false; | 
				
			||||
    else { | 
				
			||||
    {{ $closingBraces += '}'; }} | 
				
			||||
  {{?}} | 
				
			||||
 | 
				
			||||
    if ({{=$nextValid}}) {{=$valid}} = prevValid{{=$lvl}} = true; | 
				
			||||
{{~}} | 
				
			||||
 | 
				
			||||
{{# def.resetCompositeRule }} | 
				
			||||
 | 
				
			||||
{{= $closingBraces }} | 
				
			||||
 | 
				
			||||
if (!{{=$valid}}) { | 
				
			||||
  {{# def.extraError:'oneOf' }} | 
				
			||||
} else { | 
				
			||||
  {{# def.resetErrors }} | 
				
			||||
{{? it.opts.allErrors }} } {{?}} | 
				
			||||
@ -1,14 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.$data }} | 
				
			||||
 | 
				
			||||
{{ | 
				
			||||
  var $regexp = $isData | 
				
			||||
                ? '(new RegExp(' + $schemaValue + '))' | 
				
			||||
                : it.usePattern($schema); | 
				
			||||
}} | 
				
			||||
 | 
				
			||||
if ({{# def.$dataNotType:'string' }} !{{=$regexp}}.test({{=$data}}) ) { | 
				
			||||
  {{# def.error:'pattern' }} | 
				
			||||
} {{? $breakOnError }} else { {{?}} | 
				
			||||
@ -1,327 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.setupNextLevel }} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.validateAdditional: | 
				
			||||
  {{ /* additionalProperties is schema */ | 
				
			||||
    $it.schema = $aProperties; | 
				
			||||
    $it.schemaPath = it.schemaPath + '.additionalProperties'; | 
				
			||||
    $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; | 
				
			||||
    $it.errorPath = it.opts._errorDataPathProperty | 
				
			||||
                    ? it.errorPath | 
				
			||||
                    : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); | 
				
			||||
    var $passData = $data + '[' + $key + ']'; | 
				
			||||
    $it.dataPathArr[$dataNxt] = $key; | 
				
			||||
  }} | 
				
			||||
 | 
				
			||||
  {{# def.generateSubschemaCode }} | 
				
			||||
  {{# def.optimizeValidate }} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{ | 
				
			||||
  var $key = 'key' + $lvl | 
				
			||||
    , $idx = 'idx' + $lvl | 
				
			||||
    , $dataNxt = $it.dataLevel = it.dataLevel + 1 | 
				
			||||
    , $nextData = 'data' + $dataNxt | 
				
			||||
    , $dataProperties = 'dataProperties' + $lvl; | 
				
			||||
 | 
				
			||||
  var $schemaKeys = Object.keys($schema || {}) | 
				
			||||
    , $pProperties = it.schema.patternProperties || {} | 
				
			||||
    , $pPropertyKeys = Object.keys($pProperties) | 
				
			||||
    , $aProperties = it.schema.additionalProperties | 
				
			||||
    , $someProperties = $schemaKeys.length || $pPropertyKeys.length | 
				
			||||
    , $noAdditional = $aProperties === false | 
				
			||||
    , $additionalIsSchema = typeof $aProperties == 'object' | 
				
			||||
                              && Object.keys($aProperties).length | 
				
			||||
    , $removeAdditional = it.opts.removeAdditional | 
				
			||||
    , $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional | 
				
			||||
    , $ownProperties = it.opts.ownProperties | 
				
			||||
    , $currentBaseId = it.baseId; | 
				
			||||
 | 
				
			||||
  var $required = it.schema.required; | 
				
			||||
  if ($required && !(it.opts.v5 && $required.$data) && $required.length < it.opts.loopRequired) | 
				
			||||
    var $requiredHash = it.util.toHash($required); | 
				
			||||
 | 
				
			||||
  if (it.opts.patternGroups) { | 
				
			||||
    var $pgProperties = it.schema.patternGroups || {} | 
				
			||||
      , $pgPropertyKeys = Object.keys($pgProperties); | 
				
			||||
  } | 
				
			||||
}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
var {{=$errs}} = errors; | 
				
			||||
var {{=$nextValid}} = true; | 
				
			||||
{{? $ownProperties }} | 
				
			||||
  var {{=$dataProperties}} = undefined; | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{? $checkAdditional }} | 
				
			||||
  {{# def.iterateProperties }} | 
				
			||||
    {{? $someProperties }} | 
				
			||||
      var isAdditional{{=$lvl}} = !(false | 
				
			||||
        {{? $schemaKeys.length }} | 
				
			||||
          {{? $schemaKeys.length > 5 }} | 
				
			||||
            || validate.schema{{=$schemaPath}}[{{=$key}}] | 
				
			||||
          {{??}} | 
				
			||||
            {{~ $schemaKeys:$propertyKey }} | 
				
			||||
              || {{=$key}} == {{= it.util.toQuotedString($propertyKey) }} | 
				
			||||
            {{~}} | 
				
			||||
          {{?}} | 
				
			||||
        {{?}} | 
				
			||||
        {{? $pPropertyKeys.length }} | 
				
			||||
          {{~ $pPropertyKeys:$pProperty:$i }} | 
				
			||||
            || {{= it.usePattern($pProperty) }}.test({{=$key}}) | 
				
			||||
          {{~}} | 
				
			||||
        {{?}} | 
				
			||||
        {{? it.opts.patternGroups && $pgPropertyKeys.length }} | 
				
			||||
          {{~ $pgPropertyKeys:$pgProperty:$i }} | 
				
			||||
            || {{= it.usePattern($pgProperty) }}.test({{=$key}}) | 
				
			||||
          {{~}} | 
				
			||||
        {{?}} | 
				
			||||
      ); | 
				
			||||
 | 
				
			||||
      if (isAdditional{{=$lvl}}) { | 
				
			||||
    {{?}} | 
				
			||||
    {{? $removeAdditional == 'all' }} | 
				
			||||
      delete {{=$data}}[{{=$key}}]; | 
				
			||||
    {{??}} | 
				
			||||
      {{ | 
				
			||||
        var $currentErrorPath = it.errorPath; | 
				
			||||
        var $additionalProperty = '\' + ' + $key + ' + \''; | 
				
			||||
        if (it.opts._errorDataPathProperty) { | 
				
			||||
          it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); | 
				
			||||
        } | 
				
			||||
      }} | 
				
			||||
      {{? $noAdditional }} | 
				
			||||
        {{? $removeAdditional }} | 
				
			||||
          delete {{=$data}}[{{=$key}}]; | 
				
			||||
        {{??}} | 
				
			||||
          {{=$nextValid}} = false; | 
				
			||||
          {{ | 
				
			||||
            var $currErrSchemaPath = $errSchemaPath; | 
				
			||||
            $errSchemaPath = it.errSchemaPath + '/additionalProperties'; | 
				
			||||
          }} | 
				
			||||
          {{# def.error:'additionalProperties' }} | 
				
			||||
          {{ $errSchemaPath = $currErrSchemaPath; }} | 
				
			||||
          {{? $breakOnError }} break; {{?}} | 
				
			||||
        {{?}} | 
				
			||||
      {{?? $additionalIsSchema }} | 
				
			||||
        {{? $removeAdditional == 'failing' }} | 
				
			||||
          var {{=$errs}} = errors; | 
				
			||||
          {{# def.setCompositeRule }} | 
				
			||||
 | 
				
			||||
          {{# def.validateAdditional }} | 
				
			||||
 | 
				
			||||
          if (!{{=$nextValid}}) { | 
				
			||||
            errors = {{=$errs}}; | 
				
			||||
            if (validate.errors !== null) { | 
				
			||||
              if (errors) validate.errors.length = errors; | 
				
			||||
              else validate.errors = null; | 
				
			||||
            } | 
				
			||||
            delete {{=$data}}[{{=$key}}]; | 
				
			||||
          } | 
				
			||||
 | 
				
			||||
          {{# def.resetCompositeRule }} | 
				
			||||
        {{??}} | 
				
			||||
          {{# def.validateAdditional }} | 
				
			||||
          {{? $breakOnError }} if (!{{=$nextValid}}) break; {{?}} | 
				
			||||
        {{?}} | 
				
			||||
      {{?}} | 
				
			||||
      {{ it.errorPath = $currentErrorPath; }} | 
				
			||||
    {{?}} | 
				
			||||
    {{? $someProperties }} | 
				
			||||
      } | 
				
			||||
    {{?}} | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  {{# def.ifResultValid }} | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{ var $useDefaults = it.opts.useDefaults && !it.compositeRule; }} | 
				
			||||
 | 
				
			||||
{{? $schemaKeys.length }} | 
				
			||||
  {{~ $schemaKeys:$propertyKey }} | 
				
			||||
    {{ var $sch = $schema[$propertyKey]; }} | 
				
			||||
 | 
				
			||||
    {{? {{# def.nonEmptySchema:$sch}} }} | 
				
			||||
      {{ | 
				
			||||
        var $prop = it.util.getProperty($propertyKey) | 
				
			||||
          , $passData = $data + $prop | 
				
			||||
          , $hasDefault = $useDefaults && $sch.default !== undefined; | 
				
			||||
        $it.schema = $sch; | 
				
			||||
        $it.schemaPath = $schemaPath + $prop; | 
				
			||||
        $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey); | 
				
			||||
        $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers); | 
				
			||||
        $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey); | 
				
			||||
      }} | 
				
			||||
 | 
				
			||||
      {{# def.generateSubschemaCode }} | 
				
			||||
 | 
				
			||||
      {{? {{# def.willOptimize }} }} | 
				
			||||
        {{ | 
				
			||||
          $code = {{# def._optimizeValidate }}; | 
				
			||||
          var $useData = $passData; | 
				
			||||
        }} | 
				
			||||
      {{??}} | 
				
			||||
        {{ var $useData = $nextData; }} | 
				
			||||
        var {{=$nextData}} = {{=$passData}}; | 
				
			||||
      {{?}} | 
				
			||||
 | 
				
			||||
      {{? $hasDefault }} | 
				
			||||
        {{= $code }} | 
				
			||||
      {{??}} | 
				
			||||
        {{? $requiredHash && $requiredHash[$propertyKey] }} | 
				
			||||
          if ({{# def.noPropertyInData }}) { | 
				
			||||
            {{=$nextValid}} = false; | 
				
			||||
            {{ | 
				
			||||
              var $currentErrorPath = it.errorPath | 
				
			||||
                , $currErrSchemaPath = $errSchemaPath | 
				
			||||
                , $missingProperty = it.util.escapeQuotes($propertyKey); | 
				
			||||
              if (it.opts._errorDataPathProperty) { | 
				
			||||
                it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); | 
				
			||||
              } | 
				
			||||
              $errSchemaPath = it.errSchemaPath + '/required'; | 
				
			||||
            }} | 
				
			||||
            {{# def.error:'required' }} | 
				
			||||
            {{ $errSchemaPath = $currErrSchemaPath; }} | 
				
			||||
            {{ it.errorPath = $currentErrorPath; }} | 
				
			||||
          } else { | 
				
			||||
        {{??}} | 
				
			||||
          {{? $breakOnError }} | 
				
			||||
            if ({{# def.noPropertyInData }}) { | 
				
			||||
              {{=$nextValid}} = true; | 
				
			||||
            } else { | 
				
			||||
          {{??}} | 
				
			||||
            if ({{=$useData}} !== undefined | 
				
			||||
              {{? $ownProperties }} | 
				
			||||
                && {{# def.isOwnProperty }} | 
				
			||||
              {{?}} | 
				
			||||
            ) { | 
				
			||||
          {{?}} | 
				
			||||
        {{?}} | 
				
			||||
 | 
				
			||||
          {{= $code }} | 
				
			||||
        } | 
				
			||||
      {{?}}  {{ /* $hasDefault */ }} | 
				
			||||
    {{?}} {{ /* def.nonEmptySchema */ }} | 
				
			||||
 | 
				
			||||
    {{# def.ifResultValid }} | 
				
			||||
  {{~}} | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{? $pPropertyKeys.length }} | 
				
			||||
  {{~ $pPropertyKeys:$pProperty }} | 
				
			||||
    {{ var $sch = $pProperties[$pProperty]; }} | 
				
			||||
 | 
				
			||||
    {{? {{# def.nonEmptySchema:$sch}} }} | 
				
			||||
      {{ | 
				
			||||
        $it.schema = $sch; | 
				
			||||
        $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty); | 
				
			||||
        $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' | 
				
			||||
                                             + it.util.escapeFragment($pProperty); | 
				
			||||
      }} | 
				
			||||
 | 
				
			||||
      {{# def.iterateProperties }} | 
				
			||||
        if ({{= it.usePattern($pProperty) }}.test({{=$key}})) { | 
				
			||||
          {{ | 
				
			||||
            $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); | 
				
			||||
            var $passData = $data + '[' + $key + ']'; | 
				
			||||
            $it.dataPathArr[$dataNxt] = $key; | 
				
			||||
          }} | 
				
			||||
 | 
				
			||||
          {{# def.generateSubschemaCode }} | 
				
			||||
          {{# def.optimizeValidate }} | 
				
			||||
 | 
				
			||||
          {{? $breakOnError }} if (!{{=$nextValid}}) break; {{?}} | 
				
			||||
        } | 
				
			||||
        {{? $breakOnError }} else {{=$nextValid}} = true; {{?}} | 
				
			||||
      } | 
				
			||||
 | 
				
			||||
      {{# def.ifResultValid }} | 
				
			||||
    {{?}} {{ /* def.nonEmptySchema */ }} | 
				
			||||
  {{~}} | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{? it.opts.patternGroups && $pgPropertyKeys.length }} | 
				
			||||
  {{~ $pgPropertyKeys:$pgProperty }} | 
				
			||||
    {{ | 
				
			||||
      var $pgSchema = $pgProperties[$pgProperty] | 
				
			||||
        , $sch = $pgSchema.schema; | 
				
			||||
    }} | 
				
			||||
 | 
				
			||||
    {{? {{# def.nonEmptySchema:$sch}} }} | 
				
			||||
      {{ | 
				
			||||
        $it.schema = $sch; | 
				
			||||
        $it.schemaPath = it.schemaPath + '.patternGroups' + it.util.getProperty($pgProperty) + '.schema'; | 
				
			||||
        $it.errSchemaPath = it.errSchemaPath + '/patternGroups/' | 
				
			||||
                                             + it.util.escapeFragment($pgProperty) | 
				
			||||
                                             + '/schema'; | 
				
			||||
      }} | 
				
			||||
 | 
				
			||||
      var pgPropCount{{=$lvl}} = 0; | 
				
			||||
 | 
				
			||||
      {{# def.iterateProperties }} | 
				
			||||
        if ({{= it.usePattern($pgProperty) }}.test({{=$key}})) { | 
				
			||||
          pgPropCount{{=$lvl}}++; | 
				
			||||
 | 
				
			||||
          {{ | 
				
			||||
            $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); | 
				
			||||
            var $passData = $data + '[' + $key + ']'; | 
				
			||||
            $it.dataPathArr[$dataNxt] = $key; | 
				
			||||
          }} | 
				
			||||
 | 
				
			||||
          {{# def.generateSubschemaCode }} | 
				
			||||
          {{# def.optimizeValidate }} | 
				
			||||
 | 
				
			||||
          {{? $breakOnError }} if (!{{=$nextValid}}) break; {{?}} | 
				
			||||
        } | 
				
			||||
        {{? $breakOnError }} else {{=$nextValid}} = true; {{?}} | 
				
			||||
      } | 
				
			||||
 | 
				
			||||
      {{# def.ifResultValid }} | 
				
			||||
 | 
				
			||||
      {{ | 
				
			||||
        var $pgMin = $pgSchema.minimum | 
				
			||||
          , $pgMax = $pgSchema.maximum; | 
				
			||||
      }} | 
				
			||||
      {{? $pgMin !== undefined || $pgMax !== undefined }} | 
				
			||||
        var {{=$valid}} = true; | 
				
			||||
 | 
				
			||||
        {{ var $currErrSchemaPath = $errSchemaPath; }} | 
				
			||||
 | 
				
			||||
        {{? $pgMin !== undefined }} | 
				
			||||
          {{ var $limit = $pgMin, $reason = 'minimum', $moreOrLess = 'less'; }} | 
				
			||||
          {{=$valid}} = pgPropCount{{=$lvl}} >= {{=$pgMin}}; | 
				
			||||
          {{ $errSchemaPath = it.errSchemaPath + '/patternGroups/minimum'; }} | 
				
			||||
          {{# def.checkError:'patternGroups' }} | 
				
			||||
          {{? $pgMax !== undefined }} | 
				
			||||
            else | 
				
			||||
          {{?}} | 
				
			||||
        {{?}} | 
				
			||||
 | 
				
			||||
        {{? $pgMax !== undefined }} | 
				
			||||
          {{ var $limit = $pgMax, $reason = 'maximum', $moreOrLess = 'more'; }} | 
				
			||||
          {{=$valid}} = pgPropCount{{=$lvl}} <= {{=$pgMax}}; | 
				
			||||
          {{ $errSchemaPath = it.errSchemaPath + '/patternGroups/maximum'; }} | 
				
			||||
          {{# def.checkError:'patternGroups' }} | 
				
			||||
        {{?}} | 
				
			||||
 | 
				
			||||
        {{ $errSchemaPath = $currErrSchemaPath; }} | 
				
			||||
 | 
				
			||||
        {{# def.ifValid }} | 
				
			||||
      {{?}} | 
				
			||||
    {{?}} {{ /* def.nonEmptySchema */ }} | 
				
			||||
  {{~}} | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{? $breakOnError }} | 
				
			||||
  {{= $closingBraces }} | 
				
			||||
  if ({{=$errs}} == errors) { | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{# def.cleanUp }} | 
				
			||||
@ -1,54 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.setupNextLevel }} | 
				
			||||
 | 
				
			||||
{{? {{# def.nonEmptySchema:$schema }} }} | 
				
			||||
  {{ | 
				
			||||
    $it.schema = $schema; | 
				
			||||
    $it.schemaPath = $schemaPath; | 
				
			||||
    $it.errSchemaPath = $errSchemaPath; | 
				
			||||
  }} | 
				
			||||
 | 
				
			||||
  {{ | 
				
			||||
    var $key = 'key' + $lvl | 
				
			||||
      , $idx = 'idx' + $lvl | 
				
			||||
      , $i = 'i' + $lvl | 
				
			||||
      , $invalidName = '\' + ' + $key + ' + \'' | 
				
			||||
      , $dataNxt = $it.dataLevel = it.dataLevel + 1 | 
				
			||||
      , $nextData = 'data' + $dataNxt | 
				
			||||
      , $dataProperties = 'dataProperties' + $lvl | 
				
			||||
      , $ownProperties = it.opts.ownProperties | 
				
			||||
      , $currentBaseId = it.baseId; | 
				
			||||
  }} | 
				
			||||
 | 
				
			||||
  var {{=$errs}} = errors; | 
				
			||||
 | 
				
			||||
  {{? $ownProperties }} | 
				
			||||
    var {{=$dataProperties}} = undefined; | 
				
			||||
  {{?}} | 
				
			||||
  {{# def.iterateProperties }} | 
				
			||||
    var startErrs{{=$lvl}} = errors; | 
				
			||||
 | 
				
			||||
    {{ var $passData = $key; }} | 
				
			||||
    {{# def.setCompositeRule }} | 
				
			||||
    {{# def.generateSubschemaCode }} | 
				
			||||
    {{# def.optimizeValidate }} | 
				
			||||
    {{# def.resetCompositeRule }} | 
				
			||||
 | 
				
			||||
    if (!{{=$nextValid}}) { | 
				
			||||
      for (var {{=$i}}=startErrs{{=$lvl}}; {{=$i}}<errors; {{=$i}}++) { | 
				
			||||
        vErrors[{{=$i}}].propertyName = {{=$key}}; | 
				
			||||
      } | 
				
			||||
      {{# def.extraError:'propertyNames' }} | 
				
			||||
      {{? $breakOnError }} break; {{?}} | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{? $breakOnError }} | 
				
			||||
  {{= $closingBraces }} | 
				
			||||
  if ({{=$errs}} == errors) { | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{# def.cleanUp }} | 
				
			||||
@ -1,85 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
 | 
				
			||||
{{## def._validateRef:_v: | 
				
			||||
  {{? it.opts.passContext }} | 
				
			||||
    {{=_v}}.call(this, | 
				
			||||
  {{??}} | 
				
			||||
    {{=_v}}( | 
				
			||||
  {{?}} | 
				
			||||
    {{=$data}}, {{# def.dataPath }}{{# def.passParentData }}, rootData) | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
{{ var $async, $refCode; }} | 
				
			||||
{{? $schema == '#' || $schema == '#/' }} | 
				
			||||
  {{ | 
				
			||||
    if (it.isRoot) { | 
				
			||||
      $async = it.async; | 
				
			||||
      $refCode = 'validate'; | 
				
			||||
    } else { | 
				
			||||
      $async = it.root.schema.$async === true; | 
				
			||||
      $refCode = 'root.refVal[0]'; | 
				
			||||
    } | 
				
			||||
  }} | 
				
			||||
{{??}} | 
				
			||||
  {{ var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot); }} | 
				
			||||
  {{? $refVal === undefined }} | 
				
			||||
    {{ var $message = it.MissingRefError.message(it.baseId, $schema); }} | 
				
			||||
    {{? it.opts.missingRefs == 'fail' }} | 
				
			||||
      {{ it.logger.error($message); }} | 
				
			||||
      {{# def.error:'$ref' }} | 
				
			||||
      {{? $breakOnError }} if (false) { {{?}} | 
				
			||||
    {{?? it.opts.missingRefs == 'ignore' }} | 
				
			||||
      {{ it.logger.warn($message); }} | 
				
			||||
      {{? $breakOnError }} if (true) { {{?}} | 
				
			||||
    {{??}} | 
				
			||||
      {{ throw new it.MissingRefError(it.baseId, $schema, $message); }} | 
				
			||||
    {{?}} | 
				
			||||
  {{?? $refVal.inline }} | 
				
			||||
    {{# def.setupNextLevel }} | 
				
			||||
    {{ | 
				
			||||
      $it.schema = $refVal.schema; | 
				
			||||
      $it.schemaPath = ''; | 
				
			||||
      $it.errSchemaPath = $schema; | 
				
			||||
    }} | 
				
			||||
    {{ var $code = it.validate($it).replace(/validate\.schema/g, $refVal.code); }} | 
				
			||||
    {{= $code }} | 
				
			||||
    {{? $breakOnError}} | 
				
			||||
      if ({{=$nextValid}}) { | 
				
			||||
    {{?}} | 
				
			||||
  {{??}} | 
				
			||||
    {{ | 
				
			||||
      $async = $refVal.$async === true; | 
				
			||||
      $refCode = $refVal.code; | 
				
			||||
    }} | 
				
			||||
  {{?}} | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{? $refCode }} | 
				
			||||
  {{# def.beginDefOut}} | 
				
			||||
    {{# def._validateRef:$refCode }} | 
				
			||||
  {{# def.storeDefOut:__callValidate }} | 
				
			||||
 | 
				
			||||
  {{? $async }} | 
				
			||||
    {{ if (!it.async) throw new Error('async schema referenced by sync schema'); }} | 
				
			||||
    {{? $breakOnError }} var {{=$valid}}; {{?}} | 
				
			||||
    try { | 
				
			||||
      {{=it.yieldAwait}} {{=__callValidate}}; | 
				
			||||
      {{? $breakOnError }} {{=$valid}} = true; {{?}} | 
				
			||||
    } catch (e) { | 
				
			||||
      if (!(e instanceof ValidationError)) throw e; | 
				
			||||
      if (vErrors === null) vErrors = e.errors; | 
				
			||||
      else vErrors = vErrors.concat(e.errors); | 
				
			||||
      errors = vErrors.length; | 
				
			||||
      {{? $breakOnError }} {{=$valid}} = false; {{?}} | 
				
			||||
    } | 
				
			||||
    {{? $breakOnError }} if ({{=$valid}}) { {{?}} | 
				
			||||
  {{??}} | 
				
			||||
    if (!{{=__callValidate}}) { | 
				
			||||
      if (vErrors === null) vErrors = {{=$refCode}}.errors; | 
				
			||||
      else vErrors = vErrors.concat({{=$refCode}}.errors); | 
				
			||||
      errors = vErrors.length; | 
				
			||||
    } {{? $breakOnError }} else { {{?}} | 
				
			||||
  {{?}} | 
				
			||||
{{?}} | 
				
			||||
@ -1,108 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.missing }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.$data }} | 
				
			||||
 | 
				
			||||
{{ var $vSchema = 'schema' + $lvl; }} | 
				
			||||
 | 
				
			||||
{{## def.setupLoop: | 
				
			||||
  {{? !$isData }} | 
				
			||||
    var {{=$vSchema}} = validate.schema{{=$schemaPath}}; | 
				
			||||
  {{?}} | 
				
			||||
 | 
				
			||||
  {{ | 
				
			||||
    var $i = 'i' + $lvl | 
				
			||||
      , $propertyPath = 'schema' + $lvl + '[' + $i + ']' | 
				
			||||
      , $missingProperty = '\' + ' + $propertyPath + ' + \''; | 
				
			||||
    if (it.opts._errorDataPathProperty) { | 
				
			||||
      it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); | 
				
			||||
    } | 
				
			||||
  }} | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{## def.isRequiredOwnProperty: | 
				
			||||
  Object.prototype.hasOwnProperty.call({{=$data}}, {{=$vSchema}}[{{=$i}}]) | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{? !$isData }} | 
				
			||||
  {{? $schema.length < it.opts.loopRequired && | 
				
			||||
      it.schema.properties && Object.keys(it.schema.properties).length }} | 
				
			||||
    {{ var $required = []; }} | 
				
			||||
    {{~ $schema:$property }} | 
				
			||||
      {{ var $propertySch = it.schema.properties[$property]; }} | 
				
			||||
      {{? !($propertySch && {{# def.nonEmptySchema:$propertySch}}) }} | 
				
			||||
        {{ $required[$required.length] = $property; }} | 
				
			||||
      {{?}} | 
				
			||||
    {{~}} | 
				
			||||
  {{??}} | 
				
			||||
    {{ var $required = $schema; }} | 
				
			||||
  {{?}} | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{? $isData || $required.length }} | 
				
			||||
  {{ | 
				
			||||
    var $currentErrorPath = it.errorPath | 
				
			||||
      , $loopRequired = $isData || $required.length >= it.opts.loopRequired | 
				
			||||
      , $ownProperties = it.opts.ownProperties; | 
				
			||||
  }} | 
				
			||||
 | 
				
			||||
  {{? $breakOnError }} | 
				
			||||
    var missing{{=$lvl}}; | 
				
			||||
    {{? $loopRequired }} | 
				
			||||
      {{# def.setupLoop }} | 
				
			||||
      var {{=$valid}} = true; | 
				
			||||
 | 
				
			||||
      {{?$isData}}{{# def.check$dataIsArray }}{{?}} | 
				
			||||
 | 
				
			||||
      for (var {{=$i}} = 0; {{=$i}} < {{=$vSchema}}.length; {{=$i}}++) { | 
				
			||||
        {{=$valid}} = {{=$data}}[{{=$vSchema}}[{{=$i}}]] !== undefined | 
				
			||||
                      {{? $ownProperties }} | 
				
			||||
                        && {{# def.isRequiredOwnProperty }} | 
				
			||||
                      {{?}}; | 
				
			||||
        if (!{{=$valid}}) break; | 
				
			||||
      } | 
				
			||||
 | 
				
			||||
      {{? $isData }}  }  {{?}} | 
				
			||||
 | 
				
			||||
      {{# def.checkError:'required' }} | 
				
			||||
      else { | 
				
			||||
    {{??}} | 
				
			||||
      if ({{# def.checkMissingProperty:$required }}) { | 
				
			||||
        {{# def.errorMissingProperty:'required' }} | 
				
			||||
      } else { | 
				
			||||
    {{?}} | 
				
			||||
  {{??}} | 
				
			||||
    {{? $loopRequired }} | 
				
			||||
      {{# def.setupLoop }} | 
				
			||||
      {{? $isData }} | 
				
			||||
        if ({{=$vSchema}} && !Array.isArray({{=$vSchema}})) { | 
				
			||||
          {{# def.addError:'required' }} | 
				
			||||
        } else if ({{=$vSchema}} !== undefined) { | 
				
			||||
      {{?}} | 
				
			||||
 | 
				
			||||
      for (var {{=$i}} = 0; {{=$i}} < {{=$vSchema}}.length; {{=$i}}++) { | 
				
			||||
        if ({{=$data}}[{{=$vSchema}}[{{=$i}}]] === undefined | 
				
			||||
            {{? $ownProperties }} | 
				
			||||
              || !{{# def.isRequiredOwnProperty }} | 
				
			||||
            {{?}}) { | 
				
			||||
          {{# def.addError:'required' }} | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
 | 
				
			||||
      {{? $isData }}  }  {{?}} | 
				
			||||
    {{??}} | 
				
			||||
      {{~ $required:$propertyKey }} | 
				
			||||
        {{# def.allErrorsMissingProperty:'required' }} | 
				
			||||
      {{~}} | 
				
			||||
    {{?}} | 
				
			||||
  {{?}} | 
				
			||||
 | 
				
			||||
  {{ it.errorPath = $currentErrorPath; }} | 
				
			||||
 | 
				
			||||
{{?? $breakOnError }} | 
				
			||||
  if (true) { | 
				
			||||
{{?}} | 
				
			||||
@ -1,38 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.setupKeyword }} | 
				
			||||
{{# def.$data }} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{? ($schema || $isData) && it.opts.uniqueItems !== false }} | 
				
			||||
  {{? $isData }} | 
				
			||||
    var {{=$valid}}; | 
				
			||||
    if ({{=$schemaValue}} === false || {{=$schemaValue}} === undefined) | 
				
			||||
      {{=$valid}} = true; | 
				
			||||
    else if (typeof {{=$schemaValue}} != 'boolean') | 
				
			||||
      {{=$valid}} = false; | 
				
			||||
    else { | 
				
			||||
  {{?}} | 
				
			||||
 | 
				
			||||
  var {{=$valid}} = true; | 
				
			||||
  if ({{=$data}}.length > 1) { | 
				
			||||
    var i = {{=$data}}.length, j; | 
				
			||||
    outer: | 
				
			||||
    for (;i--;) { | 
				
			||||
      for (j = i; j--;) { | 
				
			||||
        if (equal({{=$data}}[i], {{=$data}}[j])) { | 
				
			||||
          {{=$valid}} = false; | 
				
			||||
          break outer; | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  {{? $isData }}  }  {{?}} | 
				
			||||
 | 
				
			||||
  if (!{{=$valid}}) { | 
				
			||||
    {{# def.error:'uniqueItems' }} | 
				
			||||
  } {{? $breakOnError }} else { {{?}} | 
				
			||||
{{??}} | 
				
			||||
  {{? $breakOnError }} if (true) { {{?}} | 
				
			||||
{{?}} | 
				
			||||
@ -1,272 +0,0 @@
					 | 
				
			||||
{{# def.definitions }} | 
				
			||||
{{# def.errors }} | 
				
			||||
{{# def.defaults }} | 
				
			||||
{{# def.coerce }} | 
				
			||||
 | 
				
			||||
{{ /** | 
				
			||||
    * schema compilation (render) time: | 
				
			||||
    * it = { schema, RULES, _validate, opts } | 
				
			||||
    * it.validate - this template function, | 
				
			||||
    *   it is used recursively to generate code for subschemas | 
				
			||||
    * | 
				
			||||
    * runtime: | 
				
			||||
    * "validate" is a variable name to which this function will be assigned | 
				
			||||
    * validateRef etc. are defined in the parent scope in index.js | 
				
			||||
    */ }} | 
				
			||||
 | 
				
			||||
{{ | 
				
			||||
  var $async = it.schema.$async === true | 
				
			||||
    , $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref') | 
				
			||||
    , $id = it.self._getId(it.schema); | 
				
			||||
}} | 
				
			||||
 | 
				
			||||
{{? it.isTop }} | 
				
			||||
  {{? $async }} | 
				
			||||
    {{ | 
				
			||||
      it.async = true; | 
				
			||||
      var $es7 = it.opts.async == 'es7'; | 
				
			||||
      it.yieldAwait = $es7 ? 'await' : 'yield'; | 
				
			||||
    }} | 
				
			||||
  {{?}} | 
				
			||||
 | 
				
			||||
  var validate = | 
				
			||||
    {{? $async }} | 
				
			||||
      {{? $es7 }} | 
				
			||||
        (async function | 
				
			||||
      {{??}} | 
				
			||||
        {{? it.opts.async != '*'}}co.wrap{{?}}(function* | 
				
			||||
      {{?}} | 
				
			||||
    {{??}} | 
				
			||||
      (function | 
				
			||||
    {{?}} | 
				
			||||
        (data, dataPath, parentData, parentDataProperty, rootData) { | 
				
			||||
          'use strict'; | 
				
			||||
          {{? $id && (it.opts.sourceCode || it.opts.processCode) }} | 
				
			||||
            {{= '/\*# sourceURL=' + $id + ' */' }} | 
				
			||||
          {{?}} | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{? typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref) }} | 
				
			||||
  {{ var $keyword = 'false schema'; }} | 
				
			||||
  {{# def.setupKeyword }} | 
				
			||||
  {{? it.schema === false}} | 
				
			||||
    {{? it.isTop}} | 
				
			||||
      {{ $breakOnError = true; }} | 
				
			||||
    {{??}} | 
				
			||||
      var {{=$valid}} = false; | 
				
			||||
    {{?}} | 
				
			||||
    {{# def.error:'false schema' }} | 
				
			||||
  {{??}} | 
				
			||||
    {{? it.isTop}} | 
				
			||||
      {{? $async }} | 
				
			||||
        return data; | 
				
			||||
      {{??}} | 
				
			||||
        validate.errors = null; | 
				
			||||
        return true; | 
				
			||||
      {{?}} | 
				
			||||
    {{??}} | 
				
			||||
      var {{=$valid}} = true; | 
				
			||||
    {{?}} | 
				
			||||
  {{?}} | 
				
			||||
 | 
				
			||||
  {{? it.isTop}} | 
				
			||||
    }); | 
				
			||||
    return validate; | 
				
			||||
  {{?}} | 
				
			||||
 | 
				
			||||
  {{ return out; }} | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{? it.isTop }} | 
				
			||||
  {{ | 
				
			||||
    var $top = it.isTop | 
				
			||||
      , $lvl = it.level = 0 | 
				
			||||
      , $dataLvl = it.dataLevel = 0 | 
				
			||||
      , $data = 'data'; | 
				
			||||
    it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema)); | 
				
			||||
    it.baseId = it.baseId || it.rootId; | 
				
			||||
    delete it.isTop; | 
				
			||||
 | 
				
			||||
    it.dataPathArr = [undefined]; | 
				
			||||
  }} | 
				
			||||
 | 
				
			||||
  var vErrors = null; {{ /* don't edit, used in replace */ }} | 
				
			||||
  var errors = 0;     {{ /* don't edit, used in replace */ }} | 
				
			||||
  if (rootData === undefined) rootData = data; {{ /* don't edit, used in replace */ }} | 
				
			||||
{{??}} | 
				
			||||
  {{ | 
				
			||||
    var $lvl = it.level | 
				
			||||
      , $dataLvl = it.dataLevel | 
				
			||||
      , $data = 'data' + ($dataLvl || ''); | 
				
			||||
 | 
				
			||||
    if ($id) it.baseId = it.resolve.url(it.baseId, $id); | 
				
			||||
 | 
				
			||||
    if ($async && !it.async) throw new Error('async schema in sync schema'); | 
				
			||||
  }} | 
				
			||||
 | 
				
			||||
  var errs_{{=$lvl}} = errors; | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{ | 
				
			||||
  var $valid = 'valid' + $lvl | 
				
			||||
    , $breakOnError = !it.opts.allErrors | 
				
			||||
    , $closingBraces1 = '' | 
				
			||||
    , $closingBraces2 = ''; | 
				
			||||
 | 
				
			||||
  var $errorKeyword; | 
				
			||||
  var $typeSchema = it.schema.type | 
				
			||||
    , $typeIsArray = Array.isArray($typeSchema); | 
				
			||||
 | 
				
			||||
  if ($typeIsArray && $typeSchema.length == 1) { | 
				
			||||
    $typeSchema = $typeSchema[0]; | 
				
			||||
    $typeIsArray = false; | 
				
			||||
  } | 
				
			||||
}} | 
				
			||||
 | 
				
			||||
{{## def.checkType: | 
				
			||||
  {{ | 
				
			||||
    var $schemaPath = it.schemaPath + '.type' | 
				
			||||
      , $errSchemaPath = it.errSchemaPath + '/type' | 
				
			||||
      , $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType'; | 
				
			||||
  }} | 
				
			||||
 | 
				
			||||
  if ({{= it.util[$method]($typeSchema, $data, true) }}) { | 
				
			||||
#}} | 
				
			||||
 | 
				
			||||
{{? it.schema.$ref && $refKeywords }} | 
				
			||||
  {{? it.opts.extendRefs == 'fail' }} | 
				
			||||
    {{ throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '" (see option extendRefs)'); }} | 
				
			||||
  {{?? it.opts.extendRefs !== true }} | 
				
			||||
    {{ | 
				
			||||
      $refKeywords = false; | 
				
			||||
      it.logger.warn('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"'); | 
				
			||||
    }} | 
				
			||||
  {{?}} | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{? $typeSchema }} | 
				
			||||
  {{? it.opts.coerceTypes }} | 
				
			||||
    {{ var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema); }} | 
				
			||||
  {{?}} | 
				
			||||
 | 
				
			||||
  {{ var $rulesGroup = it.RULES.types[$typeSchema]; }} | 
				
			||||
  {{? $coerceToTypes || $typeIsArray || $rulesGroup === true || | 
				
			||||
    ($rulesGroup && !$shouldUseGroup($rulesGroup)) }} | 
				
			||||
    {{ | 
				
			||||
      var $schemaPath = it.schemaPath + '.type' | 
				
			||||
        , $errSchemaPath = it.errSchemaPath + '/type'; | 
				
			||||
    }} | 
				
			||||
    {{# def.checkType }} | 
				
			||||
      {{? $coerceToTypes }} | 
				
			||||
        {{# def.coerceType }} | 
				
			||||
      {{??}} | 
				
			||||
        {{# def.error:'type' }} | 
				
			||||
      {{?}} | 
				
			||||
    } | 
				
			||||
  {{?}} | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
{{? it.schema.$ref && !$refKeywords }} | 
				
			||||
  {{= it.RULES.all.$ref.code(it, '$ref') }} | 
				
			||||
  {{? $breakOnError }} | 
				
			||||
    } | 
				
			||||
    if (errors === {{?$top}}0{{??}}errs_{{=$lvl}}{{?}}) { | 
				
			||||
    {{ $closingBraces2 += '}'; }} | 
				
			||||
  {{?}} | 
				
			||||
{{??}} | 
				
			||||
  {{? it.opts.v5 && it.schema.patternGroups }} | 
				
			||||
    {{ it.logger.warn('keyword "patternGroups" is deprecated and disabled. Use option patternGroups: true to enable.'); }} | 
				
			||||
  {{?}} | 
				
			||||
  {{~ it.RULES:$rulesGroup }} | 
				
			||||
    {{? $shouldUseGroup($rulesGroup) }} | 
				
			||||
      {{? $rulesGroup.type }} | 
				
			||||
        if ({{= it.util.checkDataType($rulesGroup.type, $data) }}) { | 
				
			||||
      {{?}} | 
				
			||||
        {{? it.opts.useDefaults && !it.compositeRule }} | 
				
			||||
          {{? $rulesGroup.type == 'object' && it.schema.properties }} | 
				
			||||
            {{# def.defaultProperties }} | 
				
			||||
          {{?? $rulesGroup.type == 'array' && Array.isArray(it.schema.items) }} | 
				
			||||
            {{# def.defaultItems }} | 
				
			||||
          {{?}} | 
				
			||||
        {{?}} | 
				
			||||
        {{~ $rulesGroup.rules:$rule }} | 
				
			||||
          {{? $shouldUseRule($rule) }} | 
				
			||||
            {{ var $code = $rule.code(it, $rule.keyword, $rulesGroup.type); }} | 
				
			||||
            {{? $code }} | 
				
			||||
              {{= $code }} | 
				
			||||
              {{? $breakOnError }} | 
				
			||||
                {{ $closingBraces1 += '}'; }} | 
				
			||||
              {{?}} | 
				
			||||
            {{?}} | 
				
			||||
          {{?}} | 
				
			||||
        {{~}} | 
				
			||||
        {{? $breakOnError }} | 
				
			||||
          {{= $closingBraces1 }} | 
				
			||||
          {{ $closingBraces1 = ''; }} | 
				
			||||
        {{?}} | 
				
			||||
      {{? $rulesGroup.type }} | 
				
			||||
        } | 
				
			||||
        {{? $typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes }} | 
				
			||||
          else { | 
				
			||||
            {{ | 
				
			||||
              var $schemaPath = it.schemaPath + '.type' | 
				
			||||
                , $errSchemaPath = it.errSchemaPath + '/type'; | 
				
			||||
            }} | 
				
			||||
            {{# def.error:'type' }} | 
				
			||||
          } | 
				
			||||
        {{?}} | 
				
			||||
      {{?}} | 
				
			||||
 | 
				
			||||
      {{? $breakOnError }} | 
				
			||||
        if (errors === {{?$top}}0{{??}}errs_{{=$lvl}}{{?}}) { | 
				
			||||
        {{ $closingBraces2 += '}'; }} | 
				
			||||
      {{?}} | 
				
			||||
    {{?}} | 
				
			||||
  {{~}} | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{? $breakOnError }} {{= $closingBraces2 }} {{?}} | 
				
			||||
 | 
				
			||||
{{? $top }} | 
				
			||||
    {{? $async }} | 
				
			||||
      if (errors === 0) return data;           {{ /* don't edit, used in replace */ }} | 
				
			||||
      else throw new ValidationError(vErrors); {{ /* don't edit, used in replace */ }} | 
				
			||||
    {{??}} | 
				
			||||
      validate.errors = vErrors; {{ /* don't edit, used in replace */ }} | 
				
			||||
      return errors === 0;       {{ /* don't edit, used in replace */ }} | 
				
			||||
    {{?}} | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  return validate; | 
				
			||||
{{??}} | 
				
			||||
  var {{=$valid}} = errors === errs_{{=$lvl}}; | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{# def.cleanUp }} | 
				
			||||
 | 
				
			||||
{{? $top }} | 
				
			||||
  {{# def.finalCleanUp }} | 
				
			||||
{{?}} | 
				
			||||
 | 
				
			||||
{{ | 
				
			||||
  function $shouldUseGroup($rulesGroup) { | 
				
			||||
    var rules = $rulesGroup.rules; | 
				
			||||
    for (var i=0; i < rules.length; i++) | 
				
			||||
      if ($shouldUseRule(rules[i])) | 
				
			||||
        return true; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function $shouldUseRule($rule) { | 
				
			||||
    return it.schema[$rule.keyword] !== undefined || | 
				
			||||
           ($rule.implements && $ruleImplementsSomeKeyword($rule)); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function $ruleImplementsSomeKeyword($rule) { | 
				
			||||
    var impl = $rule.implements; | 
				
			||||
    for (var i=0; i < impl.length; i++) | 
				
			||||
      if (it.schema[impl[i]] !== undefined) | 
				
			||||
        return true; | 
				
			||||
  } | 
				
			||||
}} | 
				
			||||
@ -1,3 +0,0 @@
					 | 
				
			||||
These files are compiled dot templates from dot folder. | 
				
			||||
 | 
				
			||||
Do NOT edit them directly, edit the templates and run `npm run build` from main ajv folder. | 
				
			||||
@ -1,149 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate__limit(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $errorKeyword; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $isData = it.opts.$data && $schema && $schema.$data, | 
				
			||||
    $schemaValue; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; | 
				
			||||
    $schemaValue = 'schema' + $lvl; | 
				
			||||
  } else { | 
				
			||||
    $schemaValue = $schema; | 
				
			||||
  } | 
				
			||||
  var $isMax = $keyword == 'maximum', | 
				
			||||
    $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum', | 
				
			||||
    $schemaExcl = it.schema[$exclusiveKeyword], | 
				
			||||
    $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data, | 
				
			||||
    $op = $isMax ? '<' : '>', | 
				
			||||
    $notOp = $isMax ? '>' : '<', | 
				
			||||
    $errorKeyword = undefined; | 
				
			||||
  if ($isDataExcl) { | 
				
			||||
    var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr), | 
				
			||||
      $exclusive = 'exclusive' + $lvl, | 
				
			||||
      $exclType = 'exclType' + $lvl, | 
				
			||||
      $exclIsNumber = 'exclIsNumber' + $lvl, | 
				
			||||
      $opExpr = 'op' + $lvl, | 
				
			||||
      $opStr = '\' + ' + $opExpr + ' + \''; | 
				
			||||
    out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; '; | 
				
			||||
    $schemaValueExcl = 'schemaExcl' + $lvl; | 
				
			||||
    out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \'boolean\' && ' + ($exclType) + ' != \'undefined\' && ' + ($exclType) + ' != \'number\') { '; | 
				
			||||
    var $errorKeyword = $exclusiveKeyword; | 
				
			||||
    var $$outStack = $$outStack || []; | 
				
			||||
    $$outStack.push(out); | 
				
			||||
    out = ''; /* istanbul ignore else */ | 
				
			||||
    if (it.createErrors !== false) { | 
				
			||||
      out += ' { keyword: \'' + ($errorKeyword || '_exclusiveLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; | 
				
			||||
      if (it.opts.messages !== false) { | 
				
			||||
        out += ' , message: \'' + ($exclusiveKeyword) + ' should be boolean\' '; | 
				
			||||
      } | 
				
			||||
      if (it.opts.verbose) { | 
				
			||||
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
      } | 
				
			||||
      out += ' } '; | 
				
			||||
    } else { | 
				
			||||
      out += ' {} '; | 
				
			||||
    } | 
				
			||||
    var __err = out; | 
				
			||||
    out = $$outStack.pop(); | 
				
			||||
    if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
      if (it.async) { | 
				
			||||
        out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
      } else { | 
				
			||||
        out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
      } | 
				
			||||
    } else { | 
				
			||||
      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
    } | 
				
			||||
    out += ' } else if ( '; | 
				
			||||
    if ($isData) { | 
				
			||||
      out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; | 
				
			||||
    } | 
				
			||||
    out += ' ' + ($exclType) + ' == \'number\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \'' + ($op) + '\' : \'' + ($op) + '=\';'; | 
				
			||||
  } else { | 
				
			||||
    var $exclIsNumber = typeof $schemaExcl == 'number', | 
				
			||||
      $opStr = $op; | 
				
			||||
    if ($exclIsNumber && $isData) { | 
				
			||||
      var $opExpr = '\'' + $opStr + '\''; | 
				
			||||
      out += ' if ( '; | 
				
			||||
      if ($isData) { | 
				
			||||
        out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; | 
				
			||||
      } | 
				
			||||
      out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { '; | 
				
			||||
    } else { | 
				
			||||
      if ($exclIsNumber && $schema === undefined) { | 
				
			||||
        $exclusive = true; | 
				
			||||
        $errorKeyword = $exclusiveKeyword; | 
				
			||||
        $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; | 
				
			||||
        $schemaValue = $schemaExcl; | 
				
			||||
        $notOp += '='; | 
				
			||||
      } else { | 
				
			||||
        if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema); | 
				
			||||
        if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) { | 
				
			||||
          $exclusive = true; | 
				
			||||
          $errorKeyword = $exclusiveKeyword; | 
				
			||||
          $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; | 
				
			||||
          $notOp += '='; | 
				
			||||
        } else { | 
				
			||||
          $exclusive = false; | 
				
			||||
          $opStr += '='; | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
      var $opExpr = '\'' + $opStr + '\''; | 
				
			||||
      out += ' if ( '; | 
				
			||||
      if ($isData) { | 
				
			||||
        out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; | 
				
			||||
      } | 
				
			||||
      out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { '; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  $errorKeyword = $errorKeyword || $keyword; | 
				
			||||
  var $$outStack = $$outStack || []; | 
				
			||||
  $$outStack.push(out); | 
				
			||||
  out = ''; /* istanbul ignore else */ | 
				
			||||
  if (it.createErrors !== false) { | 
				
			||||
    out += ' { keyword: \'' + ($errorKeyword || '_limit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } '; | 
				
			||||
    if (it.opts.messages !== false) { | 
				
			||||
      out += ' , message: \'should be ' + ($opStr) + ' '; | 
				
			||||
      if ($isData) { | 
				
			||||
        out += '\' + ' + ($schemaValue); | 
				
			||||
      } else { | 
				
			||||
        out += '' + ($schemaValue) + '\''; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
    if (it.opts.verbose) { | 
				
			||||
      out += ' , schema:  '; | 
				
			||||
      if ($isData) { | 
				
			||||
        out += 'validate.schema' + ($schemaPath); | 
				
			||||
      } else { | 
				
			||||
        out += '' + ($schema); | 
				
			||||
      } | 
				
			||||
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
    } | 
				
			||||
    out += ' } '; | 
				
			||||
  } else { | 
				
			||||
    out += ' {} '; | 
				
			||||
  } | 
				
			||||
  var __err = out; | 
				
			||||
  out = $$outStack.pop(); | 
				
			||||
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
    if (it.async) { | 
				
			||||
      out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
    } else { | 
				
			||||
      out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
  } | 
				
			||||
  out += ' } '; | 
				
			||||
  if ($breakOnError) { | 
				
			||||
    out += ' else { '; | 
				
			||||
  } | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,76 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate__limitItems(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $errorKeyword; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $isData = it.opts.$data && $schema && $schema.$data, | 
				
			||||
    $schemaValue; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; | 
				
			||||
    $schemaValue = 'schema' + $lvl; | 
				
			||||
  } else { | 
				
			||||
    $schemaValue = $schema; | 
				
			||||
  } | 
				
			||||
  var $op = $keyword == 'maxItems' ? '>' : '<'; | 
				
			||||
  out += 'if ( '; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; | 
				
			||||
  } | 
				
			||||
  out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { '; | 
				
			||||
  var $errorKeyword = $keyword; | 
				
			||||
  var $$outStack = $$outStack || []; | 
				
			||||
  $$outStack.push(out); | 
				
			||||
  out = ''; /* istanbul ignore else */ | 
				
			||||
  if (it.createErrors !== false) { | 
				
			||||
    out += ' { keyword: \'' + ($errorKeyword || '_limitItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; | 
				
			||||
    if (it.opts.messages !== false) { | 
				
			||||
      out += ' , message: \'should NOT have '; | 
				
			||||
      if ($keyword == 'maxItems') { | 
				
			||||
        out += 'more'; | 
				
			||||
      } else { | 
				
			||||
        out += 'less'; | 
				
			||||
      } | 
				
			||||
      out += ' than '; | 
				
			||||
      if ($isData) { | 
				
			||||
        out += '\' + ' + ($schemaValue) + ' + \''; | 
				
			||||
      } else { | 
				
			||||
        out += '' + ($schema); | 
				
			||||
      } | 
				
			||||
      out += ' items\' '; | 
				
			||||
    } | 
				
			||||
    if (it.opts.verbose) { | 
				
			||||
      out += ' , schema:  '; | 
				
			||||
      if ($isData) { | 
				
			||||
        out += 'validate.schema' + ($schemaPath); | 
				
			||||
      } else { | 
				
			||||
        out += '' + ($schema); | 
				
			||||
      } | 
				
			||||
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
    } | 
				
			||||
    out += ' } '; | 
				
			||||
  } else { | 
				
			||||
    out += ' {} '; | 
				
			||||
  } | 
				
			||||
  var __err = out; | 
				
			||||
  out = $$outStack.pop(); | 
				
			||||
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
    if (it.async) { | 
				
			||||
      out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
    } else { | 
				
			||||
      out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
  } | 
				
			||||
  out += '} '; | 
				
			||||
  if ($breakOnError) { | 
				
			||||
    out += ' else { '; | 
				
			||||
  } | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,81 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate__limitLength(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $errorKeyword; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $isData = it.opts.$data && $schema && $schema.$data, | 
				
			||||
    $schemaValue; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; | 
				
			||||
    $schemaValue = 'schema' + $lvl; | 
				
			||||
  } else { | 
				
			||||
    $schemaValue = $schema; | 
				
			||||
  } | 
				
			||||
  var $op = $keyword == 'maxLength' ? '>' : '<'; | 
				
			||||
  out += 'if ( '; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; | 
				
			||||
  } | 
				
			||||
  if (it.opts.unicode === false) { | 
				
			||||
    out += ' ' + ($data) + '.length '; | 
				
			||||
  } else { | 
				
			||||
    out += ' ucs2length(' + ($data) + ') '; | 
				
			||||
  } | 
				
			||||
  out += ' ' + ($op) + ' ' + ($schemaValue) + ') { '; | 
				
			||||
  var $errorKeyword = $keyword; | 
				
			||||
  var $$outStack = $$outStack || []; | 
				
			||||
  $$outStack.push(out); | 
				
			||||
  out = ''; /* istanbul ignore else */ | 
				
			||||
  if (it.createErrors !== false) { | 
				
			||||
    out += ' { keyword: \'' + ($errorKeyword || '_limitLength') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; | 
				
			||||
    if (it.opts.messages !== false) { | 
				
			||||
      out += ' , message: \'should NOT be '; | 
				
			||||
      if ($keyword == 'maxLength') { | 
				
			||||
        out += 'longer'; | 
				
			||||
      } else { | 
				
			||||
        out += 'shorter'; | 
				
			||||
      } | 
				
			||||
      out += ' than '; | 
				
			||||
      if ($isData) { | 
				
			||||
        out += '\' + ' + ($schemaValue) + ' + \''; | 
				
			||||
      } else { | 
				
			||||
        out += '' + ($schema); | 
				
			||||
      } | 
				
			||||
      out += ' characters\' '; | 
				
			||||
    } | 
				
			||||
    if (it.opts.verbose) { | 
				
			||||
      out += ' , schema:  '; | 
				
			||||
      if ($isData) { | 
				
			||||
        out += 'validate.schema' + ($schemaPath); | 
				
			||||
      } else { | 
				
			||||
        out += '' + ($schema); | 
				
			||||
      } | 
				
			||||
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
    } | 
				
			||||
    out += ' } '; | 
				
			||||
  } else { | 
				
			||||
    out += ' {} '; | 
				
			||||
  } | 
				
			||||
  var __err = out; | 
				
			||||
  out = $$outStack.pop(); | 
				
			||||
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
    if (it.async) { | 
				
			||||
      out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
    } else { | 
				
			||||
      out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
  } | 
				
			||||
  out += '} '; | 
				
			||||
  if ($breakOnError) { | 
				
			||||
    out += ' else { '; | 
				
			||||
  } | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,76 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate__limitProperties(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $errorKeyword; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $isData = it.opts.$data && $schema && $schema.$data, | 
				
			||||
    $schemaValue; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; | 
				
			||||
    $schemaValue = 'schema' + $lvl; | 
				
			||||
  } else { | 
				
			||||
    $schemaValue = $schema; | 
				
			||||
  } | 
				
			||||
  var $op = $keyword == 'maxProperties' ? '>' : '<'; | 
				
			||||
  out += 'if ( '; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; | 
				
			||||
  } | 
				
			||||
  out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { '; | 
				
			||||
  var $errorKeyword = $keyword; | 
				
			||||
  var $$outStack = $$outStack || []; | 
				
			||||
  $$outStack.push(out); | 
				
			||||
  out = ''; /* istanbul ignore else */ | 
				
			||||
  if (it.createErrors !== false) { | 
				
			||||
    out += ' { keyword: \'' + ($errorKeyword || '_limitProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; | 
				
			||||
    if (it.opts.messages !== false) { | 
				
			||||
      out += ' , message: \'should NOT have '; | 
				
			||||
      if ($keyword == 'maxProperties') { | 
				
			||||
        out += 'more'; | 
				
			||||
      } else { | 
				
			||||
        out += 'less'; | 
				
			||||
      } | 
				
			||||
      out += ' than '; | 
				
			||||
      if ($isData) { | 
				
			||||
        out += '\' + ' + ($schemaValue) + ' + \''; | 
				
			||||
      } else { | 
				
			||||
        out += '' + ($schema); | 
				
			||||
      } | 
				
			||||
      out += ' properties\' '; | 
				
			||||
    } | 
				
			||||
    if (it.opts.verbose) { | 
				
			||||
      out += ' , schema:  '; | 
				
			||||
      if ($isData) { | 
				
			||||
        out += 'validate.schema' + ($schemaPath); | 
				
			||||
      } else { | 
				
			||||
        out += '' + ($schema); | 
				
			||||
      } | 
				
			||||
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
    } | 
				
			||||
    out += ' } '; | 
				
			||||
  } else { | 
				
			||||
    out += ' {} '; | 
				
			||||
  } | 
				
			||||
  var __err = out; | 
				
			||||
  out = $$outStack.pop(); | 
				
			||||
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
    if (it.async) { | 
				
			||||
      out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
    } else { | 
				
			||||
      out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
  } | 
				
			||||
  out += '} '; | 
				
			||||
  if ($breakOnError) { | 
				
			||||
    out += ' else { '; | 
				
			||||
  } | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,43 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_allOf(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $it = it.util.copy(it); | 
				
			||||
  var $closingBraces = ''; | 
				
			||||
  $it.level++; | 
				
			||||
  var $nextValid = 'valid' + $it.level; | 
				
			||||
  var $currentBaseId = $it.baseId, | 
				
			||||
    $allSchemasEmpty = true; | 
				
			||||
  var arr1 = $schema; | 
				
			||||
  if (arr1) { | 
				
			||||
    var $sch, $i = -1, | 
				
			||||
      l1 = arr1.length - 1; | 
				
			||||
    while ($i < l1) { | 
				
			||||
      $sch = arr1[$i += 1]; | 
				
			||||
      if (it.util.schemaHasRules($sch, it.RULES.all)) { | 
				
			||||
        $allSchemasEmpty = false; | 
				
			||||
        $it.schema = $sch; | 
				
			||||
        $it.schemaPath = $schemaPath + '[' + $i + ']'; | 
				
			||||
        $it.errSchemaPath = $errSchemaPath + '/' + $i; | 
				
			||||
        out += '  ' + (it.validate($it)) + ' '; | 
				
			||||
        $it.baseId = $currentBaseId; | 
				
			||||
        if ($breakOnError) { | 
				
			||||
          out += ' if (' + ($nextValid) + ') { '; | 
				
			||||
          $closingBraces += '}'; | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  if ($breakOnError) { | 
				
			||||
    if ($allSchemasEmpty) { | 
				
			||||
      out += ' if (true) { '; | 
				
			||||
    } else { | 
				
			||||
      out += ' ' + ($closingBraces.slice(0, -1)) + ' '; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  out = it.util.cleanUpCode(out); | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,73 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_anyOf(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $valid = 'valid' + $lvl; | 
				
			||||
  var $errs = 'errs__' + $lvl; | 
				
			||||
  var $it = it.util.copy(it); | 
				
			||||
  var $closingBraces = ''; | 
				
			||||
  $it.level++; | 
				
			||||
  var $nextValid = 'valid' + $it.level; | 
				
			||||
  var $noEmptySchema = $schema.every(function($sch) { | 
				
			||||
    return it.util.schemaHasRules($sch, it.RULES.all); | 
				
			||||
  }); | 
				
			||||
  if ($noEmptySchema) { | 
				
			||||
    var $currentBaseId = $it.baseId; | 
				
			||||
    out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false;  '; | 
				
			||||
    var $wasComposite = it.compositeRule; | 
				
			||||
    it.compositeRule = $it.compositeRule = true; | 
				
			||||
    var arr1 = $schema; | 
				
			||||
    if (arr1) { | 
				
			||||
      var $sch, $i = -1, | 
				
			||||
        l1 = arr1.length - 1; | 
				
			||||
      while ($i < l1) { | 
				
			||||
        $sch = arr1[$i += 1]; | 
				
			||||
        $it.schema = $sch; | 
				
			||||
        $it.schemaPath = $schemaPath + '[' + $i + ']'; | 
				
			||||
        $it.errSchemaPath = $errSchemaPath + '/' + $i; | 
				
			||||
        out += '  ' + (it.validate($it)) + ' '; | 
				
			||||
        $it.baseId = $currentBaseId; | 
				
			||||
        out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { '; | 
				
			||||
        $closingBraces += '}'; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
    it.compositeRule = $it.compositeRule = $wasComposite; | 
				
			||||
    out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */ | 
				
			||||
    if (it.createErrors !== false) { | 
				
			||||
      out += ' { keyword: \'' + ('anyOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; | 
				
			||||
      if (it.opts.messages !== false) { | 
				
			||||
        out += ' , message: \'should match some schema in anyOf\' '; | 
				
			||||
      } | 
				
			||||
      if (it.opts.verbose) { | 
				
			||||
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
      } | 
				
			||||
      out += ' } '; | 
				
			||||
    } else { | 
				
			||||
      out += ' {} '; | 
				
			||||
    } | 
				
			||||
    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
    if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
      if (it.async) { | 
				
			||||
        out += ' throw new ValidationError(vErrors); '; | 
				
			||||
      } else { | 
				
			||||
        out += ' validate.errors = vErrors; return false; '; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
    out += ' } else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; | 
				
			||||
    if (it.opts.allErrors) { | 
				
			||||
      out += ' } '; | 
				
			||||
    } | 
				
			||||
    out = it.util.cleanUpCode(out); | 
				
			||||
  } else { | 
				
			||||
    if ($breakOnError) { | 
				
			||||
      out += ' if (true) { '; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,55 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_const(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $valid = 'valid' + $lvl; | 
				
			||||
  var $isData = it.opts.$data && $schema && $schema.$data, | 
				
			||||
    $schemaValue; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; | 
				
			||||
    $schemaValue = 'schema' + $lvl; | 
				
			||||
  } else { | 
				
			||||
    $schemaValue = $schema; | 
				
			||||
  } | 
				
			||||
  if (!$isData) { | 
				
			||||
    out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';'; | 
				
			||||
  } | 
				
			||||
  out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') {   '; | 
				
			||||
  var $$outStack = $$outStack || []; | 
				
			||||
  $$outStack.push(out); | 
				
			||||
  out = ''; /* istanbul ignore else */ | 
				
			||||
  if (it.createErrors !== false) { | 
				
			||||
    out += ' { keyword: \'' + ('const') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; | 
				
			||||
    if (it.opts.messages !== false) { | 
				
			||||
      out += ' , message: \'should be equal to constant\' '; | 
				
			||||
    } | 
				
			||||
    if (it.opts.verbose) { | 
				
			||||
      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
    } | 
				
			||||
    out += ' } '; | 
				
			||||
  } else { | 
				
			||||
    out += ' {} '; | 
				
			||||
  } | 
				
			||||
  var __err = out; | 
				
			||||
  out = $$outStack.pop(); | 
				
			||||
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
    if (it.async) { | 
				
			||||
      out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
    } else { | 
				
			||||
      out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
  } | 
				
			||||
  out += ' }'; | 
				
			||||
  if ($breakOnError) { | 
				
			||||
    out += ' else { '; | 
				
			||||
  } | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,81 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_contains(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $valid = 'valid' + $lvl; | 
				
			||||
  var $errs = 'errs__' + $lvl; | 
				
			||||
  var $it = it.util.copy(it); | 
				
			||||
  var $closingBraces = ''; | 
				
			||||
  $it.level++; | 
				
			||||
  var $nextValid = 'valid' + $it.level; | 
				
			||||
  var $idx = 'i' + $lvl, | 
				
			||||
    $dataNxt = $it.dataLevel = it.dataLevel + 1, | 
				
			||||
    $nextData = 'data' + $dataNxt, | 
				
			||||
    $currentBaseId = it.baseId, | 
				
			||||
    $nonEmptySchema = it.util.schemaHasRules($schema, it.RULES.all); | 
				
			||||
  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; | 
				
			||||
  if ($nonEmptySchema) { | 
				
			||||
    var $wasComposite = it.compositeRule; | 
				
			||||
    it.compositeRule = $it.compositeRule = true; | 
				
			||||
    $it.schema = $schema; | 
				
			||||
    $it.schemaPath = $schemaPath; | 
				
			||||
    $it.errSchemaPath = $errSchemaPath; | 
				
			||||
    out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; | 
				
			||||
    $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); | 
				
			||||
    var $passData = $data + '[' + $idx + ']'; | 
				
			||||
    $it.dataPathArr[$dataNxt] = $idx; | 
				
			||||
    var $code = it.validate($it); | 
				
			||||
    $it.baseId = $currentBaseId; | 
				
			||||
    if (it.util.varOccurences($code, $nextData) < 2) { | 
				
			||||
      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; | 
				
			||||
    } else { | 
				
			||||
      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; | 
				
			||||
    } | 
				
			||||
    out += ' if (' + ($nextValid) + ') break; }  '; | 
				
			||||
    it.compositeRule = $it.compositeRule = $wasComposite; | 
				
			||||
    out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {'; | 
				
			||||
  } else { | 
				
			||||
    out += ' if (' + ($data) + '.length == 0) {'; | 
				
			||||
  } | 
				
			||||
  var $$outStack = $$outStack || []; | 
				
			||||
  $$outStack.push(out); | 
				
			||||
  out = ''; /* istanbul ignore else */ | 
				
			||||
  if (it.createErrors !== false) { | 
				
			||||
    out += ' { keyword: \'' + ('contains') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; | 
				
			||||
    if (it.opts.messages !== false) { | 
				
			||||
      out += ' , message: \'should contain a valid item\' '; | 
				
			||||
    } | 
				
			||||
    if (it.opts.verbose) { | 
				
			||||
      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
    } | 
				
			||||
    out += ' } '; | 
				
			||||
  } else { | 
				
			||||
    out += ' {} '; | 
				
			||||
  } | 
				
			||||
  var __err = out; | 
				
			||||
  out = $$outStack.pop(); | 
				
			||||
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
    if (it.async) { | 
				
			||||
      out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
    } else { | 
				
			||||
      out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
  } | 
				
			||||
  out += ' } else { '; | 
				
			||||
  if ($nonEmptySchema) { | 
				
			||||
    out += '  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; | 
				
			||||
  } | 
				
			||||
  if (it.opts.allErrors) { | 
				
			||||
    out += ' } '; | 
				
			||||
  } | 
				
			||||
  out = it.util.cleanUpCode(out); | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,226 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_custom(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $errorKeyword; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $valid = 'valid' + $lvl; | 
				
			||||
  var $errs = 'errs__' + $lvl; | 
				
			||||
  var $isData = it.opts.$data && $schema && $schema.$data, | 
				
			||||
    $schemaValue; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; | 
				
			||||
    $schemaValue = 'schema' + $lvl; | 
				
			||||
  } else { | 
				
			||||
    $schemaValue = $schema; | 
				
			||||
  } | 
				
			||||
  var $rule = this, | 
				
			||||
    $definition = 'definition' + $lvl, | 
				
			||||
    $rDef = $rule.definition, | 
				
			||||
    $closingBraces = ''; | 
				
			||||
  var $compile, $inline, $macro, $ruleValidate, $validateCode; | 
				
			||||
  if ($isData && $rDef.$data) { | 
				
			||||
    $validateCode = 'keywordValidate' + $lvl; | 
				
			||||
    var $validateSchema = $rDef.validateSchema; | 
				
			||||
    out += ' var ' + ($definition) + ' = RULES.custom[\'' + ($keyword) + '\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;'; | 
				
			||||
  } else { | 
				
			||||
    $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it); | 
				
			||||
    if (!$ruleValidate) return; | 
				
			||||
    $schemaValue = 'validate.schema' + $schemaPath; | 
				
			||||
    $validateCode = $ruleValidate.code; | 
				
			||||
    $compile = $rDef.compile; | 
				
			||||
    $inline = $rDef.inline; | 
				
			||||
    $macro = $rDef.macro; | 
				
			||||
  } | 
				
			||||
  var $ruleErrs = $validateCode + '.errors', | 
				
			||||
    $i = 'i' + $lvl, | 
				
			||||
    $ruleErr = 'ruleErr' + $lvl, | 
				
			||||
    $asyncKeyword = $rDef.async; | 
				
			||||
  if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema'); | 
				
			||||
  if (!($inline || $macro)) { | 
				
			||||
    out += '' + ($ruleErrs) + ' = null;'; | 
				
			||||
  } | 
				
			||||
  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; | 
				
			||||
  if ($isData && $rDef.$data) { | 
				
			||||
    $closingBraces += '}'; | 
				
			||||
    out += ' if (' + ($schemaValue) + ' === undefined) { ' + ($valid) + ' = true; } else { '; | 
				
			||||
    if ($validateSchema) { | 
				
			||||
      $closingBraces += '}'; | 
				
			||||
      out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') { '; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  if ($inline) { | 
				
			||||
    if ($rDef.statements) { | 
				
			||||
      out += ' ' + ($ruleValidate.validate) + ' '; | 
				
			||||
    } else { | 
				
			||||
      out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; '; | 
				
			||||
    } | 
				
			||||
  } else if ($macro) { | 
				
			||||
    var $it = it.util.copy(it); | 
				
			||||
    var $closingBraces = ''; | 
				
			||||
    $it.level++; | 
				
			||||
    var $nextValid = 'valid' + $it.level; | 
				
			||||
    $it.schema = $ruleValidate.validate; | 
				
			||||
    $it.schemaPath = ''; | 
				
			||||
    var $wasComposite = it.compositeRule; | 
				
			||||
    it.compositeRule = $it.compositeRule = true; | 
				
			||||
    var $code = it.validate($it).replace(/validate\.schema/g, $validateCode); | 
				
			||||
    it.compositeRule = $it.compositeRule = $wasComposite; | 
				
			||||
    out += ' ' + ($code); | 
				
			||||
  } else { | 
				
			||||
    var $$outStack = $$outStack || []; | 
				
			||||
    $$outStack.push(out); | 
				
			||||
    out = ''; | 
				
			||||
    out += '  ' + ($validateCode) + '.call( '; | 
				
			||||
    if (it.opts.passContext) { | 
				
			||||
      out += 'this'; | 
				
			||||
    } else { | 
				
			||||
      out += 'self'; | 
				
			||||
    } | 
				
			||||
    if ($compile || $rDef.schema === false) { | 
				
			||||
      out += ' , ' + ($data) + ' '; | 
				
			||||
    } else { | 
				
			||||
      out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' '; | 
				
			||||
    } | 
				
			||||
    out += ' , (dataPath || \'\')'; | 
				
			||||
    if (it.errorPath != '""') { | 
				
			||||
      out += ' + ' + (it.errorPath); | 
				
			||||
    } | 
				
			||||
    var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', | 
				
			||||
      $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; | 
				
			||||
    out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData )  '; | 
				
			||||
    var def_callRuleValidate = out; | 
				
			||||
    out = $$outStack.pop(); | 
				
			||||
    if ($rDef.errors === false) { | 
				
			||||
      out += ' ' + ($valid) + ' = '; | 
				
			||||
      if ($asyncKeyword) { | 
				
			||||
        out += '' + (it.yieldAwait); | 
				
			||||
      } | 
				
			||||
      out += '' + (def_callRuleValidate) + '; '; | 
				
			||||
    } else { | 
				
			||||
      if ($asyncKeyword) { | 
				
			||||
        $ruleErrs = 'customErrors' + $lvl; | 
				
			||||
        out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = ' + (it.yieldAwait) + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } '; | 
				
			||||
      } else { | 
				
			||||
        out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; '; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  if ($rDef.modifying) { | 
				
			||||
    out += ' if (' + ($parentData) + ') ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];'; | 
				
			||||
  } | 
				
			||||
  out += '' + ($closingBraces); | 
				
			||||
  if ($rDef.valid) { | 
				
			||||
    if ($breakOnError) { | 
				
			||||
      out += ' if (true) { '; | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    out += ' if ( '; | 
				
			||||
    if ($rDef.valid === undefined) { | 
				
			||||
      out += ' !'; | 
				
			||||
      if ($macro) { | 
				
			||||
        out += '' + ($nextValid); | 
				
			||||
      } else { | 
				
			||||
        out += '' + ($valid); | 
				
			||||
      } | 
				
			||||
    } else { | 
				
			||||
      out += ' ' + (!$rDef.valid) + ' '; | 
				
			||||
    } | 
				
			||||
    out += ') { '; | 
				
			||||
    $errorKeyword = $rule.keyword; | 
				
			||||
    var $$outStack = $$outStack || []; | 
				
			||||
    $$outStack.push(out); | 
				
			||||
    out = ''; | 
				
			||||
    var $$outStack = $$outStack || []; | 
				
			||||
    $$outStack.push(out); | 
				
			||||
    out = ''; /* istanbul ignore else */ | 
				
			||||
    if (it.createErrors !== false) { | 
				
			||||
      out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } '; | 
				
			||||
      if (it.opts.messages !== false) { | 
				
			||||
        out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' '; | 
				
			||||
      } | 
				
			||||
      if (it.opts.verbose) { | 
				
			||||
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
      } | 
				
			||||
      out += ' } '; | 
				
			||||
    } else { | 
				
			||||
      out += ' {} '; | 
				
			||||
    } | 
				
			||||
    var __err = out; | 
				
			||||
    out = $$outStack.pop(); | 
				
			||||
    if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
      if (it.async) { | 
				
			||||
        out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
      } else { | 
				
			||||
        out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
      } | 
				
			||||
    } else { | 
				
			||||
      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
    } | 
				
			||||
    var def_customError = out; | 
				
			||||
    out = $$outStack.pop(); | 
				
			||||
    if ($inline) { | 
				
			||||
      if ($rDef.errors) { | 
				
			||||
        if ($rDef.errors != 'full') { | 
				
			||||
          out += '  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \'\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = "' + ($errSchemaPath) + '"; } '; | 
				
			||||
          if (it.opts.verbose) { | 
				
			||||
            out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; '; | 
				
			||||
          } | 
				
			||||
          out += ' } '; | 
				
			||||
        } | 
				
			||||
      } else { | 
				
			||||
        if ($rDef.errors === false) { | 
				
			||||
          out += ' ' + (def_customError) + ' '; | 
				
			||||
        } else { | 
				
			||||
          out += ' if (' + ($errs) + ' == errors) { ' + (def_customError) + ' } else {  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \'\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = "' + ($errSchemaPath) + '"; } '; | 
				
			||||
          if (it.opts.verbose) { | 
				
			||||
            out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; '; | 
				
			||||
          } | 
				
			||||
          out += ' } } '; | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
    } else if ($macro) { | 
				
			||||
      out += '   var err =   '; /* istanbul ignore else */ | 
				
			||||
      if (it.createErrors !== false) { | 
				
			||||
        out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } '; | 
				
			||||
        if (it.opts.messages !== false) { | 
				
			||||
          out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' '; | 
				
			||||
        } | 
				
			||||
        if (it.opts.verbose) { | 
				
			||||
          out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
        } | 
				
			||||
        out += ' } '; | 
				
			||||
      } else { | 
				
			||||
        out += ' {} '; | 
				
			||||
      } | 
				
			||||
      out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
      if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
        if (it.async) { | 
				
			||||
          out += ' throw new ValidationError(vErrors); '; | 
				
			||||
        } else { | 
				
			||||
          out += ' validate.errors = vErrors; return false; '; | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
    } else { | 
				
			||||
      if ($rDef.errors === false) { | 
				
			||||
        out += ' ' + (def_customError) + ' '; | 
				
			||||
      } else { | 
				
			||||
        out += ' if (Array.isArray(' + ($ruleErrs) + ')) { if (vErrors === null) vErrors = ' + ($ruleErrs) + '; else vErrors = vErrors.concat(' + ($ruleErrs) + '); errors = vErrors.length;  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \'\') + ' + (it.errorPath) + ';  ' + ($ruleErr) + '.schemaPath = "' + ($errSchemaPath) + '";  '; | 
				
			||||
        if (it.opts.verbose) { | 
				
			||||
          out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; '; | 
				
			||||
        } | 
				
			||||
        out += ' } } else { ' + (def_customError) + ' } '; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
    out += ' } '; | 
				
			||||
    if ($breakOnError) { | 
				
			||||
      out += ' else { '; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,167 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_dependencies(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $errs = 'errs__' + $lvl; | 
				
			||||
  var $it = it.util.copy(it); | 
				
			||||
  var $closingBraces = ''; | 
				
			||||
  $it.level++; | 
				
			||||
  var $nextValid = 'valid' + $it.level; | 
				
			||||
  var $schemaDeps = {}, | 
				
			||||
    $propertyDeps = {}, | 
				
			||||
    $ownProperties = it.opts.ownProperties; | 
				
			||||
  for ($property in $schema) { | 
				
			||||
    var $sch = $schema[$property]; | 
				
			||||
    var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps; | 
				
			||||
    $deps[$property] = $sch; | 
				
			||||
  } | 
				
			||||
  out += 'var ' + ($errs) + ' = errors;'; | 
				
			||||
  var $currentErrorPath = it.errorPath; | 
				
			||||
  out += 'var missing' + ($lvl) + ';'; | 
				
			||||
  for (var $property in $propertyDeps) { | 
				
			||||
    $deps = $propertyDeps[$property]; | 
				
			||||
    if ($deps.length) { | 
				
			||||
      out += ' if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined '; | 
				
			||||
      if ($ownProperties) { | 
				
			||||
        out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($property)) + '\') '; | 
				
			||||
      } | 
				
			||||
      if ($breakOnError) { | 
				
			||||
        out += ' && ( '; | 
				
			||||
        var arr1 = $deps; | 
				
			||||
        if (arr1) { | 
				
			||||
          var $propertyKey, $i = -1, | 
				
			||||
            l1 = arr1.length - 1; | 
				
			||||
          while ($i < l1) { | 
				
			||||
            $propertyKey = arr1[$i += 1]; | 
				
			||||
            if ($i) { | 
				
			||||
              out += ' || '; | 
				
			||||
            } | 
				
			||||
            var $prop = it.util.getProperty($propertyKey), | 
				
			||||
              $useData = $data + $prop; | 
				
			||||
            out += ' ( ( ' + ($useData) + ' === undefined '; | 
				
			||||
            if ($ownProperties) { | 
				
			||||
              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; | 
				
			||||
            } | 
				
			||||
            out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) '; | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
        out += ')) {  '; | 
				
			||||
        var $propertyPath = 'missing' + $lvl, | 
				
			||||
          $missingProperty = '\' + ' + $propertyPath + ' + \''; | 
				
			||||
        if (it.opts._errorDataPathProperty) { | 
				
			||||
          it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath; | 
				
			||||
        } | 
				
			||||
        var $$outStack = $$outStack || []; | 
				
			||||
        $$outStack.push(out); | 
				
			||||
        out = ''; /* istanbul ignore else */ | 
				
			||||
        if (it.createErrors !== false) { | 
				
			||||
          out += ' { keyword: \'' + ('dependencies') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \'' + (it.util.escapeQuotes($property)) + '\', missingProperty: \'' + ($missingProperty) + '\', depsCount: ' + ($deps.length) + ', deps: \'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(", "))) + '\' } '; | 
				
			||||
          if (it.opts.messages !== false) { | 
				
			||||
            out += ' , message: \'should have '; | 
				
			||||
            if ($deps.length == 1) { | 
				
			||||
              out += 'property ' + (it.util.escapeQuotes($deps[0])); | 
				
			||||
            } else { | 
				
			||||
              out += 'properties ' + (it.util.escapeQuotes($deps.join(", "))); | 
				
			||||
            } | 
				
			||||
            out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\' '; | 
				
			||||
          } | 
				
			||||
          if (it.opts.verbose) { | 
				
			||||
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
          } | 
				
			||||
          out += ' } '; | 
				
			||||
        } else { | 
				
			||||
          out += ' {} '; | 
				
			||||
        } | 
				
			||||
        var __err = out; | 
				
			||||
        out = $$outStack.pop(); | 
				
			||||
        if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
          if (it.async) { | 
				
			||||
            out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
          } else { | 
				
			||||
            out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
          } | 
				
			||||
        } else { | 
				
			||||
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
        } | 
				
			||||
      } else { | 
				
			||||
        out += ' ) { '; | 
				
			||||
        var arr2 = $deps; | 
				
			||||
        if (arr2) { | 
				
			||||
          var $propertyKey, i2 = -1, | 
				
			||||
            l2 = arr2.length - 1; | 
				
			||||
          while (i2 < l2) { | 
				
			||||
            $propertyKey = arr2[i2 += 1]; | 
				
			||||
            var $prop = it.util.getProperty($propertyKey), | 
				
			||||
              $missingProperty = it.util.escapeQuotes($propertyKey), | 
				
			||||
              $useData = $data + $prop; | 
				
			||||
            if (it.opts._errorDataPathProperty) { | 
				
			||||
              it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); | 
				
			||||
            } | 
				
			||||
            out += ' if ( ' + ($useData) + ' === undefined '; | 
				
			||||
            if ($ownProperties) { | 
				
			||||
              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; | 
				
			||||
            } | 
				
			||||
            out += ') {  var err =   '; /* istanbul ignore else */ | 
				
			||||
            if (it.createErrors !== false) { | 
				
			||||
              out += ' { keyword: \'' + ('dependencies') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \'' + (it.util.escapeQuotes($property)) + '\', missingProperty: \'' + ($missingProperty) + '\', depsCount: ' + ($deps.length) + ', deps: \'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(", "))) + '\' } '; | 
				
			||||
              if (it.opts.messages !== false) { | 
				
			||||
                out += ' , message: \'should have '; | 
				
			||||
                if ($deps.length == 1) { | 
				
			||||
                  out += 'property ' + (it.util.escapeQuotes($deps[0])); | 
				
			||||
                } else { | 
				
			||||
                  out += 'properties ' + (it.util.escapeQuotes($deps.join(", "))); | 
				
			||||
                } | 
				
			||||
                out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\' '; | 
				
			||||
              } | 
				
			||||
              if (it.opts.verbose) { | 
				
			||||
                out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
              } | 
				
			||||
              out += ' } '; | 
				
			||||
            } else { | 
				
			||||
              out += ' {} '; | 
				
			||||
            } | 
				
			||||
            out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } '; | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
      out += ' }   '; | 
				
			||||
      if ($breakOnError) { | 
				
			||||
        $closingBraces += '}'; | 
				
			||||
        out += ' else { '; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  it.errorPath = $currentErrorPath; | 
				
			||||
  var $currentBaseId = $it.baseId; | 
				
			||||
  for (var $property in $schemaDeps) { | 
				
			||||
    var $sch = $schemaDeps[$property]; | 
				
			||||
    if (it.util.schemaHasRules($sch, it.RULES.all)) { | 
				
			||||
      out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined '; | 
				
			||||
      if ($ownProperties) { | 
				
			||||
        out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($property)) + '\') '; | 
				
			||||
      } | 
				
			||||
      out += ') { '; | 
				
			||||
      $it.schema = $sch; | 
				
			||||
      $it.schemaPath = $schemaPath + it.util.getProperty($property); | 
				
			||||
      $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property); | 
				
			||||
      out += '  ' + (it.validate($it)) + ' '; | 
				
			||||
      $it.baseId = $currentBaseId; | 
				
			||||
      out += ' }  '; | 
				
			||||
      if ($breakOnError) { | 
				
			||||
        out += ' if (' + ($nextValid) + ') { '; | 
				
			||||
        $closingBraces += '}'; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  if ($breakOnError) { | 
				
			||||
    out += '   ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; | 
				
			||||
  } | 
				
			||||
  out = it.util.cleanUpCode(out); | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,65 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_enum(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $valid = 'valid' + $lvl; | 
				
			||||
  var $isData = it.opts.$data && $schema && $schema.$data, | 
				
			||||
    $schemaValue; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; | 
				
			||||
    $schemaValue = 'schema' + $lvl; | 
				
			||||
  } else { | 
				
			||||
    $schemaValue = $schema; | 
				
			||||
  } | 
				
			||||
  var $i = 'i' + $lvl, | 
				
			||||
    $vSchema = 'schema' + $lvl; | 
				
			||||
  if (!$isData) { | 
				
			||||
    out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + ';'; | 
				
			||||
  } | 
				
			||||
  out += 'var ' + ($valid) + ';'; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {'; | 
				
			||||
  } | 
				
			||||
  out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<' + ($vSchema) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }'; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += '  }  '; | 
				
			||||
  } | 
				
			||||
  out += ' if (!' + ($valid) + ') {   '; | 
				
			||||
  var $$outStack = $$outStack || []; | 
				
			||||
  $$outStack.push(out); | 
				
			||||
  out = ''; /* istanbul ignore else */ | 
				
			||||
  if (it.createErrors !== false) { | 
				
			||||
    out += ' { keyword: \'' + ('enum') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValues: schema' + ($lvl) + ' } '; | 
				
			||||
    if (it.opts.messages !== false) { | 
				
			||||
      out += ' , message: \'should be equal to one of the allowed values\' '; | 
				
			||||
    } | 
				
			||||
    if (it.opts.verbose) { | 
				
			||||
      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
    } | 
				
			||||
    out += ' } '; | 
				
			||||
  } else { | 
				
			||||
    out += ' {} '; | 
				
			||||
  } | 
				
			||||
  var __err = out; | 
				
			||||
  out = $$outStack.pop(); | 
				
			||||
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
    if (it.async) { | 
				
			||||
      out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
    } else { | 
				
			||||
      out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
  } | 
				
			||||
  out += ' }'; | 
				
			||||
  if ($breakOnError) { | 
				
			||||
    out += ' else { '; | 
				
			||||
  } | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,149 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_format(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  if (it.opts.format === false) { | 
				
			||||
    if ($breakOnError) { | 
				
			||||
      out += ' if (true) { '; | 
				
			||||
    } | 
				
			||||
    return out; | 
				
			||||
  } | 
				
			||||
  var $isData = it.opts.$data && $schema && $schema.$data, | 
				
			||||
    $schemaValue; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; | 
				
			||||
    $schemaValue = 'schema' + $lvl; | 
				
			||||
  } else { | 
				
			||||
    $schemaValue = $schema; | 
				
			||||
  } | 
				
			||||
  var $unknownFormats = it.opts.unknownFormats, | 
				
			||||
    $allowUnknown = Array.isArray($unknownFormats); | 
				
			||||
  if ($isData) { | 
				
			||||
    var $format = 'format' + $lvl, | 
				
			||||
      $isObject = 'isObject' + $lvl, | 
				
			||||
      $formatType = 'formatType' + $lvl; | 
				
			||||
    out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var ' + ($isObject) + ' = typeof ' + ($format) + ' == \'object\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; var ' + ($formatType) + ' = ' + ($isObject) + ' && ' + ($format) + '.type || \'string\'; if (' + ($isObject) + ') { '; | 
				
			||||
    if (it.async) { | 
				
			||||
      out += ' var async' + ($lvl) + ' = ' + ($format) + '.async; '; | 
				
			||||
    } | 
				
			||||
    out += ' ' + ($format) + ' = ' + ($format) + '.validate; } if (  '; | 
				
			||||
    if ($isData) { | 
				
			||||
      out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || '; | 
				
			||||
    } | 
				
			||||
    out += ' ('; | 
				
			||||
    if ($unknownFormats != 'ignore') { | 
				
			||||
      out += ' (' + ($schemaValue) + ' && !' + ($format) + ' '; | 
				
			||||
      if ($allowUnknown) { | 
				
			||||
        out += ' && self._opts.unknownFormats.indexOf(' + ($schemaValue) + ') == -1 '; | 
				
			||||
      } | 
				
			||||
      out += ') || '; | 
				
			||||
    } | 
				
			||||
    out += ' (' + ($format) + ' && ' + ($formatType) + ' == \'' + ($ruleType) + '\' && !(typeof ' + ($format) + ' == \'function\' ? '; | 
				
			||||
    if (it.async) { | 
				
			||||
      out += ' (async' + ($lvl) + ' ? ' + (it.yieldAwait) + ' ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) '; | 
				
			||||
    } else { | 
				
			||||
      out += ' ' + ($format) + '(' + ($data) + ') '; | 
				
			||||
    } | 
				
			||||
    out += ' : ' + ($format) + '.test(' + ($data) + '))))) {'; | 
				
			||||
  } else { | 
				
			||||
    var $format = it.formats[$schema]; | 
				
			||||
    if (!$format) { | 
				
			||||
      if ($unknownFormats == 'ignore') { | 
				
			||||
        it.logger.warn('unknown format "' + $schema + '" ignored in schema at path "' + it.errSchemaPath + '"'); | 
				
			||||
        if ($breakOnError) { | 
				
			||||
          out += ' if (true) { '; | 
				
			||||
        } | 
				
			||||
        return out; | 
				
			||||
      } else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) { | 
				
			||||
        if ($breakOnError) { | 
				
			||||
          out += ' if (true) { '; | 
				
			||||
        } | 
				
			||||
        return out; | 
				
			||||
      } else { | 
				
			||||
        throw new Error('unknown format "' + $schema + '" is used in schema at path "' + it.errSchemaPath + '"'); | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
    var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate; | 
				
			||||
    var $formatType = $isObject && $format.type || 'string'; | 
				
			||||
    if ($isObject) { | 
				
			||||
      var $async = $format.async === true; | 
				
			||||
      $format = $format.validate; | 
				
			||||
    } | 
				
			||||
    if ($formatType != $ruleType) { | 
				
			||||
      if ($breakOnError) { | 
				
			||||
        out += ' if (true) { '; | 
				
			||||
      } | 
				
			||||
      return out; | 
				
			||||
    } | 
				
			||||
    if ($async) { | 
				
			||||
      if (!it.async) throw new Error('async format in sync schema'); | 
				
			||||
      var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate'; | 
				
			||||
      out += ' if (!(' + (it.yieldAwait) + ' ' + ($formatRef) + '(' + ($data) + '))) { '; | 
				
			||||
    } else { | 
				
			||||
      out += ' if (! '; | 
				
			||||
      var $formatRef = 'formats' + it.util.getProperty($schema); | 
				
			||||
      if ($isObject) $formatRef += '.validate'; | 
				
			||||
      if (typeof $format == 'function') { | 
				
			||||
        out += ' ' + ($formatRef) + '(' + ($data) + ') '; | 
				
			||||
      } else { | 
				
			||||
        out += ' ' + ($formatRef) + '.test(' + ($data) + ') '; | 
				
			||||
      } | 
				
			||||
      out += ') { '; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  var $$outStack = $$outStack || []; | 
				
			||||
  $$outStack.push(out); | 
				
			||||
  out = ''; /* istanbul ignore else */ | 
				
			||||
  if (it.createErrors !== false) { | 
				
			||||
    out += ' { keyword: \'' + ('format') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format:  '; | 
				
			||||
    if ($isData) { | 
				
			||||
      out += '' + ($schemaValue); | 
				
			||||
    } else { | 
				
			||||
      out += '' + (it.util.toQuotedString($schema)); | 
				
			||||
    } | 
				
			||||
    out += '  } '; | 
				
			||||
    if (it.opts.messages !== false) { | 
				
			||||
      out += ' , message: \'should match format "'; | 
				
			||||
      if ($isData) { | 
				
			||||
        out += '\' + ' + ($schemaValue) + ' + \''; | 
				
			||||
      } else { | 
				
			||||
        out += '' + (it.util.escapeQuotes($schema)); | 
				
			||||
      } | 
				
			||||
      out += '"\' '; | 
				
			||||
    } | 
				
			||||
    if (it.opts.verbose) { | 
				
			||||
      out += ' , schema:  '; | 
				
			||||
      if ($isData) { | 
				
			||||
        out += 'validate.schema' + ($schemaPath); | 
				
			||||
      } else { | 
				
			||||
        out += '' + (it.util.toQuotedString($schema)); | 
				
			||||
      } | 
				
			||||
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
    } | 
				
			||||
    out += ' } '; | 
				
			||||
  } else { | 
				
			||||
    out += ' {} '; | 
				
			||||
  } | 
				
			||||
  var __err = out; | 
				
			||||
  out = $$outStack.pop(); | 
				
			||||
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
    if (it.async) { | 
				
			||||
      out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
    } else { | 
				
			||||
      out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
  } | 
				
			||||
  out += ' } '; | 
				
			||||
  if ($breakOnError) { | 
				
			||||
    out += ' else { '; | 
				
			||||
  } | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,140 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_items(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $valid = 'valid' + $lvl; | 
				
			||||
  var $errs = 'errs__' + $lvl; | 
				
			||||
  var $it = it.util.copy(it); | 
				
			||||
  var $closingBraces = ''; | 
				
			||||
  $it.level++; | 
				
			||||
  var $nextValid = 'valid' + $it.level; | 
				
			||||
  var $idx = 'i' + $lvl, | 
				
			||||
    $dataNxt = $it.dataLevel = it.dataLevel + 1, | 
				
			||||
    $nextData = 'data' + $dataNxt, | 
				
			||||
    $currentBaseId = it.baseId; | 
				
			||||
  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; | 
				
			||||
  if (Array.isArray($schema)) { | 
				
			||||
    var $additionalItems = it.schema.additionalItems; | 
				
			||||
    if ($additionalItems === false) { | 
				
			||||
      out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; '; | 
				
			||||
      var $currErrSchemaPath = $errSchemaPath; | 
				
			||||
      $errSchemaPath = it.errSchemaPath + '/additionalItems'; | 
				
			||||
      out += '  if (!' + ($valid) + ') {   '; | 
				
			||||
      var $$outStack = $$outStack || []; | 
				
			||||
      $$outStack.push(out); | 
				
			||||
      out = ''; /* istanbul ignore else */ | 
				
			||||
      if (it.createErrors !== false) { | 
				
			||||
        out += ' { keyword: \'' + ('additionalItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } '; | 
				
			||||
        if (it.opts.messages !== false) { | 
				
			||||
          out += ' , message: \'should NOT have more than ' + ($schema.length) + ' items\' '; | 
				
			||||
        } | 
				
			||||
        if (it.opts.verbose) { | 
				
			||||
          out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
        } | 
				
			||||
        out += ' } '; | 
				
			||||
      } else { | 
				
			||||
        out += ' {} '; | 
				
			||||
      } | 
				
			||||
      var __err = out; | 
				
			||||
      out = $$outStack.pop(); | 
				
			||||
      if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
        if (it.async) { | 
				
			||||
          out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
        } else { | 
				
			||||
          out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
        } | 
				
			||||
      } else { | 
				
			||||
        out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
      } | 
				
			||||
      out += ' } '; | 
				
			||||
      $errSchemaPath = $currErrSchemaPath; | 
				
			||||
      if ($breakOnError) { | 
				
			||||
        $closingBraces += '}'; | 
				
			||||
        out += ' else { '; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
    var arr1 = $schema; | 
				
			||||
    if (arr1) { | 
				
			||||
      var $sch, $i = -1, | 
				
			||||
        l1 = arr1.length - 1; | 
				
			||||
      while ($i < l1) { | 
				
			||||
        $sch = arr1[$i += 1]; | 
				
			||||
        if (it.util.schemaHasRules($sch, it.RULES.all)) { | 
				
			||||
          out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { '; | 
				
			||||
          var $passData = $data + '[' + $i + ']'; | 
				
			||||
          $it.schema = $sch; | 
				
			||||
          $it.schemaPath = $schemaPath + '[' + $i + ']'; | 
				
			||||
          $it.errSchemaPath = $errSchemaPath + '/' + $i; | 
				
			||||
          $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true); | 
				
			||||
          $it.dataPathArr[$dataNxt] = $i; | 
				
			||||
          var $code = it.validate($it); | 
				
			||||
          $it.baseId = $currentBaseId; | 
				
			||||
          if (it.util.varOccurences($code, $nextData) < 2) { | 
				
			||||
            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; | 
				
			||||
          } else { | 
				
			||||
            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; | 
				
			||||
          } | 
				
			||||
          out += ' }  '; | 
				
			||||
          if ($breakOnError) { | 
				
			||||
            out += ' if (' + ($nextValid) + ') { '; | 
				
			||||
            $closingBraces += '}'; | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
    if (typeof $additionalItems == 'object' && it.util.schemaHasRules($additionalItems, it.RULES.all)) { | 
				
			||||
      $it.schema = $additionalItems; | 
				
			||||
      $it.schemaPath = it.schemaPath + '.additionalItems'; | 
				
			||||
      $it.errSchemaPath = it.errSchemaPath + '/additionalItems'; | 
				
			||||
      out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') {  for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; | 
				
			||||
      $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); | 
				
			||||
      var $passData = $data + '[' + $idx + ']'; | 
				
			||||
      $it.dataPathArr[$dataNxt] = $idx; | 
				
			||||
      var $code = it.validate($it); | 
				
			||||
      $it.baseId = $currentBaseId; | 
				
			||||
      if (it.util.varOccurences($code, $nextData) < 2) { | 
				
			||||
        out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; | 
				
			||||
      } else { | 
				
			||||
        out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; | 
				
			||||
      } | 
				
			||||
      if ($breakOnError) { | 
				
			||||
        out += ' if (!' + ($nextValid) + ') break; '; | 
				
			||||
      } | 
				
			||||
      out += ' } }  '; | 
				
			||||
      if ($breakOnError) { | 
				
			||||
        out += ' if (' + ($nextValid) + ') { '; | 
				
			||||
        $closingBraces += '}'; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } else if (it.util.schemaHasRules($schema, it.RULES.all)) { | 
				
			||||
    $it.schema = $schema; | 
				
			||||
    $it.schemaPath = $schemaPath; | 
				
			||||
    $it.errSchemaPath = $errSchemaPath; | 
				
			||||
    out += '  for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; | 
				
			||||
    $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); | 
				
			||||
    var $passData = $data + '[' + $idx + ']'; | 
				
			||||
    $it.dataPathArr[$dataNxt] = $idx; | 
				
			||||
    var $code = it.validate($it); | 
				
			||||
    $it.baseId = $currentBaseId; | 
				
			||||
    if (it.util.varOccurences($code, $nextData) < 2) { | 
				
			||||
      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; | 
				
			||||
    } else { | 
				
			||||
      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; | 
				
			||||
    } | 
				
			||||
    if ($breakOnError) { | 
				
			||||
      out += ' if (!' + ($nextValid) + ') break; '; | 
				
			||||
    } | 
				
			||||
    out += ' }'; | 
				
			||||
  } | 
				
			||||
  if ($breakOnError) { | 
				
			||||
    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; | 
				
			||||
  } | 
				
			||||
  out = it.util.cleanUpCode(out); | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,76 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_multipleOf(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $isData = it.opts.$data && $schema && $schema.$data, | 
				
			||||
    $schemaValue; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; | 
				
			||||
    $schemaValue = 'schema' + $lvl; | 
				
			||||
  } else { | 
				
			||||
    $schemaValue = $schema; | 
				
			||||
  } | 
				
			||||
  out += 'var division' + ($lvl) + ';if ('; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \'number\' || '; | 
				
			||||
  } | 
				
			||||
  out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', '; | 
				
			||||
  if (it.opts.multipleOfPrecision) { | 
				
			||||
    out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' '; | 
				
			||||
  } else { | 
				
			||||
    out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') '; | 
				
			||||
  } | 
				
			||||
  out += ' ) '; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += '  )  '; | 
				
			||||
  } | 
				
			||||
  out += ' ) {   '; | 
				
			||||
  var $$outStack = $$outStack || []; | 
				
			||||
  $$outStack.push(out); | 
				
			||||
  out = ''; /* istanbul ignore else */ | 
				
			||||
  if (it.createErrors !== false) { | 
				
			||||
    out += ' { keyword: \'' + ('multipleOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } '; | 
				
			||||
    if (it.opts.messages !== false) { | 
				
			||||
      out += ' , message: \'should be multiple of '; | 
				
			||||
      if ($isData) { | 
				
			||||
        out += '\' + ' + ($schemaValue); | 
				
			||||
      } else { | 
				
			||||
        out += '' + ($schemaValue) + '\''; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
    if (it.opts.verbose) { | 
				
			||||
      out += ' , schema:  '; | 
				
			||||
      if ($isData) { | 
				
			||||
        out += 'validate.schema' + ($schemaPath); | 
				
			||||
      } else { | 
				
			||||
        out += '' + ($schema); | 
				
			||||
      } | 
				
			||||
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
    } | 
				
			||||
    out += ' } '; | 
				
			||||
  } else { | 
				
			||||
    out += ' {} '; | 
				
			||||
  } | 
				
			||||
  var __err = out; | 
				
			||||
  out = $$outStack.pop(); | 
				
			||||
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
    if (it.async) { | 
				
			||||
      out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
    } else { | 
				
			||||
      out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
  } | 
				
			||||
  out += '} '; | 
				
			||||
  if ($breakOnError) { | 
				
			||||
    out += ' else { '; | 
				
			||||
  } | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,83 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_not(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $errs = 'errs__' + $lvl; | 
				
			||||
  var $it = it.util.copy(it); | 
				
			||||
  $it.level++; | 
				
			||||
  var $nextValid = 'valid' + $it.level; | 
				
			||||
  if (it.util.schemaHasRules($schema, it.RULES.all)) { | 
				
			||||
    $it.schema = $schema; | 
				
			||||
    $it.schemaPath = $schemaPath; | 
				
			||||
    $it.errSchemaPath = $errSchemaPath; | 
				
			||||
    out += ' var ' + ($errs) + ' = errors;  '; | 
				
			||||
    var $wasComposite = it.compositeRule; | 
				
			||||
    it.compositeRule = $it.compositeRule = true; | 
				
			||||
    $it.createErrors = false; | 
				
			||||
    var $allErrorsOption; | 
				
			||||
    if ($it.opts.allErrors) { | 
				
			||||
      $allErrorsOption = $it.opts.allErrors; | 
				
			||||
      $it.opts.allErrors = false; | 
				
			||||
    } | 
				
			||||
    out += ' ' + (it.validate($it)) + ' '; | 
				
			||||
    $it.createErrors = true; | 
				
			||||
    if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption; | 
				
			||||
    it.compositeRule = $it.compositeRule = $wasComposite; | 
				
			||||
    out += ' if (' + ($nextValid) + ') {   '; | 
				
			||||
    var $$outStack = $$outStack || []; | 
				
			||||
    $$outStack.push(out); | 
				
			||||
    out = ''; /* istanbul ignore else */ | 
				
			||||
    if (it.createErrors !== false) { | 
				
			||||
      out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; | 
				
			||||
      if (it.opts.messages !== false) { | 
				
			||||
        out += ' , message: \'should NOT be valid\' '; | 
				
			||||
      } | 
				
			||||
      if (it.opts.verbose) { | 
				
			||||
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
      } | 
				
			||||
      out += ' } '; | 
				
			||||
    } else { | 
				
			||||
      out += ' {} '; | 
				
			||||
    } | 
				
			||||
    var __err = out; | 
				
			||||
    out = $$outStack.pop(); | 
				
			||||
    if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
      if (it.async) { | 
				
			||||
        out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
      } else { | 
				
			||||
        out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
      } | 
				
			||||
    } else { | 
				
			||||
      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
    } | 
				
			||||
    out += ' } else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; | 
				
			||||
    if (it.opts.allErrors) { | 
				
			||||
      out += ' } '; | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    out += '  var err =   '; /* istanbul ignore else */ | 
				
			||||
    if (it.createErrors !== false) { | 
				
			||||
      out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; | 
				
			||||
      if (it.opts.messages !== false) { | 
				
			||||
        out += ' , message: \'should NOT be valid\' '; | 
				
			||||
      } | 
				
			||||
      if (it.opts.verbose) { | 
				
			||||
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
      } | 
				
			||||
      out += ' } '; | 
				
			||||
    } else { | 
				
			||||
      out += ' {} '; | 
				
			||||
    } | 
				
			||||
    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
    if ($breakOnError) { | 
				
			||||
      out += ' if (false) { '; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,70 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_oneOf(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $valid = 'valid' + $lvl; | 
				
			||||
  var $errs = 'errs__' + $lvl; | 
				
			||||
  var $it = it.util.copy(it); | 
				
			||||
  var $closingBraces = ''; | 
				
			||||
  $it.level++; | 
				
			||||
  var $nextValid = 'valid' + $it.level; | 
				
			||||
  out += 'var ' + ($errs) + ' = errors;var prevValid' + ($lvl) + ' = false;var ' + ($valid) + ' = false;'; | 
				
			||||
  var $currentBaseId = $it.baseId; | 
				
			||||
  var $wasComposite = it.compositeRule; | 
				
			||||
  it.compositeRule = $it.compositeRule = true; | 
				
			||||
  var arr1 = $schema; | 
				
			||||
  if (arr1) { | 
				
			||||
    var $sch, $i = -1, | 
				
			||||
      l1 = arr1.length - 1; | 
				
			||||
    while ($i < l1) { | 
				
			||||
      $sch = arr1[$i += 1]; | 
				
			||||
      if (it.util.schemaHasRules($sch, it.RULES.all)) { | 
				
			||||
        $it.schema = $sch; | 
				
			||||
        $it.schemaPath = $schemaPath + '[' + $i + ']'; | 
				
			||||
        $it.errSchemaPath = $errSchemaPath + '/' + $i; | 
				
			||||
        out += '  ' + (it.validate($it)) + ' '; | 
				
			||||
        $it.baseId = $currentBaseId; | 
				
			||||
      } else { | 
				
			||||
        out += ' var ' + ($nextValid) + ' = true; '; | 
				
			||||
      } | 
				
			||||
      if ($i) { | 
				
			||||
        out += ' if (' + ($nextValid) + ' && prevValid' + ($lvl) + ') ' + ($valid) + ' = false; else { '; | 
				
			||||
        $closingBraces += '}'; | 
				
			||||
      } | 
				
			||||
      out += ' if (' + ($nextValid) + ') ' + ($valid) + ' = prevValid' + ($lvl) + ' = true;'; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  it.compositeRule = $it.compositeRule = $wasComposite; | 
				
			||||
  out += '' + ($closingBraces) + 'if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */ | 
				
			||||
  if (it.createErrors !== false) { | 
				
			||||
    out += ' { keyword: \'' + ('oneOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; | 
				
			||||
    if (it.opts.messages !== false) { | 
				
			||||
      out += ' , message: \'should match exactly one schema in oneOf\' '; | 
				
			||||
    } | 
				
			||||
    if (it.opts.verbose) { | 
				
			||||
      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
    } | 
				
			||||
    out += ' } '; | 
				
			||||
  } else { | 
				
			||||
    out += ' {} '; | 
				
			||||
  } | 
				
			||||
  out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
    if (it.async) { | 
				
			||||
      out += ' throw new ValidationError(vErrors); '; | 
				
			||||
    } else { | 
				
			||||
      out += ' validate.errors = vErrors; return false; '; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  out += '} else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }'; | 
				
			||||
  if (it.opts.allErrors) { | 
				
			||||
    out += ' } '; | 
				
			||||
  } | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,74 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_pattern(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $isData = it.opts.$data && $schema && $schema.$data, | 
				
			||||
    $schemaValue; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; | 
				
			||||
    $schemaValue = 'schema' + $lvl; | 
				
			||||
  } else { | 
				
			||||
    $schemaValue = $schema; | 
				
			||||
  } | 
				
			||||
  var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema); | 
				
			||||
  out += 'if ( '; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || '; | 
				
			||||
  } | 
				
			||||
  out += ' !' + ($regexp) + '.test(' + ($data) + ') ) {   '; | 
				
			||||
  var $$outStack = $$outStack || []; | 
				
			||||
  $$outStack.push(out); | 
				
			||||
  out = ''; /* istanbul ignore else */ | 
				
			||||
  if (it.createErrors !== false) { | 
				
			||||
    out += ' { keyword: \'' + ('pattern') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern:  '; | 
				
			||||
    if ($isData) { | 
				
			||||
      out += '' + ($schemaValue); | 
				
			||||
    } else { | 
				
			||||
      out += '' + (it.util.toQuotedString($schema)); | 
				
			||||
    } | 
				
			||||
    out += '  } '; | 
				
			||||
    if (it.opts.messages !== false) { | 
				
			||||
      out += ' , message: \'should match pattern "'; | 
				
			||||
      if ($isData) { | 
				
			||||
        out += '\' + ' + ($schemaValue) + ' + \''; | 
				
			||||
      } else { | 
				
			||||
        out += '' + (it.util.escapeQuotes($schema)); | 
				
			||||
      } | 
				
			||||
      out += '"\' '; | 
				
			||||
    } | 
				
			||||
    if (it.opts.verbose) { | 
				
			||||
      out += ' , schema:  '; | 
				
			||||
      if ($isData) { | 
				
			||||
        out += 'validate.schema' + ($schemaPath); | 
				
			||||
      } else { | 
				
			||||
        out += '' + (it.util.toQuotedString($schema)); | 
				
			||||
      } | 
				
			||||
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
    } | 
				
			||||
    out += ' } '; | 
				
			||||
  } else { | 
				
			||||
    out += ' {} '; | 
				
			||||
  } | 
				
			||||
  var __err = out; | 
				
			||||
  out = $$outStack.pop(); | 
				
			||||
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
    if (it.async) { | 
				
			||||
      out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
    } else { | 
				
			||||
      out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
  } | 
				
			||||
  out += '} '; | 
				
			||||
  if ($breakOnError) { | 
				
			||||
    out += ' else { '; | 
				
			||||
  } | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,468 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_properties(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $valid = 'valid' + $lvl; | 
				
			||||
  var $errs = 'errs__' + $lvl; | 
				
			||||
  var $it = it.util.copy(it); | 
				
			||||
  var $closingBraces = ''; | 
				
			||||
  $it.level++; | 
				
			||||
  var $nextValid = 'valid' + $it.level; | 
				
			||||
  var $key = 'key' + $lvl, | 
				
			||||
    $idx = 'idx' + $lvl, | 
				
			||||
    $dataNxt = $it.dataLevel = it.dataLevel + 1, | 
				
			||||
    $nextData = 'data' + $dataNxt, | 
				
			||||
    $dataProperties = 'dataProperties' + $lvl; | 
				
			||||
  var $schemaKeys = Object.keys($schema || {}), | 
				
			||||
    $pProperties = it.schema.patternProperties || {}, | 
				
			||||
    $pPropertyKeys = Object.keys($pProperties), | 
				
			||||
    $aProperties = it.schema.additionalProperties, | 
				
			||||
    $someProperties = $schemaKeys.length || $pPropertyKeys.length, | 
				
			||||
    $noAdditional = $aProperties === false, | 
				
			||||
    $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length, | 
				
			||||
    $removeAdditional = it.opts.removeAdditional, | 
				
			||||
    $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional, | 
				
			||||
    $ownProperties = it.opts.ownProperties, | 
				
			||||
    $currentBaseId = it.baseId; | 
				
			||||
  var $required = it.schema.required; | 
				
			||||
  if ($required && !(it.opts.v5 && $required.$data) && $required.length < it.opts.loopRequired) var $requiredHash = it.util.toHash($required); | 
				
			||||
  if (it.opts.patternGroups) { | 
				
			||||
    var $pgProperties = it.schema.patternGroups || {}, | 
				
			||||
      $pgPropertyKeys = Object.keys($pgProperties); | 
				
			||||
  } | 
				
			||||
  out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;'; | 
				
			||||
  if ($ownProperties) { | 
				
			||||
    out += ' var ' + ($dataProperties) + ' = undefined;'; | 
				
			||||
  } | 
				
			||||
  if ($checkAdditional) { | 
				
			||||
    if ($ownProperties) { | 
				
			||||
      out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; | 
				
			||||
    } else { | 
				
			||||
      out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; | 
				
			||||
    } | 
				
			||||
    if ($someProperties) { | 
				
			||||
      out += ' var isAdditional' + ($lvl) + ' = !(false '; | 
				
			||||
      if ($schemaKeys.length) { | 
				
			||||
        if ($schemaKeys.length > 5) { | 
				
			||||
          out += ' || validate.schema' + ($schemaPath) + '[' + ($key) + '] '; | 
				
			||||
        } else { | 
				
			||||
          var arr1 = $schemaKeys; | 
				
			||||
          if (arr1) { | 
				
			||||
            var $propertyKey, i1 = -1, | 
				
			||||
              l1 = arr1.length - 1; | 
				
			||||
            while (i1 < l1) { | 
				
			||||
              $propertyKey = arr1[i1 += 1]; | 
				
			||||
              out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' '; | 
				
			||||
            } | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
      if ($pPropertyKeys.length) { | 
				
			||||
        var arr2 = $pPropertyKeys; | 
				
			||||
        if (arr2) { | 
				
			||||
          var $pProperty, $i = -1, | 
				
			||||
            l2 = arr2.length - 1; | 
				
			||||
          while ($i < l2) { | 
				
			||||
            $pProperty = arr2[$i += 1]; | 
				
			||||
            out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') '; | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
      if (it.opts.patternGroups && $pgPropertyKeys.length) { | 
				
			||||
        var arr3 = $pgPropertyKeys; | 
				
			||||
        if (arr3) { | 
				
			||||
          var $pgProperty, $i = -1, | 
				
			||||
            l3 = arr3.length - 1; | 
				
			||||
          while ($i < l3) { | 
				
			||||
            $pgProperty = arr3[$i += 1]; | 
				
			||||
            out += ' || ' + (it.usePattern($pgProperty)) + '.test(' + ($key) + ') '; | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
      out += ' ); if (isAdditional' + ($lvl) + ') { '; | 
				
			||||
    } | 
				
			||||
    if ($removeAdditional == 'all') { | 
				
			||||
      out += ' delete ' + ($data) + '[' + ($key) + ']; '; | 
				
			||||
    } else { | 
				
			||||
      var $currentErrorPath = it.errorPath; | 
				
			||||
      var $additionalProperty = '\' + ' + $key + ' + \''; | 
				
			||||
      if (it.opts._errorDataPathProperty) { | 
				
			||||
        it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); | 
				
			||||
      } | 
				
			||||
      if ($noAdditional) { | 
				
			||||
        if ($removeAdditional) { | 
				
			||||
          out += ' delete ' + ($data) + '[' + ($key) + ']; '; | 
				
			||||
        } else { | 
				
			||||
          out += ' ' + ($nextValid) + ' = false; '; | 
				
			||||
          var $currErrSchemaPath = $errSchemaPath; | 
				
			||||
          $errSchemaPath = it.errSchemaPath + '/additionalProperties'; | 
				
			||||
          var $$outStack = $$outStack || []; | 
				
			||||
          $$outStack.push(out); | 
				
			||||
          out = ''; /* istanbul ignore else */ | 
				
			||||
          if (it.createErrors !== false) { | 
				
			||||
            out += ' { keyword: \'' + ('additionalProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \'' + ($additionalProperty) + '\' } '; | 
				
			||||
            if (it.opts.messages !== false) { | 
				
			||||
              out += ' , message: \'should NOT have additional properties\' '; | 
				
			||||
            } | 
				
			||||
            if (it.opts.verbose) { | 
				
			||||
              out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
            } | 
				
			||||
            out += ' } '; | 
				
			||||
          } else { | 
				
			||||
            out += ' {} '; | 
				
			||||
          } | 
				
			||||
          var __err = out; | 
				
			||||
          out = $$outStack.pop(); | 
				
			||||
          if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
            if (it.async) { | 
				
			||||
              out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
            } else { | 
				
			||||
              out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
            } | 
				
			||||
          } else { | 
				
			||||
            out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
          } | 
				
			||||
          $errSchemaPath = $currErrSchemaPath; | 
				
			||||
          if ($breakOnError) { | 
				
			||||
            out += ' break; '; | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
      } else if ($additionalIsSchema) { | 
				
			||||
        if ($removeAdditional == 'failing') { | 
				
			||||
          out += ' var ' + ($errs) + ' = errors;  '; | 
				
			||||
          var $wasComposite = it.compositeRule; | 
				
			||||
          it.compositeRule = $it.compositeRule = true; | 
				
			||||
          $it.schema = $aProperties; | 
				
			||||
          $it.schemaPath = it.schemaPath + '.additionalProperties'; | 
				
			||||
          $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; | 
				
			||||
          $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); | 
				
			||||
          var $passData = $data + '[' + $key + ']'; | 
				
			||||
          $it.dataPathArr[$dataNxt] = $key; | 
				
			||||
          var $code = it.validate($it); | 
				
			||||
          $it.baseId = $currentBaseId; | 
				
			||||
          if (it.util.varOccurences($code, $nextData) < 2) { | 
				
			||||
            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; | 
				
			||||
          } else { | 
				
			||||
            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; | 
				
			||||
          } | 
				
			||||
          out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; }  '; | 
				
			||||
          it.compositeRule = $it.compositeRule = $wasComposite; | 
				
			||||
        } else { | 
				
			||||
          $it.schema = $aProperties; | 
				
			||||
          $it.schemaPath = it.schemaPath + '.additionalProperties'; | 
				
			||||
          $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; | 
				
			||||
          $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); | 
				
			||||
          var $passData = $data + '[' + $key + ']'; | 
				
			||||
          $it.dataPathArr[$dataNxt] = $key; | 
				
			||||
          var $code = it.validate($it); | 
				
			||||
          $it.baseId = $currentBaseId; | 
				
			||||
          if (it.util.varOccurences($code, $nextData) < 2) { | 
				
			||||
            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; | 
				
			||||
          } else { | 
				
			||||
            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; | 
				
			||||
          } | 
				
			||||
          if ($breakOnError) { | 
				
			||||
            out += ' if (!' + ($nextValid) + ') break; '; | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
      it.errorPath = $currentErrorPath; | 
				
			||||
    } | 
				
			||||
    if ($someProperties) { | 
				
			||||
      out += ' } '; | 
				
			||||
    } | 
				
			||||
    out += ' }  '; | 
				
			||||
    if ($breakOnError) { | 
				
			||||
      out += ' if (' + ($nextValid) + ') { '; | 
				
			||||
      $closingBraces += '}'; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  var $useDefaults = it.opts.useDefaults && !it.compositeRule; | 
				
			||||
  if ($schemaKeys.length) { | 
				
			||||
    var arr4 = $schemaKeys; | 
				
			||||
    if (arr4) { | 
				
			||||
      var $propertyKey, i4 = -1, | 
				
			||||
        l4 = arr4.length - 1; | 
				
			||||
      while (i4 < l4) { | 
				
			||||
        $propertyKey = arr4[i4 += 1]; | 
				
			||||
        var $sch = $schema[$propertyKey]; | 
				
			||||
        if (it.util.schemaHasRules($sch, it.RULES.all)) { | 
				
			||||
          var $prop = it.util.getProperty($propertyKey), | 
				
			||||
            $passData = $data + $prop, | 
				
			||||
            $hasDefault = $useDefaults && $sch.default !== undefined; | 
				
			||||
          $it.schema = $sch; | 
				
			||||
          $it.schemaPath = $schemaPath + $prop; | 
				
			||||
          $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey); | 
				
			||||
          $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers); | 
				
			||||
          $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey); | 
				
			||||
          var $code = it.validate($it); | 
				
			||||
          $it.baseId = $currentBaseId; | 
				
			||||
          if (it.util.varOccurences($code, $nextData) < 2) { | 
				
			||||
            $code = it.util.varReplace($code, $nextData, $passData); | 
				
			||||
            var $useData = $passData; | 
				
			||||
          } else { | 
				
			||||
            var $useData = $nextData; | 
				
			||||
            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; '; | 
				
			||||
          } | 
				
			||||
          if ($hasDefault) { | 
				
			||||
            out += ' ' + ($code) + ' '; | 
				
			||||
          } else { | 
				
			||||
            if ($requiredHash && $requiredHash[$propertyKey]) { | 
				
			||||
              out += ' if ( ' + ($useData) + ' === undefined '; | 
				
			||||
              if ($ownProperties) { | 
				
			||||
                out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; | 
				
			||||
              } | 
				
			||||
              out += ') { ' + ($nextValid) + ' = false; '; | 
				
			||||
              var $currentErrorPath = it.errorPath, | 
				
			||||
                $currErrSchemaPath = $errSchemaPath, | 
				
			||||
                $missingProperty = it.util.escapeQuotes($propertyKey); | 
				
			||||
              if (it.opts._errorDataPathProperty) { | 
				
			||||
                it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); | 
				
			||||
              } | 
				
			||||
              $errSchemaPath = it.errSchemaPath + '/required'; | 
				
			||||
              var $$outStack = $$outStack || []; | 
				
			||||
              $$outStack.push(out); | 
				
			||||
              out = ''; /* istanbul ignore else */ | 
				
			||||
              if (it.createErrors !== false) { | 
				
			||||
                out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; | 
				
			||||
                if (it.opts.messages !== false) { | 
				
			||||
                  out += ' , message: \''; | 
				
			||||
                  if (it.opts._errorDataPathProperty) { | 
				
			||||
                    out += 'is a required property'; | 
				
			||||
                  } else { | 
				
			||||
                    out += 'should have required property \\\'' + ($missingProperty) + '\\\''; | 
				
			||||
                  } | 
				
			||||
                  out += '\' '; | 
				
			||||
                } | 
				
			||||
                if (it.opts.verbose) { | 
				
			||||
                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
                } | 
				
			||||
                out += ' } '; | 
				
			||||
              } else { | 
				
			||||
                out += ' {} '; | 
				
			||||
              } | 
				
			||||
              var __err = out; | 
				
			||||
              out = $$outStack.pop(); | 
				
			||||
              if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
                if (it.async) { | 
				
			||||
                  out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
                } else { | 
				
			||||
                  out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
                } | 
				
			||||
              } else { | 
				
			||||
                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
              } | 
				
			||||
              $errSchemaPath = $currErrSchemaPath; | 
				
			||||
              it.errorPath = $currentErrorPath; | 
				
			||||
              out += ' } else { '; | 
				
			||||
            } else { | 
				
			||||
              if ($breakOnError) { | 
				
			||||
                out += ' if ( ' + ($useData) + ' === undefined '; | 
				
			||||
                if ($ownProperties) { | 
				
			||||
                  out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; | 
				
			||||
                } | 
				
			||||
                out += ') { ' + ($nextValid) + ' = true; } else { '; | 
				
			||||
              } else { | 
				
			||||
                out += ' if (' + ($useData) + ' !== undefined '; | 
				
			||||
                if ($ownProperties) { | 
				
			||||
                  out += ' &&   Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; | 
				
			||||
                } | 
				
			||||
                out += ' ) { '; | 
				
			||||
              } | 
				
			||||
            } | 
				
			||||
            out += ' ' + ($code) + ' } '; | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
        if ($breakOnError) { | 
				
			||||
          out += ' if (' + ($nextValid) + ') { '; | 
				
			||||
          $closingBraces += '}'; | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  if ($pPropertyKeys.length) { | 
				
			||||
    var arr5 = $pPropertyKeys; | 
				
			||||
    if (arr5) { | 
				
			||||
      var $pProperty, i5 = -1, | 
				
			||||
        l5 = arr5.length - 1; | 
				
			||||
      while (i5 < l5) { | 
				
			||||
        $pProperty = arr5[i5 += 1]; | 
				
			||||
        var $sch = $pProperties[$pProperty]; | 
				
			||||
        if (it.util.schemaHasRules($sch, it.RULES.all)) { | 
				
			||||
          $it.schema = $sch; | 
				
			||||
          $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty); | 
				
			||||
          $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty); | 
				
			||||
          if ($ownProperties) { | 
				
			||||
            out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; | 
				
			||||
          } else { | 
				
			||||
            out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; | 
				
			||||
          } | 
				
			||||
          out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { '; | 
				
			||||
          $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); | 
				
			||||
          var $passData = $data + '[' + $key + ']'; | 
				
			||||
          $it.dataPathArr[$dataNxt] = $key; | 
				
			||||
          var $code = it.validate($it); | 
				
			||||
          $it.baseId = $currentBaseId; | 
				
			||||
          if (it.util.varOccurences($code, $nextData) < 2) { | 
				
			||||
            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; | 
				
			||||
          } else { | 
				
			||||
            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; | 
				
			||||
          } | 
				
			||||
          if ($breakOnError) { | 
				
			||||
            out += ' if (!' + ($nextValid) + ') break; '; | 
				
			||||
          } | 
				
			||||
          out += ' } '; | 
				
			||||
          if ($breakOnError) { | 
				
			||||
            out += ' else ' + ($nextValid) + ' = true; '; | 
				
			||||
          } | 
				
			||||
          out += ' }  '; | 
				
			||||
          if ($breakOnError) { | 
				
			||||
            out += ' if (' + ($nextValid) + ') { '; | 
				
			||||
            $closingBraces += '}'; | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  if (it.opts.patternGroups && $pgPropertyKeys.length) { | 
				
			||||
    var arr6 = $pgPropertyKeys; | 
				
			||||
    if (arr6) { | 
				
			||||
      var $pgProperty, i6 = -1, | 
				
			||||
        l6 = arr6.length - 1; | 
				
			||||
      while (i6 < l6) { | 
				
			||||
        $pgProperty = arr6[i6 += 1]; | 
				
			||||
        var $pgSchema = $pgProperties[$pgProperty], | 
				
			||||
          $sch = $pgSchema.schema; | 
				
			||||
        if (it.util.schemaHasRules($sch, it.RULES.all)) { | 
				
			||||
          $it.schema = $sch; | 
				
			||||
          $it.schemaPath = it.schemaPath + '.patternGroups' + it.util.getProperty($pgProperty) + '.schema'; | 
				
			||||
          $it.errSchemaPath = it.errSchemaPath + '/patternGroups/' + it.util.escapeFragment($pgProperty) + '/schema'; | 
				
			||||
          out += ' var pgPropCount' + ($lvl) + ' = 0;  '; | 
				
			||||
          if ($ownProperties) { | 
				
			||||
            out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; | 
				
			||||
          } else { | 
				
			||||
            out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; | 
				
			||||
          } | 
				
			||||
          out += ' if (' + (it.usePattern($pgProperty)) + '.test(' + ($key) + ')) { pgPropCount' + ($lvl) + '++; '; | 
				
			||||
          $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); | 
				
			||||
          var $passData = $data + '[' + $key + ']'; | 
				
			||||
          $it.dataPathArr[$dataNxt] = $key; | 
				
			||||
          var $code = it.validate($it); | 
				
			||||
          $it.baseId = $currentBaseId; | 
				
			||||
          if (it.util.varOccurences($code, $nextData) < 2) { | 
				
			||||
            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; | 
				
			||||
          } else { | 
				
			||||
            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; | 
				
			||||
          } | 
				
			||||
          if ($breakOnError) { | 
				
			||||
            out += ' if (!' + ($nextValid) + ') break; '; | 
				
			||||
          } | 
				
			||||
          out += ' } '; | 
				
			||||
          if ($breakOnError) { | 
				
			||||
            out += ' else ' + ($nextValid) + ' = true; '; | 
				
			||||
          } | 
				
			||||
          out += ' }  '; | 
				
			||||
          if ($breakOnError) { | 
				
			||||
            out += ' if (' + ($nextValid) + ') { '; | 
				
			||||
            $closingBraces += '}'; | 
				
			||||
          } | 
				
			||||
          var $pgMin = $pgSchema.minimum, | 
				
			||||
            $pgMax = $pgSchema.maximum; | 
				
			||||
          if ($pgMin !== undefined || $pgMax !== undefined) { | 
				
			||||
            out += ' var ' + ($valid) + ' = true; '; | 
				
			||||
            var $currErrSchemaPath = $errSchemaPath; | 
				
			||||
            if ($pgMin !== undefined) { | 
				
			||||
              var $limit = $pgMin, | 
				
			||||
                $reason = 'minimum', | 
				
			||||
                $moreOrLess = 'less'; | 
				
			||||
              out += ' ' + ($valid) + ' = pgPropCount' + ($lvl) + ' >= ' + ($pgMin) + '; '; | 
				
			||||
              $errSchemaPath = it.errSchemaPath + '/patternGroups/minimum'; | 
				
			||||
              out += '  if (!' + ($valid) + ') {   '; | 
				
			||||
              var $$outStack = $$outStack || []; | 
				
			||||
              $$outStack.push(out); | 
				
			||||
              out = ''; /* istanbul ignore else */ | 
				
			||||
              if (it.createErrors !== false) { | 
				
			||||
                out += ' { keyword: \'' + ('patternGroups') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { reason: \'' + ($reason) + '\', limit: ' + ($limit) + ', pattern: \'' + (it.util.escapeQuotes($pgProperty)) + '\' } '; | 
				
			||||
                if (it.opts.messages !== false) { | 
				
			||||
                  out += ' , message: \'should NOT have ' + ($moreOrLess) + ' than ' + ($limit) + ' properties matching pattern "' + (it.util.escapeQuotes($pgProperty)) + '"\' '; | 
				
			||||
                } | 
				
			||||
                if (it.opts.verbose) { | 
				
			||||
                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
                } | 
				
			||||
                out += ' } '; | 
				
			||||
              } else { | 
				
			||||
                out += ' {} '; | 
				
			||||
              } | 
				
			||||
              var __err = out; | 
				
			||||
              out = $$outStack.pop(); | 
				
			||||
              if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
                if (it.async) { | 
				
			||||
                  out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
                } else { | 
				
			||||
                  out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
                } | 
				
			||||
              } else { | 
				
			||||
                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
              } | 
				
			||||
              out += ' } '; | 
				
			||||
              if ($pgMax !== undefined) { | 
				
			||||
                out += ' else '; | 
				
			||||
              } | 
				
			||||
            } | 
				
			||||
            if ($pgMax !== undefined) { | 
				
			||||
              var $limit = $pgMax, | 
				
			||||
                $reason = 'maximum', | 
				
			||||
                $moreOrLess = 'more'; | 
				
			||||
              out += ' ' + ($valid) + ' = pgPropCount' + ($lvl) + ' <= ' + ($pgMax) + '; '; | 
				
			||||
              $errSchemaPath = it.errSchemaPath + '/patternGroups/maximum'; | 
				
			||||
              out += '  if (!' + ($valid) + ') {   '; | 
				
			||||
              var $$outStack = $$outStack || []; | 
				
			||||
              $$outStack.push(out); | 
				
			||||
              out = ''; /* istanbul ignore else */ | 
				
			||||
              if (it.createErrors !== false) { | 
				
			||||
                out += ' { keyword: \'' + ('patternGroups') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { reason: \'' + ($reason) + '\', limit: ' + ($limit) + ', pattern: \'' + (it.util.escapeQuotes($pgProperty)) + '\' } '; | 
				
			||||
                if (it.opts.messages !== false) { | 
				
			||||
                  out += ' , message: \'should NOT have ' + ($moreOrLess) + ' than ' + ($limit) + ' properties matching pattern "' + (it.util.escapeQuotes($pgProperty)) + '"\' '; | 
				
			||||
                } | 
				
			||||
                if (it.opts.verbose) { | 
				
			||||
                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
                } | 
				
			||||
                out += ' } '; | 
				
			||||
              } else { | 
				
			||||
                out += ' {} '; | 
				
			||||
              } | 
				
			||||
              var __err = out; | 
				
			||||
              out = $$outStack.pop(); | 
				
			||||
              if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
                if (it.async) { | 
				
			||||
                  out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
                } else { | 
				
			||||
                  out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
                } | 
				
			||||
              } else { | 
				
			||||
                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
              } | 
				
			||||
              out += ' } '; | 
				
			||||
            } | 
				
			||||
            $errSchemaPath = $currErrSchemaPath; | 
				
			||||
            if ($breakOnError) { | 
				
			||||
              out += ' if (' + ($valid) + ') { '; | 
				
			||||
              $closingBraces += '}'; | 
				
			||||
            } | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  if ($breakOnError) { | 
				
			||||
    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; | 
				
			||||
  } | 
				
			||||
  out = it.util.cleanUpCode(out); | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,81 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_propertyNames(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $errs = 'errs__' + $lvl; | 
				
			||||
  var $it = it.util.copy(it); | 
				
			||||
  var $closingBraces = ''; | 
				
			||||
  $it.level++; | 
				
			||||
  var $nextValid = 'valid' + $it.level; | 
				
			||||
  if (it.util.schemaHasRules($schema, it.RULES.all)) { | 
				
			||||
    $it.schema = $schema; | 
				
			||||
    $it.schemaPath = $schemaPath; | 
				
			||||
    $it.errSchemaPath = $errSchemaPath; | 
				
			||||
    var $key = 'key' + $lvl, | 
				
			||||
      $idx = 'idx' + $lvl, | 
				
			||||
      $i = 'i' + $lvl, | 
				
			||||
      $invalidName = '\' + ' + $key + ' + \'', | 
				
			||||
      $dataNxt = $it.dataLevel = it.dataLevel + 1, | 
				
			||||
      $nextData = 'data' + $dataNxt, | 
				
			||||
      $dataProperties = 'dataProperties' + $lvl, | 
				
			||||
      $ownProperties = it.opts.ownProperties, | 
				
			||||
      $currentBaseId = it.baseId; | 
				
			||||
    out += ' var ' + ($errs) + ' = errors; '; | 
				
			||||
    if ($ownProperties) { | 
				
			||||
      out += ' var ' + ($dataProperties) + ' = undefined; '; | 
				
			||||
    } | 
				
			||||
    if ($ownProperties) { | 
				
			||||
      out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; | 
				
			||||
    } else { | 
				
			||||
      out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; | 
				
			||||
    } | 
				
			||||
    out += ' var startErrs' + ($lvl) + ' = errors; '; | 
				
			||||
    var $passData = $key; | 
				
			||||
    var $wasComposite = it.compositeRule; | 
				
			||||
    it.compositeRule = $it.compositeRule = true; | 
				
			||||
    var $code = it.validate($it); | 
				
			||||
    $it.baseId = $currentBaseId; | 
				
			||||
    if (it.util.varOccurences($code, $nextData) < 2) { | 
				
			||||
      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; | 
				
			||||
    } else { | 
				
			||||
      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; | 
				
			||||
    } | 
				
			||||
    it.compositeRule = $it.compositeRule = $wasComposite; | 
				
			||||
    out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + '<errors; ' + ($i) + '++) { vErrors[' + ($i) + '].propertyName = ' + ($key) + '; }   var err =   '; /* istanbul ignore else */ | 
				
			||||
    if (it.createErrors !== false) { | 
				
			||||
      out += ' { keyword: \'' + ('propertyNames') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { propertyName: \'' + ($invalidName) + '\' } '; | 
				
			||||
      if (it.opts.messages !== false) { | 
				
			||||
        out += ' , message: \'property name \\\'' + ($invalidName) + '\\\' is invalid\' '; | 
				
			||||
      } | 
				
			||||
      if (it.opts.verbose) { | 
				
			||||
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
      } | 
				
			||||
      out += ' } '; | 
				
			||||
    } else { | 
				
			||||
      out += ' {} '; | 
				
			||||
    } | 
				
			||||
    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
    if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
      if (it.async) { | 
				
			||||
        out += ' throw new ValidationError(vErrors); '; | 
				
			||||
      } else { | 
				
			||||
        out += ' validate.errors = vErrors; return false; '; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
    if ($breakOnError) { | 
				
			||||
      out += ' break; '; | 
				
			||||
    } | 
				
			||||
    out += ' } }'; | 
				
			||||
  } | 
				
			||||
  if ($breakOnError) { | 
				
			||||
    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; | 
				
			||||
  } | 
				
			||||
  out = it.util.cleanUpCode(out); | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,123 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_ref(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $valid = 'valid' + $lvl; | 
				
			||||
  var $async, $refCode; | 
				
			||||
  if ($schema == '#' || $schema == '#/') { | 
				
			||||
    if (it.isRoot) { | 
				
			||||
      $async = it.async; | 
				
			||||
      $refCode = 'validate'; | 
				
			||||
    } else { | 
				
			||||
      $async = it.root.schema.$async === true; | 
				
			||||
      $refCode = 'root.refVal[0]'; | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot); | 
				
			||||
    if ($refVal === undefined) { | 
				
			||||
      var $message = it.MissingRefError.message(it.baseId, $schema); | 
				
			||||
      if (it.opts.missingRefs == 'fail') { | 
				
			||||
        it.logger.error($message); | 
				
			||||
        var $$outStack = $$outStack || []; | 
				
			||||
        $$outStack.push(out); | 
				
			||||
        out = ''; /* istanbul ignore else */ | 
				
			||||
        if (it.createErrors !== false) { | 
				
			||||
          out += ' { keyword: \'' + ('$ref') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { ref: \'' + (it.util.escapeQuotes($schema)) + '\' } '; | 
				
			||||
          if (it.opts.messages !== false) { | 
				
			||||
            out += ' , message: \'can\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\' '; | 
				
			||||
          } | 
				
			||||
          if (it.opts.verbose) { | 
				
			||||
            out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
          } | 
				
			||||
          out += ' } '; | 
				
			||||
        } else { | 
				
			||||
          out += ' {} '; | 
				
			||||
        } | 
				
			||||
        var __err = out; | 
				
			||||
        out = $$outStack.pop(); | 
				
			||||
        if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
          if (it.async) { | 
				
			||||
            out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
          } else { | 
				
			||||
            out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
          } | 
				
			||||
        } else { | 
				
			||||
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
        } | 
				
			||||
        if ($breakOnError) { | 
				
			||||
          out += ' if (false) { '; | 
				
			||||
        } | 
				
			||||
      } else if (it.opts.missingRefs == 'ignore') { | 
				
			||||
        it.logger.warn($message); | 
				
			||||
        if ($breakOnError) { | 
				
			||||
          out += ' if (true) { '; | 
				
			||||
        } | 
				
			||||
      } else { | 
				
			||||
        throw new it.MissingRefError(it.baseId, $schema, $message); | 
				
			||||
      } | 
				
			||||
    } else if ($refVal.inline) { | 
				
			||||
      var $it = it.util.copy(it); | 
				
			||||
      $it.level++; | 
				
			||||
      var $nextValid = 'valid' + $it.level; | 
				
			||||
      $it.schema = $refVal.schema; | 
				
			||||
      $it.schemaPath = ''; | 
				
			||||
      $it.errSchemaPath = $schema; | 
				
			||||
      var $code = it.validate($it).replace(/validate\.schema/g, $refVal.code); | 
				
			||||
      out += ' ' + ($code) + ' '; | 
				
			||||
      if ($breakOnError) { | 
				
			||||
        out += ' if (' + ($nextValid) + ') { '; | 
				
			||||
      } | 
				
			||||
    } else { | 
				
			||||
      $async = $refVal.$async === true; | 
				
			||||
      $refCode = $refVal.code; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  if ($refCode) { | 
				
			||||
    var $$outStack = $$outStack || []; | 
				
			||||
    $$outStack.push(out); | 
				
			||||
    out = ''; | 
				
			||||
    if (it.opts.passContext) { | 
				
			||||
      out += ' ' + ($refCode) + '.call(this, '; | 
				
			||||
    } else { | 
				
			||||
      out += ' ' + ($refCode) + '( '; | 
				
			||||
    } | 
				
			||||
    out += ' ' + ($data) + ', (dataPath || \'\')'; | 
				
			||||
    if (it.errorPath != '""') { | 
				
			||||
      out += ' + ' + (it.errorPath); | 
				
			||||
    } | 
				
			||||
    var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', | 
				
			||||
      $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; | 
				
			||||
    out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ', rootData)  '; | 
				
			||||
    var __callValidate = out; | 
				
			||||
    out = $$outStack.pop(); | 
				
			||||
    if ($async) { | 
				
			||||
      if (!it.async) throw new Error('async schema referenced by sync schema'); | 
				
			||||
      if ($breakOnError) { | 
				
			||||
        out += ' var ' + ($valid) + '; '; | 
				
			||||
      } | 
				
			||||
      out += ' try { ' + (it.yieldAwait) + ' ' + (__callValidate) + '; '; | 
				
			||||
      if ($breakOnError) { | 
				
			||||
        out += ' ' + ($valid) + ' = true; '; | 
				
			||||
      } | 
				
			||||
      out += ' } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; '; | 
				
			||||
      if ($breakOnError) { | 
				
			||||
        out += ' ' + ($valid) + ' = false; '; | 
				
			||||
      } | 
				
			||||
      out += ' } '; | 
				
			||||
      if ($breakOnError) { | 
				
			||||
        out += ' if (' + ($valid) + ') { '; | 
				
			||||
      } | 
				
			||||
    } else { | 
				
			||||
      out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } '; | 
				
			||||
      if ($breakOnError) { | 
				
			||||
        out += ' else { '; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,268 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_required(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $valid = 'valid' + $lvl; | 
				
			||||
  var $isData = it.opts.$data && $schema && $schema.$data, | 
				
			||||
    $schemaValue; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; | 
				
			||||
    $schemaValue = 'schema' + $lvl; | 
				
			||||
  } else { | 
				
			||||
    $schemaValue = $schema; | 
				
			||||
  } | 
				
			||||
  var $vSchema = 'schema' + $lvl; | 
				
			||||
  if (!$isData) { | 
				
			||||
    if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) { | 
				
			||||
      var $required = []; | 
				
			||||
      var arr1 = $schema; | 
				
			||||
      if (arr1) { | 
				
			||||
        var $property, i1 = -1, | 
				
			||||
          l1 = arr1.length - 1; | 
				
			||||
        while (i1 < l1) { | 
				
			||||
          $property = arr1[i1 += 1]; | 
				
			||||
          var $propertySch = it.schema.properties[$property]; | 
				
			||||
          if (!($propertySch && it.util.schemaHasRules($propertySch, it.RULES.all))) { | 
				
			||||
            $required[$required.length] = $property; | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
    } else { | 
				
			||||
      var $required = $schema; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  if ($isData || $required.length) { | 
				
			||||
    var $currentErrorPath = it.errorPath, | 
				
			||||
      $loopRequired = $isData || $required.length >= it.opts.loopRequired, | 
				
			||||
      $ownProperties = it.opts.ownProperties; | 
				
			||||
    if ($breakOnError) { | 
				
			||||
      out += ' var missing' + ($lvl) + '; '; | 
				
			||||
      if ($loopRequired) { | 
				
			||||
        if (!$isData) { | 
				
			||||
          out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; | 
				
			||||
        } | 
				
			||||
        var $i = 'i' + $lvl, | 
				
			||||
          $propertyPath = 'schema' + $lvl + '[' + $i + ']', | 
				
			||||
          $missingProperty = '\' + ' + $propertyPath + ' + \''; | 
				
			||||
        if (it.opts._errorDataPathProperty) { | 
				
			||||
          it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); | 
				
			||||
        } | 
				
			||||
        out += ' var ' + ($valid) + ' = true; '; | 
				
			||||
        if ($isData) { | 
				
			||||
          out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {'; | 
				
			||||
        } | 
				
			||||
        out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined '; | 
				
			||||
        if ($ownProperties) { | 
				
			||||
          out += ' &&   Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) '; | 
				
			||||
        } | 
				
			||||
        out += '; if (!' + ($valid) + ') break; } '; | 
				
			||||
        if ($isData) { | 
				
			||||
          out += '  }  '; | 
				
			||||
        } | 
				
			||||
        out += '  if (!' + ($valid) + ') {   '; | 
				
			||||
        var $$outStack = $$outStack || []; | 
				
			||||
        $$outStack.push(out); | 
				
			||||
        out = ''; /* istanbul ignore else */ | 
				
			||||
        if (it.createErrors !== false) { | 
				
			||||
          out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; | 
				
			||||
          if (it.opts.messages !== false) { | 
				
			||||
            out += ' , message: \''; | 
				
			||||
            if (it.opts._errorDataPathProperty) { | 
				
			||||
              out += 'is a required property'; | 
				
			||||
            } else { | 
				
			||||
              out += 'should have required property \\\'' + ($missingProperty) + '\\\''; | 
				
			||||
            } | 
				
			||||
            out += '\' '; | 
				
			||||
          } | 
				
			||||
          if (it.opts.verbose) { | 
				
			||||
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
          } | 
				
			||||
          out += ' } '; | 
				
			||||
        } else { | 
				
			||||
          out += ' {} '; | 
				
			||||
        } | 
				
			||||
        var __err = out; | 
				
			||||
        out = $$outStack.pop(); | 
				
			||||
        if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
          if (it.async) { | 
				
			||||
            out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
          } else { | 
				
			||||
            out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
          } | 
				
			||||
        } else { | 
				
			||||
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
        } | 
				
			||||
        out += ' } else { '; | 
				
			||||
      } else { | 
				
			||||
        out += ' if ( '; | 
				
			||||
        var arr2 = $required; | 
				
			||||
        if (arr2) { | 
				
			||||
          var $propertyKey, $i = -1, | 
				
			||||
            l2 = arr2.length - 1; | 
				
			||||
          while ($i < l2) { | 
				
			||||
            $propertyKey = arr2[$i += 1]; | 
				
			||||
            if ($i) { | 
				
			||||
              out += ' || '; | 
				
			||||
            } | 
				
			||||
            var $prop = it.util.getProperty($propertyKey), | 
				
			||||
              $useData = $data + $prop; | 
				
			||||
            out += ' ( ( ' + ($useData) + ' === undefined '; | 
				
			||||
            if ($ownProperties) { | 
				
			||||
              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; | 
				
			||||
            } | 
				
			||||
            out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) '; | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
        out += ') {  '; | 
				
			||||
        var $propertyPath = 'missing' + $lvl, | 
				
			||||
          $missingProperty = '\' + ' + $propertyPath + ' + \''; | 
				
			||||
        if (it.opts._errorDataPathProperty) { | 
				
			||||
          it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath; | 
				
			||||
        } | 
				
			||||
        var $$outStack = $$outStack || []; | 
				
			||||
        $$outStack.push(out); | 
				
			||||
        out = ''; /* istanbul ignore else */ | 
				
			||||
        if (it.createErrors !== false) { | 
				
			||||
          out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; | 
				
			||||
          if (it.opts.messages !== false) { | 
				
			||||
            out += ' , message: \''; | 
				
			||||
            if (it.opts._errorDataPathProperty) { | 
				
			||||
              out += 'is a required property'; | 
				
			||||
            } else { | 
				
			||||
              out += 'should have required property \\\'' + ($missingProperty) + '\\\''; | 
				
			||||
            } | 
				
			||||
            out += '\' '; | 
				
			||||
          } | 
				
			||||
          if (it.opts.verbose) { | 
				
			||||
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
          } | 
				
			||||
          out += ' } '; | 
				
			||||
        } else { | 
				
			||||
          out += ' {} '; | 
				
			||||
        } | 
				
			||||
        var __err = out; | 
				
			||||
        out = $$outStack.pop(); | 
				
			||||
        if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
          if (it.async) { | 
				
			||||
            out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
          } else { | 
				
			||||
            out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
          } | 
				
			||||
        } else { | 
				
			||||
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
        } | 
				
			||||
        out += ' } else { '; | 
				
			||||
      } | 
				
			||||
    } else { | 
				
			||||
      if ($loopRequired) { | 
				
			||||
        if (!$isData) { | 
				
			||||
          out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; | 
				
			||||
        } | 
				
			||||
        var $i = 'i' + $lvl, | 
				
			||||
          $propertyPath = 'schema' + $lvl + '[' + $i + ']', | 
				
			||||
          $missingProperty = '\' + ' + $propertyPath + ' + \''; | 
				
			||||
        if (it.opts._errorDataPathProperty) { | 
				
			||||
          it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); | 
				
			||||
        } | 
				
			||||
        if ($isData) { | 
				
			||||
          out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) {  var err =   '; /* istanbul ignore else */ | 
				
			||||
          if (it.createErrors !== false) { | 
				
			||||
            out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; | 
				
			||||
            if (it.opts.messages !== false) { | 
				
			||||
              out += ' , message: \''; | 
				
			||||
              if (it.opts._errorDataPathProperty) { | 
				
			||||
                out += 'is a required property'; | 
				
			||||
              } else { | 
				
			||||
                out += 'should have required property \\\'' + ($missingProperty) + '\\\''; | 
				
			||||
              } | 
				
			||||
              out += '\' '; | 
				
			||||
            } | 
				
			||||
            if (it.opts.verbose) { | 
				
			||||
              out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
            } | 
				
			||||
            out += ' } '; | 
				
			||||
          } else { | 
				
			||||
            out += ' {} '; | 
				
			||||
          } | 
				
			||||
          out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { '; | 
				
			||||
        } | 
				
			||||
        out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined '; | 
				
			||||
        if ($ownProperties) { | 
				
			||||
          out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) '; | 
				
			||||
        } | 
				
			||||
        out += ') {  var err =   '; /* istanbul ignore else */ | 
				
			||||
        if (it.createErrors !== false) { | 
				
			||||
          out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; | 
				
			||||
          if (it.opts.messages !== false) { | 
				
			||||
            out += ' , message: \''; | 
				
			||||
            if (it.opts._errorDataPathProperty) { | 
				
			||||
              out += 'is a required property'; | 
				
			||||
            } else { | 
				
			||||
              out += 'should have required property \\\'' + ($missingProperty) + '\\\''; | 
				
			||||
            } | 
				
			||||
            out += '\' '; | 
				
			||||
          } | 
				
			||||
          if (it.opts.verbose) { | 
				
			||||
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
          } | 
				
			||||
          out += ' } '; | 
				
			||||
        } else { | 
				
			||||
          out += ' {} '; | 
				
			||||
        } | 
				
			||||
        out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } '; | 
				
			||||
        if ($isData) { | 
				
			||||
          out += '  }  '; | 
				
			||||
        } | 
				
			||||
      } else { | 
				
			||||
        var arr3 = $required; | 
				
			||||
        if (arr3) { | 
				
			||||
          var $propertyKey, i3 = -1, | 
				
			||||
            l3 = arr3.length - 1; | 
				
			||||
          while (i3 < l3) { | 
				
			||||
            $propertyKey = arr3[i3 += 1]; | 
				
			||||
            var $prop = it.util.getProperty($propertyKey), | 
				
			||||
              $missingProperty = it.util.escapeQuotes($propertyKey), | 
				
			||||
              $useData = $data + $prop; | 
				
			||||
            if (it.opts._errorDataPathProperty) { | 
				
			||||
              it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); | 
				
			||||
            } | 
				
			||||
            out += ' if ( ' + ($useData) + ' === undefined '; | 
				
			||||
            if ($ownProperties) { | 
				
			||||
              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; | 
				
			||||
            } | 
				
			||||
            out += ') {  var err =   '; /* istanbul ignore else */ | 
				
			||||
            if (it.createErrors !== false) { | 
				
			||||
              out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; | 
				
			||||
              if (it.opts.messages !== false) { | 
				
			||||
                out += ' , message: \''; | 
				
			||||
                if (it.opts._errorDataPathProperty) { | 
				
			||||
                  out += 'is a required property'; | 
				
			||||
                } else { | 
				
			||||
                  out += 'should have required property \\\'' + ($missingProperty) + '\\\''; | 
				
			||||
                } | 
				
			||||
                out += '\' '; | 
				
			||||
              } | 
				
			||||
              if (it.opts.verbose) { | 
				
			||||
                out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
              } | 
				
			||||
              out += ' } '; | 
				
			||||
            } else { | 
				
			||||
              out += ' {} '; | 
				
			||||
            } | 
				
			||||
            out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } '; | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
    it.errorPath = $currentErrorPath; | 
				
			||||
  } else if ($breakOnError) { | 
				
			||||
    out += ' if (true) {'; | 
				
			||||
  } | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,71 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_uniqueItems(it, $keyword, $ruleType) { | 
				
			||||
  var out = ' '; | 
				
			||||
  var $lvl = it.level; | 
				
			||||
  var $dataLvl = it.dataLevel; | 
				
			||||
  var $schema = it.schema[$keyword]; | 
				
			||||
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
  var $breakOnError = !it.opts.allErrors; | 
				
			||||
  var $data = 'data' + ($dataLvl || ''); | 
				
			||||
  var $valid = 'valid' + $lvl; | 
				
			||||
  var $isData = it.opts.$data && $schema && $schema.$data, | 
				
			||||
    $schemaValue; | 
				
			||||
  if ($isData) { | 
				
			||||
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; | 
				
			||||
    $schemaValue = 'schema' + $lvl; | 
				
			||||
  } else { | 
				
			||||
    $schemaValue = $schema; | 
				
			||||
  } | 
				
			||||
  if (($schema || $isData) && it.opts.uniqueItems !== false) { | 
				
			||||
    if ($isData) { | 
				
			||||
      out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'boolean\') ' + ($valid) + ' = false; else { '; | 
				
			||||
    } | 
				
			||||
    out += ' var ' + ($valid) + ' = true; if (' + ($data) + '.length > 1) { var i = ' + ($data) + '.length, j; outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } } '; | 
				
			||||
    if ($isData) { | 
				
			||||
      out += '  }  '; | 
				
			||||
    } | 
				
			||||
    out += ' if (!' + ($valid) + ') {   '; | 
				
			||||
    var $$outStack = $$outStack || []; | 
				
			||||
    $$outStack.push(out); | 
				
			||||
    out = ''; /* istanbul ignore else */ | 
				
			||||
    if (it.createErrors !== false) { | 
				
			||||
      out += ' { keyword: \'' + ('uniqueItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } '; | 
				
			||||
      if (it.opts.messages !== false) { | 
				
			||||
        out += ' , message: \'should NOT have duplicate items (items ## \' + j + \' and \' + i + \' are identical)\' '; | 
				
			||||
      } | 
				
			||||
      if (it.opts.verbose) { | 
				
			||||
        out += ' , schema:  '; | 
				
			||||
        if ($isData) { | 
				
			||||
          out += 'validate.schema' + ($schemaPath); | 
				
			||||
        } else { | 
				
			||||
          out += '' + ($schema); | 
				
			||||
        } | 
				
			||||
        out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
      } | 
				
			||||
      out += ' } '; | 
				
			||||
    } else { | 
				
			||||
      out += ' {} '; | 
				
			||||
    } | 
				
			||||
    var __err = out; | 
				
			||||
    out = $$outStack.pop(); | 
				
			||||
    if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
      if (it.async) { | 
				
			||||
        out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
      } else { | 
				
			||||
        out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
      } | 
				
			||||
    } else { | 
				
			||||
      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
    } | 
				
			||||
    out += ' } '; | 
				
			||||
    if ($breakOnError) { | 
				
			||||
      out += ' else { '; | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    if ($breakOnError) { | 
				
			||||
      out += ' if (true) { '; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,458 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
module.exports = function generate_validate(it, $keyword, $ruleType) { | 
				
			||||
  var out = ''; | 
				
			||||
  var $async = it.schema.$async === true, | 
				
			||||
    $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'), | 
				
			||||
    $id = it.self._getId(it.schema); | 
				
			||||
  if (it.isTop) { | 
				
			||||
    if ($async) { | 
				
			||||
      it.async = true; | 
				
			||||
      var $es7 = it.opts.async == 'es7'; | 
				
			||||
      it.yieldAwait = $es7 ? 'await' : 'yield'; | 
				
			||||
    } | 
				
			||||
    out += ' var validate = '; | 
				
			||||
    if ($async) { | 
				
			||||
      if ($es7) { | 
				
			||||
        out += ' (async function '; | 
				
			||||
      } else { | 
				
			||||
        if (it.opts.async != '*') { | 
				
			||||
          out += 'co.wrap'; | 
				
			||||
        } | 
				
			||||
        out += '(function* '; | 
				
			||||
      } | 
				
			||||
    } else { | 
				
			||||
      out += ' (function '; | 
				
			||||
    } | 
				
			||||
    out += ' (data, dataPath, parentData, parentDataProperty, rootData) { \'use strict\'; '; | 
				
			||||
    if ($id && (it.opts.sourceCode || it.opts.processCode)) { | 
				
			||||
      out += ' ' + ('/\*# sourceURL=' + $id + ' */') + ' '; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  if (typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref)) { | 
				
			||||
    var $keyword = 'false schema'; | 
				
			||||
    var $lvl = it.level; | 
				
			||||
    var $dataLvl = it.dataLevel; | 
				
			||||
    var $schema = it.schema[$keyword]; | 
				
			||||
    var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
				
			||||
    var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
				
			||||
    var $breakOnError = !it.opts.allErrors; | 
				
			||||
    var $errorKeyword; | 
				
			||||
    var $data = 'data' + ($dataLvl || ''); | 
				
			||||
    var $valid = 'valid' + $lvl; | 
				
			||||
    if (it.schema === false) { | 
				
			||||
      if (it.isTop) { | 
				
			||||
        $breakOnError = true; | 
				
			||||
      } else { | 
				
			||||
        out += ' var ' + ($valid) + ' = false; '; | 
				
			||||
      } | 
				
			||||
      var $$outStack = $$outStack || []; | 
				
			||||
      $$outStack.push(out); | 
				
			||||
      out = ''; /* istanbul ignore else */ | 
				
			||||
      if (it.createErrors !== false) { | 
				
			||||
        out += ' { keyword: \'' + ($errorKeyword || 'false schema') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; | 
				
			||||
        if (it.opts.messages !== false) { | 
				
			||||
          out += ' , message: \'boolean schema is false\' '; | 
				
			||||
        } | 
				
			||||
        if (it.opts.verbose) { | 
				
			||||
          out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
        } | 
				
			||||
        out += ' } '; | 
				
			||||
      } else { | 
				
			||||
        out += ' {} '; | 
				
			||||
      } | 
				
			||||
      var __err = out; | 
				
			||||
      out = $$outStack.pop(); | 
				
			||||
      if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
        if (it.async) { | 
				
			||||
          out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
        } else { | 
				
			||||
          out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
        } | 
				
			||||
      } else { | 
				
			||||
        out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
      } | 
				
			||||
    } else { | 
				
			||||
      if (it.isTop) { | 
				
			||||
        if ($async) { | 
				
			||||
          out += ' return data; '; | 
				
			||||
        } else { | 
				
			||||
          out += ' validate.errors = null; return true; '; | 
				
			||||
        } | 
				
			||||
      } else { | 
				
			||||
        out += ' var ' + ($valid) + ' = true; '; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
    if (it.isTop) { | 
				
			||||
      out += ' }); return validate; '; | 
				
			||||
    } | 
				
			||||
    return out; | 
				
			||||
  } | 
				
			||||
  if (it.isTop) { | 
				
			||||
    var $top = it.isTop, | 
				
			||||
      $lvl = it.level = 0, | 
				
			||||
      $dataLvl = it.dataLevel = 0, | 
				
			||||
      $data = 'data'; | 
				
			||||
    it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema)); | 
				
			||||
    it.baseId = it.baseId || it.rootId; | 
				
			||||
    delete it.isTop; | 
				
			||||
    it.dataPathArr = [undefined]; | 
				
			||||
    out += ' var vErrors = null; '; | 
				
			||||
    out += ' var errors = 0;     '; | 
				
			||||
    out += ' if (rootData === undefined) rootData = data; '; | 
				
			||||
  } else { | 
				
			||||
    var $lvl = it.level, | 
				
			||||
      $dataLvl = it.dataLevel, | 
				
			||||
      $data = 'data' + ($dataLvl || ''); | 
				
			||||
    if ($id) it.baseId = it.resolve.url(it.baseId, $id); | 
				
			||||
    if ($async && !it.async) throw new Error('async schema in sync schema'); | 
				
			||||
    out += ' var errs_' + ($lvl) + ' = errors;'; | 
				
			||||
  } | 
				
			||||
  var $valid = 'valid' + $lvl, | 
				
			||||
    $breakOnError = !it.opts.allErrors, | 
				
			||||
    $closingBraces1 = '', | 
				
			||||
    $closingBraces2 = ''; | 
				
			||||
  var $errorKeyword; | 
				
			||||
  var $typeSchema = it.schema.type, | 
				
			||||
    $typeIsArray = Array.isArray($typeSchema); | 
				
			||||
  if ($typeIsArray && $typeSchema.length == 1) { | 
				
			||||
    $typeSchema = $typeSchema[0]; | 
				
			||||
    $typeIsArray = false; | 
				
			||||
  } | 
				
			||||
  if (it.schema.$ref && $refKeywords) { | 
				
			||||
    if (it.opts.extendRefs == 'fail') { | 
				
			||||
      throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '" (see option extendRefs)'); | 
				
			||||
    } else if (it.opts.extendRefs !== true) { | 
				
			||||
      $refKeywords = false; | 
				
			||||
      it.logger.warn('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"'); | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  if ($typeSchema) { | 
				
			||||
    if (it.opts.coerceTypes) { | 
				
			||||
      var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema); | 
				
			||||
    } | 
				
			||||
    var $rulesGroup = it.RULES.types[$typeSchema]; | 
				
			||||
    if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) { | 
				
			||||
      var $schemaPath = it.schemaPath + '.type', | 
				
			||||
        $errSchemaPath = it.errSchemaPath + '/type'; | 
				
			||||
      var $schemaPath = it.schemaPath + '.type', | 
				
			||||
        $errSchemaPath = it.errSchemaPath + '/type', | 
				
			||||
        $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType'; | 
				
			||||
      out += ' if (' + (it.util[$method]($typeSchema, $data, true)) + ') { '; | 
				
			||||
      if ($coerceToTypes) { | 
				
			||||
        var $dataType = 'dataType' + $lvl, | 
				
			||||
          $coerced = 'coerced' + $lvl; | 
				
			||||
        out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; '; | 
				
			||||
        if (it.opts.coerceTypes == 'array') { | 
				
			||||
          out += ' if (' + ($dataType) + ' == \'object\' && Array.isArray(' + ($data) + ')) ' + ($dataType) + ' = \'array\'; '; | 
				
			||||
        } | 
				
			||||
        out += ' var ' + ($coerced) + ' = undefined; '; | 
				
			||||
        var $bracesCoercion = ''; | 
				
			||||
        var arr1 = $coerceToTypes; | 
				
			||||
        if (arr1) { | 
				
			||||
          var $type, $i = -1, | 
				
			||||
            l1 = arr1.length - 1; | 
				
			||||
          while ($i < l1) { | 
				
			||||
            $type = arr1[$i += 1]; | 
				
			||||
            if ($i) { | 
				
			||||
              out += ' if (' + ($coerced) + ' === undefined) { '; | 
				
			||||
              $bracesCoercion += '}'; | 
				
			||||
            } | 
				
			||||
            if (it.opts.coerceTypes == 'array' && $type != 'array') { | 
				
			||||
              out += ' if (' + ($dataType) + ' == \'array\' && ' + ($data) + '.length == 1) { ' + ($coerced) + ' = ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + ';  } '; | 
				
			||||
            } | 
				
			||||
            if ($type == 'string') { | 
				
			||||
              out += ' if (' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\') ' + ($coerced) + ' = \'\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \'\'; '; | 
				
			||||
            } else if ($type == 'number' || $type == 'integer') { | 
				
			||||
              out += ' if (' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \'string\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' '; | 
				
			||||
              if ($type == 'integer') { | 
				
			||||
                out += ' && !(' + ($data) + ' % 1)'; | 
				
			||||
              } | 
				
			||||
              out += ')) ' + ($coerced) + ' = +' + ($data) + '; '; | 
				
			||||
            } else if ($type == 'boolean') { | 
				
			||||
              out += ' if (' + ($data) + ' === \'false\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \'true\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; '; | 
				
			||||
            } else if ($type == 'null') { | 
				
			||||
              out += ' if (' + ($data) + ' === \'\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; '; | 
				
			||||
            } else if (it.opts.coerceTypes == 'array' && $type == 'array') { | 
				
			||||
              out += ' if (' + ($dataType) + ' == \'string\' || ' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; '; | 
				
			||||
            } | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
        out += ' ' + ($bracesCoercion) + ' if (' + ($coerced) + ' === undefined) {   '; | 
				
			||||
        var $$outStack = $$outStack || []; | 
				
			||||
        $$outStack.push(out); | 
				
			||||
        out = ''; /* istanbul ignore else */ | 
				
			||||
        if (it.createErrors !== false) { | 
				
			||||
          out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; | 
				
			||||
          if ($typeIsArray) { | 
				
			||||
            out += '' + ($typeSchema.join(",")); | 
				
			||||
          } else { | 
				
			||||
            out += '' + ($typeSchema); | 
				
			||||
          } | 
				
			||||
          out += '\' } '; | 
				
			||||
          if (it.opts.messages !== false) { | 
				
			||||
            out += ' , message: \'should be '; | 
				
			||||
            if ($typeIsArray) { | 
				
			||||
              out += '' + ($typeSchema.join(",")); | 
				
			||||
            } else { | 
				
			||||
              out += '' + ($typeSchema); | 
				
			||||
            } | 
				
			||||
            out += '\' '; | 
				
			||||
          } | 
				
			||||
          if (it.opts.verbose) { | 
				
			||||
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
          } | 
				
			||||
          out += ' } '; | 
				
			||||
        } else { | 
				
			||||
          out += ' {} '; | 
				
			||||
        } | 
				
			||||
        var __err = out; | 
				
			||||
        out = $$outStack.pop(); | 
				
			||||
        if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
          if (it.async) { | 
				
			||||
            out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
          } else { | 
				
			||||
            out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
          } | 
				
			||||
        } else { | 
				
			||||
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
        } | 
				
			||||
        out += ' } else {  '; | 
				
			||||
        var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', | 
				
			||||
          $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; | 
				
			||||
        out += ' ' + ($data) + ' = ' + ($coerced) + '; '; | 
				
			||||
        if (!$dataLvl) { | 
				
			||||
          out += 'if (' + ($parentData) + ' !== undefined)'; | 
				
			||||
        } | 
				
			||||
        out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } '; | 
				
			||||
      } else { | 
				
			||||
        var $$outStack = $$outStack || []; | 
				
			||||
        $$outStack.push(out); | 
				
			||||
        out = ''; /* istanbul ignore else */ | 
				
			||||
        if (it.createErrors !== false) { | 
				
			||||
          out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; | 
				
			||||
          if ($typeIsArray) { | 
				
			||||
            out += '' + ($typeSchema.join(",")); | 
				
			||||
          } else { | 
				
			||||
            out += '' + ($typeSchema); | 
				
			||||
          } | 
				
			||||
          out += '\' } '; | 
				
			||||
          if (it.opts.messages !== false) { | 
				
			||||
            out += ' , message: \'should be '; | 
				
			||||
            if ($typeIsArray) { | 
				
			||||
              out += '' + ($typeSchema.join(",")); | 
				
			||||
            } else { | 
				
			||||
              out += '' + ($typeSchema); | 
				
			||||
            } | 
				
			||||
            out += '\' '; | 
				
			||||
          } | 
				
			||||
          if (it.opts.verbose) { | 
				
			||||
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
          } | 
				
			||||
          out += ' } '; | 
				
			||||
        } else { | 
				
			||||
          out += ' {} '; | 
				
			||||
        } | 
				
			||||
        var __err = out; | 
				
			||||
        out = $$outStack.pop(); | 
				
			||||
        if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
          if (it.async) { | 
				
			||||
            out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
          } else { | 
				
			||||
            out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
          } | 
				
			||||
        } else { | 
				
			||||
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
      out += ' } '; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  if (it.schema.$ref && !$refKeywords) { | 
				
			||||
    out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' '; | 
				
			||||
    if ($breakOnError) { | 
				
			||||
      out += ' } if (errors === '; | 
				
			||||
      if ($top) { | 
				
			||||
        out += '0'; | 
				
			||||
      } else { | 
				
			||||
        out += 'errs_' + ($lvl); | 
				
			||||
      } | 
				
			||||
      out += ') { '; | 
				
			||||
      $closingBraces2 += '}'; | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    if (it.opts.v5 && it.schema.patternGroups) { | 
				
			||||
      it.logger.warn('keyword "patternGroups" is deprecated and disabled. Use option patternGroups: true to enable.'); | 
				
			||||
    } | 
				
			||||
    var arr2 = it.RULES; | 
				
			||||
    if (arr2) { | 
				
			||||
      var $rulesGroup, i2 = -1, | 
				
			||||
        l2 = arr2.length - 1; | 
				
			||||
      while (i2 < l2) { | 
				
			||||
        $rulesGroup = arr2[i2 += 1]; | 
				
			||||
        if ($shouldUseGroup($rulesGroup)) { | 
				
			||||
          if ($rulesGroup.type) { | 
				
			||||
            out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data)) + ') { '; | 
				
			||||
          } | 
				
			||||
          if (it.opts.useDefaults && !it.compositeRule) { | 
				
			||||
            if ($rulesGroup.type == 'object' && it.schema.properties) { | 
				
			||||
              var $schema = it.schema.properties, | 
				
			||||
                $schemaKeys = Object.keys($schema); | 
				
			||||
              var arr3 = $schemaKeys; | 
				
			||||
              if (arr3) { | 
				
			||||
                var $propertyKey, i3 = -1, | 
				
			||||
                  l3 = arr3.length - 1; | 
				
			||||
                while (i3 < l3) { | 
				
			||||
                  $propertyKey = arr3[i3 += 1]; | 
				
			||||
                  var $sch = $schema[$propertyKey]; | 
				
			||||
                  if ($sch.default !== undefined) { | 
				
			||||
                    var $passData = $data + it.util.getProperty($propertyKey); | 
				
			||||
                    out += '  if (' + ($passData) + ' === undefined) ' + ($passData) + ' = '; | 
				
			||||
                    if (it.opts.useDefaults == 'shared') { | 
				
			||||
                      out += ' ' + (it.useDefault($sch.default)) + ' '; | 
				
			||||
                    } else { | 
				
			||||
                      out += ' ' + (JSON.stringify($sch.default)) + ' '; | 
				
			||||
                    } | 
				
			||||
                    out += '; '; | 
				
			||||
                  } | 
				
			||||
                } | 
				
			||||
              } | 
				
			||||
            } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) { | 
				
			||||
              var arr4 = it.schema.items; | 
				
			||||
              if (arr4) { | 
				
			||||
                var $sch, $i = -1, | 
				
			||||
                  l4 = arr4.length - 1; | 
				
			||||
                while ($i < l4) { | 
				
			||||
                  $sch = arr4[$i += 1]; | 
				
			||||
                  if ($sch.default !== undefined) { | 
				
			||||
                    var $passData = $data + '[' + $i + ']'; | 
				
			||||
                    out += '  if (' + ($passData) + ' === undefined) ' + ($passData) + ' = '; | 
				
			||||
                    if (it.opts.useDefaults == 'shared') { | 
				
			||||
                      out += ' ' + (it.useDefault($sch.default)) + ' '; | 
				
			||||
                    } else { | 
				
			||||
                      out += ' ' + (JSON.stringify($sch.default)) + ' '; | 
				
			||||
                    } | 
				
			||||
                    out += '; '; | 
				
			||||
                  } | 
				
			||||
                } | 
				
			||||
              } | 
				
			||||
            } | 
				
			||||
          } | 
				
			||||
          var arr5 = $rulesGroup.rules; | 
				
			||||
          if (arr5) { | 
				
			||||
            var $rule, i5 = -1, | 
				
			||||
              l5 = arr5.length - 1; | 
				
			||||
            while (i5 < l5) { | 
				
			||||
              $rule = arr5[i5 += 1]; | 
				
			||||
              if ($shouldUseRule($rule)) { | 
				
			||||
                var $code = $rule.code(it, $rule.keyword, $rulesGroup.type); | 
				
			||||
                if ($code) { | 
				
			||||
                  out += ' ' + ($code) + ' '; | 
				
			||||
                  if ($breakOnError) { | 
				
			||||
                    $closingBraces1 += '}'; | 
				
			||||
                  } | 
				
			||||
                } | 
				
			||||
              } | 
				
			||||
            } | 
				
			||||
          } | 
				
			||||
          if ($breakOnError) { | 
				
			||||
            out += ' ' + ($closingBraces1) + ' '; | 
				
			||||
            $closingBraces1 = ''; | 
				
			||||
          } | 
				
			||||
          if ($rulesGroup.type) { | 
				
			||||
            out += ' } '; | 
				
			||||
            if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) { | 
				
			||||
              out += ' else { '; | 
				
			||||
              var $schemaPath = it.schemaPath + '.type', | 
				
			||||
                $errSchemaPath = it.errSchemaPath + '/type'; | 
				
			||||
              var $$outStack = $$outStack || []; | 
				
			||||
              $$outStack.push(out); | 
				
			||||
              out = ''; /* istanbul ignore else */ | 
				
			||||
              if (it.createErrors !== false) { | 
				
			||||
                out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; | 
				
			||||
                if ($typeIsArray) { | 
				
			||||
                  out += '' + ($typeSchema.join(",")); | 
				
			||||
                } else { | 
				
			||||
                  out += '' + ($typeSchema); | 
				
			||||
                } | 
				
			||||
                out += '\' } '; | 
				
			||||
                if (it.opts.messages !== false) { | 
				
			||||
                  out += ' , message: \'should be '; | 
				
			||||
                  if ($typeIsArray) { | 
				
			||||
                    out += '' + ($typeSchema.join(",")); | 
				
			||||
                  } else { | 
				
			||||
                    out += '' + ($typeSchema); | 
				
			||||
                  } | 
				
			||||
                  out += '\' '; | 
				
			||||
                } | 
				
			||||
                if (it.opts.verbose) { | 
				
			||||
                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
				
			||||
                } | 
				
			||||
                out += ' } '; | 
				
			||||
              } else { | 
				
			||||
                out += ' {} '; | 
				
			||||
              } | 
				
			||||
              var __err = out; | 
				
			||||
              out = $$outStack.pop(); | 
				
			||||
              if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ | 
				
			||||
                if (it.async) { | 
				
			||||
                  out += ' throw new ValidationError([' + (__err) + ']); '; | 
				
			||||
                } else { | 
				
			||||
                  out += ' validate.errors = [' + (__err) + ']; return false; '; | 
				
			||||
                } | 
				
			||||
              } else { | 
				
			||||
                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
				
			||||
              } | 
				
			||||
              out += ' } '; | 
				
			||||
            } | 
				
			||||
          } | 
				
			||||
          if ($breakOnError) { | 
				
			||||
            out += ' if (errors === '; | 
				
			||||
            if ($top) { | 
				
			||||
              out += '0'; | 
				
			||||
            } else { | 
				
			||||
              out += 'errs_' + ($lvl); | 
				
			||||
            } | 
				
			||||
            out += ') { '; | 
				
			||||
            $closingBraces2 += '}'; | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  if ($breakOnError) { | 
				
			||||
    out += ' ' + ($closingBraces2) + ' '; | 
				
			||||
  } | 
				
			||||
  if ($top) { | 
				
			||||
    if ($async) { | 
				
			||||
      out += ' if (errors === 0) return data;           '; | 
				
			||||
      out += ' else throw new ValidationError(vErrors); '; | 
				
			||||
    } else { | 
				
			||||
      out += ' validate.errors = vErrors; '; | 
				
			||||
      out += ' return errors === 0;       '; | 
				
			||||
    } | 
				
			||||
    out += ' }); return validate;'; | 
				
			||||
  } else { | 
				
			||||
    out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';'; | 
				
			||||
  } | 
				
			||||
  out = it.util.cleanUpCode(out); | 
				
			||||
  if ($top) { | 
				
			||||
    out = it.util.finalCleanUpCode(out, $async); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function $shouldUseGroup($rulesGroup) { | 
				
			||||
    var rules = $rulesGroup.rules; | 
				
			||||
    for (var i = 0; i < rules.length; i++) | 
				
			||||
      if ($shouldUseRule(rules[i])) return true; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function $shouldUseRule($rule) { | 
				
			||||
    return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule)); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function $ruleImplementsSomeKeyword($rule) { | 
				
			||||
    var impl = $rule.implements; | 
				
			||||
    for (var i = 0; i < impl.length; i++) | 
				
			||||
      if (it.schema[impl[i]] !== undefined) return true; | 
				
			||||
  } | 
				
			||||
  return out; | 
				
			||||
} | 
				
			||||
@ -1,135 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
var IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i; | 
				
			||||
var customRuleCode = require('./dotjs/custom'); | 
				
			||||
 | 
				
			||||
module.exports = { | 
				
			||||
  add: addKeyword, | 
				
			||||
  get: getKeyword, | 
				
			||||
  remove: removeKeyword | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Define custom keyword | 
				
			||||
 * @this  Ajv | 
				
			||||
 * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords). | 
				
			||||
 * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`. | 
				
			||||
 * @return {Ajv} this for method chaining | 
				
			||||
 */ | 
				
			||||
function addKeyword(keyword, definition) { | 
				
			||||
  /* jshint validthis: true */ | 
				
			||||
  /* eslint no-shadow: 0 */ | 
				
			||||
  var RULES = this.RULES; | 
				
			||||
 | 
				
			||||
  if (RULES.keywords[keyword]) | 
				
			||||
    throw new Error('Keyword ' + keyword + ' is already defined'); | 
				
			||||
 | 
				
			||||
  if (!IDENTIFIER.test(keyword)) | 
				
			||||
    throw new Error('Keyword ' + keyword + ' is not a valid identifier'); | 
				
			||||
 | 
				
			||||
  if (definition) { | 
				
			||||
    if (definition.macro && definition.valid !== undefined) | 
				
			||||
      throw new Error('"valid" option cannot be used with macro keywords'); | 
				
			||||
 | 
				
			||||
    var dataType = definition.type; | 
				
			||||
    if (Array.isArray(dataType)) { | 
				
			||||
      var i, len = dataType.length; | 
				
			||||
      for (i=0; i<len; i++) checkDataType(dataType[i]); | 
				
			||||
      for (i=0; i<len; i++) _addRule(keyword, dataType[i], definition); | 
				
			||||
    } else { | 
				
			||||
      if (dataType) checkDataType(dataType); | 
				
			||||
      _addRule(keyword, dataType, definition); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    var $data = definition.$data === true && this._opts.$data; | 
				
			||||
    if ($data && !definition.validate) | 
				
			||||
      throw new Error('$data support: "validate" function is not defined'); | 
				
			||||
 | 
				
			||||
    var metaSchema = definition.metaSchema; | 
				
			||||
    if (metaSchema) { | 
				
			||||
      if ($data) { | 
				
			||||
        metaSchema = { | 
				
			||||
          anyOf: [ | 
				
			||||
            metaSchema, | 
				
			||||
            { '$ref': 'https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/$data.json#' } | 
				
			||||
          ] | 
				
			||||
        }; | 
				
			||||
      } | 
				
			||||
      definition.validateSchema = this.compile(metaSchema, true); | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  RULES.keywords[keyword] = RULES.all[keyword] = true; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
  function _addRule(keyword, dataType, definition) { | 
				
			||||
    var ruleGroup; | 
				
			||||
    for (var i=0; i<RULES.length; i++) { | 
				
			||||
      var rg = RULES[i]; | 
				
			||||
      if (rg.type == dataType) { | 
				
			||||
        ruleGroup = rg; | 
				
			||||
        break; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    if (!ruleGroup) { | 
				
			||||
      ruleGroup = { type: dataType, rules: [] }; | 
				
			||||
      RULES.push(ruleGroup); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    var rule = { | 
				
			||||
      keyword: keyword, | 
				
			||||
      definition: definition, | 
				
			||||
      custom: true, | 
				
			||||
      code: customRuleCode, | 
				
			||||
      implements: definition.implements | 
				
			||||
    }; | 
				
			||||
    ruleGroup.rules.push(rule); | 
				
			||||
    RULES.custom[keyword] = rule; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
  function checkDataType(dataType) { | 
				
			||||
    if (!RULES.types[dataType]) throw new Error('Unknown type ' + dataType); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  return this; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Get keyword | 
				
			||||
 * @this  Ajv | 
				
			||||
 * @param {String} keyword pre-defined or custom keyword. | 
				
			||||
 * @return {Object|Boolean} custom keyword definition, `true` if it is a predefined keyword, `false` otherwise. | 
				
			||||
 */ | 
				
			||||
function getKeyword(keyword) { | 
				
			||||
  /* jshint validthis: true */ | 
				
			||||
  var rule = this.RULES.custom[keyword]; | 
				
			||||
  return rule ? rule.definition : this.RULES.keywords[keyword] || false; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Remove keyword | 
				
			||||
 * @this  Ajv | 
				
			||||
 * @param {String} keyword pre-defined or custom keyword. | 
				
			||||
 * @return {Ajv} this for method chaining | 
				
			||||
 */ | 
				
			||||
function removeKeyword(keyword) { | 
				
			||||
  /* jshint validthis: true */ | 
				
			||||
  var RULES = this.RULES; | 
				
			||||
  delete RULES.keywords[keyword]; | 
				
			||||
  delete RULES.all[keyword]; | 
				
			||||
  delete RULES.custom[keyword]; | 
				
			||||
  for (var i=0; i<RULES.length; i++) { | 
				
			||||
    var rules = RULES[i].rules; | 
				
			||||
    for (var j=0; j<rules.length; j++) { | 
				
			||||
      if (rules[j].keyword == keyword) { | 
				
			||||
        rules.splice(j, 1); | 
				
			||||
        break; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  return this; | 
				
			||||
} | 
				
			||||
@ -1,36 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
var META_SCHEMA_ID = 'http://json-schema.org/draft-06/schema'; | 
				
			||||
 | 
				
			||||
module.exports = function (ajv) { | 
				
			||||
  var defaultMeta = ajv._opts.defaultMeta; | 
				
			||||
  var metaSchemaRef = typeof defaultMeta == 'string' | 
				
			||||
                      ? { $ref: defaultMeta } | 
				
			||||
                      : ajv.getSchema(META_SCHEMA_ID) | 
				
			||||
                        ? { $ref: META_SCHEMA_ID } | 
				
			||||
                        : {}; | 
				
			||||
 | 
				
			||||
  ajv.addKeyword('patternGroups', { | 
				
			||||
    // implemented in properties.jst
 | 
				
			||||
    metaSchema: { | 
				
			||||
      type: 'object', | 
				
			||||
      additionalProperties: { | 
				
			||||
        type: 'object', | 
				
			||||
        required: [ 'schema' ], | 
				
			||||
        properties: { | 
				
			||||
          maximum: { | 
				
			||||
            type: 'integer', | 
				
			||||
            minimum: 0 | 
				
			||||
          }, | 
				
			||||
          minimum: { | 
				
			||||
            type: 'integer', | 
				
			||||
            minimum: 0 | 
				
			||||
          }, | 
				
			||||
          schema: metaSchemaRef | 
				
			||||
        }, | 
				
			||||
        additionalProperties: false | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  }); | 
				
			||||
  ajv.RULES.all.properties.implements.push('patternGroups'); | 
				
			||||
}; | 
				
			||||
@ -1,17 +0,0 @@
					 | 
				
			||||
{ | 
				
			||||
    "$schema": "http://json-schema.org/draft-06/schema#", | 
				
			||||
    "$id": "https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/$data.json#", | 
				
			||||
    "description": "Meta-schema for $data reference (JSON-schema extension proposal)", | 
				
			||||
    "type": "object", | 
				
			||||
    "required": [ "$data" ], | 
				
			||||
    "properties": { | 
				
			||||
        "$data": { | 
				
			||||
            "type": "string", | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "format": "relative-json-pointer" },  | 
				
			||||
                { "format": "json-pointer" } | 
				
			||||
            ] | 
				
			||||
        } | 
				
			||||
    }, | 
				
			||||
    "additionalProperties": false | 
				
			||||
} | 
				
			||||
@ -1,150 +0,0 @@
					 | 
				
			||||
{ | 
				
			||||
    "id": "http://json-schema.org/draft-04/schema#", | 
				
			||||
    "$schema": "http://json-schema.org/draft-04/schema#", | 
				
			||||
    "description": "Core schema meta-schema", | 
				
			||||
    "definitions": { | 
				
			||||
        "schemaArray": { | 
				
			||||
            "type": "array", | 
				
			||||
            "minItems": 1, | 
				
			||||
            "items": { "$ref": "#" } | 
				
			||||
        }, | 
				
			||||
        "positiveInteger": { | 
				
			||||
            "type": "integer", | 
				
			||||
            "minimum": 0 | 
				
			||||
        }, | 
				
			||||
        "positiveIntegerDefault0": { | 
				
			||||
            "allOf": [ { "$ref": "#/definitions/positiveInteger" }, { "default": 0 } ] | 
				
			||||
        }, | 
				
			||||
        "simpleTypes": { | 
				
			||||
            "enum": [ "array", "boolean", "integer", "null", "number", "object", "string" ] | 
				
			||||
        }, | 
				
			||||
        "stringArray": { | 
				
			||||
            "type": "array", | 
				
			||||
            "items": { "type": "string" }, | 
				
			||||
            "minItems": 1, | 
				
			||||
            "uniqueItems": true | 
				
			||||
        } | 
				
			||||
    }, | 
				
			||||
    "type": "object", | 
				
			||||
    "properties": { | 
				
			||||
        "id": { | 
				
			||||
            "type": "string", | 
				
			||||
            "format": "uri" | 
				
			||||
        }, | 
				
			||||
        "$schema": { | 
				
			||||
            "type": "string", | 
				
			||||
            "format": "uri" | 
				
			||||
        }, | 
				
			||||
        "title": { | 
				
			||||
            "type": "string" | 
				
			||||
        }, | 
				
			||||
        "description": { | 
				
			||||
            "type": "string" | 
				
			||||
        }, | 
				
			||||
        "default": {}, | 
				
			||||
        "multipleOf": { | 
				
			||||
            "type": "number", | 
				
			||||
            "minimum": 0, | 
				
			||||
            "exclusiveMinimum": true | 
				
			||||
        }, | 
				
			||||
        "maximum": { | 
				
			||||
            "type": "number" | 
				
			||||
        }, | 
				
			||||
        "exclusiveMaximum": { | 
				
			||||
            "type": "boolean", | 
				
			||||
            "default": false | 
				
			||||
        }, | 
				
			||||
        "minimum": { | 
				
			||||
            "type": "number" | 
				
			||||
        }, | 
				
			||||
        "exclusiveMinimum": { | 
				
			||||
            "type": "boolean", | 
				
			||||
            "default": false | 
				
			||||
        }, | 
				
			||||
        "maxLength": { "$ref": "#/definitions/positiveInteger" }, | 
				
			||||
        "minLength": { "$ref": "#/definitions/positiveIntegerDefault0" }, | 
				
			||||
        "pattern": { | 
				
			||||
            "type": "string", | 
				
			||||
            "format": "regex" | 
				
			||||
        }, | 
				
			||||
        "additionalItems": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "type": "boolean" }, | 
				
			||||
                { "$ref": "#" } | 
				
			||||
            ], | 
				
			||||
            "default": {} | 
				
			||||
        }, | 
				
			||||
        "items": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "$ref": "#" }, | 
				
			||||
                { "$ref": "#/definitions/schemaArray" } | 
				
			||||
            ], | 
				
			||||
            "default": {} | 
				
			||||
        }, | 
				
			||||
        "maxItems": { "$ref": "#/definitions/positiveInteger" }, | 
				
			||||
        "minItems": { "$ref": "#/definitions/positiveIntegerDefault0" }, | 
				
			||||
        "uniqueItems": { | 
				
			||||
            "type": "boolean", | 
				
			||||
            "default": false | 
				
			||||
        }, | 
				
			||||
        "maxProperties": { "$ref": "#/definitions/positiveInteger" }, | 
				
			||||
        "minProperties": { "$ref": "#/definitions/positiveIntegerDefault0" }, | 
				
			||||
        "required": { "$ref": "#/definitions/stringArray" }, | 
				
			||||
        "additionalProperties": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "type": "boolean" }, | 
				
			||||
                { "$ref": "#" } | 
				
			||||
            ], | 
				
			||||
            "default": {} | 
				
			||||
        }, | 
				
			||||
        "definitions": { | 
				
			||||
            "type": "object", | 
				
			||||
            "additionalProperties": { "$ref": "#" }, | 
				
			||||
            "default": {} | 
				
			||||
        }, | 
				
			||||
        "properties": { | 
				
			||||
            "type": "object", | 
				
			||||
            "additionalProperties": { "$ref": "#" }, | 
				
			||||
            "default": {} | 
				
			||||
        }, | 
				
			||||
        "patternProperties": { | 
				
			||||
            "type": "object", | 
				
			||||
            "additionalProperties": { "$ref": "#" }, | 
				
			||||
            "default": {} | 
				
			||||
        }, | 
				
			||||
        "dependencies": { | 
				
			||||
            "type": "object", | 
				
			||||
            "additionalProperties": { | 
				
			||||
                "anyOf": [ | 
				
			||||
                    { "$ref": "#" }, | 
				
			||||
                    { "$ref": "#/definitions/stringArray" } | 
				
			||||
                ] | 
				
			||||
            } | 
				
			||||
        }, | 
				
			||||
        "enum": { | 
				
			||||
            "type": "array", | 
				
			||||
            "minItems": 1, | 
				
			||||
            "uniqueItems": true | 
				
			||||
        }, | 
				
			||||
        "type": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "$ref": "#/definitions/simpleTypes" }, | 
				
			||||
                { | 
				
			||||
                    "type": "array", | 
				
			||||
                    "items": { "$ref": "#/definitions/simpleTypes" }, | 
				
			||||
                    "minItems": 1, | 
				
			||||
                    "uniqueItems": true | 
				
			||||
                } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "allOf": { "$ref": "#/definitions/schemaArray" }, | 
				
			||||
        "anyOf": { "$ref": "#/definitions/schemaArray" }, | 
				
			||||
        "oneOf": { "$ref": "#/definitions/schemaArray" }, | 
				
			||||
        "not": { "$ref": "#" } | 
				
			||||
    }, | 
				
			||||
    "dependencies": { | 
				
			||||
        "exclusiveMaximum": [ "maximum" ], | 
				
			||||
        "exclusiveMinimum": [ "minimum" ] | 
				
			||||
    }, | 
				
			||||
    "default": {} | 
				
			||||
} | 
				
			||||
@ -1,154 +0,0 @@
					 | 
				
			||||
{ | 
				
			||||
    "$schema": "http://json-schema.org/draft-06/schema#", | 
				
			||||
    "$id": "http://json-schema.org/draft-06/schema#", | 
				
			||||
    "title": "Core schema meta-schema", | 
				
			||||
    "definitions": { | 
				
			||||
        "schemaArray": { | 
				
			||||
            "type": "array", | 
				
			||||
            "minItems": 1, | 
				
			||||
            "items": { "$ref": "#" } | 
				
			||||
        }, | 
				
			||||
        "nonNegativeInteger": { | 
				
			||||
            "type": "integer", | 
				
			||||
            "minimum": 0 | 
				
			||||
        }, | 
				
			||||
        "nonNegativeIntegerDefault0": { | 
				
			||||
            "allOf": [ | 
				
			||||
                { "$ref": "#/definitions/nonNegativeInteger" }, | 
				
			||||
                { "default": 0 } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "simpleTypes": { | 
				
			||||
            "enum": [ | 
				
			||||
                "array", | 
				
			||||
                "boolean", | 
				
			||||
                "integer", | 
				
			||||
                "null", | 
				
			||||
                "number", | 
				
			||||
                "object", | 
				
			||||
                "string" | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "stringArray": { | 
				
			||||
            "type": "array", | 
				
			||||
            "items": { "type": "string" }, | 
				
			||||
            "uniqueItems": true, | 
				
			||||
            "default": [] | 
				
			||||
        } | 
				
			||||
    }, | 
				
			||||
    "type": ["object", "boolean"], | 
				
			||||
    "properties": { | 
				
			||||
        "$id": { | 
				
			||||
            "type": "string", | 
				
			||||
            "format": "uri-reference" | 
				
			||||
        }, | 
				
			||||
        "$schema": { | 
				
			||||
            "type": "string", | 
				
			||||
            "format": "uri" | 
				
			||||
        }, | 
				
			||||
        "$ref": { | 
				
			||||
            "type": "string", | 
				
			||||
            "format": "uri-reference" | 
				
			||||
        }, | 
				
			||||
        "title": { | 
				
			||||
            "type": "string" | 
				
			||||
        }, | 
				
			||||
        "description": { | 
				
			||||
            "type": "string" | 
				
			||||
        }, | 
				
			||||
        "default": {}, | 
				
			||||
        "examples": { | 
				
			||||
            "type": "array", | 
				
			||||
            "items": {} | 
				
			||||
        }, | 
				
			||||
        "multipleOf": { | 
				
			||||
            "type": "number", | 
				
			||||
            "exclusiveMinimum": 0 | 
				
			||||
        }, | 
				
			||||
        "maximum": { | 
				
			||||
            "type": "number" | 
				
			||||
        }, | 
				
			||||
        "exclusiveMaximum": { | 
				
			||||
            "type": "number" | 
				
			||||
        }, | 
				
			||||
        "minimum": { | 
				
			||||
            "type": "number" | 
				
			||||
        }, | 
				
			||||
        "exclusiveMinimum": { | 
				
			||||
            "type": "number" | 
				
			||||
        }, | 
				
			||||
        "maxLength": { "$ref": "#/definitions/nonNegativeInteger" }, | 
				
			||||
        "minLength": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, | 
				
			||||
        "pattern": { | 
				
			||||
            "type": "string", | 
				
			||||
            "format": "regex" | 
				
			||||
        }, | 
				
			||||
        "additionalItems": { "$ref": "#" }, | 
				
			||||
        "items": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "$ref": "#" }, | 
				
			||||
                { "$ref": "#/definitions/schemaArray" } | 
				
			||||
            ], | 
				
			||||
            "default": {} | 
				
			||||
        }, | 
				
			||||
        "maxItems": { "$ref": "#/definitions/nonNegativeInteger" }, | 
				
			||||
        "minItems": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, | 
				
			||||
        "uniqueItems": { | 
				
			||||
            "type": "boolean", | 
				
			||||
            "default": false | 
				
			||||
        }, | 
				
			||||
        "contains": { "$ref": "#" }, | 
				
			||||
        "maxProperties": { "$ref": "#/definitions/nonNegativeInteger" }, | 
				
			||||
        "minProperties": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, | 
				
			||||
        "required": { "$ref": "#/definitions/stringArray" }, | 
				
			||||
        "additionalProperties": { "$ref": "#" }, | 
				
			||||
        "definitions": { | 
				
			||||
            "type": "object", | 
				
			||||
            "additionalProperties": { "$ref": "#" }, | 
				
			||||
            "default": {} | 
				
			||||
        }, | 
				
			||||
        "properties": { | 
				
			||||
            "type": "object", | 
				
			||||
            "additionalProperties": { "$ref": "#" }, | 
				
			||||
            "default": {} | 
				
			||||
        }, | 
				
			||||
        "patternProperties": { | 
				
			||||
            "type": "object", | 
				
			||||
            "additionalProperties": { "$ref": "#" }, | 
				
			||||
            "default": {} | 
				
			||||
        }, | 
				
			||||
        "dependencies": { | 
				
			||||
            "type": "object", | 
				
			||||
            "additionalProperties": { | 
				
			||||
                "anyOf": [ | 
				
			||||
                    { "$ref": "#" }, | 
				
			||||
                    { "$ref": "#/definitions/stringArray" } | 
				
			||||
                ] | 
				
			||||
            } | 
				
			||||
        }, | 
				
			||||
        "propertyNames": { "$ref": "#" }, | 
				
			||||
        "const": {}, | 
				
			||||
        "enum": { | 
				
			||||
            "type": "array", | 
				
			||||
            "minItems": 1, | 
				
			||||
            "uniqueItems": true | 
				
			||||
        }, | 
				
			||||
        "type": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "$ref": "#/definitions/simpleTypes" }, | 
				
			||||
                { | 
				
			||||
                    "type": "array", | 
				
			||||
                    "items": { "$ref": "#/definitions/simpleTypes" }, | 
				
			||||
                    "minItems": 1, | 
				
			||||
                    "uniqueItems": true | 
				
			||||
                } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "format": { "type": "string" }, | 
				
			||||
        "allOf": { "$ref": "#/definitions/schemaArray" }, | 
				
			||||
        "anyOf": { "$ref": "#/definitions/schemaArray" }, | 
				
			||||
        "oneOf": { "$ref": "#/definitions/schemaArray" }, | 
				
			||||
        "not": { "$ref": "#" } | 
				
			||||
    }, | 
				
			||||
    "default": {} | 
				
			||||
} | 
				
			||||
@ -1,250 +0,0 @@
					 | 
				
			||||
{ | 
				
			||||
    "id": "https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json#", | 
				
			||||
    "$schema": "http://json-schema.org/draft-04/schema#", | 
				
			||||
    "description": "Core schema meta-schema (v5 proposals - deprecated)", | 
				
			||||
    "definitions": { | 
				
			||||
        "schemaArray": { | 
				
			||||
            "type": "array", | 
				
			||||
            "minItems": 1, | 
				
			||||
            "items": { "$ref": "#" } | 
				
			||||
        }, | 
				
			||||
        "positiveInteger": { | 
				
			||||
            "type": "integer", | 
				
			||||
            "minimum": 0 | 
				
			||||
        }, | 
				
			||||
        "positiveIntegerDefault0": { | 
				
			||||
            "allOf": [ { "$ref": "#/definitions/positiveInteger" }, { "default": 0 } ] | 
				
			||||
        }, | 
				
			||||
        "simpleTypes": { | 
				
			||||
            "enum": [ "array", "boolean", "integer", "null", "number", "object", "string" ] | 
				
			||||
        }, | 
				
			||||
        "stringArray": { | 
				
			||||
            "type": "array", | 
				
			||||
            "items": { "type": "string" }, | 
				
			||||
            "minItems": 1, | 
				
			||||
            "uniqueItems": true | 
				
			||||
        }, | 
				
			||||
        "$data": { | 
				
			||||
            "type": "object", | 
				
			||||
            "required": [ "$data" ], | 
				
			||||
            "properties": { | 
				
			||||
                "$data": { | 
				
			||||
                    "type": "string", | 
				
			||||
                    "anyOf": [ | 
				
			||||
                        { "format": "relative-json-pointer" },  | 
				
			||||
                        { "format": "json-pointer" } | 
				
			||||
                    ] | 
				
			||||
                } | 
				
			||||
            }, | 
				
			||||
            "additionalProperties": false | 
				
			||||
        } | 
				
			||||
    }, | 
				
			||||
    "type": "object", | 
				
			||||
    "properties": { | 
				
			||||
        "id": { | 
				
			||||
            "type": "string", | 
				
			||||
            "format": "uri" | 
				
			||||
        }, | 
				
			||||
        "$schema": { | 
				
			||||
            "type": "string", | 
				
			||||
            "format": "uri" | 
				
			||||
        }, | 
				
			||||
        "title": { | 
				
			||||
            "type": "string" | 
				
			||||
        }, | 
				
			||||
        "description": { | 
				
			||||
            "type": "string" | 
				
			||||
        }, | 
				
			||||
        "default": {}, | 
				
			||||
        "multipleOf": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { | 
				
			||||
                    "type": "number", | 
				
			||||
                    "minimum": 0, | 
				
			||||
                    "exclusiveMinimum": true | 
				
			||||
                }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "maximum": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "type": "number" }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "exclusiveMaximum": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { | 
				
			||||
                    "type": "boolean", | 
				
			||||
                    "default": false | 
				
			||||
                }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "minimum": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "type": "number" }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "exclusiveMinimum": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { | 
				
			||||
                    "type": "boolean", | 
				
			||||
                    "default": false | 
				
			||||
                }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "maxLength": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "$ref": "#/definitions/positiveInteger" }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "minLength": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "$ref": "#/definitions/positiveIntegerDefault0" }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "pattern": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { | 
				
			||||
                    "type": "string", | 
				
			||||
                    "format": "regex" | 
				
			||||
                }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "additionalItems": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "type": "boolean" }, | 
				
			||||
                { "$ref": "#" }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ], | 
				
			||||
            "default": {} | 
				
			||||
        }, | 
				
			||||
        "items": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "$ref": "#" }, | 
				
			||||
                { "$ref": "#/definitions/schemaArray" } | 
				
			||||
            ], | 
				
			||||
            "default": {} | 
				
			||||
        }, | 
				
			||||
        "maxItems": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "$ref": "#/definitions/positiveInteger" }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "minItems": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "$ref": "#/definitions/positiveIntegerDefault0" }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "uniqueItems": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { | 
				
			||||
                    "type": "boolean", | 
				
			||||
                    "default": false | 
				
			||||
                }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "maxProperties": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "$ref": "#/definitions/positiveInteger" }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "minProperties": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "$ref": "#/definitions/positiveIntegerDefault0" }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "required": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "$ref": "#/definitions/stringArray" }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "additionalProperties": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "type": "boolean" }, | 
				
			||||
                { "$ref": "#" }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ], | 
				
			||||
            "default": {} | 
				
			||||
        }, | 
				
			||||
        "definitions": { | 
				
			||||
            "type": "object", | 
				
			||||
            "additionalProperties": { "$ref": "#" }, | 
				
			||||
            "default": {} | 
				
			||||
        }, | 
				
			||||
        "properties": { | 
				
			||||
            "type": "object", | 
				
			||||
            "additionalProperties": { "$ref": "#" }, | 
				
			||||
            "default": {} | 
				
			||||
        }, | 
				
			||||
        "patternProperties": { | 
				
			||||
            "type": "object", | 
				
			||||
            "additionalProperties": { "$ref": "#" }, | 
				
			||||
            "default": {} | 
				
			||||
        }, | 
				
			||||
        "dependencies": { | 
				
			||||
            "type": "object", | 
				
			||||
            "additionalProperties": { | 
				
			||||
                "anyOf": [ | 
				
			||||
                    { "$ref": "#" }, | 
				
			||||
                    { "$ref": "#/definitions/stringArray" } | 
				
			||||
                ] | 
				
			||||
            } | 
				
			||||
        }, | 
				
			||||
        "enum": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { | 
				
			||||
                    "type": "array", | 
				
			||||
                    "minItems": 1, | 
				
			||||
                    "uniqueItems": true | 
				
			||||
                }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "type": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "$ref": "#/definitions/simpleTypes" }, | 
				
			||||
                { | 
				
			||||
                    "type": "array", | 
				
			||||
                    "items": { "$ref": "#/definitions/simpleTypes" }, | 
				
			||||
                    "minItems": 1, | 
				
			||||
                    "uniqueItems": true | 
				
			||||
                } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "allOf": { "$ref": "#/definitions/schemaArray" }, | 
				
			||||
        "anyOf": { "$ref": "#/definitions/schemaArray" }, | 
				
			||||
        "oneOf": { "$ref": "#/definitions/schemaArray" }, | 
				
			||||
        "not": { "$ref": "#" }, | 
				
			||||
        "format": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                { "type": "string" }, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "constant": { | 
				
			||||
            "anyOf": [ | 
				
			||||
                {}, | 
				
			||||
                { "$ref": "#/definitions/$data" } | 
				
			||||
            ] | 
				
			||||
        }, | 
				
			||||
        "contains": { "$ref": "#" } | 
				
			||||
    }, | 
				
			||||
    "dependencies": { | 
				
			||||
        "exclusiveMaximum": [ "maximum" ], | 
				
			||||
        "exclusiveMinimum": [ "minimum" ] | 
				
			||||
    }, | 
				
			||||
    "default": {} | 
				
			||||
} | 
				
			||||
@ -1,103 +0,0 @@
					 | 
				
			||||
{ | 
				
			||||
  "name": "ajv", | 
				
			||||
  "version": "5.5.2", | 
				
			||||
  "description": "Another JSON Schema Validator", | 
				
			||||
  "main": "lib/ajv.js", | 
				
			||||
  "typings": "lib/ajv.d.ts", | 
				
			||||
  "files": [ | 
				
			||||
    "lib/", | 
				
			||||
    "dist/", | 
				
			||||
    "scripts/", | 
				
			||||
    "LICENSE", | 
				
			||||
    ".tonic_example.js" | 
				
			||||
  ], | 
				
			||||
  "scripts": { | 
				
			||||
    "eslint": "if-node-version \">=4\" eslint lib/*.js lib/compile/*.js spec/*.js scripts", | 
				
			||||
    "jshint": "jshint lib/*.js lib/**/*.js --exclude lib/dotjs/**/*", | 
				
			||||
    "test-spec": "mocha spec/*.spec.js -R spec $(if-node-version 7 echo --harmony-async-await)", | 
				
			||||
    "test-fast": "AJV_FAST_TEST=true npm run test-spec", | 
				
			||||
    "test-debug": "mocha spec/*.spec.js --debug-brk -R spec", | 
				
			||||
    "test-cov": "nyc npm run test-spec", | 
				
			||||
    "test-ts": "tsc --target ES5 --noImplicitAny lib/ajv.d.ts", | 
				
			||||
    "bundle": "node ./scripts/bundle.js . Ajv pure_getters", | 
				
			||||
    "bundle-regenerator": "node ./scripts/bundle.js regenerator", | 
				
			||||
    "bundle-nodent": "node ./scripts/bundle.js nodent", | 
				
			||||
    "bundle-all": "del-cli dist && npm run bundle && npm run bundle-regenerator && npm run bundle-nodent", | 
				
			||||
    "bundle-beautify": "node ./scripts/bundle.js js-beautify", | 
				
			||||
    "build": "del-cli lib/dotjs/*.js && node scripts/compile-dots.js", | 
				
			||||
    "test-karma": "karma start --single-run --browsers PhantomJS", | 
				
			||||
    "test-browser": "del-cli .browser && npm run bundle-all && scripts/prepare-tests && npm run test-karma", | 
				
			||||
    "test": "npm run jshint && npm run eslint && npm run test-ts && npm run build && npm run test-cov && if-node-version 4 npm run test-browser", | 
				
			||||
    "prepublish": "npm run build && npm run bundle-all", | 
				
			||||
    "watch": "watch 'npm run build' ./lib/dot" | 
				
			||||
  }, | 
				
			||||
  "nyc": { | 
				
			||||
    "exclude": [ | 
				
			||||
      "**/spec/**", | 
				
			||||
      "node_modules" | 
				
			||||
    ], | 
				
			||||
    "reporter": [ | 
				
			||||
      "lcov", | 
				
			||||
      "text-summary" | 
				
			||||
    ] | 
				
			||||
  }, | 
				
			||||
  "repository": { | 
				
			||||
    "type": "git", | 
				
			||||
    "url": "https://github.com/epoberezkin/ajv.git" | 
				
			||||
  }, | 
				
			||||
  "keywords": [ | 
				
			||||
    "JSON", | 
				
			||||
    "schema", | 
				
			||||
    "validator", | 
				
			||||
    "validation", | 
				
			||||
    "jsonschema", | 
				
			||||
    "json-schema", | 
				
			||||
    "json-schema-validator", | 
				
			||||
    "json-schema-validation" | 
				
			||||
  ], | 
				
			||||
  "author": "Evgeny Poberezkin", | 
				
			||||
  "license": "MIT", | 
				
			||||
  "bugs": { | 
				
			||||
    "url": "https://github.com/epoberezkin/ajv/issues" | 
				
			||||
  }, | 
				
			||||
  "homepage": "https://github.com/epoberezkin/ajv", | 
				
			||||
  "tonicExampleFilename": ".tonic_example.js", | 
				
			||||
  "dependencies": { | 
				
			||||
    "co": "^4.6.0", | 
				
			||||
    "fast-deep-equal": "^1.0.0", | 
				
			||||
    "fast-json-stable-stringify": "^2.0.0", | 
				
			||||
    "json-schema-traverse": "^0.3.0" | 
				
			||||
  }, | 
				
			||||
  "devDependencies": { | 
				
			||||
    "ajv-async": "^0.1.0", | 
				
			||||
    "bluebird": "^3.1.5", | 
				
			||||
    "brfs": "^1.4.3", | 
				
			||||
    "browserify": "^14.1.0", | 
				
			||||
    "chai": "^4.0.1", | 
				
			||||
    "coveralls": "^3.0.0", | 
				
			||||
    "del-cli": "^1.1.0", | 
				
			||||
    "dot": "^1.0.3", | 
				
			||||
    "eslint": "^4.1.0", | 
				
			||||
    "gh-pages-generator": "^0.2.0", | 
				
			||||
    "glob": "^7.0.0", | 
				
			||||
    "if-node-version": "^1.0.0", | 
				
			||||
    "js-beautify": "^1.7.3", | 
				
			||||
    "jshint": "^2.9.4", | 
				
			||||
    "json-schema-test": "^2.0.0", | 
				
			||||
    "karma": "^1.0.0", | 
				
			||||
    "karma-chrome-launcher": "^2.0.0", | 
				
			||||
    "karma-mocha": "^1.1.1", | 
				
			||||
    "karma-phantomjs-launcher": "^1.0.0", | 
				
			||||
    "karma-sauce-launcher": "^1.1.0", | 
				
			||||
    "mocha": "^4.0.0", | 
				
			||||
    "nodent": "^3.0.17", | 
				
			||||
    "nyc": "^11.0.2", | 
				
			||||
    "phantomjs-prebuilt": "^2.1.4", | 
				
			||||
    "pre-commit": "^1.1.1", | 
				
			||||
    "regenerator": "^0.12.2", | 
				
			||||
    "require-globify": "^1.3.0", | 
				
			||||
    "typescript": "^2.6.2", | 
				
			||||
    "uglify-js": "^3.1.5", | 
				
			||||
    "watch": "^1.0.0" | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -1,3 +0,0 @@
					 | 
				
			||||
rules: | 
				
			||||
  no-console: 0 | 
				
			||||
  no-empty: [2, allowEmptyCatch: true] | 
				
			||||
@ -1,61 +0,0 @@
					 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
var fs = require('fs') | 
				
			||||
  , path = require('path') | 
				
			||||
  , browserify = require('browserify') | 
				
			||||
  , uglify = require('uglify-js'); | 
				
			||||
 | 
				
			||||
var pkg = process.argv[2] | 
				
			||||
  , standalone = process.argv[3] | 
				
			||||
  , compress = process.argv[4]; | 
				
			||||
 | 
				
			||||
var packageDir = path.join(__dirname, '..'); | 
				
			||||
if (pkg != '.') packageDir = path.join(packageDir, 'node_modules', pkg); | 
				
			||||
 | 
				
			||||
var json = require(path.join(packageDir, 'package.json')); | 
				
			||||
 | 
				
			||||
var distDir = path.join(__dirname, '..', 'dist'); | 
				
			||||
if (!fs.existsSync(distDir)) fs.mkdirSync(distDir); | 
				
			||||
 | 
				
			||||
var bOpts = {}; | 
				
			||||
if (standalone) bOpts.standalone = standalone; | 
				
			||||
 | 
				
			||||
browserify(bOpts) | 
				
			||||
.require(path.join(packageDir, json.main), {expose: json.name}) | 
				
			||||
.bundle(function (err, buf) { | 
				
			||||
  if (err) { | 
				
			||||
    console.error('browserify error:', err); | 
				
			||||
    process.exit(1); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  var outputFile = path.join(distDir, json.name); | 
				
			||||
  var uglifyOpts = { | 
				
			||||
    warnings: true, | 
				
			||||
    compress: {}, | 
				
			||||
    output: { | 
				
			||||
      preamble: '/* ' + json.name + ' ' + json.version + ': ' + json.description + ' */' | 
				
			||||
    } | 
				
			||||
  }; | 
				
			||||
  if (compress) { | 
				
			||||
    var compressOpts = compress.split(','); | 
				
			||||
    for (var i=0, il = compressOpts.length; i<il; ++i) { | 
				
			||||
      var pair = compressOpts[i].split('='); | 
				
			||||
      uglifyOpts.compress[pair[0]] = pair.length < 1 || pair[1] != 'false'; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  if (standalone) { | 
				
			||||
    uglifyOpts.sourceMap = { | 
				
			||||
      filename: json.name + '.min.js', | 
				
			||||
      url: json.name + '.min.js.map' | 
				
			||||
    }; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  var result = uglify.minify(buf.toString(), uglifyOpts); | 
				
			||||
  fs.writeFileSync(outputFile + '.min.js', result.code); | 
				
			||||
  if (result.map) fs.writeFileSync(outputFile + '.min.js.map', result.map); | 
				
			||||
  if (standalone) fs.writeFileSync(outputFile + '.bundle.js', buf); | 
				
			||||
  if (result.warnings) { | 
				
			||||
    for (var j=0, jl = result.warnings.length; j<jl; ++j) | 
				
			||||
      console.warn('UglifyJS warning:', result.warnings[j]); | 
				
			||||
  } | 
				
			||||
}); | 
				
			||||
@ -1,73 +0,0 @@
					 | 
				
			||||
//compile doT templates to js functions
 | 
				
			||||
'use strict'; | 
				
			||||
 | 
				
			||||
var glob = require('glob') | 
				
			||||
  , fs = require('fs') | 
				
			||||
  , path = require('path') | 
				
			||||
  , doT = require('dot') | 
				
			||||
  , beautify = require('js-beautify').js_beautify; | 
				
			||||
 | 
				
			||||
var defsRootPath = process.argv[2] || path.join(__dirname, '../lib'); | 
				
			||||
 | 
				
			||||
var defs = {}; | 
				
			||||
var defFiles = glob.sync('./dot/**/*.def', { cwd: defsRootPath }); | 
				
			||||
defFiles.forEach(function (f) { | 
				
			||||
  var name = path.basename(f, '.def'); | 
				
			||||
  defs[name] = fs.readFileSync(path.join(defsRootPath, f)); | 
				
			||||
}); | 
				
			||||
 | 
				
			||||
var filesRootPath = process.argv[3] || path.join(__dirname, '../lib'); | 
				
			||||
var files = glob.sync('./dot/**/*.jst', { cwd: filesRootPath }); | 
				
			||||
 | 
				
			||||
var dotjsPath = path.join(filesRootPath, './dotjs'); | 
				
			||||
try { fs.mkdirSync(dotjsPath); } catch(e) {} | 
				
			||||
 | 
				
			||||
console.log('\n\nCompiling:'); | 
				
			||||
 | 
				
			||||
var FUNCTION_NAME = /function\s+anonymous\s*\(it[^)]*\)\s*{/; | 
				
			||||
var OUT_EMPTY_STRING = /out\s*\+=\s*'\s*';/g; | 
				
			||||
var ISTANBUL = /'(istanbul[^']+)';/g; | 
				
			||||
var ERROR_KEYWORD = /\$errorKeyword/g; | 
				
			||||
var ERROR_KEYWORD_OR = /\$errorKeyword\s+\|\|/g; | 
				
			||||
var VARS = [ | 
				
			||||
  '$errs', '$valid', '$lvl', '$data', '$dataLvl', | 
				
			||||
  '$errorKeyword', '$closingBraces', '$schemaPath', | 
				
			||||
  '$validate' | 
				
			||||
]; | 
				
			||||
 | 
				
			||||
files.forEach(function (f) { | 
				
			||||
  var keyword = path.basename(f, '.jst'); | 
				
			||||
  var targetPath = path.join(dotjsPath, keyword + '.js'); | 
				
			||||
  var template = fs.readFileSync(path.join(filesRootPath, f)); | 
				
			||||
  var code = doT.compile(template, defs); | 
				
			||||
  code = code.toString() | 
				
			||||
             .replace(OUT_EMPTY_STRING, '') | 
				
			||||
             .replace(FUNCTION_NAME, 'function generate_' + keyword + '(it, $keyword, $ruleType) {') | 
				
			||||
             .replace(ISTANBUL, '/* $1 */'); | 
				
			||||
  removeAlwaysFalsyInOr(); | 
				
			||||
  VARS.forEach(removeUnusedVar); | 
				
			||||
  code = "'use strict';\nmodule.exports = " + code; | 
				
			||||
  code = beautify(code, { indent_size: 2 }) + '\n'; | 
				
			||||
  fs.writeFileSync(targetPath, code); | 
				
			||||
  console.log('compiled', keyword); | 
				
			||||
 | 
				
			||||
  function removeUnusedVar(v) { | 
				
			||||
    v = v.replace(/\$/g, '\\$$'); | 
				
			||||
    var regexp = new RegExp(v + '[^A-Za-z0-9_$]', 'g'); | 
				
			||||
    var count = occurrences(regexp); | 
				
			||||
    if (count == 1) { | 
				
			||||
      regexp = new RegExp('var\\s+' + v + '\\s*=[^;]+;|var\\s+' + v + ';'); | 
				
			||||
      code = code.replace(regexp, ''); | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function removeAlwaysFalsyInOr() { | 
				
			||||
    var countUsed = occurrences(ERROR_KEYWORD); | 
				
			||||
    var countOr = occurrences(ERROR_KEYWORD_OR); | 
				
			||||
    if (countUsed == countOr + 1) code = code.replace(ERROR_KEYWORD_OR, ''); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function occurrences(regexp) { | 
				
			||||
    return (code.match(regexp) || []).length; | 
				
			||||
  } | 
				
			||||
}); | 
				
			||||
Some files were not shown because too many files have changed in this diff Show More
					Loading…
					
					
				
		Reference in new issue