+607
-311
| (function (global, factory) { | ||
| typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : | ||
| typeof define === 'function' && define.amd ? define(['exports'], factory) : | ||
| (factory((global.LGTM = global.LGTM || {}))); | ||
| }(this, function (exports) { 'use strict'; | ||
| typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : | ||
| typeof define === 'function' && define.amd ? define(['exports'], factory) : | ||
| (factory((global.LGTM = {}))); | ||
| }(this, (function (exports) { 'use strict'; | ||
| var config = {}; | ||
| var config = {}; | ||
| /** | ||
| * Iteration | ||
| */ | ||
| /** | ||
| * Iteration | ||
| */ | ||
| function forEach(iterable, iterator) { | ||
| if (typeof iterable.forEach === 'function') { | ||
| iterable.forEach(iterator); | ||
| } else if ({}.toString.call(iterable) === '[object Object]') { | ||
| var hasOwnProp = {}.hasOwnProperty; | ||
| for (var key in iterable) { | ||
| if (hasOwnProp.call(iterable, key)) { | ||
| iterator(iterable[key], key); | ||
| } | ||
| } | ||
| } else { | ||
| for (var i = 0; i < iterable.length; i++) { | ||
| iterator(iterable[i], i); | ||
| } | ||
| } | ||
| } | ||
| function keys(object) { | ||
| if (Object.getOwnPropertyNames) { | ||
| return Object.getOwnPropertyNames(object); | ||
| } else { | ||
| var result = []; | ||
| forEach(object, function (key) { | ||
| result.push(key); | ||
| }); | ||
| return result; | ||
| } | ||
| function keys(object) { | ||
| return Object.getOwnPropertyNames(object); | ||
| } | ||
| /** | ||
| * Property access | ||
| */ | ||
| function get(object, property) { | ||
| if (object === null || object === undefined) { | ||
| return; | ||
| } else if (typeof object.get === 'function') { | ||
| return object.get(property); | ||
| } else { | ||
| return object[property]; | ||
| } | ||
| } | ||
| /** | ||
| * Property access | ||
| */ | ||
| function getProperties(object, properties) { | ||
| var get = config.get; | ||
| function get(object, property) { | ||
| if (object === null || object === undefined) { | ||
| return; | ||
| } else if (typeof object.get === 'function') { | ||
| return object.get(property); | ||
| } else { | ||
| return object[property]; | ||
| return properties.map(function (prop) { | ||
| return get(object, prop); | ||
| }); | ||
| } | ||
| /** | ||
| * Array manipulation | ||
| */ | ||
| function contains(array, object) { | ||
| return array.indexOf(object) > -1; | ||
| } | ||
| function uniq(array) { | ||
| var result = []; | ||
| for (var i = 0; i < array.length; i++) { | ||
| var item = array[i]; | ||
| if (!contains(result, item)) { | ||
| result.push(item); | ||
| } | ||
| } | ||
| function getProperties(object, properties) { | ||
| var get = config.get; | ||
| return result; | ||
| } | ||
| return properties.map(function (prop) { | ||
| return get(object, prop); | ||
| }); | ||
| } | ||
| /** | ||
| * Promises | ||
| */ | ||
| /** | ||
| * Array manipulation | ||
| */ | ||
| function resolve(thenable) { | ||
| var Promise = config.Promise; | ||
| function contains(array, object) { | ||
| return array.indexOf(object) > -1; | ||
| return new Promise(function (accept) { | ||
| return accept(thenable); | ||
| }); | ||
| } | ||
| function all(thenables) { | ||
| var Promise = config.Promise; | ||
| return Promise.all(thenables); | ||
| } | ||
| var asyncGenerator = function () { | ||
| function AwaitValue(value) { | ||
| this.value = value; | ||
| } | ||
| function uniq(array) { | ||
| var result = []; | ||
| function AsyncGenerator(gen) { | ||
| var front, back; | ||
| for (var i = 0; i < array.length; i++) { | ||
| var item = array[i]; | ||
| if (!contains(result, item)) { | ||
| result.push(item); | ||
| function send(key, arg) { | ||
| return new Promise(function (resolve, reject) { | ||
| var request = { | ||
| key: key, | ||
| arg: arg, | ||
| resolve: resolve, | ||
| reject: reject, | ||
| next: null | ||
| }; | ||
| if (back) { | ||
| back = back.next = request; | ||
| } else { | ||
| front = back = request; | ||
| resume(key, arg); | ||
| } | ||
| }); | ||
| } | ||
| function resume(key, arg) { | ||
| try { | ||
| var result = gen[key](arg); | ||
| var value = result.value; | ||
| if (value instanceof AwaitValue) { | ||
| Promise.resolve(value.value).then(function (arg) { | ||
| resume("next", arg); | ||
| }, function (arg) { | ||
| resume("throw", arg); | ||
| }); | ||
| } else { | ||
| settle(result.done ? "return" : "normal", result.value); | ||
| } | ||
| } catch (err) { | ||
| settle("throw", err); | ||
| } | ||
| } | ||
| return result; | ||
| function settle(type, value) { | ||
| switch (type) { | ||
| case "return": | ||
| front.resolve({ | ||
| value: value, | ||
| done: true | ||
| }); | ||
| break; | ||
| case "throw": | ||
| front.reject(value); | ||
| break; | ||
| default: | ||
| front.resolve({ | ||
| value: value, | ||
| done: false | ||
| }); | ||
| break; | ||
| } | ||
| front = front.next; | ||
| if (front) { | ||
| resume(front.key, front.arg); | ||
| } else { | ||
| back = null; | ||
| } | ||
| } | ||
| this._invoke = send; | ||
| if (typeof gen.return !== "function") { | ||
| this.return = undefined; | ||
| } | ||
| } | ||
| /** | ||
| * Promises | ||
| */ | ||
| if (typeof Symbol === "function" && Symbol.asyncIterator) { | ||
| AsyncGenerator.prototype[Symbol.asyncIterator] = function () { | ||
| return this; | ||
| }; | ||
| } | ||
| function resolve(thenable) { | ||
| var Promise = config.Promise; | ||
| AsyncGenerator.prototype.next = function (arg) { | ||
| return this._invoke("next", arg); | ||
| }; | ||
| return new Promise(function (accept) { | ||
| return accept(thenable); | ||
| }); | ||
| AsyncGenerator.prototype.throw = function (arg) { | ||
| return this._invoke("throw", arg); | ||
| }; | ||
| AsyncGenerator.prototype.return = function (arg) { | ||
| return this._invoke("return", arg); | ||
| }; | ||
| return { | ||
| wrap: function (fn) { | ||
| return function () { | ||
| return new AsyncGenerator(fn.apply(this, arguments)); | ||
| }; | ||
| }, | ||
| await: function (value) { | ||
| return new AwaitValue(value); | ||
| } | ||
| }; | ||
| }(); | ||
| var classCallCheck = function (instance, Constructor) { | ||
| if (!(instance instanceof Constructor)) { | ||
| throw new TypeError("Cannot call a class as a function"); | ||
| } | ||
| }; | ||
| function all(thenables) { | ||
| var Promise = config.Promise; | ||
| var createClass = function () { | ||
| function defineProperties(target, props) { | ||
| for (var i = 0; i < props.length; i++) { | ||
| var descriptor = props[i]; | ||
| descriptor.enumerable = descriptor.enumerable || false; | ||
| descriptor.configurable = true; | ||
| if ("value" in descriptor) descriptor.writable = true; | ||
| Object.defineProperty(target, descriptor.key, descriptor); | ||
| } | ||
| } | ||
| return Promise.all(thenables); | ||
| return function (Constructor, protoProps, staticProps) { | ||
| if (protoProps) defineProperties(Constructor.prototype, protoProps); | ||
| if (staticProps) defineProperties(Constructor, staticProps); | ||
| return Constructor; | ||
| }; | ||
| }(); | ||
| var toConsumableArray = function (arr) { | ||
| if (Array.isArray(arr)) { | ||
| for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; | ||
| return arr2; | ||
| } else { | ||
| return Array.from(arr); | ||
| } | ||
| }; | ||
| var ObjectValidator = function () { | ||
| function ObjectValidator() { | ||
| var _this = this; | ||
| classCallCheck(this, ObjectValidator); | ||
| this._validations = {}; | ||
| this._dependencies = {}; | ||
| for (var _len = arguments.length, validations = Array(_len), _key = 0; _key < _len; _key++) { | ||
| validations[_key] = arguments[_key]; | ||
| } | ||
| validations.forEach(function (validation) { | ||
| return validation.addToValidator(_this); | ||
| }); | ||
| } | ||
| ObjectValidator.prototype = { | ||
| _validations: null, | ||
| _dependencies: null, | ||
| addValidation: function addValidation(attr, fn, message) { | ||
| createClass(ObjectValidator, [{ | ||
| key: 'addValidation', | ||
| value: function addValidation(attr, fn, message) { | ||
| var list = this._validations[attr]; | ||
@@ -120,9 +298,9 @@ | ||
| list.push([fn, message]); | ||
| }, | ||
| } | ||
| // e.g. spouseName (dependentAttribute) depends on maritalStatus (parentAttribute) | ||
| addDependentsFor: function addDependentsFor() /* parentAttribute, ...dependentAttributes */{ | ||
| var dependentAttributes = [].slice.apply(arguments); | ||
| var parentAttribute = dependentAttributes.shift(); | ||
| }, { | ||
| key: 'addDependentsFor', | ||
| value: function addDependentsFor(parentAttribute) { | ||
| var dependentsForParent = this._dependencies[parentAttribute]; | ||
@@ -134,2 +312,6 @@ | ||
| for (var _len2 = arguments.length, dependentAttributes = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { | ||
| dependentAttributes[_key2 - 1] = arguments[_key2]; | ||
| } | ||
| for (var i = 0; i < dependentAttributes.length; i++) { | ||
@@ -141,17 +323,21 @@ var attr = dependentAttributes[i]; | ||
| } | ||
| }, | ||
| attributes: function attributes() { | ||
| } | ||
| }, { | ||
| key: 'attributes', | ||
| value: function attributes() { | ||
| return uniq(keys(this._validations).concat(keys(this._dependencies))); | ||
| }, | ||
| } | ||
| }, { | ||
| key: 'validate', | ||
| value: function validate(object) { | ||
| var _this2 = this; | ||
| validate: function validate() /* object, attributes..., callback */{ | ||
| var attributes = [].slice.apply(arguments); | ||
| var object = attributes.shift(); | ||
| var callback = attributes.pop(); | ||
| var self = this; | ||
| for (var _len3 = arguments.length, attributes = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { | ||
| attributes[_key3 - 1] = arguments[_key3]; | ||
| } | ||
| if (typeof callback === 'string') { | ||
| attributes.push(callback); | ||
| callback = null; | ||
| var callback = null; | ||
| if (typeof attributes[attributes.length - 1] !== 'string') { | ||
| callback = attributes.pop(); | ||
| } | ||
@@ -171,3 +357,3 @@ | ||
| var promise = all(validationPromises).then(function (results) { | ||
| results = self._collectResults(results); | ||
| results = _this2._collectResults(results); | ||
| if (callback) { | ||
@@ -187,5 +373,6 @@ callback(null, results); | ||
| } | ||
| }, | ||
| _validateAttribute: function _validateAttribute(object, attr, alreadyValidating) { | ||
| } | ||
| }, { | ||
| key: '_validateAttribute', | ||
| value: function _validateAttribute(object, attr, alreadyValidating) { | ||
| var value = config.get(object, attr); | ||
@@ -222,5 +409,6 @@ var validations = this._validations[attr]; | ||
| return results; | ||
| }, | ||
| _collectResults: function _collectResults(results) { | ||
| } | ||
| }, { | ||
| key: '_collectResults', | ||
| value: function _collectResults(results) { | ||
| var result = { | ||
@@ -251,31 +439,35 @@ valid: true, | ||
| return result; | ||
| }, | ||
| } | ||
| // e.g. getDependents("maritalStatus") # => ["spouseName"] | ||
| _getDependentsFor: function _getDependentsFor(parentAttribute) { | ||
| }, { | ||
| key: '_getDependentsFor', | ||
| value: function _getDependentsFor(parentAttribute) { | ||
| return (this._dependencies[parentAttribute] || []).slice(); | ||
| } | ||
| }; | ||
| }]); | ||
| return ObjectValidator; | ||
| }(); | ||
| function ValidatorBuilder() { | ||
| this._validator = new ObjectValidator(); | ||
| var Validation = function () { | ||
| function Validation(attr) { | ||
| classCallCheck(this, Validation); | ||
| this._attr = null; | ||
| this._conditions = []; | ||
| this._subvalidations = []; | ||
| this._dependencies = []; | ||
| this._attr = attr; | ||
| } | ||
| ValidatorBuilder.prototype = { | ||
| _attr: null, | ||
| _conditions: null, | ||
| _conditionDependencies: null, | ||
| _validator: null, | ||
| createClass(Validation, [{ | ||
| key: 'when', | ||
| value: function when() /*, predicate */{ | ||
| for (var _len = arguments.length, dependencies = Array(_len), _key = 0; _key < _len; _key++) { | ||
| dependencies[_key] = arguments[_key]; | ||
| } | ||
| validates: function validates(attr) { | ||
| this._attr = attr; | ||
| this._conditions = []; | ||
| this._conditionDependencies = []; | ||
| return this; | ||
| }, | ||
| var predicate = dependencies.pop(); | ||
| when: function when() /* ...dependencies, condition */{ | ||
| var dependencies = [].slice.apply(arguments); | ||
| var condition = dependencies.pop(); | ||
| if (dependencies.length === 0) { | ||
@@ -285,20 +477,21 @@ dependencies = [this._attr]; | ||
| for (var i = 0; i < dependencies.length; i++) { | ||
| var dependency = dependencies[i]; | ||
| if (dependency !== this._attr) { | ||
| this._validator.addDependentsFor(dependency, this._attr); | ||
| } | ||
| } | ||
| this._conditions.push({ | ||
| predicate: predicate, | ||
| dependencies: dependencies | ||
| }); | ||
| this._conditions.push(condition); | ||
| this._conditionDependencies.push(dependencies); | ||
| return this; | ||
| }, | ||
| and: function and() /* ...dependencies, condition */{ | ||
| } | ||
| }, { | ||
| key: 'and', | ||
| value: function and() { | ||
| return this.when.apply(this, arguments); | ||
| }, | ||
| } | ||
| }, { | ||
| key: 'using', | ||
| value: function using() /*, predicate, message */{ | ||
| for (var _len2 = arguments.length, dependencies = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { | ||
| dependencies[_key2] = arguments[_key2]; | ||
| } | ||
| using: function using() /* ...dependencies, predicate, message */{ | ||
| var dependencies = [].slice.apply(arguments); | ||
| var message = dependencies.pop(); | ||
@@ -319,24 +512,18 @@ var predicate = dependencies.pop(); | ||
| for (var i = 0; i < dependencies.length; i++) { | ||
| var dependency = dependencies[i]; | ||
| if (dependency !== this._attr) { | ||
| this._validator.addDependentsFor(dependency, this._attr); | ||
| } | ||
| } | ||
| function validation(value, attr, object) { | ||
| var properties = getProperties(object, dependencies); | ||
| return predicate.apply(null, properties.concat([attr, object])); | ||
| return predicate.apply(undefined, toConsumableArray(properties).concat([attr, object])); | ||
| } | ||
| var conditions = this._conditions.slice(); | ||
| var conditionDependencies = this._conditionDependencies.slice(); | ||
| function validationWithConditions(value, attr, object) { | ||
| return all(conditions.map(function (condition, i) { | ||
| var dependencies = conditionDependencies[i]; | ||
| return all(conditions.map(function (_ref) { | ||
| var predicate = _ref.predicate, | ||
| dependencies = _ref.dependencies; | ||
| var properties = getProperties(object, dependencies); | ||
| return condition.apply(null, properties.concat([attr, object])); | ||
| return predicate.apply(undefined, toConsumableArray(properties).concat([attr, object])); | ||
| })).then(function (results) { | ||
| for (var i = 0; i < results.length; i++) { | ||
| for (var i = 0; i < results.length; i += 1) { | ||
| // a condition resolved to a falsy value; return as valid | ||
@@ -347,2 +534,3 @@ if (!results[i]) { | ||
| } | ||
| // all conditions resolved to truthy values; continue with validation | ||
@@ -353,227 +541,335 @@ return validation(value, attr, object); | ||
| this._validator.addValidation(this._attr, conditions ? validationWithConditions : validation, message); | ||
| this._subvalidations.push({ | ||
| dependencies: dependencies, | ||
| validation: conditions ? validationWithConditions : validation, | ||
| message: message | ||
| }); | ||
| return this; | ||
| }, | ||
| } | ||
| }, { | ||
| key: 'addToValidator', | ||
| value: function addToValidator(validator) { | ||
| var _this = this; | ||
| build: function build() { | ||
| return this._validator; | ||
| this.dependencies().forEach(function (dependency) { | ||
| validator.addDependentsFor(dependency, _this._attr); | ||
| }); | ||
| this._subvalidations.forEach(function (subvalidation) { | ||
| validator.addValidation(_this._attr, subvalidation.validation, subvalidation.message); | ||
| }); | ||
| } | ||
| }; | ||
| }, { | ||
| key: 'dependencies', | ||
| value: function dependencies() { | ||
| var dependencies = []; | ||
| ValidatorBuilder.registerHelper = function (name, fn) { | ||
| this.prototype[name] = function () { | ||
| fn.apply(this, arguments); | ||
| return this; | ||
| }; | ||
| return null; | ||
| }; | ||
| this._conditions.forEach(function (condition) { | ||
| condition.dependencies.forEach(function (dependency) { | ||
| dependencies.push(dependency); | ||
| }); | ||
| }); | ||
| ValidatorBuilder.unregisterHelper = function (name) { | ||
| delete this.prototype[name]; | ||
| return null; | ||
| }; | ||
| this._subvalidations.forEach(function (subvalidation) { | ||
| subvalidation.dependencies.forEach(function (dependency) { | ||
| dependencies.push(dependency); | ||
| }); | ||
| }); | ||
| function present(value) { | ||
| if (typeof value === 'string') { | ||
| value = value.trim(); | ||
| return dependencies; | ||
| } | ||
| }]); | ||
| return Validation; | ||
| }(); | ||
| return value !== '' && value !== null && value !== undefined; | ||
| var ValidatorBuilder = function () { | ||
| function ValidatorBuilder() { | ||
| classCallCheck(this, ValidatorBuilder); | ||
| this._validations = null; | ||
| this._validation = null; | ||
| for (var _len = arguments.length, validations = Array(_len), _key = 0; _key < _len; _key++) { | ||
| validations[_key] = arguments[_key]; | ||
| } | ||
| this._validations = validations; | ||
| } | ||
| var STRICT_CHARS = /^[\x20-\x7F]*$/; | ||
| // http://stackoverflow.com/a/46181/11236 | ||
| var EMAIL = /^(([^<>()\[\]\\.,;:\s@\"]+(\.[^<>()\[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; | ||
| createClass(ValidatorBuilder, [{ | ||
| key: 'validates', | ||
| value: function validates(attr) { | ||
| this._validation = new Validation(attr); | ||
| this._validations.push(this._validation); | ||
| return this; | ||
| } | ||
| }, { | ||
| key: 'when', | ||
| value: function when() /* ...dependencies, condition */{ | ||
| var _validation; | ||
| function checkEmail(options) { | ||
| if (!options) { | ||
| options = {}; | ||
| (_validation = this._validation).when.apply(_validation, arguments); | ||
| return this; | ||
| } | ||
| }, { | ||
| key: 'and', | ||
| value: function and() /* ...dependencies, condition */{ | ||
| var _validation2; | ||
| return function (value) { | ||
| if (typeof value === 'string') { | ||
| value = value.trim(); | ||
| } | ||
| (_validation2 = this._validation).and.apply(_validation2, arguments); | ||
| return this; | ||
| } | ||
| }, { | ||
| key: 'using', | ||
| value: function using() /* ...dependencies, predicate, message */{ | ||
| var _validation3; | ||
| if (options.strictCharacters) { | ||
| if (!STRICT_CHARS.test(value)) { | ||
| return false; | ||
| } | ||
| } | ||
| (_validation3 = this._validation).using.apply(_validation3, arguments); | ||
| return this; | ||
| } | ||
| }, { | ||
| key: 'build', | ||
| value: function build() { | ||
| return new (Function.prototype.bind.apply(ObjectValidator, [null].concat(toConsumableArray(this._validations))))(); | ||
| } | ||
| }], [{ | ||
| key: 'registerHelper', | ||
| value: function registerHelper(name, fn) { | ||
| this.prototype[name] = function () { | ||
| fn.apply(this._validation, arguments); | ||
| return this; | ||
| }; | ||
| return EMAIL.test(value); | ||
| }; | ||
| Validation.prototype[name] = function () { | ||
| fn.apply(this, arguments); | ||
| return this; | ||
| }; | ||
| return null; | ||
| } | ||
| }, { | ||
| key: 'unregisterHelper', | ||
| value: function unregisterHelper(name) { | ||
| delete this.prototype[name]; | ||
| delete Validation.prototype[name]; | ||
| return null; | ||
| } | ||
| }]); | ||
| return ValidatorBuilder; | ||
| }(); | ||
| function present(value) { | ||
| if (typeof value === 'string') { | ||
| value = value.trim(); | ||
| } | ||
| function checkMinLength(minLength) { | ||
| if (minLength === null || minLength === undefined) { | ||
| throw new Error('must specify a min length'); | ||
| return value !== '' && value !== null && value !== undefined; | ||
| } | ||
| var STRICT_CHARS = /^[\x20-\x7F]*$/; | ||
| // http://stackoverflow.com/a/46181/11236 | ||
| var EMAIL = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; | ||
| function checkEmail() { | ||
| var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
| return function (value) { | ||
| if (typeof value === 'string') { | ||
| value = value.trim(); | ||
| } | ||
| return function (value) { | ||
| if (value !== null && value !== undefined) { | ||
| return value.length >= minLength; | ||
| } else { | ||
| if (options.strictCharacters) { | ||
| if (!STRICT_CHARS.test(value)) { | ||
| return false; | ||
| } | ||
| }; | ||
| } | ||
| return EMAIL.test(value); | ||
| }; | ||
| } | ||
| function checkMinLength(minLength) { | ||
| if (minLength === null || minLength === undefined) { | ||
| throw new Error('must specify a min length'); | ||
| } | ||
| function checkMaxLength(maxLength) { | ||
| if (maxLength === null || maxLength === undefined) { | ||
| throw new Error('must specify a max length'); | ||
| return function (value) { | ||
| if (value !== null && value !== undefined) { | ||
| return value.length >= minLength; | ||
| } else { | ||
| return false; | ||
| } | ||
| }; | ||
| } | ||
| return function (value) { | ||
| if (value !== null && value !== undefined) { | ||
| return value.length <= maxLength; | ||
| } else { | ||
| return false; | ||
| } | ||
| }; | ||
| function checkMaxLength(maxLength) { | ||
| if (maxLength === null || maxLength === undefined) { | ||
| throw new Error('must specify a max length'); | ||
| } | ||
| function register$1() { | ||
| ValidatorBuilder.registerHelper('required', function (message) { | ||
| this.using(present, message); | ||
| }); | ||
| return function (value) { | ||
| if (value !== null && value !== undefined) { | ||
| return value.length <= maxLength; | ||
| } else { | ||
| return false; | ||
| } | ||
| }; | ||
| } | ||
| ValidatorBuilder.registerHelper('optional', function () { | ||
| this.when(present); | ||
| }); | ||
| function register$1() { | ||
| ValidatorBuilder.registerHelper('required', function (message) { | ||
| this.using(present, message); | ||
| }); | ||
| ValidatorBuilder.registerHelper('email', function (message, options) { | ||
| this.using(checkEmail(options), message); | ||
| }); | ||
| ValidatorBuilder.registerHelper('optional', function () { | ||
| this.when(present); | ||
| }); | ||
| ValidatorBuilder.registerHelper('minLength', function (minLength, message) { | ||
| this.using(checkMinLength(minLength), message); | ||
| }); | ||
| ValidatorBuilder.registerHelper('email', function (message, options) { | ||
| this.using(checkEmail(options), message); | ||
| }); | ||
| ValidatorBuilder.registerHelper('maxLength', function (maxLength, message) { | ||
| this.using(checkMaxLength(maxLength), message); | ||
| }); | ||
| } | ||
| ValidatorBuilder.registerHelper('minLength', function (minLength, message) { | ||
| this.using(checkMinLength(minLength), message); | ||
| }); | ||
| register$1(); | ||
| ValidatorBuilder.registerHelper('maxLength', function (maxLength, message) { | ||
| this.using(checkMaxLength(maxLength), message); | ||
| }); | ||
| } | ||
| function validator() { | ||
| return new ValidatorBuilder(); | ||
| } | ||
| register$1(); | ||
| function register() { | ||
| ValidatorBuilder.registerHelper.apply(ValidatorBuilder, arguments); | ||
| function validator() { | ||
| for (var _len = arguments.length, validations = Array(_len), _key = 0; _key < _len; _key++) { | ||
| validations[_key] = arguments[_key]; | ||
| } | ||
| function unregister() { | ||
| ValidatorBuilder.unregisterHelper.apply(ValidatorBuilder, arguments); | ||
| } | ||
| return new (Function.prototype.bind.apply(ValidatorBuilder, [null].concat(validations)))(); | ||
| } | ||
| var helpers = { | ||
| core: { | ||
| present: present, | ||
| checkEmail: checkEmail, | ||
| checkMinLength: checkMinLength, | ||
| checkMaxLength: checkMaxLength, | ||
| register: register$1 | ||
| }, | ||
| register: register, | ||
| unregister: unregister | ||
| }; | ||
| function validates(attr) { | ||
| return new Validation(attr); | ||
| } | ||
| function configure(key, value) { | ||
| config[key] = value; | ||
| } | ||
| function register$$1() { | ||
| ValidatorBuilder.registerHelper.apply(ValidatorBuilder, arguments); | ||
| } | ||
| configure('defer', function () { | ||
| var Promise = config['Promise']; | ||
| var resolve = void 0; | ||
| var reject = void 0; | ||
| var promise = new Promise(function (res, rej) { | ||
| resolve = res; | ||
| reject = rej; | ||
| }); | ||
| function unregister() { | ||
| ValidatorBuilder.unregisterHelper.apply(ValidatorBuilder, arguments); | ||
| } | ||
| if (!resolve || !reject) { | ||
| throw new Error('Configured promise does not behave as expected'); | ||
| } | ||
| var helpers = { | ||
| core: { | ||
| present: present, | ||
| checkEmail: checkEmail, | ||
| checkMinLength: checkMinLength, | ||
| checkMaxLength: checkMaxLength, | ||
| register: register$1 | ||
| }, | ||
| register: register$$1, | ||
| unregister: unregister | ||
| }; | ||
| return { promise: promise, resolve: resolve, reject: reject }; | ||
| function configure(key, value) { | ||
| config[key] = value; | ||
| } | ||
| configure('defer', function () { | ||
| var Promise = config['Promise']; | ||
| var resolve$$1 = void 0; | ||
| var reject = void 0; | ||
| var promise = new Promise(function (res, rej) { | ||
| resolve$$1 = res; | ||
| reject = rej; | ||
| }); | ||
| function PromiseProxy(callback) { | ||
| var Promise = getPromise(); | ||
| return new Promise(callback); | ||
| if (!resolve$$1 || !reject) { | ||
| throw new Error('Configured promise does not behave as expected'); | ||
| } | ||
| PromiseProxy.all = function () { | ||
| var _getPromise; | ||
| return { promise: promise, resolve: resolve$$1, reject: reject }; | ||
| }); | ||
| return (_getPromise = getPromise()).all.apply(_getPromise, arguments); | ||
| }; | ||
| function PromiseProxy(callback) { | ||
| var Promise = getPromise(); | ||
| return new Promise(callback); | ||
| } | ||
| PromiseProxy.race = function () { | ||
| var _getPromise2; | ||
| PromiseProxy.all = function () { | ||
| var _getPromise; | ||
| return (_getPromise2 = getPromise()).race.apply(_getPromise2, arguments); | ||
| }; | ||
| return (_getPromise = getPromise()).all.apply(_getPromise, arguments); | ||
| }; | ||
| PromiseProxy.resolve = function () { | ||
| var _getPromise3; | ||
| PromiseProxy.race = function () { | ||
| var _getPromise2; | ||
| return (_getPromise3 = getPromise()).resolve.apply(_getPromise3, arguments); | ||
| }; | ||
| return (_getPromise2 = getPromise()).race.apply(_getPromise2, arguments); | ||
| }; | ||
| PromiseProxy.reject = function () { | ||
| var _getPromise4; | ||
| PromiseProxy.resolve = function () { | ||
| var _getPromise3; | ||
| return (_getPromise4 = getPromise()).reject.apply(_getPromise4, arguments); | ||
| }; | ||
| return (_getPromise3 = getPromise()).resolve.apply(_getPromise3, arguments); | ||
| }; | ||
| function getPromise() { | ||
| var warn = config['warn']; | ||
| PromiseProxy.reject = function () { | ||
| var _getPromise4; | ||
| /* global Promise, RSVP, require */ | ||
| if (typeof RSVP !== 'undefined') { | ||
| configure('Promise', RSVP.Promise); | ||
| warn('Implicitly using RSVP.Promise. This will be removed in LGTM 2.0. ' + 'Instead, use \'LGTM.configure("Promise", RSVP.Promise)\' to ' + 'continue using RSVP promises.'); | ||
| return RSVP.Promise; | ||
| } | ||
| return (_getPromise4 = getPromise()).reject.apply(_getPromise4, arguments); | ||
| }; | ||
| if (typeof require === 'function') { | ||
| try { | ||
| var _Promise = require('rsvp').Promise; | ||
| configure('Promise', _Promise); | ||
| warn('Implicitly using require("rsvp").Promise. This will be removed in LGTM 2.0. ' + 'Instead, use \'LGTM.configure("Promise", require("rsvp").Promise)\' to ' + 'continue using RSVP promises.'); | ||
| return _Promise; | ||
| } catch (err) { | ||
| // Ignore errors, just try built-in Promise or fail. | ||
| } | ||
| } | ||
| function getPromise() { | ||
| var warn = config['warn']; | ||
| if (typeof Promise === 'function') { | ||
| configure('Promise', Promise); | ||
| return Promise; | ||
| /* global Promise, RSVP, require */ | ||
| if (typeof RSVP !== 'undefined') { | ||
| configure('Promise', RSVP.Promise); | ||
| warn('Implicitly using RSVP.Promise. This will be removed in LGTM 2.0. ' + 'Instead, use \'LGTM.configure("Promise", RSVP.Promise)\' to ' + 'continue using RSVP promises.'); | ||
| return RSVP.Promise; | ||
| } | ||
| if (typeof require === 'function') { | ||
| try { | ||
| var _require = require('rsvp'), | ||
| _Promise = _require.Promise; | ||
| configure('Promise', _Promise); | ||
| warn('Implicitly using require("rsvp").Promise. This will be removed in LGTM 2.0. ' + 'Instead, use \'LGTM.configure("Promise", require("rsvp").Promise)\' to ' + 'continue using RSVP promises.'); | ||
| return _Promise; | ||
| } catch (err) { | ||
| // Ignore errors, just try built-in Promise or fail. | ||
| } | ||
| } | ||
| throw new Error('\'Promise\' could not be found. Configure LGTM with your promise library using ' + 'e.g. \'LGTM.configure("Promise", RSVP.Promise)\'.'); | ||
| if (typeof Promise === 'function') { | ||
| configure('Promise', Promise); | ||
| return Promise; | ||
| } | ||
| /* global console */ | ||
| configure('Promise', PromiseProxy); | ||
| configure('warn', console.warn.bind(console)); // eslint-disable-line no-console | ||
| configure('get', function (object, property) { | ||
| var warn = config['warn']; | ||
| throw new Error('\'Promise\' could not be found. Configure LGTM with your promise library using ' + 'e.g. \'LGTM.configure("Promise", RSVP.Promise)\'.'); | ||
| } | ||
| configure('get', get); | ||
| warn('Implicitly using \'get\' implementation that uses a \'get\' method when available. ' + 'This will be removed in LGTM 2.0. Instead, use e.g. \'LGTM.configure("get", Ember.get)\' ' + 'if you rely on this behavior.'); | ||
| return get(object, property); | ||
| }); | ||
| /* global console */ | ||
| configure('Promise', PromiseProxy); | ||
| configure('warn', console.warn.bind(console)); // eslint-disable-line no-console | ||
| configure('get', function (object, property) { | ||
| var warn = config['warn']; | ||
| exports.configure = configure; | ||
| exports.validator = validator; | ||
| exports.helpers = helpers; | ||
| exports.ObjectValidator = ObjectValidator; | ||
| configure('get', get); | ||
| warn('Implicitly using \'get\' implementation that uses a \'get\' method when available. ' + 'This will be removed in LGTM 2.0. Instead, use e.g. \'LGTM.configure("get", Ember.get)\' ' + 'if you rely on this behavior.'); | ||
| return get(object, property); | ||
| }); | ||
| })); | ||
| //# sourceMappingURL=lgtm.js.map | ||
| exports.configure = configure; | ||
| exports.validator = validator; | ||
| exports.validates = validates; | ||
| exports.helpers = helpers; | ||
| exports.ObjectValidator = ObjectValidator; | ||
| Object.defineProperty(exports, '__esModule', { value: true }); | ||
| }))); | ||
| //# sourceMappingURL=lgtm.js.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"lgtm.js","sources":["../src/lgtm/config.js","../src/lgtm/utils.js","../src/lgtm/object_validator.js","../src/lgtm/validator_builder.js","../src/lgtm/helpers/core.js","../src/lgtm.js"],"sourcesContent":["export default {};\n","import config from './config.js';\n\n/**\n * Iteration\n */\n\nfunction forEach(iterable, iterator) {\n if (typeof iterable.forEach === 'function') {\n iterable.forEach(iterator);\n } else if ({}.toString.call(iterable) === '[object Object]') {\n var hasOwnProp = {}.hasOwnProperty;\n for (var key in iterable) {\n if (hasOwnProp.call(iterable, key)) {\n iterator(iterable[key], key);\n }\n }\n } else {\n for (var i = 0; i < iterable.length; i++) {\n iterator(iterable[i], i);\n }\n }\n}\n\nfunction keys(object) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(object);\n } else {\n var result = [];\n forEach(object, function(key) {\n result.push(key);\n });\n return result;\n }\n}\n\nexport { forEach, keys };\n\n\n/**\n * Property access\n */\n\nfunction get(object, property) {\n if (object === null || object === undefined) {\n return;\n } else if (typeof object.get === 'function') {\n return object.get(property);\n } else {\n return object[property];\n }\n}\n\nfunction getProperties(object, properties) {\n let { get } = config;\n return properties.map(prop => get(object, prop));\n}\n\nexport { get, getProperties };\n\n\n/**\n * Array manipulation\n */\n\nfunction contains(array, object) {\n return array.indexOf(object) > -1;\n}\n\nfunction uniq(array) {\n var result = [];\n\n for (var i = 0; i < array.length; i++) {\n var item = array[i];\n if (!contains(result, item)) {\n result.push(item);\n }\n }\n\n return result;\n}\n\nexport { contains, uniq };\n\n\n/**\n * Promises\n */\n\nfunction resolve(thenable) {\n let { Promise } = config;\n return new Promise(accept => accept(thenable));\n}\n\nfunction all(thenables) {\n let { Promise } = config;\n return Promise.all(thenables);\n}\n\nexport { resolve, all };\n","import config from './config.js';\nimport { all, resolve, contains, keys, uniq } from './utils.js';\n\nfunction ObjectValidator() {\n this._validations = {};\n this._dependencies = {};\n}\n\nObjectValidator.prototype = {\n _validations : null,\n _dependencies : null,\n\n addValidation: function(attr, fn, message) {\n var list = this._validations[attr];\n\n if (!list) {\n list = this._validations[attr] = [];\n }\n\n list.push([fn, message]);\n },\n\n // e.g. spouseName (dependentAttribute) depends on maritalStatus (parentAttribute)\n addDependentsFor: function(/* parentAttribute, ...dependentAttributes */) {\n var dependentAttributes = [].slice.apply(arguments);\n var parentAttribute = dependentAttributes.shift();\n\n var dependentsForParent = this._dependencies[parentAttribute];\n\n if (!dependentsForParent) {\n dependentsForParent = this._dependencies[parentAttribute] = [];\n }\n\n for (var i = 0; i < dependentAttributes.length; i++) {\n var attr = dependentAttributes[i];\n if (!contains(dependentsForParent, attr)) {\n dependentsForParent.push(attr);\n }\n }\n },\n\n attributes: function() {\n return uniq(\n keys(this._validations).concat(\n keys(this._dependencies)\n )\n );\n },\n\n validate: function(/* object, attributes..., callback */) {\n var attributes = [].slice.apply(arguments);\n var object = attributes.shift();\n var callback = attributes.pop();\n var self = this;\n\n if (typeof callback === 'string') {\n attributes.push(callback);\n callback = null;\n }\n\n if (attributes.length === 0) {\n attributes = keys(this._validations);\n }\n\n var validationPromises = [];\n var alreadyValidating = attributes.slice();\n for (var i = 0; i < attributes.length; i++) {\n var attr = attributes[i];\n validationPromises = validationPromises.concat(\n this._validateAttribute(object, attr, alreadyValidating));\n }\n\n var promise = all(validationPromises).then(\n function(results) {\n results = self._collectResults(results);\n if (callback) {\n callback(null, results);\n }\n return results;\n },\n function(err) {\n if (callback) {\n callback(err);\n }\n throw err;\n });\n\n if (!callback) {\n return promise;\n }\n },\n\n _validateAttribute: function(object, attr, alreadyValidating) {\n var value = config.get(object, attr);\n var validations = this._validations[attr];\n var results = [];\n\n if (validations) {\n validations.forEach(function(pair) {\n var fn = pair[0];\n var message = pair[1];\n\n var promise = resolve()\n .then(function() {\n return fn(value, attr, object);\n })\n .then(function(isValid) {\n return [ attr, isValid ? null : message ];\n });\n\n results.push(promise);\n });\n } else if (contains(this.attributes(), attr)) {\n results.push([ attr, null ]);\n }\n\n var dependents = this._getDependentsFor(attr);\n for (var i = 0; i < dependents.length; i++) {\n var dependent = dependents[i];\n if (alreadyValidating.indexOf(dependent) < 0) {\n alreadyValidating.push(dependent);\n results = results.concat(this._validateAttribute(object, dependent, alreadyValidating));\n }\n }\n\n return results;\n },\n\n _collectResults: function(results) {\n var result = {\n valid : true,\n errors : {}\n };\n\n for (var i = 0; i < results.length; i++) {\n if (!results[i]) { continue; }\n\n var attr = results[i][0];\n var message = results[i][1];\n var messages = result.errors[attr];\n\n if (!messages) {\n messages = result.errors[attr] = [];\n }\n\n if (message) {\n messages.push(message);\n result.valid = false;\n }\n }\n\n return result;\n },\n\n // e.g. getDependents(\"maritalStatus\") # => [\"spouseName\"]\n _getDependentsFor: function(parentAttribute) {\n return (this._dependencies[parentAttribute] || []).slice();\n }\n};\n\nexport default ObjectValidator;\n","import ObjectValidator from './object_validator.js';\nimport { getProperties, all } from './utils.js';\n\nfunction ValidatorBuilder() {\n this._validator = new ObjectValidator();\n}\n\nValidatorBuilder.prototype = {\n _attr : null,\n _conditions : null,\n _conditionDependencies : null,\n _validator : null,\n\n validates: function(attr) {\n this._attr = attr;\n this._conditions = [];\n this._conditionDependencies = [];\n return this;\n },\n\n when: function(/* ...dependencies, condition */) {\n var dependencies = [].slice.apply(arguments);\n var condition = dependencies.pop();\n\n if (dependencies.length === 0) {\n dependencies = [this._attr];\n }\n\n for (var i = 0; i < dependencies.length; i++) {\n var dependency = dependencies[i];\n if (dependency !== this._attr) {\n this._validator.addDependentsFor(dependency, this._attr);\n }\n }\n\n this._conditions.push(condition);\n this._conditionDependencies.push(dependencies);\n return this;\n },\n\n and: function(/* ...dependencies, condition */) {\n return this.when.apply(this, arguments);\n },\n\n using: function(/* ...dependencies, predicate, message */) {\n var dependencies = [].slice.apply(arguments);\n var message = dependencies.pop();\n var predicate = dependencies.pop();\n\n if (typeof message === 'undefined') {\n throw new Error(`expected a message but got: ${message}`);\n }\n\n if (typeof message === 'function' && typeof predicate === 'undefined') {\n throw new Error('missing expected argument `message` after predicate function');\n }\n\n if (dependencies.length === 0) {\n dependencies = [this._attr];\n }\n\n for (var i = 0; i < dependencies.length; i++) {\n var dependency = dependencies[i];\n if (dependency !== this._attr) {\n this._validator.addDependentsFor(dependency, this._attr);\n }\n }\n\n function validation(value, attr, object) {\n var properties = getProperties(object, dependencies);\n return predicate.apply(null, properties.concat([attr, object]));\n }\n\n var conditions = this._conditions.slice();\n var conditionDependencies = this._conditionDependencies.slice();\n\n function validationWithConditions(value, attr, object) {\n return all(conditions.map(function(condition, i) {\n var dependencies = conditionDependencies[i];\n var properties = getProperties(object, dependencies);\n return condition.apply(null, properties.concat([attr, object]));\n })).then(function(results) {\n for (var i = 0; i < results.length; i++) {\n // a condition resolved to a falsy value; return as valid\n if (!results[i]) {\n return true;\n }\n }\n // all conditions resolved to truthy values; continue with validation\n return validation(value, attr, object);\n });\n }\n\n this._validator.addValidation(\n this._attr,\n conditions ? validationWithConditions : validation,\n message\n );\n return this;\n },\n\n build: function() {\n return this._validator;\n }\n};\n\nValidatorBuilder.registerHelper = function(name, fn) {\n this.prototype[name] = function() {\n fn.apply(this, arguments);\n return this;\n };\n return null;\n};\n\nValidatorBuilder.unregisterHelper = function(name) {\n delete this.prototype[name];\n return null;\n};\n\nexport default ValidatorBuilder;\n","import ValidatorBuilder from '../validator_builder.js';\n\nfunction present(value) {\n if (typeof value === 'string') {\n value = value.trim();\n }\n\n return value !== '' && value !== null && value !== undefined;\n}\n\nconst STRICT_CHARS = /^[\\x20-\\x7F]*$/;\n// http://stackoverflow.com/a/46181/11236\nconst EMAIL = /^(([^<>()\\[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\nfunction checkEmail(options) {\n if (!options) {\n options = {};\n }\n\n return function(value) {\n if (typeof value === 'string') {\n value = value.trim();\n }\n\n if (options.strictCharacters) {\n if (!STRICT_CHARS.test(value)) {\n return false;\n }\n }\n\n return EMAIL.test(value);\n };\n}\n\nfunction checkMinLength(minLength) {\n if (minLength === null || minLength === undefined) {\n throw new Error('must specify a min length');\n }\n\n return function(value) {\n if (value !== null && value !== undefined) {\n return value.length >= minLength;\n } else {\n return false;\n }\n };\n}\n\nfunction checkMaxLength(maxLength) {\n if (maxLength === null || maxLength === undefined) {\n throw new Error('must specify a max length');\n }\n\n return function(value) {\n if (value !== null && value !== undefined) {\n return value.length <= maxLength;\n } else {\n return false;\n }\n };\n}\n\nfunction register() {\n ValidatorBuilder.registerHelper('required', function(message) {\n this.using(present, message);\n });\n\n ValidatorBuilder.registerHelper('optional', function() {\n this.when(present);\n });\n\n ValidatorBuilder.registerHelper('email', function(message, options) {\n this.using(checkEmail(options), message);\n });\n\n ValidatorBuilder.registerHelper('minLength', function(minLength, message) {\n this.using(checkMinLength(minLength), message);\n });\n\n ValidatorBuilder.registerHelper('maxLength', function(maxLength, message) {\n this.using(checkMaxLength(maxLength), message);\n });\n}\n\nexport { present, checkEmail, checkMinLength, checkMaxLength, register };\n","import ObjectValidator from './lgtm/object_validator.js';\nimport ValidatorBuilder from './lgtm/validator_builder.js';\nimport config from './lgtm/config.js';\nimport { get } from './lgtm/utils.js';\nimport { present, checkEmail, checkMinLength, checkMaxLength, register as core_register } from './lgtm/helpers/core.js';\n\ncore_register();\n\nfunction validator() {\n return new ValidatorBuilder();\n}\n\nfunction register() {\n ValidatorBuilder.registerHelper.apply(ValidatorBuilder, arguments);\n}\n\nfunction unregister() {\n ValidatorBuilder.unregisterHelper.apply(ValidatorBuilder, arguments);\n}\n\nvar helpers = {\n core: {\n present: present,\n checkEmail: checkEmail,\n checkMinLength: checkMinLength,\n checkMaxLength: checkMaxLength,\n register: core_register\n },\n register: register,\n unregister: unregister\n};\n\nfunction configure(key, value) {\n config[key] = value;\n}\n\nconfigure('defer', () => {\n let Promise = config['Promise'];\n let resolve;\n let reject;\n let promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n if (!resolve || !reject) {\n throw new Error('Configured promise does not behave as expected');\n }\n\n return { promise, resolve, reject };\n});\n\nfunction PromiseProxy(callback) {\n let Promise = getPromise();\n return new Promise(callback);\n}\n\nPromiseProxy.all = function(...args) {\n return getPromise().all(...args);\n};\n\nPromiseProxy.race = function(...args) {\n return getPromise().race(...args);\n};\n\nPromiseProxy.resolve = function(...args) {\n return getPromise().resolve(...args);\n};\n\nPromiseProxy.reject = function(...args) {\n return getPromise().reject(...args);\n};\n\nfunction getPromise() {\n let warn = config['warn'];\n\n /* global Promise, RSVP, require */\n if (typeof RSVP !== 'undefined') {\n configure('Promise', RSVP.Promise);\n warn(\n `Implicitly using RSVP.Promise. This will be removed in LGTM 2.0. ` +\n `Instead, use 'LGTM.configure(\"Promise\", RSVP.Promise)' to ` +\n `continue using RSVP promises.`\n );\n return RSVP.Promise;\n }\n\n if (typeof require === 'function') {\n try {\n let Promise = require('rsvp').Promise;\n configure('Promise', Promise);\n warn(\n `Implicitly using require(\"rsvp\").Promise. This will be removed in LGTM 2.0. ` +\n `Instead, use 'LGTM.configure(\"Promise\", require(\"rsvp\").Promise)' to ` +\n `continue using RSVP promises.`\n );\n return Promise;\n } catch (err) {\n // Ignore errors, just try built-in Promise or fail.\n }\n }\n\n if (typeof Promise === 'function') {\n configure('Promise', Promise);\n return Promise;\n }\n\n throw new Error(\n `'Promise' could not be found. Configure LGTM with your promise library using ` +\n `e.g. 'LGTM.configure(\"Promise\", RSVP.Promise)'.`\n );\n}\n\n/* global console */\nconfigure('Promise', PromiseProxy);\nconfigure('warn', console.warn.bind(console)); // eslint-disable-line no-console\nconfigure('get', (object, property) => {\n let warn = config['warn'];\n\n configure('get', get);\n warn(\n `Implicitly using 'get' implementation that uses a 'get' method when available. ` +\n `This will be removed in LGTM 2.0. Instead, use e.g. 'LGTM.configure(\"get\", Ember.get)' ` +\n `if you rely on this behavior.`\n );\n return get(object, property);\n});\n\nexport { configure, validator, helpers, ObjectValidator };\n"],"names":["register","core_register"],"mappings":";;;;;;eAAe,EAAf;;;;;;ACMA,EAAA,SAAS,OAAT,CAAiB,QAAjB,EAA2B,QAA3B,EAAqC;AACnC,EAAA,MAAI,OAAO,SAAS,OAAhB,KAA4B,UAAhC,EAA4C;AAC1C,EAAA,aAAS,OAAT,CAAiB,QAAjB;AACD,EAAA,GAFD,MAEO,IAAI,GAAG,QAAH,CAAY,IAAZ,CAAiB,QAAjB,MAA+B,iBAAnC,EAAsD;AAC3D,EAAA,QAAI,aAAa,GAAG,cAApB;AACA,EAAA,SAAK,IAAI,GAAT,IAAgB,QAAhB,EAA0B;AACxB,EAAA,UAAI,WAAW,IAAX,CAAgB,QAAhB,EAA0B,GAA1B,CAAJ,EAAoC;AAClC,EAAA,iBAAS,SAAS,GAAT,CAAT,EAAwB,GAAxB;AACD,EAAA;AACF,EAAA;AACF,EAAA,GAPM,MAOA;AACL,EAAA,SAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,SAAS,MAA7B,EAAqC,GAArC,EAA0C;AACxC,EAAA,eAAS,SAAS,CAAT,CAAT,EAAsB,CAAtB;AACD,EAAA;AACF,EAAA;AACF,EAAA;;AAED,EAAA,SAAS,IAAT,CAAc,MAAd,EAAsB;AACpB,EAAA,MAAI,OAAO,mBAAX,EAAgC;AAC9B,EAAA,WAAO,OAAO,mBAAP,CAA2B,MAA3B,CAAP;AACD,EAAA,GAFD,MAEO;AACL,EAAA,QAAI,SAAS,EAAb;AACA,EAAA,YAAQ,MAAR,EAAgB,UAAS,GAAT,EAAc;AAC5B,EAAA,aAAO,IAAP,CAAY,GAAZ;AACD,EAAA,KAFD;AAGA,EAAA,WAAO,MAAP;AACD,EAAA;AACF,EAAA;;AAED;;;;AAOA,EAAA,SAAS,GAAT,CAAa,MAAb,EAAqB,QAArB,EAA+B;AAC7B,EAAA,MAAI,WAAW,IAAX,IAAmB,WAAW,SAAlC,EAA6C;AAC3C,EAAA;AACD,EAAA,GAFD,MAEO,IAAI,OAAO,OAAO,GAAd,KAAsB,UAA1B,EAAsC;AAC3C,EAAA,WAAO,OAAO,GAAP,CAAW,QAAX,CAAP;AACD,EAAA,GAFM,MAEA;AACL,EAAA,WAAO,OAAO,QAAP,CAAP;AACD,EAAA;AACF,EAAA;;AAED,EAAA,SAAS,aAAT,CAAuB,MAAvB,EAA+B,UAA/B,EAA2C;AAAA,EAAA,MACnC,GADmC,GAC3B,MAD2B,CACnC,GADmC;;AAEzC,EAAA,SAAO,WAAW,GAAX,CAAe;AAAA,EAAA,WAAQ,IAAI,MAAJ,EAAY,IAAZ,CAAR;AAAA,EAAA,GAAf,CAAP;AACD,EAAA;;AAED;;;;AAOA,EAAA,SAAS,QAAT,CAAkB,KAAlB,EAAyB,MAAzB,EAAiC;AAC/B,EAAA,SAAO,MAAM,OAAN,CAAc,MAAd,IAAwB,CAAC,CAAhC;AACD,EAAA;;AAED,EAAA,SAAS,IAAT,CAAc,KAAd,EAAqB;AACnB,EAAA,MAAI,SAAS,EAAb;;AAEA,EAAA,OAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,MAAM,MAA1B,EAAkC,GAAlC,EAAuC;AACrC,EAAA,QAAI,OAAO,MAAM,CAAN,CAAX;AACA,EAAA,QAAI,CAAC,SAAS,MAAT,EAAiB,IAAjB,CAAL,EAA6B;AAC3B,EAAA,aAAO,IAAP,CAAY,IAAZ;AACD,EAAA;AACF,EAAA;;AAED,EAAA,SAAO,MAAP;AACD,EAAA;;AAED;;;;AAOA,EAAA,SAAS,OAAT,CAAiB,QAAjB,EAA2B;AAAA,EAAA,MACnB,OADmB,GACP,MADO,CACnB,OADmB;;AAEzB,EAAA,SAAO,IAAI,OAAJ,CAAY;AAAA,EAAA,WAAU,OAAO,QAAP,CAAV;AAAA,EAAA,GAAZ,CAAP;AACD,EAAA;;AAED,EAAA,SAAS,GAAT,CAAa,SAAb,EAAwB;AAAA,EAAA,MAChB,OADgB,GACJ,MADI,CAChB,OADgB;;AAEtB,EAAA,SAAO,QAAQ,GAAR,CAAY,SAAZ,CAAP;AACD,EAAA;;EC7FD,SAAS,eAAT,GAA2B;AACzB,EAAA,OAAK,YAAL,GAAqB,EAArB;AACA,EAAA,OAAK,aAAL,GAAqB,EAArB;AACD,EAAA;;AAED,EAAA,gBAAgB,SAAhB,GAA4B;AAC1B,EAAA,gBAAgB,IADU;AAE1B,EAAA,iBAAgB,IAFU;;AAI1B,EAAA,iBAAe,uBAAS,IAAT,EAAe,EAAf,EAAmB,OAAnB,EAA4B;AACzC,EAAA,QAAI,OAAO,KAAK,YAAL,CAAkB,IAAlB,CAAX;;AAEA,EAAA,QAAI,CAAC,IAAL,EAAW;AACT,EAAA,aAAO,KAAK,YAAL,CAAkB,IAAlB,IAA0B,EAAjC;AACD,EAAA;;AAED,EAAA,SAAK,IAAL,CAAU,CAAC,EAAD,EAAK,OAAL,CAAV;AACD,EAAA,GAZyB;;;AAe1B,EAAA,oBAAkB,yEAAwD;AACxE,EAAA,QAAI,sBAAsB,GAAG,KAAH,CAAS,KAAT,CAAe,SAAf,CAA1B;AACA,EAAA,QAAI,kBAAkB,oBAAoB,KAApB,EAAtB;;AAEA,EAAA,QAAI,sBAAsB,KAAK,aAAL,CAAmB,eAAnB,CAA1B;;AAEA,EAAA,QAAI,CAAC,mBAAL,EAA0B;AACxB,EAAA,4BAAsB,KAAK,aAAL,CAAmB,eAAnB,IAAsC,EAA5D;AACD,EAAA;;AAED,EAAA,SAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,oBAAoB,MAAxC,EAAgD,GAAhD,EAAqD;AACnD,EAAA,UAAI,OAAO,oBAAoB,CAApB,CAAX;AACA,EAAA,UAAI,CAAC,SAAS,mBAAT,EAA8B,IAA9B,CAAL,EAA0C;AACxC,EAAA,4BAAoB,IAApB,CAAyB,IAAzB;AACD,EAAA;AACF,EAAA;AACF,EAAA,GA/ByB;;AAiC1B,EAAA,cAAY,sBAAW;AACrB,EAAA,WAAO,KACL,KAAK,KAAK,YAAV,EAAwB,MAAxB,CACE,KAAK,KAAK,aAAV,CADF,CADK,CAAP;AAKD,EAAA,GAvCyB;;AAyC1B,EAAA,YAAU,yDAAgD;AACxD,EAAA,QAAI,aAAa,GAAG,KAAH,CAAS,KAAT,CAAe,SAAf,CAAjB;AACA,EAAA,QAAI,SAAS,WAAW,KAAX,EAAb;AACA,EAAA,QAAI,WAAW,WAAW,GAAX,EAAf;AACA,EAAA,QAAI,OAAO,IAAX;;AAEA,EAAA,QAAI,OAAO,QAAP,KAAoB,QAAxB,EAAkC;AAChC,EAAA,iBAAW,IAAX,CAAgB,QAAhB;AACA,EAAA,iBAAW,IAAX;AACD,EAAA;;AAED,EAAA,QAAI,WAAW,MAAX,KAAsB,CAA1B,EAA6B;AAC3B,EAAA,mBAAa,KAAK,KAAK,YAAV,CAAb;AACD,EAAA;;AAED,EAAA,QAAI,qBAAqB,EAAzB;AACA,EAAA,QAAI,oBAAoB,WAAW,KAAX,EAAxB;AACA,EAAA,SAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,WAAW,MAA/B,EAAuC,GAAvC,EAA4C;AAC1C,EAAA,UAAI,OAAO,WAAW,CAAX,CAAX;AACA,EAAA,2BAAqB,mBAAmB,MAAnB,CACnB,KAAK,kBAAL,CAAwB,MAAxB,EAAgC,IAAhC,EAAsC,iBAAtC,CADmB,CAArB;AAED,EAAA;;AAED,EAAA,QAAI,UAAU,IAAI,kBAAJ,EAAwB,IAAxB,CACZ,UAAS,OAAT,EAAkB;AAChB,EAAA,gBAAU,KAAK,eAAL,CAAqB,OAArB,CAAV;AACA,EAAA,UAAI,QAAJ,EAAc;AACZ,EAAA,iBAAS,IAAT,EAAe,OAAf;AACD,EAAA;AACD,EAAA,aAAO,OAAP;AACD,EAAA,KAPW,EAQZ,UAAS,GAAT,EAAc;AACZ,EAAA,UAAI,QAAJ,EAAc;AACZ,EAAA,iBAAS,GAAT;AACD,EAAA;AACD,EAAA,YAAM,GAAN;AACD,EAAA,KAbW,CAAd;;AAeA,EAAA,QAAI,CAAC,QAAL,EAAe;AACb,EAAA,aAAO,OAAP;AACD,EAAA;AACF,EAAA,GAlFyB;;AAoF1B,EAAA,sBAAoB,4BAAS,MAAT,EAAiB,IAAjB,EAAuB,iBAAvB,EAA0C;AAC5D,EAAA,QAAI,QAAc,OAAO,GAAP,CAAW,MAAX,EAAmB,IAAnB,CAAlB;AACA,EAAA,QAAI,cAAc,KAAK,YAAL,CAAkB,IAAlB,CAAlB;AACA,EAAA,QAAI,UAAc,EAAlB;;AAEA,EAAA,QAAI,WAAJ,EAAiB;AACf,EAAA,kBAAY,OAAZ,CAAoB,UAAS,IAAT,EAAe;AACjC,EAAA,YAAI,KAAU,KAAK,CAAL,CAAd;AACA,EAAA,YAAI,UAAU,KAAK,CAAL,CAAd;;AAEA,EAAA,YAAI,UAAU,UACX,IADW,CACN,YAAW;AACf,EAAA,iBAAO,GAAG,KAAH,EAAU,IAAV,EAAgB,MAAhB,CAAP;AACD,EAAA,SAHW,EAIX,IAJW,CAIN,UAAS,OAAT,EAAkB;AACtB,EAAA,iBAAO,CAAE,IAAF,EAAQ,UAAU,IAAV,GAAiB,OAAzB,CAAP;AACD,EAAA,SANW,CAAd;;AAQA,EAAA,gBAAQ,IAAR,CAAa,OAAb;AACD,EAAA,OAbD;AAcD,EAAA,KAfD,MAeO,IAAI,SAAS,KAAK,UAAL,EAAT,EAA4B,IAA5B,CAAJ,EAAuC;AAC5C,EAAA,cAAQ,IAAR,CAAa,CAAE,IAAF,EAAQ,IAAR,CAAb;AACD,EAAA;;AAED,EAAA,QAAI,aAAa,KAAK,iBAAL,CAAuB,IAAvB,CAAjB;AACA,EAAA,SAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,WAAW,MAA/B,EAAuC,GAAvC,EAA4C;AAC1C,EAAA,UAAI,YAAY,WAAW,CAAX,CAAhB;AACA,EAAA,UAAI,kBAAkB,OAAlB,CAA0B,SAA1B,IAAuC,CAA3C,EAA8C;AAC5C,EAAA,0BAAkB,IAAlB,CAAuB,SAAvB;AACA,EAAA,kBAAU,QAAQ,MAAR,CAAe,KAAK,kBAAL,CAAwB,MAAxB,EAAgC,SAAhC,EAA2C,iBAA3C,CAAf,CAAV;AACD,EAAA;AACF,EAAA;;AAED,EAAA,WAAO,OAAP;AACD,EAAA,GAtHyB;;AAwH1B,EAAA,mBAAiB,yBAAS,OAAT,EAAkB;AACjC,EAAA,QAAI,SAAS;AACX,EAAA,aAAS,IADE;AAEX,EAAA,cAAS;AAFE,EAAA,KAAb;;AAKA,EAAA,SAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,QAAQ,MAA5B,EAAoC,GAApC,EAAyC;AACvC,EAAA,UAAI,CAAC,QAAQ,CAAR,CAAL,EAAiB;AAAE,EAAA;AAAW,EAAA;;AAE9B,EAAA,UAAI,OAAO,QAAQ,CAAR,EAAW,CAAX,CAAX;AACA,EAAA,UAAI,UAAU,QAAQ,CAAR,EAAW,CAAX,CAAd;AACA,EAAA,UAAI,WAAW,OAAO,MAAP,CAAc,IAAd,CAAf;;AAEA,EAAA,UAAI,CAAC,QAAL,EAAe;AACb,EAAA,mBAAW,OAAO,MAAP,CAAc,IAAd,IAAsB,EAAjC;AACD,EAAA;;AAED,EAAA,UAAI,OAAJ,EAAa;AACX,EAAA,iBAAS,IAAT,CAAc,OAAd;AACA,EAAA,eAAO,KAAP,GAAe,KAAf;AACD,EAAA;AACF,EAAA;;AAED,EAAA,WAAO,MAAP;AACD,EAAA,GAhJyB;;;AAmJ1B,EAAA,qBAAmB,2BAAS,eAAT,EAA0B;AAC3C,EAAA,WAAO,CAAC,KAAK,aAAL,CAAmB,eAAnB,KAAuC,EAAxC,EAA4C,KAA5C,EAAP;AACD,EAAA;AArJyB,EAAA,CAA5B;;ECLA,SAAS,gBAAT,GAA4B;AAC1B,EAAA,OAAK,UAAL,GAAkB,IAAI,eAAJ,EAAlB;AACD,EAAA;;AAED,EAAA,iBAAiB,SAAjB,GAA6B;AAC3B,EAAA,SAAyB,IADE;AAE3B,EAAA,eAAyB,IAFE;AAG3B,EAAA,0BAAyB,IAHE;AAI3B,EAAA,cAAyB,IAJE;;AAM3B,EAAA,aAAW,mBAAS,IAAT,EAAe;AACxB,EAAA,SAAK,KAAL,GAAa,IAAb;AACA,EAAA,SAAK,WAAL,GAAmB,EAAnB;AACA,EAAA,SAAK,sBAAL,GAA8B,EAA9B;AACA,EAAA,WAAO,IAAP;AACD,EAAA,GAX0B;;AAa3B,EAAA,QAAM,gDAA2C;AAC/C,EAAA,QAAI,eAAe,GAAG,KAAH,CAAS,KAAT,CAAe,SAAf,CAAnB;AACA,EAAA,QAAI,YAAe,aAAa,GAAb,EAAnB;;AAEA,EAAA,QAAI,aAAa,MAAb,KAAwB,CAA5B,EAA+B;AAC7B,EAAA,qBAAe,CAAC,KAAK,KAAN,CAAf;AACD,EAAA;;AAED,EAAA,SAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,aAAa,MAAjC,EAAyC,GAAzC,EAA8C;AAC5C,EAAA,UAAI,aAAa,aAAa,CAAb,CAAjB;AACA,EAAA,UAAI,eAAe,KAAK,KAAxB,EAA+B;AAC7B,EAAA,aAAK,UAAL,CAAgB,gBAAhB,CAAiC,UAAjC,EAA6C,KAAK,KAAlD;AACD,EAAA;AACF,EAAA;;AAED,EAAA,SAAK,WAAL,CAAiB,IAAjB,CAAsB,SAAtB;AACA,EAAA,SAAK,sBAAL,CAA4B,IAA5B,CAAiC,YAAjC;AACA,EAAA,WAAO,IAAP;AACD,EAAA,GA/B0B;;AAiC3B,EAAA,OAAK,+CAA2C;AAC9C,EAAA,WAAO,KAAK,IAAL,CAAU,KAAV,CAAgB,IAAhB,EAAsB,SAAtB,CAAP;AACD,EAAA,GAnC0B;;AAqC3B,EAAA,SAAO,0DAAoD;AACzD,EAAA,QAAI,eAAe,GAAG,KAAH,CAAS,KAAT,CAAe,SAAf,CAAnB;AACA,EAAA,QAAI,UAAe,aAAa,GAAb,EAAnB;AACA,EAAA,QAAI,YAAe,aAAa,GAAb,EAAnB;;AAEA,EAAA,QAAI,OAAO,OAAP,KAAmB,WAAvB,EAAoC;AAClC,EAAA,YAAM,IAAI,KAAJ,kCAAyC,OAAzC,CAAN;AACD,EAAA;;AAED,EAAA,QAAI,OAAO,OAAP,KAAmB,UAAnB,IAAiC,OAAO,SAAP,KAAqB,WAA1D,EAAuE;AACrE,EAAA,YAAM,IAAI,KAAJ,CAAU,8DAAV,CAAN;AACD,EAAA;;AAED,EAAA,QAAI,aAAa,MAAb,KAAwB,CAA5B,EAA+B;AAC7B,EAAA,qBAAe,CAAC,KAAK,KAAN,CAAf;AACD,EAAA;;AAED,EAAA,SAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,aAAa,MAAjC,EAAyC,GAAzC,EAA8C;AAC5C,EAAA,UAAI,aAAa,aAAa,CAAb,CAAjB;AACA,EAAA,UAAI,eAAe,KAAK,KAAxB,EAA+B;AAC7B,EAAA,aAAK,UAAL,CAAgB,gBAAhB,CAAiC,UAAjC,EAA6C,KAAK,KAAlD;AACD,EAAA;AACF,EAAA;;AAED,EAAA,aAAS,UAAT,CAAoB,KAApB,EAA2B,IAA3B,EAAiC,MAAjC,EAAyC;AACvC,EAAA,UAAI,aAAa,cAAc,MAAd,EAAsB,YAAtB,CAAjB;AACA,EAAA,aAAO,UAAU,KAAV,CAAgB,IAAhB,EAAsB,WAAW,MAAX,CAAkB,CAAC,IAAD,EAAO,MAAP,CAAlB,CAAtB,CAAP;AACD,EAAA;;AAED,EAAA,QAAI,aAAa,KAAK,WAAL,CAAiB,KAAjB,EAAjB;AACA,EAAA,QAAI,wBAAwB,KAAK,sBAAL,CAA4B,KAA5B,EAA5B;;AAEA,EAAA,aAAS,wBAAT,CAAkC,KAAlC,EAAyC,IAAzC,EAA+C,MAA/C,EAAuD;AACrD,EAAA,aAAO,IAAI,WAAW,GAAX,CAAe,UAAS,SAAT,EAAoB,CAApB,EAAuB;AAC/C,EAAA,YAAI,eAAe,sBAAsB,CAAtB,CAAnB;AACA,EAAA,YAAI,aAAa,cAAc,MAAd,EAAsB,YAAtB,CAAjB;AACA,EAAA,eAAO,UAAU,KAAV,CAAgB,IAAhB,EAAsB,WAAW,MAAX,CAAkB,CAAC,IAAD,EAAO,MAAP,CAAlB,CAAtB,CAAP;AACD,EAAA,OAJU,CAAJ,EAIH,IAJG,CAIE,UAAS,OAAT,EAAkB;AACzB,EAAA,aAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,QAAQ,MAA5B,EAAoC,GAApC,EAAyC;;AAEvC,EAAA,cAAI,CAAC,QAAQ,CAAR,CAAL,EAAiB;AACf,EAAA,mBAAO,IAAP;AACD,EAAA;AACF,EAAA;;AAED,EAAA,eAAO,WAAW,KAAX,EAAkB,IAAlB,EAAwB,MAAxB,CAAP;AACD,EAAA,OAbM,CAAP;AAcD,EAAA;;AAED,EAAA,SAAK,UAAL,CAAgB,aAAhB,CACE,KAAK,KADP,EAEE,aAAa,wBAAb,GAAwC,UAF1C,EAGE,OAHF;AAKA,EAAA,WAAO,IAAP;AACD,EAAA,GA5F0B;;AA8F3B,EAAA,SAAO,iBAAW;AAChB,EAAA,WAAO,KAAK,UAAZ;AACD,EAAA;AAhG0B,EAAA,CAA7B;;AAmGA,EAAA,iBAAiB,cAAjB,GAAkC,UAAS,IAAT,EAAe,EAAf,EAAmB;AACnD,EAAA,OAAK,SAAL,CAAe,IAAf,IAAuB,YAAW;AAChC,EAAA,OAAG,KAAH,CAAS,IAAT,EAAe,SAAf;AACA,EAAA,WAAO,IAAP;AACD,EAAA,GAHD;AAIA,EAAA,SAAO,IAAP;AACD,EAAA,CAND;;AAQA,EAAA,iBAAiB,gBAAjB,GAAoC,UAAS,IAAT,EAAe;AACjD,EAAA,SAAO,KAAK,SAAL,CAAe,IAAf,CAAP;AACA,EAAA,SAAO,IAAP;AACD,EAAA,CAHD;;EChHA,SAAS,OAAT,CAAiB,KAAjB,EAAwB;AACtB,EAAA,MAAI,OAAO,KAAP,KAAiB,QAArB,EAA+B;AAC7B,EAAA,YAAQ,MAAM,IAAN,EAAR;AACD,EAAA;;AAED,EAAA,SAAO,UAAU,EAAV,IAAgB,UAAU,IAA1B,IAAkC,UAAU,SAAnD;AACD,EAAA;;AAED,EAAA,IAAM,eAAe,gBAArB;;AAEA,EAAA,IAAM,QAAQ,6JAAd;;AAEA,EAAA,SAAS,UAAT,CAAoB,OAApB,EAA6B;AAC3B,EAAA,MAAI,CAAC,OAAL,EAAc;AACZ,EAAA,cAAU,EAAV;AACD,EAAA;;AAED,EAAA,SAAO,UAAS,KAAT,EAAgB;AACrB,EAAA,QAAI,OAAO,KAAP,KAAiB,QAArB,EAA+B;AAC7B,EAAA,cAAQ,MAAM,IAAN,EAAR;AACD,EAAA;;AAED,EAAA,QAAI,QAAQ,gBAAZ,EAA8B;AAC5B,EAAA,UAAI,CAAC,aAAa,IAAb,CAAkB,KAAlB,CAAL,EAA+B;AAC7B,EAAA,eAAO,KAAP;AACD,EAAA;AACF,EAAA;;AAED,EAAA,WAAO,MAAM,IAAN,CAAW,KAAX,CAAP;AACD,EAAA,GAZD;AAaD,EAAA;;AAED,EAAA,SAAS,cAAT,CAAwB,SAAxB,EAAmC;AACjC,EAAA,MAAI,cAAc,IAAd,IAAsB,cAAc,SAAxC,EAAmD;AACjD,EAAA,UAAM,IAAI,KAAJ,CAAU,2BAAV,CAAN;AACD,EAAA;;AAED,EAAA,SAAO,UAAS,KAAT,EAAgB;AACrB,EAAA,QAAI,UAAU,IAAV,IAAkB,UAAU,SAAhC,EAA2C;AACzC,EAAA,aAAO,MAAM,MAAN,IAAgB,SAAvB;AACD,EAAA,KAFD,MAEO;AACL,EAAA,aAAO,KAAP;AACD,EAAA;AACF,EAAA,GAND;AAOD,EAAA;;AAED,EAAA,SAAS,cAAT,CAAwB,SAAxB,EAAmC;AACjC,EAAA,MAAI,cAAc,IAAd,IAAsB,cAAc,SAAxC,EAAmD;AACjD,EAAA,UAAM,IAAI,KAAJ,CAAU,2BAAV,CAAN;AACD,EAAA;;AAED,EAAA,SAAO,UAAS,KAAT,EAAgB;AACrB,EAAA,QAAI,UAAU,IAAV,IAAkB,UAAU,SAAhC,EAA2C;AACzC,EAAA,aAAO,MAAM,MAAN,IAAgB,SAAvB;AACD,EAAA,KAFD,MAEO;AACL,EAAA,aAAO,KAAP;AACD,EAAA;AACF,EAAA,GAND;AAOD,EAAA;;AAED,EAAA,SAASA,UAAT,GAAoB;AAClB,EAAA,mBAAiB,cAAjB,CAAgC,UAAhC,EAA4C,UAAS,OAAT,EAAkB;AAC5D,EAAA,SAAK,KAAL,CAAW,OAAX,EAAoB,OAApB;AACD,EAAA,GAFD;;AAIA,EAAA,mBAAiB,cAAjB,CAAgC,UAAhC,EAA4C,YAAW;AACrD,EAAA,SAAK,IAAL,CAAU,OAAV;AACD,EAAA,GAFD;;AAIA,EAAA,mBAAiB,cAAjB,CAAgC,OAAhC,EAAyC,UAAS,OAAT,EAAkB,OAAlB,EAA2B;AAClE,EAAA,SAAK,KAAL,CAAW,WAAW,OAAX,CAAX,EAAgC,OAAhC;AACD,EAAA,GAFD;;AAIA,EAAA,mBAAiB,cAAjB,CAAgC,WAAhC,EAA6C,UAAS,SAAT,EAAoB,OAApB,EAA6B;AACxE,EAAA,SAAK,KAAL,CAAW,eAAe,SAAf,CAAX,EAAsC,OAAtC;AACD,EAAA,GAFD;;AAIA,EAAA,mBAAiB,cAAjB,CAAgC,WAAhC,EAA6C,UAAS,SAAT,EAAoB,OAApB,EAA6B;AACxE,EAAA,SAAK,KAAL,CAAW,eAAe,SAAf,CAAX,EAAsC,OAAtC;AACD,EAAA,GAFD;AAGD,EAAA;;AC5EDC;;AAEA,EAAA,SAAS,SAAT,GAAqB;AACnB,EAAA,SAAO,IAAI,gBAAJ,EAAP;AACD,EAAA;;AAED,EAAA,SAAS,QAAT,GAAoB;AAClB,EAAA,mBAAiB,cAAjB,CAAgC,KAAhC,CAAsC,gBAAtC,EAAwD,SAAxD;AACD,EAAA;;AAED,EAAA,SAAS,UAAT,GAAsB;AACpB,EAAA,mBAAiB,gBAAjB,CAAkC,KAAlC,CAAwC,gBAAxC,EAA0D,SAA1D;AACD,EAAA;;AAED,EAAA,IAAI,UAAU;AACZ,EAAA,QAAM;AACJ,EAAA,aAAS,OADL;AAEJ,EAAA,gBAAY,UAFR;AAGJ,EAAA,oBAAgB,cAHZ;AAIJ,EAAA,oBAAgB,cAJZ;AAKJ,EAAA,cAAUA;AALN,EAAA,GADM;AAQZ,EAAA,YAAU,QARE;AASZ,EAAA,cAAY;AATA,EAAA,CAAd;;AAYA,EAAA,SAAS,SAAT,CAAmB,GAAnB,EAAwB,KAAxB,EAA+B;AAC7B,EAAA,SAAO,GAAP,IAAc,KAAd;AACD,EAAA;;AAED,EAAA,UAAU,OAAV,EAAmB,YAAM;AACvB,EAAA,MAAI,UAAU,OAAO,SAAP,CAAd;AACA,EAAA,MAAI,gBAAJ;AACA,EAAA,MAAI,eAAJ;AACA,EAAA,MAAI,UAAU,IAAI,OAAJ,CAAY,UAAC,GAAD,EAAM,GAAN,EAAc;AACtC,EAAA,cAAU,GAAV;AACA,EAAA,aAAS,GAAT;AACD,EAAA,GAHa,CAAd;;AAKA,EAAA,MAAI,CAAC,OAAD,IAAY,CAAC,MAAjB,EAAyB;AACvB,EAAA,UAAM,IAAI,KAAJ,CAAU,gDAAV,CAAN;AACD,EAAA;;AAED,EAAA,SAAO,EAAE,gBAAF,EAAW,gBAAX,EAAoB,cAApB,EAAP;AACD,EAAA,CAdD;;AAgBA,EAAA,SAAS,YAAT,CAAsB,QAAtB,EAAgC;AAC9B,EAAA,MAAI,UAAU,YAAd;AACA,EAAA,SAAO,IAAI,OAAJ,CAAY,QAAZ,CAAP;AACD,EAAA;;AAED,EAAA,aAAa,GAAb,GAAmB,YAAkB;AAAA,EAAA;;AACnC,EAAA,SAAO,6BAAa,GAAb,8BAAP;AACD,EAAA,CAFD;;AAIA,EAAA,aAAa,IAAb,GAAoB,YAAkB;AAAA,EAAA;;AACpC,EAAA,SAAO,8BAAa,IAAb,+BAAP;AACD,EAAA,CAFD;;AAIA,EAAA,aAAa,OAAb,GAAuB,YAAkB;AAAA,EAAA;;AACvC,EAAA,SAAO,8BAAa,OAAb,+BAAP;AACD,EAAA,CAFD;;AAIA,EAAA,aAAa,MAAb,GAAsB,YAAkB;AAAA,EAAA;;AACtC,EAAA,SAAO,8BAAa,MAAb,+BAAP;AACD,EAAA,CAFD;;AAIA,EAAA,SAAS,UAAT,GAAsB;AACpB,EAAA,MAAI,OAAO,OAAO,MAAP,CAAX;;;AAGA,EAAA,MAAI,OAAO,IAAP,KAAgB,WAApB,EAAiC;AAC/B,EAAA,cAAU,SAAV,EAAqB,KAAK,OAA1B;AACA,EAAA,SACE,sKADF;AAKA,EAAA,WAAO,KAAK,OAAZ;AACD,EAAA;;AAED,EAAA,MAAI,OAAO,OAAP,KAAmB,UAAvB,EAAmC;AACjC,EAAA,QAAI;AACF,EAAA,UAAI,WAAU,QAAQ,MAAR,EAAgB,OAA9B;AACA,EAAA,gBAAU,SAAV,EAAqB,QAArB;AACA,EAAA,WACE,4LADF;AAKA,EAAA,aAAO,QAAP;AACD,EAAA,KATD,CASE,OAAO,GAAP,EAAY;;AAEb,EAAA;AACF,EAAA;;AAED,EAAA,MAAI,OAAO,OAAP,KAAmB,UAAvB,EAAmC;AACjC,EAAA,cAAU,SAAV,EAAqB,OAArB;AACA,EAAA,WAAO,OAAP;AACD,EAAA;;AAED,EAAA,QAAM,IAAI,KAAJ,CACJ,uIADI,CAAN;AAID,EAAA;;;AAGD,EAAA,UAAU,SAAV,EAAqB,YAArB;AACA,EAAA,UAAU,MAAV,EAAkB,QAAQ,IAAR,CAAa,IAAb,CAAkB,OAAlB,CAAlB;AACA,EAAA,UAAU,KAAV,EAAiB,UAAC,MAAD,EAAS,QAAT,EAAsB;AACrC,EAAA,MAAI,OAAO,OAAO,MAAP,CAAX;;AAEA,EAAA,YAAU,KAAV,EAAiB,GAAjB;AACA,EAAA,OACE,qNADF;AAKA,EAAA,SAAO,IAAI,MAAJ,EAAY,QAAZ,CAAP;AACD,EAAA,CAVD;;;;;;;"} | ||
| {"version":3,"file":"lgtm.js","sources":["../src/lgtm/config.js","../src/lgtm/utils.js","../src/lgtm/object_validator.js","../src/lgtm/validation.js","../src/lgtm/validator_builder.js","../src/lgtm/helpers/core.js","../src/lgtm.js"],"sourcesContent":["export default {};\n","import config from './config.js';\n\n/**\n * Iteration\n */\n\nexport function forEach(iterable, iterator) {\n if (typeof iterable.forEach === 'function') {\n iterable.forEach(iterator);\n } else if ({}.toString.call(iterable) === '[object Object]') {\n let hasOwnProp = {}.hasOwnProperty;\n for (let key in iterable) {\n if (hasOwnProp.call(iterable, key)) {\n iterator(iterable[key], key);\n }\n }\n } else {\n for (let i = 0; i < iterable.length; i++) {\n iterator(iterable[i], i);\n }\n }\n}\n\nexport function keys(object) {\n return Object.getOwnPropertyNames(object);\n}\n\n/**\n * Property access\n */\n\nexport function get(object, property) {\n if (object === null || object === undefined) {\n return;\n } else if (typeof object.get === 'function') {\n return object.get(property);\n } else {\n return object[property];\n }\n}\n\nexport function getProperties(object, properties) {\n let { get } = config;\n return properties.map(prop => get(object, prop));\n}\n\n/**\n * Array manipulation\n */\n\nexport function contains(array, object) {\n return array.indexOf(object) > -1;\n}\n\nexport function uniq(array) {\n let result = [];\n\n for (let i = 0; i < array.length; i++) {\n let item = array[i];\n if (!contains(result, item)) {\n result.push(item);\n }\n }\n\n return result;\n}\n\n/**\n * Promises\n */\n\nexport function resolve(thenable) {\n let { Promise } = config;\n return new Promise(accept => accept(thenable));\n}\n\nexport function all(thenables) {\n let { Promise } = config;\n return Promise.all(thenables);\n}\n","import config from './config.js';\nimport { all, resolve, contains, keys, uniq } from './utils.js';\n\nexport default class ObjectValidator {\n _validations = {};\n _dependencies = {};\n\n constructor(...validations) {\n validations.forEach(validation => validation.addToValidator(this));\n }\n\n addValidation(attr, fn, message) {\n let list = this._validations[attr];\n\n if (!list) {\n list = this._validations[attr] = [];\n }\n\n list.push([fn, message]);\n }\n\n // e.g. spouseName (dependentAttribute) depends on maritalStatus (parentAttribute)\n addDependentsFor(parentAttribute, ...dependentAttributes) {\n let dependentsForParent = this._dependencies[parentAttribute];\n\n if (!dependentsForParent) {\n dependentsForParent = this._dependencies[parentAttribute] = [];\n }\n\n for (let i = 0; i < dependentAttributes.length; i++) {\n let attr = dependentAttributes[i];\n if (!contains(dependentsForParent, attr)) {\n dependentsForParent.push(attr);\n }\n }\n }\n\n attributes() {\n return uniq(keys(this._validations).concat(keys(this._dependencies)));\n }\n\n validate(object, ...attributes) {\n let callback = null;\n\n if (typeof attributes[attributes.length - 1] !== 'string') {\n callback = attributes.pop();\n }\n\n if (attributes.length === 0) {\n attributes = keys(this._validations);\n }\n\n let validationPromises = [];\n let alreadyValidating = attributes.slice();\n for (let i = 0; i < attributes.length; i++) {\n let attr = attributes[i];\n validationPromises = validationPromises.concat(\n this._validateAttribute(object, attr, alreadyValidating)\n );\n }\n\n let self = this;\n let promise = all(validationPromises).then(\n results => {\n results = this._collectResults(results);\n if (callback) {\n callback(null, results);\n }\n return results;\n },\n err => {\n if (callback) {\n callback(err);\n }\n throw err;\n }\n );\n\n if (!callback) {\n return promise;\n }\n }\n\n _validateAttribute(object, attr, alreadyValidating) {\n let value = config.get(object, attr);\n let validations = this._validations[attr];\n let results = [];\n\n if (validations) {\n validations.forEach(function(pair) {\n let fn = pair[0];\n let message = pair[1];\n\n let promise = resolve()\n .then(() => fn(value, attr, object))\n .then(isValid => [attr, isValid ? null : message]);\n\n results.push(promise);\n });\n } else if (contains(this.attributes(), attr)) {\n results.push([attr, null]);\n }\n\n let dependents = this._getDependentsFor(attr);\n for (let i = 0; i < dependents.length; i++) {\n let dependent = dependents[i];\n if (alreadyValidating.indexOf(dependent) < 0) {\n alreadyValidating.push(dependent);\n results = results.concat(\n this._validateAttribute(object, dependent, alreadyValidating)\n );\n }\n }\n\n return results;\n }\n\n _collectResults(results) {\n let result = {\n valid: true,\n errors: {}\n };\n\n for (let i = 0; i < results.length; i++) {\n if (!results[i]) {\n continue;\n }\n\n let attr = results[i][0];\n let message = results[i][1];\n let messages = result.errors[attr];\n\n if (!messages) {\n messages = result.errors[attr] = [];\n }\n\n if (message) {\n messages.push(message);\n result.valid = false;\n }\n }\n\n return result;\n }\n\n // e.g. getDependents(\"maritalStatus\") # => [\"spouseName\"]\n _getDependentsFor(parentAttribute) {\n return (this._dependencies[parentAttribute] || []).slice();\n }\n}\n","import { getProperties, all } from './utils.js';\n\nexport default class Validation {\n _attr = null;\n _conditions = [];\n _subvalidations = [];\n _dependencies = [];\n\n constructor(attr) {\n this._attr = attr;\n }\n\n when(...dependencies /*, predicate */) {\n const predicate = dependencies.pop();\n\n if (dependencies.length === 0) {\n dependencies = [this._attr];\n }\n\n this._conditions.push({\n predicate,\n dependencies\n });\n\n return this;\n }\n\n and(...args) {\n return this.when(...args);\n }\n\n using(...dependencies /*, predicate, message */) {\n const message = dependencies.pop();\n const predicate = dependencies.pop();\n\n if (typeof message === 'undefined') {\n throw new Error(`expected a message but got: ${message}`);\n }\n\n if (typeof message === 'function' && typeof predicate === 'undefined') {\n throw new Error(\n 'missing expected argument `message` after predicate function'\n );\n }\n\n if (dependencies.length === 0) {\n dependencies = [this._attr];\n }\n\n function validation(value, attr, object) {\n const properties = getProperties(object, dependencies);\n return predicate(...properties, attr, object);\n }\n\n const conditions = this._conditions.slice();\n\n function validationWithConditions(value, attr, object) {\n return all(\n conditions.map(({ predicate, dependencies }) => {\n const properties = getProperties(object, dependencies);\n return predicate(...properties, attr, object);\n })\n ).then(results => {\n for (let i = 0; i < results.length; i += 1) {\n // a condition resolved to a falsy value; return as valid\n if (!results[i]) {\n return true;\n }\n }\n\n // all conditions resolved to truthy values; continue with validation\n return validation(value, attr, object);\n });\n }\n\n this._subvalidations.push({\n dependencies,\n validation: conditions ? validationWithConditions : validation,\n message\n });\n\n return this;\n }\n\n addToValidator(validator) {\n this.dependencies().forEach(dependency => {\n validator.addDependentsFor(dependency, this._attr);\n });\n\n this._subvalidations.forEach(subvalidation => {\n validator.addValidation(\n this._attr,\n subvalidation.validation,\n subvalidation.message\n );\n });\n }\n\n dependencies() {\n const dependencies = [];\n\n this._conditions.forEach(condition => {\n condition.dependencies.forEach(dependency => {\n dependencies.push(dependency);\n });\n });\n\n this._subvalidations.forEach(subvalidation => {\n subvalidation.dependencies.forEach(dependency => {\n dependencies.push(dependency);\n });\n });\n\n return dependencies;\n }\n}\n","import ObjectValidator from './object_validator.js';\nimport Validation from './validation';\n\nexport default class ValidatorBuilder {\n _validations = null;\n _validation = null;\n\n constructor(...validations) {\n this._validations = validations;\n }\n\n validates(attr) {\n this._validation = new Validation(attr);\n this._validations.push(this._validation);\n return this;\n }\n\n when(/* ...dependencies, condition */) {\n this._validation.when(...arguments);\n return this;\n }\n\n and(/* ...dependencies, condition */) {\n this._validation.and(...arguments);\n return this;\n }\n\n using(/* ...dependencies, predicate, message */) {\n this._validation.using(...arguments);\n return this;\n }\n\n build() {\n return new ObjectValidator(...this._validations);\n }\n\n static registerHelper(name, fn) {\n this.prototype[name] = function() {\n fn.apply(this._validation, arguments);\n return this;\n };\n\n Validation.prototype[name] = function() {\n fn.apply(this, arguments);\n return this;\n };\n\n return null;\n }\n\n static unregisterHelper(name) {\n delete this.prototype[name];\n delete Validation.prototype[name];\n return null;\n }\n}\n","import ValidatorBuilder from '../validator_builder.js';\n\nexport function present(value) {\n if (typeof value === 'string') {\n value = value.trim();\n }\n\n return value !== '' && value !== null && value !== undefined;\n}\n\nconst STRICT_CHARS = /^[\\x20-\\x7F]*$/;\n// http://stackoverflow.com/a/46181/11236\nconst EMAIL = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\nexport function checkEmail(options = {}) {\n return function(value) {\n if (typeof value === 'string') {\n value = value.trim();\n }\n\n if (options.strictCharacters) {\n if (!STRICT_CHARS.test(value)) {\n return false;\n }\n }\n\n return EMAIL.test(value);\n };\n}\n\nexport function checkMinLength(minLength) {\n if (minLength === null || minLength === undefined) {\n throw new Error('must specify a min length');\n }\n\n return function(value) {\n if (value !== null && value !== undefined) {\n return value.length >= minLength;\n } else {\n return false;\n }\n };\n}\n\nexport function checkMaxLength(maxLength) {\n if (maxLength === null || maxLength === undefined) {\n throw new Error('must specify a max length');\n }\n\n return function(value) {\n if (value !== null && value !== undefined) {\n return value.length <= maxLength;\n } else {\n return false;\n }\n };\n}\n\nexport function register() {\n ValidatorBuilder.registerHelper('required', function(message) {\n this.using(present, message);\n });\n\n ValidatorBuilder.registerHelper('optional', function() {\n this.when(present);\n });\n\n ValidatorBuilder.registerHelper('email', function(message, options) {\n this.using(checkEmail(options), message);\n });\n\n ValidatorBuilder.registerHelper('minLength', function(minLength, message) {\n this.using(checkMinLength(minLength), message);\n });\n\n ValidatorBuilder.registerHelper('maxLength', function(maxLength, message) {\n this.using(checkMaxLength(maxLength), message);\n });\n}\n","import ObjectValidator from './lgtm/object_validator.js';\nimport Validation from './lgtm/validation.js';\nimport ValidatorBuilder from './lgtm/validator_builder.js';\nimport config from './lgtm/config.js';\nimport { get } from './lgtm/utils.js';\nimport {\n present,\n checkEmail,\n checkMinLength,\n checkMaxLength,\n register as core_register\n} from './lgtm/helpers/core.js';\n\ncore_register();\n\nfunction validator(...validations) {\n return new ValidatorBuilder(...validations);\n}\n\nfunction validates(attr) {\n return new Validation(attr);\n}\n\nfunction register() {\n ValidatorBuilder.registerHelper(...arguments);\n}\n\nfunction unregister() {\n ValidatorBuilder.unregisterHelper(...arguments);\n}\n\nlet helpers = {\n core: {\n present,\n checkEmail,\n checkMinLength,\n checkMaxLength,\n register: core_register\n },\n register,\n unregister\n};\n\nfunction configure(key, value) {\n config[key] = value;\n}\n\nconfigure('defer', () => {\n let Promise = config['Promise'];\n let resolve;\n let reject;\n let promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n if (!resolve || !reject) {\n throw new Error('Configured promise does not behave as expected');\n }\n\n return { promise, resolve, reject };\n});\n\nfunction PromiseProxy(callback) {\n let Promise = getPromise();\n return new Promise(callback);\n}\n\nPromiseProxy.all = (...args) => getPromise().all(...args);\n\nPromiseProxy.race = (...args) => getPromise().race(...args);\n\nPromiseProxy.resolve = (...args) => getPromise().resolve(...args);\n\nPromiseProxy.reject = (...args) => getPromise().reject(...args);\n\nfunction getPromise() {\n let warn = config['warn'];\n\n /* global Promise, RSVP, require */\n if (typeof RSVP !== 'undefined') {\n configure('Promise', RSVP.Promise);\n warn(\n `Implicitly using RSVP.Promise. This will be removed in LGTM 2.0. ` +\n `Instead, use 'LGTM.configure(\"Promise\", RSVP.Promise)' to ` +\n `continue using RSVP promises.`\n );\n return RSVP.Promise;\n }\n\n if (typeof require === 'function') {\n try {\n let { Promise } = require('rsvp');\n configure('Promise', Promise);\n warn(\n `Implicitly using require(\"rsvp\").Promise. This will be removed in LGTM 2.0. ` +\n `Instead, use 'LGTM.configure(\"Promise\", require(\"rsvp\").Promise)' to ` +\n `continue using RSVP promises.`\n );\n return Promise;\n } catch (err) {\n // Ignore errors, just try built-in Promise or fail.\n }\n }\n\n if (typeof Promise === 'function') {\n configure('Promise', Promise);\n return Promise;\n }\n\n throw new Error(\n `'Promise' could not be found. Configure LGTM with your promise library using ` +\n `e.g. 'LGTM.configure(\"Promise\", RSVP.Promise)'.`\n );\n}\n\n/* global console */\nconfigure('Promise', PromiseProxy);\nconfigure('warn', console.warn.bind(console)); // eslint-disable-line no-console\nconfigure('get', (object, property) => {\n let warn = config['warn'];\n\n configure('get', get);\n warn(\n `Implicitly using 'get' implementation that uses a 'get' method when available. ` +\n `This will be removed in LGTM 2.0. Instead, use e.g. 'LGTM.configure(\"get\", Ember.get)' ` +\n `if you rely on this behavior.`\n );\n return get(object, property);\n});\n\nexport { configure, validator, validates, helpers, ObjectValidator };\n"],"names":["keys","object","Object","getOwnPropertyNames","get","property","undefined","getProperties","properties","config","map","prop","contains","array","indexOf","uniq","result","i","length","item","push","resolve","thenable","Promise","accept","all","thenables","ObjectValidator","_validations","_dependencies","validations","forEach","validation","addToValidator","attr","fn","message","list","parentAttribute","dependentsForParent","dependentAttributes","concat","attributes","callback","pop","validationPromises","alreadyValidating","slice","_validateAttribute","promise","then","_collectResults","results","err","value","pair","isValid","dependents","_getDependentsFor","dependent","messages","errors","valid","Validation","_attr","_conditions","_subvalidations","dependencies","predicate","when","Error","conditions","validationWithConditions","validator","addDependentsFor","dependency","addValidation","subvalidation","ValidatorBuilder","_validation","arguments","and","using","name","prototype","apply","present","trim","STRICT_CHARS","EMAIL","checkEmail","options","strictCharacters","test","checkMinLength","minLength","checkMaxLength","maxLength","register","registerHelper","core_register","validates","unregister","unregisterHelper","helpers","configure","key","reject","res","rej","PromiseProxy","getPromise","race","warn","RSVP","require","console","bind"],"mappings":"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"} |
+522
-229
@@ -7,29 +7,6 @@ var config = {}; | ||
| function forEach(iterable, iterator) { | ||
| if (typeof iterable.forEach === 'function') { | ||
| iterable.forEach(iterator); | ||
| } else if ({}.toString.call(iterable) === '[object Object]') { | ||
| var hasOwnProp = {}.hasOwnProperty; | ||
| for (var key in iterable) { | ||
| if (hasOwnProp.call(iterable, key)) { | ||
| iterator(iterable[key], key); | ||
| } | ||
| } | ||
| } else { | ||
| for (var i = 0; i < iterable.length; i++) { | ||
| iterator(iterable[i], i); | ||
| } | ||
| } | ||
| } | ||
| function keys(object) { | ||
| if (Object.getOwnPropertyNames) { | ||
| return Object.getOwnPropertyNames(object); | ||
| } else { | ||
| var result = []; | ||
| forEach(object, function (key) { | ||
| result.push(key); | ||
| }); | ||
| return result; | ||
| } | ||
| return Object.getOwnPropertyNames(object); | ||
| } | ||
@@ -98,264 +75,572 @@ | ||
| function ObjectValidator() { | ||
| this._validations = {}; | ||
| this._dependencies = {}; | ||
| } | ||
| var asyncGenerator = function () { | ||
| function AwaitValue(value) { | ||
| this.value = value; | ||
| } | ||
| ObjectValidator.prototype = { | ||
| _validations: null, | ||
| _dependencies: null, | ||
| function AsyncGenerator(gen) { | ||
| var front, back; | ||
| addValidation: function addValidation(attr, fn, message) { | ||
| var list = this._validations[attr]; | ||
| function send(key, arg) { | ||
| return new Promise(function (resolve, reject) { | ||
| var request = { | ||
| key: key, | ||
| arg: arg, | ||
| resolve: resolve, | ||
| reject: reject, | ||
| next: null | ||
| }; | ||
| if (!list) { | ||
| list = this._validations[attr] = []; | ||
| if (back) { | ||
| back = back.next = request; | ||
| } else { | ||
| front = back = request; | ||
| resume(key, arg); | ||
| } | ||
| }); | ||
| } | ||
| list.push([fn, message]); | ||
| }, | ||
| function resume(key, arg) { | ||
| try { | ||
| var result = gen[key](arg); | ||
| var value = result.value; | ||
| // e.g. spouseName (dependentAttribute) depends on maritalStatus (parentAttribute) | ||
| addDependentsFor: function addDependentsFor() /* parentAttribute, ...dependentAttributes */{ | ||
| var dependentAttributes = [].slice.apply(arguments); | ||
| var parentAttribute = dependentAttributes.shift(); | ||
| if (value instanceof AwaitValue) { | ||
| Promise.resolve(value.value).then(function (arg) { | ||
| resume("next", arg); | ||
| }, function (arg) { | ||
| resume("throw", arg); | ||
| }); | ||
| } else { | ||
| settle(result.done ? "return" : "normal", result.value); | ||
| } | ||
| } catch (err) { | ||
| settle("throw", err); | ||
| } | ||
| } | ||
| var dependentsForParent = this._dependencies[parentAttribute]; | ||
| function settle(type, value) { | ||
| switch (type) { | ||
| case "return": | ||
| front.resolve({ | ||
| value: value, | ||
| done: true | ||
| }); | ||
| break; | ||
| if (!dependentsForParent) { | ||
| dependentsForParent = this._dependencies[parentAttribute] = []; | ||
| } | ||
| case "throw": | ||
| front.reject(value); | ||
| break; | ||
| for (var i = 0; i < dependentAttributes.length; i++) { | ||
| var attr = dependentAttributes[i]; | ||
| if (!contains(dependentsForParent, attr)) { | ||
| dependentsForParent.push(attr); | ||
| default: | ||
| front.resolve({ | ||
| value: value, | ||
| done: false | ||
| }); | ||
| break; | ||
| } | ||
| front = front.next; | ||
| if (front) { | ||
| resume(front.key, front.arg); | ||
| } else { | ||
| back = null; | ||
| } | ||
| } | ||
| }, | ||
| attributes: function attributes() { | ||
| return uniq(keys(this._validations).concat(keys(this._dependencies))); | ||
| }, | ||
| this._invoke = send; | ||
| validate: function validate() /* object, attributes..., callback */{ | ||
| var attributes = [].slice.apply(arguments); | ||
| var object = attributes.shift(); | ||
| var callback = attributes.pop(); | ||
| var self = this; | ||
| if (typeof gen.return !== "function") { | ||
| this.return = undefined; | ||
| } | ||
| } | ||
| if (typeof callback === 'string') { | ||
| attributes.push(callback); | ||
| callback = null; | ||
| if (typeof Symbol === "function" && Symbol.asyncIterator) { | ||
| AsyncGenerator.prototype[Symbol.asyncIterator] = function () { | ||
| return this; | ||
| }; | ||
| } | ||
| AsyncGenerator.prototype.next = function (arg) { | ||
| return this._invoke("next", arg); | ||
| }; | ||
| AsyncGenerator.prototype.throw = function (arg) { | ||
| return this._invoke("throw", arg); | ||
| }; | ||
| AsyncGenerator.prototype.return = function (arg) { | ||
| return this._invoke("return", arg); | ||
| }; | ||
| return { | ||
| wrap: function (fn) { | ||
| return function () { | ||
| return new AsyncGenerator(fn.apply(this, arguments)); | ||
| }; | ||
| }, | ||
| await: function (value) { | ||
| return new AwaitValue(value); | ||
| } | ||
| }; | ||
| }(); | ||
| if (attributes.length === 0) { | ||
| attributes = keys(this._validations); | ||
| var classCallCheck = function (instance, Constructor) { | ||
| if (!(instance instanceof Constructor)) { | ||
| throw new TypeError("Cannot call a class as a function"); | ||
| } | ||
| }; | ||
| var createClass = function () { | ||
| function defineProperties(target, props) { | ||
| for (var i = 0; i < props.length; i++) { | ||
| var descriptor = props[i]; | ||
| descriptor.enumerable = descriptor.enumerable || false; | ||
| descriptor.configurable = true; | ||
| if ("value" in descriptor) descriptor.writable = true; | ||
| Object.defineProperty(target, descriptor.key, descriptor); | ||
| } | ||
| } | ||
| var validationPromises = []; | ||
| var alreadyValidating = attributes.slice(); | ||
| for (var i = 0; i < attributes.length; i++) { | ||
| var attr = attributes[i]; | ||
| validationPromises = validationPromises.concat(this._validateAttribute(object, attr, alreadyValidating)); | ||
| return function (Constructor, protoProps, staticProps) { | ||
| if (protoProps) defineProperties(Constructor.prototype, protoProps); | ||
| if (staticProps) defineProperties(Constructor, staticProps); | ||
| return Constructor; | ||
| }; | ||
| }(); | ||
| var toConsumableArray = function (arr) { | ||
| if (Array.isArray(arr)) { | ||
| for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; | ||
| return arr2; | ||
| } else { | ||
| return Array.from(arr); | ||
| } | ||
| }; | ||
| var ObjectValidator = function () { | ||
| function ObjectValidator() { | ||
| var _this = this; | ||
| classCallCheck(this, ObjectValidator); | ||
| this._validations = {}; | ||
| this._dependencies = {}; | ||
| for (var _len = arguments.length, validations = Array(_len), _key = 0; _key < _len; _key++) { | ||
| validations[_key] = arguments[_key]; | ||
| } | ||
| var promise = all(validationPromises).then(function (results) { | ||
| results = self._collectResults(results); | ||
| if (callback) { | ||
| callback(null, results); | ||
| validations.forEach(function (validation) { | ||
| return validation.addToValidator(_this); | ||
| }); | ||
| } | ||
| createClass(ObjectValidator, [{ | ||
| key: 'addValidation', | ||
| value: function addValidation(attr, fn, message) { | ||
| var list = this._validations[attr]; | ||
| if (!list) { | ||
| list = this._validations[attr] = []; | ||
| } | ||
| return results; | ||
| }, function (err) { | ||
| if (callback) { | ||
| callback(err); | ||
| list.push([fn, message]); | ||
| } | ||
| // e.g. spouseName (dependentAttribute) depends on maritalStatus (parentAttribute) | ||
| }, { | ||
| key: 'addDependentsFor', | ||
| value: function addDependentsFor(parentAttribute) { | ||
| var dependentsForParent = this._dependencies[parentAttribute]; | ||
| if (!dependentsForParent) { | ||
| dependentsForParent = this._dependencies[parentAttribute] = []; | ||
| } | ||
| throw err; | ||
| }); | ||
| if (!callback) { | ||
| return promise; | ||
| for (var _len2 = arguments.length, dependentAttributes = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { | ||
| dependentAttributes[_key2 - 1] = arguments[_key2]; | ||
| } | ||
| for (var i = 0; i < dependentAttributes.length; i++) { | ||
| var attr = dependentAttributes[i]; | ||
| if (!contains(dependentsForParent, attr)) { | ||
| dependentsForParent.push(attr); | ||
| } | ||
| } | ||
| } | ||
| }, | ||
| }, { | ||
| key: 'attributes', | ||
| value: function attributes() { | ||
| return uniq(keys(this._validations).concat(keys(this._dependencies))); | ||
| } | ||
| }, { | ||
| key: 'validate', | ||
| value: function validate(object) { | ||
| var _this2 = this; | ||
| _validateAttribute: function _validateAttribute(object, attr, alreadyValidating) { | ||
| var value = config.get(object, attr); | ||
| var validations = this._validations[attr]; | ||
| var results = []; | ||
| for (var _len3 = arguments.length, attributes = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { | ||
| attributes[_key3 - 1] = arguments[_key3]; | ||
| } | ||
| if (validations) { | ||
| validations.forEach(function (pair) { | ||
| var fn = pair[0]; | ||
| var message = pair[1]; | ||
| var callback = null; | ||
| var promise = resolve().then(function () { | ||
| return fn(value, attr, object); | ||
| }).then(function (isValid) { | ||
| return [attr, isValid ? null : message]; | ||
| }); | ||
| if (typeof attributes[attributes.length - 1] !== 'string') { | ||
| callback = attributes.pop(); | ||
| } | ||
| results.push(promise); | ||
| if (attributes.length === 0) { | ||
| attributes = keys(this._validations); | ||
| } | ||
| var validationPromises = []; | ||
| var alreadyValidating = attributes.slice(); | ||
| for (var i = 0; i < attributes.length; i++) { | ||
| var attr = attributes[i]; | ||
| validationPromises = validationPromises.concat(this._validateAttribute(object, attr, alreadyValidating)); | ||
| } | ||
| var promise = all(validationPromises).then(function (results) { | ||
| results = _this2._collectResults(results); | ||
| if (callback) { | ||
| callback(null, results); | ||
| } | ||
| return results; | ||
| }, function (err) { | ||
| if (callback) { | ||
| callback(err); | ||
| } | ||
| throw err; | ||
| }); | ||
| } else if (contains(this.attributes(), attr)) { | ||
| results.push([attr, null]); | ||
| } | ||
| var dependents = this._getDependentsFor(attr); | ||
| for (var i = 0; i < dependents.length; i++) { | ||
| var dependent = dependents[i]; | ||
| if (alreadyValidating.indexOf(dependent) < 0) { | ||
| alreadyValidating.push(dependent); | ||
| results = results.concat(this._validateAttribute(object, dependent, alreadyValidating)); | ||
| if (!callback) { | ||
| return promise; | ||
| } | ||
| } | ||
| }, { | ||
| key: '_validateAttribute', | ||
| value: function _validateAttribute(object, attr, alreadyValidating) { | ||
| var value = config.get(object, attr); | ||
| var validations = this._validations[attr]; | ||
| var results = []; | ||
| return results; | ||
| }, | ||
| if (validations) { | ||
| validations.forEach(function (pair) { | ||
| var fn = pair[0]; | ||
| var message = pair[1]; | ||
| _collectResults: function _collectResults(results) { | ||
| var result = { | ||
| valid: true, | ||
| errors: {} | ||
| }; | ||
| var promise = resolve().then(function () { | ||
| return fn(value, attr, object); | ||
| }).then(function (isValid) { | ||
| return [attr, isValid ? null : message]; | ||
| }); | ||
| for (var i = 0; i < results.length; i++) { | ||
| if (!results[i]) { | ||
| continue; | ||
| results.push(promise); | ||
| }); | ||
| } else if (contains(this.attributes(), attr)) { | ||
| results.push([attr, null]); | ||
| } | ||
| var attr = results[i][0]; | ||
| var message = results[i][1]; | ||
| var messages = result.errors[attr]; | ||
| var dependents = this._getDependentsFor(attr); | ||
| for (var i = 0; i < dependents.length; i++) { | ||
| var dependent = dependents[i]; | ||
| if (alreadyValidating.indexOf(dependent) < 0) { | ||
| alreadyValidating.push(dependent); | ||
| results = results.concat(this._validateAttribute(object, dependent, alreadyValidating)); | ||
| } | ||
| } | ||
| if (!messages) { | ||
| messages = result.errors[attr] = []; | ||
| return results; | ||
| } | ||
| }, { | ||
| key: '_collectResults', | ||
| value: function _collectResults(results) { | ||
| var result = { | ||
| valid: true, | ||
| errors: {} | ||
| }; | ||
| for (var i = 0; i < results.length; i++) { | ||
| if (!results[i]) { | ||
| continue; | ||
| } | ||
| var attr = results[i][0]; | ||
| var message = results[i][1]; | ||
| var messages = result.errors[attr]; | ||
| if (!messages) { | ||
| messages = result.errors[attr] = []; | ||
| } | ||
| if (message) { | ||
| messages.push(message); | ||
| result.valid = false; | ||
| } | ||
| } | ||
| if (message) { | ||
| messages.push(message); | ||
| result.valid = false; | ||
| } | ||
| return result; | ||
| } | ||
| return result; | ||
| }, | ||
| // e.g. getDependents("maritalStatus") # => ["spouseName"] | ||
| // e.g. getDependents("maritalStatus") # => ["spouseName"] | ||
| _getDependentsFor: function _getDependentsFor(parentAttribute) { | ||
| return (this._dependencies[parentAttribute] || []).slice(); | ||
| }, { | ||
| key: '_getDependentsFor', | ||
| value: function _getDependentsFor(parentAttribute) { | ||
| return (this._dependencies[parentAttribute] || []).slice(); | ||
| } | ||
| }]); | ||
| return ObjectValidator; | ||
| }(); | ||
| var Validation = function () { | ||
| function Validation(attr) { | ||
| classCallCheck(this, Validation); | ||
| this._attr = null; | ||
| this._conditions = []; | ||
| this._subvalidations = []; | ||
| this._dependencies = []; | ||
| this._attr = attr; | ||
| } | ||
| }; | ||
| function ValidatorBuilder() { | ||
| this._validator = new ObjectValidator(); | ||
| } | ||
| createClass(Validation, [{ | ||
| key: 'when', | ||
| value: function when() /*, predicate */{ | ||
| for (var _len = arguments.length, dependencies = Array(_len), _key = 0; _key < _len; _key++) { | ||
| dependencies[_key] = arguments[_key]; | ||
| } | ||
| ValidatorBuilder.prototype = { | ||
| _attr: null, | ||
| _conditions: null, | ||
| _conditionDependencies: null, | ||
| _validator: null, | ||
| var predicate = dependencies.pop(); | ||
| validates: function validates(attr) { | ||
| this._attr = attr; | ||
| this._conditions = []; | ||
| this._conditionDependencies = []; | ||
| return this; | ||
| }, | ||
| if (dependencies.length === 0) { | ||
| dependencies = [this._attr]; | ||
| } | ||
| when: function when() /* ...dependencies, condition */{ | ||
| var dependencies = [].slice.apply(arguments); | ||
| var condition = dependencies.pop(); | ||
| this._conditions.push({ | ||
| predicate: predicate, | ||
| dependencies: dependencies | ||
| }); | ||
| if (dependencies.length === 0) { | ||
| dependencies = [this._attr]; | ||
| return this; | ||
| } | ||
| }, { | ||
| key: 'and', | ||
| value: function and() { | ||
| return this.when.apply(this, arguments); | ||
| } | ||
| }, { | ||
| key: 'using', | ||
| value: function using() /*, predicate, message */{ | ||
| for (var _len2 = arguments.length, dependencies = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { | ||
| dependencies[_key2] = arguments[_key2]; | ||
| } | ||
| for (var i = 0; i < dependencies.length; i++) { | ||
| var dependency = dependencies[i]; | ||
| if (dependency !== this._attr) { | ||
| this._validator.addDependentsFor(dependency, this._attr); | ||
| var message = dependencies.pop(); | ||
| var predicate = dependencies.pop(); | ||
| if (typeof message === 'undefined') { | ||
| throw new Error('expected a message but got: ' + message); | ||
| } | ||
| } | ||
| this._conditions.push(condition); | ||
| this._conditionDependencies.push(dependencies); | ||
| return this; | ||
| }, | ||
| if (typeof message === 'function' && typeof predicate === 'undefined') { | ||
| throw new Error('missing expected argument `message` after predicate function'); | ||
| } | ||
| and: function and() /* ...dependencies, condition */{ | ||
| return this.when.apply(this, arguments); | ||
| }, | ||
| if (dependencies.length === 0) { | ||
| dependencies = [this._attr]; | ||
| } | ||
| using: function using() /* ...dependencies, predicate, message */{ | ||
| var dependencies = [].slice.apply(arguments); | ||
| var message = dependencies.pop(); | ||
| var predicate = dependencies.pop(); | ||
| function validation(value, attr, object) { | ||
| var properties = getProperties(object, dependencies); | ||
| return predicate.apply(undefined, toConsumableArray(properties).concat([attr, object])); | ||
| } | ||
| if (typeof message === 'undefined') { | ||
| throw new Error('expected a message but got: ' + message); | ||
| } | ||
| var conditions = this._conditions.slice(); | ||
| if (typeof message === 'function' && typeof predicate === 'undefined') { | ||
| throw new Error('missing expected argument `message` after predicate function'); | ||
| } | ||
| function validationWithConditions(value, attr, object) { | ||
| return all(conditions.map(function (_ref) { | ||
| var predicate = _ref.predicate, | ||
| dependencies = _ref.dependencies; | ||
| if (dependencies.length === 0) { | ||
| dependencies = [this._attr]; | ||
| } | ||
| var properties = getProperties(object, dependencies); | ||
| return predicate.apply(undefined, toConsumableArray(properties).concat([attr, object])); | ||
| })).then(function (results) { | ||
| for (var i = 0; i < results.length; i += 1) { | ||
| // a condition resolved to a falsy value; return as valid | ||
| if (!results[i]) { | ||
| return true; | ||
| } | ||
| } | ||
| for (var i = 0; i < dependencies.length; i++) { | ||
| var dependency = dependencies[i]; | ||
| if (dependency !== this._attr) { | ||
| this._validator.addDependentsFor(dependency, this._attr); | ||
| // all conditions resolved to truthy values; continue with validation | ||
| return validation(value, attr, object); | ||
| }); | ||
| } | ||
| this._subvalidations.push({ | ||
| dependencies: dependencies, | ||
| validation: conditions ? validationWithConditions : validation, | ||
| message: message | ||
| }); | ||
| return this; | ||
| } | ||
| }, { | ||
| key: 'addToValidator', | ||
| value: function addToValidator(validator) { | ||
| var _this = this; | ||
| function validation(value, attr, object) { | ||
| var properties = getProperties(object, dependencies); | ||
| return predicate.apply(null, properties.concat([attr, object])); | ||
| this.dependencies().forEach(function (dependency) { | ||
| validator.addDependentsFor(dependency, _this._attr); | ||
| }); | ||
| this._subvalidations.forEach(function (subvalidation) { | ||
| validator.addValidation(_this._attr, subvalidation.validation, subvalidation.message); | ||
| }); | ||
| } | ||
| }, { | ||
| key: 'dependencies', | ||
| value: function dependencies() { | ||
| var dependencies = []; | ||
| var conditions = this._conditions.slice(); | ||
| var conditionDependencies = this._conditionDependencies.slice(); | ||
| this._conditions.forEach(function (condition) { | ||
| condition.dependencies.forEach(function (dependency) { | ||
| dependencies.push(dependency); | ||
| }); | ||
| }); | ||
| function validationWithConditions(value, attr, object) { | ||
| return all(conditions.map(function (condition, i) { | ||
| var dependencies = conditionDependencies[i]; | ||
| var properties = getProperties(object, dependencies); | ||
| return condition.apply(null, properties.concat([attr, object])); | ||
| })).then(function (results) { | ||
| for (var i = 0; i < results.length; i++) { | ||
| // a condition resolved to a falsy value; return as valid | ||
| if (!results[i]) { | ||
| return true; | ||
| } | ||
| } | ||
| // all conditions resolved to truthy values; continue with validation | ||
| return validation(value, attr, object); | ||
| this._subvalidations.forEach(function (subvalidation) { | ||
| subvalidation.dependencies.forEach(function (dependency) { | ||
| dependencies.push(dependency); | ||
| }); | ||
| }); | ||
| return dependencies; | ||
| } | ||
| }]); | ||
| return Validation; | ||
| }(); | ||
| this._validator.addValidation(this._attr, conditions ? validationWithConditions : validation, message); | ||
| return this; | ||
| }, | ||
| var ValidatorBuilder = function () { | ||
| function ValidatorBuilder() { | ||
| classCallCheck(this, ValidatorBuilder); | ||
| this._validations = null; | ||
| this._validation = null; | ||
| build: function build() { | ||
| return this._validator; | ||
| for (var _len = arguments.length, validations = Array(_len), _key = 0; _key < _len; _key++) { | ||
| validations[_key] = arguments[_key]; | ||
| } | ||
| this._validations = validations; | ||
| } | ||
| }; | ||
| ValidatorBuilder.registerHelper = function (name, fn) { | ||
| this.prototype[name] = function () { | ||
| fn.apply(this, arguments); | ||
| return this; | ||
| }; | ||
| return null; | ||
| }; | ||
| createClass(ValidatorBuilder, [{ | ||
| key: 'validates', | ||
| value: function validates(attr) { | ||
| this._validation = new Validation(attr); | ||
| this._validations.push(this._validation); | ||
| return this; | ||
| } | ||
| }, { | ||
| key: 'when', | ||
| value: function when() /* ...dependencies, condition */{ | ||
| var _validation; | ||
| ValidatorBuilder.unregisterHelper = function (name) { | ||
| delete this.prototype[name]; | ||
| return null; | ||
| }; | ||
| (_validation = this._validation).when.apply(_validation, arguments); | ||
| return this; | ||
| } | ||
| }, { | ||
| key: 'and', | ||
| value: function and() /* ...dependencies, condition */{ | ||
| var _validation2; | ||
| (_validation2 = this._validation).and.apply(_validation2, arguments); | ||
| return this; | ||
| } | ||
| }, { | ||
| key: 'using', | ||
| value: function using() /* ...dependencies, predicate, message */{ | ||
| var _validation3; | ||
| (_validation3 = this._validation).using.apply(_validation3, arguments); | ||
| return this; | ||
| } | ||
| }, { | ||
| key: 'build', | ||
| value: function build() { | ||
| return new (Function.prototype.bind.apply(ObjectValidator, [null].concat(toConsumableArray(this._validations))))(); | ||
| } | ||
| }], [{ | ||
| key: 'registerHelper', | ||
| value: function registerHelper(name, fn) { | ||
| this.prototype[name] = function () { | ||
| fn.apply(this._validation, arguments); | ||
| return this; | ||
| }; | ||
| Validation.prototype[name] = function () { | ||
| fn.apply(this, arguments); | ||
| return this; | ||
| }; | ||
| return null; | ||
| } | ||
| }, { | ||
| key: 'unregisterHelper', | ||
| value: function unregisterHelper(name) { | ||
| delete this.prototype[name]; | ||
| delete Validation.prototype[name]; | ||
| return null; | ||
| } | ||
| }]); | ||
| return ValidatorBuilder; | ||
| }(); | ||
| function present(value) { | ||
@@ -371,8 +656,6 @@ if (typeof value === 'string') { | ||
| // http://stackoverflow.com/a/46181/11236 | ||
| var EMAIL = /^(([^<>()\[\]\\.,;:\s@\"]+(\.[^<>()\[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; | ||
| var EMAIL = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; | ||
| function checkEmail(options) { | ||
| if (!options) { | ||
| options = {}; | ||
| } | ||
| function checkEmail() { | ||
| var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
@@ -447,6 +730,14 @@ return function (value) { | ||
| function validator() { | ||
| return new ValidatorBuilder(); | ||
| for (var _len = arguments.length, validations = Array(_len), _key = 0; _key < _len; _key++) { | ||
| validations[_key] = arguments[_key]; | ||
| } | ||
| return new (Function.prototype.bind.apply(ValidatorBuilder, [null].concat(validations)))(); | ||
| } | ||
| function register() { | ||
| function validates(attr) { | ||
| return new Validation(attr); | ||
| } | ||
| function register$$1() { | ||
| ValidatorBuilder.registerHelper.apply(ValidatorBuilder, arguments); | ||
@@ -467,3 +758,3 @@ } | ||
| }, | ||
| register: register, | ||
| register: register$$1, | ||
| unregister: unregister | ||
@@ -478,14 +769,14 @@ }; | ||
| var Promise = config['Promise']; | ||
| var resolve = void 0; | ||
| var resolve$$1 = void 0; | ||
| var reject = void 0; | ||
| var promise = new Promise(function (res, rej) { | ||
| resolve = res; | ||
| resolve$$1 = res; | ||
| reject = rej; | ||
| }); | ||
| if (!resolve || !reject) { | ||
| if (!resolve$$1 || !reject) { | ||
| throw new Error('Configured promise does not behave as expected'); | ||
| } | ||
| return { promise: promise, resolve: resolve, reject: reject }; | ||
| return { promise: promise, resolve: resolve$$1, reject: reject }; | ||
| }); | ||
@@ -534,3 +825,5 @@ | ||
| try { | ||
| var _Promise = require('rsvp').Promise; | ||
| var _require = require('rsvp'), | ||
| _Promise = _require.Promise; | ||
| configure('Promise', _Promise); | ||
@@ -563,3 +856,3 @@ warn('Implicitly using require("rsvp").Promise. This will be removed in LGTM 2.0. ' + 'Instead, use \'LGTM.configure("Promise", require("rsvp").Promise)\' to ' + 'continue using RSVP promises.'); | ||
| export { configure, validator, helpers, ObjectValidator }; | ||
| //# sourceMappingURL=lgtm.mjs.map | ||
| export { configure, validator, validates, helpers, ObjectValidator }; | ||
| //# sourceMappingURL=lgtm.mjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"lgtm.mjs","sources":["../src/lgtm/config.js","../src/lgtm/utils.js","../src/lgtm/object_validator.js","../src/lgtm/validator_builder.js","../src/lgtm/helpers/core.js","../src/lgtm.js"],"sourcesContent":["export default {};\n","import config from './config.js';\n\n/**\n * Iteration\n */\n\nfunction forEach(iterable, iterator) {\n if (typeof iterable.forEach === 'function') {\n iterable.forEach(iterator);\n } else if ({}.toString.call(iterable) === '[object Object]') {\n var hasOwnProp = {}.hasOwnProperty;\n for (var key in iterable) {\n if (hasOwnProp.call(iterable, key)) {\n iterator(iterable[key], key);\n }\n }\n } else {\n for (var i = 0; i < iterable.length; i++) {\n iterator(iterable[i], i);\n }\n }\n}\n\nfunction keys(object) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(object);\n } else {\n var result = [];\n forEach(object, function(key) {\n result.push(key);\n });\n return result;\n }\n}\n\nexport { forEach, keys };\n\n\n/**\n * Property access\n */\n\nfunction get(object, property) {\n if (object === null || object === undefined) {\n return;\n } else if (typeof object.get === 'function') {\n return object.get(property);\n } else {\n return object[property];\n }\n}\n\nfunction getProperties(object, properties) {\n let { get } = config;\n return properties.map(prop => get(object, prop));\n}\n\nexport { get, getProperties };\n\n\n/**\n * Array manipulation\n */\n\nfunction contains(array, object) {\n return array.indexOf(object) > -1;\n}\n\nfunction uniq(array) {\n var result = [];\n\n for (var i = 0; i < array.length; i++) {\n var item = array[i];\n if (!contains(result, item)) {\n result.push(item);\n }\n }\n\n return result;\n}\n\nexport { contains, uniq };\n\n\n/**\n * Promises\n */\n\nfunction resolve(thenable) {\n let { Promise } = config;\n return new Promise(accept => accept(thenable));\n}\n\nfunction all(thenables) {\n let { Promise } = config;\n return Promise.all(thenables);\n}\n\nexport { resolve, all };\n","import config from './config.js';\nimport { all, resolve, contains, keys, uniq } from './utils.js';\n\nfunction ObjectValidator() {\n this._validations = {};\n this._dependencies = {};\n}\n\nObjectValidator.prototype = {\n _validations : null,\n _dependencies : null,\n\n addValidation: function(attr, fn, message) {\n var list = this._validations[attr];\n\n if (!list) {\n list = this._validations[attr] = [];\n }\n\n list.push([fn, message]);\n },\n\n // e.g. spouseName (dependentAttribute) depends on maritalStatus (parentAttribute)\n addDependentsFor: function(/* parentAttribute, ...dependentAttributes */) {\n var dependentAttributes = [].slice.apply(arguments);\n var parentAttribute = dependentAttributes.shift();\n\n var dependentsForParent = this._dependencies[parentAttribute];\n\n if (!dependentsForParent) {\n dependentsForParent = this._dependencies[parentAttribute] = [];\n }\n\n for (var i = 0; i < dependentAttributes.length; i++) {\n var attr = dependentAttributes[i];\n if (!contains(dependentsForParent, attr)) {\n dependentsForParent.push(attr);\n }\n }\n },\n\n attributes: function() {\n return uniq(\n keys(this._validations).concat(\n keys(this._dependencies)\n )\n );\n },\n\n validate: function(/* object, attributes..., callback */) {\n var attributes = [].slice.apply(arguments);\n var object = attributes.shift();\n var callback = attributes.pop();\n var self = this;\n\n if (typeof callback === 'string') {\n attributes.push(callback);\n callback = null;\n }\n\n if (attributes.length === 0) {\n attributes = keys(this._validations);\n }\n\n var validationPromises = [];\n var alreadyValidating = attributes.slice();\n for (var i = 0; i < attributes.length; i++) {\n var attr = attributes[i];\n validationPromises = validationPromises.concat(\n this._validateAttribute(object, attr, alreadyValidating));\n }\n\n var promise = all(validationPromises).then(\n function(results) {\n results = self._collectResults(results);\n if (callback) {\n callback(null, results);\n }\n return results;\n },\n function(err) {\n if (callback) {\n callback(err);\n }\n throw err;\n });\n\n if (!callback) {\n return promise;\n }\n },\n\n _validateAttribute: function(object, attr, alreadyValidating) {\n var value = config.get(object, attr);\n var validations = this._validations[attr];\n var results = [];\n\n if (validations) {\n validations.forEach(function(pair) {\n var fn = pair[0];\n var message = pair[1];\n\n var promise = resolve()\n .then(function() {\n return fn(value, attr, object);\n })\n .then(function(isValid) {\n return [ attr, isValid ? null : message ];\n });\n\n results.push(promise);\n });\n } else if (contains(this.attributes(), attr)) {\n results.push([ attr, null ]);\n }\n\n var dependents = this._getDependentsFor(attr);\n for (var i = 0; i < dependents.length; i++) {\n var dependent = dependents[i];\n if (alreadyValidating.indexOf(dependent) < 0) {\n alreadyValidating.push(dependent);\n results = results.concat(this._validateAttribute(object, dependent, alreadyValidating));\n }\n }\n\n return results;\n },\n\n _collectResults: function(results) {\n var result = {\n valid : true,\n errors : {}\n };\n\n for (var i = 0; i < results.length; i++) {\n if (!results[i]) { continue; }\n\n var attr = results[i][0];\n var message = results[i][1];\n var messages = result.errors[attr];\n\n if (!messages) {\n messages = result.errors[attr] = [];\n }\n\n if (message) {\n messages.push(message);\n result.valid = false;\n }\n }\n\n return result;\n },\n\n // e.g. getDependents(\"maritalStatus\") # => [\"spouseName\"]\n _getDependentsFor: function(parentAttribute) {\n return (this._dependencies[parentAttribute] || []).slice();\n }\n};\n\nexport default ObjectValidator;\n","import ObjectValidator from './object_validator.js';\nimport { getProperties, all } from './utils.js';\n\nfunction ValidatorBuilder() {\n this._validator = new ObjectValidator();\n}\n\nValidatorBuilder.prototype = {\n _attr : null,\n _conditions : null,\n _conditionDependencies : null,\n _validator : null,\n\n validates: function(attr) {\n this._attr = attr;\n this._conditions = [];\n this._conditionDependencies = [];\n return this;\n },\n\n when: function(/* ...dependencies, condition */) {\n var dependencies = [].slice.apply(arguments);\n var condition = dependencies.pop();\n\n if (dependencies.length === 0) {\n dependencies = [this._attr];\n }\n\n for (var i = 0; i < dependencies.length; i++) {\n var dependency = dependencies[i];\n if (dependency !== this._attr) {\n this._validator.addDependentsFor(dependency, this._attr);\n }\n }\n\n this._conditions.push(condition);\n this._conditionDependencies.push(dependencies);\n return this;\n },\n\n and: function(/* ...dependencies, condition */) {\n return this.when.apply(this, arguments);\n },\n\n using: function(/* ...dependencies, predicate, message */) {\n var dependencies = [].slice.apply(arguments);\n var message = dependencies.pop();\n var predicate = dependencies.pop();\n\n if (typeof message === 'undefined') {\n throw new Error(`expected a message but got: ${message}`);\n }\n\n if (typeof message === 'function' && typeof predicate === 'undefined') {\n throw new Error('missing expected argument `message` after predicate function');\n }\n\n if (dependencies.length === 0) {\n dependencies = [this._attr];\n }\n\n for (var i = 0; i < dependencies.length; i++) {\n var dependency = dependencies[i];\n if (dependency !== this._attr) {\n this._validator.addDependentsFor(dependency, this._attr);\n }\n }\n\n function validation(value, attr, object) {\n var properties = getProperties(object, dependencies);\n return predicate.apply(null, properties.concat([attr, object]));\n }\n\n var conditions = this._conditions.slice();\n var conditionDependencies = this._conditionDependencies.slice();\n\n function validationWithConditions(value, attr, object) {\n return all(conditions.map(function(condition, i) {\n var dependencies = conditionDependencies[i];\n var properties = getProperties(object, dependencies);\n return condition.apply(null, properties.concat([attr, object]));\n })).then(function(results) {\n for (var i = 0; i < results.length; i++) {\n // a condition resolved to a falsy value; return as valid\n if (!results[i]) {\n return true;\n }\n }\n // all conditions resolved to truthy values; continue with validation\n return validation(value, attr, object);\n });\n }\n\n this._validator.addValidation(\n this._attr,\n conditions ? validationWithConditions : validation,\n message\n );\n return this;\n },\n\n build: function() {\n return this._validator;\n }\n};\n\nValidatorBuilder.registerHelper = function(name, fn) {\n this.prototype[name] = function() {\n fn.apply(this, arguments);\n return this;\n };\n return null;\n};\n\nValidatorBuilder.unregisterHelper = function(name) {\n delete this.prototype[name];\n return null;\n};\n\nexport default ValidatorBuilder;\n","import ValidatorBuilder from '../validator_builder.js';\n\nfunction present(value) {\n if (typeof value === 'string') {\n value = value.trim();\n }\n\n return value !== '' && value !== null && value !== undefined;\n}\n\nconst STRICT_CHARS = /^[\\x20-\\x7F]*$/;\n// http://stackoverflow.com/a/46181/11236\nconst EMAIL = /^(([^<>()\\[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\nfunction checkEmail(options) {\n if (!options) {\n options = {};\n }\n\n return function(value) {\n if (typeof value === 'string') {\n value = value.trim();\n }\n\n if (options.strictCharacters) {\n if (!STRICT_CHARS.test(value)) {\n return false;\n }\n }\n\n return EMAIL.test(value);\n };\n}\n\nfunction checkMinLength(minLength) {\n if (minLength === null || minLength === undefined) {\n throw new Error('must specify a min length');\n }\n\n return function(value) {\n if (value !== null && value !== undefined) {\n return value.length >= minLength;\n } else {\n return false;\n }\n };\n}\n\nfunction checkMaxLength(maxLength) {\n if (maxLength === null || maxLength === undefined) {\n throw new Error('must specify a max length');\n }\n\n return function(value) {\n if (value !== null && value !== undefined) {\n return value.length <= maxLength;\n } else {\n return false;\n }\n };\n}\n\nfunction register() {\n ValidatorBuilder.registerHelper('required', function(message) {\n this.using(present, message);\n });\n\n ValidatorBuilder.registerHelper('optional', function() {\n this.when(present);\n });\n\n ValidatorBuilder.registerHelper('email', function(message, options) {\n this.using(checkEmail(options), message);\n });\n\n ValidatorBuilder.registerHelper('minLength', function(minLength, message) {\n this.using(checkMinLength(minLength), message);\n });\n\n ValidatorBuilder.registerHelper('maxLength', function(maxLength, message) {\n this.using(checkMaxLength(maxLength), message);\n });\n}\n\nexport { present, checkEmail, checkMinLength, checkMaxLength, register };\n","import ObjectValidator from './lgtm/object_validator.js';\nimport ValidatorBuilder from './lgtm/validator_builder.js';\nimport config from './lgtm/config.js';\nimport { get } from './lgtm/utils.js';\nimport { present, checkEmail, checkMinLength, checkMaxLength, register as core_register } from './lgtm/helpers/core.js';\n\ncore_register();\n\nfunction validator() {\n return new ValidatorBuilder();\n}\n\nfunction register() {\n ValidatorBuilder.registerHelper.apply(ValidatorBuilder, arguments);\n}\n\nfunction unregister() {\n ValidatorBuilder.unregisterHelper.apply(ValidatorBuilder, arguments);\n}\n\nvar helpers = {\n core: {\n present: present,\n checkEmail: checkEmail,\n checkMinLength: checkMinLength,\n checkMaxLength: checkMaxLength,\n register: core_register\n },\n register: register,\n unregister: unregister\n};\n\nfunction configure(key, value) {\n config[key] = value;\n}\n\nconfigure('defer', () => {\n let Promise = config['Promise'];\n let resolve;\n let reject;\n let promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n if (!resolve || !reject) {\n throw new Error('Configured promise does not behave as expected');\n }\n\n return { promise, resolve, reject };\n});\n\nfunction PromiseProxy(callback) {\n let Promise = getPromise();\n return new Promise(callback);\n}\n\nPromiseProxy.all = function(...args) {\n return getPromise().all(...args);\n};\n\nPromiseProxy.race = function(...args) {\n return getPromise().race(...args);\n};\n\nPromiseProxy.resolve = function(...args) {\n return getPromise().resolve(...args);\n};\n\nPromiseProxy.reject = function(...args) {\n return getPromise().reject(...args);\n};\n\nfunction getPromise() {\n let warn = config['warn'];\n\n /* global Promise, RSVP, require */\n if (typeof RSVP !== 'undefined') {\n configure('Promise', RSVP.Promise);\n warn(\n `Implicitly using RSVP.Promise. This will be removed in LGTM 2.0. ` +\n `Instead, use 'LGTM.configure(\"Promise\", RSVP.Promise)' to ` +\n `continue using RSVP promises.`\n );\n return RSVP.Promise;\n }\n\n if (typeof require === 'function') {\n try {\n let Promise = require('rsvp').Promise;\n configure('Promise', Promise);\n warn(\n `Implicitly using require(\"rsvp\").Promise. This will be removed in LGTM 2.0. ` +\n `Instead, use 'LGTM.configure(\"Promise\", require(\"rsvp\").Promise)' to ` +\n `continue using RSVP promises.`\n );\n return Promise;\n } catch (err) {\n // Ignore errors, just try built-in Promise or fail.\n }\n }\n\n if (typeof Promise === 'function') {\n configure('Promise', Promise);\n return Promise;\n }\n\n throw new Error(\n `'Promise' could not be found. Configure LGTM with your promise library using ` +\n `e.g. 'LGTM.configure(\"Promise\", RSVP.Promise)'.`\n );\n}\n\n/* global console */\nconfigure('Promise', PromiseProxy);\nconfigure('warn', console.warn.bind(console)); // eslint-disable-line no-console\nconfigure('get', (object, property) => {\n let warn = config['warn'];\n\n configure('get', get);\n warn(\n `Implicitly using 'get' implementation that uses a 'get' method when available. ` +\n `This will be removed in LGTM 2.0. Instead, use e.g. 'LGTM.configure(\"get\", Ember.get)' ` +\n `if you rely on this behavior.`\n );\n return get(object, property);\n});\n\nexport { configure, validator, helpers, ObjectValidator };\n"],"names":["register","core_register"],"mappings":"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"} | ||
| {"version":3,"file":"lgtm.mjs","sources":["../src/lgtm/config.js","../src/lgtm/utils.js","../src/lgtm/object_validator.js","../src/lgtm/validation.js","../src/lgtm/validator_builder.js","../src/lgtm/helpers/core.js","../src/lgtm.js"],"sourcesContent":["export default {};\n","import config from './config.js';\n\n/**\n * Iteration\n */\n\nexport function forEach(iterable, iterator) {\n if (typeof iterable.forEach === 'function') {\n iterable.forEach(iterator);\n } else if ({}.toString.call(iterable) === '[object Object]') {\n let hasOwnProp = {}.hasOwnProperty;\n for (let key in iterable) {\n if (hasOwnProp.call(iterable, key)) {\n iterator(iterable[key], key);\n }\n }\n } else {\n for (let i = 0; i < iterable.length; i++) {\n iterator(iterable[i], i);\n }\n }\n}\n\nexport function keys(object) {\n return Object.getOwnPropertyNames(object);\n}\n\n/**\n * Property access\n */\n\nexport function get(object, property) {\n if (object === null || object === undefined) {\n return;\n } else if (typeof object.get === 'function') {\n return object.get(property);\n } else {\n return object[property];\n }\n}\n\nexport function getProperties(object, properties) {\n let { get } = config;\n return properties.map(prop => get(object, prop));\n}\n\n/**\n * Array manipulation\n */\n\nexport function contains(array, object) {\n return array.indexOf(object) > -1;\n}\n\nexport function uniq(array) {\n let result = [];\n\n for (let i = 0; i < array.length; i++) {\n let item = array[i];\n if (!contains(result, item)) {\n result.push(item);\n }\n }\n\n return result;\n}\n\n/**\n * Promises\n */\n\nexport function resolve(thenable) {\n let { Promise } = config;\n return new Promise(accept => accept(thenable));\n}\n\nexport function all(thenables) {\n let { Promise } = config;\n return Promise.all(thenables);\n}\n","import config from './config.js';\nimport { all, resolve, contains, keys, uniq } from './utils.js';\n\nexport default class ObjectValidator {\n _validations = {};\n _dependencies = {};\n\n constructor(...validations) {\n validations.forEach(validation => validation.addToValidator(this));\n }\n\n addValidation(attr, fn, message) {\n let list = this._validations[attr];\n\n if (!list) {\n list = this._validations[attr] = [];\n }\n\n list.push([fn, message]);\n }\n\n // e.g. spouseName (dependentAttribute) depends on maritalStatus (parentAttribute)\n addDependentsFor(parentAttribute, ...dependentAttributes) {\n let dependentsForParent = this._dependencies[parentAttribute];\n\n if (!dependentsForParent) {\n dependentsForParent = this._dependencies[parentAttribute] = [];\n }\n\n for (let i = 0; i < dependentAttributes.length; i++) {\n let attr = dependentAttributes[i];\n if (!contains(dependentsForParent, attr)) {\n dependentsForParent.push(attr);\n }\n }\n }\n\n attributes() {\n return uniq(keys(this._validations).concat(keys(this._dependencies)));\n }\n\n validate(object, ...attributes) {\n let callback = null;\n\n if (typeof attributes[attributes.length - 1] !== 'string') {\n callback = attributes.pop();\n }\n\n if (attributes.length === 0) {\n attributes = keys(this._validations);\n }\n\n let validationPromises = [];\n let alreadyValidating = attributes.slice();\n for (let i = 0; i < attributes.length; i++) {\n let attr = attributes[i];\n validationPromises = validationPromises.concat(\n this._validateAttribute(object, attr, alreadyValidating)\n );\n }\n\n let self = this;\n let promise = all(validationPromises).then(\n results => {\n results = this._collectResults(results);\n if (callback) {\n callback(null, results);\n }\n return results;\n },\n err => {\n if (callback) {\n callback(err);\n }\n throw err;\n }\n );\n\n if (!callback) {\n return promise;\n }\n }\n\n _validateAttribute(object, attr, alreadyValidating) {\n let value = config.get(object, attr);\n let validations = this._validations[attr];\n let results = [];\n\n if (validations) {\n validations.forEach(function(pair) {\n let fn = pair[0];\n let message = pair[1];\n\n let promise = resolve()\n .then(() => fn(value, attr, object))\n .then(isValid => [attr, isValid ? null : message]);\n\n results.push(promise);\n });\n } else if (contains(this.attributes(), attr)) {\n results.push([attr, null]);\n }\n\n let dependents = this._getDependentsFor(attr);\n for (let i = 0; i < dependents.length; i++) {\n let dependent = dependents[i];\n if (alreadyValidating.indexOf(dependent) < 0) {\n alreadyValidating.push(dependent);\n results = results.concat(\n this._validateAttribute(object, dependent, alreadyValidating)\n );\n }\n }\n\n return results;\n }\n\n _collectResults(results) {\n let result = {\n valid: true,\n errors: {}\n };\n\n for (let i = 0; i < results.length; i++) {\n if (!results[i]) {\n continue;\n }\n\n let attr = results[i][0];\n let message = results[i][1];\n let messages = result.errors[attr];\n\n if (!messages) {\n messages = result.errors[attr] = [];\n }\n\n if (message) {\n messages.push(message);\n result.valid = false;\n }\n }\n\n return result;\n }\n\n // e.g. getDependents(\"maritalStatus\") # => [\"spouseName\"]\n _getDependentsFor(parentAttribute) {\n return (this._dependencies[parentAttribute] || []).slice();\n }\n}\n","import { getProperties, all } from './utils.js';\n\nexport default class Validation {\n _attr = null;\n _conditions = [];\n _subvalidations = [];\n _dependencies = [];\n\n constructor(attr) {\n this._attr = attr;\n }\n\n when(...dependencies /*, predicate */) {\n const predicate = dependencies.pop();\n\n if (dependencies.length === 0) {\n dependencies = [this._attr];\n }\n\n this._conditions.push({\n predicate,\n dependencies\n });\n\n return this;\n }\n\n and(...args) {\n return this.when(...args);\n }\n\n using(...dependencies /*, predicate, message */) {\n const message = dependencies.pop();\n const predicate = dependencies.pop();\n\n if (typeof message === 'undefined') {\n throw new Error(`expected a message but got: ${message}`);\n }\n\n if (typeof message === 'function' && typeof predicate === 'undefined') {\n throw new Error(\n 'missing expected argument `message` after predicate function'\n );\n }\n\n if (dependencies.length === 0) {\n dependencies = [this._attr];\n }\n\n function validation(value, attr, object) {\n const properties = getProperties(object, dependencies);\n return predicate(...properties, attr, object);\n }\n\n const conditions = this._conditions.slice();\n\n function validationWithConditions(value, attr, object) {\n return all(\n conditions.map(({ predicate, dependencies }) => {\n const properties = getProperties(object, dependencies);\n return predicate(...properties, attr, object);\n })\n ).then(results => {\n for (let i = 0; i < results.length; i += 1) {\n // a condition resolved to a falsy value; return as valid\n if (!results[i]) {\n return true;\n }\n }\n\n // all conditions resolved to truthy values; continue with validation\n return validation(value, attr, object);\n });\n }\n\n this._subvalidations.push({\n dependencies,\n validation: conditions ? validationWithConditions : validation,\n message\n });\n\n return this;\n }\n\n addToValidator(validator) {\n this.dependencies().forEach(dependency => {\n validator.addDependentsFor(dependency, this._attr);\n });\n\n this._subvalidations.forEach(subvalidation => {\n validator.addValidation(\n this._attr,\n subvalidation.validation,\n subvalidation.message\n );\n });\n }\n\n dependencies() {\n const dependencies = [];\n\n this._conditions.forEach(condition => {\n condition.dependencies.forEach(dependency => {\n dependencies.push(dependency);\n });\n });\n\n this._subvalidations.forEach(subvalidation => {\n subvalidation.dependencies.forEach(dependency => {\n dependencies.push(dependency);\n });\n });\n\n return dependencies;\n }\n}\n","import ObjectValidator from './object_validator.js';\nimport Validation from './validation';\n\nexport default class ValidatorBuilder {\n _validations = null;\n _validation = null;\n\n constructor(...validations) {\n this._validations = validations;\n }\n\n validates(attr) {\n this._validation = new Validation(attr);\n this._validations.push(this._validation);\n return this;\n }\n\n when(/* ...dependencies, condition */) {\n this._validation.when(...arguments);\n return this;\n }\n\n and(/* ...dependencies, condition */) {\n this._validation.and(...arguments);\n return this;\n }\n\n using(/* ...dependencies, predicate, message */) {\n this._validation.using(...arguments);\n return this;\n }\n\n build() {\n return new ObjectValidator(...this._validations);\n }\n\n static registerHelper(name, fn) {\n this.prototype[name] = function() {\n fn.apply(this._validation, arguments);\n return this;\n };\n\n Validation.prototype[name] = function() {\n fn.apply(this, arguments);\n return this;\n };\n\n return null;\n }\n\n static unregisterHelper(name) {\n delete this.prototype[name];\n delete Validation.prototype[name];\n return null;\n }\n}\n","import ValidatorBuilder from '../validator_builder.js';\n\nexport function present(value) {\n if (typeof value === 'string') {\n value = value.trim();\n }\n\n return value !== '' && value !== null && value !== undefined;\n}\n\nconst STRICT_CHARS = /^[\\x20-\\x7F]*$/;\n// http://stackoverflow.com/a/46181/11236\nconst EMAIL = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\nexport function checkEmail(options = {}) {\n return function(value) {\n if (typeof value === 'string') {\n value = value.trim();\n }\n\n if (options.strictCharacters) {\n if (!STRICT_CHARS.test(value)) {\n return false;\n }\n }\n\n return EMAIL.test(value);\n };\n}\n\nexport function checkMinLength(minLength) {\n if (minLength === null || minLength === undefined) {\n throw new Error('must specify a min length');\n }\n\n return function(value) {\n if (value !== null && value !== undefined) {\n return value.length >= minLength;\n } else {\n return false;\n }\n };\n}\n\nexport function checkMaxLength(maxLength) {\n if (maxLength === null || maxLength === undefined) {\n throw new Error('must specify a max length');\n }\n\n return function(value) {\n if (value !== null && value !== undefined) {\n return value.length <= maxLength;\n } else {\n return false;\n }\n };\n}\n\nexport function register() {\n ValidatorBuilder.registerHelper('required', function(message) {\n this.using(present, message);\n });\n\n ValidatorBuilder.registerHelper('optional', function() {\n this.when(present);\n });\n\n ValidatorBuilder.registerHelper('email', function(message, options) {\n this.using(checkEmail(options), message);\n });\n\n ValidatorBuilder.registerHelper('minLength', function(minLength, message) {\n this.using(checkMinLength(minLength), message);\n });\n\n ValidatorBuilder.registerHelper('maxLength', function(maxLength, message) {\n this.using(checkMaxLength(maxLength), message);\n });\n}\n","import ObjectValidator from './lgtm/object_validator.js';\nimport Validation from './lgtm/validation.js';\nimport ValidatorBuilder from './lgtm/validator_builder.js';\nimport config from './lgtm/config.js';\nimport { get } from './lgtm/utils.js';\nimport {\n present,\n checkEmail,\n checkMinLength,\n checkMaxLength,\n register as core_register\n} from './lgtm/helpers/core.js';\n\ncore_register();\n\nfunction validator(...validations) {\n return new ValidatorBuilder(...validations);\n}\n\nfunction validates(attr) {\n return new Validation(attr);\n}\n\nfunction register() {\n ValidatorBuilder.registerHelper(...arguments);\n}\n\nfunction unregister() {\n ValidatorBuilder.unregisterHelper(...arguments);\n}\n\nlet helpers = {\n core: {\n present,\n checkEmail,\n checkMinLength,\n checkMaxLength,\n register: core_register\n },\n register,\n unregister\n};\n\nfunction configure(key, value) {\n config[key] = value;\n}\n\nconfigure('defer', () => {\n let Promise = config['Promise'];\n let resolve;\n let reject;\n let promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n if (!resolve || !reject) {\n throw new Error('Configured promise does not behave as expected');\n }\n\n return { promise, resolve, reject };\n});\n\nfunction PromiseProxy(callback) {\n let Promise = getPromise();\n return new Promise(callback);\n}\n\nPromiseProxy.all = (...args) => getPromise().all(...args);\n\nPromiseProxy.race = (...args) => getPromise().race(...args);\n\nPromiseProxy.resolve = (...args) => getPromise().resolve(...args);\n\nPromiseProxy.reject = (...args) => getPromise().reject(...args);\n\nfunction getPromise() {\n let warn = config['warn'];\n\n /* global Promise, RSVP, require */\n if (typeof RSVP !== 'undefined') {\n configure('Promise', RSVP.Promise);\n warn(\n `Implicitly using RSVP.Promise. This will be removed in LGTM 2.0. ` +\n `Instead, use 'LGTM.configure(\"Promise\", RSVP.Promise)' to ` +\n `continue using RSVP promises.`\n );\n return RSVP.Promise;\n }\n\n if (typeof require === 'function') {\n try {\n let { Promise } = require('rsvp');\n configure('Promise', Promise);\n warn(\n `Implicitly using require(\"rsvp\").Promise. This will be removed in LGTM 2.0. ` +\n `Instead, use 'LGTM.configure(\"Promise\", require(\"rsvp\").Promise)' to ` +\n `continue using RSVP promises.`\n );\n return Promise;\n } catch (err) {\n // Ignore errors, just try built-in Promise or fail.\n }\n }\n\n if (typeof Promise === 'function') {\n configure('Promise', Promise);\n return Promise;\n }\n\n throw new Error(\n `'Promise' could not be found. Configure LGTM with your promise library using ` +\n `e.g. 'LGTM.configure(\"Promise\", RSVP.Promise)'.`\n );\n}\n\n/* global console */\nconfigure('Promise', PromiseProxy);\nconfigure('warn', console.warn.bind(console)); // eslint-disable-line no-console\nconfigure('get', (object, property) => {\n let warn = config['warn'];\n\n configure('get', get);\n warn(\n `Implicitly using 'get' implementation that uses a 'get' method when available. ` +\n `This will be removed in LGTM 2.0. Instead, use e.g. 'LGTM.configure(\"get\", Ember.get)' ` +\n `if you rely on this behavior.`\n );\n return get(object, property);\n});\n\nexport { configure, validator, validates, helpers, ObjectValidator };\n"],"names":["keys","object","Object","getOwnPropertyNames","get","property","undefined","getProperties","properties","config","map","prop","contains","array","indexOf","uniq","result","i","length","item","push","resolve","thenable","Promise","accept","all","thenables","ObjectValidator","_validations","_dependencies","validations","forEach","validation","addToValidator","attr","fn","message","list","parentAttribute","dependentsForParent","dependentAttributes","concat","attributes","callback","pop","validationPromises","alreadyValidating","slice","_validateAttribute","promise","then","_collectResults","results","err","value","pair","isValid","dependents","_getDependentsFor","dependent","messages","errors","valid","Validation","_attr","_conditions","_subvalidations","dependencies","predicate","when","Error","conditions","validationWithConditions","validator","addDependentsFor","dependency","addValidation","subvalidation","ValidatorBuilder","_validation","arguments","and","using","name","prototype","apply","present","trim","STRICT_CHARS","EMAIL","checkEmail","options","strictCharacters","test","checkMinLength","minLength","checkMaxLength","maxLength","register","registerHelper","core_register","validates","unregister","unregisterHelper","helpers","configure","key","reject","res","rej","PromiseProxy","getPromise","race","warn","RSVP","require","console","bind"],"mappings":"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"} |
+24
-13
| { | ||
| "name": "lgtm", | ||
| "version": "1.1.0", | ||
| "version": "1.2.0", | ||
| "description": "Simple JavaScript validation for objects.", | ||
@@ -12,7 +12,8 @@ "main": "dist/lgtm.js", | ||
| "test": "mocha", | ||
| "prepublish": "npm test && npm run build" | ||
| "prepublish": "npm test && npm run build", | ||
| "semantic-release": "semantic-release pre && npm publish && semantic-release post" | ||
| }, | ||
| "repository": { | ||
| "type": "git", | ||
| "url": "git@github.com:square/lgtm.git" | ||
| "url": "https://github.com/square/lgtm.git" | ||
| }, | ||
@@ -25,11 +26,21 @@ "keywords": [ | ||
| "devDependencies": { | ||
| "babel": "^6.5.2", | ||
| "babel-preset-es2015": "^6.9.0", | ||
| "babel-preset-es2015-rollup": "^1.1.1", | ||
| "babel-register": "^6.9.0", | ||
| "babelrc-rollup": "^1.0.0", | ||
| "eslint": "^2.10.2", | ||
| "mocha": "^2.4.5", | ||
| "rollup": "^0.26.3", | ||
| "rollup-plugin-babel": "^2.4.0" | ||
| "babel-core": "^6.26.0", | ||
| "babel-eslint": "^8.0.0", | ||
| "babel-plugin-external-helpers": "^6.22.0", | ||
| "babel-plugin-syntax-class-properties": "^6.13.0", | ||
| "babel-plugin-transform-class-properties": "^6.24.1", | ||
| "babel-preset-env": "^1.6.0", | ||
| "babel-preset-es2015": "^6.24.1", | ||
| "babel-register": "^6.26.0", | ||
| "eslint": "^4.7.2", | ||
| "eslint-config-prettier": "^2.6.0", | ||
| "eslint-plugin-prettier": "^2.3.1", | ||
| "file-size": "^1.0.0", | ||
| "gzip-size": "^4.0.0", | ||
| "mocha": "^3.5.3", | ||
| "prettier": "^1.7.0", | ||
| "rollup": "^0.50.0", | ||
| "rollup-plugin-babel": "^3.0.2", | ||
| "semantic-release": "^8.0.3", | ||
| "uglify-js": "^3.1.2" | ||
| }, | ||
@@ -42,2 +53,2 @@ "files": [ | ||
| } | ||
| } | ||
| } |
+2
-0
@@ -9,1 +9,3 @@ # LGTM | ||
| For examples, installation, setup and more [see the wiki](https://github.com/square/lgtm/wiki). | ||
| [](https://greenkeeper.io/) |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
98794
13.98%1325
46.41%11
22.22%0
-100%0
-100%19
111.11%