UNPKG

angular2-json-schema-form

Version:
471 lines 21.2 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var core_1 = require("@angular/core"); var validator_functions_1 = require("./validator.functions"); var utility_functions_1 = require("./utility.functions"); var JsonPointer = (function () { function JsonPointer() { } JsonPointer.get = function (object, pointer, startSlice, endSlice, getBoolean, errors) { if (startSlice === void 0) { startSlice = 0; } if (endSlice === void 0) { endSlice = null; } if (getBoolean === void 0) { getBoolean = false; } if (errors === void 0) { errors = false; } if (object === null) return getBoolean ? false : undefined; var keyArray = this.parse(pointer); if (typeof object === 'object' && keyArray !== null) { var subObject = object; if (startSlice >= keyArray.length || endSlice <= -keyArray.length) return object; if (startSlice <= -keyArray.length) startSlice = 0; if (!validator_functions_1.isDefined(endSlice) || endSlice >= keyArray.length) endSlice = keyArray.length; keyArray = keyArray.slice(startSlice, endSlice); for (var _i = 0, keyArray_1 = keyArray; _i < keyArray_1.length; _i++) { var key = keyArray_1[_i]; if (key === '-' && validator_functions_1.isArray(subObject) && subObject.length) { key = subObject.length - 1; } if (typeof subObject === 'object' && subObject !== null && utility_functions_1.hasOwn(subObject, key)) { subObject = subObject[key]; } else if (validator_functions_1.isMap(subObject) && subObject.has(key)) { subObject = subObject.get(key); } else { if (errors) console.error('get error: "' + key + '" key not found in object.'); if (errors) console.error(pointer); if (errors) console.error(object); return getBoolean ? false : undefined; } } return getBoolean ? true : subObject; } if (errors && keyArray === null) console.error('get error: Invalid JSON Pointer: ' + pointer); if (errors && typeof object !== 'object') { console.error('get error: Invalid object:='); console.error(object); } return getBoolean ? false : undefined; }; JsonPointer.getFirst = function (items, defaultValue) { if (defaultValue === void 0) { defaultValue = null; } if (validator_functions_1.isEmpty(items)) return; if (validator_functions_1.isArray(items)) { for (var _i = 0, items_1 = items; _i < items_1.length; _i++) { var item = items_1[_i]; if (validator_functions_1.isEmpty(item)) continue; if (validator_functions_1.isArray(item) && item.length >= 2) { if (validator_functions_1.isEmpty(item[0]) || validator_functions_1.isEmpty(item[1])) continue; var value = this.get(item[0], item[1]); if (value) return value; continue; } console.error('getFirst error: Input not in correct format.\n' + 'Should be: [ [ object1, pointer1 ], [ object 2, pointer2 ], etc... ]'); return; } return defaultValue; } if (validator_functions_1.isMap(items)) { for (var _a = 0, items_2 = items; _a < items_2.length; _a++) { var _b = items_2[_a], object = _b[0], pointer = _b[1]; if (object === null || !this.isJsonPointer(pointer)) continue; var value = this.get(object, pointer); if (value) return value; } return defaultValue; } console.error('getFirst error: Input not in correct format.\n' + 'Should be: [ [ object1, pointer1 ], [ object 2, pointer2 ], etc... ]'); }; JsonPointer.set = function (object, pointer, value, insert) { if (insert === void 0) { insert = false; } var keyArray = this.parse(pointer); if (keyArray !== null) { var subObject = object; for (var i = 0, l = keyArray.length - 1; i < l; ++i) { var key = keyArray[i]; if (key === '-' && validator_functions_1.isArray(subObject)) key = subObject.length; if (validator_functions_1.isMap(subObject) && subObject.has(key)) { subObject = subObject.get(key); } else { if (!utility_functions_1.hasOwn(subObject, key)) { subObject[key] = (keyArray[i + 1].match(/^(\d+|-)$/)) ? [] : {}; } subObject = subObject[key]; } } var lastKey = keyArray[keyArray.length - 1]; if (validator_functions_1.isArray(subObject) && lastKey === '-') { subObject.push(value); } else if (insert && validator_functions_1.isArray(subObject) && !isNaN(+lastKey)) { subObject.splice(lastKey, 0, value); } else if (validator_functions_1.isMap(subObject)) { subObject.set(lastKey, value); } else { subObject[lastKey] = value; } return object; } console.error('set error: Invalid JSON Pointer: ' + pointer); }; JsonPointer.setCopy = function (object, pointer, value, insert) { if (insert === void 0) { insert = false; } var keyArray = this.parse(pointer); if (keyArray !== null) { var newObject = utility_functions_1.copy(object); var subObject = newObject; for (var i = 0, l = keyArray.length - 1; i < l; ++i) { var key = keyArray[i]; if (key === '-' && validator_functions_1.isArray(subObject)) key = subObject.length; if (validator_functions_1.isMap(subObject) && subObject.has(key)) { subObject.set(key, utility_functions_1.copy(subObject.get(key))); subObject = subObject.get(key); } else { if (!utility_functions_1.hasOwn(subObject, key)) { subObject[key] = (keyArray[i + 1].match(/^(\d+|-)$/)) ? [] : {}; } subObject[key] = utility_functions_1.copy(subObject[key]); subObject = subObject[key]; } } var lastKey = keyArray[keyArray.length - 1]; if (validator_functions_1.isArray(subObject) && lastKey === '-') { subObject.push(value); } else if (insert && validator_functions_1.isArray(subObject) && !isNaN(+lastKey)) { subObject.splice(lastKey, 0, value); } else if (validator_functions_1.isMap(subObject)) { subObject.set(lastKey, value); } else { subObject[lastKey] = value; } return newObject; } console.error('setCopy error: Invalid JSON Pointer: ' + pointer); }; JsonPointer.insert = function (object, pointer, value) { this.set(object, pointer, value, true); }; JsonPointer.insertCopy = function (object, pointer, value) { this.setCopy(object, pointer, value, true); }; JsonPointer.remove = function (object, pointer) { var keyArray = this.parse(pointer); if (keyArray !== null && keyArray.length) { var lastKey = keyArray.pop(); var parentObject = this.get(object, keyArray); if (validator_functions_1.isArray(parentObject)) { if (lastKey === '-') lastKey = parentObject.length - 1; parentObject.splice(lastKey, 1); } else if (validator_functions_1.isObject(parentObject)) { delete parentObject[lastKey]; } return object; } console.error('remove error: Invalid JSON Pointer: ' + pointer); }; JsonPointer.has = function (object, pointer) { return this.get(object, pointer, 0, null, true); }; JsonPointer.dict = function (object) { var results = {}; this.forEachDeep(object, function (value, pointer) { if (typeof value !== 'object') results[pointer] = value; }); return results; }; JsonPointer.forEachDeep = function (object, fn, bottomUp, pointer, rootObject) { if (bottomUp === void 0) { bottomUp = false; } if (pointer === void 0) { pointer = ''; } if (rootObject === void 0) { rootObject = object; } if (typeof fn === 'function') { if (!bottomUp) fn(object, pointer, rootObject); if (validator_functions_1.isObject(object) || validator_functions_1.isArray(object)) { for (var _i = 0, _a = Object.keys(object); _i < _a.length; _i++) { var key = _a[_i]; var newPointer = pointer + '/' + this.escape(key); this.forEachDeep(object[key], fn, bottomUp, newPointer, rootObject); } } if (bottomUp) fn(object, pointer, rootObject); } else { console.error('forEachDeep error: Iterator must be a function.'); } }; JsonPointer.forEachDeepCopy = function (object, fn, bottomUp, pointer, rootObject) { if (bottomUp === void 0) { bottomUp = false; } if (pointer === void 0) { pointer = ''; } if (rootObject === void 0) { rootObject = object; } if (typeof fn === 'function') { if (validator_functions_1.isObject(object) || validator_functions_1.isArray(object)) { var newObject = Object.assign(validator_functions_1.isArray(object) ? [] : {}, object); if (!bottomUp) fn(newObject, pointer, rootObject); for (var _i = 0, _a = Object.keys(newObject); _i < _a.length; _i++) { var key = _a[_i]; var newPointer = pointer + '/' + this.escape(key); newObject[key] = this.forEachDeepCopy(object[key], fn, bottomUp, newPointer, rootObject); } if (bottomUp) fn(newObject, pointer, rootObject); } else { return fn(object, pointer, rootObject); } } console.error('forEachDeep error: Iterator must be a function.'); }; JsonPointer.escape = function (key) { return key.toString().replace(/~/g, '~0').replace(/\//g, '~1'); }; JsonPointer.unescape = function (key) { return key.toString().replace(/~1/g, '/').replace(/~0/g, '~'); }; JsonPointer.parse = function (pointer) { if (validator_functions_1.isArray(pointer)) return pointer; if (typeof pointer === 'string') { if (pointer[0] === '#') pointer = pointer.slice(1); if (pointer === '') return []; if (pointer[0] !== '/') { console.error('parse error: Invalid JSON Pointer, does not start with "/": ' + pointer); return; } return pointer.slice(1).split('/').map(this.unescape); } console.error('parse error: Invalid JSON Pointer, not a string or array:'); console.error(pointer); }; JsonPointer.compile = function (keyArray, defaultValue) { var _this = this; if (defaultValue === void 0) { defaultValue = ''; } if (validator_functions_1.isArray(keyArray)) { if (keyArray.length === 0) return ''; return '/' + keyArray.map(function (key) { return key === '' ? defaultValue : _this.escape(key); }).join('/'); } if (typeof keyArray === 'string') { if (keyArray[0] === '#') keyArray = keyArray.slice(1); if (keyArray.length && keyArray[0] !== '/') { console.error('compile error: Invalid JSON Pointer, does not start with "/": ' + keyArray); return; } return keyArray; } console.error('compile error: Invalid JSON Pointer, not a string or array:'); console.error(keyArray); }; JsonPointer.toKey = function (pointer) { var keyArray = this.parse(pointer); if (keyArray === null) return null; if (!keyArray.length) return ''; return keyArray[keyArray.length - 1]; }; JsonPointer.isJsonPointer = function (value) { if (typeof value === 'string') { if (value === '') return true; if (value[0] === '#') value = value.slice(1); if (value[0] === '/') return true; } return false; }; JsonPointer.isSubPointer = function (shortPointer, longPointer) { var shortArray = (validator_functions_1.isArray(shortPointer)) ? shortPointer : this.parse(shortPointer); var longArray = (validator_functions_1.isArray(longPointer)) ? longPointer : this.parse(longPointer); if (!shortArray || !longArray) { console.error('isSubPointer error: Invalid JSON Pointer, not a string or array:'); if (!shortArray) console.error(shortPointer); if (!longArray) console.error(longPointer); return; } if (shortArray.length > longArray.length) return false; for (var _i = 0, _a = Object.keys(shortArray); _i < _a.length; _i++) { var i = _a[_i]; if (shortArray[i] !== longArray[i]) return false; } return true; }; JsonPointer.toIndexedPointer = function (genericPointer, indexArray, arrayMap) { if (arrayMap === void 0) { arrayMap = null; } if (this.isJsonPointer(genericPointer) && validator_functions_1.isArray(indexArray)) { if (validator_functions_1.isMap(arrayMap)) { var arrayIndex_1 = 0; return genericPointer.replace(/\/\-(?=\/|$)/g, function (key, stringIndex) { var subPointer = genericPointer.slice(0, stringIndex); if (arrayMap.has(subPointer)) return '/' + indexArray[arrayIndex_1++]; }); } else { var indexedPointer = genericPointer; for (var _i = 0, indexArray_1 = indexArray; _i < indexArray_1.length; _i++) { var pointerIndex = indexArray_1[_i]; indexedPointer = indexedPointer.replace('/-', '/' + pointerIndex); } return indexedPointer; } } console.error('toIndexedPointer error: genericPointer must be ' + 'a JSON Pointer and indexArray must be an array.'); console.error(genericPointer); console.error(indexArray); }; ; JsonPointer.toGenericPointer = function (indexedPointer, arrayMap) { if (this.isJsonPointer(indexedPointer) && validator_functions_1.isMap(arrayMap)) { var pointerArray = this.parse(indexedPointer); for (var i = 1, l = pointerArray.length; i < l; i++) { var subPointer = this.compile(pointerArray.slice(0, i)); if (arrayMap.has(subPointer) && arrayMap.get(subPointer) <= +pointerArray[i]) { pointerArray[i] = '-'; } } return this.compile(pointerArray); } console.error('toGenericPointer error: indexedPointer must be ' + 'a JSON Pointer and arrayMap must be a Map.'); console.error(indexedPointer); console.error(arrayMap); }; ; JsonPointer.toControlPointer = function (formGroup, dataPointer) { var dataPointerArray = this.parse(dataPointer); var controlPointerArray = []; var subGroup = formGroup; if (dataPointerArray !== null) { for (var _i = 0, dataPointerArray_1 = dataPointerArray; _i < dataPointerArray_1.length; _i++) { var key = dataPointerArray_1[_i]; if (subGroup.hasOwnProperty('controls')) { controlPointerArray.push('controls'); subGroup = subGroup.controls; } if (validator_functions_1.isArray(subGroup) && (key === '-')) { controlPointerArray.push((subGroup.length - 1).toString()); subGroup = subGroup[subGroup.length - 1]; } else if (subGroup.hasOwnProperty(key)) { controlPointerArray.push(key); subGroup = subGroup[key]; } else { console.error('toControlPointer error: Unable to find "' + key + '" item in FormGroup.'); console.error(dataPointer); console.error(formGroup); return; } } return this.compile(controlPointerArray); } console.error('getControl error: Invalid JSON Pointer: ' + dataPointer); }; JsonPointer.parseObjectPath = function (path) { if (validator_functions_1.isArray(path)) return path; if (typeof path === 'string') { var index = 0; var parts = []; while (index < path.length) { var nextDot = path.indexOf('.', index); var nextOB = path.indexOf('[', index); if (nextDot === -1 && nextOB === -1) { parts.push(path.slice(index)); index = path.length; } else if (nextDot !== -1 && (nextDot < nextOB || nextOB === -1)) { parts.push(path.slice(index, nextDot)); index = nextDot + 1; } else { if (nextOB > index) { parts.push(path.slice(index, nextOB)); index = nextOB; } var quote = path.charAt(nextOB + 1); if (quote === '"' || quote === "'") { var nextCB = path.indexOf(quote + ']', nextOB); while (nextCB !== -1 && path.charAt(nextCB - 1) === '\\') { nextCB = path.indexOf(quote + ']', nextCB + 2); } if (nextCB === -1) nextCB = path.length; parts.push(path.slice(index + 2, nextCB) .replace(new RegExp('\\' + quote, 'g'), quote)); index = nextCB + 2; } else { var nextCB = path.indexOf(']', nextOB); if (nextCB === -1) nextCB = path.length; parts.push(path.slice(index + 1, nextCB)); index = nextCB + 1; } if (path.charAt(index) === '.') index++; } } return parts; } console.error('parseObjectPath error: Input object path must be a string.'); }; return JsonPointer; }()); JsonPointer = __decorate([ core_1.Injectable(), __metadata("design:paramtypes", []) ], JsonPointer); exports.JsonPointer = JsonPointer; //# sourceMappingURL=jsonpointer.functions.js.map