{"version":3,"file":"zajsf-core.mjs","sources":["../../../../projects/zajsf-core/src/lib/locale/de-validation-messages.ts","../../../../projects/zajsf-core/src/lib/locale/en-validation-messages.ts","../../../../projects/zajsf-core/src/lib/locale/es-validation-messages.ts","../../../../projects/zajsf-core/src/lib/locale/fr-validation-messages.ts","../../../../projects/zajsf-core/src/lib/locale/it-validation-messages.ts","../../../../projects/zajsf-core/src/lib/locale/pt-validation-messages.ts","../../../../projects/zajsf-core/src/lib/locale/zh-validation-messages.ts","../../../../projects/zajsf-core/src/lib/shared/validator.functions.ts","../../../../projects/zajsf-core/src/lib/shared/utility.functions.ts","../../../../projects/zajsf-core/src/lib/shared/jsonpointer.functions.ts","../../../../projects/zajsf-core/src/lib/shared/format-regex.constants.ts","../../../../projects/zajsf-core/src/lib/shared/json.validators.ts","../../../../projects/zajsf-core/src/lib/shared/merge-schemas.function.ts","../../../../projects/zajsf-core/src/lib/shared/json-schema.functions.ts","../../../../projects/zajsf-core/src/lib/shared/convert-schema-to-draft6.function.ts","../../../../projects/zajsf-core/src/lib/shared/form-group.functions.ts","../../../../projects/zajsf-core/src/lib/shared/layout.functions.ts","../../../../projects/zajsf-core/src/lib/shared/index.ts","../../../../projects/zajsf-core/src/lib/json-schema-form.service.ts","../../../../projects/zajsf-core/src/lib/widget-library/add-reference.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/button.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/checkbox.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/checkboxes.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/file.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/input.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/message.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/none.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/number.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/one-of.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/radios.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/select-framework.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/orderable.directive.ts","../../../../projects/zajsf-core/src/lib/widget-library/root.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/section.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/select.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/select-widget.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/submit.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/tabs.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/template.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/textarea.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/widget-library.service.ts","../../../../projects/zajsf-core/src/lib/framework-library/framework.ts","../../../../projects/zajsf-core/src/lib/framework-library/framework-library.service.ts","../../../../projects/zajsf-core/src/lib/json-schema-form.component.ts","../../../../projects/zajsf-core/src/lib/json-schema-form.component.html","../../../../projects/zajsf-core/src/lib/framework-library/no-framework.component.ts","../../../../projects/zajsf-core/src/lib/framework-library/no-framework.component.html","../../../../projects/zajsf-core/src/lib/framework-library/no.framework.ts","../../../../projects/zajsf-core/src/lib/widget-library/hidden.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/tab.component.ts","../../../../projects/zajsf-core/src/lib/widget-library/index.ts","../../../../projects/zajsf-core/src/lib/widget-library/widget-library.module.ts","../../../../projects/zajsf-core/src/lib/framework-library/no-framework.module.ts","../../../../projects/zajsf-core/src/lib/json-schema-form.module.ts","../../../../projects/zajsf-core/src/public_api.ts","../../../../projects/zajsf-core/src/zajsf-core.ts"],"sourcesContent":["export const deValidationMessages: any = { // Default German error messages\r\n  required: 'Darf nicht leer sein',\r\n  minLength: 'Mindestens {{minimumLength}} Zeichen benötigt (aktuell: {{currentLength}})',\r\n  maxLength: 'Maximal {{maximumLength}} Zeichen erlaubt (aktuell: {{currentLength}})',\r\n  pattern: 'Entspricht nicht diesem regulären Ausdruck: {{requiredPattern}}',\r\n  format: function (error) {\r\n    switch (error.requiredFormat) {\r\n      case 'date':\r\n        return 'Muss ein Datum sein, z. B. \"2000-12-31\"';\r\n      case 'time':\r\n        return 'Muss eine Zeitangabe sein, z. B. \"16:20\" oder \"03:14:15.9265\"';\r\n      case 'date-time':\r\n        return 'Muss Datum mit Zeit beinhalten, z. B. \"2000-03-14T01:59\" oder \"2000-03-14T01:59:26.535Z\"';\r\n      case 'email':\r\n        return 'Keine gültige E-Mail-Adresse (z. B. \"name@example.com\")';\r\n      case 'hostname':\r\n        return 'Kein gültiger Hostname (z. B. \"example.com\")';\r\n      case 'ipv4':\r\n        return 'Keine gültige IPv4-Adresse (z. B. \"127.0.0.1\")';\r\n      case 'ipv6':\r\n        return 'Keine gültige IPv6-Adresse (z. B. \"1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0\")';\r\n      // TODO: add examples for 'uri', 'uri-reference', and 'uri-template'\r\n      // case 'uri': case 'uri-reference': case 'uri-template':\r\n      case 'url':\r\n        return 'Keine gültige URL (z. B. \"http://www.example.com/page.html\")';\r\n      case 'uuid':\r\n        return 'Keine gültige UUID (z. B. \"12345678-9ABC-DEF0-1234-56789ABCDEF0\")';\r\n      case 'color':\r\n        return 'Kein gültiger Farbwert (z. B. \"#FFFFFF\" oder \"rgb(255, 255, 255)\")';\r\n      case 'json-pointer':\r\n        return 'Kein gültiger JSON-Pointer (z. B. \"/pointer/to/something\")';\r\n      case 'relative-json-pointer':\r\n        return 'Kein gültiger relativer JSON-Pointer (z. B. \"2/pointer/to/something\")';\r\n      case 'regex':\r\n        return 'Kein gültiger regulärer Ausdruck (z. B. \"(1-)?\\\\d{3}-\\\\d{3}-\\\\d{4}\")';\r\n      default:\r\n        return 'Muss diesem Format entsprechen: ' + error.requiredFormat;\r\n    }\r\n  },\r\n  minimum: 'Muss mindestens {{minimumValue}} sein',\r\n  exclusiveMinimum: 'Muss größer als {{exclusiveMinimumValue}} sein',\r\n  maximum: 'Darf maximal {{maximumValue}} sein',\r\n  exclusiveMaximum: 'Muss kleiner als {{exclusiveMaximumValue}} sein',\r\n  multipleOf: function (error) {\r\n    if ((1 / error.multipleOfValue) % 10 === 0) {\r\n      const decimals = Math.log10(1 / error.multipleOfValue);\r\n      return `Maximal ${decimals} Dezimalstellen erlaubt`;\r\n    } else {\r\n      return `Muss ein Vielfaches von ${error.multipleOfValue} sein`;\r\n    }\r\n  },\r\n  minProperties: 'Mindestens {{minimumProperties}} Attribute erforderlich (aktuell: {{currentProperties}})',\r\n  maxProperties: 'Maximal {{maximumProperties}} Attribute erlaubt (aktuell: {{currentProperties}})',\r\n  minItems: 'Mindestens {{minimumItems}} Werte erforderlich (aktuell: {{currentItems}})',\r\n  maxItems: 'Maximal {{maximumItems}} Werte erlaubt (aktuell: {{currentItems}})',\r\n  uniqueItems: 'Alle Werte müssen eindeutig sein',\r\n  // Note: No default error messages for 'type', 'const', 'enum', or 'dependencies'\r\n};\r\n","export const enValidationMessages: any = { // Default English error messages\r\n  required: 'This field is required.',\r\n  minLength: 'Must be {{minimumLength}} characters or longer (current length: {{currentLength}})',\r\n  maxLength: 'Must be {{maximumLength}} characters or shorter (current length: {{currentLength}})',\r\n  pattern: 'Must match pattern: {{requiredPattern}}',\r\n  format: function (error) {\r\n    switch (error.requiredFormat) {\r\n      case 'date':\r\n        return 'Must be a date, like \"2000-12-31\"';\r\n      case 'time':\r\n        return 'Must be a time, like \"16:20\" or \"03:14:15.9265\"';\r\n      case 'date-time':\r\n        return 'Must be a date-time, like \"2000-03-14T01:59\" or \"2000-03-14T01:59:26.535Z\"';\r\n      case 'email':\r\n        return 'Must be an email address, like \"name@example.com\"';\r\n      case 'hostname':\r\n        return 'Must be a hostname, like \"example.com\"';\r\n      case 'ipv4':\r\n        return 'Must be an IPv4 address, like \"127.0.0.1\"';\r\n      case 'ipv6':\r\n        return 'Must be an IPv6 address, like \"1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0\"';\r\n      // TODO: add examples for 'uri', 'uri-reference', and 'uri-template'\r\n      // case 'uri': case 'uri-reference': case 'uri-template':\r\n      case 'url':\r\n        return 'Must be a url, like \"http://www.example.com/page.html\"';\r\n      case 'uuid':\r\n        return 'Must be a uuid, like \"12345678-9ABC-DEF0-1234-56789ABCDEF0\"';\r\n      case 'color':\r\n        return 'Must be a color, like \"#FFFFFF\" or \"rgb(255, 255, 255)\"';\r\n      case 'json-pointer':\r\n        return 'Must be a JSON Pointer, like \"/pointer/to/something\"';\r\n      case 'relative-json-pointer':\r\n        return 'Must be a relative JSON Pointer, like \"2/pointer/to/something\"';\r\n      case 'regex':\r\n        return 'Must be a regular expression, like \"(1-)?\\\\d{3}-\\\\d{3}-\\\\d{4}\"';\r\n      default:\r\n        return 'Must be a correctly formatted ' + error.requiredFormat;\r\n    }\r\n  },\r\n  minimum: 'Must be {{minimumValue}} or more',\r\n  exclusiveMinimum: 'Must be more than {{exclusiveMinimumValue}}',\r\n  maximum: 'Must be {{maximumValue}} or less',\r\n  exclusiveMaximum: 'Must be less than {{exclusiveMaximumValue}}',\r\n  multipleOf: function (error) {\r\n    if ((1 / error.multipleOfValue) % 10 === 0) {\r\n      const decimals = Math.log10(1 / error.multipleOfValue);\r\n      return `Must have ${decimals} or fewer decimal places.`;\r\n    } else {\r\n      return `Must be a multiple of ${error.multipleOfValue}.`;\r\n    }\r\n  },\r\n  minProperties: 'Must have {{minimumProperties}} or more items (current items: {{currentProperties}})',\r\n  maxProperties: 'Must have {{maximumProperties}} or fewer items (current items: {{currentProperties}})',\r\n  minItems: 'Must have {{minimumItems}} or more items (current items: {{currentItems}})',\r\n  maxItems: 'Must have {{maximumItems}} or fewer items (current items: {{currentItems}})',\r\n  uniqueItems: 'All items must be unique',\r\n  // Note: No default error messages for 'type', 'const', 'enum', or 'dependencies'\r\n};\r\n","export const esValidationMessages: any = { // Default Spanish error messages\r\n  required: 'Este campo está requerido.',\r\n  minLength: 'Debe tener {{minimumLength}} caracteres o más longitud (longitud actual: {{currentLength}})',\r\n  maxLength: 'Debe tener {{maximumLength}} caracteres o menos longitud (longitud actual: {{currentLength}})',\r\n  pattern: 'Must match pattern: {{requiredPattern}}',\r\n  format: function (error) {\r\n    switch (error.requiredFormat) {\r\n      case 'date':\r\n        return 'Debe tener una fecha, ej \"2000-12-31\"';\r\n      case 'time':\r\n        return 'Debe tener una hora, ej \"16:20\" o \"03:14:15.9265\"';\r\n      case 'date-time':\r\n        return 'Debe tener fecha y hora, ej \"2000-03-14T01:59\" o \"2000-03-14T01:59:26.535Z\"';\r\n      case 'email':\r\n        return 'No hay dirección de correo electrónico válida, ej \"name@example.com\"';\r\n      case 'hostname':\r\n        return 'Debe ser un nombre de host válido, ej \"example.com\"';\r\n      case 'ipv4':\r\n        return 'Debe ser una dirección de IPv4, ej \"127.0.0.1\"';\r\n      case 'ipv6':\r\n        return 'Debe ser una dirección de IPv6, ej \"1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0\"';\r\n      case 'url':\r\n        return 'Debe ser una URL, ej \"http://www.example.com/page.html\"';\r\n      case 'uuid':\r\n        return 'Debe ser un UUID, ej \"12345678-9ABC-DEF0-1234-56789ABCDEF0\"';\r\n      case 'color':\r\n        return 'Debe ser un color, ej \"#FFFFFF\" or \"rgb(255, 255, 255)\"';\r\n      case 'json-pointer':\r\n        return 'Debe ser un JSON Pointer, ej \"/pointer/to/something\"';\r\n      case 'relative-json-pointer':\r\n        return 'Debe ser un JSON Pointer relativo, ej \"2/pointer/to/something\"';\r\n      case 'regex':\r\n        return 'Debe ser una expresión regular, ej \"(1-)?\\\\d{3}-\\\\d{3}-\\\\d{4}\"';\r\n      default:\r\n        return 'Debe tener el formato correcto ' + error.requiredFormat;\r\n    }\r\n  },\r\n  minimum: 'Debe ser {{minimumValue}} o más',\r\n  exclusiveMinimum: 'Debe ser superior a {{exclusiveMinimumValue}}',\r\n  maximum: 'Debe ser {{maximumValue}} o menos',\r\n  exclusiveMaximum: 'Debe ser menor que {{exclusiveMaximumValue}}',\r\n  multipleOf: function (error) {\r\n    if ((1 / error.multipleOfValue) % 10 === 0) {\r\n      const decimals = Math.log10(1 / error.multipleOfValue);\r\n      return `Se permite un máximo de ${decimals} decimales`;\r\n    } else {\r\n      return `Debe ser múltiplo de ${error.multipleOfValue}.`;\r\n    }\r\n  },\r\n  minProperties: 'Debe tener {{minimumProperties}} o más elementos (elementos actuales: {{currentProperties}})',\r\n  maxProperties: 'Debe tener {{maximumProperties}} o menos elementos (elementos actuales: {{currentProperties}})',\r\n  minItems: 'Debe tener {{minimumItems}} o más elementos (elementos actuales: {{currentItems}})',\r\n  maxItems: 'Debe tener {{maximumItems}} o menos elementos (elementos actuales: {{currentItems}})',\r\n  uniqueItems: 'Todos los elementos deben ser únicos',\r\n};\r\n","export const frValidationMessages: any = { // French error messages\r\n  required: 'Est obligatoire.',\r\n  minLength: 'Doit avoir minimum {{minimumLength}} caractères (actuellement: {{currentLength}})',\r\n  maxLength: 'Doit avoir maximum {{maximumLength}} caractères (actuellement: {{currentLength}})',\r\n  pattern: 'Doit respecter: {{requiredPattern}}',\r\n  format: function (error) {\r\n    switch (error.requiredFormat) {\r\n      case 'date':\r\n        return 'Doit être une date, tel que \"2000-12-31\"';\r\n      case 'time':\r\n        return 'Doit être une heure, tel que \"16:20\" ou \"03:14:15.9265\"';\r\n      case 'date-time':\r\n        return 'Doit être une date et une heure, tel que \"2000-03-14T01:59\" ou \"2000-03-14T01:59:26.535Z\"';\r\n      case 'email':\r\n        return 'Doit être une adresse e-mail, tel que \"name@example.com\"';\r\n      case 'hostname':\r\n        return 'Doit être un nom de domaine, tel que \"example.com\"';\r\n      case 'ipv4':\r\n        return 'Doit être une adresse IPv4, tel que \"127.0.0.1\"';\r\n      case 'ipv6':\r\n        return 'Doit être une adresse IPv6, tel que \"1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0\"';\r\n      // TODO: add examples for 'uri', 'uri-reference', and 'uri-template'\r\n      // case 'uri': case 'uri-reference': case 'uri-template':\r\n      case 'url':\r\n        return 'Doit être une URL, tel que \"http://www.example.com/page.html\"';\r\n      case 'uuid':\r\n        return 'Doit être un UUID, tel que \"12345678-9ABC-DEF0-1234-56789ABCDEF0\"';\r\n      case 'color':\r\n        return 'Doit être une couleur, tel que \"#FFFFFF\" or \"rgb(255, 255, 255)\"';\r\n      case 'json-pointer':\r\n        return 'Doit être un JSON Pointer, tel que \"/pointer/to/something\"';\r\n      case 'relative-json-pointer':\r\n        return 'Doit être un relative JSON Pointer, tel que \"2/pointer/to/something\"';\r\n      case 'regex':\r\n        return 'Doit être une expression régulière, tel que \"(1-)?\\\\d{3}-\\\\d{3}-\\\\d{4}\"';\r\n      default:\r\n        return 'Doit être avoir le format correct: ' + error.requiredFormat;\r\n    }\r\n  },\r\n  minimum: 'Doit être supérieur à {{minimumValue}}',\r\n  exclusiveMinimum: 'Doit avoir minimum {{exclusiveMinimumValue}} charactères',\r\n  maximum: 'Doit être inférieur à {{maximumValue}}',\r\n  exclusiveMaximum: 'Doit avoir maximum {{exclusiveMaximumValue}} charactères',\r\n  multipleOf: function (error) {\r\n    if ((1 / error.multipleOfValue) % 10 === 0) {\r\n      const decimals = Math.log10(1 / error.multipleOfValue);\r\n      return `Doit comporter ${decimals} ou moins de decimales.`;\r\n    } else {\r\n      return `Doit être un multiple de ${error.multipleOfValue}.`;\r\n    }\r\n  },\r\n  minProperties: 'Doit comporter au minimum {{minimumProperties}} éléments',\r\n  maxProperties: 'Doit comporter au maximum {{maximumProperties}} éléments',\r\n  minItems: 'Doit comporter au minimum {{minimumItems}} éléments',\r\n  maxItems: 'Doit comporter au maximum {{minimumItems}} éléments',\r\n  uniqueItems: 'Tous les éléments doivent être uniques',\r\n  // Note: No default error messages for 'type', 'const', 'enum', or 'dependencies'\r\n};\r\n","export const itValidationMessages: any = { // Default Italian error messages\r\n  required: 'Il campo è obbligatorio',\r\n  minLength: 'Deve inserire almeno {{minimumLength}} caratteri (lunghezza corrente: {{currentLength}})',\r\n  maxLength: 'Il numero massimo di caratteri consentito è {{maximumLength}} (lunghezza corrente: {{currentLength}})',\r\n  pattern: 'Devi rispettare il pattern : {{requiredPattern}}',\r\n  format: function (error) {\r\n    switch (error.requiredFormat) {\r\n      case 'date':\r\n        return 'Deve essere una data, come \"31-12-2000\"';\r\n      case 'time':\r\n        return 'Deve essere un orario, come \"16:20\" o \"03:14:15.9265\"';\r\n      case 'date-time':\r\n        return 'Deve essere data-orario, come \"14-03-2000T01:59\" or \"14-03-2000T01:59:26.535Z\"';\r\n      case 'email':\r\n        return 'Deve essere un indirzzo email, come \"name@example.com\"';\r\n      case 'hostname':\r\n        return 'Deve essere un hostname, come \"example.com\"';\r\n      case 'ipv4':\r\n        return 'Deve essere un indirizzo IPv4, come \"127.0.0.1\"';\r\n      case 'ipv6':\r\n        return 'Deve essere un indirizzo IPv6, come \"1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0\"';\r\n      // TODO: add examples for 'uri', 'uri-reference', and 'uri-template'\r\n      // case 'uri': case 'uri-reference': case 'uri-template':\r\n      case 'url':\r\n        return 'Deve essere un url, come \"http://www.example.com/page.html\"';\r\n      case 'uuid':\r\n        return 'Deve essere un uuid, come \"12345678-9ABC-DEF0-1234-56789ABCDEF0\"';\r\n      case 'color':\r\n        return 'Deve essere un colore, come \"#FFFFFF\" o \"rgb(255, 255, 255)\"';\r\n      case 'json-pointer':\r\n        return 'Deve essere un JSON Pointer, come \"/pointer/to/something\"';\r\n      case 'relative-json-pointer':\r\n        return 'Deve essere un JSON Pointer relativo, come \"2/pointer/to/something\"';\r\n      case 'regex':\r\n        return 'Deve essere una regular expression, come \"(1-)?\\\\d{3}-\\\\d{3}-\\\\d{4}\"';\r\n      default:\r\n        return 'Deve essere formattato correttamente ' + error.requiredFormat;\r\n    }\r\n  },\r\n  minimum: 'Deve essere {{minimumValue}} o più',\r\n  exclusiveMinimum: 'Deve essere più di {{exclusiveMinimumValue}}',\r\n  maximum: 'Deve essere {{maximumValue}} o meno',\r\n  exclusiveMaximum: 'Deve essere minore di {{exclusiveMaximumValue}}',\r\n  multipleOf: function (error) {\r\n    if ((1 / error.multipleOfValue) % 10 === 0) {\r\n      const decimals = Math.log10(1 / error.multipleOfValue);\r\n      return `Deve avere ${decimals} o meno decimali.`;\r\n    } else {\r\n      return `Deve essere multiplo di ${error.multipleOfValue}.`;\r\n    }\r\n  },\r\n  minProperties: 'Deve avere {{minimumProperties}} o più elementi (elementi correnti: {{currentProperties}})',\r\n  maxProperties: 'Deve avere {{maximumProperties}} o meno elementi (elementi correnti: {{currentProperties}})',\r\n  minItems: 'Deve avere {{minimumItems}} o più elementi (elementi correnti: {{currentItems}})',\r\n  maxItems: 'Deve avere {{maximumItems}} o meno elementi (elementi correnti: {{currentItems}})',\r\n  uniqueItems: 'Tutti gli elementi devono essere unici',\r\n  // Note: No default error messages for 'type', 'const', 'enum', or 'dependencies'\r\n};\r\n","export const ptValidationMessages: any = { // Brazilian Portuguese error messages\r\n  required: 'Este campo é obrigatório.',\r\n  minLength: 'É preciso no mínimo {{minimumLength}} caracteres ou mais (tamanho atual: {{currentLength}})',\r\n  maxLength: 'É preciso no máximo  {{maximumLength}} caracteres ou menos (tamanho atual: {{currentLength}})',\r\n  pattern: 'Tem que ajustar ao formato: {{requiredPattern}}',\r\n  format: function (error) {\r\n    switch (error.requiredFormat) {\r\n      case 'date':\r\n        return 'Tem que ser uma data, por exemplo \"2000-12-31\"';\r\n      case 'time':\r\n        return 'Tem que ser horário, por exemplo \"16:20\" ou \"03:14:15.9265\"';\r\n      case 'date-time':\r\n        return 'Tem que ser data e hora, por exemplo \"2000-03-14T01:59\" ou \"2000-03-14T01:59:26.535Z\"';\r\n      case 'email':\r\n        return 'Tem que ser um email, por exemplo \"fulano@exemplo.com.br\"';\r\n      case 'hostname':\r\n        return 'Tem que ser uma nome de domínio, por exemplo \"exemplo.com.br\"';\r\n      case 'ipv4':\r\n        return 'Tem que ser um endereço IPv4, por exemplo \"127.0.0.1\"';\r\n      case 'ipv6':\r\n        return 'Tem que ser um endereço IPv6, por exemplo \"1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0\"';\r\n      // TODO: add examples for 'uri', 'uri-reference', and 'uri-template'\r\n      // case 'uri': case 'uri-reference': case 'uri-template':\r\n      case 'url':\r\n        return 'Tem que ser uma URL, por exemplo \"http://www.exemplo.com.br/pagina.html\"';\r\n      case 'uuid':\r\n        return 'Tem que ser um uuid, por exemplo \"12345678-9ABC-DEF0-1234-56789ABCDEF0\"';\r\n      case 'color':\r\n        return 'Tem que ser uma cor, por exemplo \"#FFFFFF\" ou \"rgb(255, 255, 255)\"';\r\n      case 'json-pointer':\r\n        return 'Tem que ser um JSON Pointer, por exemplo \"/referencia/para/algo\"';\r\n      case 'relative-json-pointer':\r\n        return 'Tem que ser um JSON Pointer relativo, por exemplo \"2/referencia/para/algo\"';\r\n      case 'regex':\r\n        return 'Tem que ser uma expressão regular, por exemplo \"(1-)?\\\\d{3}-\\\\d{3}-\\\\d{4}\"';\r\n      default:\r\n        return 'Tem que ser no formato: ' + error.requiredFormat;\r\n    }\r\n  },\r\n  minimum: 'Tem que ser {{minimumValue}} ou mais',\r\n  exclusiveMinimum: 'Tem que ser mais que {{exclusiveMinimumValue}}',\r\n  maximum: 'Tem que ser {{maximumValue}} ou menos',\r\n  exclusiveMaximum: 'Tem que ser menor que {{exclusiveMaximumValue}}',\r\n  multipleOf: function (error) {\r\n    if ((1 / error.multipleOfValue) % 10 === 0) {\r\n      const decimals = Math.log10(1 / error.multipleOfValue);\r\n      return `Tem que ter ${decimals} ou menos casas decimais.`;\r\n    } else {\r\n      return `Tem que ser um múltiplo de ${error.multipleOfValue}.`;\r\n    }\r\n  },\r\n  minProperties: 'Deve ter {{minimumProperties}} ou mais itens (itens até o momento: {{currentProperties}})',\r\n  maxProperties: 'Deve ter {{maximumProperties}} ou menos intens (itens até o momento: {{currentProperties}})',\r\n  minItems: 'Deve ter {{minimumItems}} ou mais itens (itens até o momento: {{currentItems}})',\r\n  maxItems: 'Deve ter {{maximumItems}} ou menos itens (itens até o momento: {{currentItems}})',\r\n  uniqueItems: 'Todos os itens devem ser únicos',\r\n  // Note: No default error messages for 'type', 'const', 'enum', or 'dependencies'\r\n};\r\n","export const zhValidationMessages: any = { // Chinese error messages\r\n  required: '必填字段.',\r\n  minLength: '字符长度必须大于或者等于 {{minimumLength}} (当前长度: {{currentLength}})',\r\n  maxLength: '字符长度必须小于或者等于 {{maximumLength}} (当前长度: {{currentLength}})',\r\n  pattern: '必须匹配正则表达式: {{requiredPattern}}',\r\n  format: function (error) {\r\n    switch (error.requiredFormat) {\r\n      case 'date':\r\n        return '必须为日期格式, 比如 \"2000-12-31\"';\r\n      case 'time':\r\n        return '必须为时间格式, 比如 \"16:20\" 或者 \"03:14:15.9265\"';\r\n      case 'date-time':\r\n        return '必须为日期时间格式, 比如 \"2000-03-14T01:59\" 或者 \"2000-03-14T01:59:26.535Z\"';\r\n      case 'email':\r\n        return '必须为邮箱地址, 比如 \"name@example.com\"';\r\n      case 'hostname':\r\n        return '必须为主机名, 比如 \"example.com\"';\r\n      case 'ipv4':\r\n        return '必须为 IPv4 地址, 比如 \"127.0.0.1\"';\r\n      case 'ipv6':\r\n        return '必须为 IPv6 地址, 比如 \"1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0\"';\r\n      // TODO: add examples for 'uri', 'uri-reference', and 'uri-template'\r\n      // case 'uri': case 'uri-reference': case 'uri-template':\r\n      case 'url':\r\n        return '必须为 url, 比如 \"http://www.example.com/page.html\"';\r\n      case 'uuid':\r\n        return '必须为 uuid, 比如 \"12345678-9ABC-DEF0-1234-56789ABCDEF0\"';\r\n      case 'color':\r\n        return '必须为颜色值, 比如 \"#FFFFFF\" 或者 \"rgb(255, 255, 255)\"';\r\n      case 'json-pointer':\r\n        return '必须为 JSON Pointer, 比如 \"/pointer/to/something\"';\r\n      case 'relative-json-pointer':\r\n        return '必须为相对的 JSON Pointer, 比如 \"2/pointer/to/something\"';\r\n      case 'regex':\r\n        return '必须为正则表达式, 比如 \"(1-)?\\\\d{3}-\\\\d{3}-\\\\d{4}\"';\r\n      default:\r\n        return '必须为格式正确的 ' + error.requiredFormat;\r\n    }\r\n  },\r\n  minimum: '必须大于或者等于最小值: {{minimumValue}}',\r\n  exclusiveMinimum: '必须大于最小值: {{exclusiveMinimumValue}}',\r\n  maximum: '必须小于或者等于最大值: {{maximumValue}}',\r\n  exclusiveMaximum: '必须小于最大值: {{exclusiveMaximumValue}}',\r\n  multipleOf: function (error) {\r\n    if ((1 / error.multipleOfValue) % 10 === 0) {\r\n      const decimals = Math.log10(1 / error.multipleOfValue);\r\n      return `必须有 ${decimals} 位或更少的小数位`;\r\n    } else {\r\n      return `必须为 ${error.multipleOfValue} 的倍数`;\r\n    }\r\n  },\r\n  minProperties: '项目数必须大于或者等于 {{minimumProperties}} (当前项目数: {{currentProperties}})',\r\n  maxProperties: '项目数必须小于或者等于 {{maximumProperties}} (当前项目数: {{currentProperties}})',\r\n  minItems: '项目数必须大于或者等于 {{minimumItems}} (当前项目数: {{currentItems}})',\r\n  maxItems: '项目数必须小于或者等于 {{maximumItems}} (当前项目数: {{currentItems}})',\r\n  uniqueItems: '所有项目必须是唯一的',\r\n  // Note: No default error messages for 'type', 'const', 'enum', or 'dependencies'\r\n};\r\n","import { AbstractControl } from '@angular/forms';\r\nimport { from, Observable } from 'rxjs';\r\n\r\n/**\r\n * Validator utility function library:\r\n *\r\n * Validator and error utilities:\r\n *   _executeValidators, _executeAsyncValidators, _mergeObjects, _mergeErrors\r\n *\r\n * Individual value checking:\r\n *   isDefined, hasValue, isEmpty\r\n *\r\n * Individual type checking:\r\n *   isString, isNumber, isInteger, isBoolean, isFunction, isObject, isArray,\r\n *   isMap, isSet, isPromise, isObservable\r\n *\r\n * Multiple type checking and fixing:\r\n *   getType, isType, isPrimitive, toJavaScriptType, toSchemaType,\r\n *   _toPromise, toObservable\r\n *\r\n * Utility functions:\r\n *   inArray, xor\r\n *\r\n * Typescript types and interfaces:\r\n *   SchemaPrimitiveType, SchemaType, JavaScriptPrimitiveType, JavaScriptType,\r\n *   PrimitiveValue, PlainObject, IValidatorFn, AsyncIValidatorFn\r\n *\r\n * Note: 'IValidatorFn' is short for 'invertable validator function',\r\n *   which is a validator functions that accepts an optional second\r\n *   argument which, if set to TRUE, causes the validator to perform\r\n *   the opposite of its original function.\r\n */\r\n\r\nexport type SchemaPrimitiveType =\r\n  'string' | 'number' | 'integer' | 'boolean' | 'null';\r\nexport type SchemaType =\r\n  'string' | 'number' | 'integer' | 'boolean' | 'null' | 'object' | 'array';\r\nexport type JavaScriptPrimitiveType =\r\n  'string' | 'number' | 'boolean' | 'null' | 'undefined';\r\nexport type JavaScriptType =\r\n  'string' | 'number' | 'boolean' | 'null' | 'undefined' | 'object' | 'array' |\r\n  'map' | 'set' | 'arguments' | 'date' | 'error' | 'function' | 'json' |\r\n  'math' | 'regexp'; // Note: this list is incomplete\r\nexport type PrimitiveValue = string | number | boolean | null | undefined;\r\nexport interface PlainObject { [k: string]: any; }\r\n\r\nexport type IValidatorFn = (c: AbstractControl, i?: boolean) => PlainObject;\r\nexport type AsyncIValidatorFn = (c: AbstractControl, i?: boolean) => any;\r\n\r\n/**\r\n * '_executeValidators' utility function\r\n *\r\n * Validates a control against an array of validators, and returns\r\n * an array of the same length containing a combination of error messages\r\n * (from invalid validators) and null values (from valid validators)\r\n *\r\n * //  { AbstractControl } control - control to validate\r\n * //  { IValidatorFn[] } validators - array of validators\r\n * //  { boolean } invert - invert?\r\n * // { PlainObject[] } - array of nulls and error message\r\n */\r\nexport function _executeValidators(control, validators, invert = false) {\r\n  return validators.map(validator => validator(control, invert));\r\n}\r\n\r\n/**\r\n * '_executeAsyncValidators' utility function\r\n *\r\n * Validates a control against an array of async validators, and returns\r\n * an array of observabe results of the same length containing a combination of\r\n * error messages (from invalid validators) and null values (from valid ones)\r\n *\r\n * //  { AbstractControl } control - control to validate\r\n * //  { AsyncIValidatorFn[] } validators - array of async validators\r\n * //  { boolean } invert - invert?\r\n * //  - array of observable nulls and error message\r\n */\r\nexport function _executeAsyncValidators(control, validators, invert = false) {\r\n  return validators.map(validator => validator(control, invert));\r\n}\r\n\r\n/**\r\n * '_mergeObjects' utility function\r\n *\r\n * Recursively Merges one or more objects into a single object with combined keys.\r\n * Automatically detects and ignores null and undefined inputs.\r\n * Also detects duplicated boolean 'not' keys and XORs their values.\r\n *\r\n * //  { PlainObject[] } objects - one or more objects to merge\r\n * // { PlainObject } - merged object\r\n */\r\nexport function _mergeObjects(...objects) {\r\n  const mergedObject: PlainObject = { };\r\n  for (const currentObject of objects) {\r\n    if (isObject(currentObject)) {\r\n      for (const key of Object.keys(currentObject)) {\r\n        const currentValue = currentObject[key];\r\n        const mergedValue = mergedObject[key];\r\n        mergedObject[key] = !isDefined(mergedValue) ? currentValue :\r\n          key === 'not' && isBoolean(mergedValue, 'strict') &&\r\n            isBoolean(currentValue, 'strict') ? xor(mergedValue, currentValue) :\r\n          getType(mergedValue) === 'object' && getType(currentValue) === 'object' ?\r\n            _mergeObjects(mergedValue, currentValue) :\r\n            currentValue;\r\n      }\r\n    }\r\n  }\r\n  return mergedObject;\r\n}\r\n\r\n/**\r\n * '_mergeErrors' utility function\r\n *\r\n * Merges an array of objects.\r\n * Used for combining the validator errors returned from 'executeValidators'\r\n *\r\n * //  { PlainObject[] } arrayOfErrors - array of objects\r\n * // { PlainObject } - merged object, or null if no usable input objectcs\r\n */\r\nexport function _mergeErrors(arrayOfErrors) {\r\n  const mergedErrors = _mergeObjects(...arrayOfErrors);\r\n  return isEmpty(mergedErrors) ? null : mergedErrors;\r\n}\r\n\r\n/**\r\n * 'isDefined' utility function\r\n *\r\n * Checks if a variable contains a value of any type.\r\n * Returns true even for otherwise 'falsey' values of 0, '', and false.\r\n *\r\n * //   value - the value to check\r\n * // { boolean } - false if undefined or null, otherwise true\r\n */\r\nexport function isDefined(value) {\r\n  return value !== undefined && value !== null;\r\n}\r\n\r\n/**\r\n * 'hasValue' utility function\r\n *\r\n * Checks if a variable contains a value.\r\n * Returs false for null, undefined, or a zero-length strng, '',\r\n * otherwise returns true.\r\n * (Stricter than 'isDefined' because it also returns false for '',\r\n * though it stil returns true for otherwise 'falsey' values 0 and false.)\r\n *\r\n * //   value - the value to check\r\n * // { boolean } - false if undefined, null, or '', otherwise true\r\n */\r\nexport function hasValue(value) {\r\n  return value !== undefined && value !== null && value !== '';\r\n}\r\n\r\n/**\r\n * 'isEmpty' utility function\r\n *\r\n * Similar to !hasValue, but also returns true for empty arrays and objects.\r\n *\r\n * //   value - the value to check\r\n * // { boolean } - false if undefined, null, or '', otherwise true\r\n */\r\nexport function isEmpty(value) {\r\n  if (isArray(value)) { return !value.length; }\r\n  if (isObject(value)) { return !Object.keys(value).length; }\r\n  return value === undefined || value === null || value === '';\r\n}\r\n\r\n/**\r\n * 'isString' utility function\r\n *\r\n * Checks if a value is a string.\r\n *\r\n * //   value - the value to check\r\n * // { boolean } - true if string, false if not\r\n */\r\nexport function isString(value) {\r\n  return typeof value === 'string';\r\n}\r\n\r\n/**\r\n * 'isNumber' utility function\r\n *\r\n * Checks if a value is a regular number, numeric string, or JavaScript Date.\r\n *\r\n * //   value - the value to check\r\n * //  { any = false } strict - if truthy, also checks JavaScript tyoe\r\n * // { boolean } - true if number, false if not\r\n */\r\nexport function isNumber(value, strict: any = false) {\r\n  if (strict && typeof value !== 'number') { return false; }\r\n  return !isNaN(value) && value !== value / 0;\r\n}\r\n\r\n/**\r\n * 'isInteger' utility function\r\n *\r\n * Checks if a value is an integer.\r\n *\r\n * //   value - the value to check\r\n * //  { any = false } strict - if truthy, also checks JavaScript tyoe\r\n * // {boolean } - true if number, false if not\r\n */\r\nexport function isInteger(value, strict: any = false) {\r\n  if (strict && typeof value !== 'number') { return false; }\r\n  return !isNaN(value) &&  value !== value / 0 && value % 1 === 0;\r\n}\r\n\r\n/**\r\n * 'isBoolean' utility function\r\n *\r\n * Checks if a value is a boolean.\r\n *\r\n * //   value - the value to check\r\n * //  { any = null } option - if 'strict', also checks JavaScript type\r\n *                              if TRUE or FALSE, checks only for that value\r\n * // { boolean } - true if boolean, false if not\r\n */\r\nexport function isBoolean(value, option: any = null) {\r\n  if (option === 'strict') { return value === true || value === false; }\r\n  if (option === true) {\r\n    return value === true || value === 1 || value === 'true' || value === '1';\r\n  }\r\n  if (option === false) {\r\n    return value === false || value === 0 || value === 'false' || value === '0';\r\n  }\r\n  return value === true || value === 1 || value === 'true' || value === '1' ||\r\n    value === false || value === 0 || value === 'false' || value === '0';\r\n}\r\n\r\nexport function isFunction(item: any): boolean {\r\n  return typeof item === 'function';\r\n}\r\n\r\nexport function isObject(item: any): boolean {\r\n  return item !== null && typeof item === 'object';\r\n}\r\n\r\nexport function isArray(item: any): boolean {\r\n  return Array.isArray(item);\r\n}\r\n\r\nexport function isDate(item: any): boolean {\r\n  return !!item && Object.prototype.toString.call(item) === '[object Date]';\r\n}\r\n\r\nexport function isMap(item: any): boolean {\r\n  return !!item && Object.prototype.toString.call(item) === '[object Map]';\r\n}\r\n\r\nexport function isSet(item: any): boolean {\r\n  return !!item && Object.prototype.toString.call(item) === '[object Set]';\r\n}\r\n\r\nexport function isSymbol(item: any): boolean {\r\n  return typeof item === 'symbol';\r\n}\r\n\r\n/**\r\n * 'getType' function\r\n *\r\n * Detects the JSON Schema Type of a value.\r\n * By default, detects numbers and integers even if formatted as strings.\r\n * (So all integers are also numbers, and any number may also be a string.)\r\n * However, it only detects true boolean values (to detect boolean values\r\n * in non-boolean formats, use isBoolean() instead).\r\n *\r\n * If passed a second optional parameter of 'strict', it will only detect\r\n * numbers and integers if they are formatted as JavaScript numbers.\r\n *\r\n * Examples:\r\n * getType('10.5') = 'number'\r\n * getType(10.5) = 'number'\r\n * getType('10') = 'integer'\r\n * getType(10) = 'integer'\r\n * getType('true') = 'string'\r\n * getType(true) = 'boolean'\r\n * getType(null) = 'null'\r\n * getType({ }) = 'object'\r\n * getType([]) = 'array'\r\n *\r\n * getType('10.5', 'strict') = 'string'\r\n * getType(10.5, 'strict') = 'number'\r\n * getType('10', 'strict') = 'string'\r\n * getType(10, 'strict') = 'integer'\r\n * getType('true', 'strict') = 'string'\r\n * getType(true, 'strict') = 'boolean'\r\n *\r\n * //   value - value to check\r\n * //  { any = false } strict - if truthy, also checks JavaScript tyoe\r\n * // { SchemaType }\r\n */\r\nexport function getType(value, strict: any = false) {\r\n  if (!isDefined(value)) { return 'null'; }\r\n  if (isArray(value)) { return 'array'; }\r\n  if (isObject(value)) { return 'object'; }\r\n  if (isBoolean(value, 'strict')) { return 'boolean'; }\r\n  if (isInteger(value, strict)) { return 'integer'; }\r\n  if (isNumber(value, strict)) { return 'number'; }\r\n  if (isString(value) || (!strict && isDate(value))) { return 'string'; }\r\n  return null;\r\n}\r\n\r\n/**\r\n * 'isType' function\r\n *\r\n * Checks wether an input (probably string) value contains data of\r\n * a specified JSON Schema type\r\n *\r\n * //  { PrimitiveValue } value - value to check\r\n * //  { SchemaPrimitiveType } type - type to check\r\n * // { boolean }\r\n */\r\nexport function isType(value, type) {\r\n  switch (type) {\r\n    case 'string':\r\n      return isString(value) || isDate(value);\r\n    case 'number':\r\n      return isNumber(value);\r\n    case 'integer':\r\n      return isInteger(value);\r\n    case 'boolean':\r\n      return isBoolean(value);\r\n    case 'null':\r\n      return !hasValue(value);\r\n    default:\r\n      console.error(`isType error: \"${type}\" is not a recognized type.`);\r\n      return null;\r\n  }\r\n}\r\n\r\n/**\r\n * 'isPrimitive' function\r\n *\r\n * Checks wether an input value is a JavaScript primitive type:\r\n * string, number, boolean, or null.\r\n *\r\n * //   value - value to check\r\n * // { boolean }\r\n */\r\nexport function isPrimitive(value) {\r\n  return (isString(value) || isNumber(value) ||\r\n    isBoolean(value, 'strict') || value === null);\r\n}\r\n\r\n/**\r\n * \r\n * @param date \r\n * @returns {string}\r\n * exmaple:\r\n * toDateString('2018-01-01') = '2018-01-01'\r\n * toDateString('2018-01-30T00:00:00.000Z') = '2018-01-30'\r\n */\r\nexport const toIsoString = (date: Date) => {\r\n  const day = date.getDate();\r\n  const month = date.getMonth() + 1;\r\n  const year = date.getFullYear();\r\n  return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`;\r\n}\r\n\r\n/**\r\n * 'toJavaScriptType' function\r\n *\r\n * Converts an input (probably string) value to a JavaScript primitive type -\r\n * 'string', 'number', 'boolean', or 'null' - before storing in a JSON object.\r\n *\r\n * Does not coerce values (other than null), and only converts the types\r\n * of values that would otherwise be valid.\r\n *\r\n * If the optional third parameter 'strictIntegers' is TRUE, and the\r\n * JSON Schema type 'integer' is specified, it also verifies the input value\r\n * is an integer and, if it is, returns it as a JaveScript number.\r\n * If 'strictIntegers' is FALSE (or not set) the type 'integer' is treated\r\n * exactly the same as 'number', and allows decimals.\r\n *\r\n * Valid Examples:\r\n * toJavaScriptType('10',   'number' ) = 10   // '10'   is a number\r\n * toJavaScriptType('10',   'integer') = 10   // '10'   is also an integer\r\n * toJavaScriptType( 10,    'integer') = 10   //  10    is still an integer\r\n * toJavaScriptType( 10,    'string' ) = '10' //  10    can be made into a string\r\n * toJavaScriptType('10.5', 'number' ) = 10.5 // '10.5' is a number\r\n *\r\n * Invalid Examples:\r\n * toJavaScriptType('10.5', 'integer') = null // '10.5' is not an integer\r\n * toJavaScriptType( 10.5,  'integer') = null //  10.5  is still not an integer\r\n *\r\n * //  { PrimitiveValue } value - value to convert\r\n * //  { SchemaPrimitiveType | SchemaPrimitiveType[] } types - types to convert to\r\n * //  { boolean = false } strictIntegers - if FALSE, treat integers as numbers\r\n * // { PrimitiveValue }\r\n */\r\nexport function toJavaScriptType(value, types, strictIntegers = true)  {\r\n  if (!isDefined(value)) { return null; }\r\n  if (isString(types)) { types = [types]; }\r\n  if (strictIntegers && inArray('integer', types)) {\r\n    if (isInteger(value, 'strict')) { return value; }\r\n    if (isInteger(value)) { return parseInt(value, 10); }\r\n  }\r\n  if (inArray('number', types) || (!strictIntegers && inArray('integer', types))) {\r\n    if (isNumber(value, 'strict')) { return value; }\r\n    if (isNumber(value)) { return parseFloat(value); }\r\n  }\r\n  if (inArray('string', types)) {\r\n    if (isString(value)) { return value; }\r\n    // If value is a date, and types includes 'string',\r\n    // convert the date to a string\r\n    if (isDate(value)) { return toIsoString(value); }\r\n    if (isNumber(value)) { return value.toString(); }\r\n  }\r\n  // If value is a date, and types includes 'integer' or 'number',\r\n  // but not 'string', convert the date to a number\r\n  if (isDate(value) && (inArray('integer', types) || inArray('number', types))) {\r\n    return value.getTime();\r\n  }\r\n  if (inArray('boolean', types)) {\r\n    if (isBoolean(value, true)) { return true; }\r\n    if (isBoolean(value, false)) { return false; }\r\n  }\r\n  return null;\r\n}\r\n\r\n/**\r\n * 'toSchemaType' function\r\n *\r\n * Converts an input (probably string) value to the \"best\" JavaScript\r\n * equivalent available from an allowed list of JSON Schema types, which may\r\n * contain 'string', 'number', 'integer', 'boolean', and/or 'null'.\r\n * If necssary, it does progressively agressive type coersion.\r\n * It will not return null unless null is in the list of allowed types.\r\n *\r\n * Number conversion examples:\r\n * toSchemaType('10', ['number','integer','string']) = 10 // integer\r\n * toSchemaType('10', ['number','string']) = 10 // number\r\n * toSchemaType('10', ['string']) = '10' // string\r\n * toSchemaType('10.5', ['number','integer','string']) = 10.5 // number\r\n * toSchemaType('10.5', ['integer','string']) = '10.5' // string\r\n * toSchemaType('10.5', ['integer']) = 10 // integer\r\n * toSchemaType(10.5, ['null','boolean','string']) = '10.5' // string\r\n * toSchemaType(10.5, ['null','boolean']) = true // boolean\r\n *\r\n * String conversion examples:\r\n * toSchemaType('1.5x', ['boolean','number','integer','string']) = '1.5x' // string\r\n * toSchemaType('1.5x', ['boolean','number','integer']) = '1.5' // number\r\n * toSchemaType('1.5x', ['boolean','integer']) = '1' // integer\r\n * toSchemaType('1.5x', ['boolean']) = true // boolean\r\n * toSchemaType('xyz', ['number','integer','boolean','null']) = true // boolean\r\n * toSchemaType('xyz', ['number','integer','null']) = null // null\r\n * toSchemaType('xyz', ['number','integer']) = 0 // number\r\n *\r\n * Boolean conversion examples:\r\n * toSchemaType('1', ['integer','number','string','boolean']) = 1 // integer\r\n * toSchemaType('1', ['number','string','boolean']) = 1 // number\r\n * toSchemaType('1', ['string','boolean']) = '1' // string\r\n * toSchemaType('1', ['boolean']) = true // boolean\r\n * toSchemaType('true', ['number','string','boolean']) = 'true' // string\r\n * toSchemaType('true', ['boolean']) = true // boolean\r\n * toSchemaType('true', ['number']) = 0 // number\r\n * toSchemaType(true, ['number','string','boolean']) = true // boolean\r\n * toSchemaType(true, ['number','string']) = 'true' // string\r\n * toSchemaType(true, ['number']) = 1 // number\r\n *\r\n * //  { PrimitiveValue } value - value to convert\r\n * //  { SchemaPrimitiveType | SchemaPrimitiveType[] } types - allowed types to convert to\r\n * // { PrimitiveValue }\r\n */\r\nexport function toSchemaType(value, types) {\r\n  if (!isArray(<SchemaPrimitiveType>types)) {\r\n    types = <SchemaPrimitiveType[]>[types];\r\n  }\r\n  if ((<SchemaPrimitiveType[]>types).includes('null') && !hasValue(value)) {\r\n    return null;\r\n  }\r\n  if ((<SchemaPrimitiveType[]>types).includes('boolean') && !isBoolean(value, 'strict')) {\r\n    return value;\r\n  }\r\n  if ((<SchemaPrimitiveType[]>types).includes('integer')) {\r\n    const testValue = toJavaScriptType(value, 'integer');\r\n    if (testValue !== null) { return +testValue; }\r\n  }\r\n  if ((<SchemaPrimitiveType[]>types).includes('number')) {\r\n    const testValue = toJavaScriptType(value, 'number');\r\n    if (testValue !== null) { return +testValue; }\r\n  }\r\n  if (\r\n    (isString(value) || isNumber(value, 'strict')) &&\r\n    (<SchemaPrimitiveType[]>types).includes('string')\r\n  ) { // Convert number to string\r\n    return toJavaScriptType(value, 'string');\r\n  }\r\n  if ((<SchemaPrimitiveType[]>types).includes('boolean') && isBoolean(value)) {\r\n    return toJavaScriptType(value, 'boolean');\r\n  }\r\n  if ((<SchemaPrimitiveType[]>types).includes('string')) { // Convert null & boolean to string\r\n    if (value === null) { return ''; }\r\n    const testValue = toJavaScriptType(value, 'string');\r\n    if (testValue !== null) { return testValue; }\r\n  }\r\n  if ((\r\n    (<SchemaPrimitiveType[]>types).includes('number') ||\r\n    (<SchemaPrimitiveType[]>types).includes('integer'))\r\n  ) {\r\n    if (value === true) { return 1; } // Convert boolean & null to number\r\n    if (value === false || value === null || value === '') { return 0; }\r\n  }\r\n  if ((<SchemaPrimitiveType[]>types).includes('number')) { // Convert mixed string to number\r\n    const testValue = parseFloat(<string>value);\r\n    if (!!testValue) { return testValue; }\r\n  }\r\n  if ((<SchemaPrimitiveType[]>types).includes('integer')) { // Convert string or number to integer\r\n    const testValue = parseInt(<string>value, 10);\r\n    if (!!testValue) { return testValue; }\r\n  }\r\n  if ((<SchemaPrimitiveType[]>types).includes('boolean')) { // Convert anything to boolean\r\n    return !!value;\r\n  }\r\n  if ((\r\n      (<SchemaPrimitiveType[]>types).includes('number') ||\r\n      (<SchemaPrimitiveType[]>types).includes('integer')\r\n    ) && !(<SchemaPrimitiveType[]>types).includes('null')\r\n  ) {\r\n    return 0; // If null not allowed, return 0 for non-convertable values\r\n  }\r\n}\r\n\r\n/**\r\n * 'isPromise' function\r\n *\r\n * //   object\r\n * // { boolean }\r\n */\r\nexport function isPromise(object): object is Promise<any> {\r\n  return !!object && typeof object.then === 'function';\r\n}\r\n\r\n/**\r\n * 'isObservable' function\r\n *\r\n * //   object\r\n * // { boolean }\r\n */\r\nexport function isObservable(object): object is Observable<any> {\r\n  return !!object && typeof object.subscribe === 'function';\r\n}\r\n\r\n/**\r\n * '_toPromise' function\r\n *\r\n * //  { object } object\r\n * // { Promise<any> }\r\n */\r\nexport function _toPromise(object): Promise<any> {\r\n  return isPromise(object) ? object : object.toPromise();\r\n}\r\n\r\n/**\r\n * 'toObservable' function\r\n *\r\n * //  { object } object\r\n * // { Observable<any> }\r\n */\r\nexport function toObservable(object): Observable<any> {\r\n  const observable = isPromise(object) ? from(object) : object;\r\n  if (isObservable(observable)) { return observable; }\r\n  console.error('toObservable error: Expected validator to return Promise or Observable.');\r\n  return new Observable();\r\n}\r\n\r\n/**\r\n * 'inArray' function\r\n *\r\n * Searches an array for an item, or one of a list of items, and returns true\r\n * as soon as a match is found, or false if no match.\r\n *\r\n * If the optional third parameter allIn is set to TRUE, and the item to find\r\n * is an array, then the function returns true only if all elements from item\r\n * are found in the array list, and false if any element is not found. If the\r\n * item to find is not an array, setting allIn to TRUE has no effect.\r\n *\r\n * //  { any|any[] } item - the item to search for\r\n * //   array - the array to search\r\n * //  { boolean = false } allIn - if TRUE, all items must be in array\r\n * // { boolean } - true if item(s) in array, false otherwise\r\n */\r\nexport function inArray(item, array, allIn = false) {\r\n  if (!isDefined(item) || !isArray(array)) { return false; }\r\n  return isArray(item) ?\r\n    item[allIn ? 'every' : 'some'](subItem => array.includes(subItem)) :\r\n    array.includes(item);\r\n}\r\n\r\n/**\r\n * 'xor' utility function - exclusive or\r\n *\r\n * Returns true if exactly one of two values is truthy.\r\n *\r\n * //   value1 - first value to check\r\n * //   value2 - second value to check\r\n * // { boolean } - true if exactly one input value is truthy, false if not\r\n */\r\nexport function xor(value1, value2) {\r\n  return (!!value1 && !value2) || (!value1 && !!value2);\r\n}\r\n","import {hasValue, inArray, isArray, isDefined, isEmpty, isMap, isObject, isSet, isString, PlainObject} from './validator.functions';\r\n\r\n/**\r\n * Utility function library:\r\n *\r\n * addClasses, copy, forEach, forEachCopy, hasOwn, mergeFilteredObject,\r\n * uniqueItems, commonItems, fixTitle, toTitleCase\r\n*/\r\n\r\n/**\r\n * 'addClasses' function\r\n *\r\n * Merges two space-delimited lists of CSS classes and removes duplicates.\r\n *\r\n * // {string | string[] | Set<string>} oldClasses\r\n * // {string | string[] | Set<string>} newClasses\r\n * // {string | string[] | Set<string>} - Combined classes\r\n */\r\nexport function addClasses(\r\n  oldClasses: string | string[] | Set<string>,\r\n  newClasses: string | string[] | Set<string>\r\n): string | string[] | Set<string> {\r\n  const badType = i => !isSet(i) && !isArray(i) && !isString(i);\r\n  if (badType(newClasses)) { return oldClasses; }\r\n  if (badType(oldClasses)) { oldClasses = ''; }\r\n  const toSet = i => isSet(i) ? i : isArray(i) ? new Set(i) : new Set(i.split(' '));\r\n  const combinedSet: Set<any> = toSet(oldClasses);\r\n  const newSet: Set<any> = toSet(newClasses);\r\n  newSet.forEach(c => combinedSet.add(c));\r\n  if (isSet(oldClasses)) { return combinedSet; }\r\n  if (isArray(oldClasses)) { return Array.from(combinedSet); }\r\n  return Array.from(combinedSet).join(' ');\r\n}\r\n\r\n/**\r\n * 'copy' function\r\n *\r\n * Makes a shallow copy of a JavaScript object, array, Map, or Set.\r\n * If passed a JavaScript primitive value (string, number, boolean, or null),\r\n * it returns the value.\r\n *\r\n * // {Object|Array|string|number|boolean|null} object - The object to copy\r\n * // {boolean = false} errors - Show errors?\r\n * // {Object|Array|string|number|boolean|null} - The copied object\r\n */\r\nexport function copy(object: any, errors = false): any {\r\n  if (typeof object !== 'object' || object === null) { return object; }\r\n  if (isMap(object))    { return new Map(object); }\r\n  if (isSet(object))    { return new Set(object); }\r\n  if (isArray(object))  { return [ ...object ];   }\r\n  if (isObject(object)) { return { ...object };   }\r\n  if (errors) {\r\n    console.error('copy error: Object to copy must be a JavaScript object or value.');\r\n  }\r\n  return object;\r\n}\r\n\r\n/**\r\n * 'forEach' function\r\n *\r\n * Iterates over all items in the first level of an object or array\r\n * and calls an iterator funciton on each item.\r\n *\r\n * The iterator function is called with four values:\r\n * 1. The current item's value\r\n * 2. The current item's key\r\n * 3. The parent object, which contains the current item\r\n * 4. The root object\r\n *\r\n * Setting the optional third parameter to 'top-down' or 'bottom-up' will cause\r\n * it to also recursively iterate over items in sub-objects or sub-arrays in the\r\n * specified direction.\r\n *\r\n * // {Object|Array} object - The object or array to iterate over\r\n * // {function} fn - the iterator funciton to call on each item\r\n * // {boolean = false} errors - Show errors?\r\n * // {void}\r\n */\r\nexport function forEach(\r\n  object: any, fn: (v: any, k?: string | number, c?: any, rc?: any) => any,\r\n  recurse: boolean | string = false, rootObject: any = object, errors = false\r\n): void {\r\n  if (isEmpty(object)) { return; }\r\n  if ((isObject(object) || isArray(object)) && typeof fn === 'function') {\r\n    for (const key of Object.keys(object)) {\r\n      const value = object[key];\r\n      if (recurse === 'bottom-up' && (isObject(value) || isArray(value))) {\r\n        forEach(value, fn, recurse, rootObject);\r\n      }\r\n      fn(value, key, object, rootObject);\r\n      if (recurse === 'top-down' && (isObject(value) || isArray(value))) {\r\n        forEach(value, fn, recurse, rootObject);\r\n      }\r\n    }\r\n  }\r\n  if (errors) {\r\n    if (typeof fn !== 'function') {\r\n      console.error('forEach error: Iterator must be a function.');\r\n      console.error('function', fn);\r\n    }\r\n    if (!isObject(object) && !isArray(object)) {\r\n      console.error('forEach error: Input object must be an object or array.');\r\n      console.error('object', object);\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * 'forEachCopy' function\r\n *\r\n * Iterates over all items in the first level of an object or array\r\n * and calls an iterator function on each item. Returns a new object or array\r\n * with the same keys or indexes as the original, and values set to the results\r\n * of the iterator function.\r\n *\r\n * Does NOT recursively iterate over items in sub-objects or sub-arrays.\r\n *\r\n * // {Object | Array} object - The object or array to iterate over\r\n * // {function} fn - The iterator funciton to call on each item\r\n * // {boolean = false} errors - Show errors?\r\n * // {Object | Array} - The resulting object or array\r\n */\r\nexport function forEachCopy(\r\n  object: any, fn: (v: any, k?: string | number, o?: any, p?: string) => any,\r\n  errors = false\r\n): any {\r\n  if (!hasValue(object)) { return; }\r\n  if ((isObject(object) || isArray(object)) && typeof object !== 'function') {\r\n    const newObject: any = isArray(object) ? [] : {};\r\n    for (const key of Object.keys(object)) {\r\n      newObject[key] = fn(object[key], key, object);\r\n    }\r\n    return newObject;\r\n  }\r\n  if (errors) {\r\n    if (typeof fn !== 'function') {\r\n      console.error('forEachCopy error: Iterator must be a function.');\r\n      console.error('function', fn);\r\n    }\r\n    if (!isObject(object) && !isArray(object)) {\r\n      console.error('forEachCopy error: Input object must be an object or array.');\r\n      console.error('object', object);\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * 'hasOwn' utility function\r\n *\r\n * Checks whether an object or array has a particular property.\r\n *\r\n * // {any} object - the object to check\r\n * // {string} property - the property to look for\r\n * // {boolean} - true if object has property, false if not\r\n */\r\nexport function hasOwn(object: any, property: string): boolean {\r\n  if (!object || !['number', 'string', 'symbol'].includes(typeof property) ||\r\n    (!isObject(object) && !isArray(object) && !isMap(object) && !isSet(object))\r\n  ) { return false; }\r\n  if (isMap(object) || isSet(object)) { return object.has(property); }\r\n  if (typeof property === 'number') {\r\n    if (isArray(object)) { return object[<number>property]; }\r\n    property = property + '';\r\n  }\r\n  return object.hasOwnProperty(property);\r\n}\r\n\r\n/**\r\n * Types of possible expressions which the app is able to evaluate.\r\n */\r\nexport enum ExpressionType {\r\n  EQUALS,\r\n  NOT_EQUALS,\r\n  NOT_AN_EXPRESSION\r\n}\r\n\r\n/**\r\n * Detects the type of expression from the given candidate. `==` for equals,\r\n * `!=` for not equals. If none of these are contained in the candidate, the candidate\r\n * is not considered to be an expression at all and thus `NOT_AN_EXPRESSION` is returned.\r\n * // {expressionCandidate} expressionCandidate - potential expression\r\n */\r\nexport function getExpressionType(expressionCandidate: string): ExpressionType {\r\n  if (expressionCandidate.indexOf('==') !== -1) {\r\n    return ExpressionType.EQUALS;\r\n  }\r\n\r\n  if (expressionCandidate.toString().indexOf('!=') !== -1) {\r\n    return ExpressionType.NOT_EQUALS;\r\n  }\r\n\r\n  return ExpressionType.NOT_AN_EXPRESSION;\r\n}\r\n\r\nexport function isEqual(expressionType) {\r\n  return expressionType as ExpressionType === ExpressionType.EQUALS;\r\n}\r\n\r\nexport function isNotEqual(expressionType) {\r\n  return expressionType as ExpressionType === ExpressionType.NOT_EQUALS;\r\n}\r\n\r\nexport function isNotExpression(expressionType) {\r\n  return expressionType as ExpressionType === ExpressionType.NOT_AN_EXPRESSION;\r\n}\r\n\r\n/**\r\n * Splits the expression key by the expressionType on a pair of values\r\n * before and after the equals or nor equals sign.\r\n * // {expressionType} enum of an expression type\r\n * // {key} the given key from a for loop iver all conditions\r\n */\r\nexport function getKeyAndValueByExpressionType(expressionType: ExpressionType, key: string) {\r\n  if (isEqual(expressionType)) {\r\n    return key.split('==', 2);\r\n  }\r\n\r\n  if (isNotEqual(expressionType)) {\r\n    return key.split('!=', 2);\r\n  }\r\n\r\n  return null;\r\n}\r\n\r\nexport function cleanValueOfQuotes(keyAndValue): String {\r\n  if (keyAndValue.charAt(0) === '\\'' && keyAndValue.charAt(keyAndValue.length - 1) === '\\'') {\r\n    return keyAndValue.replace('\\'', '').replace('\\'', '');\r\n  }\r\n  return keyAndValue;\r\n}\r\n\r\n/**\r\n * 'mergeFilteredObject' utility function\r\n *\r\n * Shallowly merges two objects, setting key and values from source object\r\n * in target object, excluding specified keys.\r\n *\r\n * Optionally, it can also use functions to transform the key names and/or\r\n * the values of the merging object.\r\n *\r\n * // {PlainObject} targetObject - Target object to add keys and values to\r\n * // {PlainObject} sourceObject - Source object to copy keys and values from\r\n * // {string[]} excludeKeys - Array of keys to exclude\r\n * // {(string: string) => string = (k) => k} keyFn - Function to apply to keys\r\n * // {(any: any) => any = (v) => v} valueFn - Function to apply to values\r\n * // {PlainObject} - Returns targetObject\r\n */\r\nexport function mergeFilteredObject(\r\n  targetObject: PlainObject,\r\n  sourceObject: PlainObject,\r\n  excludeKeys = <string[]>[],\r\n  keyFn = (key: string): string => key,\r\n  valFn = (val: any): any => val\r\n): PlainObject {\r\n  if (!isObject(sourceObject)) { return targetObject; }\r\n  if (!isObject(targetObject)) { targetObject = {}; }\r\n  for (const key of Object.keys(sourceObject)) {\r\n    if (!inArray(key, excludeKeys) && isDefined(sourceObject[key])) {\r\n      targetObject[keyFn(key)] = valFn(sourceObject[key]);\r\n    }\r\n  }\r\n  return targetObject;\r\n}\r\n\r\n/**\r\n * 'uniqueItems' function\r\n *\r\n * Accepts any number of string value inputs,\r\n * and returns an array of all input vaues, excluding duplicates.\r\n *\r\n * // {...string} ...items -\r\n * // {string[]} -\r\n */\r\nexport function uniqueItems(...items): string[] {\r\n  const returnItems = [];\r\n  for (const item of items) {\r\n    if (!returnItems.includes(item)) { returnItems.push(item); }\r\n  }\r\n  return returnItems;\r\n}\r\n\r\n/**\r\n * 'commonItems' function\r\n *\r\n * Accepts any number of strings or arrays of string values,\r\n * and returns a single array containing only values present in all inputs.\r\n *\r\n * // {...string|string[]} ...arrays -\r\n * // {string[]} -\r\n */\r\nexport function commonItems(...arrays): string[] {\r\n  let returnItems = null;\r\n  for (let array of arrays) {\r\n    if (isString(array)) { array = [array]; }\r\n    returnItems = returnItems === null ? [ ...array ] :\r\n      returnItems.filter(item => array.includes(item));\r\n    if (!returnItems.length) { return []; }\r\n  }\r\n  return returnItems;\r\n}\r\n\r\n/**\r\n * 'fixTitle' function\r\n *\r\n *\r\n * // {string} input -\r\n * // {string} -\r\n */\r\nexport function fixTitle(name: string): string {\r\n  return name && toTitleCase(name.replace(/([a-z])([A-Z])/g, '$1 $2').replace(/_/g, ' '));\r\n}\r\n\r\n/**\r\n * 'toTitleCase' function\r\n *\r\n * Intelligently converts an input string to Title Case.\r\n *\r\n * Accepts an optional second parameter with a list of additional\r\n * words and abbreviations to force into a particular case.\r\n *\r\n * This function is built on prior work by John Gruber and David Gouch:\r\n * http://daringfireball.net/2008/08/title_case_update\r\n * https://github.com/gouch/to-title-case\r\n *\r\n * // {string} input -\r\n * // {string|string[]} forceWords? -\r\n * // {string} -\r\n */\r\nexport function toTitleCase(input: string, forceWords?: string|string[]): string {\r\n  if (!isString(input)) { return input; }\r\n  let forceArray: string[] = ['a', 'an', 'and', 'as', 'at', 'but', 'by', 'en',\r\n   'for', 'if', 'in', 'nor', 'of', 'on', 'or', 'per', 'the', 'to', 'v', 'v.',\r\n   'vs', 'vs.', 'via'];\r\n  if (isString(forceWords)) { forceWords = (<string>forceWords).split('|'); }\r\n  if (isArray(forceWords)) { forceArray = forceArray.concat(forceWords); }\r\n  const forceArrayLower: string[] = forceArray.map(w => w.toLowerCase());\r\n  const noInitialCase: boolean =\r\n    input === input.toUpperCase() || input === input.toLowerCase();\r\n  let prevLastChar = '';\r\n  input = input.trim();\r\n  return input.replace(/[A-Za-z0-9\\u00C0-\\u00FF]+[^\\s-]*/g, (word, idx) => {\r\n    if (!noInitialCase && word.slice(1).search(/[A-Z]|\\../) !== -1) {\r\n      return word;\r\n    } else {\r\n      let newWord: string;\r\n      const forceWord: string =\r\n        forceArray[forceArrayLower.indexOf(word.toLowerCase())];\r\n      if (!forceWord) {\r\n        if (noInitialCase) {\r\n          if (word.slice(1).search(/\\../) !== -1) {\r\n            newWord = word.toLowerCase();\r\n          } else {\r\n            newWord = word[0].toUpperCase() + word.slice(1).toLowerCase();\r\n          }\r\n        } else {\r\n          newWord = word[0].toUpperCase() + word.slice(1);\r\n        }\r\n      } else if (\r\n        forceWord === forceWord.toLowerCase() && (\r\n          idx === 0 || idx + word.length === input.length ||\r\n          prevLastChar === ':' || input[idx - 1].search(/[^\\s-]/) !== -1 ||\r\n          (input[idx - 1] !== '-' && input[idx + word.length] === '-')\r\n        )\r\n      ) {\r\n        newWord = forceWord[0].toUpperCase() + forceWord.slice(1);\r\n      } else {\r\n        newWord = forceWord;\r\n      }\r\n      prevLastChar = word.slice(-1);\r\n      return newWord;\r\n    }\r\n  });\r\n}\r\n","import {\r\n  cleanValueOfQuotes,\r\n  copy,\r\n  ExpressionType,\r\n  getExpressionType,\r\n  getKeyAndValueByExpressionType,\r\n  hasOwn,\r\n  isEqual,\r\n  isNotEqual,\r\n  isNotExpression\r\n} from './utility.functions';\r\nimport {Injectable} from '@angular/core';\r\nimport {isArray, isDefined, isEmpty, isMap, isNumber, isObject, isString} from './validator.functions';\r\n\r\n/**\r\n * 'JsonPointer' class\r\n *\r\n * Some utilities for using JSON Pointers with JSON objects\r\n * https://tools.ietf.org/html/rfc6901\r\n *\r\n * get, getCopy, getFirst, set, setCopy, insert, insertCopy, remove, has, dict,\r\n * forEachDeep, forEachDeepCopy, escape, unescape, parse, compile, toKey,\r\n * isJsonPointer, isSubPointer, toIndexedPointer, toGenericPointer,\r\n * toControlPointer, toSchemaPointer, toDataPointer, parseObjectPath\r\n *\r\n * Some functions based on manuelstofer's json-pointer utilities\r\n * https://github.com/manuelstofer/json-pointer\r\n */\r\nexport type Pointer = string | string[];\r\n\r\n@Injectable()\r\nexport class JsonPointer {\r\n\r\n  /**\r\n   * 'get' function\r\n   *\r\n   * Uses a JSON Pointer to retrieve a value from an object.\r\n   *\r\n   * //  { object } object - Object to get value from\r\n   * //  { Pointer } pointer - JSON Pointer (string or array)\r\n   * //  { number = 0 } startSlice - Zero-based index of first Pointer key to use\r\n   * //  { number } endSlice - Zero-based index of last Pointer key to use\r\n   * //  { boolean = false } getBoolean - Return only true or false?\r\n   * //  { boolean = false } errors - Show error if not found?\r\n   * // { object } - Located value (or true or false if getBoolean = true)\r\n   */\r\n  static get(\r\n    object, pointer, startSlice = 0, endSlice: number = null,\r\n    getBoolean = false, errors = false\r\n  ) {\r\n    if (object === null) { return getBoolean ? false : undefined; }\r\n    let keyArray: any[] = this.parse(pointer, errors);\r\n    if (typeof object === 'object' && keyArray !== null) {\r\n      let subObject = object;\r\n      if (startSlice >= keyArray.length || endSlice <= -keyArray.length) { return object; }\r\n      if (startSlice <= -keyArray.length) { startSlice = 0; }\r\n      if (!isDefined(endSlice) || endSlice >= keyArray.length) { endSlice = keyArray.length; }\r\n      keyArray = keyArray.slice(startSlice, endSlice);\r\n      for (let key of keyArray) {\r\n        if (key === '-' && isArray(subObject) && subObject.length) {\r\n          key = subObject.length - 1;\r\n        }\r\n        if (isMap(subObject) && subObject.has(key)) {\r\n          subObject = subObject.get(key);\r\n        } else if (typeof subObject === 'object' && subObject !== null &&\r\n          hasOwn(subObject, key)\r\n        ) {\r\n          subObject = subObject[key];\r\n        } else {\r\n          const evaluatedExpression = JsonPointer.evaluateExpression(subObject, key);\r\n          if (evaluatedExpression.passed) {\r\n            subObject = evaluatedExpression.key ? subObject[evaluatedExpression.key] : subObject;\r\n          } else {\r\n            this.logErrors(errors, key, pointer, object);\r\n            return getBoolean ? false : undefined;\r\n          }\r\n        }\r\n      }\r\n      return getBoolean ? true : subObject;\r\n    }\r\n    if (errors && keyArray === null) {\r\n      console.error(`get error: Invalid JSON Pointer: ${pointer}`);\r\n    }\r\n    if (errors && typeof object !== 'object') {\r\n      console.error('get error: Invalid object:');\r\n      console.error(object);\r\n    }\r\n    return getBoolean ? false : undefined;\r\n  }\r\n\r\n  private static logErrors(errors, key, pointer, object) {\r\n    if (errors) {\r\n      console.error(`get error: \"${key}\" key not found in object.`);\r\n      console.error(pointer);\r\n      console.error(object);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Evaluates conditional expression in form of `model.<property>==<value>` or\r\n   * `model.<property>!=<value>` where the first one means that the value must match to be\r\n   * shown in a form, while the former shows the property only when the property value is not\r\n   * set, or does not equal the given value.\r\n   *\r\n   * // { subObject } subObject -  an object containing the data values of properties\r\n   * // { key } key - the key from the for loop in a form of `<property>==<value>`\r\n   *\r\n   * Returns the object with two properties. The property passed informs whether\r\n   * the expression evaluated successfully and the property key returns either the same\r\n   * key if it is not contained inside the subObject or the key of the property if it is contained.\r\n   */\r\n  static evaluateExpression(subObject: Object, key: any) {\r\n    const defaultResult = {passed: false, key: key};\r\n    const keysAndExpression = this.parseKeysAndExpression(key, subObject);\r\n    if (!keysAndExpression) {\r\n      return defaultResult;\r\n    }\r\n\r\n    const ownCheckResult = this.doOwnCheckResult(subObject, keysAndExpression);\r\n    if (ownCheckResult) {\r\n      return ownCheckResult;\r\n    }\r\n\r\n    const cleanedValue = cleanValueOfQuotes(keysAndExpression.keyAndValue[1]);\r\n\r\n    const evaluatedResult = this.performExpressionOnValue(keysAndExpression, cleanedValue, subObject);\r\n    if (evaluatedResult) {\r\n      return evaluatedResult;\r\n    }\r\n\r\n    return defaultResult;\r\n  }\r\n\r\n  /**\r\n   * Performs the actual evaluation on the given expression with given values and keys.\r\n   * // { cleanedValue } cleanedValue - the given valued cleaned of quotes if it had any\r\n   * // { subObject } subObject - the object with properties values\r\n   * // { keysAndExpression } keysAndExpression - an object holding the expressions with\r\n   */\r\n  private static performExpressionOnValue(keysAndExpression: any, cleanedValue: String, subObject: Object) {\r\n    const propertyByKey = subObject[keysAndExpression.keyAndValue[0]];\r\n    if (this.doComparisonByExpressionType(keysAndExpression.expressionType, propertyByKey, cleanedValue)) {\r\n      return {passed: true, key: keysAndExpression.keyAndValue[0]};\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private static doComparisonByExpressionType(expressionType: ExpressionType, propertyByKey, cleanedValue: String): Boolean {\r\n    if (isEqual(expressionType)) {\r\n      return propertyByKey === cleanedValue;\r\n    }\r\n    if (isNotEqual(expressionType)) {\r\n      return propertyByKey !== cleanedValue;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Does the checks when the parsed key is actually no a property inside subObject.\r\n   * That would mean that the equal comparison makes no sense and thus the negative result\r\n   * is returned, and the not equal comparison is not necessary because it doesn't equal\r\n   * obviously. Returns null when the given key is a real property inside the subObject.\r\n   * // { subObject } subObject - the object with properties values\r\n   * // { keysAndExpression } keysAndExpression - an object holding the expressions with\r\n   * the associated keys.\r\n   */\r\n  private static doOwnCheckResult(subObject: Object, keysAndExpression) {\r\n    let ownCheckResult = null;\r\n    if (!hasOwn(subObject, keysAndExpression.keyAndValue[0])) {\r\n      if (isEqual(keysAndExpression.expressionType)) {\r\n        ownCheckResult = {passed: false, key: null};\r\n      }\r\n      if (isNotEqual(keysAndExpression.expressionType)) {\r\n        ownCheckResult = {passed: true, key: null};\r\n      }\r\n    }\r\n    return ownCheckResult;\r\n  }\r\n\r\n  /**\r\n   * Does the basic checks and tries to parse an expression and a pair\r\n   * of key and value.\r\n   * // { key } key - the original for loop created value containing key and value in one string\r\n   * // { subObject } subObject - the object with properties values\r\n   */\r\n  private static parseKeysAndExpression(key: string, subObject) {\r\n    if (this.keyOrSubObjEmpty(key, subObject)) {\r\n      return null;\r\n    }\r\n    const expressionType = getExpressionType(key.toString());\r\n    if (isNotExpression(expressionType)) {\r\n      return null;\r\n    }\r\n    const keyAndValue = getKeyAndValueByExpressionType(expressionType, key);\r\n    if (!keyAndValue || !keyAndValue[0] || !keyAndValue[1]) {\r\n      return null;\r\n    }\r\n    return {expressionType: expressionType, keyAndValue: keyAndValue};\r\n  }\r\n\r\n  private static keyOrSubObjEmpty(key: any, subObject: Object) {\r\n    return !key || !subObject;\r\n  }\r\n\r\n  /**\r\n   * 'getCopy' function\r\n   *\r\n   * Uses a JSON Pointer to deeply clone a value from an object.\r\n   *\r\n   * //  { object } object - Object to get value from\r\n   * //  { Pointer } pointer - JSON Pointer (string or array)\r\n   * //  { number = 0 } startSlice - Zero-based index of first Pointer key to use\r\n   * //  { number } endSlice - Zero-based index of last Pointer key to use\r\n   * //  { boolean = false } getBoolean - Return only true or false?\r\n   * //  { boolean = false } errors - Show error if not found?\r\n   * // { object } - Located value (or true or false if getBoolean = true)\r\n   */\r\n  static getCopy(\r\n    object, pointer, startSlice = 0, endSlice: number = null,\r\n    getBoolean = false, errors = false\r\n  ) {\r\n    const objectToCopy =\r\n      this.get(object, pointer, startSlice, endSlice, getBoolean, errors);\r\n    return this.forEachDeepCopy(objectToCopy);\r\n  }\r\n\r\n  /**\r\n   * 'getFirst' function\r\n   *\r\n   * Takes an array of JSON Pointers and objects,\r\n   * checks each object for a value specified by the pointer,\r\n   * and returns the first value found.\r\n   *\r\n   * //  { [object, pointer][] } items - Array of objects and pointers to check\r\n   * //  { any = null } defaultValue - Value to return if nothing found\r\n   * //  { boolean = false } getCopy - Return a copy instead?\r\n   * //  - First value found\r\n   */\r\n  static getFirst(items, defaultValue: any = null, getCopy = false) {\r\n    if (isEmpty(items)) { return; }\r\n    if (isArray(items)) {\r\n      for (const item of items) {\r\n        if (isEmpty(item)) { continue; }\r\n        if (isArray(item) && item.length >= 2) {\r\n          if (isEmpty(item[0]) || isEmpty(item[1])) { continue; }\r\n          const value = getCopy ?\r\n            this.getCopy(item[0], item[1]) :\r\n            this.get(item[0], item[1]);\r\n          if (value) { return value; }\r\n          continue;\r\n        }\r\n        console.error('getFirst error: Input not in correct format.\\n' +\r\n          'Should be: [ [ object1, pointer1 ], [ object 2, pointer2 ], etc... ]');\r\n        return;\r\n      }\r\n      return defaultValue;\r\n    }\r\n    if (isMap(items)) {\r\n      for (const [object, pointer] of items) {\r\n        if (object === null || !this.isJsonPointer(pointer)) { continue; }\r\n        const value = getCopy ?\r\n          this.getCopy(object, pointer) :\r\n          this.get(object, pointer);\r\n        if (value) { return value; }\r\n      }\r\n      return defaultValue;\r\n    }\r\n    console.error('getFirst error: Input not in correct format.\\n' +\r\n      'Should be: [ [ object1, pointer1 ], [ object 2, pointer2 ], etc... ]');\r\n    return defaultValue;\r\n  }\r\n\r\n  /**\r\n   * 'getFirstCopy' function\r\n   *\r\n   * Similar to getFirst, but always returns a copy.\r\n   *\r\n   * //  { [object, pointer][] } items - Array of objects and pointers to check\r\n   * //  { any = null } defaultValue - Value to return if nothing found\r\n   * //  - Copy of first value found\r\n   */\r\n  static getFirstCopy(items, defaultValue: any = null) {\r\n    const firstCopy = this.getFirst(items, defaultValue, true);\r\n    return firstCopy;\r\n  }\r\n\r\n  /**\r\n   * 'set' function\r\n   *\r\n   * Uses a JSON Pointer to set a value on an object.\r\n   * Also creates any missing sub objects or arrays to contain that value.\r\n   *\r\n   * If the optional fourth parameter is TRUE and the inner-most container\r\n   * is an array, the function will insert the value as a new item at the\r\n   * specified location in the array, rather than overwriting the existing\r\n   * value (if any) at that location.\r\n   *\r\n   * So set([1, 2, 3], '/1', 4) => [1, 4, 3]\r\n   * and\r\n   * So set([1, 2, 3], '/1', 4, true) => [1, 4, 2, 3]\r\n   *\r\n   * //  { object } object - The object to set value in\r\n   * //  { Pointer } pointer - The JSON Pointer (string or array)\r\n   * //   value - The new value to set\r\n   * //  { boolean } insert - insert value?\r\n   * // { object } - The original object, modified with the set value\r\n   */\r\n  static set(object, pointer, value, insert = false) {\r\n    const keyArray = this.parse(pointer);\r\n    if (keyArray !== null && keyArray.length) {\r\n      let subObject = object;\r\n      for (let i = 0; i < keyArray.length - 1; ++i) {\r\n        let key = keyArray[i];\r\n        if (key === '-' && isArray(subObject)) {\r\n          key = subObject.length;\r\n        }\r\n        if (isMap(subObject) && subObject.has(key)) {\r\n          subObject = subObject.get(key);\r\n        } else {\r\n          if (!hasOwn(subObject, key)) {\r\n            subObject[key] = (keyArray[i + 1].match(/^(\\d+|-)$/)) ? [] : {};\r\n          }\r\n          subObject = subObject[key];\r\n        }\r\n      }\r\n      const lastKey = keyArray[keyArray.length - 1];\r\n      if (isArray(subObject) && lastKey === '-') {\r\n        subObject.push(value);\r\n      } else if (insert && isArray(subObject) && !isNaN(+lastKey)) {\r\n        subObject.splice(lastKey, 0, value);\r\n      } else if (isMap(subObject)) {\r\n        subObject.set(lastKey, value);\r\n      } else {\r\n        subObject[lastKey] = value;\r\n      }\r\n      return object;\r\n    }\r\n    console.error(`set error: Invalid JSON Pointer: ${pointer}`);\r\n    return object;\r\n  }\r\n\r\n  /**\r\n   * 'setCopy' function\r\n   *\r\n   * Copies an object and uses a JSON Pointer to set a value on the copy.\r\n   * Also creates any missing sub objects or arrays to contain that value.\r\n   *\r\n   * If the optional fourth parameter is TRUE and the inner-most container\r\n   * is an array, the function will insert the value as a new item at the\r\n   * specified location in the array, rather than overwriting the existing value.\r\n   *\r\n   * //  { object } object - The object to copy and set value in\r\n   * //  { Pointer } pointer - The JSON Pointer (string or array)\r\n   * //   value - The value to set\r\n   * //  { boolean } insert - insert value?\r\n   * // { object } - The new object with the set value\r\n   */\r\n  static setCopy(object, pointer, value, insert = false) {\r\n    const keyArray = this.parse(pointer);\r\n    if (keyArray !== null) {\r\n      const newObject = copy(object);\r\n      let subObject = newObject;\r\n      for (let i = 0; i < keyArray.length - 1; ++i) {\r\n        let key = keyArray[i];\r\n        if (key === '-' && isArray(subObject)) {\r\n          key = subObject.length;\r\n        }\r\n        if (isMap(subObject) && subObject.has(key)) {\r\n          subObject.set(key, copy(subObject.get(key)));\r\n          subObject = subObject.get(key);\r\n        } else {\r\n          if (!hasOwn(subObject, key)) {\r\n            subObject[key] = (keyArray[i + 1].match(/^(\\d+|-)$/)) ? [] : {};\r\n          }\r\n          subObject[key] = copy(subObject[key]);\r\n          subObject = subObject[key];\r\n        }\r\n      }\r\n      const lastKey = keyArray[keyArray.length - 1];\r\n      if (isArray(subObject) && lastKey === '-') {\r\n        subObject.push(value);\r\n      } else if (insert && isArray(subObject) && !isNaN(+lastKey)) {\r\n        subObject.splice(lastKey, 0, value);\r\n      } else if (isMap(subObject)) {\r\n        subObject.set(lastKey, value);\r\n      } else {\r\n        subObject[lastKey] = value;\r\n      }\r\n      return newObject;\r\n    }\r\n    console.error(`setCopy error: Invalid JSON Pointer: ${pointer}`);\r\n    return object;\r\n  }\r\n\r\n  /**\r\n   * 'insert' function\r\n   *\r\n   * Calls 'set' with insert = TRUE\r\n   *\r\n   * //  { object } object - object to insert value in\r\n   * //  { Pointer } pointer - JSON Pointer (string or array)\r\n   * //   value - value to insert\r\n   * // { object }\r\n   */\r\n  static insert(object, pointer, value) {\r\n    const updatedObject = this.set(object, pointer, value, true);\r\n    return updatedObject;\r\n  }\r\n\r\n  /**\r\n   * 'insertCopy' function\r\n   *\r\n   * Calls 'setCopy' with insert = TRUE\r\n   *\r\n   * //  { object } object - object to insert value in\r\n   * //  { Pointer } pointer - JSON Pointer (string or array)\r\n   * //   value - value to insert\r\n   * // { object }\r\n   */\r\n  static insertCopy(object, pointer, value) {\r\n    const updatedObject = this.setCopy(object, pointer, value, true);\r\n    return updatedObject;\r\n  }\r\n\r\n  /**\r\n   * 'remove' function\r\n   *\r\n   * Uses a JSON Pointer to remove a key and its attribute from an object\r\n   *\r\n   * //  { object } object - object to delete attribute from\r\n   * //  { Pointer } pointer - JSON Pointer (string or array)\r\n   * // { object }\r\n   */\r\n  static remove(object, pointer) {\r\n    const keyArray = this.parse(pointer);\r\n    if (keyArray !== null && keyArray.length) {\r\n      let lastKey = keyArray.pop();\r\n      const parentObject = this.get(object, keyArray);\r\n      if (isArray(parentObject)) {\r\n        if (lastKey === '-') { lastKey = parentObject.length - 1; }\r\n        parentObject.splice(lastKey, 1);\r\n      } else if (isObject(parentObject)) {\r\n        delete parentObject[lastKey];\r\n      }\r\n      return object;\r\n    }\r\n    console.error(`remove error: Invalid JSON Pointer: ${pointer}`);\r\n    return object;\r\n  }\r\n\r\n  /**\r\n   * 'has' function\r\n   *\r\n   * Tests if an object has a value at the location specified by a JSON Pointer\r\n   *\r\n   * //  { object } object - object to chek for value\r\n   * //  { Pointer } pointer - JSON Pointer (string or array)\r\n   * // { boolean }\r\n   */\r\n  static has(object, pointer) {\r\n    const hasValue = this.get(object, pointer, 0, null, true);\r\n    return hasValue;\r\n  }\r\n\r\n  /**\r\n   * 'dict' function\r\n   *\r\n   * Returns a (pointer -> value) dictionary for an object\r\n   *\r\n   * //  { object } object - The object to create a dictionary from\r\n   * // { object } - The resulting dictionary object\r\n   */\r\n  static dict(object) {\r\n    const results: any = {};\r\n    this.forEachDeep(object, (value, pointer) => {\r\n      if (typeof value !== 'object') { results[pointer] = value; }\r\n    });\r\n    return results;\r\n  }\r\n\r\n  /**\r\n   * 'forEachDeep' function\r\n   *\r\n   * Iterates over own enumerable properties of an object or items in an array\r\n   * and invokes an iteratee function for each key/value or index/value pair.\r\n   * By default, iterates over items within objects and arrays after calling\r\n   * the iteratee function on the containing object or array itself.\r\n   *\r\n   * The iteratee is invoked with three arguments: (value, pointer, rootObject),\r\n   * where pointer is a JSON pointer indicating the location of the current\r\n   * value within the root object, and rootObject is the root object initially\r\n   * submitted to th function.\r\n   *\r\n   * If a third optional parameter 'bottomUp' is set to TRUE, the iterator\r\n   * function will be called on sub-objects and arrays after being\r\n   * called on their contents, rather than before, which is the default.\r\n   *\r\n   * This function can also optionally be called directly on a sub-object by\r\n   * including optional 4th and 5th parameterss to specify the initial\r\n   * root object and pointer.\r\n   *\r\n   * //  { object } object - the initial object or array\r\n   * //  { (v: any, p?: string, o?: any) => any } function - iteratee function\r\n   * //  { boolean = false } bottomUp - optional, set to TRUE to reverse direction\r\n   * //  { object = object } rootObject - optional, root object or array\r\n   * //  { string = '' } pointer - optional, JSON Pointer to object within rootObject\r\n   * // { object } - The modified object\r\n   */\r\n  static forEachDeep(\r\n    object, fn: (v: any, p?: string, o?: any) => any = (v) => v,\r\n    bottomUp = false, pointer = '', rootObject = object\r\n  ) {\r\n    if (typeof fn !== 'function') {\r\n      console.error(`forEachDeep error: Iterator is not a function:`, fn);\r\n      return;\r\n    }\r\n    if (!bottomUp) { fn(object, pointer, rootObject); }\r\n    if (isObject(object) || isArray(object)) {\r\n      for (const key of Object.keys(object)) {\r\n        const newPointer = pointer + '/' + this.escape(key);\r\n        this.forEachDeep(object[key], fn, bottomUp, newPointer, rootObject);\r\n      }\r\n    }\r\n    if (bottomUp) { fn(object, pointer, rootObject); }\r\n  }\r\n\r\n  /**\r\n   * 'forEachDeepCopy' function\r\n   *\r\n   * Similar to forEachDeep, but returns a copy of the original object, with\r\n   * the same keys and indexes, but with values replaced with the result of\r\n   * the iteratee function.\r\n   *\r\n   * //  { object } object - the initial object or array\r\n   * //  { (v: any, k?: string, o?: any, p?: any) => any } function - iteratee function\r\n   * //  { boolean = false } bottomUp - optional, set to TRUE to reverse direction\r\n   * //  { object = object } rootObject - optional, root object or array\r\n   * //  { string = '' } pointer - optional, JSON Pointer to object within rootObject\r\n   * // { object } - The copied object\r\n   */\r\n  static forEachDeepCopy(\r\n    object, fn: (v: any, p?: string, o?: any) => any = (v) => v,\r\n    bottomUp = false, pointer = '', rootObject = object\r\n  ) {\r\n    if (typeof fn !== 'function') {\r\n      console.error(`forEachDeepCopy error: Iterator is not a function:`, fn);\r\n      return null;\r\n    }\r\n    if (isObject(object) || isArray(object)) {\r\n      let newObject = isArray(object) ? [ ...object ] : { ...object };\r\n      if (!bottomUp) { newObject = fn(newObject, pointer, rootObject); }\r\n      for (const key of Object.keys(newObject)) {\r\n        const newPointer = pointer + '/' + this.escape(key);\r\n        newObject[key] = this.forEachDeepCopy(\r\n          newObject[key], fn, bottomUp, newPointer, rootObject\r\n        );\r\n      }\r\n      if (bottomUp) { newObject = fn(newObject, pointer, rootObject); }\r\n      return newObject;\r\n    } else {\r\n      return fn(object, pointer, rootObject);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 'escape' function\r\n   *\r\n   * Escapes a string reference key\r\n   *\r\n   * //  { string } key - string key to escape\r\n   * // { string } - escaped key\r\n   */\r\n  static escape(key) {\r\n    const escaped = key.toString().replace(/~/g, '~0').replace(/\\//g, '~1');\r\n    return escaped;\r\n  }\r\n\r\n  /**\r\n   * 'unescape' function\r\n   *\r\n   * Unescapes a string reference key\r\n   *\r\n   * //  { string } key - string key to unescape\r\n   * // { string } - unescaped key\r\n   */\r\n  static unescape(key) {\r\n    const unescaped = key.toString().replace(/~1/g, '/').replace(/~0/g, '~');\r\n    return unescaped;\r\n  }\r\n\r\n  /**\r\n   * 'parse' function\r\n   *\r\n   * Converts a string JSON Pointer into a array of keys\r\n   * (if input is already an an array of keys, it is returned unchanged)\r\n   *\r\n   * //  { Pointer } pointer - JSON Pointer (string or array)\r\n   * //  { boolean = false } errors - Show error if invalid pointer?\r\n   * // { string[] } - JSON Pointer array of keys\r\n   */\r\n  static parse(pointer, errors = false) {\r\n    if (!this.isJsonPointer(pointer)) {\r\n      if (errors) { console.error(`parse error: Invalid JSON Pointer: ${pointer}`); }\r\n      return null;\r\n    }\r\n    if (isArray(pointer)) { return <string[]>pointer; }\r\n    if (typeof pointer === 'string') {\r\n      if ((<string>pointer)[0] === '#') { pointer = pointer.slice(1); }\r\n      if (<string>pointer === '' || <string>pointer === '/') { return []; }\r\n      return (<string>pointer).slice(1).split('/').map(this.unescape);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 'compile' function\r\n   *\r\n   * Converts an array of keys into a JSON Pointer string\r\n   * (if input is already a string, it is normalized and returned)\r\n   *\r\n   * The optional second parameter is a default which will replace any empty keys.\r\n   *\r\n   * //  { Pointer } pointer - JSON Pointer (string or array)\r\n   * //  { string | number = '' } defaultValue - Default value\r\n   * //  { boolean = false } errors - Show error if invalid pointer?\r\n   * // { string } - JSON Pointer string\r\n   */\r\n  static compile(pointer, defaultValue = '', errors = false) {\r\n    if (pointer === '#') { return ''; }\r\n    if (!this.isJsonPointer(pointer)) {\r\n      if (errors) { console.error(`compile error: Invalid JSON Pointer: ${pointer}`); }\r\n      return null;\r\n    }\r\n    if (isArray(pointer)) {\r\n      if ((<string[]>pointer).length === 0) { return ''; }\r\n      return '/' + (<string[]>pointer).map(\r\n        key => key === '' ? defaultValue : this.escape(key)\r\n      ).join('/');\r\n    }\r\n    if (typeof pointer === 'string') {\r\n      if (pointer[0] === '#') { pointer = pointer.slice(1); }\r\n      return pointer;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 'toKey' function\r\n   *\r\n   * Extracts name of the final key from a JSON Pointer.\r\n   *\r\n   * //  { Pointer } pointer - JSON Pointer (string or array)\r\n   * //  { boolean = false } errors - Show error if invalid pointer?\r\n   * // { string } - the extracted key\r\n   */\r\n  static toKey(pointer, errors = false) {\r\n    const keyArray = this.parse(pointer, errors);\r\n    if (keyArray === null) { return null; }\r\n    if (!keyArray.length) { return ''; }\r\n    return keyArray[keyArray.length - 1];\r\n  }\r\n\r\n  /**\r\n   * 'isJsonPointer' function\r\n   *\r\n   * Checks a string or array value to determine if it is a valid JSON Pointer.\r\n   * Returns true if a string is empty, or starts with '/' or '#/'.\r\n   * Returns true if an array contains only string values.\r\n   *\r\n   * //   value - value to check\r\n   * // { boolean } - true if value is a valid JSON Pointer, otherwise false\r\n   */\r\n  static isJsonPointer(value) {\r\n    if (isArray(value)) {\r\n      return value.every(key => typeof key === 'string');\r\n    } else if (isString(value)) {\r\n      if (value === '' || value === '#') { return true; }\r\n      if (value[0] === '/' || value.slice(0, 2) === '#/') {\r\n        return !/(~[^01]|~$)/g.test(value);\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * 'isSubPointer' function\r\n   *\r\n   * Checks whether one JSON Pointer is a subset of another.\r\n   *\r\n   * //  { Pointer } shortPointer - potential subset JSON Pointer\r\n   * //  { Pointer } longPointer - potential superset JSON Pointer\r\n   * //  { boolean = false } trueIfMatching - return true if pointers match?\r\n   * //  { boolean = false } errors - Show error if invalid pointer?\r\n   * // { boolean } - true if shortPointer is a subset of longPointer, false if not\r\n   */\r\n  static isSubPointer(\r\n    shortPointer, longPointer, trueIfMatching = false, errors = false\r\n  ) {\r\n    if (!this.isJsonPointer(shortPointer) || !this.isJsonPointer(longPointer)) {\r\n      if (errors) {\r\n        let invalid = '';\r\n        if (!this.isJsonPointer(shortPointer)) { invalid += ` 1: ${shortPointer}`; }\r\n        if (!this.isJsonPointer(longPointer)) { invalid += ` 2: ${longPointer}`; }\r\n        console.error(`isSubPointer error: Invalid JSON Pointer ${invalid}`);\r\n      }\r\n      return;\r\n    }\r\n    shortPointer = this.compile(shortPointer, '', errors);\r\n    longPointer = this.compile(longPointer, '', errors);\r\n    return shortPointer === longPointer ? trueIfMatching :\r\n      `${shortPointer}/` === longPointer.slice(0, shortPointer.length + 1);\r\n  }\r\n\r\n  /**\r\n   * 'toIndexedPointer' function\r\n   *\r\n   * Merges an array of numeric indexes and a generic pointer to create an\r\n   * indexed pointer for a specific item.\r\n   *\r\n   * For example, merging the generic pointer '/foo/-/bar/-/baz' and\r\n   * the array [4, 2] would result in the indexed pointer '/foo/4/bar/2/baz'\r\n   *\r\n   *\r\n   * //  { Pointer } genericPointer - The generic pointer\r\n   * //  { number[] } indexArray - The array of numeric indexes\r\n   * //  { Map<string, number> } arrayMap - An optional array map\r\n   * // { string } - The merged pointer with indexes\r\n   */\r\n  static toIndexedPointer(\r\n    genericPointer, indexArray, arrayMap: Map<string, number> = null\r\n  ) {\r\n    if (this.isJsonPointer(genericPointer) && isArray(indexArray)) {\r\n      let indexedPointer = this.compile(genericPointer);\r\n      if (isMap(arrayMap)) {\r\n        let arrayIndex = 0;\r\n        return indexedPointer.replace(/\\/\\-(?=\\/|$)/g, (key, stringIndex) =>\r\n          arrayMap.has((<string>indexedPointer).slice(0, stringIndex)) ?\r\n            '/' + indexArray[arrayIndex++] : key\r\n        );\r\n      } else {\r\n        for (const pointerIndex of indexArray) {\r\n          indexedPointer = indexedPointer.replace('/-', '/' + pointerIndex);\r\n        }\r\n        return indexedPointer;\r\n      }\r\n    }\r\n    if (!this.isJsonPointer(genericPointer)) {\r\n      console.error(`toIndexedPointer error: Invalid JSON Pointer: ${genericPointer}`);\r\n    }\r\n    if (!isArray(indexArray)) {\r\n      console.error(`toIndexedPointer error: Invalid indexArray: ${indexArray}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 'toGenericPointer' function\r\n   *\r\n   * Compares an indexed pointer to an array map and removes list array\r\n   * indexes (but leaves tuple arrray indexes and all object keys, including\r\n   * numeric keys) to create a generic pointer.\r\n   *\r\n   * For example, using the indexed pointer '/foo/1/bar/2/baz/3' and\r\n   * the arrayMap [['/foo', 0], ['/foo/-/bar', 3], ['/foo/-/bar/-/baz', 0]]\r\n   * would result in the generic pointer '/foo/-/bar/2/baz/-'\r\n   * Using the indexed pointer '/foo/1/bar/4/baz/3' and the same arrayMap\r\n   * would result in the generic pointer '/foo/-/bar/-/baz/-'\r\n   * (the bar array has 3 tuple items, so index 2 is retained, but 4 is removed)\r\n   *\r\n   * The structure of the arrayMap is: [['path to array', number of tuple items]...]\r\n   *\r\n   *\r\n   * //  { Pointer } indexedPointer - The indexed pointer (array or string)\r\n   * //  { Map<string, number> } arrayMap - The optional array map (for preserving tuple indexes)\r\n   * // { string } - The generic pointer with indexes removed\r\n   */\r\n  static toGenericPointer(indexedPointer, arrayMap = new Map<string, number>()) {\r\n    if (this.isJsonPointer(indexedPointer) && isMap(arrayMap)) {\r\n      const pointerArray = this.parse(indexedPointer);\r\n      for (let i = 1; i < pointerArray.length; i++) {\r\n        const subPointer = this.compile(pointerArray.slice(0, i));\r\n        if (arrayMap.has(subPointer) &&\r\n          arrayMap.get(subPointer) <= +pointerArray[i]\r\n        ) {\r\n          pointerArray[i] = '-';\r\n        }\r\n      }\r\n      return this.compile(pointerArray);\r\n    }\r\n    if (!this.isJsonPointer(indexedPointer)) {\r\n      console.error(`toGenericPointer error: invalid JSON Pointer: ${indexedPointer}`);\r\n    }\r\n    if (!isMap(arrayMap)) {\r\n      console.error(`toGenericPointer error: invalid arrayMap: ${arrayMap}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 'toControlPointer' function\r\n   *\r\n   * Accepts a JSON Pointer for a data object and returns a JSON Pointer for the\r\n   * matching control in an Angular FormGroup.\r\n   *\r\n   * //  { Pointer } dataPointer - JSON Pointer (string or array) to a data object\r\n   * //  { FormGroup } formGroup - Angular FormGroup to get value from\r\n   * //  { boolean = false } controlMustExist - Only return if control exists?\r\n   * // { Pointer } - JSON Pointer (string) to the formGroup object\r\n   */\r\n  static toControlPointer(dataPointer, formGroup, controlMustExist = false) {\r\n    const dataPointerArray = this.parse(dataPointer);\r\n    const controlPointerArray: string[] = [];\r\n    let subGroup = formGroup;\r\n    if (dataPointerArray !== null) {\r\n      for (const key of dataPointerArray) {\r\n        if (hasOwn(subGroup, 'controls')) {\r\n          controlPointerArray.push('controls');\r\n          subGroup = subGroup.controls;\r\n        }\r\n        if (isArray(subGroup) && (key === '-')) {\r\n          controlPointerArray.push((subGroup.length - 1).toString());\r\n          subGroup = subGroup[subGroup.length - 1];\r\n        } else if (hasOwn(subGroup, key)) {\r\n          controlPointerArray.push(key);\r\n          subGroup = subGroup[key];\r\n        } else if (controlMustExist) {\r\n          console.error(`toControlPointer error: Unable to find \"${key}\" item in FormGroup.`);\r\n          console.error(dataPointer);\r\n          console.error(formGroup);\r\n          return;\r\n        } else {\r\n          controlPointerArray.push(key);\r\n          subGroup = { controls: {} };\r\n        }\r\n      }\r\n      return this.compile(controlPointerArray);\r\n    }\r\n    console.error(`toControlPointer error: Invalid JSON Pointer: ${dataPointer}`);\r\n  }\r\n\r\n  /**\r\n   * 'toSchemaPointer' function\r\n   *\r\n   * Accepts a JSON Pointer to a value inside a data object and a JSON schema\r\n   * for that object.\r\n   *\r\n   * Returns a Pointer to the sub-schema for the value inside the object's schema.\r\n   *\r\n   * //  { Pointer } dataPointer - JSON Pointer (string or array) to an object\r\n   * //   schema - JSON schema for the object\r\n   * // { Pointer } - JSON Pointer (string) to the object's schema\r\n   */\r\n  static toSchemaPointer(dataPointer, schema) {\r\n    if (this.isJsonPointer(dataPointer) && typeof schema === 'object') {\r\n      const pointerArray = this.parse(dataPointer);\r\n      if (!pointerArray.length) { return ''; }\r\n      const firstKey = pointerArray.shift();\r\n      if (schema.type === 'object' || schema.properties || schema.additionalProperties) {\r\n        if ((schema.properties || {})[firstKey]) {\r\n          return `/properties/${this.escape(firstKey)}` +\r\n            this.toSchemaPointer(pointerArray, schema.properties[firstKey]);\r\n        } else  if (schema.additionalProperties) {\r\n          return '/additionalProperties' +\r\n            this.toSchemaPointer(pointerArray, schema.additionalProperties);\r\n        }\r\n      }\r\n      if ((schema.type === 'array' || schema.items) &&\r\n        (isNumber(firstKey) || firstKey === '-' || firstKey === '')\r\n      ) {\r\n        const arrayItem = firstKey === '-' || firstKey === '' ? 0 : +firstKey;\r\n        if (isArray(schema.items)) {\r\n          if (arrayItem < schema.items.length) {\r\n            return '/items/' + arrayItem +\r\n              this.toSchemaPointer(pointerArray, schema.items[arrayItem]);\r\n          } else if (schema.additionalItems) {\r\n            return '/additionalItems' +\r\n              this.toSchemaPointer(pointerArray, schema.additionalItems);\r\n          }\r\n        } else if (isObject(schema.items)) {\r\n          return '/items' + this.toSchemaPointer(pointerArray, schema.items);\r\n        } else if (isObject(schema.additionalItems)) {\r\n          return '/additionalItems' +\r\n            this.toSchemaPointer(pointerArray, schema.additionalItems);\r\n        }\r\n      }\r\n      console.error(`toSchemaPointer error: Data pointer ${dataPointer} ` +\r\n        `not compatible with schema ${schema}`);\r\n      return null;\r\n    }\r\n    if (!this.isJsonPointer(dataPointer)) {\r\n      console.error(`toSchemaPointer error: Invalid JSON Pointer: ${dataPointer}`);\r\n    }\r\n    if (typeof schema !== 'object') {\r\n      console.error(`toSchemaPointer error: Invalid JSON Schema: ${schema}`);\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * 'toDataPointer' function\r\n   *\r\n   * Accepts a JSON Pointer to a sub-schema inside a JSON schema and the schema.\r\n   *\r\n   * If possible, returns a generic Pointer to the corresponding value inside\r\n   * the data object described by the JSON schema.\r\n   *\r\n   * Returns null if the sub-schema is in an ambiguous location (such as\r\n   * definitions or additionalProperties) where the corresponding value\r\n   * location cannot be determined.\r\n   *\r\n   * //  { Pointer } schemaPointer - JSON Pointer (string or array) to a JSON schema\r\n   * //   schema - the JSON schema\r\n   * //  { boolean = false } errors - Show errors?\r\n   * // { Pointer } - JSON Pointer (string) to the value in the data object\r\n   */\r\n  static toDataPointer(schemaPointer, schema, errors = false) {\r\n    if (this.isJsonPointer(schemaPointer) && typeof schema === 'object' &&\r\n      this.has(schema, schemaPointer)\r\n    ) {\r\n      const pointerArray = this.parse(schemaPointer);\r\n      if (!pointerArray.length) { return ''; }\r\n      const firstKey = pointerArray.shift();\r\n      if (firstKey === 'properties' ||\r\n        (firstKey === 'items' && isArray(schema.items))\r\n      ) {\r\n        const secondKey = pointerArray.shift();\r\n        const pointerSuffix = this.toDataPointer(pointerArray, schema[firstKey][secondKey]);\r\n        return pointerSuffix === null ? null : '/' + secondKey + pointerSuffix;\r\n      } else if (firstKey === 'additionalItems' ||\r\n        (firstKey === 'items' && isObject(schema.items))\r\n      ) {\r\n        const pointerSuffix = this.toDataPointer(pointerArray, schema[firstKey]);\r\n        return pointerSuffix === null ? null : '/-' + pointerSuffix;\r\n      } else if (['allOf', 'anyOf', 'oneOf'].includes(firstKey)) {\r\n        const secondKey = pointerArray.shift();\r\n        return this.toDataPointer(pointerArray, schema[firstKey][secondKey]);\r\n      } else if (firstKey === 'not') {\r\n        return this.toDataPointer(pointerArray, schema[firstKey]);\r\n      } else if (['contains', 'definitions', 'dependencies', 'additionalItems',\r\n        'additionalProperties', 'patternProperties', 'propertyNames'].includes(firstKey)\r\n      ) {\r\n        if (errors) { console.error(`toDataPointer error: Ambiguous location`); }\r\n      }\r\n      return '';\r\n    }\r\n    if (errors) {\r\n      if (!this.isJsonPointer(schemaPointer)) {\r\n        console.error(`toDataPointer error: Invalid JSON Pointer: ${schemaPointer}`);\r\n      }\r\n      if (typeof schema !== 'object') {\r\n        console.error(`toDataPointer error: Invalid JSON Schema: ${schema}`);\r\n      }\r\n      if (typeof schema !== 'object') {\r\n        console.error(`toDataPointer error: Pointer ${schemaPointer} invalid for Schema: ${schema}`);\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * 'parseObjectPath' function\r\n   *\r\n   * Parses a JavaScript object path into an array of keys, which\r\n   * can then be passed to compile() to convert into a string JSON Pointer.\r\n   *\r\n   * Based on mike-marcacci's excellent objectpath parse function:\r\n   * https://github.com/mike-marcacci/objectpath\r\n   *\r\n   * //  { Pointer } path - The object path to parse\r\n   * // { string[] } - The resulting array of keys\r\n   */\r\n  static parseObjectPath(path) {\r\n    if (isArray(path)) { return <string[]>path; }\r\n    if (this.isJsonPointer(path)) { return this.parse(path); }\r\n    if (typeof path === 'string') {\r\n      let index = 0;\r\n      const parts: string[] = [];\r\n      while (index < path.length) {\r\n        const nextDot = path.indexOf('.', index);\r\n        const nextOB = path.indexOf('[', index); // next open bracket\r\n        if (nextDot === -1 && nextOB === -1) { // last item\r\n          parts.push(path.slice(index));\r\n          index = path.length;\r\n        } else if (nextDot !== -1 && (nextDot < nextOB || nextOB === -1)) { // dot notation\r\n          parts.push(path.slice(index, nextDot));\r\n          index = nextDot + 1;\r\n        } else { // bracket notation\r\n          if (nextOB > index) {\r\n            parts.push(path.slice(index, nextOB));\r\n            index = nextOB;\r\n          }\r\n          const quote = path.charAt(nextOB + 1);\r\n          if (quote === '\"' || quote === '\\'') { // enclosing quotes\r\n            let nextCB = path.indexOf(quote + ']', nextOB); // next close bracket\r\n            while (nextCB !== -1 && path.charAt(nextCB - 1) === '\\\\') {\r\n              nextCB = path.indexOf(quote + ']', nextCB + 2);\r\n            }\r\n            if (nextCB === -1) { nextCB = path.length; }\r\n            parts.push(path.slice(index + 2, nextCB)\r\n              .replace(new RegExp('\\\\' + quote, 'g'), quote));\r\n            index = nextCB + 2;\r\n          } else { // no enclosing quotes\r\n            let nextCB = path.indexOf(']', nextOB); // next close bracket\r\n            if (nextCB === -1) { nextCB = path.length; }\r\n            parts.push(path.slice(index + 1, nextCB));\r\n            index = nextCB + 1;\r\n          }\r\n          if (path.charAt(index) === '.') { index++; }\r\n        }\r\n      }\r\n      return parts;\r\n    }\r\n    console.error('parseObjectPath error: Input object path must be a string.');\r\n  }\r\n}\r\n","// updated from AJV fast format regular expressions:\r\n// https://github.com/epoberezkin/ajv/blob/master/lib/compile/formats.js\r\n\r\nexport const jsonSchemaFormatTests = {\r\n\r\n  'date': /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/,\r\n\r\n  'time': /^[0-2]\\d:[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:z|[+-]\\d\\d:\\d\\d)?$/i,\r\n\r\n  // Modified to allow incomplete entries, such as\r\n  // \"2000-03-14T01:59:26.535\" (needs \"Z\") or \"2000-03-14T01:59\" (needs \":00Z\")\r\n  'date-time': /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s][0-2]\\d:[0-5]\\d(?::[0-5]\\d)?(?:\\.\\d+)?(?:z|[+-]\\d\\d:\\d\\d)?$/i,\r\n\r\n  // email (sources from jsen validator):\r\n  // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\r\n  // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')\r\n  'email': /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\r\n\r\n  'hostname': /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*$/i,\r\n\r\n  // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\r\n  'ipv4': /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\r\n\r\n  // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses\r\n  // tslint:disable-next-line:max-line-length\r\n  'ipv6': /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\r\n\r\n  // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\r\n  'uri': /^(?:[a-z][a-z0-9+-.]*)(?::|\\/)\\/?[^\\s]*$/i,\r\n\r\n  // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\r\n  'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\\/\\/)?[^\\s]*$/i,\r\n\r\n  // uri-template: https://tools.ietf.org/html/rfc6570\r\n  // tslint:disable-next-line:max-line-length\r\n  'uri-template': /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i,\r\n\r\n  // For the source: https://gist.github.com/dperini/729294\r\n  // For test cases: https://mathiasbynens.be/demo/url-regex\r\n  // tslint:disable-next-line:max-line-length\r\n  // @todo Delete current URL in favour of the commented out URL rule when this ajv issue is fixed https://github.com/eslint/eslint/issues/7983.\r\n  // tslint:disable-next-line:max-line-length\r\n  // URL: /^(?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!10(?:\\.\\d{1,3}){3})(?!127(?:\\.\\d{1,3}){3})(?!169\\.254(?:\\.\\d{1,3}){2})(?!192\\.168(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-?)*[a-z\\u{00a1}-\\u{ffff}0-9]+)(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-?)*[a-z\\u{00a1}-\\u{ffff}0-9]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu,\r\n  // tslint:disable-next-line:max-line-length\r\n  'url': /^(?:(?:http[s\\u017F]?|ftp):\\/\\/)(?:(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+(?::(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?@)?(?:(?!10(?:\\.[0-9]{1,3}){3})(?!127(?:\\.[0-9]{1,3}){3})(?!169\\.254(?:\\.[0-9]{1,3}){2})(?!192\\.168(?:\\.[0-9]{1,3}){2})(?!172\\.(?:1[6-9]|2[0-9]|3[01])(?:\\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-?)*(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)(?:\\.(?:(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-?)*(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)*(?:\\.(?:(?:[KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\\/(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?$/i,\r\n\r\n  // uuid: http://tools.ietf.org/html/rfc4122\r\n  'uuid': /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,\r\n\r\n  // optimized https://gist.github.com/olmokramer/82ccce673f86db7cda5e\r\n  // tslint:disable-next-line:max-line-length\r\n  'color': /^\\s*(#(?:[\\da-f]{3}){1,2}|rgb\\((?:\\d{1,3},\\s*){2}\\d{1,3}\\)|rgba\\((?:\\d{1,3},\\s*){3}\\d*\\.?\\d+\\)|hsl\\(\\d{1,3}(?:,\\s*\\d{1,3}%){2}\\)|hsla\\(\\d{1,3}(?:,\\s*\\d{1,3}%){2},\\s*\\d*\\.?\\d+\\))\\s*$/gi,\r\n\r\n  // JSON-pointer: https://tools.ietf.org/html/rfc6901\r\n  'json-pointer': /^(?:\\/(?:[^~/]|~0|~1)*)*$|^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,\r\n\r\n  'relative-json-pointer': /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/,\r\n\r\n  'regex': function (str) {\r\n    if (/[^\\\\]\\\\Z/.test(str)) { return false; }\r\n    try {\r\n      return true;\r\n    } catch (e) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n};\r\n\r\nexport type JsonSchemaFormatNames =\r\n  'date' | 'time' | 'date-time' | 'email' | 'hostname' | 'ipv4' | 'ipv6' |\r\n  'uri' | 'uri-reference' | 'uri-template' | 'url' | 'uuid' | 'color' |\r\n  'json-pointer' | 'relative-json-pointer' | 'regex';\r\n","import isEqual from 'lodash/isEqual';\r\nimport {\r\n  _executeAsyncValidators,\r\n  _executeValidators,\r\n  _mergeErrors,\r\n  _mergeObjects,\r\n  AsyncIValidatorFn,\r\n  getType,\r\n  hasValue,\r\n  isArray,\r\n  isBoolean,\r\n  isDefined,\r\n  isEmpty,\r\n  isNumber,\r\n  isString,\r\n  isType,\r\n  IValidatorFn,\r\n  SchemaPrimitiveType,\r\n  toJavaScriptType,\r\n  toObservable,\r\n  xor\r\n  } from './validator.functions';\r\nimport { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\nimport { forEachCopy } from './utility.functions';\r\nimport { forkJoin } from 'rxjs';\r\nimport { JsonSchemaFormatNames, jsonSchemaFormatTests } from './format-regex.constants';\r\nimport { map } from 'rxjs/operators';\r\n\r\n\r\n\r\n/**\r\n * 'JsonValidators' class\r\n *\r\n * Provides an extended set of validators to be used by form controls,\r\n * compatible with standard JSON Schema validation options.\r\n * http://json-schema.org/latest/json-schema-validation.html\r\n *\r\n * Note: This library is designed as a drop-in replacement for the Angular\r\n * Validators library, and except for one small breaking change to the 'pattern'\r\n * validator (described below) it can even be imported as a substitute, like so:\r\n *\r\n *   import { JsonValidators as Validators } from 'json-validators';\r\n *\r\n * and it should work with existing code as a complete replacement.\r\n *\r\n * The one exception is the 'pattern' validator, which has been changed to\r\n * matche partial values by default (the standard 'pattern' validator wrapped\r\n * all patterns in '^' and '$', forcing them to always match an entire value).\r\n * However, the old behavior can be restored by simply adding '^' and '$'\r\n * around your patterns, or by passing an optional second parameter of TRUE.\r\n * This change is to make the 'pattern' validator match the behavior of a\r\n * JSON Schema pattern, which allows partial matches, rather than the behavior\r\n * of an HTML input control pattern, which does not.\r\n *\r\n * This library replaces Angular's validators and combination functions\r\n * with the following validators and transformation functions:\r\n *\r\n * Validators:\r\n *   For all formControls:     required (*), type, enum, const\r\n *   For text formControls:    minLength (*), maxLength (*), pattern (*), format\r\n *   For numeric formControls: maximum, exclusiveMaximum,\r\n *                             minimum, exclusiveMinimum, multipleOf\r\n *   For formGroup objects:    minProperties, maxProperties, dependencies\r\n *   For formArray arrays:     minItems, maxItems, uniqueItems, contains\r\n *   Not used by JSON Schema:  min (*), max (*), requiredTrue (*), email (*)\r\n * (Validators originally included with Angular are maked with (*).)\r\n *\r\n * NOTE / TODO: The dependencies validator is not complete.\r\n * NOTE / TODO: The contains validator is not complete.\r\n *\r\n * Validators not used by JSON Schema (but included for compatibility)\r\n * and their JSON Schema equivalents:\r\n *\r\n *   Angular validator | JSON Schema equivalent\r\n *   ------------------|-----------------------\r\n *     min(number)     |   minimum(number)\r\n *     max(number)     |   maximum(number)\r\n *     requiredTrue()  |   const(true)\r\n *     email()         |   format('email')\r\n *\r\n * Validator transformation functions:\r\n *   composeAnyOf, composeOneOf, composeAllOf, composeNot\r\n * (Angular's original combination funciton, 'compose', is also included for\r\n * backward compatibility, though it is functionally equivalent to composeAllOf,\r\n * asside from its more generic error message.)\r\n *\r\n * All validators have also been extended to accept an optional second argument\r\n * which, if passed a TRUE value, causes the validator to perform the opposite\r\n * of its original finction. (This is used internally to enable 'not' and\r\n * 'composeOneOf' to function and return useful error messages.)\r\n *\r\n * The 'required' validator has also been overloaded so that if called with\r\n * a boolean parameter (or no parameters) it returns the original validator\r\n * function (rather than executing it). However, if it is called with an\r\n * AbstractControl parameter (as was previously required), it behaves\r\n * exactly as before.\r\n *\r\n * This enables all validators (including 'required') to be constructed in\r\n * exactly the same way, so they can be automatically applied using the\r\n * equivalent key names and values taken directly from a JSON Schema.\r\n *\r\n * This source code is partially derived from Angular,\r\n * which is Copyright (c) 2014-2017 Google, Inc.\r\n * Use of this source code is therefore governed by the same MIT-style license\r\n * that can be found in the LICENSE file at https://angular.io/license\r\n *\r\n * Original Angular Validators:\r\n * https://github.com/angular/angular/blob/master/packages/forms/src/validators.ts\r\n */\r\nexport class JsonValidators {\r\n\r\n  /**\r\n   * Validator functions:\r\n   *\r\n   * For all formControls:     required, type, enum, const\r\n   * For text formControls:    minLength, maxLength, pattern, format\r\n   * For numeric formControls: maximum, exclusiveMaximum,\r\n   *                           minimum, exclusiveMinimum, multipleOf\r\n   * For formGroup objects:    minProperties, maxProperties, dependencies\r\n   * For formArray arrays:     minItems, maxItems, uniqueItems, contains\r\n   *\r\n   * TODO: finish dependencies validator\r\n   */\r\n\r\n  /**\r\n   * 'required' validator\r\n   *\r\n   * This validator is overloaded, compared to the default required validator.\r\n   * If called with no parameters, or TRUE, this validator returns the\r\n   * 'required' validator function (rather than executing it). This matches\r\n   * the behavior of all other validators in this library.\r\n   *\r\n   * If this validator is called with an AbstractControl parameter\r\n   * (as was previously required) it behaves the same as Angular's default\r\n   * required validator, and returns an error if the control is empty.\r\n   *\r\n   * Old behavior: (if input type = AbstractControl)\r\n   * // {AbstractControl} control - required control\r\n   * // {{[key: string]: boolean}} - returns error message if no input\r\n   *\r\n   * New behavior: (if no input, or input type = boolean)\r\n   * // {boolean = true} required? - true to validate, false to disable\r\n   * // {IValidatorFn} - returns the 'required' validator function itself\r\n   */\r\n  static required(input: AbstractControl): ValidationErrors|null;\r\n  static required(input?: boolean): IValidatorFn;\r\n\r\n  static required(input?: AbstractControl|boolean): ValidationErrors|null|IValidatorFn {\r\n    if (input === undefined) { input = true; }\r\n    switch (input) {\r\n      case true: // Return required function (do not execute it yet)\r\n        return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n          if (invert) { return null; } // if not required, always return valid\r\n          return hasValue(control.value) ? null : { 'required': true };\r\n        };\r\n      case false: // Do nothing (if field is not required, it is always valid)\r\n        return JsonValidators.nullValidator;\r\n      default: // Execute required function\r\n        return hasValue((<AbstractControl>input).value) ? null : { 'required': true };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 'type' validator\r\n   *\r\n   * Requires a control to only accept values of a specified type,\r\n   * or one of an array of types.\r\n   *\r\n   * Note: SchemaPrimitiveType = 'string'|'number'|'integer'|'boolean'|'null'\r\n   *\r\n   * // {SchemaPrimitiveType|SchemaPrimitiveType[]} type - type(s) to accept\r\n   * // {IValidatorFn}\r\n   */\r\n  static type(requiredType: SchemaPrimitiveType|SchemaPrimitiveType[]): IValidatorFn {\r\n    if (!hasValue(requiredType)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      if (isEmpty(control.value)) { return null; }\r\n      const currentValue: any = control.value;\r\n      const isValid = isArray(requiredType) ?\r\n        (<SchemaPrimitiveType[]>requiredType).some(type => isType(currentValue, type)) :\r\n        isType(currentValue, <SchemaPrimitiveType>requiredType);\r\n      return xor(isValid, invert) ?\r\n        null : { 'type': { requiredType, currentValue } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'enum' validator\r\n   *\r\n   * Requires a control to have a value from an enumerated list of values.\r\n   *\r\n   * Converts types as needed to allow string inputs to still correctly\r\n   * match number, boolean, and null enum values.\r\n   *\r\n   * // {any[]} allowedValues - array of acceptable values\r\n   * // {IValidatorFn}\r\n   */\r\n  static enum(allowedValues: any[]): IValidatorFn {\r\n    if (!isArray(allowedValues)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      if (isEmpty(control.value)) { return null; }\r\n      const currentValue: any = control.value;\r\n      const isEqualVal = (enumValue, inputValue) =>\r\n        enumValue === inputValue ||\r\n        (isNumber(enumValue) && +inputValue === +enumValue) ||\r\n        (isBoolean(enumValue, 'strict') &&\r\n          toJavaScriptType(inputValue, 'boolean') === enumValue) ||\r\n        (enumValue === null && !hasValue(inputValue)) ||\r\n        isEqual(enumValue, inputValue);\r\n      const isValid = isArray(currentValue) ?\r\n        currentValue.every(inputValue => allowedValues.some(enumValue =>\r\n          isEqualVal(enumValue, inputValue)\r\n        )) :\r\n        allowedValues.some(enumValue => isEqualVal(enumValue, currentValue));\r\n      return xor(isValid, invert) ?\r\n        null : { 'enum': { allowedValues, currentValue } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'const' validator\r\n   *\r\n   * Requires a control to have a specific value.\r\n   *\r\n   * Converts types as needed to allow string inputs to still correctly\r\n   * match number, boolean, and null values.\r\n   *\r\n   * TODO: modify to work with objects\r\n   *\r\n   * // {any[]} requiredValue - required value\r\n   * // {IValidatorFn}\r\n   */\r\n  static const(requiredValue: any): IValidatorFn {\r\n    if (!hasValue(requiredValue)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      if (isEmpty(control.value)) { return null; }\r\n      const currentValue: any = control.value;\r\n      const isEqualVal = (constValue, inputValue) =>\r\n        constValue === inputValue ||\r\n        isNumber(constValue) && +inputValue === +constValue ||\r\n        isBoolean(constValue, 'strict') &&\r\n          toJavaScriptType(inputValue, 'boolean') === constValue ||\r\n        constValue === null && !hasValue(inputValue);\r\n      const isValid = isEqualVal(requiredValue, currentValue);\r\n      return xor(isValid, invert) ?\r\n        null : { 'const': { requiredValue, currentValue } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'minLength' validator\r\n   *\r\n   * Requires a control's text value to be greater than a specified length.\r\n   *\r\n   * // {number} minimumLength - minimum allowed string length\r\n   * // {boolean = false} invert - instead return error object only if valid\r\n   * // {IValidatorFn}\r\n   */\r\n  static minLength(minimumLength: number): IValidatorFn {\r\n    if (!hasValue(minimumLength)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      if (isEmpty(control.value)) { return null; }\r\n      const currentLength = isString(control.value) ? control.value.length : 0;\r\n      const isValid = currentLength >= minimumLength;\r\n      return xor(isValid, invert) ?\r\n        null : { 'minLength': { minimumLength, currentLength } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'maxLength' validator\r\n   *\r\n   * Requires a control's text value to be less than a specified length.\r\n   *\r\n   * // {number} maximumLength - maximum allowed string length\r\n   * // {boolean = false} invert - instead return error object only if valid\r\n   * // {IValidatorFn}\r\n   */\r\n  static maxLength(maximumLength: number): IValidatorFn {\r\n    if (!hasValue(maximumLength)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      const currentLength = isString(control.value) ? control.value.length : 0;\r\n      const isValid = currentLength <= maximumLength;\r\n      return xor(isValid, invert) ?\r\n        null : { 'maxLength': { maximumLength, currentLength } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'pattern' validator\r\n   *\r\n   * Note: NOT the same as Angular's default pattern validator.\r\n   *\r\n   * Requires a control's value to match a specified regular expression pattern.\r\n   *\r\n   * This validator changes the behavior of default pattern validator\r\n   * by replacing RegExp(`^${pattern}$`) with RegExp(`${pattern}`),\r\n   * which allows for partial matches.\r\n   *\r\n   * To return to the default funcitonality, and match the entire string,\r\n   * pass TRUE as the optional second parameter.\r\n   *\r\n   * // {string} pattern - regular expression pattern\r\n   * // {boolean = false} wholeString - match whole value string?\r\n   * // {IValidatorFn}\r\n   */\r\n  static pattern(pattern: string|RegExp, wholeString = false): IValidatorFn {\r\n    if (!hasValue(pattern)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      if (isEmpty(control.value)) { return null; }\r\n      let regex: RegExp;\r\n      let requiredPattern: string;\r\n      if (typeof pattern === 'string') {\r\n        requiredPattern = (wholeString) ? `^${pattern}$` : pattern;\r\n        regex = new RegExp(requiredPattern);\r\n      } else {\r\n        requiredPattern = pattern.toString();\r\n        regex = pattern;\r\n      }\r\n      const currentValue: string = control.value;\r\n      const isValid = isString(currentValue) ? regex.test(currentValue) : false;\r\n      return xor(isValid, invert) ?\r\n        null : { 'pattern': { requiredPattern, currentValue } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'format' validator\r\n   *\r\n   * Requires a control to have a value of a certain format.\r\n   *\r\n   * This validator currently checks the following formsts:\r\n   *   date, time, date-time, email, hostname, ipv4, ipv6,\r\n   *   uri, uri-reference, uri-template, url, uuid, color,\r\n   *   json-pointer, relative-json-pointer, regex\r\n   *\r\n   * Fast format regular expressions copied from AJV:\r\n   * https://github.com/epoberezkin/ajv/blob/master/lib/compile/formats.js\r\n   *\r\n   * // {JsonSchemaFormatNames} requiredFormat - format to check\r\n   * // {IValidatorFn}\r\n   */\r\n  static format(requiredFormat: JsonSchemaFormatNames): IValidatorFn {\r\n    if (!hasValue(requiredFormat)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      if (isEmpty(control.value)) { return null; }\r\n      let isValid: boolean;\r\n      const currentValue: string|Date = control.value;\r\n      if (isString(currentValue)) {\r\n        const formatTest: Function|RegExp = jsonSchemaFormatTests[requiredFormat];\r\n        if (typeof formatTest === 'object') {\r\n          isValid = (<RegExp>formatTest).test(<string>currentValue);\r\n        } else if (typeof formatTest === 'function') {\r\n          isValid = (<Function>formatTest)(<string>currentValue);\r\n        } else {\r\n          console.error(`format validator error: \"${requiredFormat}\" is not a recognized format.`);\r\n          isValid = true;\r\n        }\r\n      } else {\r\n        // Allow JavaScript Date objects\r\n        isValid = ['date', 'time', 'date-time'].includes(requiredFormat) &&\r\n          Object.prototype.toString.call(currentValue) === '[object Date]';\r\n      }\r\n      return xor(isValid, invert) ?\r\n        null : { 'format': { requiredFormat, currentValue } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'minimum' validator\r\n   *\r\n   * Requires a control's numeric value to be greater than or equal to\r\n   * a minimum amount.\r\n   *\r\n   * Any non-numeric value is also valid (according to the HTML forms spec,\r\n   * a non-numeric value doesn't have a minimum).\r\n   * https://www.w3.org/TR/html5/forms.html#attr-input-max\r\n   *\r\n   * // {number} minimum - minimum allowed value\r\n   * // {IValidatorFn}\r\n   */\r\n  static minimum(minimumValue: number): IValidatorFn {\r\n    if (!hasValue(minimumValue)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      if (isEmpty(control.value)) { return null; }\r\n      const currentValue = control.value;\r\n      const isValid = !isNumber(currentValue) || currentValue >= minimumValue;\r\n      return xor(isValid, invert) ?\r\n        null : { 'minimum': { minimumValue, currentValue } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'exclusiveMinimum' validator\r\n   *\r\n   * Requires a control's numeric value to be less than a maximum amount.\r\n   *\r\n   * Any non-numeric value is also valid (according to the HTML forms spec,\r\n   * a non-numeric value doesn't have a maximum).\r\n   * https://www.w3.org/TR/html5/forms.html#attr-input-max\r\n   *\r\n   * // {number} exclusiveMinimumValue - maximum allowed value\r\n   * // {IValidatorFn}\r\n   */\r\n  static exclusiveMinimum(exclusiveMinimumValue: number): IValidatorFn {\r\n    if (!hasValue(exclusiveMinimumValue)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      if (isEmpty(control.value)) { return null; }\r\n      const currentValue = control.value;\r\n      const isValid = !isNumber(currentValue) || +currentValue < exclusiveMinimumValue;\r\n      return xor(isValid, invert) ?\r\n        null : { 'exclusiveMinimum': { exclusiveMinimumValue, currentValue } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'maximum' validator\r\n   *\r\n   * Requires a control's numeric value to be less than or equal to\r\n   * a maximum amount.\r\n   *\r\n   * Any non-numeric value is also valid (according to the HTML forms spec,\r\n   * a non-numeric value doesn't have a maximum).\r\n   * https://www.w3.org/TR/html5/forms.html#attr-input-max\r\n   *\r\n   * // {number} maximumValue - maximum allowed value\r\n   * // {IValidatorFn}\r\n   */\r\n  static maximum(maximumValue: number): IValidatorFn {\r\n    if (!hasValue(maximumValue)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      if (isEmpty(control.value)) { return null; }\r\n      const currentValue = control.value;\r\n      const isValid = !isNumber(currentValue) || +currentValue <= maximumValue;\r\n      return xor(isValid, invert) ?\r\n        null : { 'maximum': { maximumValue, currentValue } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'exclusiveMaximum' validator\r\n   *\r\n   * Requires a control's numeric value to be less than a maximum amount.\r\n   *\r\n   * Any non-numeric value is also valid (according to the HTML forms spec,\r\n   * a non-numeric value doesn't have a maximum).\r\n   * https://www.w3.org/TR/html5/forms.html#attr-input-max\r\n   *\r\n   * // {number} exclusiveMaximumValue - maximum allowed value\r\n   * // {IValidatorFn}\r\n   */\r\n  static exclusiveMaximum(exclusiveMaximumValue: number): IValidatorFn {\r\n    if (!hasValue(exclusiveMaximumValue)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      if (isEmpty(control.value)) { return null; }\r\n      const currentValue = control.value;\r\n      const isValid = !isNumber(currentValue) || +currentValue < exclusiveMaximumValue;\r\n      return xor(isValid, invert) ?\r\n        null : { 'exclusiveMaximum': { exclusiveMaximumValue, currentValue } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'multipleOf' validator\r\n   *\r\n   * Requires a control to have a numeric value that is a multiple\r\n   * of a specified number.\r\n   *\r\n   * // {number} multipleOfValue - number value must be a multiple of\r\n   * // {IValidatorFn}\r\n   */\r\n  static multipleOf(multipleOfValue: number): IValidatorFn {\r\n    if (!hasValue(multipleOfValue)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      if (isEmpty(control.value)) { return null; }\r\n      const currentValue = control.value;\r\n      const isValid = isNumber(currentValue) &&\r\n        currentValue % multipleOfValue === 0;\r\n      return xor(isValid, invert) ?\r\n        null : { 'multipleOf': { multipleOfValue, currentValue } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'minProperties' validator\r\n   *\r\n   * Requires a form group to have a minimum number of properties (i.e. have\r\n   * values entered in a minimum number of controls within the group).\r\n   *\r\n   * // {number} minimumProperties - minimum number of properties allowed\r\n   * // {IValidatorFn}\r\n   */\r\n  static minProperties(minimumProperties: number): IValidatorFn {\r\n    if (!hasValue(minimumProperties)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      if (isEmpty(control.value)) { return null; }\r\n      const currentProperties = Object.keys(control.value).length || 0;\r\n      const isValid = currentProperties >= minimumProperties;\r\n      return xor(isValid, invert) ?\r\n        null : { 'minProperties': { minimumProperties, currentProperties } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'maxProperties' validator\r\n   *\r\n   * Requires a form group to have a maximum number of properties (i.e. have\r\n   * values entered in a maximum number of controls within the group).\r\n   *\r\n   * Note: Has no effect if the form group does not contain more than the\r\n   * maximum number of controls.\r\n   *\r\n   * // {number} maximumProperties - maximum number of properties allowed\r\n   * // {IValidatorFn}\r\n   */\r\n  static maxProperties(maximumProperties: number): IValidatorFn {\r\n    if (!hasValue(maximumProperties)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      const currentProperties = Object.keys(control.value).length || 0;\r\n      const isValid = currentProperties <= maximumProperties;\r\n      return xor(isValid, invert) ?\r\n        null : { 'maxProperties': { maximumProperties, currentProperties } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'dependencies' validator\r\n   *\r\n   * Requires the controls in a form group to meet additional validation\r\n   * criteria, depending on the values of other controls in the group.\r\n   *\r\n   * Examples:\r\n   * https://spacetelescope.github.io/understanding-json-schema/reference/object.html#dependencies\r\n   *\r\n   * // {any} dependencies - required dependencies\r\n   * // {IValidatorFn}\r\n   */\r\n  static dependencies(dependencies: any): IValidatorFn {\r\n    if (getType(dependencies) !== 'object' || isEmpty(dependencies)) {\r\n      return JsonValidators.nullValidator;\r\n    }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      if (isEmpty(control.value)) { return null; }\r\n      const allErrors = _mergeObjects(\r\n        forEachCopy(dependencies, (value, requiringField) => {\r\n          if (!hasValue(control.value[requiringField])) { return null; }\r\n          let requiringFieldErrors: ValidationErrors = { };\r\n          let requiredFields: string[];\r\n          let properties: ValidationErrors = { };\r\n          if (getType(dependencies[requiringField]) === 'array') {\r\n            requiredFields = dependencies[requiringField];\r\n          } else if (getType(dependencies[requiringField]) === 'object') {\r\n            requiredFields = dependencies[requiringField]['required'] || [];\r\n            properties = dependencies[requiringField]['properties'] || { };\r\n          }\r\n\r\n          // Validate property dependencies\r\n          for (const requiredField of requiredFields) {\r\n            if (xor(!hasValue(control.value[requiredField]), invert)) {\r\n              requiringFieldErrors[requiredField] = { 'required': true };\r\n            }\r\n          }\r\n\r\n          // Validate schema dependencies\r\n          requiringFieldErrors = _mergeObjects(requiringFieldErrors,\r\n            forEachCopy(properties, (requirements, requiredField) => {\r\n              const requiredFieldErrors = _mergeObjects(\r\n                forEachCopy(requirements, (requirement, parameter) => {\r\n                  let validator: IValidatorFn = null;\r\n                  if (requirement === 'maximum' || requirement === 'minimum') {\r\n                    const exclusive = !!requirements['exclusiveM' + requirement.slice(1)];\r\n                    validator = JsonValidators[requirement](parameter, exclusive);\r\n                  } else if (typeof JsonValidators[requirement] === 'function') {\r\n                    validator = JsonValidators[requirement](parameter);\r\n                  }\r\n                  return !isDefined(validator) ?\r\n                    null : validator(control.value[requiredField]);\r\n                })\r\n              );\r\n              return isEmpty(requiredFieldErrors) ?\r\n                null : { [requiredField]: requiredFieldErrors };\r\n            })\r\n          );\r\n          return isEmpty(requiringFieldErrors) ?\r\n            null : { [requiringField]: requiringFieldErrors };\r\n        })\r\n      );\r\n      return isEmpty(allErrors) ? null : allErrors;\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'minItems' validator\r\n   *\r\n   * Requires a form array to have a minimum number of values.\r\n   *\r\n   * // {number} minimumItems - minimum number of items allowed\r\n   * // {IValidatorFn}\r\n   */\r\n  static minItems(minimumItems: number): IValidatorFn {\r\n    if (!hasValue(minimumItems)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      if (isEmpty(control.value)) { return null; }\r\n      const currentItems = isArray(control.value) ? control.value.length : 0;\r\n      const isValid = currentItems >= minimumItems;\r\n      return xor(isValid, invert) ?\r\n        null : { 'minItems': { minimumItems, currentItems } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'maxItems' validator\r\n   *\r\n   * Requires a form array to have a maximum number of values.\r\n   *\r\n   * // {number} maximumItems - maximum number of items allowed\r\n   * // {IValidatorFn}\r\n   */\r\n  static maxItems(maximumItems: number): IValidatorFn {\r\n    if (!hasValue(maximumItems)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      const currentItems = isArray(control.value) ? control.value.length : 0;\r\n      const isValid = currentItems <= maximumItems;\r\n      return xor(isValid, invert) ?\r\n        null : { 'maxItems': { maximumItems, currentItems } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'uniqueItems' validator\r\n   *\r\n   * Requires values in a form array to be unique.\r\n   *\r\n   * // {boolean = true} unique? - true to validate, false to disable\r\n   * // {IValidatorFn}\r\n   */\r\n  static uniqueItems(unique = true): IValidatorFn {\r\n    if (!unique) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      if (isEmpty(control.value)) { return null; }\r\n      const sorted: any[] = control.value.slice().sort();\r\n      const duplicateItems = [];\r\n      for (let i = 1; i < sorted.length; i++) {\r\n        if (sorted[i - 1] === sorted[i] && duplicateItems.includes(sorted[i])) {\r\n          duplicateItems.push(sorted[i]);\r\n        }\r\n      }\r\n      const isValid = !duplicateItems.length;\r\n      return xor(isValid, invert) ?\r\n        null : { 'uniqueItems': { duplicateItems } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'contains' validator\r\n   *\r\n   * TODO: Complete this validator\r\n   *\r\n   * Requires values in a form array to be unique.\r\n   *\r\n   * // {boolean = true} unique? - true to validate, false to disable\r\n   * // {IValidatorFn}\r\n   */\r\n  static contains(requiredItem = true): IValidatorFn {\r\n    if (!requiredItem) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      if (isEmpty(control.value) || !isArray(control.value)) { return null; }\r\n      const currentItems = control.value;\r\n      // const isValid = currentItems.some(item =>\r\n      //\r\n      // );\r\n      const isValid = true;\r\n      return xor(isValid, invert) ?\r\n        null : { 'contains': { requiredItem, currentItems } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * No-op validator. Included for backward compatibility.\r\n   */\r\n  static nullValidator(control: AbstractControl): ValidationErrors|null {\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Validator transformation functions:\r\n   * composeAnyOf, composeOneOf, composeAllOf, composeNot,\r\n   * compose, composeAsync\r\n   *\r\n   * TODO: Add composeAnyOfAsync, composeOneOfAsync,\r\n   *           composeAllOfAsync, composeNotAsync\r\n   */\r\n\r\n  /**\r\n   * 'composeAnyOf' validator combination function\r\n   *\r\n   * Accepts an array of validators and returns a single validator that\r\n   * evaluates to valid if any one or more of the submitted validators are\r\n   * valid. If every validator is invalid, it returns combined errors from\r\n   * all validators.\r\n   *\r\n   * // {IValidatorFn[]} validators - array of validators to combine\r\n   * // {IValidatorFn} - single combined validator function\r\n   */\r\n  static composeAnyOf(validators: IValidatorFn[]): IValidatorFn {\r\n    if (!validators) { return null; }\r\n    const presentValidators = validators.filter(isDefined);\r\n    if (presentValidators.length === 0) { return null; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      const arrayOfErrors =\r\n        _executeValidators(control, presentValidators, invert).filter(isDefined);\r\n      const isValid = validators.length > arrayOfErrors.length;\r\n      return xor(isValid, invert) ?\r\n        null : _mergeObjects(...arrayOfErrors, { 'anyOf': !invert });\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'composeOneOf' validator combination function\r\n   *\r\n   * Accepts an array of validators and returns a single validator that\r\n   * evaluates to valid only if exactly one of the submitted validators\r\n   * is valid. Otherwise returns combined information from all validators,\r\n   * both valid and invalid.\r\n   *\r\n   * // {IValidatorFn[]} validators - array of validators to combine\r\n   * // {IValidatorFn} - single combined validator function\r\n   */\r\n  static composeOneOf(validators: IValidatorFn[]): IValidatorFn {\r\n    if (!validators) { return null; }\r\n    const presentValidators = validators.filter(isDefined);\r\n    if (presentValidators.length === 0) { return null; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      const arrayOfErrors =\r\n        _executeValidators(control, presentValidators);\r\n      const validControls =\r\n        validators.length - arrayOfErrors.filter(isDefined).length;\r\n      const isValid = validControls === 1;\r\n      if (xor(isValid, invert)) { return null; }\r\n      const arrayOfValids =\r\n        _executeValidators(control, presentValidators, invert);\r\n      return _mergeObjects(...arrayOfErrors, ...arrayOfValids, { 'oneOf': !invert });\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'composeAllOf' validator combination function\r\n   *\r\n   * Accepts an array of validators and returns a single validator that\r\n   * evaluates to valid only if all the submitted validators are individually\r\n   * valid. Otherwise it returns combined errors from all invalid validators.\r\n   *\r\n   * // {IValidatorFn[]} validators - array of validators to combine\r\n   * // {IValidatorFn} - single combined validator function\r\n   */\r\n  static composeAllOf(validators: IValidatorFn[]): IValidatorFn {\r\n    if (!validators) { return null; }\r\n    const presentValidators = validators.filter(isDefined);\r\n    if (presentValidators.length === 0) { return null; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      const combinedErrors = _mergeErrors(\r\n        _executeValidators(control, presentValidators, invert)\r\n      );\r\n      const isValid = combinedErrors === null;\r\n      return (xor(isValid, invert)) ?\r\n        null : _mergeObjects(combinedErrors, { 'allOf': !invert });\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'composeNot' validator inversion function\r\n   *\r\n   * Accepts a single validator function and inverts its result.\r\n   * Returns valid if the submitted validator is invalid, and\r\n   * returns invalid if the submitted validator is valid.\r\n   * (Note: this function can itself be inverted\r\n   *   - e.g. composeNot(composeNot(validator)) -\r\n   *   but this can be confusing and is therefore not recommended.)\r\n   *\r\n   * // {IValidatorFn[]} validators - validator(s) to invert\r\n   * // {IValidatorFn} - new validator function that returns opposite result\r\n   */\r\n  static composeNot(validator: IValidatorFn): IValidatorFn {\r\n    if (!validator) { return null; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\r\n      if (isEmpty(control.value)) { return null; }\r\n      const error = validator(control, !invert);\r\n      const isValid = error === null;\r\n      return (xor(isValid, invert)) ?\r\n        null : _mergeObjects(error, { 'not': !invert });\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 'compose' validator combination function\r\n   *\r\n   * // {IValidatorFn[]} validators - array of validators to combine\r\n   * // {IValidatorFn} - single combined validator function\r\n   */\r\n  static compose(validators: IValidatorFn[]): IValidatorFn {\r\n    if (!validators) { return null; }\r\n    const presentValidators = validators.filter(isDefined);\r\n    if (presentValidators.length === 0) { return null; }\r\n    return (control: AbstractControl, invert = false): ValidationErrors|null =>\r\n      _mergeErrors(_executeValidators(control, presentValidators, invert));\r\n  }\r\n\r\n  /**\r\n   * 'composeAsync' async validator combination function\r\n   *\r\n   * // {AsyncIValidatorFn[]} async validators - array of async validators\r\n   * // {AsyncIValidatorFn} - single combined async validator function\r\n   */\r\n  static composeAsync(validators: AsyncIValidatorFn[]): AsyncIValidatorFn {\r\n    if (!validators) { return null; }\r\n    const presentValidators = validators.filter(isDefined);\r\n    if (presentValidators.length === 0) { return null; }\r\n    return (control: AbstractControl) => {\r\n      const observables =\r\n        _executeAsyncValidators(control, presentValidators).map(toObservable);\r\n      return map.call(forkJoin(observables), _mergeErrors);\r\n    };\r\n  }\r\n\r\n  // Additional angular validators (not used by Angualr JSON Schema Form)\r\n  // From https://github.com/angular/angular/blob/master/packages/forms/src/validators.ts\r\n\r\n  /**\r\n   * Validator that requires controls to have a value greater than a number.\r\n   */\r\n  static min(min: number): ValidatorFn {\r\n    if (!hasValue(min)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl): ValidationErrors|null => {\r\n      // don't validate empty values to allow optional controls\r\n      if (isEmpty(control.value) || isEmpty(min)) { return null; }\r\n      const value = parseFloat(control.value);\r\n      const actual = control.value;\r\n      // Controls with NaN values after parsing should be treated as not having a\r\n      // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min\r\n      return isNaN(value) || value >= min ? null : { 'min': { min, actual } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Validator that requires controls to have a value less than a number.\r\n   */\r\n  static max(max: number): ValidatorFn {\r\n    if (!hasValue(max)) { return JsonValidators.nullValidator; }\r\n    return (control: AbstractControl): ValidationErrors|null => {\r\n      // don't validate empty values to allow optional controls\r\n      if (isEmpty(control.value) || isEmpty(max)) { return null; }\r\n      const value = parseFloat(control.value);\r\n      const actual = control.value;\r\n      // Controls with NaN values after parsing should be treated as not having a\r\n      // maximum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-max\r\n      return isNaN(value) || value <= max ? null : { 'max': { max, actual } };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Validator that requires control value to be true.\r\n   */\r\n  static requiredTrue(control: AbstractControl): ValidationErrors|null {\r\n    if (!control) { return JsonValidators.nullValidator; }\r\n    return control.value === true ? null : { 'required': true };\r\n  }\r\n\r\n  /**\r\n   * Validator that performs email validation.\r\n   */\r\n  static email(control: AbstractControl): ValidationErrors|null {\r\n    if (!control) { return JsonValidators.nullValidator; }\r\n    const EMAIL_REGEXP =\r\n      // tslint:disable-next-line:max-line-length\r\n      /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;\r\n    return EMAIL_REGEXP.test(control.value) ? null : { 'email': true };\r\n  }\r\n}\r\n","import isEqual from 'lodash/isEqual';\r\n\r\nimport {\r\n  isArray, isEmpty, isNumber, isObject, isString\r\n} from './validator.functions';\r\nimport { hasOwn, uniqueItems, commonItems } from './utility.functions';\r\nimport { JsonPointer, Pointer } from './jsonpointer.functions';\r\n\r\n/**\r\n * 'mergeSchemas' function\r\n *\r\n * Merges multiple JSON schemas into a single schema with combined rules.\r\n *\r\n * If able to logically merge properties from all schemas,\r\n * returns a single schema object containing all merged properties.\r\n *\r\n * Example: ({ a: b, max: 1 }, { c: d, max: 2 }) => { a: b, c: d, max: 1 }\r\n *\r\n * If unable to logically merge, returns an allOf schema object containing\r\n * an array of the original schemas;\r\n *\r\n * Example: ({ a: b }, { a: d }) => { allOf: [ { a: b }, { a: d } ] }\r\n *\r\n * //   schemas - one or more input schemas\r\n * //  - merged schema\r\n */\r\nexport function mergeSchemas(...schemas) {\r\n  schemas = schemas.filter(schema => !isEmpty(schema));\r\n  if (schemas.some(schema => !isObject(schema))) { return null; }\r\n  const combinedSchema: any = {};\r\n  for (const schema of schemas) {\r\n    for (const key of Object.keys(schema)) {\r\n      const combinedValue = combinedSchema[key];\r\n      const schemaValue = schema[key];\r\n      if (!hasOwn(combinedSchema, key) || isEqual(combinedValue, schemaValue)) {\r\n        combinedSchema[key] = schemaValue;\r\n      } else {\r\n        switch (key) {\r\n          case 'allOf':\r\n            // Combine all items from both arrays\r\n            if (isArray(combinedValue) && isArray(schemaValue)) {\r\n              combinedSchema.allOf = mergeSchemas(...combinedValue, ...schemaValue);\r\n            } else {\r\n              return { allOf: [ ...schemas ] };\r\n            }\r\n          break;\r\n          case 'additionalItems': case 'additionalProperties':\r\n          case 'contains': case 'propertyNames':\r\n            // Merge schema objects\r\n            if (isObject(combinedValue) && isObject(schemaValue)) {\r\n              combinedSchema[key] = mergeSchemas(combinedValue, schemaValue);\r\n            // additionalProperties == false in any schema overrides all other values\r\n            } else if (\r\n              key === 'additionalProperties' &&\r\n              (combinedValue === false || schemaValue === false)\r\n            ) {\r\n              combinedSchema.combinedSchema = false;\r\n            } else {\r\n              return { allOf: [ ...schemas ] };\r\n            }\r\n          break;\r\n          case 'anyOf': case 'oneOf': case 'enum':\r\n            // Keep only items that appear in both arrays\r\n            if (isArray(combinedValue) && isArray(schemaValue)) {\r\n              combinedSchema[key] = combinedValue.filter(item1 =>\r\n                schemaValue.findIndex(item2 => isEqual(item1, item2)) > -1\r\n              );\r\n              if (!combinedSchema[key].length) { return { allOf: [ ...schemas ] }; }\r\n            } else {\r\n              return { allOf: [ ...schemas ] };\r\n            }\r\n          break;\r\n          case 'definitions':\r\n            // Combine keys from both objects\r\n            if (isObject(combinedValue) && isObject(schemaValue)) {\r\n              const combinedObject = { ...combinedValue };\r\n              for (const subKey of Object.keys(schemaValue)) {\r\n                if (!hasOwn(combinedObject, subKey) ||\r\n                  isEqual(combinedObject[subKey], schemaValue[subKey])\r\n                ) {\r\n                  combinedObject[subKey] = schemaValue[subKey];\r\n                // Don't combine matching keys with different values\r\n                } else {\r\n                  return { allOf: [ ...schemas ] };\r\n                }\r\n              }\r\n              combinedSchema.definitions = combinedObject;\r\n            } else {\r\n              return { allOf: [ ...schemas ] };\r\n            }\r\n          break;\r\n          case 'dependencies':\r\n            // Combine all keys from both objects\r\n            // and merge schemas on matching keys,\r\n            // converting from arrays to objects if necessary\r\n            if (isObject(combinedValue) && isObject(schemaValue)) {\r\n              const combinedObject = { ...combinedValue };\r\n              for (const subKey of Object.keys(schemaValue)) {\r\n                if (!hasOwn(combinedObject, subKey) ||\r\n                  isEqual(combinedObject[subKey], schemaValue[subKey])\r\n                ) {\r\n                  combinedObject[subKey] = schemaValue[subKey];\r\n                // If both keys are arrays, include all items from both arrays,\r\n                // excluding duplicates\r\n                } else if (\r\n                  isArray(schemaValue[subKey]) && isArray(combinedObject[subKey])\r\n                ) {\r\n                  combinedObject[subKey] =\r\n                    uniqueItems(...combinedObject[subKey], ...schemaValue[subKey]);\r\n                // If either key is an object, merge the schemas\r\n                } else if (\r\n                  (isArray(schemaValue[subKey]) || isObject(schemaValue[subKey])) &&\r\n                  (isArray(combinedObject[subKey]) || isObject(combinedObject[subKey]))\r\n                ) {\r\n                  // If either key is an array, convert it to an object first\r\n                  const required = isArray(combinedSchema.required) ?\r\n                    combinedSchema.required : [];\r\n                  const combinedDependency = isArray(combinedObject[subKey]) ?\r\n                    { required: uniqueItems(...required, combinedObject[subKey]) } :\r\n                    combinedObject[subKey];\r\n                  const schemaDependency = isArray(schemaValue[subKey]) ?\r\n                    { required: uniqueItems(...required, schemaValue[subKey]) } :\r\n                    schemaValue[subKey];\r\n                  combinedObject[subKey] =\r\n                    mergeSchemas(combinedDependency, schemaDependency);\r\n                } else {\r\n                  return { allOf: [ ...schemas ] };\r\n                }\r\n              }\r\n              combinedSchema.dependencies = combinedObject;\r\n            } else {\r\n              return { allOf: [ ...schemas ] };\r\n            }\r\n          break;\r\n          case 'items':\r\n            // If arrays, keep only items that appear in both arrays\r\n            if (isArray(combinedValue) && isArray(schemaValue)) {\r\n              combinedSchema.items = combinedValue.filter(item1 =>\r\n                schemaValue.findIndex(item2 => isEqual(item1, item2)) > -1\r\n              );\r\n              if (!combinedSchema.items.length) { return { allOf: [ ...schemas ] }; }\r\n            // If both keys are objects, merge them\r\n            } else if (isObject(combinedValue) && isObject(schemaValue)) {\r\n              combinedSchema.items = mergeSchemas(combinedValue, schemaValue);\r\n            // If object + array, combine object with each array item\r\n            } else if (isArray(combinedValue) && isObject(schemaValue)) {\r\n              combinedSchema.items =\r\n                combinedValue.map(item => mergeSchemas(item, schemaValue));\r\n            } else if (isObject(combinedValue) && isArray(schemaValue)) {\r\n              combinedSchema.items =\r\n                schemaValue.map(item => mergeSchemas(item, combinedValue));\r\n            } else {\r\n              return { allOf: [ ...schemas ] };\r\n            }\r\n          break;\r\n          case 'multipleOf':\r\n            // TODO: Adjust to correctly handle decimal values\r\n            // If numbers, set to least common multiple\r\n            if (isNumber(combinedValue) && isNumber(schemaValue)) {\r\n              const gcd = (x, y) => !y ? x : gcd(y, x % y);\r\n              const lcm = (x, y) => (x * y) / gcd(x, y);\r\n              combinedSchema.multipleOf = lcm(combinedValue, schemaValue);\r\n            } else {\r\n              return { allOf: [ ...schemas ] };\r\n            }\r\n          break;\r\n          case 'maximum': case 'exclusiveMaximum': case 'maxLength':\r\n          case 'maxItems': case 'maxProperties':\r\n            // If numbers, set to lowest value\r\n            if (isNumber(combinedValue) && isNumber(schemaValue)) {\r\n              combinedSchema[key] = Math.min(combinedValue, schemaValue);\r\n            } else {\r\n              return { allOf: [ ...schemas ] };\r\n            }\r\n          break;\r\n          case 'minimum': case 'exclusiveMinimum': case 'minLength':\r\n          case 'minItems': case 'minProperties':\r\n            // If numbers, set to highest value\r\n            if (isNumber(combinedValue) && isNumber(schemaValue)) {\r\n              combinedSchema[key] = Math.max(combinedValue, schemaValue);\r\n            } else {\r\n              return { allOf: [ ...schemas ] };\r\n            }\r\n          break;\r\n          case 'not':\r\n            // Combine not values into anyOf array\r\n            if (isObject(combinedValue) && isObject(schemaValue)) {\r\n              const notAnyOf = [combinedValue, schemaValue]\r\n                .reduce((notAnyOfArray, notSchema) =>\r\n                  isArray(notSchema.anyOf) &&\r\n                  Object.keys(notSchema).length === 1 ?\r\n                    [ ...notAnyOfArray, ...notSchema.anyOf ] :\r\n                    [ ...notAnyOfArray, notSchema ]\r\n                , []);\r\n              // TODO: Remove duplicate items from array\r\n              combinedSchema.not = { anyOf: notAnyOf };\r\n            } else {\r\n              return { allOf: [ ...schemas ] };\r\n            }\r\n          break;\r\n          case 'patternProperties':\r\n            // Combine all keys from both objects\r\n            // and merge schemas on matching keys\r\n            if (isObject(combinedValue) && isObject(schemaValue)) {\r\n              const combinedObject = { ...combinedValue };\r\n              for (const subKey of Object.keys(schemaValue)) {\r\n                if (!hasOwn(combinedObject, subKey) ||\r\n                  isEqual(combinedObject[subKey], schemaValue[subKey])\r\n                ) {\r\n                  combinedObject[subKey] = schemaValue[subKey];\r\n                // If both keys are objects, merge them\r\n                } else if (\r\n                  isObject(schemaValue[subKey]) && isObject(combinedObject[subKey])\r\n                ) {\r\n                  combinedObject[subKey] =\r\n                    mergeSchemas(combinedObject[subKey], schemaValue[subKey]);\r\n                } else {\r\n                  return { allOf: [ ...schemas ] };\r\n                }\r\n              }\r\n              combinedSchema.patternProperties = combinedObject;\r\n            } else {\r\n              return { allOf: [ ...schemas ] };\r\n            }\r\n          break;\r\n          case 'properties':\r\n            // Combine all keys from both objects\r\n            // unless additionalProperties === false\r\n            // and merge schemas on matching keys\r\n            if (isObject(combinedValue) && isObject(schemaValue)) {\r\n              const combinedObject = { ...combinedValue };\r\n              // If new schema has additionalProperties,\r\n              // merge or remove non-matching property keys in combined schema\r\n              if (hasOwn(schemaValue, 'additionalProperties')) {\r\n                Object.keys(combinedValue)\r\n                  .filter(combinedKey => !Object.keys(schemaValue).includes(combinedKey))\r\n                  .forEach(nonMatchingKey => {\r\n                    if (schemaValue.additionalProperties === false) {\r\n                      delete combinedObject[nonMatchingKey];\r\n                    } else if (isObject(schemaValue.additionalProperties)) {\r\n                      combinedObject[nonMatchingKey] = mergeSchemas(\r\n                        combinedObject[nonMatchingKey],\r\n                        schemaValue.additionalProperties\r\n                      );\r\n                    }\r\n                  });\r\n              }\r\n              for (const subKey of Object.keys(schemaValue)) {\r\n                if (isEqual(combinedObject[subKey], schemaValue[subKey]) || (\r\n                  !hasOwn(combinedObject, subKey) &&\r\n                  !hasOwn(combinedObject, 'additionalProperties')\r\n                )) {\r\n                  combinedObject[subKey] = schemaValue[subKey];\r\n                // If combined schema has additionalProperties,\r\n                // merge or ignore non-matching property keys in new schema\r\n                } else if (\r\n                  !hasOwn(combinedObject, subKey) &&\r\n                  hasOwn(combinedObject, 'additionalProperties')\r\n                ) {\r\n                  // If combinedObject.additionalProperties === false,\r\n                  // do nothing (don't set key)\r\n                  // If additionalProperties is object, merge with new key\r\n                  if (isObject(combinedObject.additionalProperties)) {\r\n                    combinedObject[subKey] = mergeSchemas(\r\n                      combinedObject.additionalProperties, schemaValue[subKey]\r\n                    );\r\n                  }\r\n                // If both keys are objects, merge them\r\n                } else if (\r\n                  isObject(schemaValue[subKey]) &&\r\n                  isObject(combinedObject[subKey])\r\n                ) {\r\n                  combinedObject[subKey] =\r\n                    mergeSchemas(combinedObject[subKey], schemaValue[subKey]);\r\n                } else {\r\n                  return { allOf: [ ...schemas ] };\r\n                }\r\n              }\r\n              combinedSchema.properties = combinedObject;\r\n            } else {\r\n              return { allOf: [ ...schemas ] };\r\n            }\r\n          break;\r\n          case 'required':\r\n            // If arrays, include all items from both arrays, excluding duplicates\r\n            if (isArray(combinedValue) && isArray(schemaValue)) {\r\n              combinedSchema.required = uniqueItems(...combinedValue, ...schemaValue);\r\n            // If booleans, aet true if either true\r\n            } else if (\r\n              typeof schemaValue === 'boolean' &&\r\n              typeof combinedValue === 'boolean'\r\n            ) {\r\n              combinedSchema.required = !!combinedValue || !!schemaValue;\r\n            } else {\r\n              return { allOf: [ ...schemas ] };\r\n            }\r\n          break;\r\n          case '$schema': case '$id': case 'id':\r\n            // Don't combine these keys\r\n          break;\r\n          case 'title': case 'description': case '$comment':\r\n            // Return the last value, overwriting any previous one\r\n            // These properties are not used for validation, so conflicts don't matter\r\n            combinedSchema[key] = schemaValue;\r\n          break;\r\n          case 'type':\r\n            if (\r\n              (isArray(schemaValue) || isString(schemaValue)) &&\r\n              (isArray(combinedValue) || isString(combinedValue))\r\n            ) {\r\n              const combinedTypes = commonItems(combinedValue, schemaValue);\r\n              if (!combinedTypes.length) { return { allOf: [ ...schemas ] }; }\r\n              combinedSchema.type = combinedTypes.length > 1 ? combinedTypes : combinedTypes[0];\r\n            } else {\r\n              return { allOf: [ ...schemas ] };\r\n            }\r\n          break;\r\n          case 'uniqueItems':\r\n            // Set true if either true\r\n            combinedSchema.uniqueItems = !!combinedValue || !!schemaValue;\r\n          break;\r\n          default:\r\n            return { allOf: [ ...schemas ] };\r\n        }\r\n      }\r\n    }\r\n  }\r\n  return combinedSchema;\r\n}\r\n","import cloneDeep from 'lodash/cloneDeep';\r\nimport { JsonPointer } from './jsonpointer.functions';\r\nimport { mergeSchemas } from './merge-schemas.function';\r\nimport { forEach, hasOwn, mergeFilteredObject } from './utility.functions';\r\nimport {\r\n    getType,\r\n    hasValue,\r\n    inArray,\r\n    isArray,\r\n    isNumber,\r\n    isObject,\r\n    isString\r\n} from './validator.functions';\r\n\r\n\r\n/**\r\n * JSON Schema function library:\r\n *\r\n * buildSchemaFromLayout:   TODO: Write this function\r\n *\r\n * buildSchemaFromData:\r\n *\r\n * getFromSchema:\r\n *\r\n * removeRecursiveReferences:\r\n *\r\n * getInputType:\r\n *\r\n * checkInlineType:\r\n *\r\n * isInputRequired:\r\n *\r\n * updateInputOptions:\r\n *\r\n * getTitleMapFromOneOf:\r\n *\r\n * getControlValidators:\r\n *\r\n * resolveSchemaReferences:\r\n *\r\n * getSubSchema:\r\n *\r\n * combineAllOf:\r\n *\r\n * fixRequiredArrayProperties:\r\n */\r\n\r\n/**\r\n * 'buildSchemaFromLayout' function\r\n *\r\n * TODO: Build a JSON Schema from a JSON Form layout\r\n *\r\n * //   layout - The JSON Form layout\r\n * //  - The new JSON Schema\r\n */\r\nexport function buildSchemaFromLayout(layout) {\r\n  return;\r\n  // let newSchema: any = { };\r\n  // const walkLayout = (layoutItems: any[], callback: Function): any[] => {\r\n  //   let returnArray: any[] = [];\r\n  //   for (let layoutItem of layoutItems) {\r\n  //     const returnItem: any = callback(layoutItem);\r\n  //     if (returnItem) { returnArray = returnArray.concat(callback(layoutItem)); }\r\n  //     if (layoutItem.items) {\r\n  //       returnArray = returnArray.concat(walkLayout(layoutItem.items, callback));\r\n  //     }\r\n  //   }\r\n  //   return returnArray;\r\n  // };\r\n  // walkLayout(layout, layoutItem => {\r\n  //   let itemKey: string;\r\n  //   if (typeof layoutItem === 'string') {\r\n  //     itemKey = layoutItem;\r\n  //   } else if (layoutItem.key) {\r\n  //     itemKey = layoutItem.key;\r\n  //   }\r\n  //   if (!itemKey) { return; }\r\n  //   //\r\n  // });\r\n}\r\n\r\n/**\r\n * 'buildSchemaFromData' function\r\n *\r\n * Build a JSON Schema from a data object\r\n *\r\n * //   data - The data object\r\n * //  { boolean = false } requireAllFields - Require all fields?\r\n * //  { boolean = true } isRoot - is root\r\n * //  - The new JSON Schema\r\n */\r\nexport function buildSchemaFromData(\r\n  data, requireAllFields = false, isRoot = true\r\n) {\r\n  const newSchema: any = {};\r\n  const getFieldType = (value: any): string => {\r\n    const fieldType = getType(value, 'strict');\r\n    return { integer: 'number', null: 'string' }[fieldType] || fieldType;\r\n  };\r\n  const buildSubSchema = (value) =>\r\n    buildSchemaFromData(value, requireAllFields, false);\r\n  if (isRoot) { newSchema.$schema = 'http://json-schema.org/draft-06/schema#'; }\r\n  newSchema.type = getFieldType(data);\r\n  if (newSchema.type === 'object') {\r\n    newSchema.properties = {};\r\n    if (requireAllFields) { newSchema.required = []; }\r\n    for (const key of Object.keys(data)) {\r\n      newSchema.properties[key] = buildSubSchema(data[key]);\r\n      if (requireAllFields) { newSchema.required.push(key); }\r\n    }\r\n  } else if (newSchema.type === 'array') {\r\n    newSchema.items = data.map(buildSubSchema);\r\n    // If all items are the same type, use an object for items instead of an array\r\n    if ((new Set(data.map(getFieldType))).size === 1) {\r\n      newSchema.items = newSchema.items.reduce((a, b) => ({ ...a, ...b }), {});\r\n    }\r\n    if (requireAllFields) { newSchema.minItems = 1; }\r\n  }\r\n  return newSchema;\r\n}\r\n\r\n/**\r\n * 'getFromSchema' function\r\n *\r\n * Uses a JSON Pointer for a value within a data object to retrieve\r\n * the schema for that value within schema for the data object.\r\n *\r\n * The optional third parameter can also be set to return something else:\r\n * 'schema' (default): the schema for the value indicated by the data pointer\r\n * 'parentSchema': the schema for the value's parent object or array\r\n * 'schemaPointer': a pointer to the value's schema within the object's schema\r\n * 'parentSchemaPointer': a pointer to the schema for the value's parent object or array\r\n *\r\n * //   schema - The schema to get the sub-schema from\r\n * //  { Pointer } dataPointer - JSON Pointer (string or array)\r\n * //  { string = 'schema' } returnType - what to return?\r\n * //  - The located sub-schema\r\n */\r\nexport function getFromSchema(schema, dataPointer, returnType = 'schema') {\r\n  const dataPointerArray: any[] = JsonPointer.parse(dataPointer);\r\n  if (dataPointerArray === null) {\r\n    console.error(`getFromSchema error: Invalid JSON Pointer: ${dataPointer}`);\r\n    return null;\r\n  }\r\n  let subSchema = schema;\r\n  const schemaPointer = [];\r\n  const length = dataPointerArray.length;\r\n  if (returnType.slice(0, 6) === 'parent') { dataPointerArray.length--; }\r\n  for (let i = 0; i < length; ++i) {\r\n    const parentSchema = subSchema;\r\n    const key = dataPointerArray[i];\r\n    let subSchemaFound = false;\r\n    if (typeof subSchema !== 'object') {\r\n      console.error(`getFromSchema error: Unable to find \"${key}\" key in schema.`);\r\n      console.error(schema);\r\n      console.error(dataPointer);\r\n      return null;\r\n    }\r\n    if (subSchema.type === 'array' && (!isNaN(key) || key === '-')) {\r\n      if (hasOwn(subSchema, 'items')) {\r\n        if (isObject(subSchema.items)) {\r\n          subSchemaFound = true;\r\n          subSchema = subSchema.items;\r\n          schemaPointer.push('items');\r\n        } else if (isArray(subSchema.items)) {\r\n          if (!isNaN(key) && subSchema.items.length >= +key) {\r\n            subSchemaFound = true;\r\n            subSchema = subSchema.items[+key];\r\n            schemaPointer.push('items', key);\r\n          }\r\n        }\r\n      }\r\n      if (!subSchemaFound && isObject(subSchema.additionalItems)) {\r\n        subSchemaFound = true;\r\n        subSchema = subSchema.additionalItems;\r\n        schemaPointer.push('additionalItems');\r\n      } else if (subSchema.additionalItems !== false) {\r\n        subSchemaFound = true;\r\n        subSchema = { };\r\n        schemaPointer.push('additionalItems');\r\n      }\r\n    } else if (subSchema.type === 'object') {\r\n      if (isObject(subSchema.properties) && hasOwn(subSchema.properties, key)) {\r\n        subSchemaFound = true;\r\n        subSchema = subSchema.properties[key];\r\n        schemaPointer.push('properties', key);\r\n      } else if (isObject(subSchema.additionalProperties)) {\r\n        subSchemaFound = true;\r\n        subSchema = subSchema.additionalProperties;\r\n        schemaPointer.push('additionalProperties');\r\n      } else if (subSchema.additionalProperties !== false) {\r\n        subSchemaFound = true;\r\n        subSchema = { };\r\n        schemaPointer.push('additionalProperties');\r\n      }\r\n    }\r\n    if (!subSchemaFound) {\r\n      console.error(`getFromSchema error: Unable to find \"${key}\" item in schema.`);\r\n      console.error(schema);\r\n      console.error(dataPointer);\r\n      return;\r\n    }\r\n  }\r\n  return returnType.slice(-7) === 'Pointer' ? schemaPointer : subSchema;\r\n}\r\n\r\n/**\r\n * 'removeRecursiveReferences' function\r\n *\r\n * Checks a JSON Pointer against a map of recursive references and returns\r\n * a JSON Pointer to the shallowest equivalent location in the same object.\r\n *\r\n * Using this functions enables an object to be constructed with unlimited\r\n * recursion, while maintaing a fixed set of metadata, such as field data types.\r\n * The object can grow as large as it wants, and deeply recursed nodes can\r\n * just refer to the metadata for their shallow equivalents, instead of having\r\n * to add additional redundant metadata for each recursively added node.\r\n *\r\n * Example:\r\n *\r\n * pointer:         '/stuff/and/more/and/more/and/more/and/more/stuff'\r\n * recursiveRefMap: [['/stuff/and/more/and/more', '/stuff/and/more/']]\r\n * returned:        '/stuff/and/more/stuff'\r\n *\r\n * //  { Pointer } pointer -\r\n * //  { Map<string, string> } recursiveRefMap -\r\n * //  { Map<string, number> = new Map() } arrayMap - optional\r\n * // { string } -\r\n */\r\nexport function removeRecursiveReferences(\r\n  pointer, recursiveRefMap, arrayMap = new Map()\r\n) {\r\n  if (!pointer) { return ''; }\r\n  let genericPointer =\r\n    JsonPointer.toGenericPointer(JsonPointer.compile(pointer), arrayMap);\r\n  if (genericPointer.indexOf('/') === -1) { return genericPointer; }\r\n  let possibleReferences = true;\r\n  while (possibleReferences) {\r\n    possibleReferences = false;\r\n    recursiveRefMap.forEach((toPointer, fromPointer) => {\r\n      if (JsonPointer.isSubPointer(toPointer, fromPointer)) {\r\n        while (JsonPointer.isSubPointer(fromPointer, genericPointer, true)) {\r\n          genericPointer = JsonPointer.toGenericPointer(\r\n            toPointer + genericPointer.slice(fromPointer.length), arrayMap\r\n          );\r\n          possibleReferences = true;\r\n        }\r\n      }\r\n    });\r\n  }\r\n  return genericPointer;\r\n}\r\n\r\n/**\r\n * 'getInputType' function\r\n *\r\n * //   schema\r\n * //  { any = null } layoutNode\r\n * // { string }\r\n */\r\nexport function getInputType(schema, layoutNode: any = null) {\r\n  // x-schema-form = Angular Schema Form compatibility\r\n  // widget & component = React Jsonschema Form compatibility\r\n  const controlType = JsonPointer.getFirst([\r\n    [schema, '/x-schema-form/type'],\r\n    [schema, '/x-schema-form/widget/component'],\r\n    [schema, '/x-schema-form/widget'],\r\n    [schema, '/widget/component'],\r\n    [schema, '/widget']\r\n  ]);\r\n  if (isString(controlType)) { return checkInlineType(controlType, schema, layoutNode); }\r\n  let schemaType = schema.type;\r\n  if (schemaType) {\r\n    if (isArray(schemaType)) { // If multiple types listed, use most inclusive type\r\n      schemaType =\r\n        inArray('object', schemaType) && hasOwn(schema, 'properties') ? 'object' :\r\n        inArray('array', schemaType) && hasOwn(schema, 'items') ? 'array' :\r\n        inArray('array', schemaType) && hasOwn(schema, 'additionalItems') ? 'array' :\r\n        inArray('string', schemaType) ? 'string' :\r\n        inArray('number', schemaType) ? 'number' :\r\n        inArray('integer', schemaType) ? 'integer' :\r\n        inArray('boolean', schemaType) ? 'boolean' : 'unknown';\r\n    }\r\n    if (schemaType === 'boolean') { return 'checkbox'; }\r\n    if (schemaType === 'object') {\r\n      if (hasOwn(schema, 'properties') || hasOwn(schema, 'additionalProperties')) {\r\n        return 'section';\r\n      }\r\n      // TODO: Figure out how to handle additionalProperties\r\n      if (hasOwn(schema, '$ref')) { return '$ref'; }\r\n    }\r\n    if (schemaType === 'array') {\r\n      const itemsObject = JsonPointer.getFirst([\r\n        [schema, '/items'],\r\n        [schema, '/additionalItems']\r\n      ]) || {};\r\n      return hasOwn(itemsObject, 'enum') && schema.maxItems !== 1 ?\r\n        checkInlineType('checkboxes', schema, layoutNode) : 'array';\r\n    }\r\n    if (schemaType === 'null') { return 'none'; }\r\n    if (JsonPointer.has(layoutNode, '/options/titleMap') ||\r\n      hasOwn(schema, 'enum') || getTitleMapFromOneOf(schema, null, true)\r\n    ) { return 'select'; }\r\n    if (schemaType === 'number' || schemaType === 'integer') {\r\n      return (schemaType === 'integer' || hasOwn(schema, 'multipleOf')) &&\r\n        hasOwn(schema, 'maximum') && hasOwn(schema, 'minimum') ? 'range' : schemaType;\r\n    }\r\n    if (schemaType === 'string') {\r\n      return {\r\n        'color': 'color',\r\n        'date': 'date',\r\n        'date-time': 'datetime-local',\r\n        'email': 'email',\r\n        'uri': 'url',\r\n      }[schema.format] || 'text';\r\n    }\r\n  }\r\n  if (hasOwn(schema, '$ref')) { return '$ref'; }\r\n  if (isArray(schema.oneOf) || isArray(schema.anyOf)) { return 'one-of'; }\r\n  console.error(`getInputType error: Unable to determine input type for ${schemaType}`);\r\n  console.error('schema', schema);\r\n  if (layoutNode) { console.error('layoutNode', layoutNode); }\r\n  return 'none';\r\n}\r\n\r\n/**\r\n * 'checkInlineType' function\r\n *\r\n * Checks layout and schema nodes for 'inline: true', and converts\r\n * 'radios' or 'checkboxes' to 'radios-inline' or 'checkboxes-inline'\r\n *\r\n * //  { string } controlType -\r\n * //   schema -\r\n * //  { any = null } layoutNode -\r\n * // { string }\r\n */\r\nexport function checkInlineType(controlType, schema, layoutNode: any = null) {\r\n  if (!isString(controlType) || (\r\n    controlType.slice(0, 8) !== 'checkbox' && controlType.slice(0, 5) !== 'radio'\r\n  )) {\r\n    return controlType;\r\n  }\r\n  if (\r\n    JsonPointer.getFirst([\r\n      [layoutNode, '/inline'],\r\n      [layoutNode, '/options/inline'],\r\n      [schema, '/inline'],\r\n      [schema, '/x-schema-form/inline'],\r\n      [schema, '/x-schema-form/options/inline'],\r\n      [schema, '/x-schema-form/widget/inline'],\r\n      [schema, '/x-schema-form/widget/component/inline'],\r\n      [schema, '/x-schema-form/widget/component/options/inline'],\r\n      [schema, '/widget/inline'],\r\n      [schema, '/widget/component/inline'],\r\n      [schema, '/widget/component/options/inline'],\r\n    ]) === true\r\n  ) {\r\n    return controlType.slice(0, 5) === 'radio' ?\r\n      'radios-inline' : 'checkboxes-inline';\r\n  } else {\r\n    return controlType;\r\n  }\r\n}\r\n\r\n/**\r\n * 'isInputRequired' function\r\n *\r\n * Checks a JSON Schema to see if an item is required\r\n *\r\n * //   schema - the schema to check\r\n * //  { string } schemaPointer - the pointer to the item to check\r\n * // { boolean } - true if the item is required, false if not\r\n */\r\nexport function isInputRequired(schema, schemaPointer) {\r\n  if (!isObject(schema)) {\r\n    console.error('isInputRequired error: Input schema must be an object.');\r\n    return false;\r\n  }\r\n  const listPointerArray = JsonPointer.parse(schemaPointer);\r\n  if (isArray(listPointerArray)) {\r\n    if (!listPointerArray.length) { return schema.required === true; }\r\n    const keyName = listPointerArray.pop();\r\n    const nextToLastKey = listPointerArray[listPointerArray.length - 1];\r\n    if (['properties', 'additionalProperties', 'patternProperties', 'items', 'additionalItems']\r\n      .includes(nextToLastKey)\r\n    ) {\r\n      listPointerArray.pop();\r\n    }\r\n    const parentSchema = JsonPointer.get(schema, listPointerArray) || {};\r\n    if (isArray(parentSchema.required)) {\r\n      return parentSchema.required.includes(keyName);\r\n    }\r\n    if (parentSchema.type === 'array') {\r\n      return hasOwn(parentSchema, 'minItems') &&\r\n        isNumber(keyName) &&\r\n        +parentSchema.minItems > +keyName;\r\n    }\r\n  }\r\n  return false;\r\n}\r\n\r\n/**\r\n * 'updateInputOptions' function\r\n *\r\n * //   layoutNode\r\n * //   schema\r\n * //   jsf\r\n * // { void }\r\n */\r\nexport function updateInputOptions(layoutNode, schema, jsf) {\r\n  if (!isObject(layoutNode) || !isObject(layoutNode.options)) { return; }\r\n\r\n  // Set all option values in layoutNode.options\r\n  const newOptions: any = { };\r\n  const fixUiKeys = key => key.slice(0, 3).toLowerCase() === 'ui:' ? key.slice(3) : key;\r\n  mergeFilteredObject(newOptions, jsf.formOptions.defaultWidgetOptions, [], fixUiKeys);\r\n  [ [ JsonPointer.get(schema, '/ui:widget/options'), [] ],\r\n    [ JsonPointer.get(schema, '/ui:widget'), [] ],\r\n    [ schema, [\r\n      'additionalProperties', 'additionalItems', 'properties', 'items',\r\n      'required', 'type', 'x-schema-form', '$ref'\r\n    ] ],\r\n    [ JsonPointer.get(schema, '/x-schema-form/options'), [] ],\r\n    [ JsonPointer.get(schema, '/x-schema-form'), ['items', 'options'] ],\r\n    [ layoutNode, [\r\n      '_id', '$ref', 'arrayItem', 'arrayItemType', 'dataPointer', 'dataType',\r\n      'items', 'key', 'name', 'options', 'recursiveReference', 'type', 'widget'\r\n    ] ],\r\n    [ layoutNode.options, [] ],\r\n  ].forEach(([ object, excludeKeys ]) =>\r\n    mergeFilteredObject(newOptions, object, excludeKeys, fixUiKeys)\r\n  );\r\n  if (!hasOwn(newOptions, 'titleMap')) {\r\n    let newTitleMap: any = null;\r\n    newTitleMap = getTitleMapFromOneOf(schema, newOptions.flatList);\r\n    if (newTitleMap) { newOptions.titleMap = newTitleMap; }\r\n    if (!hasOwn(newOptions, 'titleMap') && !hasOwn(newOptions, 'enum') && hasOwn(schema, 'items')) {\r\n      if (JsonPointer.has(schema, '/items/titleMap')) {\r\n        newOptions.titleMap = schema.items.titleMap;\r\n      } else if (JsonPointer.has(schema, '/items/enum')) {\r\n        newOptions.enum = schema.items.enum;\r\n        if (!hasOwn(newOptions, 'enumNames') && JsonPointer.has(schema, '/items/enumNames')) {\r\n          newOptions.enumNames = schema.items.enumNames;\r\n        }\r\n      } else if (JsonPointer.has(schema, '/items/oneOf')) {\r\n        newTitleMap = getTitleMapFromOneOf(schema.items, newOptions.flatList);\r\n        if (newTitleMap) { newOptions.titleMap = newTitleMap; }\r\n      }\r\n    }\r\n  }\r\n\r\n  // If schema type is integer, enforce by setting multipleOf = 1\r\n  if (schema.type === 'integer' && !hasValue(newOptions.multipleOf)) {\r\n    newOptions.multipleOf = 1;\r\n  }\r\n\r\n  // Copy any typeahead word lists to options.typeahead.source\r\n  if (JsonPointer.has(newOptions, '/autocomplete/source')) {\r\n    newOptions.typeahead = newOptions.autocomplete;\r\n  } else if (JsonPointer.has(newOptions, '/tagsinput/source')) {\r\n    newOptions.typeahead = newOptions.tagsinput;\r\n  } else if (JsonPointer.has(newOptions, '/tagsinput/typeahead/source')) {\r\n    newOptions.typeahead = newOptions.tagsinput.typeahead;\r\n  }\r\n\r\n  layoutNode.options = newOptions;\r\n}\r\n\r\n/**\r\n * 'getTitleMapFromOneOf' function\r\n *\r\n * //  { schema } schema\r\n * //  { boolean = null } flatList\r\n * //  { boolean = false } validateOnly\r\n * // { validators }\r\n */\r\nexport function getTitleMapFromOneOf(\r\n  schema: any = {}, flatList: boolean = null, validateOnly = false\r\n) {\r\n  let titleMap = null;\r\n  const oneOf = schema.oneOf || schema.anyOf || null;\r\n  if (isArray(oneOf) && oneOf.every(item => item.title)) {\r\n    if (oneOf.every(item => isArray(item.enum) && item.enum.length === 1)) {\r\n      if (validateOnly) { return true; }\r\n      titleMap = oneOf.map(item => ({ name: item.title, value: item.enum[0] }));\r\n    } else if (oneOf.every(item => item.const)) {\r\n      if (validateOnly) { return true; }\r\n      titleMap = oneOf.map(item => ({ name: item.title, value: item.const }));\r\n    }\r\n\r\n    // if flatList !== false and some items have colons, make grouped map\r\n    if (flatList !== false && (titleMap || [])\r\n      .filter(title => ((title || {}).name || '').indexOf(': ')).length > 1\r\n    ) {\r\n\r\n      // Split name on first colon to create grouped map (name -> group: name)\r\n      const newTitleMap = titleMap.map(title => {\r\n        const [group, name] = title.name.split(/: (.+)/);\r\n        return group && name ? { ...title, group, name } : title;\r\n      });\r\n\r\n      // If flatList === true or at least one group has multiple items, use grouped map\r\n      if (flatList === true || newTitleMap.some((title, index) => index &&\r\n        hasOwn(title, 'group') && title.group === newTitleMap[index - 1].group\r\n      )) {\r\n        titleMap = newTitleMap;\r\n      }\r\n    }\r\n  }\r\n  return validateOnly ? false : titleMap;\r\n}\r\n\r\n/**\r\n * 'getControlValidators' function\r\n *\r\n * //  schema\r\n * // { validators }\r\n */\r\nexport function getControlValidators(schema) {\r\n  if (!isObject(schema)) { return null; }\r\n  const validators: any = { };\r\n  if (hasOwn(schema, 'type')) {\r\n    switch (schema.type) {\r\n      case 'string':\r\n        forEach(['pattern', 'format', 'minLength', 'maxLength'], (prop) => {\r\n          if (hasOwn(schema, prop)) { validators[prop] = [schema[prop]]; }\r\n        });\r\n      break;\r\n      case 'number': case 'integer':\r\n        forEach(['Minimum', 'Maximum'], (ucLimit) => {\r\n          const eLimit = 'exclusive' + ucLimit;\r\n          const limit = ucLimit.toLowerCase();\r\n          if (hasOwn(schema, limit)) {\r\n            const exclusive = hasOwn(schema, eLimit) && schema[eLimit] === true;\r\n            validators[limit] = [schema[limit], exclusive];\r\n          }\r\n        });\r\n        forEach(['multipleOf', 'type'], (prop) => {\r\n          if (hasOwn(schema, prop)) { validators[prop] = [schema[prop]]; }\r\n        });\r\n      break;\r\n      case 'object':\r\n        forEach(['minProperties', 'maxProperties', 'dependencies'], (prop) => {\r\n          if (hasOwn(schema, prop)) { validators[prop] = [schema[prop]]; }\r\n        });\r\n      break;\r\n      case 'array':\r\n        forEach(['minItems', 'maxItems', 'uniqueItems'], (prop) => {\r\n          if (hasOwn(schema, prop)) { validators[prop] = [schema[prop]]; }\r\n        });\r\n      break;\r\n    }\r\n  }\r\n  if (hasOwn(schema, 'enum')) { validators.enum = [schema.enum]; }\r\n  return validators;\r\n}\r\n\r\n/**\r\n * 'resolveSchemaReferences' function\r\n *\r\n * Find all $ref links in schema and save links and referenced schemas in\r\n * schemaRefLibrary, schemaRecursiveRefMap, and dataRecursiveRefMap\r\n *\r\n * //  schema\r\n * //  schemaRefLibrary\r\n * // { Map<string, string> } schemaRecursiveRefMap\r\n * // { Map<string, string> } dataRecursiveRefMap\r\n * // { Map<string, number> } arrayMap\r\n * //\r\n */\r\nexport function resolveSchemaReferences(\r\n  schema, schemaRefLibrary, schemaRecursiveRefMap, dataRecursiveRefMap, arrayMap\r\n) {\r\n  if (!isObject(schema)) {\r\n    console.error('resolveSchemaReferences error: schema must be an object.');\r\n    return;\r\n  }\r\n  const refLinks = new Set<string>();\r\n  const refMapSet = new Set<string>();\r\n  const refMap = new Map<string, string>();\r\n  const recursiveRefMap = new Map<string, string>();\r\n  const refLibrary: any = {};\r\n\r\n  // Search schema for all $ref links, and build full refLibrary\r\n  JsonPointer.forEachDeep(schema, (subSchema, subSchemaPointer) => {\r\n    if (hasOwn(subSchema, '$ref') && isString(subSchema['$ref'])) {\r\n      const refPointer = JsonPointer.compile(subSchema['$ref']);\r\n      refLinks.add(refPointer);\r\n      refMapSet.add(subSchemaPointer + '~~' + refPointer);\r\n      refMap.set(subSchemaPointer, refPointer);\r\n    }\r\n  });\r\n  refLinks.forEach(ref => refLibrary[ref] = getSubSchema(schema, ref));\r\n\r\n  // Follow all ref links and save in refMapSet,\r\n  // to find any multi-link recursive refernces\r\n  let checkRefLinks = true;\r\n  while (checkRefLinks) {\r\n    checkRefLinks = false;\r\n    Array.from(refMap).forEach(([fromRef1, toRef1]) => Array.from(refMap)\r\n      .filter(([fromRef2, toRef2]) =>\r\n        JsonPointer.isSubPointer(toRef1, fromRef2, true) &&\r\n        !JsonPointer.isSubPointer(toRef2, toRef1, true) &&\r\n        !refMapSet.has(fromRef1 + fromRef2.slice(toRef1.length) + '~~' + toRef2)\r\n      )\r\n      .forEach(([fromRef2, toRef2]) => {\r\n        refMapSet.add(fromRef1 + fromRef2.slice(toRef1.length) + '~~' + toRef2);\r\n        checkRefLinks = true;\r\n      })\r\n    );\r\n  }\r\n\r\n  // Build full recursiveRefMap\r\n  // First pass - save all internally recursive refs from refMapSet\r\n  Array.from(refMapSet)\r\n    .map(refLink => refLink.split('~~'))\r\n    .filter(([fromRef, toRef]) => JsonPointer.isSubPointer(toRef, fromRef))\r\n    .forEach(([fromRef, toRef]) => recursiveRefMap.set(fromRef, toRef));\r\n  // Second pass - create recursive versions of any other refs that link to recursive refs\r\n  Array.from(refMap)\r\n    .filter(([fromRef1, toRef1]) => Array.from(recursiveRefMap.keys())\r\n      .every(fromRef2 => !JsonPointer.isSubPointer(fromRef1, fromRef2, true))\r\n    )\r\n    .forEach(([fromRef1, toRef1]) => Array.from(recursiveRefMap)\r\n      .filter(([fromRef2, toRef2]) =>\r\n        !recursiveRefMap.has(fromRef1 + fromRef2.slice(toRef1.length)) &&\r\n        JsonPointer.isSubPointer(toRef1, fromRef2, true) &&\r\n        !JsonPointer.isSubPointer(toRef1, fromRef1, true)\r\n      )\r\n      .forEach(([fromRef2, toRef2]) => recursiveRefMap.set(\r\n        fromRef1 + fromRef2.slice(toRef1.length),\r\n        fromRef1 + toRef2.slice(toRef1.length)\r\n      ))\r\n    );\r\n\r\n  // Create compiled schema by replacing all non-recursive $ref links with\r\n  // thieir linked schemas and, where possible, combining schemas in allOf arrays.\r\n  let compiledSchema = { ...schema };\r\n  delete compiledSchema.definitions;\r\n  compiledSchema =\r\n    getSubSchema(compiledSchema, '', refLibrary, recursiveRefMap);\r\n\r\n  // Make sure all remaining schema $refs are recursive, and build final\r\n  // schemaRefLibrary, schemaRecursiveRefMap, dataRecursiveRefMap, & arrayMap\r\n  JsonPointer.forEachDeep(compiledSchema, (subSchema, subSchemaPointer) => {\r\n    if (isString(subSchema['$ref'])) {\r\n      let refPointer = JsonPointer.compile(subSchema['$ref']);\r\n      if (!JsonPointer.isSubPointer(refPointer, subSchemaPointer, true)) {\r\n        refPointer = removeRecursiveReferences(subSchemaPointer, recursiveRefMap);\r\n        JsonPointer.set(compiledSchema, subSchemaPointer, { $ref: `#${refPointer}` });\r\n      }\r\n      if (!hasOwn(schemaRefLibrary, 'refPointer')) {\r\n        schemaRefLibrary[refPointer] = !refPointer.length ? compiledSchema :\r\n          getSubSchema(compiledSchema, refPointer, schemaRefLibrary, recursiveRefMap);\r\n      }\r\n      if (!schemaRecursiveRefMap.has(subSchemaPointer)) {\r\n        schemaRecursiveRefMap.set(subSchemaPointer, refPointer);\r\n      }\r\n      const fromDataRef = JsonPointer.toDataPointer(subSchemaPointer, compiledSchema);\r\n      if (!dataRecursiveRefMap.has(fromDataRef)) {\r\n        const toDataRef = JsonPointer.toDataPointer(refPointer, compiledSchema);\r\n        dataRecursiveRefMap.set(fromDataRef, toDataRef);\r\n      }\r\n    }\r\n    if (subSchema.type === 'array' &&\r\n      (hasOwn(subSchema, 'items') || hasOwn(subSchema, 'additionalItems'))\r\n    ) {\r\n      const dataPointer = JsonPointer.toDataPointer(subSchemaPointer, compiledSchema);\r\n      if (!arrayMap.has(dataPointer)) {\r\n        const tupleItems = isArray(subSchema.items) ? subSchema.items.length : 0;\r\n        arrayMap.set(dataPointer, tupleItems);\r\n      }\r\n    }\r\n  }, true);\r\n  return compiledSchema;\r\n}\r\n\r\n/**\r\n * 'getSubSchema' function\r\n *\r\n * //   schema\r\n * //  { Pointer } pointer\r\n * //  { object } schemaRefLibrary\r\n * //  { Map<string, string> } schemaRecursiveRefMap\r\n * //  { string[] = [] } usedPointers\r\n * //\r\n */\r\nexport function getSubSchema(\r\n  schema, pointer, schemaRefLibrary = null,\r\n  schemaRecursiveRefMap: Map<string, string> = null, usedPointers: string[] = []\r\n) {\r\n  if (!schemaRefLibrary || !schemaRecursiveRefMap) {\r\n    return JsonPointer.getCopy(schema, pointer);\r\n  }\r\n  if (typeof pointer !== 'string') { pointer = JsonPointer.compile(pointer); }\r\n  usedPointers = [ ...usedPointers, pointer ];\r\n  let newSchema: any = null;\r\n  if (pointer === '') {\r\n    newSchema = cloneDeep(schema);\r\n  } else {\r\n    const shortPointer = removeRecursiveReferences(pointer, schemaRecursiveRefMap);\r\n    if (shortPointer !== pointer) { usedPointers = [ ...usedPointers, shortPointer ]; }\r\n    newSchema = JsonPointer.getFirstCopy([\r\n      [schemaRefLibrary, [shortPointer]],\r\n      [schema, pointer],\r\n      [schema, shortPointer]\r\n    ]);\r\n  }\r\n  return JsonPointer.forEachDeepCopy(newSchema, (subSchema, subPointer) => {\r\n    if (isObject(subSchema)) {\r\n\r\n      // Replace non-recursive $ref links with referenced schemas\r\n      if (isString(subSchema.$ref)) {\r\n        const refPointer = JsonPointer.compile(subSchema.$ref);\r\n        if (refPointer.length && usedPointers.every(ptr =>\r\n          !JsonPointer.isSubPointer(refPointer, ptr, true)\r\n        )) {\r\n          const refSchema = getSubSchema(\r\n            schema, refPointer, schemaRefLibrary, schemaRecursiveRefMap, usedPointers\r\n          );\r\n          if (Object.keys(subSchema).length === 1) {\r\n            return refSchema;\r\n          } else {\r\n            const extraKeys = { ...subSchema };\r\n            delete extraKeys.$ref;\r\n            return mergeSchemas(refSchema, extraKeys);\r\n          }\r\n        }\r\n      }\r\n\r\n      // TODO: Convert schemas with 'type' arrays to 'oneOf'\r\n\r\n      // Combine allOf subSchemas\r\n      if (isArray(subSchema.allOf)) { return combineAllOf(subSchema); }\r\n\r\n      // Fix incorrectly placed array object required lists\r\n      if (subSchema.type === 'array' && isArray(subSchema.required)) {\r\n        return fixRequiredArrayProperties(subSchema);\r\n      }\r\n    }\r\n    return subSchema;\r\n  }, true, <string>pointer);\r\n}\r\n\r\n/**\r\n * 'combineAllOf' function\r\n *\r\n * Attempt to convert an allOf schema object into\r\n * a non-allOf schema object with equivalent rules.\r\n *\r\n * //   schema - allOf schema object\r\n * //  - converted schema object\r\n */\r\nexport function combineAllOf(schema) {\r\n  if (!isObject(schema) || !isArray(schema.allOf)) { return schema; }\r\n  let mergedSchema = mergeSchemas(...schema.allOf);\r\n  if (Object.keys(schema).length > 1) {\r\n    const extraKeys = { ...schema };\r\n    delete extraKeys.allOf;\r\n    mergedSchema = mergeSchemas(mergedSchema, extraKeys);\r\n  }\r\n  return mergedSchema;\r\n}\r\n\r\n/**\r\n * 'fixRequiredArrayProperties' function\r\n *\r\n * Fixes an incorrectly placed required list inside an array schema, by moving\r\n * it into items.properties or additionalItems.properties, where it belongs.\r\n *\r\n * //   schema - allOf schema object\r\n * //  - converted schema object\r\n */\r\nexport function fixRequiredArrayProperties(schema) {\r\n  if (schema.type === 'array' && isArray(schema.required)) {\r\n    const itemsObject = hasOwn(schema.items, 'properties') ? 'items' :\r\n      hasOwn(schema.additionalItems, 'properties') ? 'additionalItems' : null;\r\n    if (itemsObject && !hasOwn(schema[itemsObject], 'required') && (\r\n      hasOwn(schema[itemsObject], 'additionalProperties') ||\r\n      schema.required.every(key => hasOwn(schema[itemsObject].properties, key))\r\n    )) {\r\n      schema = cloneDeep(schema);\r\n      schema[itemsObject].required = schema.required;\r\n      delete schema.required;\r\n    }\r\n  }\r\n  return schema;\r\n}\r\n","import cloneDeep from 'lodash/cloneDeep';\r\n\r\n/**\r\n * 'convertSchemaToDraft6' function\r\n *\r\n * Converts a JSON Schema from draft 1 through 4 format to draft 6 format\r\n *\r\n * Inspired by on geraintluff's JSON Schema 3 to 4 compatibility function:\r\n *   https://github.com/geraintluff/json-schema-compatibility\r\n * Also uses suggestions from AJV's JSON Schema 4 to 6 migration guide:\r\n *   https://github.com/epoberezkin/ajv/releases/tag/5.0.0\r\n * And additional details from the official JSON Schema documentation:\r\n *   http://json-schema.org\r\n *\r\n * //  { object } originalSchema - JSON schema (draft 1, 2, 3, 4, or 6)\r\n * //  { OptionObject = {} } options - options: parent schema changed?, schema draft number?\r\n * // { object } - JSON schema (draft 6)\r\n */\r\nexport interface OptionObject { changed?: boolean; draft?: number; }\r\nexport function convertSchemaToDraft6(schema, options: OptionObject = {}) {\r\n  let draft: number = options.draft || null;\r\n  let changed: boolean = options.changed || false;\r\n\r\n  if (typeof schema !== 'object') { return schema; }\r\n  if (typeof schema.map === 'function') {\r\n    return [...schema.map(subSchema => convertSchemaToDraft6(subSchema, { changed, draft }))];\r\n  }\r\n  let newSchema = { ...schema };\r\n  const simpleTypes = ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'];\r\n\r\n  if (typeof newSchema.$schema === 'string' &&\r\n    /http\\:\\/\\/json\\-schema\\.org\\/draft\\-0\\d\\/schema\\#/.test(newSchema.$schema)\r\n  ) {\r\n    draft = newSchema.$schema[30];\r\n  }\r\n\r\n  // Convert v1-v2 'contentEncoding' to 'media.binaryEncoding'\r\n  // Note: This is only used in JSON hyper-schema (not regular JSON schema)\r\n  if (newSchema.contentEncoding) {\r\n    newSchema.media = { binaryEncoding: newSchema.contentEncoding };\r\n    delete newSchema.contentEncoding;\r\n    changed = true;\r\n  }\r\n\r\n  // Convert v1-v3 'extends' to 'allOf'\r\n  if (typeof newSchema.extends === 'object') {\r\n    newSchema.allOf = typeof newSchema.extends.map === 'function' ?\r\n      newSchema.extends.map(subSchema => convertSchemaToDraft6(subSchema, { changed, draft })) :\r\n      [convertSchemaToDraft6(newSchema.extends, { changed, draft })];\r\n    delete newSchema.extends;\r\n    changed = true;\r\n  }\r\n\r\n  // Convert v1-v3 'disallow' to 'not'\r\n  if (newSchema.disallow) {\r\n    if (typeof newSchema.disallow === 'string') {\r\n      newSchema.not = { type: newSchema.disallow };\r\n    } else if (typeof newSchema.disallow.map === 'function') {\r\n      newSchema.not = {\r\n        anyOf: newSchema.disallow\r\n          .map(type => typeof type === 'object' ? type : { type })\r\n      };\r\n    }\r\n    delete newSchema.disallow;\r\n    changed = true;\r\n  }\r\n\r\n  // Convert v3 string 'dependencies' properties to arrays\r\n  if (typeof newSchema.dependencies === 'object' &&\r\n    Object.keys(newSchema.dependencies)\r\n      .some(key => typeof newSchema.dependencies[key] === 'string')\r\n  ) {\r\n    newSchema.dependencies = { ...newSchema.dependencies };\r\n    Object.keys(newSchema.dependencies)\r\n      .filter(key => typeof newSchema.dependencies[key] === 'string')\r\n      .forEach(key => newSchema.dependencies[key] = [newSchema.dependencies[key]]);\r\n    changed = true;\r\n  }\r\n\r\n  // Convert v1 'maxDecimal' to 'multipleOf'\r\n  if (typeof newSchema.maxDecimal === 'number') {\r\n    newSchema.multipleOf = 1 / Math.pow(10, newSchema.maxDecimal);\r\n    delete newSchema.divisibleBy;\r\n    changed = true;\r\n    if (!draft || draft === 2) { draft = 1; }\r\n  }\r\n\r\n  // Convert v2-v3 'divisibleBy' to 'multipleOf'\r\n  if (typeof newSchema.divisibleBy === 'number') {\r\n    newSchema.multipleOf = newSchema.divisibleBy;\r\n    delete newSchema.divisibleBy;\r\n    changed = true;\r\n  }\r\n\r\n  // Convert v1-v2 boolean 'minimumCanEqual' to 'exclusiveMinimum'\r\n  if (typeof newSchema.minimum === 'number' && newSchema.minimumCanEqual === false) {\r\n    newSchema.exclusiveMinimum = newSchema.minimum;\r\n    delete newSchema.minimum;\r\n    changed = true;\r\n    if (!draft) { draft = 2; }\r\n  } else if (typeof newSchema.minimumCanEqual === 'boolean') {\r\n    delete newSchema.minimumCanEqual;\r\n    changed = true;\r\n    if (!draft) { draft = 2; }\r\n  }\r\n\r\n  // Convert v3-v4 boolean 'exclusiveMinimum' to numeric\r\n  if (typeof newSchema.minimum === 'number' && newSchema.exclusiveMinimum === true) {\r\n    newSchema.exclusiveMinimum = newSchema.minimum;\r\n    delete newSchema.minimum;\r\n    changed = true;\r\n  } else if (typeof newSchema.exclusiveMinimum === 'boolean') {\r\n    delete newSchema.exclusiveMinimum;\r\n    changed = true;\r\n  }\r\n\r\n  // Convert v1-v2 boolean 'maximumCanEqual' to 'exclusiveMaximum'\r\n  if (typeof newSchema.maximum === 'number' && newSchema.maximumCanEqual === false) {\r\n    newSchema.exclusiveMaximum = newSchema.maximum;\r\n    delete newSchema.maximum;\r\n    changed = true;\r\n    if (!draft) { draft = 2; }\r\n  } else if (typeof newSchema.maximumCanEqual === 'boolean') {\r\n    delete newSchema.maximumCanEqual;\r\n    changed = true;\r\n    if (!draft) { draft = 2; }\r\n  }\r\n\r\n  // Convert v3-v4 boolean 'exclusiveMaximum' to numeric\r\n  if (typeof newSchema.maximum === 'number' && newSchema.exclusiveMaximum === true) {\r\n    newSchema.exclusiveMaximum = newSchema.maximum;\r\n    delete newSchema.maximum;\r\n    changed = true;\r\n  } else if (typeof newSchema.exclusiveMaximum === 'boolean') {\r\n    delete newSchema.exclusiveMaximum;\r\n    changed = true;\r\n  }\r\n\r\n  // Search object 'properties' for 'optional', 'required', and 'requires' items,\r\n  // and convert them into object 'required' arrays and 'dependencies' objects\r\n  if (typeof newSchema.properties === 'object') {\r\n    const properties = { ...newSchema.properties };\r\n    const requiredKeys = Array.isArray(newSchema.required) ?\r\n      new Set(newSchema.required) : new Set();\r\n\r\n    // Convert v1-v2 boolean 'optional' properties to 'required' array\r\n    if (draft === 1 || draft === 2 ||\r\n      Object.keys(properties).some(key => properties[key].optional === true)\r\n    ) {\r\n      Object.keys(properties)\r\n        .filter(key => properties[key].optional !== true)\r\n        .forEach(key => requiredKeys.add(key));\r\n      changed = true;\r\n      if (!draft) { draft = 2; }\r\n    }\r\n\r\n    // Convert v3 boolean 'required' properties to 'required' array\r\n    if (Object.keys(properties).some(key => properties[key].required === true)) {\r\n      Object.keys(properties)\r\n        .filter(key => properties[key].required === true)\r\n        .forEach(key => requiredKeys.add(key));\r\n      changed = true;\r\n    }\r\n\r\n    if (requiredKeys.size) { newSchema.required = Array.from(requiredKeys); }\r\n\r\n    // Convert v1-v2 array or string 'requires' properties to 'dependencies' object\r\n    if (Object.keys(properties).some(key => properties[key].requires)) {\r\n      const dependencies = typeof newSchema.dependencies === 'object' ?\r\n        { ...newSchema.dependencies } : {};\r\n      Object.keys(properties)\r\n        .filter(key => properties[key].requires)\r\n        .forEach(key => dependencies[key] =\r\n          typeof properties[key].requires === 'string' ?\r\n            [properties[key].requires] : properties[key].requires\r\n        );\r\n      newSchema.dependencies = dependencies;\r\n      changed = true;\r\n      if (!draft) { draft = 2; }\r\n    }\r\n\r\n    newSchema.properties = properties;\r\n  }\r\n\r\n  // Revove v1-v2 boolean 'optional' key\r\n  if (typeof newSchema.optional === 'boolean') {\r\n    delete newSchema.optional;\r\n    changed = true;\r\n    if (!draft) { draft = 2; }\r\n  }\r\n\r\n  // Revove v1-v2 'requires' key\r\n  if (newSchema.requires) {\r\n    delete newSchema.requires;\r\n  }\r\n\r\n  // Revove v3 boolean 'required' key\r\n  if (typeof newSchema.required === 'boolean') {\r\n    delete newSchema.required;\r\n  }\r\n\r\n  // Convert id to $id\r\n  if (typeof newSchema.id === 'string' && !newSchema.$id) {\r\n    if (newSchema.id.slice(-1) === '#') {\r\n      newSchema.id = newSchema.id.slice(0, -1);\r\n    }\r\n    newSchema.$id = newSchema.id + '-CONVERTED-TO-DRAFT-06#';\r\n    delete newSchema.id;\r\n    changed = true;\r\n  }\r\n\r\n  // Check if v1-v3 'any' or object types will be converted\r\n  if (newSchema.type && (typeof newSchema.type.every === 'function' ?\r\n    !newSchema.type.every(type => simpleTypes.includes(type)) :\r\n    !simpleTypes.includes(newSchema.type)\r\n  )) {\r\n    changed = true;\r\n  }\r\n\r\n  // If schema changed, update or remove $schema identifier\r\n  if (typeof newSchema.$schema === 'string' &&\r\n    /http\\:\\/\\/json\\-schema\\.org\\/draft\\-0[1-4]\\/schema\\#/.test(newSchema.$schema)\r\n  ) {\r\n    newSchema.$schema = 'http://json-schema.org/draft-06/schema#';\r\n    changed = true;\r\n  } else if (changed && typeof newSchema.$schema === 'string') {\r\n    const addToDescription = 'Converted to draft 6 from ' + newSchema.$schema;\r\n    if (typeof newSchema.description === 'string' && newSchema.description.length) {\r\n      newSchema.description += '\\n' + addToDescription;\r\n    } else {\r\n      newSchema.description = addToDescription;\r\n    }\r\n    delete newSchema.$schema;\r\n  }\r\n\r\n  // Convert v1-v3 'any' and object types\r\n  if (newSchema.type && (typeof newSchema.type.every === 'function' ?\r\n    !newSchema.type.every(type => simpleTypes.includes(type)) :\r\n    !simpleTypes.includes(newSchema.type)\r\n  )) {\r\n    if (newSchema.type.length === 1) { newSchema.type = newSchema.type[0]; }\r\n    if (typeof newSchema.type === 'string') {\r\n      // Convert string 'any' type to array of all standard types\r\n      if (newSchema.type === 'any') {\r\n        newSchema.type = simpleTypes;\r\n        // Delete non-standard string type\r\n      } else {\r\n        delete newSchema.type;\r\n      }\r\n    } else if (typeof newSchema.type === 'object') {\r\n      if (typeof newSchema.type.every === 'function') {\r\n        // If array of strings, only allow standard types\r\n        if (newSchema.type.every(type => typeof type === 'string')) {\r\n          newSchema.type = newSchema.type.some(type => type === 'any') ?\r\n            newSchema.type = simpleTypes :\r\n            newSchema.type.filter(type => simpleTypes.includes(type));\r\n          // If type is an array with objects, convert the current schema to an 'anyOf' array\r\n        } else if (newSchema.type.length > 1) {\r\n          const arrayKeys = ['additionalItems', 'items', 'maxItems', 'minItems', 'uniqueItems', 'contains'];\r\n          const numberKeys = ['multipleOf', 'maximum', 'exclusiveMaximum', 'minimum', 'exclusiveMinimum'];\r\n          const objectKeys = ['maxProperties', 'minProperties', 'required', 'additionalProperties',\r\n            'properties', 'patternProperties', 'dependencies', 'propertyNames'];\r\n          const stringKeys = ['maxLength', 'minLength', 'pattern', 'format'];\r\n          const filterKeys = {\r\n            'array': [...numberKeys, ...objectKeys, ...stringKeys],\r\n            'integer': [...arrayKeys, ...objectKeys, ...stringKeys],\r\n            'number': [...arrayKeys, ...objectKeys, ...stringKeys],\r\n            'object': [...arrayKeys, ...numberKeys, ...stringKeys],\r\n            'string': [...arrayKeys, ...numberKeys, ...objectKeys],\r\n            'all': [...arrayKeys, ...numberKeys, ...objectKeys, ...stringKeys],\r\n          };\r\n          const anyOf = [];\r\n          for (const type of newSchema.type) {\r\n            const newType = typeof type === 'string' ? { type } : { ...type };\r\n            Object.keys(newSchema)\r\n              .filter(key => !newType.hasOwnProperty(key) &&\r\n                ![...(filterKeys[newType.type] || filterKeys.all), 'type', 'default']\r\n                  .includes(key)\r\n              )\r\n              .forEach(key => newType[key] = newSchema[key]);\r\n            anyOf.push(newType);\r\n          }\r\n          newSchema = newSchema.hasOwnProperty('default') ?\r\n            { anyOf, default: newSchema.default } : { anyOf };\r\n          // If type is an object, merge it with the current schema\r\n        } else {\r\n          const typeSchema = newSchema.type;\r\n          delete newSchema.type;\r\n          Object.assign(newSchema, typeSchema);\r\n        }\r\n      }\r\n    } else {\r\n      delete newSchema.type;\r\n    }\r\n  }\r\n\r\n  // Convert sub schemas\r\n  Object.keys(newSchema)\r\n    .filter(key => typeof newSchema[key] === 'object')\r\n    .forEach(key => {\r\n      if (\r\n        ['definitions', 'dependencies', 'properties', 'patternProperties']\r\n          .includes(key) && typeof newSchema[key].map !== 'function'\r\n      ) {\r\n        const newKey = {};\r\n        Object.keys(newSchema[key]).forEach(subKey => newKey[subKey] =\r\n          convertSchemaToDraft6(newSchema[key][subKey], { changed, draft })\r\n        );\r\n        newSchema[key] = newKey;\r\n      } else if (\r\n        ['items', 'additionalItems', 'additionalProperties',\r\n          'allOf', 'anyOf', 'oneOf', 'not'].includes(key)\r\n      ) {\r\n        newSchema[key] = convertSchemaToDraft6(newSchema[key], { changed, draft });\r\n      } else {\r\n        newSchema[key] = cloneDeep(newSchema[key]);\r\n      }\r\n    });\r\n\r\n  return newSchema;\r\n}\r\n","import cloneDeep from 'lodash/cloneDeep';\r\nimport filter from 'lodash/filter';\r\nimport map from 'lodash/map';\r\nimport {\r\n  AbstractControl,\r\n  UntypedFormArray,\r\n  UntypedFormControl,\r\n  UntypedFormGroup,\r\n  ValidatorFn\r\n} from '@angular/forms';\r\nimport { forEach, hasOwn } from './utility.functions';\r\nimport { getControlValidators, removeRecursiveReferences } from './json-schema.functions';\r\nimport {\r\n  hasValue,\r\n  inArray,\r\n  isArray,\r\n  isDate,\r\n  isDefined,\r\n  isEmpty,\r\n  isObject,\r\n  isPrimitive,\r\n  SchemaPrimitiveType,\r\n  toJavaScriptType,\r\n  toSchemaType\r\n} from './validator.functions';\r\nimport { JsonPointer, Pointer } from './jsonpointer.functions';\r\nimport { JsonValidators } from './json.validators';\r\n\r\n\r\n\r\n/**\r\n * FormGroup function library:\r\n *\r\n * buildFormGroupTemplate:  Builds a FormGroupTemplate from schema\r\n *\r\n * buildFormGroup:          Builds an Angular FormGroup from a FormGroupTemplate\r\n *\r\n * mergeValues:\r\n *\r\n * setRequiredFields:\r\n *\r\n * formatFormData:\r\n *\r\n * getControl:\r\n *\r\n * ---- TODO: ----\r\n * TODO: add buildFormGroupTemplateFromLayout function\r\n * buildFormGroupTemplateFromLayout: Builds a FormGroupTemplate from a form layout\r\n */\r\n\r\n/**\r\n * 'buildFormGroupTemplate' function\r\n *\r\n * Builds a template for an Angular FormGroup from a JSON Schema.\r\n *\r\n * TODO: add support for pattern properties\r\n * https://spacetelescope.github.io/understanding-json-schema/reference/object.html\r\n *\r\n * //  {any} jsf -\r\n * //  {any = null} nodeValue -\r\n * //  {boolean = true} mapArrays -\r\n * //  {string = ''} schemaPointer -\r\n * //  {string = ''} dataPointer -\r\n * //  {any = ''} templatePointer -\r\n * // {any} -\r\n */\r\nexport function buildFormGroupTemplate(\r\n  jsf: any, nodeValue: any = null, setValues = true,\r\n  schemaPointer = '', dataPointer = '', templatePointer = ''\r\n) {\r\n  const schema = JsonPointer.get(jsf.schema, schemaPointer);\r\n  if (setValues) {\r\n    if (!isDefined(nodeValue) && (\r\n      jsf.formOptions.setSchemaDefaults === true ||\r\n      (jsf.formOptions.setSchemaDefaults === 'auto' && isEmpty(jsf.formValues))\r\n    )) {\r\n      nodeValue = JsonPointer.get(jsf.schema, schemaPointer + '/default');\r\n    }\r\n  } else {\r\n    nodeValue = null;\r\n  }\r\n  // TODO: If nodeValue still not set, check layout for default value\r\n  const schemaType: string | string[] = JsonPointer.get(schema, '/type');\r\n  const controlType =\r\n    (hasOwn(schema, 'properties') || hasOwn(schema, 'additionalProperties')) &&\r\n      schemaType === 'object' ? 'FormGroup' :\r\n      (hasOwn(schema, 'items') || hasOwn(schema, 'additionalItems')) &&\r\n        schemaType === 'array' ? 'FormArray' :\r\n        !schemaType && hasOwn(schema, '$ref') ? '$ref' : 'FormControl';\r\n  const shortDataPointer =\r\n    removeRecursiveReferences(dataPointer, jsf.dataRecursiveRefMap, jsf.arrayMap);\r\n  if (!jsf.dataMap.has(shortDataPointer)) {\r\n    jsf.dataMap.set(shortDataPointer, new Map());\r\n  }\r\n  const nodeOptions = jsf.dataMap.get(shortDataPointer);\r\n  if (!nodeOptions.has('schemaType')) {\r\n    nodeOptions.set('schemaPointer', schemaPointer);\r\n    nodeOptions.set('schemaType', schema.type);\r\n    if (schema.format) {\r\n      nodeOptions.set('schemaFormat', schema.format);\r\n      if (!schema.type) { nodeOptions.set('schemaType', 'string'); }\r\n    }\r\n    if (controlType) {\r\n      nodeOptions.set('templatePointer', templatePointer);\r\n      nodeOptions.set('templateType', controlType);\r\n    }\r\n  }\r\n  let controls: any;\r\n  const validators = getControlValidators(schema);\r\n  switch (controlType) {\r\n\r\n    case 'FormGroup':\r\n      controls = {};\r\n      if (hasOwn(schema, 'ui:order') || hasOwn(schema, 'properties')) {\r\n        const propertyKeys = schema['ui:order'] || Object.keys(schema.properties);\r\n        if (propertyKeys.includes('*') && !hasOwn(schema.properties, '*')) {\r\n          const unnamedKeys = Object.keys(schema.properties)\r\n            .filter(key => !propertyKeys.includes(key));\r\n          for (let i = propertyKeys.length - 1; i >= 0; i--) {\r\n            if (propertyKeys[i] === '*') {\r\n              propertyKeys.splice(i, 1, ...unnamedKeys);\r\n            }\r\n          }\r\n        }\r\n        propertyKeys\r\n          .filter(key => hasOwn(schema.properties, key) ||\r\n            hasOwn(schema, 'additionalProperties')\r\n          )\r\n          .forEach(key => controls[key] = buildFormGroupTemplate(\r\n            jsf, JsonPointer.get(nodeValue, [<string>key]), setValues,\r\n            schemaPointer + (hasOwn(schema.properties, key) ?\r\n              '/properties/' + key : '/additionalProperties'\r\n            ),\r\n            dataPointer + '/' + key,\r\n            templatePointer + '/controls/' + key\r\n          ));\r\n        jsf.formOptions.fieldsRequired = setRequiredFields(schema, controls);\r\n      }\r\n      return { controlType, controls, validators };\r\n\r\n    case 'FormArray':\r\n      controls = [];\r\n      const minItems =\r\n        Math.max(schema.minItems || 0, nodeOptions.get('minItems') || 0);\r\n      const maxItems =\r\n        Math.min(schema.maxItems || 1000, nodeOptions.get('maxItems') || 1000);\r\n      let additionalItemsPointer: string = null;\r\n      if (isArray(schema.items)) { // 'items' is an array = tuple items\r\n        const tupleItems = nodeOptions.get('tupleItems') ||\r\n          (isArray(schema.items) ? Math.min(schema.items.length, maxItems) : 0);\r\n        for (let i = 0; i < tupleItems; i++) {\r\n          if (i < minItems) {\r\n            controls.push(buildFormGroupTemplate(\r\n              jsf, isArray(nodeValue) ? nodeValue[i] : nodeValue, setValues,\r\n              schemaPointer + '/items/' + i,\r\n              dataPointer + '/' + i,\r\n              templatePointer + '/controls/' + i\r\n            ));\r\n          } else {\r\n            const schemaRefPointer = removeRecursiveReferences(\r\n              schemaPointer + '/items/' + i, jsf.schemaRecursiveRefMap\r\n            );\r\n            const itemRefPointer = removeRecursiveReferences(\r\n              shortDataPointer + '/' + i, jsf.dataRecursiveRefMap, jsf.arrayMap\r\n            );\r\n            const itemRecursive = itemRefPointer !== shortDataPointer + '/' + i;\r\n            if (!hasOwn(jsf.templateRefLibrary, itemRefPointer)) {\r\n              jsf.templateRefLibrary[itemRefPointer] = null;\r\n              jsf.templateRefLibrary[itemRefPointer] = buildFormGroupTemplate(\r\n                jsf, null, setValues,\r\n                schemaRefPointer,\r\n                itemRefPointer,\r\n                templatePointer + '/controls/' + i\r\n              );\r\n            }\r\n            controls.push(\r\n              isArray(nodeValue) ?\r\n                buildFormGroupTemplate(\r\n                  jsf, nodeValue[i], setValues,\r\n                  schemaPointer + '/items/' + i,\r\n                  dataPointer + '/' + i,\r\n                  templatePointer + '/controls/' + i\r\n                ) :\r\n                itemRecursive ?\r\n                  null : cloneDeep(jsf.templateRefLibrary[itemRefPointer])\r\n            );\r\n          }\r\n        }\r\n\r\n        // If 'additionalItems' is an object = additional list items (after tuple items)\r\n        if (schema.items.length < maxItems && isObject(schema.additionalItems)) {\r\n          additionalItemsPointer = schemaPointer + '/additionalItems';\r\n        }\r\n\r\n        // If 'items' is an object = list items only (no tuple items)\r\n      } else {\r\n        additionalItemsPointer = schemaPointer + '/items';\r\n      }\r\n\r\n      if (additionalItemsPointer) {\r\n        const schemaRefPointer = removeRecursiveReferences(\r\n          additionalItemsPointer, jsf.schemaRecursiveRefMap\r\n        );\r\n        const itemRefPointer = removeRecursiveReferences(\r\n          shortDataPointer + '/-', jsf.dataRecursiveRefMap, jsf.arrayMap\r\n        );\r\n        const itemRecursive = itemRefPointer !== shortDataPointer + '/-';\r\n        if (!hasOwn(jsf.templateRefLibrary, itemRefPointer)) {\r\n          jsf.templateRefLibrary[itemRefPointer] = null;\r\n          jsf.templateRefLibrary[itemRefPointer] = buildFormGroupTemplate(\r\n            jsf, null, setValues,\r\n            schemaRefPointer,\r\n            itemRefPointer,\r\n            templatePointer + '/controls/-'\r\n          );\r\n        }\r\n        // const itemOptions = jsf.dataMap.get(itemRefPointer) || new Map();\r\n        const itemOptions = nodeOptions;\r\n        if (!itemRecursive || hasOwn(validators, 'required')) {\r\n          const arrayLength = Math.min(Math.max(\r\n            itemRecursive ? 0 :\r\n              (itemOptions.get('tupleItems') + itemOptions.get('listItems')) || 0,\r\n            isArray(nodeValue) ? nodeValue.length : 0\r\n          ), maxItems);\r\n          for (let i = controls.length; i < arrayLength; i++) {\r\n            controls.push(\r\n              isArray(nodeValue) ?\r\n                buildFormGroupTemplate(\r\n                  jsf, nodeValue[i], setValues,\r\n                  schemaRefPointer,\r\n                  dataPointer + '/-',\r\n                  templatePointer + '/controls/-'\r\n                ) :\r\n                itemRecursive ?\r\n                  null : cloneDeep(jsf.templateRefLibrary[itemRefPointer])\r\n            );\r\n          }\r\n        }\r\n      }\r\n      return { controlType, controls, validators };\r\n\r\n    case '$ref':\r\n      const schemaRef = JsonPointer.compile(schema.$ref);\r\n      const dataRef = JsonPointer.toDataPointer(schemaRef, schema);\r\n      const refPointer = removeRecursiveReferences(\r\n        dataRef, jsf.dataRecursiveRefMap, jsf.arrayMap\r\n      );\r\n      if (refPointer && !hasOwn(jsf.templateRefLibrary, refPointer)) {\r\n        // Set to null first to prevent recursive reference from causing endless loop\r\n        jsf.templateRefLibrary[refPointer] = null;\r\n        const newTemplate = buildFormGroupTemplate(jsf, setValues, setValues, schemaRef);\r\n        if (newTemplate) {\r\n          jsf.templateRefLibrary[refPointer] = newTemplate;\r\n        } else {\r\n          delete jsf.templateRefLibrary[refPointer];\r\n        }\r\n      }\r\n      return null;\r\n\r\n    case 'FormControl':\r\n      const value = {\r\n        value: setValues && isPrimitive(nodeValue) ? nodeValue : null,\r\n        disabled: nodeOptions.get('disabled') || false\r\n      };\r\n      return { controlType, value, validators };\r\n\r\n    default:\r\n      return null;\r\n  }\r\n}\r\n\r\n/**\r\n * 'buildFormGroup' function\r\n *\r\n * // {any} template -\r\n * // {AbstractControl}\r\n*/\r\nexport function buildFormGroup(template: any): AbstractControl {\r\n  const validatorFns: ValidatorFn[] = [];\r\n  let validatorFn: ValidatorFn = null;\r\n  if (hasOwn(template, 'validators')) {\r\n    forEach(template.validators, (parameters, validator) => {\r\n      if (typeof JsonValidators[validator] === 'function') {\r\n        validatorFns.push(JsonValidators[validator].apply(null, parameters));\r\n      }\r\n    });\r\n    if (validatorFns.length &&\r\n      inArray(template.controlType, ['FormGroup', 'FormArray'])\r\n    ) {\r\n      validatorFn = validatorFns.length > 1 ?\r\n        JsonValidators.compose(validatorFns) : validatorFns[0];\r\n    }\r\n  }\r\n  if (hasOwn(template, 'controlType')) {\r\n    switch (template.controlType) {\r\n      case 'FormGroup':\r\n        const groupControls: { [key: string]: AbstractControl } = {};\r\n        forEach(template.controls, (controls, key) => {\r\n          const newControl: AbstractControl = buildFormGroup(controls);\r\n          if (newControl) { groupControls[key] = newControl; }\r\n        });\r\n        return new UntypedFormGroup(groupControls, validatorFn);\r\n      case 'FormArray':\r\n        return new UntypedFormArray(filter(map(template.controls,\r\n          controls => buildFormGroup(controls)\r\n        )), validatorFn);\r\n      case 'FormControl':\r\n        return new UntypedFormControl(template.value, validatorFns);\r\n    }\r\n  }\r\n  return null;\r\n}\r\n\r\n/**\r\n * 'mergeValues' function\r\n *\r\n * //  {any[]} ...valuesToMerge - Multiple values to merge\r\n * // {any} - Merged values\r\n */\r\nexport function mergeValues(...valuesToMerge) {\r\n  let mergedValues: any = null;\r\n  for (const currentValue of valuesToMerge) {\r\n    if (!isEmpty(currentValue)) {\r\n      if (typeof currentValue === 'object' &&\r\n        (isEmpty(mergedValues) || typeof mergedValues !== 'object')\r\n      ) {\r\n        if (isArray(currentValue)) {\r\n          mergedValues = [...currentValue];\r\n        } else if (isObject(currentValue)) {\r\n          mergedValues = { ...currentValue };\r\n        }\r\n      } else if (typeof currentValue !== 'object') {\r\n        mergedValues = currentValue;\r\n      } else if (isObject(mergedValues) && isObject(currentValue)) {\r\n        Object.assign(mergedValues, currentValue);\r\n      } else if (isObject(mergedValues) && isArray(currentValue)) {\r\n        const newValues = [];\r\n        for (const value of currentValue) {\r\n          newValues.push(mergeValues(mergedValues, value));\r\n        }\r\n        mergedValues = newValues;\r\n      } else if (isArray(mergedValues) && isObject(currentValue)) {\r\n        const newValues = [];\r\n        for (const value of mergedValues) {\r\n          newValues.push(mergeValues(value, currentValue));\r\n        }\r\n        mergedValues = newValues;\r\n      } else if (isArray(mergedValues) && isArray(currentValue)) {\r\n        const newValues = [];\r\n        for (let i = 0; i < Math.max(mergedValues.length, currentValue.length); i++) {\r\n          if (i < mergedValues.length && i < currentValue.length) {\r\n            newValues.push(mergeValues(mergedValues[i], currentValue[i]));\r\n          } else if (i < mergedValues.length) {\r\n            newValues.push(mergedValues[i]);\r\n          } else if (i < currentValue.length) {\r\n            newValues.push(currentValue[i]);\r\n          }\r\n        }\r\n        mergedValues = newValues;\r\n      }\r\n    }\r\n  }\r\n  return mergedValues;\r\n}\r\n\r\n/**\r\n * 'setRequiredFields' function\r\n *\r\n * // {schema} schema - JSON Schema\r\n * // {object} formControlTemplate - Form Control Template object\r\n * // {boolean} - true if any fields have been set to required, false if not\r\n */\r\nexport function setRequiredFields(schema: any, formControlTemplate: any): boolean {\r\n  let fieldsRequired = false;\r\n  if (hasOwn(schema, 'required') && !isEmpty(schema.required)) {\r\n    fieldsRequired = true;\r\n    let requiredArray = isArray(schema.required) ? schema.required : [schema.required];\r\n    requiredArray = forEach(requiredArray,\r\n      key => JsonPointer.set(formControlTemplate, '/' + key + '/validators/required', [])\r\n    );\r\n  }\r\n  return fieldsRequired;\r\n\r\n  // TODO: Add support for patternProperties\r\n  // https://spacetelescope.github.io/understanding-json-schema/reference/object.html#pattern-properties\r\n}\r\n\r\n/**\r\n * 'formatFormData' function\r\n *\r\n * // {any} formData - Angular FormGroup data object\r\n * // {Map<string, any>} dataMap -\r\n * // {Map<string, string>} recursiveRefMap -\r\n * // {Map<string, number>} arrayMap -\r\n * // {boolean = false} fixErrors - if TRUE, tries to fix data\r\n * // {any} - formatted data object\r\n */\r\nexport function formatFormData(\r\n  formData: any, dataMap: Map<string, any>,\r\n  recursiveRefMap: Map<string, string>, arrayMap: Map<string, number>,\r\n  returnEmptyFields = false, fixErrors = false\r\n): any {\r\n  if (formData === null || typeof formData !== 'object') { return formData; }\r\n  const formattedData = isArray(formData) ? [] : {};\r\n  JsonPointer.forEachDeep(formData, (value, dataPointer) => {\r\n\r\n    // If returnEmptyFields === true,\r\n    // add empty arrays and objects to all allowed keys\r\n    if (returnEmptyFields && isArray(value)) {\r\n      JsonPointer.set(formattedData, dataPointer, []);\r\n    } else if (returnEmptyFields && isObject(value) && !isDate(value)) {\r\n      JsonPointer.set(formattedData, dataPointer, {});\r\n    } else {\r\n      const genericPointer =\r\n        JsonPointer.has(dataMap, [dataPointer, 'schemaType']) ? dataPointer :\r\n          removeRecursiveReferences(dataPointer, recursiveRefMap, arrayMap);\r\n      if (JsonPointer.has(dataMap, [genericPointer, 'schemaType'])) {\r\n        const schemaType: SchemaPrimitiveType | SchemaPrimitiveType[] =\r\n          dataMap.get(genericPointer).get('schemaType');\r\n        if (schemaType === 'null') {\r\n          JsonPointer.set(formattedData, dataPointer, null);\r\n        } else if ((hasValue(value) || returnEmptyFields) &&\r\n          inArray(schemaType, ['string', 'integer', 'number', 'boolean'])\r\n        ) {\r\n          const newValue = (fixErrors || (value === null && returnEmptyFields)) ?\r\n            toSchemaType(value, schemaType) : toJavaScriptType(value, schemaType);\r\n          if (isDefined(newValue) || returnEmptyFields) {\r\n            JsonPointer.set(formattedData, dataPointer, newValue);\r\n          }\r\n        }\r\n\r\n        // Finish incomplete 'date-time' entries\r\n        if (dataMap.get(genericPointer).get('schemaFormat') === 'date-time') {\r\n          // \"2000-03-14T01:59:26.535\" -> \"2000-03-14T01:59:26.535Z\" (add \"Z\")\r\n          if (/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s][0-2]\\d:[0-5]\\d:[0-5]\\d(?:\\.\\d+)?$/i.test(value)) {\r\n            JsonPointer.set(formattedData, dataPointer, `${value}Z`);\r\n            // \"2000-03-14T01:59\" -> \"2000-03-14T01:59:00Z\" (add \":00Z\")\r\n          } else if (/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s][0-2]\\d:[0-5]\\d$/i.test(value)) {\r\n            JsonPointer.set(formattedData, dataPointer, `${value}:00Z`);\r\n            // \"2000-03-14\" -> \"2000-03-14T00:00:00Z\" (add \"T00:00:00Z\")\r\n          } else if (fixErrors && /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/i.test(value)) {\r\n            JsonPointer.set(formattedData, dataPointer, `${value}:00:00:00Z`);\r\n          }\r\n        }\r\n      } else if (typeof value !== 'object' || isDate(value) ||\r\n        (value === null && returnEmptyFields)\r\n      ) {\r\n        console.error('formatFormData error: ' +\r\n          `Schema type not found for form value at ${genericPointer}`);\r\n        console.error('dataMap', dataMap);\r\n        console.error('recursiveRefMap', recursiveRefMap);\r\n        console.error('genericPointer', genericPointer);\r\n      }\r\n    }\r\n  });\r\n  return formattedData;\r\n}\r\n\r\n/**\r\n * 'getControl' function\r\n *\r\n * Uses a JSON Pointer for a data object to retrieve a control from\r\n * an Angular formGroup or formGroup template. (Note: though a formGroup\r\n * template is much simpler, its basic structure is idential to a formGroup).\r\n *\r\n * If the optional third parameter 'returnGroup' is set to TRUE, the group\r\n * containing the control is returned, rather than the control itself.\r\n *\r\n * // {FormGroup} formGroup - Angular FormGroup to get value from\r\n * // {Pointer} dataPointer - JSON Pointer (string or array)\r\n * // {boolean = false} returnGroup - If true, return group containing control\r\n * // {group} - Located value (or null, if no control found)\r\n */\r\nexport function getControl(\r\n  formGroup: any, dataPointer: Pointer, returnGroup = false\r\n): any {\r\n  if (!isObject(formGroup) || !JsonPointer.isJsonPointer(dataPointer)) {\r\n    if (!JsonPointer.isJsonPointer(dataPointer)) {\r\n      // If dataPointer input is not a valid JSON pointer, check to\r\n      // see if it is instead a valid object path, using dot notaion\r\n      if (typeof dataPointer === 'string') {\r\n        const formControl = formGroup.get(dataPointer);\r\n        if (formControl) { return formControl; }\r\n      }\r\n      console.error(`getControl error: Invalid JSON Pointer: ${dataPointer}`);\r\n    }\r\n    if (!isObject(formGroup)) {\r\n      console.error(`getControl error: Invalid formGroup: ${formGroup}`);\r\n    }\r\n    return null;\r\n  }\r\n  let dataPointerArray = JsonPointer.parse(dataPointer);\r\n  if (returnGroup) { dataPointerArray = dataPointerArray.slice(0, -1); }\r\n\r\n  // If formGroup input is a real formGroup (not a formGroup template)\r\n  // try using formGroup.get() to return the control\r\n  if (typeof formGroup.get === 'function' &&\r\n    dataPointerArray.every(key => key.indexOf('.') === -1)\r\n  ) {\r\n    const formControl = formGroup.get(dataPointerArray.join('.'));\r\n    if (formControl) { return formControl; }\r\n  }\r\n\r\n  // If formGroup input is a formGroup template,\r\n  // or formGroup.get() failed to return the control,\r\n  // search the formGroup object for dataPointer's control\r\n  let subGroup = formGroup;\r\n  for (const key of dataPointerArray) {\r\n    if (hasOwn(subGroup, 'controls')) { subGroup = subGroup.controls; }\r\n    if (isArray(subGroup) && (key === '-')) {\r\n      subGroup = subGroup[subGroup.length - 1];\r\n    } else if (hasOwn(subGroup, key)) {\r\n      subGroup = subGroup[key];\r\n    } else {\r\n      console.error(`getControl error: Unable to find \"${key}\" item in FormGroup.`);\r\n      console.error(dataPointer);\r\n      console.error(formGroup);\r\n      return;\r\n    }\r\n  }\r\n  return subGroup;\r\n}\r\n","import cloneDeep from 'lodash/cloneDeep';\r\nimport _isArray from 'lodash/isArray';\r\nimport _isPlainObject from 'lodash/isPlainObject';\r\nimport uniqueId from 'lodash/uniqueId';\r\nimport { TitleMapItem } from '../json-schema-form.service';\r\nimport {\r\n  checkInlineType,\r\n  getFromSchema,\r\n  getInputType,\r\n  isInputRequired,\r\n  removeRecursiveReferences,\r\n  updateInputOptions\r\n} from './json-schema.functions';\r\nimport { JsonPointer } from './jsonpointer.functions';\r\nimport {\r\n  copy,\r\n  fixTitle,\r\n  forEach,\r\n  hasOwn\r\n} from './utility.functions';\r\nimport {\r\n  inArray,\r\n  isArray,\r\n  isDefined,\r\n  isEmpty,\r\n  isNumber,\r\n  isObject,\r\n  isString\r\n} from './validator.functions';\r\n\r\n\r\n\r\n\r\n/**\r\n * Layout function library:\r\n *\r\n * buildLayout:            Builds a complete layout from an input layout and schema\r\n *\r\n * buildLayoutFromSchema:  Builds a complete layout entirely from an input schema\r\n *\r\n * mapLayout:\r\n *\r\n * getLayoutNode:\r\n *\r\n * buildTitleMap:\r\n */\r\n\r\n/**\r\n * 'buildLayout' function\r\n *\r\n * //   jsf\r\n * //   widgetLibrary\r\n * //\r\n */\r\nexport function buildLayout_original(jsf, widgetLibrary) {\r\n  let hasSubmitButton = !JsonPointer.get(jsf, '/formOptions/addSubmit');\r\n  const formLayout = mapLayout(jsf.layout, (layoutItem, index, layoutPointer) => {\r\n    const newNode: any = {\r\n      _id: uniqueId(),\r\n      options: {},\r\n    };\r\n    if (isObject(layoutItem)) {\r\n      Object.assign(newNode, layoutItem);\r\n      Object.keys(newNode)\r\n        .filter(option => !inArray(option, [\r\n          '_id', '$ref', 'arrayItem', 'arrayItemType', 'dataPointer', 'dataType',\r\n          'items', 'key', 'name', 'options', 'recursiveReference', 'type', 'widget'\r\n        ]))\r\n        .forEach(option => {\r\n          newNode.options[option] = newNode[option];\r\n          delete newNode[option];\r\n        });\r\n      if (!hasOwn(newNode, 'type') && isString(newNode.widget)) {\r\n        newNode.type = newNode.widget;\r\n        delete newNode.widget;\r\n      }\r\n      if (!hasOwn(newNode.options, 'title')) {\r\n        if (hasOwn(newNode.options, 'legend')) {\r\n          newNode.options.title = newNode.options.legend;\r\n          delete newNode.options.legend;\r\n        }\r\n      }\r\n      if (!hasOwn(newNode.options, 'validationMessages')) {\r\n        if (hasOwn(newNode.options, 'errorMessages')) {\r\n          newNode.options.validationMessages = newNode.options.errorMessages;\r\n          delete newNode.options.errorMessages;\r\n\r\n          // Convert Angular Schema Form (AngularJS) 'validationMessage' to\r\n          // Angular JSON Schema Form 'validationMessages'\r\n          // TV4 codes from https://github.com/geraintluff/tv4/blob/master/source/api.js\r\n        } else if (hasOwn(newNode.options, 'validationMessage')) {\r\n          if (typeof newNode.options.validationMessage === 'string') {\r\n            newNode.options.validationMessages = newNode.options.validationMessage;\r\n          } else {\r\n            newNode.options.validationMessages = {};\r\n            Object.keys(newNode.options.validationMessage).forEach(key => {\r\n              const code = key + '';\r\n              const newKey =\r\n                code === '0' ? 'type' :\r\n                  code === '1' ? 'enum' :\r\n                    code === '100' ? 'multipleOf' :\r\n                      code === '101' ? 'minimum' :\r\n                        code === '102' ? 'exclusiveMinimum' :\r\n                          code === '103' ? 'maximum' :\r\n                            code === '104' ? 'exclusiveMaximum' :\r\n                              code === '200' ? 'minLength' :\r\n                                code === '201' ? 'maxLength' :\r\n                                  code === '202' ? 'pattern' :\r\n                                    code === '300' ? 'minProperties' :\r\n                                      code === '301' ? 'maxProperties' :\r\n                                        code === '302' ? 'required' :\r\n                                          code === '304' ? 'dependencies' :\r\n                                            code === '400' ? 'minItems' :\r\n                                              code === '401' ? 'maxItems' :\r\n                                                code === '402' ? 'uniqueItems' :\r\n                                                  code === '500' ? 'format' : code + '';\r\n              newNode.options.validationMessages[newKey] = newNode.options.validationMessage[key];\r\n            });\r\n          }\r\n          delete newNode.options.validationMessage;\r\n        }\r\n      }\r\n    } else if (JsonPointer.isJsonPointer(layoutItem)) {\r\n      newNode.dataPointer = layoutItem;\r\n    } else if (isString(layoutItem)) {\r\n      newNode.key = layoutItem;\r\n    } else {\r\n      console.error('buildLayout error: Form layout element not recognized:');\r\n      console.error(layoutItem);\r\n      return null;\r\n    }\r\n    let nodeSchema: any = null;\r\n\r\n    // If newNode does not have a dataPointer, try to find an equivalent\r\n    if (!hasOwn(newNode, 'dataPointer')) {\r\n\r\n      // If newNode has a key, change it to a dataPointer\r\n      if (hasOwn(newNode, 'key')) {\r\n        newNode.dataPointer = newNode.key === '*' ? newNode.key :\r\n          JsonPointer.compile(JsonPointer.parseObjectPath(newNode.key), '-');\r\n        delete newNode.key;\r\n\r\n        // If newNode is an array, search for dataPointer in child nodes\r\n      } else if (hasOwn(newNode, 'type') && newNode.type.slice(-5) === 'array') {\r\n        const findDataPointer = (items) => {\r\n          if (items === null || typeof items !== 'object') { return; }\r\n          if (hasOwn(items, 'dataPointer')) { return items.dataPointer; }\r\n          if (isArray(items.items)) {\r\n            for (const item of items.items) {\r\n              if (hasOwn(item, 'dataPointer') && item.dataPointer.indexOf('/-') !== -1) {\r\n                return item.dataPointer;\r\n              }\r\n              if (hasOwn(item, 'items')) {\r\n                const searchItem = findDataPointer(item);\r\n                if (searchItem) { return searchItem; }\r\n              }\r\n            }\r\n          }\r\n        };\r\n        const childDataPointer = findDataPointer(newNode);\r\n        if (childDataPointer) {\r\n          newNode.dataPointer =\r\n            childDataPointer.slice(0, childDataPointer.lastIndexOf('/-'));\r\n        }\r\n      }\r\n    }\r\n\r\n    if (hasOwn(newNode, 'dataPointer')) {\r\n      if (newNode.dataPointer === '*') {\r\n        return buildLayoutFromSchema(jsf, widgetLibrary, jsf.formValues);\r\n      }\r\n      const nodeValue =\r\n        JsonPointer.get(jsf.formValues, newNode.dataPointer.replace(/\\/-/g, '/1'));\r\n\r\n      // TODO: Create function getFormValues(jsf, dataPointer, forRefLibrary)\r\n      // check formOptions.setSchemaDefaults and formOptions.setLayoutDefaults\r\n      // then set apropriate values from initialVaues, schema, or layout\r\n\r\n      newNode.dataPointer =\r\n        JsonPointer.toGenericPointer(newNode.dataPointer, jsf.arrayMap);\r\n      const LastKey = JsonPointer.toKey(newNode.dataPointer);\r\n      if (!newNode.name && isString(LastKey) && LastKey !== '-') {\r\n        newNode.name = LastKey;\r\n      }\r\n      const shortDataPointer = removeRecursiveReferences(\r\n        newNode.dataPointer, jsf.dataRecursiveRefMap, jsf.arrayMap\r\n      );\r\n      const recursive = !shortDataPointer.length ||\r\n        shortDataPointer !== newNode.dataPointer;\r\n      let schemaPointer: string;\r\n      if (!jsf.dataMap.has(shortDataPointer)) {\r\n        jsf.dataMap.set(shortDataPointer, new Map());\r\n      }\r\n      const nodeDataMap = jsf.dataMap.get(shortDataPointer);\r\n      if (nodeDataMap.has('schemaPointer')) {\r\n        schemaPointer = nodeDataMap.get('schemaPointer');\r\n      } else {\r\n        schemaPointer = JsonPointer.toSchemaPointer(shortDataPointer, jsf.schema);\r\n        nodeDataMap.set('schemaPointer', schemaPointer);\r\n      }\r\n      nodeDataMap.set('disabled', !!newNode.options.disabled);\r\n      nodeSchema = JsonPointer.get(jsf.schema, schemaPointer);\r\n      if (nodeSchema) {\r\n        if (!hasOwn(newNode, 'type')) {\r\n          newNode.type = getInputType(nodeSchema, newNode);\r\n        } else if (!widgetLibrary.hasWidget(newNode.type)) {\r\n          const oldWidgetType = newNode.type;\r\n          newNode.type = getInputType(nodeSchema, newNode);\r\n          console.error(`error: widget type \"${oldWidgetType}\" ` +\r\n            `not found in library. Replacing with \"${newNode.type}\".`);\r\n        } else {\r\n          newNode.type = checkInlineType(newNode.type, nodeSchema, newNode);\r\n        }\r\n        if (nodeSchema.type === 'object' && isArray(nodeSchema.required)) {\r\n          nodeDataMap.set('required', nodeSchema.required);\r\n        }\r\n        newNode.dataType =\r\n          nodeSchema.type || (hasOwn(nodeSchema, '$ref') ? '$ref' : null);\r\n        updateInputOptions(newNode, nodeSchema, jsf);\r\n\r\n        // Present checkboxes as single control, rather than array\r\n        if (newNode.type === 'checkboxes' && hasOwn(nodeSchema, 'items')) {\r\n          updateInputOptions(newNode, nodeSchema.items, jsf);\r\n        } else if (newNode.dataType === 'array') {\r\n          newNode.options.maxItems = Math.min(\r\n            nodeSchema.maxItems || 1000, newNode.options.maxItems || 1000\r\n          );\r\n          newNode.options.minItems = Math.max(\r\n            nodeSchema.minItems || 0, newNode.options.minItems || 0\r\n          );\r\n          newNode.options.listItems = Math.max(\r\n            newNode.options.listItems || 0, isArray(nodeValue) ? nodeValue.length : 0\r\n          );\r\n          newNode.options.tupleItems =\r\n            isArray(nodeSchema.items) ? nodeSchema.items.length : 0;\r\n          if (newNode.options.maxItems < newNode.options.tupleItems) {\r\n            newNode.options.tupleItems = newNode.options.maxItems;\r\n            newNode.options.listItems = 0;\r\n          } else if (newNode.options.maxItems <\r\n            newNode.options.tupleItems + newNode.options.listItems\r\n          ) {\r\n            newNode.options.listItems =\r\n              newNode.options.maxItems - newNode.options.tupleItems;\r\n          } else if (newNode.options.minItems >\r\n            newNode.options.tupleItems + newNode.options.listItems\r\n          ) {\r\n            newNode.options.listItems =\r\n              newNode.options.minItems - newNode.options.tupleItems;\r\n          }\r\n          if (!nodeDataMap.has('maxItems')) {\r\n            nodeDataMap.set('maxItems', newNode.options.maxItems);\r\n            nodeDataMap.set('minItems', newNode.options.minItems);\r\n            nodeDataMap.set('tupleItems', newNode.options.tupleItems);\r\n            nodeDataMap.set('listItems', newNode.options.listItems);\r\n          }\r\n          if (!jsf.arrayMap.has(shortDataPointer)) {\r\n            jsf.arrayMap.set(shortDataPointer, newNode.options.tupleItems);\r\n          }\r\n        }\r\n        if (isInputRequired(jsf.schema, schemaPointer)) {\r\n          newNode.options.required = true;\r\n          jsf.fieldsRequired = true;\r\n        }\r\n      } else {\r\n        // TODO: create item in FormGroup model from layout key (?)\r\n        updateInputOptions(newNode, {}, jsf);\r\n      }\r\n\r\n      if (!newNode.options.title && !/^\\d+$/.test(newNode.name)) {\r\n        newNode.options.title = fixTitle(newNode.name);\r\n      }\r\n\r\n      if (hasOwn(newNode.options, 'copyValueTo')) {\r\n        if (typeof newNode.options.copyValueTo === 'string') {\r\n          newNode.options.copyValueTo = [newNode.options.copyValueTo];\r\n        }\r\n        if (isArray(newNode.options.copyValueTo)) {\r\n          newNode.options.copyValueTo = newNode.options.copyValueTo.map(item =>\r\n            JsonPointer.compile(JsonPointer.parseObjectPath(item), '-')\r\n          );\r\n        }\r\n      }\r\n\r\n      newNode.widget = widgetLibrary.getWidget(newNode.type);\r\n      nodeDataMap.set('inputType', newNode.type);\r\n      nodeDataMap.set('widget', newNode.widget);\r\n\r\n      if (newNode.dataType === 'array' &&\r\n        (hasOwn(newNode, 'items') || hasOwn(newNode, 'additionalItems'))\r\n      ) {\r\n        const itemRefPointer = removeRecursiveReferences(\r\n          newNode.dataPointer + '/-', jsf.dataRecursiveRefMap, jsf.arrayMap\r\n        );\r\n        if (!jsf.dataMap.has(itemRefPointer)) {\r\n          jsf.dataMap.set(itemRefPointer, new Map());\r\n        }\r\n        jsf.dataMap.get(itemRefPointer).set('inputType', 'section');\r\n\r\n        // Fix insufficiently nested array item groups\r\n        if (newNode.items.length > 1) {\r\n          const arrayItemGroup = [];\r\n          for (let i = newNode.items.length - 1; i >= 0; i--) {\r\n            const subItem = newNode.items[i];\r\n            if (hasOwn(subItem, 'dataPointer') &&\r\n              subItem.dataPointer.slice(0, itemRefPointer.length) === itemRefPointer\r\n            ) {\r\n              const arrayItem = newNode.items.splice(i, 1)[0];\r\n              arrayItem.dataPointer = newNode.dataPointer + '/-' +\r\n                arrayItem.dataPointer.slice(itemRefPointer.length);\r\n              arrayItemGroup.unshift(arrayItem);\r\n            } else {\r\n              subItem.arrayItem = true;\r\n              // TODO: Check schema to get arrayItemType and removable\r\n              subItem.arrayItemType = 'list';\r\n              subItem.removable = newNode.options.removable !== false;\r\n            }\r\n          }\r\n          if (arrayItemGroup.length) {\r\n            newNode.items.push({\r\n              _id: uniqueId(),\r\n              arrayItem: true,\r\n              arrayItemType: newNode.options.tupleItems > newNode.items.length ?\r\n                'tuple' : 'list',\r\n              items: arrayItemGroup,\r\n              options: { removable: newNode.options.removable !== false, },\r\n              dataPointer: newNode.dataPointer + '/-',\r\n              type: 'section',\r\n              widget: widgetLibrary.getWidget('section'),\r\n            });\r\n          }\r\n        } else {\r\n          // TODO: Fix to hndle multiple items\r\n          newNode.items[0].arrayItem = true;\r\n          if (!newNode.items[0].dataPointer) {\r\n            newNode.items[0].dataPointer =\r\n              JsonPointer.toGenericPointer(itemRefPointer, jsf.arrayMap);\r\n          }\r\n          if (!JsonPointer.has(newNode, '/items/0/options/removable')) {\r\n            newNode.items[0].options.removable = true;\r\n          }\r\n          if (newNode.options.orderable === false) {\r\n            newNode.items[0].options.orderable = false;\r\n          }\r\n          newNode.items[0].arrayItemType =\r\n            newNode.options.tupleItems ? 'tuple' : 'list';\r\n        }\r\n\r\n        if (isArray(newNode.items)) {\r\n          const arrayListItems =\r\n            newNode.items.filter(item => item.type !== '$ref').length -\r\n            newNode.options.tupleItems;\r\n          if (arrayListItems > newNode.options.listItems) {\r\n            newNode.options.listItems = arrayListItems;\r\n            nodeDataMap.set('listItems', arrayListItems);\r\n          }\r\n        }\r\n\r\n        if (!hasOwn(jsf.layoutRefLibrary, itemRefPointer)) {\r\n          jsf.layoutRefLibrary[itemRefPointer] =\r\n            cloneDeep(newNode.items[newNode.items.length - 1]);\r\n          if (recursive) {\r\n            jsf.layoutRefLibrary[itemRefPointer].recursiveReference = true;\r\n          }\r\n          forEach(jsf.layoutRefLibrary[itemRefPointer], (item, key) => {\r\n            if (hasOwn(item, '_id')) { item._id = null; }\r\n            if (recursive) {\r\n              if (hasOwn(item, 'dataPointer')) {\r\n                item.dataPointer = item.dataPointer.slice(itemRefPointer.length);\r\n              }\r\n            }\r\n          }, 'top-down');\r\n        }\r\n\r\n        // Add any additional default items\r\n        if (!newNode.recursiveReference || newNode.options.required) {\r\n          const arrayLength = Math.min(Math.max(\r\n            newNode.options.tupleItems + newNode.options.listItems,\r\n            isArray(nodeValue) ? nodeValue.length : 0\r\n          ), newNode.options.maxItems);\r\n          for (let i = newNode.items.length; i < arrayLength; i++) {\r\n            newNode.items.push(getLayoutNode({\r\n              $ref: itemRefPointer,\r\n              dataPointer: newNode.dataPointer,\r\n              recursiveReference: newNode.recursiveReference,\r\n            }, jsf, widgetLibrary));\r\n          }\r\n        }\r\n\r\n        // If needed, add button to add items to array\r\n        if (newNode.options.addable !== false &&\r\n          newNode.options.minItems < newNode.options.maxItems &&\r\n          (newNode.items[newNode.items.length - 1] || {}).type !== '$ref'\r\n        ) {\r\n          let buttonText = 'Add';\r\n          if (newNode.options.title) {\r\n            if (/^add\\b/i.test(newNode.options.title)) {\r\n              buttonText = newNode.options.title;\r\n            } else {\r\n              buttonText += ' ' + newNode.options.title;\r\n            }\r\n          } else if (newNode.name && !/^\\d+$/.test(newNode.name)) {\r\n            if (/^add\\b/i.test(newNode.name)) {\r\n              buttonText += ' ' + fixTitle(newNode.name);\r\n            } else {\r\n              buttonText = fixTitle(newNode.name);\r\n            }\r\n\r\n            // If newNode doesn't have a title, look for title of parent array item\r\n          } else {\r\n            const parentSchema =\r\n              getFromSchema(jsf.schema, newNode.dataPointer, 'parentSchema');\r\n            if (hasOwn(parentSchema, 'title')) {\r\n              buttonText += ' to ' + parentSchema.title;\r\n            } else {\r\n              const pointerArray = JsonPointer.parse(newNode.dataPointer);\r\n              buttonText += ' to ' + fixTitle(pointerArray[pointerArray.length - 2]);\r\n            }\r\n          }\r\n          newNode.items.push({\r\n            _id: uniqueId(),\r\n            arrayItem: true,\r\n            arrayItemType: 'list',\r\n            dataPointer: newNode.dataPointer + '/-',\r\n            options: {\r\n              listItems: newNode.options.listItems,\r\n              maxItems: newNode.options.maxItems,\r\n              minItems: newNode.options.minItems,\r\n              removable: false,\r\n              title: buttonText,\r\n              tupleItems: newNode.options.tupleItems,\r\n            },\r\n            recursiveReference: recursive,\r\n            type: '$ref',\r\n            widget: widgetLibrary.getWidget('$ref'),\r\n            $ref: itemRefPointer,\r\n          });\r\n          if (isString(JsonPointer.get(newNode, '/style/add'))) {\r\n            newNode.items[newNode.items.length - 1].options.fieldStyle =\r\n              newNode.style.add;\r\n            delete newNode.style.add;\r\n            if (isEmpty(newNode.style)) { delete newNode.style; }\r\n          }\r\n        }\r\n      } else {\r\n        newNode.arrayItem = false;\r\n      }\r\n    } else if (hasOwn(newNode, 'type') || hasOwn(newNode, 'items')) {\r\n      const parentType: string =\r\n        JsonPointer.get(jsf.layout, layoutPointer, 0, -2).type;\r\n      if (!hasOwn(newNode, 'type')) {\r\n        newNode.type =\r\n          inArray(parentType, ['tabs', 'tabarray']) ? 'tab' : 'array';\r\n      }\r\n      newNode.arrayItem = parentType === 'array';\r\n      newNode.widget = widgetLibrary.getWidget(newNode.type);\r\n      updateInputOptions(newNode, {}, jsf);\r\n    }\r\n    if (newNode.type === 'submit') { hasSubmitButton = true; }\r\n    return newNode;\r\n  });\r\n  if (jsf.hasRootReference) {\r\n    const fullLayout = cloneDeep(formLayout);\r\n    if (fullLayout[fullLayout.length - 1].type === 'submit') { fullLayout.pop(); }\r\n    jsf.layoutRefLibrary[''] = {\r\n      _id: null,\r\n      dataPointer: '',\r\n      dataType: 'object',\r\n      items: fullLayout,\r\n      name: '',\r\n      options: cloneDeep(jsf.formOptions.defaultWidgetOptions),\r\n      recursiveReference: true,\r\n      required: false,\r\n      type: 'section',\r\n      widget: widgetLibrary.getWidget('section'),\r\n    };\r\n  }\r\n  if (!hasSubmitButton) {\r\n    formLayout.push({\r\n      _id: uniqueId(),\r\n      options: { title: 'Submit' },\r\n      type: 'submit',\r\n      widget: widgetLibrary.getWidget('submit'),\r\n    });\r\n  }\r\n  return formLayout;\r\n}\r\n\r\n//TODO-review:this implements a quick 'post' fix rather than an\r\n//integrared ideal fix\r\nexport function buildLayout(jsf, widgetLibrary) {\r\n  let layout=buildLayout_original(jsf, widgetLibrary);\r\n  if (jsf.formValues) {\r\n    let fixedLayout = fixNestedArrayLayout({\r\n      builtLayout: layout,\r\n      formData: jsf.formValues\r\n    });\r\n  }\r\n  return layout;\r\n}\r\n\r\n\r\n\r\nfunction fixNestedArrayLayout(options: any) {\r\n  let { builtLayout, formData } = options;\r\n  let arrLengths = {};\r\n  let traverseObj = function (obj, path, onValue?) {\r\n    if (_isArray(obj)) {\r\n      onValue && onValue(obj, path);\r\n      obj.forEach((item, ind) => {\r\n        onValue && onValue(item, path + \"/\" + ind);\r\n        traverseObj(item, path + \"/\" + ind, onValue);\r\n      });\r\n      return;\r\n    }\r\n    if (_isPlainObject(obj)) {\r\n      onValue && onValue(obj, path);\r\n      Object.keys(obj).forEach(key => {\r\n        onValue && onValue(obj[key], path + \"/\" + key);\r\n        traverseObj(obj[key], path + \"/\" + key, onValue);\r\n      });\r\n      return\r\n    }\r\n  }\r\n  traverseObj(formData, \"\", (value, path) => {\r\n    if (_isArray(value)) {\r\n      arrLengths[path] = arrLengths[path] || value.length;\r\n    }\r\n  });\r\n\r\n  let getDataSize = (options: any) => {\r\n    let { data, dataPointer, indexArray } = options;\r\n    let dashCount = 0;\r\n    let dpInstance = dataPointer.substring(1).split(\"/\").map((part, pind) => {\r\n      if (part == \"-\" && indexArray[dashCount] != undefined) {\r\n        return indexArray[dashCount++];\r\n      }\r\n      return part;\r\n    })\r\n      .join(\"/\");\r\n    dpInstance = \"/\" + dpInstance;\r\n    let arrSize = arrLengths[dpInstance];\r\n    return arrSize;\r\n  }\r\n  //still too buggy\r\n  let createNonRefItem = (nodeWithRef: any) => {\r\n    let templateNode = {\r\n      \"type\": \"section\", //check this could also be array?\r\n      \"recursiveReference\": false,//check this \r\n      \"items\": []\r\n    }\r\n    let clone = cloneDeep(nodeWithRef);\r\n    //commented out for now so that it behaves as ususal\r\n    //_.merge(clone,templateNode);\r\n    return clone;\r\n  }\r\n\r\n  let rebuildLayout = (options: any) => {\r\n    let { builtLayout, indices, parentDataPointer, indexPos } = options;\r\n    indices = indices || [];\r\n    indexPos = indexPos == undefined ? indexPos = -1 : indexPos;\r\n    if (_isArray(builtLayout)) {\r\n      builtLayout.forEach((item, index) => {\r\n        rebuildLayout({\r\n          builtLayout: item,\r\n          indices: indices,\r\n          indexPos: indexPos,\r\n          parentDataPointer: builtLayout.dataPointer || parentDataPointer\r\n        })\r\n      })\r\n      return;\r\n    }\r\n  \r\n    let dataTypes=[\"array\"];//check only array for now\r\n     //for now added condition to ignore recursive references\r\n    if (builtLayout.items && dataTypes.indexOf(builtLayout.dataType)>=0\r\n      && builtLayout.dataPointer\r\n      && !builtLayout.recursiveReference\r\n    ) {\r\n      let numDataItems: any = getDataSize({\r\n        data: formData,\r\n        dataPointer: builtLayout.dataPointer,\r\n        indexArray: indices\r\n      });\r\n      let numActualItems = builtLayout.items.length;\r\n      //check if there's ref items, if so ignore it and therefore\r\n      //decrement the item count\r\n      builtLayout.items.forEach(item => {\r\n        if (item.type && item.type == \"$ref\") {\r\n          numActualItems--;\r\n        }\r\n      });\r\n      numActualItems = Math.max(numActualItems, 0);//avoid dealing with negatives\r\n      if (numActualItems < numDataItems) {\r\n\r\n        let numItemsNeeded = numDataItems - numActualItems;\r\n        //added to ignore recursive references\r\n        if (numActualItems == 0 && builtLayout.items[0].recursiveReference) {\r\n          numItemsNeeded = 0\r\n        }\r\n        for (let i = 0; i < numItemsNeeded; i++) {\r\n          //node must not be of type \"type\": \"$ref\"\r\n          //if it is then manufacture our own\r\n          let isRefNode = builtLayout.items[0].type && builtLayout.items[0].type == \"$ref\";\r\n          let newItem = isRefNode\r\n            ? createNonRefItem(builtLayout.items[0])\r\n            : cloneDeep(builtLayout.items[0]);//copy first\r\n          newItem._id = uniqueId(\"new_\");\r\n          builtLayout.items.unshift(newItem);\r\n        }\r\n        if (builtLayout.options.listItems) {\r\n          builtLayout.options.listItems = numDataItems;\r\n        }\r\n      }\r\n      indices[builtLayout.dataPointer] = indices[builtLayout.dataPointer] || -1;\r\n      indexPos++;\r\n      builtLayout.items.forEach((item, index) => {\r\n        indices[indexPos] = index\r\n        rebuildLayout({\r\n          builtLayout: item,\r\n          indices: indices,\r\n          parentDataPointer: builtLayout.dataPointer,\r\n          indexPos: indexPos\r\n        })\r\n      })\r\n      indexPos--;\r\n    } else {\r\n      if (builtLayout.items) {\r\n        builtLayout.items.forEach((item, index) => {\r\n          rebuildLayout({\r\n            builtLayout: item,\r\n            indices: indices,\r\n            parentDataPointer: parentDataPointer,\r\n            indexPos: indexPos\r\n          })\r\n        })\r\n\r\n      }\r\n    }\r\n\r\n\r\n  }\r\n  rebuildLayout({\r\n    builtLayout: builtLayout\r\n  });\r\n  //NB original is mutated\r\n  let fixedLayout = builtLayout;\r\n  return fixedLayout;\r\n}\r\n\r\n/**\r\n * 'buildLayoutFromSchema' function\r\n *\r\n * //   jsf -\r\n * //   widgetLibrary -\r\n * //   nodeValue -\r\n * //  { string = '' } schemaPointer -\r\n * //  { string = '' } dataPointer -\r\n * //  { boolean = false } arrayItem -\r\n * //  { string = null } arrayItemType -\r\n * //  { boolean = null } removable -\r\n * //  { boolean = false } forRefLibrary -\r\n * //  { string = '' } dataPointerPrefix -\r\n * //\r\n */\r\nexport function buildLayoutFromSchema(\r\n  jsf, widgetLibrary, nodeValue = null, schemaPointer = '',\r\n  dataPointer = '', arrayItem = false, arrayItemType: string = null,\r\n  removable: boolean = null, forRefLibrary = false, dataPointerPrefix = ''\r\n) {\r\n  const schema = JsonPointer.get(jsf.schema, schemaPointer);\r\n  if (!hasOwn(schema, 'type') && !hasOwn(schema, '$ref') &&\r\n    !hasOwn(schema, 'x-schema-form')\r\n  ) { return null; }\r\n  const newNodeType: string = getInputType(schema);\r\n  if (!isDefined(nodeValue) && (\r\n    jsf.formOptions.setSchemaDefaults === true ||\r\n    (jsf.formOptions.setSchemaDefaults === 'auto' && isEmpty(jsf.formValues))\r\n  )) {\r\n    nodeValue = JsonPointer.get(jsf.schema, schemaPointer + '/default');\r\n  }\r\n  let newNode: any = {\r\n    _id: forRefLibrary ? null : uniqueId(),\r\n    arrayItem: arrayItem,\r\n    dataPointer: JsonPointer.toGenericPointer(dataPointer, jsf.arrayMap),\r\n    dataType: schema.type || (hasOwn(schema, '$ref') ? '$ref' : null),\r\n    options: {},\r\n    required: isInputRequired(jsf.schema, schemaPointer),\r\n    type: newNodeType,\r\n    widget: widgetLibrary.getWidget(newNodeType),\r\n  };\r\n  const lastDataKey = JsonPointer.toKey(newNode.dataPointer);\r\n  if (lastDataKey !== '-') { newNode.name = lastDataKey; }\r\n  if (newNode.arrayItem) {\r\n    newNode.arrayItemType = arrayItemType;\r\n    newNode.options.removable = removable !== false;\r\n  }\r\n  const shortDataPointer = removeRecursiveReferences(\r\n    dataPointerPrefix + dataPointer, jsf.dataRecursiveRefMap, jsf.arrayMap\r\n  );\r\n  const recursive = !shortDataPointer.length ||\r\n    shortDataPointer !== dataPointerPrefix + dataPointer;\r\n  if (!jsf.dataMap.has(shortDataPointer)) {\r\n    jsf.dataMap.set(shortDataPointer, new Map());\r\n  }\r\n  const nodeDataMap = jsf.dataMap.get(shortDataPointer);\r\n  if (!nodeDataMap.has('inputType')) {\r\n    nodeDataMap.set('schemaPointer', schemaPointer);\r\n    nodeDataMap.set('inputType', newNode.type);\r\n    nodeDataMap.set('widget', newNode.widget);\r\n    nodeDataMap.set('disabled', !!newNode.options.disabled);\r\n  }\r\n  updateInputOptions(newNode, schema, jsf);\r\n  if (!newNode.options.title && newNode.name && !/^\\d+$/.test(newNode.name)) {\r\n    newNode.options.title = fixTitle(newNode.name);\r\n  }\r\n\r\n  if (newNode.dataType === 'object') {\r\n    if (isArray(schema.required) && !nodeDataMap.has('required')) {\r\n      nodeDataMap.set('required', schema.required);\r\n    }\r\n    if (isObject(schema.properties)) {\r\n      const newSection: any[] = [];\r\n      const propertyKeys = schema['ui:order'] || Object.keys(schema.properties);\r\n      if (propertyKeys.includes('*') && !hasOwn(schema.properties, '*')) {\r\n        const unnamedKeys = Object.keys(schema.properties)\r\n          .filter(key => !propertyKeys.includes(key));\r\n        for (let i = propertyKeys.length - 1; i >= 0; i--) {\r\n          if (propertyKeys[i] === '*') {\r\n            propertyKeys.splice(i, 1, ...unnamedKeys);\r\n          }\r\n        }\r\n      }\r\n      propertyKeys\r\n        .filter(key => hasOwn(schema.properties, key) ||\r\n          hasOwn(schema, 'additionalProperties')\r\n        )\r\n        .forEach(key => {\r\n          const keySchemaPointer = hasOwn(schema.properties, key) ?\r\n            '/properties/' + key : '/additionalProperties';\r\n          const innerItem = buildLayoutFromSchema(\r\n            jsf, widgetLibrary, isObject(nodeValue) ? nodeValue[key] : null,\r\n            schemaPointer + keySchemaPointer,\r\n            dataPointer + '/' + key,\r\n            false, null, null, forRefLibrary, dataPointerPrefix\r\n          );\r\n          if (innerItem) {\r\n            if (isInputRequired(schema, '/' + key)) {\r\n              innerItem.options.required = true;\r\n              jsf.fieldsRequired = true;\r\n            }\r\n            newSection.push(innerItem);\r\n          }\r\n        });\r\n      if (dataPointer === '' && !forRefLibrary) {\r\n        newNode = newSection;\r\n      } else {\r\n        newNode.items = newSection;\r\n      }\r\n    }\r\n    // TODO: Add patternProperties and additionalProperties inputs?\r\n    // ... possibly provide a way to enter both key names and values?\r\n    // if (isObject(schema.patternProperties)) { }\r\n    // if (isObject(schema.additionalProperties)) { }\r\n\r\n  } else if (newNode.dataType === 'array') {\r\n    newNode.items = [];\r\n    newNode.options.maxItems = Math.min(\r\n      schema.maxItems || 1000, newNode.options.maxItems || 1000\r\n    );\r\n    newNode.options.minItems = Math.max(\r\n      schema.minItems || 0, newNode.options.minItems || 0\r\n    );\r\n    if (!newNode.options.minItems && isInputRequired(jsf.schema, schemaPointer)) {\r\n      newNode.options.minItems = 1;\r\n    }\r\n    if (!hasOwn(newNode.options, 'listItems')) { newNode.options.listItems = 1; }\r\n    newNode.options.tupleItems = isArray(schema.items) ? schema.items.length : 0;\r\n    if (newNode.options.maxItems <= newNode.options.tupleItems) {\r\n      newNode.options.tupleItems = newNode.options.maxItems;\r\n      newNode.options.listItems = 0;\r\n    } else if (newNode.options.maxItems <\r\n      newNode.options.tupleItems + newNode.options.listItems\r\n    ) {\r\n      newNode.options.listItems = newNode.options.maxItems - newNode.options.tupleItems;\r\n    } else if (newNode.options.minItems >\r\n      newNode.options.tupleItems + newNode.options.listItems\r\n    ) {\r\n      newNode.options.listItems = newNode.options.minItems - newNode.options.tupleItems;\r\n    }\r\n    if (!nodeDataMap.has('maxItems')) {\r\n      nodeDataMap.set('maxItems', newNode.options.maxItems);\r\n      nodeDataMap.set('minItems', newNode.options.minItems);\r\n      nodeDataMap.set('tupleItems', newNode.options.tupleItems);\r\n      nodeDataMap.set('listItems', newNode.options.listItems);\r\n    }\r\n    if (!jsf.arrayMap.has(shortDataPointer)) {\r\n      jsf.arrayMap.set(shortDataPointer, newNode.options.tupleItems);\r\n    }\r\n    removable = newNode.options.removable !== false;\r\n    let additionalItemsSchemaPointer: string = null;\r\n\r\n    // If 'items' is an array = tuple items\r\n    if (isArray(schema.items)) {\r\n      newNode.items = [];\r\n      for (let i = 0; i < newNode.options.tupleItems; i++) {\r\n        let newItem: any;\r\n        const itemRefPointer = removeRecursiveReferences(\r\n          shortDataPointer + '/' + i, jsf.dataRecursiveRefMap, jsf.arrayMap\r\n        );\r\n        const itemRecursive = !itemRefPointer.length ||\r\n          itemRefPointer !== shortDataPointer + '/' + i;\r\n\r\n        // If removable, add tuple item layout to layoutRefLibrary\r\n        if (removable && i >= newNode.options.minItems) {\r\n          if (!hasOwn(jsf.layoutRefLibrary, itemRefPointer)) {\r\n            // Set to null first to prevent recursive reference from causing endless loop\r\n            jsf.layoutRefLibrary[itemRefPointer] = null;\r\n            jsf.layoutRefLibrary[itemRefPointer] = buildLayoutFromSchema(\r\n              jsf, widgetLibrary, isArray(nodeValue) ? nodeValue[i] : null,\r\n              schemaPointer + '/items/' + i,\r\n              itemRecursive ? '' : dataPointer + '/' + i,\r\n              true, 'tuple', true, true, itemRecursive ? dataPointer + '/' + i : ''\r\n            );\r\n            if (itemRecursive) {\r\n              jsf.layoutRefLibrary[itemRefPointer].recursiveReference = true;\r\n            }\r\n          }\r\n          newItem = getLayoutNode({\r\n            $ref: itemRefPointer,\r\n            dataPointer: dataPointer + '/' + i,\r\n            recursiveReference: itemRecursive,\r\n          }, jsf, widgetLibrary, isArray(nodeValue) ? nodeValue[i] : null);\r\n        } else {\r\n          newItem = buildLayoutFromSchema(\r\n            jsf, widgetLibrary, isArray(nodeValue) ? nodeValue[i] : null,\r\n            schemaPointer + '/items/' + i,\r\n            dataPointer + '/' + i,\r\n            true, 'tuple', false, forRefLibrary, dataPointerPrefix\r\n          );\r\n        }\r\n        if (newItem) { newNode.items.push(newItem); }\r\n      }\r\n\r\n      // If 'additionalItems' is an object = additional list items, after tuple items\r\n      if (isObject(schema.additionalItems)) {\r\n        additionalItemsSchemaPointer = schemaPointer + '/additionalItems';\r\n      }\r\n\r\n      // If 'items' is an object = list items only (no tuple items)\r\n    } else if (isObject(schema.items)) {\r\n      additionalItemsSchemaPointer = schemaPointer + '/items';\r\n    }\r\n\r\n    if (additionalItemsSchemaPointer) {\r\n      const itemRefPointer = removeRecursiveReferences(\r\n        shortDataPointer + '/-', jsf.dataRecursiveRefMap, jsf.arrayMap\r\n      );\r\n      const itemRecursive = !itemRefPointer.length ||\r\n        itemRefPointer !== shortDataPointer + '/-';\r\n      const itemSchemaPointer = removeRecursiveReferences(\r\n        additionalItemsSchemaPointer, jsf.schemaRecursiveRefMap, jsf.arrayMap\r\n      );\r\n      // Add list item layout to layoutRefLibrary\r\n      if (itemRefPointer.length && !hasOwn(jsf.layoutRefLibrary, itemRefPointer)) {\r\n        // Set to null first to prevent recursive reference from causing endless loop\r\n        jsf.layoutRefLibrary[itemRefPointer] = null;\r\n        jsf.layoutRefLibrary[itemRefPointer] = buildLayoutFromSchema(\r\n          jsf, widgetLibrary, null,\r\n          itemSchemaPointer,\r\n          itemRecursive ? '' : dataPointer + '/-',\r\n          true, 'list', removable, true, itemRecursive ? dataPointer + '/-' : ''\r\n        );\r\n        if (itemRecursive) {\r\n          jsf.layoutRefLibrary[itemRefPointer].recursiveReference = true;\r\n        }\r\n      }\r\n\r\n      // Add any additional default items\r\n      if (!itemRecursive || newNode.options.required) {\r\n        const arrayLength = Math.min(Math.max(\r\n          itemRecursive ? 0 :\r\n            newNode.options.tupleItems + newNode.options.listItems,\r\n          isArray(nodeValue) ? nodeValue.length : 0\r\n        ), newNode.options.maxItems);\r\n        if (newNode.items.length < arrayLength) {\r\n          for (let i = newNode.items.length; i < arrayLength; i++) {\r\n            newNode.items.push(getLayoutNode({\r\n              $ref: itemRefPointer,\r\n              dataPointer: dataPointer + '/-',\r\n              recursiveReference: itemRecursive,\r\n            }, jsf, widgetLibrary, isArray(nodeValue) ? nodeValue[i] : null));\r\n          }\r\n        }\r\n      }\r\n\r\n      // If needed, add button to add items to array\r\n      if (newNode.options.addable !== false &&\r\n        newNode.options.minItems < newNode.options.maxItems &&\r\n        (newNode.items[newNode.items.length - 1] || {}).type !== '$ref'\r\n      ) {\r\n        let buttonText =\r\n          ((jsf.layoutRefLibrary[itemRefPointer] || {}).options || {}).title;\r\n        const prefix = buttonText ? 'Add ' : 'Add to ';\r\n        if (!buttonText) {\r\n          buttonText = schema.title || fixTitle(JsonPointer.toKey(dataPointer));\r\n        }\r\n        if (!/^add\\b/i.test(buttonText)) { buttonText = prefix + buttonText; }\r\n        newNode.items.push({\r\n          _id: uniqueId(),\r\n          arrayItem: true,\r\n          arrayItemType: 'list',\r\n          dataPointer: newNode.dataPointer + '/-',\r\n          options: {\r\n            listItems: newNode.options.listItems,\r\n            maxItems: newNode.options.maxItems,\r\n            minItems: newNode.options.minItems,\r\n            removable: false,\r\n            title: buttonText,\r\n            tupleItems: newNode.options.tupleItems,\r\n          },\r\n          recursiveReference: itemRecursive,\r\n          type: '$ref',\r\n          widget: widgetLibrary.getWidget('$ref'),\r\n          $ref: itemRefPointer,\r\n        });\r\n      }\r\n    }\r\n\r\n  } else if (newNode.dataType === '$ref') {\r\n    const schemaRef = JsonPointer.compile(schema.$ref);\r\n    const dataRef = JsonPointer.toDataPointer(schemaRef, jsf.schema);\r\n    let buttonText = '';\r\n\r\n    // Get newNode title\r\n    if (newNode.options.add) {\r\n      buttonText = newNode.options.add;\r\n    } else if (newNode.name && !/^\\d+$/.test(newNode.name)) {\r\n      buttonText =\r\n        (/^add\\b/i.test(newNode.name) ? '' : 'Add ') + fixTitle(newNode.name);\r\n\r\n      // If newNode doesn't have a title, look for title of parent array item\r\n    } else {\r\n      const parentSchema =\r\n        JsonPointer.get(jsf.schema, schemaPointer, 0, -1);\r\n      if (hasOwn(parentSchema, 'title')) {\r\n        buttonText = 'Add to ' + parentSchema.title;\r\n      } else {\r\n        const pointerArray = JsonPointer.parse(newNode.dataPointer);\r\n        buttonText = 'Add to ' + fixTitle(pointerArray[pointerArray.length - 2]);\r\n      }\r\n    }\r\n    Object.assign(newNode, {\r\n      recursiveReference: true,\r\n      widget: widgetLibrary.getWidget('$ref'),\r\n      $ref: dataRef,\r\n    });\r\n    Object.assign(newNode.options, {\r\n      removable: false,\r\n      title: buttonText,\r\n    });\r\n    if (isNumber(JsonPointer.get(jsf.schema, schemaPointer, 0, -1).maxItems)) {\r\n      newNode.options.maxItems =\r\n        JsonPointer.get(jsf.schema, schemaPointer, 0, -1).maxItems;\r\n    }\r\n\r\n    // Add layout template to layoutRefLibrary\r\n    if (dataRef.length) {\r\n      if (!hasOwn(jsf.layoutRefLibrary, dataRef)) {\r\n        // Set to null first to prevent recursive reference from causing endless loop\r\n        jsf.layoutRefLibrary[dataRef] = null;\r\n        const newLayout = buildLayoutFromSchema(\r\n          jsf, widgetLibrary, null, schemaRef, '',\r\n          newNode.arrayItem, newNode.arrayItemType, true, true, dataPointer\r\n        );\r\n        if (newLayout) {\r\n          newLayout.recursiveReference = true;\r\n          jsf.layoutRefLibrary[dataRef] = newLayout;\r\n        } else {\r\n          delete jsf.layoutRefLibrary[dataRef];\r\n        }\r\n      } else if (!jsf.layoutRefLibrary[dataRef].recursiveReference) {\r\n        jsf.layoutRefLibrary[dataRef].recursiveReference = true;\r\n      }\r\n    }\r\n  }\r\n  return newNode;\r\n}\r\n\r\n/**\r\n * 'mapLayout' function\r\n *\r\n * Creates a new layout by running each element in an existing layout through\r\n * an iteratee. Recursively maps within array elements 'items' and 'tabs'.\r\n * The iteratee is invoked with four arguments: (value, index, layout, path)\r\n *\r\n * The returned layout may be longer (or shorter) then the source layout.\r\n *\r\n * If an item from the source layout returns multiple items (as '*' usually will),\r\n * this function will keep all returned items in-line with the surrounding items.\r\n *\r\n * If an item from the source layout causes an error and returns null, it is\r\n * skipped without error, and the function will still return all non-null items.\r\n *\r\n * //   layout - the layout to map\r\n * //  { (v: any, i?: number, l?: any, p?: string) => any }\r\n *   function - the funciton to invoke on each element\r\n * //  { string|string[] = '' } layoutPointer - the layoutPointer to layout, inside rootLayout\r\n * //  { any[] = layout } rootLayout - the root layout, which conatins layout\r\n * //\r\n */\r\nexport function mapLayout(layout, fn, layoutPointer = '', rootLayout = layout) {\r\n  let indexPad = 0;\r\n  let newLayout: any[] = [];\r\n  forEach(layout, (item, index) => {\r\n    const realIndex = +index + indexPad;\r\n    const newLayoutPointer = layoutPointer + '/' + realIndex;\r\n    let newNode: any = copy(item);\r\n    let itemsArray: any[] = [];\r\n    if (isObject(item)) {\r\n      if (hasOwn(item, 'tabs')) {\r\n        item.items = item.tabs;\r\n        delete item.tabs;\r\n      }\r\n      if (hasOwn(item, 'items')) {\r\n        itemsArray = isArray(item.items) ? item.items : [item.items];\r\n      }\r\n    }\r\n    if (itemsArray.length) {\r\n      newNode.items = mapLayout(itemsArray, fn, newLayoutPointer + '/items', rootLayout);\r\n    }\r\n    newNode = fn(newNode, realIndex, newLayoutPointer, rootLayout);\r\n    if (!isDefined(newNode)) {\r\n      indexPad--;\r\n    } else {\r\n      if (isArray(newNode)) { indexPad += newNode.length - 1; }\r\n      newLayout = newLayout.concat(newNode);\r\n    }\r\n  });\r\n  return newLayout;\r\n}\r\n\r\n/**\r\n * 'getLayoutNode' function\r\n * Copy a new layoutNode from layoutRefLibrary\r\n *\r\n * //   refNode -\r\n * //   layoutRefLibrary -\r\n * //  { any = null } widgetLibrary -\r\n * //  { any = null } nodeValue -\r\n * //  copied layoutNode\r\n */\r\nexport function getLayoutNode(\r\n  refNode, jsf, widgetLibrary: any = null, nodeValue: any = null\r\n) {\r\n\r\n  // If recursive reference and building initial layout, return Add button\r\n  if (refNode.recursiveReference && widgetLibrary) {\r\n    const newLayoutNode = cloneDeep(refNode);\r\n    if (!newLayoutNode.options) { newLayoutNode.options = {}; }\r\n    Object.assign(newLayoutNode, {\r\n      recursiveReference: true,\r\n      widget: widgetLibrary.getWidget('$ref'),\r\n    });\r\n    Object.assign(newLayoutNode.options, {\r\n      removable: false,\r\n      title: 'Add ' + newLayoutNode.$ref,\r\n    });\r\n    return newLayoutNode;\r\n\r\n    // Otherwise, return referenced layout\r\n  } else {\r\n    let newLayoutNode = jsf.layoutRefLibrary[refNode.$ref];\r\n    // If value defined, build new node from schema (to set array lengths)\r\n    if (isDefined(nodeValue)) {\r\n      newLayoutNode = buildLayoutFromSchema(\r\n        jsf, widgetLibrary, nodeValue,\r\n        JsonPointer.toSchemaPointer(refNode.$ref, jsf.schema),\r\n        refNode.$ref, newLayoutNode.arrayItem,\r\n        newLayoutNode.arrayItemType, newLayoutNode.options.removable, false\r\n      );\r\n    } else {\r\n      // If value not defined, copy node from layoutRefLibrary\r\n      newLayoutNode = cloneDeep(newLayoutNode);\r\n      JsonPointer.forEachDeep(newLayoutNode, (subNode, pointer) => {\r\n\r\n        // Reset all _id's in newLayoutNode to unique values\r\n        if (hasOwn(subNode, '_id')) { subNode._id = uniqueId(); }\r\n\r\n        // If adding a recursive item, prefix current dataPointer\r\n        // to all dataPointers in new layoutNode\r\n        if (refNode.recursiveReference && hasOwn(subNode, 'dataPointer')) {\r\n          subNode.dataPointer = refNode.dataPointer + subNode.dataPointer;\r\n        }\r\n      });\r\n    }\r\n    return newLayoutNode;\r\n  }\r\n}\r\n\r\n/**\r\n * 'buildTitleMap' function\r\n *\r\n * //   titleMap -\r\n * //   enumList -\r\n * //  { boolean = true } fieldRequired -\r\n * //  { boolean = true } flatList -\r\n * // { TitleMapItem[] }\r\n */\r\nexport function buildTitleMap(\r\n  titleMap, enumList, fieldRequired = true, flatList = true\r\n) {\r\n  let newTitleMap: TitleMapItem[] = [];\r\n  let hasEmptyValue = false;\r\n  if (titleMap) {\r\n    if (isArray(titleMap)) {\r\n      if (enumList) {\r\n        for (const i of Object.keys(titleMap)) {\r\n          if (isObject(titleMap[i])) { // JSON Form style\r\n            const value = titleMap[i].value;\r\n            if (enumList.includes(value)) {\r\n              const name = titleMap[i].name;\r\n              newTitleMap.push({ name, value });\r\n              if (value === undefined || value === null) { hasEmptyValue = true; }\r\n            }\r\n          } else if (isString(titleMap[i])) { // React Jsonschema Form style\r\n            if (i < enumList.length) {\r\n              const name = titleMap[i];\r\n              const value = enumList[i];\r\n              newTitleMap.push({ name, value });\r\n              if (value === undefined || value === null) { hasEmptyValue = true; }\r\n            }\r\n          }\r\n        }\r\n      } else { // If array titleMap and no enum list, just return the titleMap - Angular Schema Form style\r\n        newTitleMap = titleMap;\r\n        if (!fieldRequired) {\r\n          hasEmptyValue = !!newTitleMap\r\n            .filter(i => i.value === undefined || i.value === null)\r\n            .length;\r\n        }\r\n      }\r\n    } else if (enumList) { // Alternate JSON Form style, with enum list\r\n      for (const i of Object.keys(enumList)) {\r\n        const value = enumList[i];\r\n        if (hasOwn(titleMap, value)) {\r\n          const name = titleMap[value];\r\n          newTitleMap.push({ name, value });\r\n          if (value === undefined || value === null) { hasEmptyValue = true; }\r\n        }\r\n      }\r\n    } else { // Alternate JSON Form style, without enum list\r\n      for (const value of Object.keys(titleMap)) {\r\n        const name = titleMap[value];\r\n        newTitleMap.push({ name, value });\r\n        if (value === undefined || value === null) { hasEmptyValue = true; }\r\n      }\r\n    }\r\n  } else if (enumList) { // Build map from enum list alone\r\n    for (const i of Object.keys(enumList)) {\r\n      const name = enumList[i];\r\n      const value = enumList[i];\r\n      newTitleMap.push({ name, value });\r\n      if (value === undefined || value === null) { hasEmptyValue = true; }\r\n    }\r\n  } else { // If no titleMap and no enum list, return default map of boolean values\r\n    newTitleMap = [{ name: 'True', value: true }, { name: 'False', value: false }];\r\n  }\r\n\r\n  // Does titleMap have groups?\r\n  if (newTitleMap.some(title => hasOwn(title, 'group'))) {\r\n    hasEmptyValue = false;\r\n\r\n    // If flatList = true, flatten items & update name to group: name\r\n    if (flatList) {\r\n      newTitleMap = newTitleMap.reduce((groupTitleMap, title) => {\r\n        if (hasOwn(title, 'group')) {\r\n          if (isArray(title.items)) {\r\n            groupTitleMap = [\r\n              ...groupTitleMap,\r\n              ...title.items.map(item =>\r\n                ({ ...item, ...{ name: `${title.group}: ${item.name}` } })\r\n              )\r\n            ];\r\n            if (title.items.some(item => item.value === undefined || item.value === null)) {\r\n              hasEmptyValue = true;\r\n            }\r\n          }\r\n          if (hasOwn(title, 'name') && hasOwn(title, 'value')) {\r\n            title.name = `${title.group}: ${title.name}`;\r\n            delete title.group;\r\n            groupTitleMap.push(title);\r\n            if (title.value === undefined || title.value === null) {\r\n              hasEmptyValue = true;\r\n            }\r\n          }\r\n        } else {\r\n          groupTitleMap.push(title);\r\n          if (title.value === undefined || title.value === null) {\r\n            hasEmptyValue = true;\r\n          }\r\n        }\r\n        return groupTitleMap;\r\n      }, []);\r\n\r\n      // If flatList = false, combine items from matching groups\r\n    } else {\r\n      newTitleMap = newTitleMap.reduce((groupTitleMap, title) => {\r\n        if (hasOwn(title, 'group')) {\r\n          if (title.group !== (groupTitleMap[groupTitleMap.length - 1] || {}).group) {\r\n            groupTitleMap.push({ group: title.group, items: title.items || [] });\r\n          }\r\n          if (hasOwn(title, 'name') && hasOwn(title, 'value')) {\r\n            groupTitleMap[groupTitleMap.length - 1].items\r\n              .push({ name: title.name, value: title.value });\r\n            if (title.value === undefined || title.value === null) {\r\n              hasEmptyValue = true;\r\n            }\r\n          }\r\n        } else {\r\n          groupTitleMap.push(title);\r\n          if (title.value === undefined || title.value === null) {\r\n            hasEmptyValue = true;\r\n          }\r\n        }\r\n        return groupTitleMap;\r\n      }, []);\r\n    }\r\n  }\r\n  if (!fieldRequired && !hasEmptyValue) {\r\n    newTitleMap.unshift({ name: '<em>None</em>', value: null });\r\n  }\r\n  return newTitleMap;\r\n}\r\n","// Warning: Changing the following order may cause errors if the new order\r\n// causes a library to be imported before another library it depends on.\r\n\r\nexport {\r\n  _executeValidators, _executeAsyncValidators, _mergeObjects, _mergeErrors,\r\n  isDefined, hasValue, isEmpty, isString, isNumber, isInteger, isBoolean,\r\n  isFunction, isObject, isArray, isDate, isMap, isSet, isPromise, isObservable,\r\n  getType, isType, isPrimitive, toJavaScriptType, toSchemaType, _toPromise,\r\n  toObservable, inArray, xor, SchemaPrimitiveType, SchemaType, JavaScriptPrimitiveType,\r\n  JavaScriptType, PrimitiveValue, PlainObject, IValidatorFn, AsyncIValidatorFn\r\n} from './validator.functions';\r\n\r\nexport {\r\n  addClasses, copy, forEach, forEachCopy, hasOwn, mergeFilteredObject,\r\n  uniqueItems, commonItems, fixTitle, toTitleCase\r\n} from './utility.functions';\r\n\r\nexport { Pointer, JsonPointer } from './jsonpointer.functions';\r\n\r\nexport { JsonValidators } from './json.validators';\r\n\r\nexport {\r\n  buildSchemaFromLayout, buildSchemaFromData, getFromSchema,\r\n  removeRecursiveReferences, getInputType, checkInlineType, isInputRequired,\r\n  updateInputOptions, getTitleMapFromOneOf, getControlValidators,\r\n  resolveSchemaReferences, getSubSchema, combineAllOf, fixRequiredArrayProperties\r\n} from './json-schema.functions';\r\n\r\nexport { convertSchemaToDraft6 } from './convert-schema-to-draft6.function';\r\n\r\nexport { mergeSchemas } from './merge-schemas.function';\r\n\r\nexport {\r\n  buildFormGroupTemplate, buildFormGroup, formatFormData,\r\n  getControl, setRequiredFields\r\n} from './form-group.functions';\r\n\r\nexport {\r\n  buildLayout, buildLayoutFromSchema, mapLayout, getLayoutNode, buildTitleMap\r\n} from './layout.functions';\r\n","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { AbstractControl, UntypedFormArray, UntypedFormGroup } from '@angular/forms';\r\nimport Ajv, { ErrorObject, Options } from 'ajv';\r\nimport jsonDraft6 from 'ajv/lib/refs/json-schema-draft-06.json';\r\nimport cloneDeep from 'lodash/cloneDeep';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport {\r\n    deValidationMessages,\r\n    enValidationMessages,\r\n    esValidationMessages,\r\n    frValidationMessages,\r\n    itValidationMessages,\r\n    ptValidationMessages,\r\n    zhValidationMessages\r\n} from './locale';\r\nimport {\r\n    JsonPointer,\r\n    buildFormGroup,\r\n    buildFormGroupTemplate,\r\n    buildLayout,\r\n    buildSchemaFromData,\r\n    buildSchemaFromLayout,\r\n    fixTitle,\r\n    forEach,\r\n    formatFormData,\r\n    getControl,\r\n    getLayoutNode,\r\n    hasOwn,\r\n    hasValue,\r\n    isArray,\r\n    isDefined,\r\n    isEmpty,\r\n    isObject,\r\n    removeRecursiveReferences,\r\n    toTitleCase\r\n} from './shared';\r\n\r\nimport _isEqual from 'lodash/isEqual';\r\n\r\n\r\nexport interface TitleMapItem {\r\n  name?: string;\r\n  value?: any;\r\n  checked?: boolean;\r\n  group?: string;\r\n  items?: TitleMapItem[];\r\n}\r\nexport interface ErrorMessages {\r\n  [control_name: string]: {\r\n    message: string | Function | Object;\r\n    code: string;\r\n  }[];\r\n}\r\n\r\n@Injectable()\r\nexport class JsonSchemaFormService implements OnDestroy {\r\n  JsonFormCompatibility = false;\r\n  ReactJsonSchemaFormCompatibility = false;\r\n  AngularSchemaFormCompatibility = false;\r\n  tpldata: any = {};\r\n\r\n  ajvOptions: Options = {\r\n    allErrors: true,\r\n    validateFormats:false,\r\n    strict:false\r\n  \r\n  };\r\n  ajv:any = new Ajv(this.ajvOptions); // AJV: Another JSON Schema Validator\r\n  \r\n  validateFormData: any = null; // Compiled AJV function to validate active form's schema\r\n\r\n  formValues: any = {}; // Internal form data (may not have correct types)\r\n  data: any = {}; // Output form data (formValues, formatted with correct data types)\r\n  schema: any = {}; // Internal JSON Schema\r\n  layout: any[] = []; // Internal form layout\r\n  formGroupTemplate: any = {}; // Template used to create formGroup\r\n  formGroup: any = null; // Angular formGroup, which powers the reactive form\r\n  framework: any = null; // Active framework component\r\n  formOptions: any; // Active options, used to configure the form\r\n\r\n  validData: any = null; // Valid form data (or null) (=== isValid ? data : null)\r\n  isValid: boolean = null; // Is current form data valid?\r\n  ajvErrors: ErrorObject[] = null; // Ajv errors for current data\r\n  validationErrors: any = null; // Any validation errors for current data\r\n  dataErrors: any = new Map(); //\r\n  formValueSubscription: any = null; // Subscription to formGroup.valueChanges observable (for un- and re-subscribing)\r\n  dataChanges: Subject<any> = new Subject(); // Form data observable\r\n  isValidChanges: Subject<any> = new Subject(); // isValid observable\r\n  validationErrorChanges: Subject<any> = new Subject(); // validationErrors observable\r\n\r\n  arrayMap: Map<string, number> = new Map(); // Maps arrays in data object and number of tuple values\r\n  dataMap: Map<string, any> = new Map(); // Maps paths in form data to schema and formGroup paths\r\n  dataRecursiveRefMap: Map<string, string> = new Map(); // Maps recursive reference points in form data\r\n  schemaRecursiveRefMap: Map<string, string> = new Map(); // Maps recursive reference points in schema\r\n  schemaRefLibrary: any = {}; // Library of schemas for resolving schema $refs\r\n  layoutRefLibrary: any = { '': null }; // Library of layout nodes for adding to form\r\n  templateRefLibrary: any = {}; // Library of formGroup templates for adding to form\r\n  hasRootReference = false; // Does the form include a recursive reference to itself?\r\n\r\n  language = 'en-US'; // Does the form include a recursive reference to itself?\r\n\r\n  // Default global form options\r\n  defaultFormOptions: any = {\r\n    autocomplete: true, // Allow the web browser to remember previous form submission values as defaults\r\n    addSubmit: 'auto', // Add a submit button if layout does not have one?\r\n    // for addSubmit: true = always, false = never,\r\n    // 'auto' = only if layout is undefined (form is built from schema alone)\r\n    debug: false, // Show debugging output?\r\n    disableInvalidSubmit: true, // Disable submit if form invalid?\r\n    formDisabled: false, // Set entire form as disabled? (not editable, and disables outputs)\r\n    formReadonly: false, // Set entire form as read only? (not editable, but outputs still enabled)\r\n    fieldsRequired: false, // (set automatically) Are there any required fields in the form?\r\n    framework: 'no-framework', // The framework to load\r\n    loadExternalAssets: false, // Load external css and JavaScript for framework?\r\n    pristine: { errors: true, success: true },\r\n    supressPropertyTitles: false,\r\n    setSchemaDefaults: 'auto', // Set fefault values from schema?\r\n    // true = always set (unless overridden by layout default or formValues)\r\n    // false = never set\r\n    // 'auto' = set in addable components, and everywhere if formValues not set\r\n    setLayoutDefaults: 'auto', // Set fefault values from layout?\r\n    // true = always set (unless overridden by formValues)\r\n    // false = never set\r\n    // 'auto' = set in addable components, and everywhere if formValues not set\r\n    validateOnRender: 'auto', // Validate fields immediately, before they are touched?\r\n    // true = validate all fields immediately\r\n    // false = only validate fields after they are touched by user\r\n    // 'auto' = validate fields with values immediately, empty fields after they are touched\r\n    widgets: {}, // Any custom widgets to load\r\n    defaultWidgetOptions: {\r\n      // Default options for form control widgets\r\n      listItems: 1, // Number of list items to initially add to arrays with no default value\r\n      addable: true, // Allow adding items to an array or $ref point?\r\n      orderable: true, // Allow reordering items within an array?\r\n      removable: true, // Allow removing items from an array or $ref point?\r\n      enableErrorState: true, // Apply 'has-error' class when field fails validation?\r\n      // disableErrorState: false, // Don't apply 'has-error' class when field fails validation?\r\n      enableSuccessState: true, // Apply 'has-success' class when field validates?\r\n      // disableSuccessState: false, // Don't apply 'has-success' class when field validates?\r\n      feedback: false, // Show inline feedback icons?\r\n      feedbackOnRender: false, // Show errorMessage on Render?\r\n      notitle: false, // Hide title?\r\n      disabled: false, // Set control as disabled? (not editable, and excluded from output)\r\n      readonly: false, // Set control as read only? (not editable, but included in output)\r\n      returnEmptyFields: true, // return values for fields that contain no data?\r\n      validationMessages: {} // set by setLanguage()\r\n    }\r\n  };\r\n\r\n  fcValueChangesSubs:Subscription;\r\n  fcStatusChangesSubs:Subscription;\r\n  constructor() {\r\n    this.setLanguage(this.language);\r\n    this.ajv.addMetaSchema(jsonDraft6);\r\n  }\r\n  ngOnDestroy(): void {\r\n    this.fcValueChangesSubs?.unsubscribe();\r\n    this.fcStatusChangesSubs?.unsubscribe();\r\n    this.formValueSubscription?.unsubscribe();\r\n    this.fcValueChangesSubs=null;\r\n    this.fcStatusChangesSubs=null;\r\n    this.formValueSubscription=null;\r\n\r\n  }\r\n\r\n  setLanguage(language: string = 'en-US') {\r\n    this.language = language;\r\n    const languageValidationMessages = {\r\n      de: deValidationMessages,\r\n      en: enValidationMessages,\r\n      es: esValidationMessages,\r\n      fr: frValidationMessages,\r\n      it: itValidationMessages,\r\n      pt: ptValidationMessages,\r\n      zh: zhValidationMessages,\r\n    };\r\n    const languageCode = language.slice(0, 2);\r\n\r\n    const validationMessages = languageValidationMessages[languageCode];\r\n\r\n    this.defaultFormOptions.defaultWidgetOptions.validationMessages = cloneDeep(\r\n      validationMessages\r\n    );\r\n  }\r\n\r\n  getData() {\r\n    return this.data;\r\n  }\r\n\r\n  getSchema() {\r\n    return this.schema;\r\n  }\r\n\r\n  getLayout() {\r\n    return this.layout;\r\n  }\r\n\r\n  resetAllValues() {\r\n    this.JsonFormCompatibility = false;\r\n    this.ReactJsonSchemaFormCompatibility = false;\r\n    this.AngularSchemaFormCompatibility = false;\r\n    this.tpldata = {};\r\n    this.validateFormData = null;\r\n    this.formValues = {};\r\n    this.schema = {};\r\n    this.layout = [];\r\n    this.formGroupTemplate = {};\r\n    this.formGroup = null;\r\n    this.framework = null;\r\n    this.data = {};\r\n    this.validData = null;\r\n    this.isValid = null;\r\n    this.validationErrors = null;\r\n    this.arrayMap = new Map();\r\n    this.dataMap = new Map();\r\n    this.dataRecursiveRefMap = new Map();\r\n    this.schemaRecursiveRefMap = new Map();\r\n    this.layoutRefLibrary = {};\r\n    this.schemaRefLibrary = {};\r\n    this.templateRefLibrary = {};\r\n    this.formOptions = cloneDeep(this.defaultFormOptions);\r\n  }\r\n\r\n  /**\r\n   * 'buildRemoteError' function\r\n   *\r\n   * Example errors:\r\n   * {\r\n   *   last_name: [ {\r\n   *     message: 'Last name must by start with capital letter.',\r\n   *     code: 'capital_letter'\r\n   *   } ],\r\n   *   email: [ {\r\n   *     message: 'Email must be from example.com domain.',\r\n   *     code: 'special_domain'\r\n   *   }, {\r\n   *     message: 'Email must contain an @ symbol.',\r\n   *     code: 'at_symbol'\r\n   *   } ]\r\n   * }\r\n   * //{ErrorMessages} errors\r\n   */\r\n  buildRemoteError(errors: ErrorMessages) {\r\n    forEach(errors, (value, key) => {\r\n      if (key in this.formGroup.controls) {\r\n        for (const error of value) {\r\n          const err = {};\r\n          err[error['code']] = error['message'];\r\n          this.formGroup.get(key).setErrors(err, { emitEvent: true });\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  validateData(newValue: any, updateSubscriptions = true): void {\r\n    // Format raw form data to correct data types\r\n    this.data = formatFormData(\r\n      newValue,\r\n      this.dataMap,\r\n      this.dataRecursiveRefMap,\r\n      this.arrayMap,\r\n      this.formOptions.returnEmptyFields\r\n    );\r\n    this.isValid = this.validateFormData(this.data);\r\n    this.validData = this.isValid ? this.data : null;\r\n    const compileErrors = (errors:ErrorObject[]) => {\r\n      const compiledErrors = {};\r\n      (errors || []).forEach(error => {\r\n        //TODO review-seems to be a change in newer versions\r\n        //of ajv giving '' as instancePath for root objects\r\n        let errorPath=error.instancePath||\"ROOT\";\r\n        if (!compiledErrors[errorPath]) {\r\n          compiledErrors[errorPath] = [];\r\n        }\r\n        compiledErrors[errorPath].push(error.message);\r\n      });\r\n      return compiledErrors;\r\n    };\r\n    this.ajvErrors = this.validateFormData.errors;\r\n    this.validationErrors = compileErrors(this.validateFormData.errors);\r\n    if (updateSubscriptions) {\r\n      this.dataChanges.next(this.data);\r\n      this.isValidChanges.next(this.isValid);\r\n      this.validationErrorChanges.next(this.ajvErrors);\r\n    }\r\n  }\r\n\r\n  buildFormGroupTemplate(formValues: any = null, setValues = true) {\r\n    this.formGroupTemplate = buildFormGroupTemplate(\r\n      this,\r\n      formValues,\r\n      setValues\r\n    );\r\n  }\r\n\r\n  buildFormGroup() {\r\n    this.formGroup = <UntypedFormGroup>buildFormGroup(this.formGroupTemplate);\r\n    if (this.formGroup) {\r\n      this.compileAjvSchema();\r\n      this.validateData(this.formGroup.value);\r\n\r\n      // Set up observables to emit data and validation info when form data changes\r\n      if (this.formValueSubscription) {\r\n        this.formValueSubscription.unsubscribe();\r\n      }\r\n      this.formValueSubscription = this.formGroup.valueChanges.subscribe(\r\n        formValue => this.validateData(formValue)\r\n      );\r\n    }\r\n  }\r\n\r\n  buildLayout(widgetLibrary: any) {\r\n    this.layout = buildLayout(this, widgetLibrary);\r\n  }\r\n\r\n  setOptions(newOptions: any) {\r\n    if (isObject(newOptions)) {\r\n      const addOptions = cloneDeep(newOptions);\r\n      // Backward compatibility for 'defaultOptions' (renamed 'defaultWidgetOptions')\r\n      if (isObject(addOptions.defaultOptions)) {\r\n        Object.assign(\r\n          this.formOptions.defaultWidgetOptions,\r\n          addOptions.defaultOptions\r\n        );\r\n        delete addOptions.defaultOptions;\r\n      }\r\n      if (isObject(addOptions.defaultWidgetOptions)) {\r\n        Object.assign(\r\n          this.formOptions.defaultWidgetOptions,\r\n          addOptions.defaultWidgetOptions\r\n        );\r\n        delete addOptions.defaultWidgetOptions;\r\n      }\r\n      Object.assign(this.formOptions, addOptions);\r\n\r\n      // convert disableErrorState / disableSuccessState to enable...\r\n      const globalDefaults = this.formOptions.defaultWidgetOptions;\r\n      ['ErrorState', 'SuccessState']\r\n        .filter(suffix => hasOwn(globalDefaults, 'disable' + suffix))\r\n        .forEach(suffix => {\r\n          globalDefaults['enable' + suffix] = !globalDefaults[\r\n            'disable' + suffix\r\n          ];\r\n          delete globalDefaults['disable' + suffix];\r\n        });\r\n    }\r\n  }\r\n\r\n  compileAjvSchema() {\r\n    if (!this.validateFormData) {\r\n      // if 'ui:order' exists in properties, move it to root before compiling with ajv\r\n      if (Array.isArray(this.schema.properties['ui:order'])) {\r\n        this.schema['ui:order'] = this.schema.properties['ui:order'];\r\n        delete this.schema.properties['ui:order'];\r\n      }\r\n      this.ajv.removeSchema(this.schema);\r\n      this.validateFormData = this.ajv.compile(this.schema);\r\n    }\r\n  }\r\n\r\n  buildSchemaFromData(data?: any, requireAllFields = false): any {\r\n    if (data) {\r\n      return buildSchemaFromData(data, requireAllFields);\r\n    }\r\n    this.schema = buildSchemaFromData(this.formValues, requireAllFields);\r\n  }\r\n\r\n  buildSchemaFromLayout(layout?: any): any {\r\n    if (layout) {\r\n      return buildSchemaFromLayout(layout);\r\n    }\r\n    this.schema = buildSchemaFromLayout(this.layout);\r\n  }\r\n\r\n  setTpldata(newTpldata: any = {}): void {\r\n    this.tpldata = newTpldata;\r\n  }\r\n\r\n  parseText(\r\n    text = '',\r\n    value: any = {},\r\n    values: any = {},\r\n    key: number | string = null\r\n  ): string {\r\n    if (!text || !/{{.+?}}/.test(text)) {\r\n      return text;\r\n    }\r\n    return text.replace(/{{(.+?)}}/g, (...a) =>\r\n      this.parseExpression(a[1], value, values, key, this.tpldata)\r\n    );\r\n  }\r\n\r\n  parseExpression(\r\n    expression = '',\r\n    value: any = {},\r\n    values: any = {},\r\n    key: number | string = null,\r\n    tpldata: any = null\r\n  ) {\r\n    if (typeof expression !== 'string') {\r\n      return '';\r\n    }\r\n    const index = typeof key === 'number' ? key + 1 + '' : key || '';\r\n    expression = expression.trim();\r\n    if (\r\n      (expression[0] === \"'\" || expression[0] === '\"') &&\r\n      expression[0] === expression[expression.length - 1] &&\r\n      expression.slice(1, expression.length - 1).indexOf(expression[0]) === -1\r\n    ) {\r\n      return expression.slice(1, expression.length - 1);\r\n    }\r\n    if (expression === 'idx' || expression === '$index') {\r\n      return index;\r\n    }\r\n    if (expression === 'value' && !hasOwn(values, 'value')) {\r\n      return value;\r\n    }\r\n    if (\r\n      ['\"', \"'\", ' ', '||', '&&', '+'].every(\r\n        delim => expression.indexOf(delim) === -1\r\n      )\r\n    ) {\r\n      const pointer = JsonPointer.parseObjectPath(expression);\r\n      return pointer[0] === 'value' && JsonPointer.has(value, pointer.slice(1))\r\n        ? JsonPointer.get(value, pointer.slice(1))\r\n        : pointer[0] === 'values' && JsonPointer.has(values, pointer.slice(1))\r\n          ? JsonPointer.get(values, pointer.slice(1))\r\n          : pointer[0] === 'tpldata' && JsonPointer.has(tpldata, pointer.slice(1))\r\n            ? JsonPointer.get(tpldata, pointer.slice(1))\r\n            : JsonPointer.has(values, pointer)\r\n              ? JsonPointer.get(values, pointer)\r\n              : '';\r\n    }\r\n    if (expression.indexOf('[idx]') > -1) {\r\n      expression = expression.replace(/\\[idx\\]/g, <string>index);\r\n    }\r\n    if (expression.indexOf('[$index]') > -1) {\r\n      expression = expression.replace(/\\[$index\\]/g, <string>index);\r\n    }\r\n    // TODO: Improve expression evaluation by parsing quoted strings first\r\n    // let expressionArray = expression.match(/([^\"']+|\"[^\"]+\"|'[^']+')/g);\r\n    if (expression.indexOf('||') > -1) {\r\n      return expression\r\n        .split('||')\r\n        .reduce(\r\n          (all, term) =>\r\n            all || this.parseExpression(term, value, values, key, tpldata),\r\n          ''\r\n        );\r\n    }\r\n    if (expression.indexOf('&&') > -1) {\r\n      return expression\r\n        .split('&&')\r\n        .reduce(\r\n          (all, term) =>\r\n            all && this.parseExpression(term, value, values, key, tpldata),\r\n          ' '\r\n        )\r\n        .trim();\r\n    }\r\n    if (expression.indexOf('+') > -1) {\r\n      return expression\r\n        .split('+')\r\n        .map(term => this.parseExpression(term, value, values, key, tpldata))\r\n        .join('');\r\n    }\r\n    return '';\r\n  }\r\n\r\n  setArrayItemTitle(\r\n    parentCtx: any = {},\r\n    childNode: any = null,\r\n    index: number = null\r\n  ): string {\r\n    const parentNode = parentCtx.layoutNode;\r\n    const parentValues: any = this.getFormControlValue(parentCtx);\r\n    const isArrayItem =\r\n      (parentNode.type || '').slice(-5) === 'array' && isArray(parentValues);\r\n    const text = JsonPointer.getFirst(\r\n      isArrayItem && childNode.type !== '$ref'\r\n        ? [\r\n          [childNode, '/options/legend'],\r\n          [childNode, '/options/title'],\r\n          [parentNode, '/options/title'],\r\n          [parentNode, '/options/legend']\r\n        ]\r\n        : [\r\n          [childNode, '/options/title'],\r\n          [childNode, '/options/legend'],\r\n          [parentNode, '/options/title'],\r\n          [parentNode, '/options/legend']\r\n        ]\r\n    );\r\n    if (!text) {\r\n      return text;\r\n    }\r\n    const childValue =\r\n      isArray(parentValues) && index < parentValues.length\r\n        ? parentValues[index]\r\n        : parentValues;\r\n    return this.parseText(text, childValue, parentValues, index);\r\n  }\r\n\r\n  setItemTitle(ctx: any) {\r\n    return !ctx.options.title && /^(\\d+|-)$/.test(ctx.layoutNode.name)\r\n      ? null\r\n      : this.parseText(\r\n        ctx.options.title || toTitleCase(ctx.layoutNode.name),\r\n        this.getFormControlValue(this),\r\n        (this.getFormControlGroup(this) || <any>{}).value,\r\n        ctx.dataIndex[ctx.dataIndex.length - 1]\r\n      );\r\n  }\r\n\r\n  evaluateCondition(layoutNode: any, dataIndex: number[]): boolean {\r\n    const arrayIndex = dataIndex && dataIndex[dataIndex.length - 1];\r\n    let result = true;\r\n    if (hasValue((layoutNode.options || {}).condition)) {\r\n      if (typeof layoutNode.options.condition === 'string') {\r\n        let pointer = layoutNode.options.condition;\r\n        if (hasValue(arrayIndex)) {\r\n          pointer = pointer.replace('[arrayIndex]', `[${arrayIndex}]`);\r\n        }\r\n        pointer = JsonPointer.parseObjectPath(pointer);\r\n        result = !!JsonPointer.get(this.data, pointer);\r\n        if (!result && pointer[0] === 'model') {\r\n          result = !!JsonPointer.get({ model: this.data }, pointer);\r\n        }\r\n      } else if (typeof layoutNode.options.condition === 'function') {\r\n        result = layoutNode.options.condition(this.data);\r\n      } else if (\r\n        typeof layoutNode.options.condition.functionBody === 'string'\r\n      ) {\r\n        try {\r\n          const dynFn = new Function(\r\n            'model',\r\n            'arrayIndices',\r\n            layoutNode.options.condition.functionBody\r\n          );\r\n          result = dynFn(this.data, dataIndex);\r\n        } catch (e) {\r\n          result = true;\r\n          console.error(\r\n            'condition functionBody errored out on evaluation: ' +\r\n            layoutNode.options.condition.functionBody\r\n          );\r\n        }\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  initializeControl(ctx: any, bind = true): boolean {\r\n    if (!isObject(ctx)) {\r\n      return false;\r\n    }\r\n    if (isEmpty(ctx.options)) {\r\n      ctx.options = !isEmpty((ctx.layoutNode || {}).options)\r\n        ? ctx.layoutNode.options\r\n        : cloneDeep(this.formOptions);\r\n    }\r\n    ctx.formControl = this.getFormControl(ctx);\r\n    ctx.boundControl = bind && !!ctx.formControl;\r\n    if (ctx.formControl) {\r\n      ctx.controlName = this.getFormControlName(ctx);\r\n      ctx.controlValue = ctx.formControl.value;\r\n      ctx.controlDisabled = ctx.formControl.disabled;\r\n      ctx.options.errorMessage =\r\n        ctx.formControl.status === 'VALID'\r\n          ? null\r\n          : this.formatErrors(\r\n            ctx.formControl.errors,\r\n            ctx.options.validationMessages\r\n          );\r\n      ctx.options.showErrors =\r\n        this.formOptions.validateOnRender === true ||\r\n        (this.formOptions.validateOnRender === 'auto' &&\r\n          hasValue(ctx.controlValue));\r\n      this.fcStatusChangesSubs=ctx.formControl.statusChanges.subscribe(\r\n        status =>\r\n          (ctx.options.errorMessage =\r\n            status === 'VALID'\r\n              ? null\r\n              : this.formatErrors(\r\n                ctx.formControl.errors,\r\n                ctx.options.validationMessages\r\n              ))\r\n      );\r\n      this.fcValueChangesSubs=ctx.formControl.valueChanges.subscribe(value => {\r\n         //commented out to revert back to previous commits\r\n         //as seems to be causing some issues\r\n         /*\r\n        if (!!value) {\r\n          ctx.controlValue = value;\r\n        }\r\n        */\r\n        //TODO-test,this is the original code\r\n        if (!_isEqual(ctx.controlValue, value)) { ctx.controlValue = value }\r\n      });\r\n    } else {\r\n      ctx.controlName = ctx.layoutNode.name;\r\n      ctx.controlValue = ctx.layoutNode.value || null;\r\n      const dataPointer = this.getDataPointer(ctx);\r\n      if (bind && dataPointer) {\r\n        console.error(\r\n          `warning: control \"${dataPointer}\" is not bound to the Angular FormGroup.`\r\n        );\r\n      }\r\n    }\r\n    return ctx.boundControl;\r\n  }\r\n\r\n  formatErrors(errors: any, validationMessages: any = {}): string {\r\n    if (isEmpty(errors)) {\r\n      return null;\r\n    }\r\n    if (!isObject(validationMessages)) {\r\n      validationMessages = {};\r\n    }\r\n    const addSpaces = string =>\r\n      string[0].toUpperCase() +\r\n      (string.slice(1) || '')\r\n        .replace(/([a-z])([A-Z])/g, '$1 $2')\r\n        .replace(/_/g, ' ');\r\n    const formatError = error =>\r\n      typeof error === 'object'\r\n        ? Object.keys(error)\r\n          .map(key =>\r\n            error[key] === true\r\n              ? addSpaces(key)\r\n              : error[key] === false\r\n                ? 'Not ' + addSpaces(key)\r\n                : addSpaces(key) + ': ' + formatError(error[key])\r\n          )\r\n          .join(', ')\r\n        : addSpaces(error.toString());\r\n    const messages = [];\r\n    return (\r\n      Object.keys(errors)\r\n        // Hide 'required' error, unless it is the only one\r\n        .filter(\r\n          errorKey =>\r\n            errorKey !== 'required' || Object.keys(errors).length === 1\r\n        )\r\n        .map(errorKey =>\r\n          // If validationMessages is a string, return it\r\n          typeof validationMessages === 'string'\r\n            ? validationMessages\r\n            : // If custom error message is a function, return function result\r\n            typeof validationMessages[errorKey] === 'function'\r\n              ? validationMessages[errorKey](errors[errorKey])\r\n              : // If custom error message is a string, replace placeholders and return\r\n              typeof validationMessages[errorKey] === 'string'\r\n                ? // Does error message have any {{property}} placeholders?\r\n                !/{{.+?}}/.test(validationMessages[errorKey])\r\n                  ? validationMessages[errorKey]\r\n                  : // Replace {{property}} placeholders with values\r\n                  Object.keys(errors[errorKey]).reduce(\r\n                    (errorMessage, errorProperty) =>\r\n                      errorMessage.replace(\r\n                        new RegExp('{{' + errorProperty + '}}', 'g'),\r\n                        errors[errorKey][errorProperty]\r\n                      ),\r\n                    validationMessages[errorKey]\r\n                  )\r\n                : // If no custom error message, return formatted error data instead\r\n                addSpaces(errorKey) + ' Error: ' + formatError(errors[errorKey])\r\n        )\r\n        .join('<br>')\r\n    );\r\n  }\r\n\r\n  updateValue(ctx: any, value: any): void {\r\n    // Set value of current control\r\n    ctx.controlValue = value;\r\n    if (ctx.boundControl) {\r\n      ctx.formControl.setValue(value);\r\n      ctx.formControl.markAsDirty();\r\n    }\r\n    ctx.layoutNode.value = value;\r\n\r\n    // Set values of any related controls in copyValueTo array\r\n    if (isArray(ctx.options.copyValueTo)) {\r\n      for (const item of ctx.options.copyValueTo) {\r\n        const targetControl = getControl(this.formGroup, item);\r\n        if (\r\n          isObject(targetControl) &&\r\n          typeof targetControl.setValue === 'function'\r\n        ) {\r\n          targetControl.setValue(value);\r\n          targetControl.markAsDirty();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  updateArrayCheckboxList(ctx: any, checkboxList: TitleMapItem[]): void {\r\n    const formArray = <UntypedFormArray>this.getFormControl(ctx);\r\n\r\n    // Remove all existing items\r\n    while (formArray.value.length) {\r\n      formArray.removeAt(0);\r\n    }\r\n\r\n    // Re-add an item for each checked box\r\n    const refPointer = removeRecursiveReferences(\r\n      ctx.layoutNode.dataPointer + '/-',\r\n      this.dataRecursiveRefMap,\r\n      this.arrayMap\r\n    );\r\n    for (const checkboxItem of checkboxList) {\r\n      if (checkboxItem.checked) {\r\n        const newFormControl = buildFormGroup(\r\n          this.templateRefLibrary[refPointer]\r\n        );\r\n        newFormControl.setValue(checkboxItem.value);\r\n        formArray.push(newFormControl);\r\n      }\r\n    }\r\n    formArray.markAsDirty();\r\n  }\r\n\r\n  getFormControl(ctx: any): AbstractControl {\r\n    if (\r\n      !ctx.layoutNode ||\r\n      !isDefined(ctx.layoutNode.dataPointer) ||\r\n      ctx.layoutNode.type === '$ref'\r\n    ) {\r\n      return null;\r\n    }\r\n    return getControl(this.formGroup, this.getDataPointer(ctx));\r\n  }\r\n\r\n  getFormControlValue(ctx: any): AbstractControl {\r\n    if (\r\n      !ctx.layoutNode ||\r\n      !isDefined(ctx.layoutNode.dataPointer) ||\r\n      ctx.layoutNode.type === '$ref'\r\n    ) {\r\n      return null;\r\n    }\r\n    const control = getControl(this.formGroup, this.getDataPointer(ctx));\r\n    return control ? control.value : null;\r\n  }\r\n\r\n  getFormControlGroup(ctx: any): UntypedFormArray | UntypedFormGroup {\r\n    if (!ctx.layoutNode || !isDefined(ctx.layoutNode.dataPointer)) {\r\n      return null;\r\n    }\r\n    return getControl(this.formGroup, this.getDataPointer(ctx), true);\r\n  }\r\n\r\n  getFormControlName(ctx: any): string {\r\n    if (\r\n      !ctx.layoutNode ||\r\n      !isDefined(ctx.layoutNode.dataPointer) ||\r\n      !hasValue(ctx.dataIndex)\r\n    ) {\r\n      return null;\r\n    }\r\n    return JsonPointer.toKey(this.getDataPointer(ctx));\r\n  }\r\n\r\n  getLayoutArray(ctx: any): any[] {\r\n    return JsonPointer.get(this.layout, this.getLayoutPointer(ctx), 0, -1);\r\n  }\r\n\r\n  getParentNode(ctx: any): any {\r\n    return JsonPointer.get(this.layout, this.getLayoutPointer(ctx), 0, -2);\r\n  }\r\n\r\n  getDataPointer(ctx: any): string {\r\n    if (\r\n      !ctx.layoutNode ||\r\n      !isDefined(ctx.layoutNode.dataPointer) ||\r\n      !hasValue(ctx.dataIndex)\r\n    ) {\r\n      return null;\r\n    }\r\n    return JsonPointer.toIndexedPointer(\r\n      ctx.layoutNode.dataPointer,\r\n      ctx.dataIndex,\r\n      this.arrayMap\r\n    );\r\n  }\r\n\r\n  getLayoutPointer(ctx: any): string {\r\n    if (!hasValue(ctx.layoutIndex)) {\r\n      return null;\r\n    }\r\n    return '/' + ctx.layoutIndex.join('/items/');\r\n  }\r\n\r\n  isControlBound(ctx: any): boolean {\r\n    if (\r\n      !ctx.layoutNode ||\r\n      !isDefined(ctx.layoutNode.dataPointer) ||\r\n      !hasValue(ctx.dataIndex)\r\n    ) {\r\n      return false;\r\n    }\r\n    const controlGroup = this.getFormControlGroup(ctx);\r\n    const name = this.getFormControlName(ctx);\r\n    return controlGroup ? hasOwn(controlGroup.controls, name) : false;\r\n  }\r\n\r\n  addItem(ctx: any, name?: string): boolean {\r\n    if (\r\n      !ctx.layoutNode ||\r\n      !isDefined(ctx.layoutNode.$ref) ||\r\n      !hasValue(ctx.dataIndex) ||\r\n      !hasValue(ctx.layoutIndex)\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    // Create a new Angular form control from a template in templateRefLibrary\r\n    const newFormGroup = buildFormGroup(\r\n      this.templateRefLibrary[ctx.layoutNode.$ref]\r\n    );\r\n\r\n    // Add the new form control to the parent formArray or formGroup\r\n    if (ctx.layoutNode.arrayItem) {\r\n      // Add new array item to formArray\r\n      (<UntypedFormArray>this.getFormControlGroup(ctx)).push(newFormGroup);\r\n    } else {\r\n      // Add new $ref item to formGroup\r\n      (<UntypedFormGroup>this.getFormControlGroup(ctx)).addControl(\r\n        name || this.getFormControlName(ctx),\r\n        newFormGroup\r\n      );\r\n    }\r\n\r\n    // Copy a new layoutNode from layoutRefLibrary\r\n    const newLayoutNode = getLayoutNode(ctx.layoutNode, this);\r\n    newLayoutNode.arrayItem = ctx.layoutNode.arrayItem;\r\n    if (ctx.layoutNode.arrayItemType) {\r\n      newLayoutNode.arrayItemType = ctx.layoutNode.arrayItemType;\r\n    } else {\r\n      delete newLayoutNode.arrayItemType;\r\n    }\r\n    if (name) {\r\n      newLayoutNode.name = name;\r\n      newLayoutNode.dataPointer += '/' + JsonPointer.escape(name);\r\n      newLayoutNode.options.title = fixTitle(name);\r\n    }\r\n\r\n    // Add the new layoutNode to the form layout\r\n    JsonPointer.insert(this.layout, this.getLayoutPointer(ctx), newLayoutNode);\r\n\r\n    return true;\r\n  }\r\n\r\n  moveArrayItem(ctx: any, oldIndex: number, newIndex: number): boolean {\r\n    if (\r\n      !ctx.layoutNode ||\r\n      !isDefined(ctx.layoutNode.dataPointer) ||\r\n      !hasValue(ctx.dataIndex) ||\r\n      !hasValue(ctx.layoutIndex) ||\r\n      !isDefined(oldIndex) ||\r\n      !isDefined(newIndex) ||\r\n      oldIndex === newIndex\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    // Move item in the formArray\r\n    const formArray = <UntypedFormArray>this.getFormControlGroup(ctx);\r\n    const arrayItem = formArray.at(oldIndex);\r\n    formArray.removeAt(oldIndex);\r\n    formArray.insert(newIndex, arrayItem);\r\n    formArray.updateValueAndValidity();\r\n\r\n    // Move layout item\r\n    const layoutArray = this.getLayoutArray(ctx);\r\n    layoutArray.splice(newIndex, 0, layoutArray.splice(oldIndex, 1)[0]);\r\n    return true;\r\n  }\r\n\r\n  removeItem(ctx: any): boolean {\r\n    if (\r\n      !ctx.layoutNode ||\r\n      !isDefined(ctx.layoutNode.dataPointer) ||\r\n      !hasValue(ctx.dataIndex) ||\r\n      !hasValue(ctx.layoutIndex)\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    // Remove the Angular form control from the parent formArray or formGroup\r\n    if (ctx.layoutNode.arrayItem) {\r\n      // Remove array item from formArray\r\n      (<UntypedFormArray>this.getFormControlGroup(ctx)).removeAt(\r\n        ctx.dataIndex[ctx.dataIndex.length - 1]\r\n      );\r\n    } else {\r\n      // Remove $ref item from formGroup\r\n      (<UntypedFormGroup>this.getFormControlGroup(ctx)).removeControl(\r\n        this.getFormControlName(ctx)\r\n      );\r\n    }\r\n\r\n    // Remove layoutNode from layout\r\n    JsonPointer.remove(this.layout, this.getLayoutPointer(ctx));\r\n    return true;\r\n  }\r\n}\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  Input,\r\n  OnInit\r\n  } from '@angular/core';\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'add-reference-widget',\r\n  template: `\r\n    <button *ngIf=\"showAddButton\"\r\n      [class]=\"options?.fieldHtmlClass || ''\"\r\n      [disabled]=\"options?.readonly\"\r\n      (click)=\"addItem($event)\">\r\n      <span *ngIf=\"options?.icon\" [class]=\"options?.icon\"></span>\r\n      <span *ngIf=\"options?.title\" [innerHTML]=\"buttonText\"></span>\r\n    </button>`,\r\n    changeDetection: ChangeDetectionStrategy.Default,\r\n})\r\nexport class AddReferenceComponent implements OnInit {\r\n  options: any;\r\n  itemCount: number;\r\n  previousLayoutIndex: number[];\r\n  previousDataIndex: number[];\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.options = this.layoutNode.options || {};\r\n  }\r\n\r\n  get showAddButton(): boolean {\r\n    return !this.layoutNode.arrayItem ||\r\n      this.layoutIndex[this.layoutIndex.length - 1] < this.options.maxItems;\r\n  }\r\n\r\n  addItem(event) {\r\n    event.preventDefault();\r\n    this.jsf.addItem(this);\r\n  }\r\n\r\n  get buttonText(): string {\r\n    const parent: any = {\r\n      dataIndex: this.dataIndex.slice(0, -1),\r\n      layoutIndex: this.layoutIndex.slice(0, -1),\r\n      layoutNode: this.jsf.getParentNode(this)\r\n    };\r\n    return parent.layoutNode.add ||\r\n      this.jsf.setArrayItemTitle(parent, this.layoutNode, this.itemCount);\r\n  }\r\n}\r\n","import { AbstractControl } from '@angular/forms';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'button-widget',\r\n  template: `\r\n    <div\r\n      [class]=\"options?.htmlClass || ''\">\r\n      <button\r\n        [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\r\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\r\n        [class]=\"options?.fieldHtmlClass || ''\"\r\n        [disabled]=\"controlDisabled\"\r\n        [name]=\"controlName\"\r\n        [type]=\"layoutNode?.type\"\r\n        [value]=\"controlValue\"\r\n        (click)=\"updateValue($event)\">\r\n        <span *ngIf=\"options?.icon || options?.title\"\r\n          [class]=\"options?.icon\"\r\n          [innerHTML]=\"options?.title\"></span>\r\n      </button>\r\n    </div>`,\r\n})\r\nexport class ButtonComponent implements OnInit {\r\n  formControl: AbstractControl;\r\n  controlName: string;\r\n  controlValue: any;\r\n  controlDisabled = false;\r\n  boundControl = false;\r\n  options: any;\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.options = this.layoutNode.options || {};\r\n    this.jsf.initializeControl(this);\r\n  }\r\n\r\n  updateValue(event) {\r\n    if (typeof this.options.onClick === 'function') {\r\n      this.options.onClick(event);\r\n    } else {\r\n      this.jsf.updateValue(this, event.target.value);\r\n    }\r\n  }\r\n}\r\n","import { AbstractControl } from '@angular/forms';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'checkbox-widget',\r\n  template: `\r\n    <label\r\n      [attr.for]=\"'control' + layoutNode?._id\"\r\n      [class]=\"options?.itemLabelHtmlClass || ''\">\r\n      <input *ngIf=\"boundControl\"\r\n        [formControl]=\"formControl\"\r\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\r\n        [class]=\"(options?.fieldHtmlClass || '') + (isChecked ?\r\n          (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\r\n          (' ' + (options?.style?.unselected || '')))\"\r\n        [id]=\"'control' + layoutNode?._id\"\r\n        [name]=\"controlName\"\r\n        [readonly]=\"options?.readonly ? 'readonly' : null\"\r\n        type=\"checkbox\">\r\n      <input *ngIf=\"!boundControl\"\r\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\r\n        [checked]=\"isChecked ? 'checked' : null\"\r\n        [class]=\"(options?.fieldHtmlClass || '') + (isChecked ?\r\n          (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\r\n          (' ' + (options?.style?.unselected || '')))\"\r\n        [disabled]=\"controlDisabled\"\r\n        [id]=\"'control' + layoutNode?._id\"\r\n        [name]=\"controlName\"\r\n        [readonly]=\"options?.readonly ? 'readonly' : null\"\r\n        [value]=\"controlValue\"\r\n        type=\"checkbox\"\r\n        (change)=\"updateValue($event)\">\r\n      <span *ngIf=\"options?.title\"\r\n        [style.display]=\"options?.notitle ? 'none' : ''\"\r\n        [innerHTML]=\"options?.title\"></span>\r\n    </label>`,\r\n})\r\nexport class CheckboxComponent implements OnInit {\r\n  formControl: AbstractControl;\r\n  controlName: string;\r\n  controlValue: any;\r\n  controlDisabled = false;\r\n  boundControl = false;\r\n  options: any;\r\n  trueValue: any = true;\r\n  falseValue: any = false;\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.options = this.layoutNode.options || {};\r\n    this.jsf.initializeControl(this);\r\n    if (this.controlValue === null || this.controlValue === undefined) {\r\n      this.controlValue = this.options.title;\r\n    }\r\n  }\r\n\r\n  updateValue(event) {\r\n    event.preventDefault();\r\n    this.jsf.updateValue(this, event.target.checked ? this.trueValue : this.falseValue);\r\n  }\r\n\r\n  get isChecked() {\r\n    return this.jsf.getFormControlValue(this) === this.trueValue;\r\n  }\r\n}\r\n","import { AbstractControl } from '@angular/forms';\r\nimport { buildTitleMap } from '../shared';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { JsonSchemaFormService, TitleMapItem } from '../json-schema-form.service';\r\n\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'checkboxes-widget',\r\n  template: `\r\n    <label *ngIf=\"options?.title\"\r\n      [class]=\"options?.labelHtmlClass || ''\"\r\n      [style.display]=\"options?.notitle ? 'none' : ''\"\r\n      [innerHTML]=\"options?.title\"></label>\r\n\r\n    <!-- 'horizontal' = checkboxes-inline or checkboxbuttons -->\r\n    <div *ngIf=\"layoutOrientation === 'horizontal'\" [class]=\"options?.htmlClass || ''\">\r\n      <label *ngFor=\"let checkboxItem of checkboxList\"\r\n        [attr.for]=\"'control' + layoutNode?._id + '/' + checkboxItem.value\"\r\n        [class]=\"(options?.itemLabelHtmlClass || '') + (checkboxItem.checked ?\r\n          (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\r\n          (' ' + (options?.style?.unselected || '')))\">\r\n        <input type=\"checkbox\"\r\n          [attr.required]=\"options?.required\"\r\n          [checked]=\"checkboxItem.checked\"\r\n          [class]=\"options?.fieldHtmlClass || ''\"\r\n          [disabled]=\"controlDisabled\"\r\n          [id]=\"'control' + layoutNode?._id + '/' + checkboxItem.value\"\r\n          [name]=\"checkboxItem?.name\"\r\n          [readonly]=\"options?.readonly ? 'readonly' : null\"\r\n          [value]=\"checkboxItem.value\"\r\n          (change)=\"updateValue($event)\">\r\n        <span [innerHTML]=\"checkboxItem.name\"></span>\r\n      </label>\r\n    </div>\r\n\r\n    <!-- 'vertical' = regular checkboxes -->\r\n    <div *ngIf=\"layoutOrientation === 'vertical'\">\r\n      <div *ngFor=\"let checkboxItem of checkboxList\" [class]=\"options?.htmlClass || ''\">\r\n        <label\r\n          [attr.for]=\"'control' + layoutNode?._id + '/' + checkboxItem.value\"\r\n          [class]=\"(options?.itemLabelHtmlClass || '') + (checkboxItem.checked ?\r\n            (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\r\n            (' ' + (options?.style?.unselected || '')))\">\r\n          <input type=\"checkbox\"\r\n            [attr.required]=\"options?.required\"\r\n            [checked]=\"checkboxItem.checked\"\r\n            [class]=\"options?.fieldHtmlClass || ''\"\r\n            [disabled]=\"controlDisabled\"\r\n            [id]=\"options?.name + '/' + checkboxItem.value\"\r\n            [name]=\"checkboxItem?.name\"\r\n            [readonly]=\"options?.readonly ? 'readonly' : null\"\r\n            [value]=\"checkboxItem.value\"\r\n            (change)=\"updateValue($event)\">\r\n          <span [innerHTML]=\"checkboxItem?.name\"></span>\r\n        </label>\r\n      </div>\r\n    </div>`,\r\n})\r\nexport class CheckboxesComponent implements OnInit {\r\n  formControl: AbstractControl;\r\n  controlName: string;\r\n  controlValue: any;\r\n  controlDisabled = false;\r\n  boundControl = false;\r\n  options: any;\r\n  layoutOrientation: string;\r\n  formArray: AbstractControl;\r\n  checkboxList: TitleMapItem[] = [];\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.options = this.layoutNode.options || {};\r\n    this.layoutOrientation = (this.layoutNode.type === 'checkboxes-inline' ||\r\n      this.layoutNode.type === 'checkboxbuttons') ? 'horizontal' : 'vertical';\r\n    this.jsf.initializeControl(this);\r\n    this.checkboxList = buildTitleMap(\r\n      this.options.titleMap || this.options.enumNames, this.options.enum, true\r\n    );\r\n    if (this.boundControl) {\r\n      const formArray = this.jsf.getFormControl(this);\r\n      this.checkboxList.forEach(checkboxItem =>\r\n        checkboxItem.checked = formArray.value.includes(checkboxItem.value)\r\n      );\r\n    }\r\n  }\r\n\r\n  updateValue(event) {\r\n    for (const checkboxItem of this.checkboxList) {\r\n      if (event.target.value === checkboxItem.value) {\r\n        checkboxItem.checked = event.target.checked;\r\n      }\r\n    }\r\n    if (this.boundControl) {\r\n      this.jsf.updateArrayCheckboxList(this, this.checkboxList);\r\n    }\r\n  }\r\n}\r\n","import { AbstractControl } from '@angular/forms';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n\r\n// TODO: Add this control\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'file-widget',\r\n  template: ``,\r\n})\r\nexport class FileComponent implements OnInit {\r\n  formControl: AbstractControl;\r\n  controlName: string;\r\n  controlValue: any;\r\n  controlDisabled = false;\r\n  boundControl = false;\r\n  options: any;\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.options = this.layoutNode.options || {};\r\n    this.jsf.initializeControl(this);\r\n  }\r\n\r\n  updateValue(event) {\r\n    this.jsf.updateValue(this, event.target.value);\r\n  }\r\n}\r\n","import { AbstractControl } from '@angular/forms';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'input-widget',\r\n  template: `\r\n    <div [class]=\"options?.htmlClass || ''\">\r\n      <label *ngIf=\"options?.title\"\r\n        [attr.for]=\"'control' + layoutNode?._id\"\r\n        [class]=\"options?.labelHtmlClass || ''\"\r\n        [style.display]=\"options?.notitle ? 'none' : ''\"\r\n        [innerHTML]=\"options?.title\"></label>\r\n      <input *ngIf=\"boundControl\"\r\n        [formControl]=\"formControl\"\r\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\r\n        [attr.list]=\"'control' + layoutNode?._id + 'Autocomplete'\"\r\n        [attr.maxlength]=\"options?.maxLength\"\r\n        [attr.minlength]=\"options?.minLength\"\r\n        [attr.pattern]=\"options?.pattern\"\r\n        [attr.placeholder]=\"options?.placeholder\"\r\n        [attr.required]=\"options?.required\"\r\n        [class]=\"options?.fieldHtmlClass || ''\"\r\n        [id]=\"'control' + layoutNode?._id\"\r\n        [name]=\"controlName\"\r\n        [readonly]=\"options?.readonly ? 'readonly' : null\"\r\n        [type]=\"layoutNode?.type\">\r\n      <input *ngIf=\"!boundControl\"\r\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\r\n        [attr.list]=\"'control' + layoutNode?._id + 'Autocomplete'\"\r\n        [attr.maxlength]=\"options?.maxLength\"\r\n        [attr.minlength]=\"options?.minLength\"\r\n        [attr.pattern]=\"options?.pattern\"\r\n        [attr.placeholder]=\"options?.placeholder\"\r\n        [attr.required]=\"options?.required\"\r\n        [class]=\"options?.fieldHtmlClass || ''\"\r\n        [disabled]=\"controlDisabled\"\r\n        [id]=\"'control' + layoutNode?._id\"\r\n        [name]=\"controlName\"\r\n        [readonly]=\"options?.readonly ? 'readonly' : null\"\r\n        [type]=\"layoutNode?.type\"\r\n        [value]=\"controlValue\"\r\n        (input)=\"updateValue($event)\">\r\n        <datalist *ngIf=\"options?.typeahead?.source\"\r\n          [id]=\"'control' + layoutNode?._id + 'Autocomplete'\">\r\n          <option *ngFor=\"let word of options?.typeahead?.source\" [value]=\"word\">\r\n        </datalist>\r\n    </div>`,\r\n})\r\nexport class InputComponent implements OnInit {\r\n  formControl: AbstractControl;\r\n  controlName: string;\r\n  controlValue: string;\r\n  controlDisabled = false;\r\n  boundControl = false;\r\n  options: any;\r\n  autoCompleteList: string[] = [];\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.options = this.layoutNode.options || {};\r\n    this.jsf.initializeControl(this);\r\n  }\r\n\r\n  updateValue(event) {\r\n    this.jsf.updateValue(this, event.target.value);\r\n  }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'message-widget',\r\n  template: `\r\n    <span *ngIf=\"message\"\r\n      [class]=\"options?.labelHtmlClass || ''\"\r\n      [innerHTML]=\"message\"></span>`,\r\n})\r\nexport class MessageComponent implements OnInit {\r\n  options: any;\r\n  message: string = null;\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.options = this.layoutNode.options || {};\r\n    this.message = this.options.help || this.options.helpvalue ||\r\n      this.options.msg || this.options.message;\r\n  }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'none-widget',\r\n  template: ``,\r\n})\r\nexport class NoneComponent {\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { AbstractControl } from '@angular/forms';\r\n\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'number-widget',\r\n  template: `\r\n    <div [class]=\"options?.htmlClass || ''\">\r\n      <label *ngIf=\"options?.title\"\r\n        [attr.for]=\"'control' + layoutNode?._id\"\r\n        [class]=\"options?.labelHtmlClass || ''\"\r\n        [style.display]=\"options?.notitle ? 'none' : ''\"\r\n        [innerHTML]=\"options?.title\"></label>\r\n      <input *ngIf=\"boundControl\"\r\n        [formControl]=\"formControl\"\r\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\r\n        [attr.max]=\"options?.maximum\"\r\n        [attr.min]=\"options?.minimum\"\r\n        [attr.placeholder]=\"options?.placeholder\"\r\n        [attr.required]=\"options?.required\"\r\n        [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\r\n        [attr.step]=\"options?.multipleOf || options?.step || 'any'\"\r\n        [class]=\"options?.fieldHtmlClass || ''\"\r\n        [id]=\"'control' + layoutNode?._id\"\r\n        [name]=\"controlName\"\r\n        [readonly]=\"options?.readonly ? 'readonly' : null\"\r\n        [title]=\"lastValidNumber\"\r\n        [type]=\"layoutNode?.type === 'range' ? 'range' : 'number'\">\r\n      <input *ngIf=\"!boundControl\"\r\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\r\n        [attr.max]=\"options?.maximum\"\r\n        [attr.min]=\"options?.minimum\"\r\n        [attr.placeholder]=\"options?.placeholder\"\r\n        [attr.required]=\"options?.required\"\r\n        [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\r\n        [attr.step]=\"options?.multipleOf || options?.step || 'any'\"\r\n        [class]=\"options?.fieldHtmlClass || ''\"\r\n        [disabled]=\"controlDisabled\"\r\n        [id]=\"'control' + layoutNode?._id\"\r\n        [name]=\"controlName\"\r\n        [readonly]=\"options?.readonly ? 'readonly' : null\"\r\n        [title]=\"lastValidNumber\"\r\n        [type]=\"layoutNode?.type === 'range' ? 'range' : 'number'\"\r\n        [value]=\"controlValue\"\r\n        (input)=\"updateValue($event)\">\r\n      <span *ngIf=\"layoutNode?.type === 'range'\" [innerHTML]=\"controlValue\"></span>\r\n    </div>`,\r\n})\r\nexport class NumberComponent implements OnInit {\r\n  formControl: AbstractControl;\r\n  controlName: string;\r\n  controlValue: any;\r\n  controlDisabled = false;\r\n  boundControl = false;\r\n  options: any;\r\n  allowNegative = true;\r\n  allowDecimal = true;\r\n  allowExponents = false;\r\n  lastValidNumber = '';\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.options = this.layoutNode.options || {};\r\n    this.jsf.initializeControl(this);\r\n    if (this.layoutNode.dataType === 'integer') { this.allowDecimal = false; }\r\n  }\r\n\r\n  updateValue(event) {\r\n    this.jsf.updateValue(this, event.target.value);\r\n  }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { AbstractControl } from '@angular/forms';\r\n\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n// TODO: Add this control\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'one-of-widget',\r\n  template: ``,\r\n})\r\nexport class OneOfComponent implements OnInit {\r\n  formControl: AbstractControl;\r\n  controlName: string;\r\n  controlValue: any;\r\n  controlDisabled = false;\r\n  boundControl = false;\r\n  options: any;\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.options = this.layoutNode.options || {};\r\n    this.jsf.initializeControl(this);\r\n  }\r\n\r\n  updateValue(event) {\r\n    this.jsf.updateValue(this, event.target.value);\r\n  }\r\n}\r\n","import { AbstractControl } from '@angular/forms';\r\nimport { buildTitleMap } from '../shared';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'radios-widget',\r\n  template: `\r\n    <label *ngIf=\"options?.title\"\r\n      [attr.for]=\"'control' + layoutNode?._id\"\r\n      [class]=\"options?.labelHtmlClass || ''\"\r\n      [style.display]=\"options?.notitle ? 'none' : ''\"\r\n      [innerHTML]=\"options?.title\"></label>\r\n\r\n    <!-- 'horizontal' = radios-inline or radiobuttons -->\r\n    <div *ngIf=\"layoutOrientation === 'horizontal'\"\r\n      [class]=\"options?.htmlClass || ''\">\r\n      <label *ngFor=\"let radioItem of radiosList\"\r\n        [attr.for]=\"'control' + layoutNode?._id + '/' + radioItem?.value\"\r\n        [class]=\"(options?.itemLabelHtmlClass || '') +\r\n          ((controlValue + '' === radioItem?.value + '') ?\r\n          (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\r\n          (' ' + (options?.style?.unselected || '')))\">\r\n        <input type=\"radio\"\r\n          [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\r\n          [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\r\n          [attr.required]=\"options?.required\"\r\n          [checked]=\"radioItem?.value === controlValue\"\r\n          [class]=\"options?.fieldHtmlClass || ''\"\r\n          [disabled]=\"controlDisabled\"\r\n          [id]=\"'control' + layoutNode?._id + '/' + radioItem?.value\"\r\n          [name]=\"controlName\"\r\n          [value]=\"radioItem?.value\"\r\n          (change)=\"updateValue($event)\">\r\n        <span [innerHTML]=\"radioItem?.name\"></span>\r\n      </label>\r\n    </div>\r\n\r\n    <!-- 'vertical' = regular radios -->\r\n    <div *ngIf=\"layoutOrientation !== 'horizontal'\">\r\n      <div *ngFor=\"let radioItem of radiosList\"\r\n        [class]=\"options?.htmlClass || ''\">\r\n        <label\r\n          [attr.for]=\"'control' + layoutNode?._id + '/' + radioItem?.value\"\r\n          [class]=\"(options?.itemLabelHtmlClass || '') +\r\n            ((controlValue + '' === radioItem?.value + '') ?\r\n            (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\r\n            (' ' + (options?.style?.unselected || '')))\">\r\n          <input type=\"radio\"\r\n            [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\r\n            [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\r\n            [attr.required]=\"options?.required\"\r\n            [checked]=\"radioItem?.value === controlValue\"\r\n            [class]=\"options?.fieldHtmlClass || ''\"\r\n            [disabled]=\"controlDisabled\"\r\n            [id]=\"'control' + layoutNode?._id + '/' + radioItem?.value\"\r\n            [name]=\"controlName\"\r\n            [value]=\"radioItem?.value\"\r\n            (change)=\"updateValue($event)\">\r\n          <span [innerHTML]=\"radioItem?.name\"></span>\r\n        </label>\r\n      </div>\r\n    </div>`,\r\n})\r\nexport class RadiosComponent implements OnInit {\r\n  formControl: AbstractControl;\r\n  controlName: string;\r\n  controlValue: any;\r\n  controlDisabled = false;\r\n  boundControl = false;\r\n  options: any;\r\n  layoutOrientation = 'vertical';\r\n  radiosList: any[] = [];\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.options = this.layoutNode.options || {};\r\n    if (this.layoutNode.type === 'radios-inline' ||\r\n      this.layoutNode.type === 'radiobuttons'\r\n    ) {\r\n      this.layoutOrientation = 'horizontal';\r\n    }\r\n    this.radiosList = buildTitleMap(\r\n      this.options.titleMap || this.options.enumNames,\r\n      this.options.enum, true\r\n    );\r\n    this.jsf.initializeControl(this);\r\n  }\r\n\r\n  updateValue(event) {\r\n    this.jsf.updateValue(this, event.target.value);\r\n  }\r\n}\r\n","import {\r\n  Component, ComponentFactoryResolver, ComponentRef, Input,\r\n  OnChanges, OnInit, ViewChild, ViewContainerRef\r\n} from '@angular/core';\r\n\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'select-framework-widget',\r\n  template: `<div #widgetContainer></div>`,\r\n})\r\nexport class SelectFrameworkComponent implements OnChanges, OnInit {\r\n  newComponent: ComponentRef<any> = null;\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n  @ViewChild('widgetContainer', {\r\n      read: ViewContainerRef,\r\n      static: true })\r\n    widgetContainer: ViewContainerRef;\r\n\r\n  constructor(\r\n    private componentFactory: ComponentFactoryResolver,\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.updateComponent();\r\n  }\r\n\r\n  ngOnChanges() {\r\n    this.updateComponent();\r\n  }\r\n\r\n  updateComponent() {\r\n    if (this.widgetContainer && !this.newComponent && this.jsf.framework) {\r\n      this.newComponent = this.widgetContainer.createComponent(\r\n        this.componentFactory.resolveComponentFactory(this.jsf.framework)\r\n      );\r\n      //TODO fix all deprecated calls and test \r\n      //this.widgetContainer.createComponent<any>(this.jsf.framework)\r\n    }\r\n    if (this.newComponent) {\r\n      for (const input of ['layoutNode', 'layoutIndex', 'dataIndex']) {\r\n        this.newComponent.instance[input] = this[input];\r\n      }\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  Input,\r\n  NgZone,\r\n  OnInit\r\n  } from '@angular/core';\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n\r\n/**\r\n * OrderableDirective\r\n *\r\n * Enables array elements to be reordered by dragging and dropping.\r\n *\r\n * Only works for arrays that have at least two elements.\r\n *\r\n * Also detects arrays-within-arrays, and correctly moves either\r\n * the child array element or the parent array element,\r\n * depending on the drop targert.\r\n *\r\n * Listeners for movable element being dragged:\r\n * - dragstart: add 'dragging' class to element, set effectAllowed = 'move'\r\n * - dragover: set dropEffect = 'move'\r\n * - dragend: remove 'dragging' class from element\r\n *\r\n * Listeners for stationary items being dragged over:\r\n * - dragenter: add 'drag-target-...' classes to element\r\n * - dragleave: remove 'drag-target-...' classes from element\r\n * - drop: remove 'drag-target-...' classes from element, move dropped array item\r\n */\r\n@Directive({\r\n  // tslint:disable-next-line:directive-selector\r\n  selector: '[orderable]',\r\n})\r\nexport class OrderableDirective implements OnInit {\r\n  arrayLayoutIndex: string;\r\n  element: any;\r\n  overParentElement = false;\r\n  overChildElement = false;\r\n  @Input() orderable: boolean;\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  constructor(\r\n    private elementRef: ElementRef,\r\n    private jsf: JsonSchemaFormService,\r\n    private ngZone: NgZone\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    if (this.orderable && this.layoutNode && this.layoutIndex && this.dataIndex) {\r\n      this.element = this.elementRef.nativeElement;\r\n      this.element.draggable = true;\r\n      this.arrayLayoutIndex = 'move:' + this.layoutIndex.slice(0, -1).toString();\r\n\r\n      this.ngZone.runOutsideAngular(() => {\r\n\r\n        // Listeners for movable element being dragged:\r\n\r\n        this.element.addEventListener('dragstart', (event) => {\r\n          event.dataTransfer.effectAllowed = 'move';\r\n          event.dataTransfer.setData('text', '');\r\n          // Hack to bypass stupid HTML drag-and-drop dataTransfer protection\r\n          // so drag source info will be available on dragenter\r\n          const sourceArrayIndex = this.dataIndex[this.dataIndex.length - 1];\r\n          sessionStorage.setItem(this.arrayLayoutIndex, sourceArrayIndex + '');\r\n        });\r\n\r\n        this.element.addEventListener('dragover', (event) => {\r\n          if (event.preventDefault) { event.preventDefault(); }\r\n          event.dataTransfer.dropEffect = 'move';\r\n          return false;\r\n        });\r\n\r\n        // Listeners for stationary items being dragged over:\r\n\r\n        this.element.addEventListener('dragenter', (event) => {\r\n          // Part 1 of a hack, inspired by Dragster, to simulate mouseover and mouseout\r\n          // behavior while dragging items - http://bensmithett.github.io/dragster/\r\n          if (this.overParentElement) {\r\n            return this.overChildElement = true;\r\n          } else {\r\n            this.overParentElement = true;\r\n          }\r\n\r\n          const sourceArrayIndex = sessionStorage.getItem(this.arrayLayoutIndex);\r\n          if (sourceArrayIndex !== null) {\r\n            if (this.dataIndex[this.dataIndex.length - 1] < +sourceArrayIndex) {\r\n              this.element.classList.add('drag-target-top');\r\n            } else if (this.dataIndex[this.dataIndex.length - 1] > +sourceArrayIndex) {\r\n              this.element.classList.add('drag-target-bottom');\r\n            }\r\n          }\r\n        });\r\n\r\n        this.element.addEventListener('dragleave', (event) => {\r\n          // Part 2 of the Dragster hack\r\n          if (this.overChildElement) {\r\n            this.overChildElement = false;\r\n          } else if (this.overParentElement) {\r\n            this.overParentElement = false;\r\n          }\r\n\r\n          const sourceArrayIndex = sessionStorage.getItem(this.arrayLayoutIndex);\r\n          if (!this.overParentElement && !this.overChildElement && sourceArrayIndex !== null) {\r\n            this.element.classList.remove('drag-target-top');\r\n            this.element.classList.remove('drag-target-bottom');\r\n          }\r\n        });\r\n\r\n        this.element.addEventListener('drop', (event) => {\r\n          this.element.classList.remove('drag-target-top');\r\n          this.element.classList.remove('drag-target-bottom');\r\n          // Confirm that drop target is another item in the same array as source item\r\n          const sourceArrayIndex = sessionStorage.getItem(this.arrayLayoutIndex);\r\n          const destArrayIndex = this.dataIndex[this.dataIndex.length - 1];\r\n          if (sourceArrayIndex !== null && +sourceArrayIndex !== destArrayIndex) {\r\n            // Move array item\r\n            this.jsf.moveArrayItem(this, +sourceArrayIndex, destArrayIndex);\r\n          }\r\n          sessionStorage.removeItem(this.arrayLayoutIndex);\r\n          return false;\r\n        });\r\n\r\n      });\r\n    }\r\n  }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'root-widget',\r\n  template: `\r\n    <div *ngFor=\"let layoutItem of layout; let i = index\"\r\n      [class.form-flex-item]=\"isFlexItem\"\r\n      [style.align-self]=\"(layoutItem.options || {})['align-self']\"\r\n      [style.flex-basis]=\"getFlexAttribute(layoutItem, 'flex-basis')\"\r\n      [style.flex-grow]=\"getFlexAttribute(layoutItem, 'flex-grow')\"\r\n      [style.flex-shrink]=\"getFlexAttribute(layoutItem, 'flex-shrink')\"\r\n      [style.order]=\"(layoutItem.options || {}).order\">\r\n      <div\r\n        [dataIndex]=\"layoutItem?.arrayItem ? (dataIndex || []).concat(i) : (dataIndex || [])\"\r\n        [layoutIndex]=\"(layoutIndex || []).concat(i)\"\r\n        [layoutNode]=\"layoutItem\"\r\n        [orderable]=\"isDraggable(layoutItem)\">\r\n        <select-framework-widget *ngIf=\"showWidget(layoutItem)\"\r\n          [dataIndex]=\"layoutItem?.arrayItem ? (dataIndex || []).concat(i) : (dataIndex || [])\"\r\n          [layoutIndex]=\"(layoutIndex || []).concat(i)\"\r\n          [layoutNode]=\"layoutItem\"></select-framework-widget>\r\n      </div>\r\n    </div>`,\r\n  styles: [`\r\n    [draggable=true] {\r\n      transition: all 150ms cubic-bezier(.4, 0, .2, 1);\r\n    }\r\n    [draggable=true]:hover {\r\n      cursor: move;\r\n      box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);\r\n      position: relative; z-index: 10;\r\n      margin-top: -1px;\r\n      margin-left: -1px;\r\n      margin-right: 1px;\r\n      margin-bottom: 1px;\r\n    }\r\n    [draggable=true].drag-target-top {\r\n      box-shadow: 0 -2px 0 #000;\r\n      position: relative; z-index: 20;\r\n    }\r\n    [draggable=true].drag-target-bottom {\r\n      box-shadow: 0 2px 0 #000;\r\n      position: relative; z-index: 20;\r\n    }\r\n  `],\r\n})\r\nexport class RootComponent {\r\n  options: any;\r\n  @Input() dataIndex: number[];\r\n  @Input() layoutIndex: number[];\r\n  @Input() layout: any[];\r\n  @Input() isOrderable: boolean;\r\n  @Input() isFlexItem = false;\r\n\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  isDraggable(node: any): boolean {\r\n    return node.arrayItem && node.type !== '$ref' &&\r\n      node.arrayItemType === 'list' && this.isOrderable !== false;\r\n  }\r\n\r\n  // Set attributes for flexbox child\r\n  // (container attributes are set in section.component)\r\n  getFlexAttribute(node: any, attribute: string) {\r\n    const index = ['flex-grow', 'flex-shrink', 'flex-basis'].indexOf(attribute);\r\n    return ((node.options || {}).flex || '').split(/\\s+/)[index] ||\r\n      (node.options || {})[attribute] || ['1', '1', 'auto'][index];\r\n  }\r\n\r\n  showWidget(layoutNode: any): boolean {\r\n    return this.jsf.evaluateCondition(layoutNode, this.dataIndex);\r\n  }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'section-widget',\r\n  template: `\r\n    <div *ngIf=\"containerType === 'div'\"\r\n      [class]=\"options?.htmlClass || ''\"\r\n      [class.expandable]=\"options?.expandable && !expanded\"\r\n      [class.expanded]=\"options?.expandable && expanded\">\r\n      <label *ngIf=\"sectionTitle\"\r\n        class=\"legend\"\r\n        [class]=\"options?.labelHtmlClass || ''\"\r\n        [innerHTML]=\"sectionTitle\"\r\n        (click)=\"toggleExpanded()\"></label>\r\n      <root-widget *ngIf=\"expanded\"\r\n        [dataIndex]=\"dataIndex\"\r\n        [layout]=\"layoutNode.items\"\r\n        [layoutIndex]=\"layoutIndex\"\r\n        [isFlexItem]=\"getFlexAttribute('is-flex')\"\r\n        [isOrderable]=\"options?.orderable\"\r\n        [class.form-flex-column]=\"getFlexAttribute('flex-direction') === 'column'\"\r\n        [class.form-flex-row]=\"getFlexAttribute('flex-direction') === 'row'\"\r\n        [style.align-content]=\"getFlexAttribute('align-content')\"\r\n        [style.align-items]=\"getFlexAttribute('align-items')\"\r\n        [style.display]=\"getFlexAttribute('display')\"\r\n        [style.flex-direction]=\"getFlexAttribute('flex-direction')\"\r\n        [style.flex-wrap]=\"getFlexAttribute('flex-wrap')\"\r\n        [style.justify-content]=\"getFlexAttribute('justify-content')\"></root-widget>\r\n    </div>\r\n    <fieldset *ngIf=\"containerType === 'fieldset'\"\r\n      [class]=\"options?.htmlClass || ''\"\r\n      [class.expandable]=\"options?.expandable && !expanded\"\r\n      [class.expanded]=\"options?.expandable && expanded\"\r\n      [disabled]=\"options?.readonly\">\r\n      <legend *ngIf=\"sectionTitle\"\r\n        class=\"legend\"\r\n        [class]=\"options?.labelHtmlClass || ''\"\r\n        [innerHTML]=\"sectionTitle\"\r\n        (click)=\"toggleExpanded()\"></legend>\r\n      <div *ngIf=\"options?.messageLocation !== 'bottom'\">\r\n        <p *ngIf=\"options?.description\"\r\n        class=\"help-block\"\r\n        [class]=\"options?.labelHelpBlockClass || ''\"\r\n        [innerHTML]=\"options?.description\"></p>\r\n      </div>\r\n      <root-widget *ngIf=\"expanded\"\r\n        [dataIndex]=\"dataIndex\"\r\n        [layout]=\"layoutNode.items\"\r\n        [layoutIndex]=\"layoutIndex\"\r\n        [isFlexItem]=\"getFlexAttribute('is-flex')\"\r\n        [isOrderable]=\"options?.orderable\"\r\n        [class.form-flex-column]=\"getFlexAttribute('flex-direction') === 'column'\"\r\n        [class.form-flex-row]=\"getFlexAttribute('flex-direction') === 'row'\"\r\n        [style.align-content]=\"getFlexAttribute('align-content')\"\r\n        [style.align-items]=\"getFlexAttribute('align-items')\"\r\n        [style.display]=\"getFlexAttribute('display')\"\r\n        [style.flex-direction]=\"getFlexAttribute('flex-direction')\"\r\n        [style.flex-wrap]=\"getFlexAttribute('flex-wrap')\"\r\n        [style.justify-content]=\"getFlexAttribute('justify-content')\"></root-widget>\r\n      <div *ngIf=\"options?.messageLocation === 'bottom'\">\r\n        <p *ngIf=\"options?.description\"\r\n        class=\"help-block\"\r\n        [class]=\"options?.labelHelpBlockClass || ''\"\r\n        [innerHTML]=\"options?.description\"></p>\r\n      </div>\r\n    </fieldset>`,\r\n  styles: [`\r\n    .legend { font-weight: bold; }\r\n    .expandable > legend:before, .expandable > label:before  { content: '▶'; padding-right: .3em; }\r\n    .expanded > legend:before, .expanded > label:before  { content: '▼'; padding-right: .2em; }\r\n  `],\r\n})\r\nexport class SectionComponent implements OnInit {\r\n  options: any;\r\n  expanded = true;\r\n  containerType: string;\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  get sectionTitle() {\r\n    return this.options.notitle ? null : this.jsf.setItemTitle(this);\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.jsf.initializeControl(this);\r\n    this.options = this.layoutNode.options || {};\r\n    this.expanded = typeof this.options.expanded === 'boolean' ?\r\n      this.options.expanded : !this.options.expandable;\r\n    switch (this.layoutNode.type) {\r\n      case 'fieldset': case 'array': case 'tab': case 'advancedfieldset':\r\n      case 'authfieldset': case 'optionfieldset': case 'selectfieldset':\r\n        this.containerType = 'fieldset';\r\n      break;\r\n      default: // 'div', 'flex', 'section', 'conditional', 'actions', 'tagsinput'\r\n        this.containerType = 'div';\r\n      break;\r\n    }\r\n  }\r\n\r\n  toggleExpanded() {\r\n    if (this.options.expandable) { this.expanded = !this.expanded; }\r\n  }\r\n\r\n  // Set attributes for flexbox container\r\n  // (child attributes are set in root.component)\r\n  getFlexAttribute(attribute: string) {\r\n    const flexActive: boolean =\r\n      this.layoutNode.type === 'flex' ||\r\n      !!this.options.displayFlex ||\r\n      this.options.display === 'flex';\r\n    if (attribute !== 'flex' && !flexActive) { return null; }\r\n    switch (attribute) {\r\n      case 'is-flex':\r\n        return flexActive;\r\n      case 'display':\r\n        return flexActive ? 'flex' : 'initial';\r\n      case 'flex-direction': case 'flex-wrap':\r\n        const index = ['flex-direction', 'flex-wrap'].indexOf(attribute);\r\n        return (this.options['flex-flow'] || '').split(/\\s+/)[index] ||\r\n          this.options[attribute] || ['column', 'nowrap'][index];\r\n      case 'justify-content': case 'align-items': case 'align-content':\r\n        return this.options[attribute];\r\n    }\r\n  }\r\n}\r\n","import { AbstractControl } from '@angular/forms';\r\nimport { buildTitleMap, isArray } from '../shared';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'select-widget',\r\n  template: `\r\n    <div\r\n      [class]=\"options?.htmlClass || ''\">\r\n      <label *ngIf=\"options?.title\"\r\n        [attr.for]=\"'control' + layoutNode?._id\"\r\n        [class]=\"options?.labelHtmlClass || ''\"\r\n        [style.display]=\"options?.notitle ? 'none' : ''\"\r\n        [innerHTML]=\"options?.title\"></label>\r\n      <select *ngIf=\"boundControl\"\r\n        [formControl]=\"formControl\"\r\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\r\n        [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\r\n        [attr.required]=\"options?.required\"\r\n        [class]=\"options?.fieldHtmlClass || ''\"\r\n        [id]=\"'control' + layoutNode?._id\"\r\n        [name]=\"controlName\">\r\n        <ng-template ngFor let-selectItem [ngForOf]=\"selectList\">\r\n          <option *ngIf=\"!isArray(selectItem?.items)\"\r\n            [value]=\"selectItem?.value\">\r\n            <span [innerHTML]=\"selectItem?.name\"></span>\r\n          </option>\r\n          <optgroup *ngIf=\"isArray(selectItem?.items)\"\r\n            [label]=\"selectItem?.group\">\r\n            <option *ngFor=\"let subItem of selectItem.items\"\r\n              [value]=\"subItem?.value\">\r\n              <span [innerHTML]=\"subItem?.name\"></span>\r\n            </option>\r\n          </optgroup>\r\n        </ng-template>\r\n      </select>\r\n      <select *ngIf=\"!boundControl\"\r\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\r\n        [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\r\n        [attr.required]=\"options?.required\"\r\n        [class]=\"options?.fieldHtmlClass || ''\"\r\n        [disabled]=\"controlDisabled\"\r\n        [id]=\"'control' + layoutNode?._id\"\r\n        [name]=\"controlName\"\r\n        (change)=\"updateValue($event)\">\r\n        <ng-template ngFor let-selectItem [ngForOf]=\"selectList\">\r\n          <option *ngIf=\"!isArray(selectItem?.items)\"\r\n            [selected]=\"selectItem?.value === controlValue\"\r\n            [value]=\"selectItem?.value\">\r\n            <span [innerHTML]=\"selectItem?.name\"></span>\r\n          </option>\r\n          <optgroup *ngIf=\"isArray(selectItem?.items)\"\r\n            [label]=\"selectItem?.group\">\r\n            <option *ngFor=\"let subItem of selectItem.items\"\r\n              [attr.selected]=\"subItem?.value === controlValue\"\r\n              [value]=\"subItem?.value\">\r\n              <span [innerHTML]=\"subItem?.name\"></span>\r\n            </option>\r\n          </optgroup>\r\n        </ng-template>\r\n      </select>\r\n    </div>`,\r\n})\r\nexport class SelectComponent implements OnInit {\r\n  formControl: AbstractControl;\r\n  controlName: string;\r\n  controlValue: any;\r\n  controlDisabled = false;\r\n  boundControl = false;\r\n  options: any;\r\n  selectList: any[] = [];\r\n  isArray = isArray;\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.options = this.layoutNode.options || {};\r\n    this.selectList = buildTitleMap(\r\n      this.options.titleMap || this.options.enumNames,\r\n      this.options.enum, !!this.options.required, !!this.options.flatList\r\n    );\r\n    this.jsf.initializeControl(this);\r\n  }\r\n\r\n  updateValue(event) {\r\n    this.jsf.updateValue(this, event.target.value);\r\n  }\r\n}\r\n","import {\r\n  Component, ComponentFactoryResolver, ComponentRef, Input,\r\n  OnChanges, OnInit, ViewChild, ViewContainerRef\r\n} from '@angular/core';\r\n\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'select-widget-widget',\r\n  template: `<div #widgetContainer></div>`,\r\n})\r\nexport class SelectWidgetComponent implements OnChanges, OnInit {\r\n  newComponent: ComponentRef<any> = null;\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n  @ViewChild('widgetContainer', { read: ViewContainerRef, static: true })\r\n    widgetContainer: ViewContainerRef;\r\n\r\n  constructor(\r\n    private componentFactory: ComponentFactoryResolver,\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.updateComponent();\r\n  }\r\n\r\n  ngOnChanges() {\r\n    this.updateComponent();\r\n  }\r\n\r\n  updateComponent() {\r\n    if (this.widgetContainer && !this.newComponent && (this.layoutNode || {}).widget) {\r\n      this.newComponent = this.widgetContainer.createComponent(\r\n        this.componentFactory.resolveComponentFactory(this.layoutNode.widget)\r\n      );\r\n    }\r\n    if (this.newComponent) {\r\n      for (const input of ['layoutNode', 'layoutIndex', 'dataIndex']) {\r\n        this.newComponent.instance[input] = this[input];\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { AbstractControl } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\nimport { hasOwn } from '../shared/utility.functions';\r\n\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'submit-widget',\r\n  template: `\r\n    <div\r\n      [class]=\"options?.htmlClass || ''\">\r\n      <input\r\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\r\n        [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\r\n        [attr.required]=\"options?.required\"\r\n        [class]=\"options?.fieldHtmlClass || ''\"\r\n        [disabled]=\"controlDisabled\"\r\n        [id]=\"'control' + layoutNode?._id\"\r\n        [name]=\"controlName\"\r\n        [type]=\"layoutNode?.type\"\r\n        [value]=\"controlValue\"\r\n        (click)=\"updateValue($event)\">\r\n    </div>`,\r\n})\r\nexport class SubmitComponent implements OnInit,OnDestroy {\r\n  formControl: AbstractControl;\r\n  controlName: string;\r\n  controlValue: any;\r\n  controlDisabled = false;\r\n  boundControl = false;\r\n  options: any;\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  isValidChangesSubs:Subscription;\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n  ngOnDestroy(): void {\r\n    this.isValidChangesSubs?.unsubscribe();\r\n    this.isValidChangesSubs=null;\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.options = this.layoutNode.options || {};\r\n    this.jsf.initializeControl(this);\r\n    if (hasOwn(this.options, 'disabled')) {\r\n      this.controlDisabled = this.options.disabled;\r\n    } else if (this.jsf.formOptions.disableInvalidSubmit) {\r\n      this.controlDisabled = !this.jsf.isValid;\r\n      this.isValidChangesSubs=this.jsf.isValidChanges.subscribe(isValid => this.controlDisabled = !isValid);\r\n    }\r\n    if (this.controlValue === null || this.controlValue === undefined) {\r\n      this.controlValue = this.options.title;\r\n    }\r\n  }\r\n\r\n  updateValue(event) {\r\n    if (typeof this.options.onClick === 'function') {\r\n      this.options.onClick(event);\r\n    } else {\r\n      this.jsf.updateValue(this, event.target.value);\r\n    }\r\n  }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'tabs-widget',\r\n  template: `\r\n    <ul\r\n      [class]=\"options?.labelHtmlClass || ''\">\r\n      <li *ngFor=\"let item of layoutNode?.items; let i = index\"\r\n        [class]=\"(options?.itemLabelHtmlClass || '') + (selectedItem === i ?\r\n          (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\r\n          (' ' + options?.style?.unselected))\"\r\n        role=\"presentation\"\r\n        data-tabs>\r\n        <a *ngIf=\"showAddTab || item.type !== '$ref'\"\r\n           [class]=\"'nav-link' + (selectedItem === i ? (' ' + options?.activeClass + ' ' + options?.style?.selected) :\r\n            (' ' + options?.style?.unselected))\"\r\n          [innerHTML]=\"setTabTitle(item, i)\"\r\n          (click)=\"select(i)\"></a>\r\n      </li>\r\n    </ul>\r\n\r\n    <div *ngFor=\"let layoutItem of layoutNode?.items; let i = index\"\r\n      [class]=\"options?.htmlClass || ''\">\r\n\r\n      <select-framework-widget *ngIf=\"selectedItem === i\"\r\n        [class]=\"(options?.fieldHtmlClass || '') +\r\n          ' ' + (options?.activeClass || '') +\r\n          ' ' + (options?.style?.selected || '')\"\r\n        [dataIndex]=\"layoutNode?.dataType === 'array' ? (dataIndex || []).concat(i) : dataIndex\"\r\n        [layoutIndex]=\"(layoutIndex || []).concat(i)\"\r\n        [layoutNode]=\"layoutItem\"></select-framework-widget>\r\n\r\n    </div>`,\r\n  styles: [` a { cursor: pointer; } `],\r\n})\r\nexport class TabsComponent implements OnInit {\r\n  options: any;\r\n  itemCount: number;\r\n  selectedItem = 0;\r\n  showAddTab = true;\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.options = this.layoutNode.options || {};\r\n    this.itemCount = this.layoutNode.items.length - 1;\r\n    this.updateControl();\r\n  }\r\n\r\n  select(index) {\r\n    if (this.layoutNode.items[index].type === '$ref') {\r\n      this.itemCount = this.layoutNode.items.length;\r\n      this.jsf.addItem({\r\n        layoutNode: this.layoutNode.items[index],\r\n        layoutIndex: this.layoutIndex.concat(index),\r\n        dataIndex: this.dataIndex.concat(index)\r\n      });\r\n      this.updateControl();\r\n    }\r\n    this.selectedItem = index;\r\n  }\r\n\r\n  updateControl() {\r\n    const lastItem = this.layoutNode.items[this.layoutNode.items.length - 1];\r\n    if (lastItem.type === '$ref' &&\r\n      this.itemCount >= (lastItem.options.maxItems || 1000)\r\n    ) {\r\n      this.showAddTab = false;\r\n    }\r\n  }\r\n\r\n  setTabTitle(item: any, index: number): string {\r\n    return this.jsf.setArrayItemTitle(this, item, index);\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  ComponentFactoryResolver,\r\n  ComponentRef,\r\n  Input,\r\n  OnChanges,\r\n  OnInit,\r\n  ViewChild,\r\n  ViewContainerRef\r\n  } from '@angular/core';\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'template-widget',\r\n  template: `<div #widgetContainer></div>`,\r\n})\r\nexport class TemplateComponent implements OnInit, OnChanges {\r\n  newComponent: ComponentRef<any> = null;\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n  @ViewChild('widgetContainer', { read: ViewContainerRef , static: true})\r\n    widgetContainer: ViewContainerRef;\r\n\r\n  constructor(\r\n    private componentFactory: ComponentFactoryResolver,\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.updateComponent();\r\n  }\r\n\r\n  ngOnChanges() {\r\n    this.updateComponent();\r\n  }\r\n\r\n  updateComponent() {\r\n    if (this.widgetContainer && !this.newComponent && this.layoutNode.options.template) {\r\n      this.newComponent = this.widgetContainer.createComponent(\r\n        this.componentFactory.resolveComponentFactory(this.layoutNode.options.template)\r\n      );\r\n    }\r\n    if (this.newComponent) {\r\n      for (const input of ['layoutNode', 'layoutIndex', 'dataIndex']) {\r\n        this.newComponent.instance[input] = this[input];\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { AbstractControl } from '@angular/forms';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'textarea-widget',\r\n  template: `\r\n    <div\r\n      [class]=\"options?.htmlClass || ''\">\r\n      <label *ngIf=\"options?.title\"\r\n        [attr.for]=\"'control' + layoutNode?._id\"\r\n        [class]=\"options?.labelHtmlClass || ''\"\r\n        [style.display]=\"options?.notitle ? 'none' : ''\"\r\n        [innerHTML]=\"options?.title\"></label>\r\n      <textarea *ngIf=\"boundControl\"\r\n        [formControl]=\"formControl\"\r\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\r\n        [attr.maxlength]=\"options?.maxLength\"\r\n        [attr.minlength]=\"options?.minLength\"\r\n        [attr.pattern]=\"options?.pattern\"\r\n        [attr.placeholder]=\"options?.placeholder\"\r\n        [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\r\n        [attr.required]=\"options?.required\"\r\n        [class]=\"options?.fieldHtmlClass || ''\"\r\n        [id]=\"'control' + layoutNode?._id\"\r\n        [name]=\"controlName\"></textarea>\r\n      <textarea *ngIf=\"!boundControl\"\r\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\r\n        [attr.maxlength]=\"options?.maxLength\"\r\n        [attr.minlength]=\"options?.minLength\"\r\n        [attr.pattern]=\"options?.pattern\"\r\n        [attr.placeholder]=\"options?.placeholder\"\r\n        [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\r\n        [attr.required]=\"options?.required\"\r\n        [class]=\"options?.fieldHtmlClass || ''\"\r\n        [disabled]=\"controlDisabled\"\r\n        [id]=\"'control' + layoutNode?._id\"\r\n        [name]=\"controlName\"\r\n        [value]=\"controlValue\"\r\n        (input)=\"updateValue($event)\">{{controlValue}}</textarea>\r\n    </div>`,\r\n})\r\nexport class TextareaComponent implements OnInit {\r\n  formControl: AbstractControl;\r\n  controlName: string;\r\n  controlValue: any;\r\n  controlDisabled = false;\r\n  boundControl = false;\r\n  options: any;\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.options = this.layoutNode.options || {};\r\n    this.jsf.initializeControl(this);\r\n  }\r\n\r\n  updateValue(event) {\r\n    this.jsf.updateValue(this, event.target.value);\r\n  }\r\n}\r\n","import { AddReferenceComponent } from './add-reference.component';\r\nimport { ButtonComponent } from './button.component';\r\nimport { CheckboxComponent } from './checkbox.component';\r\nimport { CheckboxesComponent } from './checkboxes.component';\r\nimport { FileComponent } from './file.component';\r\nimport { hasOwn } from '../shared/utility.functions';\r\nimport { Injectable } from '@angular/core';\r\nimport { InputComponent } from './input.component';\r\nimport { MessageComponent } from './message.component';\r\nimport { NoneComponent } from './none.component';\r\nimport { NumberComponent } from './number.component';\r\nimport { OneOfComponent } from './one-of.component';\r\nimport { RadiosComponent } from './radios.component';\r\nimport { RootComponent } from './root.component';\r\nimport { SectionComponent } from './section.component';\r\nimport { SelectComponent } from './select.component';\r\nimport { SelectFrameworkComponent } from './select-framework.component';\r\nimport { SelectWidgetComponent } from './select-widget.component';\r\nimport { SubmitComponent } from './submit.component';\r\nimport { TabsComponent } from './tabs.component';\r\nimport { TemplateComponent } from './template.component';\r\nimport { TextareaComponent } from './textarea.component';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class WidgetLibraryService {\r\n\r\n  defaultWidget = 'text';\r\n  widgetLibrary: any = {\r\n\r\n  // Angular JSON Schema Form administrative widgets\r\n    'none': NoneComponent, // Placeholder, for development - displays nothing\r\n    'root': RootComponent, // Form root, renders a complete layout\r\n    'select-framework': SelectFrameworkComponent, // Applies the selected framework to a specified widget\r\n    'select-widget': SelectWidgetComponent, // Displays a specified widget\r\n    '$ref': AddReferenceComponent, // Button to add a new array item or $ref element\r\n\r\n  // Free-form text HTML 'input' form control widgets <input type=\"...\">\r\n    'email': 'text',\r\n    'integer': 'number', // Note: 'integer' is not a recognized HTML input type\r\n    'number': NumberComponent,\r\n    'password': 'text',\r\n    'search': 'text',\r\n    'tel': 'text',\r\n    'text': InputComponent,\r\n    'url': 'text',\r\n\r\n  // Controlled text HTML 'input' form control widgets <input type=\"...\">\r\n    'color': 'text',\r\n    'date': 'text',\r\n    'datetime': 'text',\r\n    'datetime-local': 'text',\r\n    'month': 'text',\r\n    'range': 'number',\r\n    'time': 'text',\r\n    'week': 'text',\r\n\r\n  // Non-text HTML 'input' form control widgets <input type=\"...\">\r\n    // 'button': <input type=\"button\"> not used, use <button> instead\r\n    'checkbox': CheckboxComponent, // TODO: Set ternary = true for 3-state ??\r\n    'file': FileComponent, // TODO: Finish 'file' widget\r\n    'hidden': 'text',\r\n    'image': 'text', // TODO: Figure out how to handle these\r\n    'radio': 'radios',\r\n    'reset': 'submit', // TODO: Figure out how to handle these\r\n    'submit': SubmitComponent,\r\n\r\n  // Other (non-'input') HTML form control widgets\r\n    'button': ButtonComponent,\r\n    'select': SelectComponent,\r\n    // 'option': automatically generated by select widgets\r\n    // 'optgroup': automatically generated by select widgets\r\n    'textarea': TextareaComponent,\r\n\r\n  // HTML form control widget sets\r\n    'checkboxes': CheckboxesComponent, // Grouped list of checkboxes\r\n    'checkboxes-inline': 'checkboxes', // Checkboxes in one line\r\n    'checkboxbuttons': 'checkboxes', // Checkboxes as html buttons\r\n    'radios': RadiosComponent, // Grouped list of radio buttons\r\n    'radios-inline': 'radios', // Radio controls in one line\r\n    'radiobuttons': 'radios', // Radio controls as html buttons\r\n\r\n  // HTML Layout widgets\r\n    // 'label': automatically added to data widgets\r\n    // 'legend': automatically added to fieldsets\r\n    'section': SectionComponent, // Just a div <div>\r\n    'div': 'section', // Still just a div <div>\r\n    'fieldset': 'section', // A fieldset, with an optional legend <fieldset>\r\n    'flex': 'section', // A flexbox container <div style=\"display: flex\">\r\n\r\n  // Non-HTML layout widgets\r\n    'one-of': OneOfComponent, // A select box that changes another input\r\n                              // TODO: Finish 'one-of' widget\r\n    'array': 'section', // A list you can add, remove and reorder <fieldset>\r\n    'tabarray': 'tabs', // A tabbed version of array\r\n    'tab': 'section', // A tab group, similar to a fieldset or section <fieldset>\r\n    'tabs': TabsComponent, // A tabbed set of panels with different controls\r\n    'message': MessageComponent, // Insert arbitrary html\r\n    'help': 'message', // Insert arbitrary html\r\n    'msg': 'message', // Insert arbitrary html\r\n    'html': 'message', // Insert arbitrary html\r\n    'template': TemplateComponent, // Insert a custom Angular component\r\n\r\n  // Widgets included for compatibility with JSON Form API\r\n    'advancedfieldset': 'section', // Adds 'Advanced settings' title <fieldset>\r\n    'authfieldset': 'section', // Adds 'Authentication settings' title <fieldset>\r\n    'optionfieldset': 'one-of', // Option control, displays selected sub-item <fieldset>\r\n    'selectfieldset': 'one-of', // Select control, displays selected sub-item <fieldset>\r\n    'conditional': 'section', // Identical to 'section' (depeciated) <div>\r\n    'actions': 'section', // Horizontal button list, can only submit, uses buttons as items <div>\r\n    'tagsinput': 'section', // For entering short text tags <div>\r\n    // See: http://ulion.github.io/jsonform/playground/?example=fields-checkboxbuttons\r\n\r\n  // Widgets included for compatibility with React JSON Schema Form API\r\n    'updown': 'number',\r\n    'date-time': 'datetime-local',\r\n    'alt-datetime': 'datetime-local',\r\n    'alt-date': 'date',\r\n\r\n  // Widgets included for compatibility with Angular Schema Form API\r\n    'wizard': 'section', // TODO: Sequential panels with \"Next\" and \"Previous\" buttons\r\n\r\n  // Widgets included for compatibility with other libraries\r\n    'textline': 'text',\r\n\r\n  // Recommended 3rd-party add-on widgets (TODO: create wrappers for these...)\r\n    // 'ng2-select': Select control replacement - http://valor-software.com/ng2-select/\r\n    // 'flatpickr': Flatpickr date picker - https://github.com/chmln/flatpickr\r\n    // 'pikaday': Pikaday date picker - https://github.com/dbushell/Pikaday\r\n    // 'spectrum': Spectrum color picker - http://bgrins.github.io/spectrum\r\n    // 'bootstrap-slider': Bootstrap Slider range control - https://github.com/seiyria/bootstrap-slider\r\n    // 'ace': ACE code editor - https://ace.c9.io\r\n    // 'ckeditor': CKEditor HTML / rich text editor - http://ckeditor.com\r\n    // 'tinymce': TinyMCE HTML / rich text editor - https://www.tinymce.com\r\n    // 'imageselect': Bootstrap drop-down image selector - http://silviomoreto.github.io/bootstrap-select\r\n    // 'wysihtml5': HTML editor - http://jhollingworth.github.io/bootstrap-wysihtml5\r\n    // 'quill': Quill HTML / rich text editor (?) - https://quilljs.com\r\n  };\r\n  registeredWidgets: any = { };\r\n  frameworkWidgets: any = { };\r\n  activeWidgets: any = { };\r\n\r\n  constructor() {\r\n    this.setActiveWidgets();\r\n  }\r\n\r\n  setActiveWidgets(): boolean {\r\n    this.activeWidgets = Object.assign(\r\n      { }, this.widgetLibrary, this.frameworkWidgets, this.registeredWidgets\r\n    );\r\n    for (const widgetName of Object.keys(this.activeWidgets)) {\r\n      let widget: any = this.activeWidgets[widgetName];\r\n      // Resolve aliases\r\n      if (typeof widget === 'string') {\r\n        const usedAliases: string[] = [];\r\n        while (typeof widget === 'string' && !usedAliases.includes(widget)) {\r\n          usedAliases.push(widget);\r\n          widget = this.activeWidgets[widget];\r\n        }\r\n        if (typeof widget !== 'string') {\r\n          this.activeWidgets[widgetName] = widget;\r\n        }\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n\r\n  setDefaultWidget(type: string): boolean {\r\n    if (!this.hasWidget(type)) { return false; }\r\n    this.defaultWidget = type;\r\n    return true;\r\n  }\r\n\r\n  hasWidget(type: string, widgetSet = 'activeWidgets'): boolean {\r\n    if (!type || typeof type !== 'string') { return false; }\r\n    return hasOwn(this[widgetSet], type);\r\n  }\r\n\r\n  hasDefaultWidget(type: string): boolean {\r\n    return this.hasWidget(type, 'widgetLibrary');\r\n  }\r\n\r\n  registerWidget(type: string, widget: any): boolean {\r\n    if (!type || !widget || typeof type !== 'string') { return false; }\r\n    this.registeredWidgets[type] = widget;\r\n    return this.setActiveWidgets();\r\n  }\r\n\r\n  unRegisterWidget(type: string): boolean {\r\n    if (!hasOwn(this.registeredWidgets, type)) { return false; }\r\n    delete this.registeredWidgets[type];\r\n    return this.setActiveWidgets();\r\n  }\r\n\r\n  unRegisterAllWidgets(unRegisterFrameworkWidgets = true): boolean {\r\n    this.registeredWidgets = { };\r\n    if (unRegisterFrameworkWidgets) { this.frameworkWidgets = { }; }\r\n    return this.setActiveWidgets();\r\n  }\r\n\r\n  registerFrameworkWidgets(widgets: any): boolean {\r\n    if (widgets === null || typeof widgets !== 'object') { widgets = { }; }\r\n    this.frameworkWidgets = widgets;\r\n    return this.setActiveWidgets();\r\n  }\r\n\r\n  unRegisterFrameworkWidgets(): boolean {\r\n    if (Object.keys(this.frameworkWidgets).length) {\r\n      this.frameworkWidgets = { };\r\n      return this.setActiveWidgets();\r\n    }\r\n    return false;\r\n  }\r\n\r\n  getWidget(type?: string, widgetSet = 'activeWidgets'): any {\r\n    if (this.hasWidget(type, widgetSet)) {\r\n      return this[widgetSet][type];\r\n    } else if (this.hasWidget(this.defaultWidget, widgetSet)) {\r\n      return this[widgetSet][this.defaultWidget];\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  getAllWidgets(): any {\r\n    return {\r\n      widgetLibrary: this.widgetLibrary,\r\n      registeredWidgets: this.registeredWidgets,\r\n      frameworkWidgets: this.frameworkWidgets,\r\n      activeWidgets: this.activeWidgets,\r\n    };\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class Framework {\r\n  name: string;\r\n  text:string;\r\n  framework: any;\r\n  widgets?: { [key: string]: any } = {};\r\n  stylesheets?: string[] = [];\r\n  scripts?: string[] = [];\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { Observable, Subject, lastValueFrom } from 'rxjs';\r\nimport { hasOwn } from '../shared/utility.functions';\r\nimport { WidgetLibraryService } from '../widget-library/widget-library.service';\r\nimport { Framework } from './framework';\r\n\r\n// Possible future frameworks:\r\n// - Foundation 6:\r\n//   http://justindavis.co/2017/06/15/using-foundation-6-in-angular-4/\r\n//   https://github.com/zurb/foundation-sites\r\n// - Semantic UI:\r\n//   https://github.com/edcarroll/ng2-semantic-ui\r\n//   https://github.com/vladotesanovic/ngSemantic\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class FrameworkLibraryService {\r\n  activeFramework: Framework = null;\r\n  stylesheets: (HTMLStyleElement|HTMLLinkElement)[];\r\n  scripts: HTMLScriptElement[];\r\n  loadExternalAssets = false;\r\n  defaultFramework: string;\r\n  frameworkLibrary: { [name: string]: Framework } = {};\r\n\r\n  activeFrameworkName$: Observable<string>;\r\n  private activeFrameworkNameSubject: Subject<string>;\r\n  private activeFrameworkName:string;\r\n\r\n  constructor(\r\n    @Inject(Framework) private frameworks: any[],\r\n    @Inject(WidgetLibraryService) private widgetLibrary: WidgetLibraryService,\r\n    private http: HttpClient,\r\n  ) {\r\n    this.frameworks.forEach(framework =>\r\n      this.frameworkLibrary[framework.name] = framework\r\n    );\r\n    this.defaultFramework = this.frameworks[0].name;\r\n    //this.setFramework(this.defaultFramework);\r\n    \r\n    this.activeFrameworkName=this.defaultFramework;\r\n    this.activeFrameworkNameSubject = new Subject<string>();\r\n    this.activeFrameworkName$ = this.activeFrameworkNameSubject.asObservable();\r\n    this.setFramework(this.defaultFramework);\r\n  }\r\n\r\n  public setLoadExternalAssets(loadExternalAssets = true): void {\r\n    this.loadExternalAssets = !!loadExternalAssets;\r\n  }\r\n\r\n  public setFramework(\r\n    framework: string|Framework = this.defaultFramework,\r\n    loadExternalAssets = this.loadExternalAssets\r\n  ): boolean {\r\n    this.activeFramework =\r\n      typeof framework === 'string' && this.hasFramework(framework) ?\r\n        this.frameworkLibrary[framework] :\r\n      typeof framework === 'object' && hasOwn(framework, 'framework') ?\r\n        framework :\r\n        this.frameworkLibrary[this.defaultFramework];\r\n    if(this.activeFramework.name !=this.activeFrameworkName){\r\n      this.activeFrameworkName=this.activeFramework.name;\r\n      this.activeFrameworkNameSubject.next(this.activeFrameworkName);\r\n    }\r\n    return this.registerFrameworkWidgets(this.activeFramework);\r\n  }\r\n\r\n  registerFrameworkWidgets(framework: Framework): boolean {\r\n    return hasOwn(framework, 'widgets') ?\r\n      this.widgetLibrary.registerFrameworkWidgets(framework.widgets) :\r\n      this.widgetLibrary.unRegisterFrameworkWidgets();\r\n  }\r\n\r\n  public hasFramework(type: string): boolean {\r\n    return hasOwn(this.frameworkLibrary, type);\r\n  }\r\n\r\n  public getFramework(): any {\r\n    if (!this.activeFramework) { this.setFramework('default', true); }\r\n    return this.activeFramework.framework;\r\n  }\r\n\r\n  public getFrameworkList():{name:string,text:string}[] {\r\n    return this.frameworks.map(fw=>{\r\n      return {name:fw.name,text:fw.text};\r\n    })\r\n    \r\n  }\r\n\r\n  public getFrameworkWidgets(): any {\r\n    return this.activeFramework.widgets || {};\r\n  }\r\n\r\n  \r\n\r\n  public getFrameworkStylesheets(load: boolean = this.loadExternalAssets): string[] {\r\n    return (load && this.activeFramework.stylesheets) || [];\r\n  }\r\n\r\n  public getFrameworkScripts(load: boolean = this.loadExternalAssets): string[] {\r\n    return (load && this.activeFramework.scripts) || [];\r\n  }\r\n\r\n  //applies to CssFramework classes\r\n  public getFrameworkConfig(existingFramework?:any): any {\r\n    let actFramework:Framework& { [key: string]: any; }=existingFramework||this.activeFramework;\r\n    return actFramework.config;\r\n  }\r\n\r\n  //this will load the list of assets to be loaded at runtime in case the dependent framework\r\n  //scripts and styles are include locally with the parent app\r\n  public getFrameworkAssetConfig(existingFramework?:any,useAssetRelPath=true):Promise<{stylesheets:string[],scripts:string[]}>{\r\n    let actFramework:Framework& { [key: string]: any; }=existingFramework||this.activeFramework;\r\n    //TODO move this into config\r\n    const assetConfigPath = `assets/${actFramework.name}/cssframework`\r\n    const assetConfigURL = `${assetConfigPath}/assets.json`;\r\n    let subs=this.http\r\n      .get(assetConfigURL, { responseType: 'text' })\r\n      //.subscribe(assetConfig => {\r\n      //  assetConfig\r\n      //})\r\n      \r\n      return lastValueFrom(subs).then(assetCfgText=>{\r\n        let assetCfg=JSON.parse(assetCfgText);\r\n        if(useAssetRelPath){\r\n          assetCfg.stylesheets=assetCfg.stylesheets.map(styleLink=>{\r\n            //ignore relative path if url starts with known protocol or //\r\n            let nonRelPrefixes=[\"/\",\"//\",\"http:\",\"https:\"];//\"//\" list for completeness \r\n            let isNonRel=false;\r\n            nonRelPrefixes.forEach(prefix=>{\r\n              isNonRel=isNonRel||styleLink.indexOf(prefix)==0;\r\n            })\r\n            if(isNonRel){\r\n              return styleLink;\r\n            }\r\n            return `${assetConfigPath}/${styleLink}`;\r\n          })\r\n          assetCfg.scripts=assetCfg.scripts.map(scriptLink=>{\r\n            return `${assetConfigPath}/${scriptLink}`;\r\n          })\r\n        }   \r\n        return assetCfg\r\n      });\r\n  }\r\n\r\n  //applies to CssFramework classes\r\n  public getFrameworkThemes():{name:string,text:string}[] {\r\n    let cssfwConfig=this.getFrameworkConfig();\r\n    let themes;\r\n    if(cssfwConfig){\r\n      themes=cssfwConfig?.widgetstyles?.__themes__||[]\r\n    }\r\n    return themes\r\n  }\r\n\r\n  //applies to CssFramework classes\r\n  public requestThemeChange(name:string,validateThemeExists:boolean=false,existingFramework?:any){\r\n    let actFramework:Framework& { [key: string]: any; }=existingFramework||this.activeFramework;\r\n    if(actFramework.requestThemeChange){\r\n      if(validateThemeExists){  \r\n        let themes=this.getFrameworkThemes();\r\n        let foundThemes=themes.filter(thm=>{return thm.name==name});\r\n        if(!foundThemes|| foundThemes.length==0){\r\n          return false;\r\n        }\r\n      }\r\n      actFramework.requestThemeChange(name);\r\n      return true;\r\n    }\r\n  }\r\n  //applies to CssFramework classes\r\n  public getActiveTheme(existingFramework?:any):{name:string,text:string}{\r\n    let actFramework:Framework& { [key: string]: any; }=existingFramework||this.activeFramework;\r\n    if(actFramework.getActiveTheme){\r\n      return actFramework.getActiveTheme();\r\n    }\r\n  }\r\n\r\n  //applies to CssFramework classes\r\n  public registerTheme(newTheme:{name:string,text:string},existingFramework?:any):boolean{\r\n    let actFramework:Framework& { [key: string]: any; }=existingFramework||this.activeFramework;\r\n    if(actFramework.registerTheme){\r\n      return actFramework.registerTheme(newTheme);\r\n    }\r\n  }\r\n\r\n    //applies to CssFramework classes\r\n    public unregisterTheme(name:string,existingFramework?:any):boolean{\r\n      let actFramework:Framework& { [key: string]: any; }=existingFramework||this.activeFramework;\r\n      if(actFramework.registerTheme){\r\n        return actFramework.unregisterTheme(name);\r\n      }\r\n    }\r\n}\r\n","import cloneDeep from 'lodash/cloneDeep';\r\nimport isEqual from 'lodash/isEqual';\r\n\r\nimport {\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  EventEmitter,\r\n  forwardRef,\r\n  Input,\r\n  OnChanges,\r\n  OnDestroy,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { FrameworkLibraryService } from './framework-library/framework-library.service';\r\nimport { JsonSchemaFormService } from './json-schema-form.service';\r\nimport { convertSchemaToDraft6 } from './shared/convert-schema-to-draft6.function';\r\nimport { resolveSchemaReferences } from './shared/json-schema.functions';\r\nimport { JsonPointer } from './shared/jsonpointer.functions';\r\nimport { forEach, hasOwn } from './shared/utility.functions';\r\nimport {\r\n  hasValue,\r\n  inArray,\r\n  isArray,\r\n  isEmpty,\r\n  isObject\r\n} from './shared/validator.functions';\r\nimport { WidgetLibraryService } from './widget-library/widget-library.service';\r\n\r\nexport const JSON_SCHEMA_FORM_VALUE_ACCESSOR: any = {\r\n  provide: NG_VALUE_ACCESSOR,\r\n  useExisting: forwardRef(() => JsonSchemaFormComponent),\r\n  multi: true,\r\n};\r\n\r\n/**\r\n * @module 'JsonSchemaFormComponent' - Angular JSON Schema Form\r\n *\r\n * Root module of the Angular JSON Schema Form client-side library,\r\n * an Angular library which generates an HTML form from a JSON schema\r\n * structured data model and/or a JSON Schema Form layout description.\r\n *\r\n * This library also validates input data by the user, using both validators on\r\n * individual controls to provide real-time feedback while the user is filling\r\n * out the form, and then validating the entire input against the schema when\r\n * the form is submitted to make sure the returned JSON data object is valid.\r\n *\r\n * This library is similar to, and mostly API compatible with:\r\n *\r\n * - JSON Schema Form's Angular Schema Form library for AngularJs\r\n *   http://schemaform.io\r\n *   http://schemaform.io/examples/bootstrap-example.html (examples)\r\n *\r\n * - Mozilla's react-jsonschema-form library for React\r\n *   https://github.com/mozilla-services/react-jsonschema-form\r\n *   https://mozilla-services.github.io/react-jsonschema-form (examples)\r\n *\r\n * - Joshfire's JSON Form library for jQuery\r\n *   https://github.com/joshfire/jsonform\r\n *   http://ulion.github.io/jsonform/playground (examples)\r\n *\r\n * This library depends on:\r\n *  - Angular (obviously)                  https://angular.io\r\n *  - lodash, JavaScript utility library   https://github.com/lodash/lodash\r\n *  - ajv, Another JSON Schema validator   https://github.com/epoberezkin/ajv\r\n *\r\n * In addition, the Example Playground also depends on:\r\n *  - brace, Browserified Ace editor       http://thlorenz.github.io/brace\r\n */\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'json-schema-form',\r\n  templateUrl: './json-schema-form.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  // Adding 'JsonSchemaFormService' here, instead of in the module,\r\n  // creates a separate instance of the service for each component\r\n  providers:  [ JsonSchemaFormService, JSON_SCHEMA_FORM_VALUE_ACCESSOR ],\r\n})\r\nexport class JsonSchemaFormComponent implements ControlValueAccessor, OnChanges, OnInit,OnDestroy {\r\n  // TODO: quickfix to avoid subscribing twice to the same emitters\r\n  private unsubscribeOnActivateForm$ = new Subject<void>();\r\n\r\n  debugOutput: any; // Debug information, if requested\r\n  formValueSubscription: any = null;\r\n  formInitialized = false;\r\n  objectWrap = false; // Is non-object input schema wrapped in an object?\r\n\r\n  formValuesInput: string; // Name of the input providing the form data\r\n  previousInputs: { // Previous input values, to detect which input triggers onChanges\r\n    schema: any, layout: any[], data: any, options: any, framework: any | string,\r\n    widgets: any, form: any, model: any, JSONSchema: any, UISchema: any,\r\n    formData: any, loadExternalAssets: boolean, debug: boolean,\r\n  } = {\r\n      schema: null, layout: null, data: null, options: null, framework: null,\r\n      widgets: null, form: null, model: null, JSONSchema: null, UISchema: null,\r\n      formData: null, loadExternalAssets: null, debug: null,\r\n    };\r\n\r\n  // Recommended inputs\r\n  @Input() schema: any; // The JSON Schema\r\n  @Input() layout: any[]; // The form layout\r\n  @Input() data: any; // The form data\r\n  @Input() options: any; // The global form options\r\n  @Input() framework: any | string; // The framework to load\r\n  @Input() widgets: any; // Any custom widgets to load\r\n\r\n  // Alternate combined single input\r\n  @Input() form: any; // For testing, and JSON Schema Form API compatibility\r\n\r\n  // Angular Schema Form API compatibility input\r\n  @Input() model: any; // Alternate input for form data\r\n\r\n  // React JSON Schema Form API compatibility inputs\r\n  @Input() JSONSchema: any; // Alternate input for JSON Schema\r\n  @Input() UISchema: any; // UI schema - alternate form layout format\r\n  @Input() formData: any; // Alternate input for form data\r\n\r\n  @Input() ngModel: any; // Alternate input for Angular forms\r\n\r\n  @Input() language: string; // Language\r\n\r\n  // Development inputs, for testing and debugging\r\n  @Input() loadExternalAssets: boolean; // Load external framework assets?\r\n  @Input() debug: boolean; // Show debug information?\r\n\r\n  @Input() theme: string; // Theme\r\n\r\n  @Input()\r\n  get value(): any {\r\n    return this.objectWrap ? this.jsf.data['1'] : this.jsf.data;\r\n  }\r\n  set value(value: any) {\r\n    this.setFormValues(value, false);\r\n  }\r\n\r\n  // Outputs\r\n  @Output() onChanges = new EventEmitter<any>(); // Live unvalidated internal form data\r\n  @Output() onSubmit = new EventEmitter<any>(); // Complete validated form data\r\n  @Output() isValid = new EventEmitter<boolean>(); // Is current data valid?\r\n  @Output() validationErrors = new EventEmitter<any>(); // Validation errors (if any)\r\n  @Output() formSchema = new EventEmitter<any>(); // Final schema used to create form\r\n  @Output() formLayout = new EventEmitter<any>(); // Final layout used to create form\r\n\r\n  // Outputs for possible 2-way data binding\r\n  // Only the one input providing the initial form data will be bound.\r\n  // If there is no inital data, input '{}' to activate 2-way data binding.\r\n  // There is no 2-way binding if inital data is combined inside the 'form' input.\r\n  @Output() dataChange = new EventEmitter<any>();\r\n  @Output() modelChange = new EventEmitter<any>();\r\n  @Output() formDataChange = new EventEmitter<any>();\r\n  @Output() ngModelChange = new EventEmitter<any>();\r\n\r\n  onChange: Function;\r\n  onTouched: Function;\r\n\r\n  //TODO-review,maybe use takeUntilDestroyed rxjs op\r\n  dataChangesSubs:Subscription;\r\n  statusChangesSubs:Subscription;\r\n  isValidChangesSubs:Subscription;\r\n  validationErrorChangesSubs:Subscription;\r\n\r\n  constructor(\r\n    private changeDetector: ChangeDetectorRef,\r\n    private frameworkLibrary: FrameworkLibraryService,\r\n    private widgetLibrary: WidgetLibraryService,\r\n    public jsf: JsonSchemaFormService,\r\n  ) { }\r\n  ngOnDestroy(): void {\r\n    this.dataChangesSubs?.unsubscribe();\r\n    this.statusChangesSubs?.unsubscribe();\r\n    this.isValidChangesSubs?.unsubscribe();\r\n    this.validationErrorChangesSubs?.unsubscribe();\r\n    this.dataChangesSubs=null;\r\n    this.statusChangesSubs=null;\r\n    this.isValidChangesSubs=null;\r\n    this.validationErrorChangesSubs=null;\r\n  }\r\n\r\n  private resetScriptsAndStyleSheets() {\r\n    document.querySelectorAll('.ajsf').forEach(element => element.remove());\r\n  }\r\n  private loadScripts(scriptList?:string[]) {\r\n    const scripts = scriptList||this.frameworkLibrary.getFrameworkScripts();\r\n    scripts.map(script => {\r\n      const scriptTag: HTMLScriptElement = document.createElement('script');\r\n      scriptTag.src = script;\r\n      scriptTag.type = 'text/javascript';\r\n      scriptTag.async = true;\r\n      scriptTag.setAttribute('class', 'ajsf');\r\n      document.getElementsByTagName('head')[0].appendChild(scriptTag);\r\n    });\r\n  }\r\n  private loadStyleSheets(styleList?:string[]) {\r\n    const stylesheets = styleList||this.frameworkLibrary.getFrameworkStylesheets();\r\n    stylesheets.map(stylesheet => {\r\n      const linkTag: HTMLLinkElement = document.createElement('link');\r\n      linkTag.rel = 'stylesheet';\r\n      linkTag.href = stylesheet;\r\n      linkTag.setAttribute('class', 'ajsf');\r\n      document.getElementsByTagName('head')[0].appendChild(linkTag);\r\n    });\r\n  }\r\n  private loadAssets() {\r\n    this.frameworkLibrary.getFrameworkAssetConfig().then(assetCfg=>{\r\n      this.resetScriptsAndStyleSheets();\r\n      this.loadScripts(assetCfg.scripts);\r\n      this.loadStyleSheets(assetCfg.stylesheets);\r\n    }).catch(err=>{\r\n      console.log(err);\r\n      this.resetScriptsAndStyleSheets();\r\n      this.loadScripts();\r\n      this.loadStyleSheets();\r\n    })\r\n\r\n  }\r\n  ngOnInit() {\r\n    this.updateForm();\r\n    this.loadAssets();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    this.updateForm();\r\n    // Check if there's changes in Framework then load assets if that's the\r\n    if (changes.framework) {\r\n      if (!changes.framework.isFirstChange() &&\r\n        (changes.framework.previousValue !== changes.framework.currentValue)) {\r\n        this.loadAssets();\r\n      }\r\n    }\r\n  }\r\n\r\n  writeValue(value: any) {\r\n    this.setFormValues(value, false);\r\n    if (!this.formValuesInput) { this.formValuesInput = 'ngModel'; }\r\n  }\r\n\r\n  registerOnChange(fn: Function) {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: Function) {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  //see note\r\n  //https://angular.io/guide/update-to-version-15#v15-bc-06\r\n  setDisabledState(isDisabled: boolean) {\r\n    if (this.jsf.formOptions.formDisabled !== !!isDisabled) {\r\n      this.jsf.formOptions.formDisabled = !!isDisabled;\r\n      this.initializeForm();\r\n    }\r\n  }\r\n\r\n  updateForm() {\r\n      let changedData;\r\n    if (!this.formInitialized || !this.formValuesInput ||\r\n      (this.language && this.language !== this.jsf.language)\r\n      \r\n    ) {\r\n      this.initializeForm();\r\n    } else {\r\n      if (this.language && this.language !== this.jsf.language) {\r\n        this.jsf.setLanguage(this.language);\r\n      }\r\n\r\n      // Get names of changed inputs\r\n      let changedInput = Object.keys(this.previousInputs)\r\n        .filter(input => this.previousInputs[input] !== this[input]);\r\n      let resetFirst = true;\r\n      if (changedInput.length === 1 && changedInput[0] === 'form' &&\r\n        this.formValuesInput.startsWith('form.')\r\n      ) {\r\n        // If only 'form' input changed, get names of changed keys\r\n        changedInput = Object.keys(this.previousInputs.form || {})\r\n          .filter(key => !isEqual(this.previousInputs.form[key], this.form[key]))\r\n          .map(key => `form.${key}`);\r\n        resetFirst = false;\r\n      }\r\n\r\n      // If only input values have changed, update the form values\r\n      if (changedInput.length === 1 && changedInput[0] === this.formValuesInput) {\r\n        if (this.formValuesInput.indexOf('.') === -1) {\r\n          changedData=this[this.formValuesInput];\r\n          this.setFormValues(changedData, resetFirst);\r\n        } else {\r\n          const [input, key] = this.formValuesInput.split('.');\r\n          changedData=this[input][key];\r\n          this.setFormValues(changedData, resetFirst);\r\n        }\r\n\r\n        // If anything else has changed, re-render the entire form\r\n      } else if (changedInput.length) {\r\n        this.initializeForm(changedData);\r\n        if (this.onChange) { this.onChange(this.jsf.formValues); }\r\n        if (this.onTouched) { this.onTouched(this.jsf.formValues); }\r\n      }\r\n      \r\n      //set framework theme\r\n      if (this.theme && this.theme !== this.frameworkLibrary.getActiveTheme()?.name) {\r\n        this.frameworkLibrary.requestThemeChange(this.theme);\r\n      }\r\n\r\n      // Update previous inputs\r\n      Object.keys(this.previousInputs)\r\n        .filter(input => this.previousInputs[input] !== this[input])\r\n        .forEach(input => this.previousInputs[input] = this[input]);\r\n    }\r\n  }\r\n\r\n  setFormValues(formValues: any, resetFirst = true) {\r\n    if (formValues) {\r\n      const newFormValues = this.objectWrap ? formValues['1'] : formValues;\r\n      if (!this.jsf.formGroup) {\r\n        this.jsf.formValues = formValues;\r\n        this.activateForm();\r\n      } else if (resetFirst) {//changed to avoid reset events\r\n        this.jsf.formGroup.reset({},{emitEvent:false});\r\n      }\r\n      if (this.jsf.formGroup) {//changed to avoid reset events\r\n        this.jsf.formGroup.patchValue(newFormValues,{emitEvent:false});\r\n      }\r\n      if (this.onChange) { this.onChange(newFormValues); }\r\n      if (this.onTouched) { this.onTouched(newFormValues); }\r\n    } else {\r\n      this.jsf.formGroup.reset();\r\n    }\r\n  }\r\n\r\n  submitForm() {\r\n    const validData = this.jsf.validData;\r\n    this.onSubmit.emit(this.objectWrap ? validData['1'] : validData);\r\n  }\r\n\r\n  /**\r\n   * 'initializeForm' function\r\n   *\r\n   * - Update 'schema', 'layout', and 'formValues', from inputs.\r\n   *\r\n   * - Create 'schemaRefLibrary' and 'schemaRecursiveRefMap'\r\n   *   to resolve schema $ref links, including recursive $ref links.\r\n   *\r\n   * - Create 'dataRecursiveRefMap' to resolve recursive links in data\r\n   *   and corectly set output formats for recursively nested values.\r\n   *\r\n   * - Create 'layoutRefLibrary' and 'templateRefLibrary' to store\r\n   *   new layout nodes and formGroup elements to use when dynamically\r\n   *   adding form components to arrays and recursive $ref points.\r\n   *\r\n   * - Create 'dataMap' to map the data to the schema and template.\r\n   *\r\n   * - Create the master 'formGroupTemplate' then from it 'formGroup'\r\n   *   the Angular formGroup used to control the reactive form.\r\n   */\r\n  initializeForm(initialData?:any) {\r\n    if (\r\n      this.schema || this.layout || this.data || this.form || this.model ||\r\n      this.JSONSchema || this.UISchema || this.formData || this.ngModel ||\r\n      this.jsf.data\r\n    ) {\r\n      // Reset all form values to defaults\r\n      this.jsf.resetAllValues();\r\n      this.initializeOptions();   // Update options\r\n      this.initializeSchema();    // Update schema, schemaRefLibrary,\r\n      // schemaRecursiveRefMap, & dataRecursiveRefMap\r\n      this.initializeLayout();    // Update layout, layoutRefLibrary,\r\n      this.initializeData();      // Update formValues\r\n      if(initialData){\r\n        this.jsf.formValues=initialData;\r\n      }\r\n      this.activateForm();        // Update dataMap, templateRefLibrary,\r\n      // formGroupTemplate, formGroup\r\n\r\n      // Uncomment individual lines to output debugging information to console:\r\n      // (These always work.)\r\n      // console.log('loading form...');\r\n      // console.log('schema', this.jsf.schema);\r\n      // console.log('layout', this.jsf.layout);\r\n      // console.log('options', this.options);\r\n      // console.log('formValues', this.jsf.formValues);\r\n      // console.log('formGroupTemplate', this.jsf.formGroupTemplate);\r\n      // console.log('formGroup', this.jsf.formGroup);\r\n      // console.log('formGroup.value', this.jsf.formGroup.value);\r\n      // console.log('schemaRefLibrary', this.jsf.schemaRefLibrary);\r\n      // console.log('layoutRefLibrary', this.jsf.layoutRefLibrary);\r\n      // console.log('templateRefLibrary', this.jsf.templateRefLibrary);\r\n      // console.log('dataMap', this.jsf.dataMap);\r\n      // console.log('arrayMap', this.jsf.arrayMap);\r\n      // console.log('schemaRecursiveRefMap', this.jsf.schemaRecursiveRefMap);\r\n      // console.log('dataRecursiveRefMap', this.jsf.dataRecursiveRefMap);\r\n\r\n      // Uncomment individual lines to output debugging information to browser:\r\n      // (These only work if the 'debug' option has also been set to 'true'.)\r\n      if (this.debug || this.jsf.formOptions.debug) {\r\n        const vars: any[] = [];\r\n        // vars.push(this.jsf.schema);\r\n        // vars.push(this.jsf.layout);\r\n        // vars.push(this.options);\r\n        // vars.push(this.jsf.formValues);\r\n        // vars.push(this.jsf.formGroup.value);\r\n        // vars.push(this.jsf.formGroupTemplate);\r\n        // vars.push(this.jsf.formGroup);\r\n        // vars.push(this.jsf.schemaRefLibrary);\r\n        // vars.push(this.jsf.layoutRefLibrary);\r\n        // vars.push(this.jsf.templateRefLibrary);\r\n        // vars.push(this.jsf.dataMap);\r\n        // vars.push(this.jsf.arrayMap);\r\n        // vars.push(this.jsf.schemaRecursiveRefMap);\r\n        // vars.push(this.jsf.dataRecursiveRefMap);\r\n        this.debugOutput = vars.map(v => JSON.stringify(v, null, 2)).join('\\n');\r\n      }\r\n      this.formInitialized = true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 'initializeOptions' function\r\n   *\r\n   * Initialize 'options' (global form options) and set framework\r\n   * Combine available inputs:\r\n   * 1. options - recommended\r\n   * 2. form.options - Single input style\r\n   */\r\n  private initializeOptions() {\r\n    if (this.language && this.language !== this.jsf.language) {\r\n      this.jsf.setLanguage(this.language);\r\n    }\r\n    this.jsf.setOptions({ debug: !!this.debug });\r\n    let loadExternalAssets: boolean = this.loadExternalAssets || false;\r\n    let framework: any = this.framework || 'default';\r\n    if (isObject(this.options)) {\r\n      this.jsf.setOptions(this.options);\r\n      loadExternalAssets = this.options.loadExternalAssets || loadExternalAssets;\r\n      framework = this.options.framework || framework;\r\n    }\r\n    if (isObject(this.form) && isObject(this.form.options)) {\r\n      this.jsf.setOptions(this.form.options);\r\n      loadExternalAssets = this.form.options.loadExternalAssets || loadExternalAssets;\r\n      framework = this.form.options.framework || framework;\r\n    }\r\n    if (isObject(this.widgets)) {\r\n      this.jsf.setOptions({ widgets: this.widgets });\r\n    }\r\n    this.frameworkLibrary.setLoadExternalAssets(loadExternalAssets);\r\n    this.frameworkLibrary.setFramework(framework);\r\n    this.jsf.framework = this.frameworkLibrary.getFramework();\r\n    if (isObject(this.jsf.formOptions.widgets)) {\r\n      for (const widget of Object.keys(this.jsf.formOptions.widgets)) {\r\n        this.widgetLibrary.registerWidget(widget, this.jsf.formOptions.widgets[widget]);\r\n      }\r\n    }\r\n    if (isObject(this.form) && isObject(this.form.tpldata)) {\r\n      this.jsf.setTpldata(this.form.tpldata);\r\n    }\r\n    if (this.theme) {\r\n      this.frameworkLibrary.requestThemeChange(this.theme);\r\n    }\r\n  }\r\n\r\n\r\n  /**\r\n   * 'initializeSchema' function\r\n   *\r\n   * Initialize 'schema'\r\n   * Use first available input:\r\n   * 1. schema - recommended / Angular Schema Form style\r\n   * 2. form.schema - Single input / JSON Form style\r\n   * 3. JSONSchema - React JSON Schema Form style\r\n   * 4. form.JSONSchema - For testing single input React JSON Schema Forms\r\n   * 5. form - For testing single schema-only inputs\r\n   *\r\n   * ... if no schema input found, the 'activateForm' function, below,\r\n   *     will make two additional attempts to build a schema\r\n   * 6. If layout input - build schema from layout\r\n   * 7. If data input - build schema from data\r\n   */\r\n  private initializeSchema() {\r\n\r\n    // TODO: update to allow non-object schemas\r\n\r\n    if (isObject(this.schema)) {\r\n      this.jsf.AngularSchemaFormCompatibility = true;\r\n      this.jsf.schema = cloneDeep(this.schema);\r\n    } else if (hasOwn(this.form, 'schema') && isObject(this.form.schema)) {\r\n      this.jsf.schema = cloneDeep(this.form.schema);\r\n    } else if (isObject(this.JSONSchema)) {\r\n      this.jsf.ReactJsonSchemaFormCompatibility = true;\r\n      this.jsf.schema = cloneDeep(this.JSONSchema);\r\n    } else if (hasOwn(this.form, 'JSONSchema') && isObject(this.form.JSONSchema)) {\r\n      this.jsf.ReactJsonSchemaFormCompatibility = true;\r\n      this.jsf.schema = cloneDeep(this.form.JSONSchema);\r\n    } else if (hasOwn(this.form, 'properties') && isObject(this.form.properties)) {\r\n      this.jsf.schema = cloneDeep(this.form);\r\n    } else if (isObject(this.form)) {\r\n      // TODO: Handle other types of form input\r\n    }\r\n\r\n    if (!isEmpty(this.jsf.schema)) {\r\n\r\n      // If other types also allowed, render schema as an object\r\n      if (inArray('object', this.jsf.schema.type)) {\r\n        this.jsf.schema.type = 'object';\r\n      }\r\n\r\n      // Wrap non-object schemas in object.\r\n      if (hasOwn(this.jsf.schema, 'type') && this.jsf.schema.type !== 'object') {\r\n        this.jsf.schema = {\r\n          'type': 'object',\r\n          'properties': { 1: this.jsf.schema }\r\n        };\r\n        this.objectWrap = true;\r\n      } else if (!hasOwn(this.jsf.schema, 'type')) {\r\n\r\n        // Add type = 'object' if missing\r\n        if (isObject(this.jsf.schema.properties) ||\r\n          isObject(this.jsf.schema.patternProperties) ||\r\n          isObject(this.jsf.schema.additionalProperties)\r\n        ) {\r\n          this.jsf.schema.type = 'object';\r\n\r\n          // Fix JSON schema shorthand (JSON Form style)\r\n        } else {\r\n          this.jsf.JsonFormCompatibility = true;\r\n          this.jsf.schema = {\r\n            'type': 'object',\r\n            'properties': this.jsf.schema\r\n          };\r\n        }\r\n      }\r\n\r\n      // If needed, update JSON Schema to draft 6 format, including\r\n      // draft 3 (JSON Form style) and draft 4 (Angular Schema Form style)\r\n      this.jsf.schema = convertSchemaToDraft6(this.jsf.schema);\r\n\r\n      // Initialize ajv and compile schema\r\n      this.jsf.compileAjvSchema();\r\n\r\n      // Create schemaRefLibrary, schemaRecursiveRefMap, dataRecursiveRefMap, & arrayMap\r\n      this.jsf.schema = resolveSchemaReferences(\r\n        this.jsf.schema, this.jsf.schemaRefLibrary, this.jsf.schemaRecursiveRefMap,\r\n        this.jsf.dataRecursiveRefMap, this.jsf.arrayMap\r\n      );\r\n      if (hasOwn(this.jsf.schemaRefLibrary, '')) {\r\n        this.jsf.hasRootReference = true;\r\n      }\r\n\r\n      // TODO: (?) Resolve external $ref links\r\n      // // Create schemaRefLibrary & schemaRecursiveRefMap\r\n      // this.parser.bundle(this.schema)\r\n      //   .then(schema => this.schema = resolveSchemaReferences(\r\n      //     schema, this.jsf.schemaRefLibrary,\r\n      //     this.jsf.schemaRecursiveRefMap, this.jsf.dataRecursiveRefMap\r\n      //   ));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 'initializeData' function\r\n   *\r\n   * Initialize 'formValues'\r\n   * defulat or previously submitted values used to populate form\r\n   * Use first available input:\r\n   * 1. data - recommended\r\n   * 2. model - Angular Schema Form style\r\n   * 3. form.value - JSON Form style\r\n   * 4. form.data - Single input style\r\n   * 5. formData - React JSON Schema Form style\r\n   * 6. form.formData - For easier testing of React JSON Schema Forms\r\n   * 7. (none) no data - initialize data from schema and layout defaults only\r\n   */\r\n  private initializeData() {\r\n    if (hasValue(this.data)) {\r\n      this.jsf.formValues = cloneDeep(this.data);\r\n      this.formValuesInput = 'data';\r\n    } else if (hasValue(this.model)) {\r\n      this.jsf.AngularSchemaFormCompatibility = true;\r\n      this.jsf.formValues = cloneDeep(this.model);\r\n      this.formValuesInput = 'model';\r\n    } else if (hasValue(this.ngModel)) {\r\n      this.jsf.AngularSchemaFormCompatibility = true;\r\n      this.jsf.formValues = cloneDeep(this.ngModel);\r\n      this.formValuesInput = 'ngModel';\r\n    } else if (isObject(this.form) && hasValue(this.form.value)) {\r\n      this.jsf.JsonFormCompatibility = true;\r\n      this.jsf.formValues = cloneDeep(this.form.value);\r\n      this.formValuesInput = 'form.value';\r\n    } else if (isObject(this.form) && hasValue(this.form.data)) {\r\n      this.jsf.formValues = cloneDeep(this.form.data);\r\n      this.formValuesInput = 'form.data';\r\n    } else if (hasValue(this.formData)) {\r\n      this.jsf.ReactJsonSchemaFormCompatibility = true;\r\n      this.formValuesInput = 'formData';\r\n    } else if (hasOwn(this.form, 'formData') && hasValue(this.form.formData)) {\r\n      this.jsf.ReactJsonSchemaFormCompatibility = true;\r\n      this.jsf.formValues = cloneDeep(this.form.formData);\r\n      this.formValuesInput = 'form.formData';\r\n    } else {\r\n      this.formValuesInput = \"data\";//null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 'initializeLayout' function\r\n   *\r\n   * Initialize 'layout'\r\n   * Use first available array input:\r\n   * 1. layout - recommended\r\n   * 2. form - Angular Schema Form style\r\n   * 3. form.form - JSON Form style\r\n   * 4. form.layout - Single input style\r\n   * 5. (none) no layout - set default layout instead\r\n   *    (full layout will be built later from the schema)\r\n   *\r\n   * Also, if alternate layout formats are available,\r\n   * import from 'UISchema' or 'customFormItems'\r\n   * used for React JSON Schema Form and JSON Form API compatibility\r\n   * Use first available input:\r\n   * 1. UISchema - React JSON Schema Form style\r\n   * 2. form.UISchema - For testing single input React JSON Schema Forms\r\n   * 2. form.customFormItems - JSON Form style\r\n   * 3. (none) no input - don't import\r\n   */\r\n  private initializeLayout() {\r\n\r\n    // Rename JSON Form-style 'options' lists to\r\n    // Angular Schema Form-style 'titleMap' lists.\r\n    const fixJsonFormOptions = (layout: any): any => {\r\n      if (isObject(layout) || isArray(layout)) {\r\n        forEach(layout, (value, key) => {\r\n          if (hasOwn(value, 'options') && isObject(value.options)) {\r\n            value.titleMap = value.options;\r\n            delete value.options;\r\n          }\r\n        }, 'top-down');\r\n      }\r\n      return layout;\r\n    };\r\n\r\n    // Check for layout inputs and, if found, initialize form layout\r\n    if (isArray(this.layout)) {\r\n      this.jsf.layout = cloneDeep(this.layout);\r\n    } else if (isArray(this.form)) {\r\n      this.jsf.AngularSchemaFormCompatibility = true;\r\n      this.jsf.layout = cloneDeep(this.form);\r\n    } else if (this.form && isArray(this.form.form)) {\r\n      this.jsf.JsonFormCompatibility = true;\r\n      this.jsf.layout = fixJsonFormOptions(cloneDeep(this.form.form));\r\n    } else if (this.form && isArray(this.form.layout)) {\r\n      this.jsf.layout = cloneDeep(this.form.layout);\r\n    } else {\r\n      this.jsf.layout = ['*'];\r\n    }\r\n\r\n    // Check for alternate layout inputs\r\n    let alternateLayout: any = null;\r\n    if (isObject(this.UISchema)) {\r\n      this.jsf.ReactJsonSchemaFormCompatibility = true;\r\n      alternateLayout = cloneDeep(this.UISchema);\r\n    } else if (hasOwn(this.form, 'UISchema')) {\r\n      this.jsf.ReactJsonSchemaFormCompatibility = true;\r\n      alternateLayout = cloneDeep(this.form.UISchema);\r\n    } else if (hasOwn(this.form, 'uiSchema')) {\r\n      this.jsf.ReactJsonSchemaFormCompatibility = true;\r\n      alternateLayout = cloneDeep(this.form.uiSchema);\r\n    } else if (hasOwn(this.form, 'customFormItems')) {\r\n      this.jsf.JsonFormCompatibility = true;\r\n      alternateLayout = fixJsonFormOptions(cloneDeep(this.form.customFormItems));\r\n    }\r\n\r\n    // if alternate layout found, copy alternate layout options into schema\r\n    if (alternateLayout) {\r\n      JsonPointer.forEachDeep(alternateLayout, (value, pointer) => {\r\n        const schemaPointer = pointer\r\n          .replace(/\\//g, '/properties/')\r\n          .replace(/\\/properties\\/items\\/properties\\//g, '/items/properties/')\r\n          .replace(/\\/properties\\/titleMap\\/properties\\//g, '/titleMap/properties/');\r\n        if (hasValue(value) && hasValue(pointer)) {\r\n          let key = JsonPointer.toKey(pointer);\r\n          const groupPointer = (JsonPointer.parse(schemaPointer) || []).slice(0, -2);\r\n          let itemPointer: string | string[];\r\n\r\n          // If 'ui:order' object found, copy into object schema root\r\n          if (key.toLowerCase() === 'ui:order') {\r\n            itemPointer = [...groupPointer, 'ui:order'];\r\n\r\n            // Copy other alternate layout options to schema 'x-schema-form',\r\n            // (like Angular Schema Form options) and remove any 'ui:' prefixes\r\n          } else {\r\n            if (key.slice(0, 3).toLowerCase() === 'ui:') { key = key.slice(3); }\r\n            itemPointer = [...groupPointer, 'x-schema-form', key];\r\n          }\r\n          if (JsonPointer.has(this.jsf.schema, groupPointer) &&\r\n            !JsonPointer.has(this.jsf.schema, itemPointer)\r\n          ) {\r\n            JsonPointer.set(this.jsf.schema, itemPointer, value);\r\n          }\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 'activateForm' function\r\n   *\r\n   * ...continued from 'initializeSchema' function, above\r\n   * If 'schema' has not been initialized (i.e. no schema input found)\r\n   * 6. If layout input - build schema from layout input\r\n   * 7. If data input - build schema from data input\r\n   *\r\n   * Create final layout,\r\n   * build the FormGroup template and the Angular FormGroup,\r\n   * subscribe to changes,\r\n   * and activate the form.\r\n   */\r\n  private activateForm() {\r\n    this.unsubscribeOnActivateForm$.next();\r\n    // If 'schema' not initialized\r\n    if (isEmpty(this.jsf.schema)) {\r\n\r\n      // TODO: If full layout input (with no '*'), build schema from layout\r\n      // if (!this.jsf.layout.includes('*')) {\r\n      //   this.jsf.buildSchemaFromLayout();\r\n      // } else\r\n\r\n      // If data input, build schema from data\r\n      if (!isEmpty(this.jsf.formValues)) {\r\n        this.jsf.buildSchemaFromData();\r\n      }\r\n    }\r\n\r\n    if (!isEmpty(this.jsf.schema)) {\r\n\r\n      // If not already initialized, initialize ajv and compile schema\r\n      this.jsf.compileAjvSchema();\r\n\r\n      // Update all layout elements, add values, widgets, and validators,\r\n      // replace any '*' with a layout built from all schema elements,\r\n      // and update the FormGroup template with any new validators\r\n      this.jsf.buildLayout(this.widgetLibrary);\r\n\r\n      // Build the Angular FormGroup template from the schema\r\n      this.jsf.buildFormGroupTemplate(this.jsf.formValues);\r\n\r\n      // Build the real Angular FormGroup from the FormGroup template\r\n      this.jsf.buildFormGroup();\r\n    }\r\n\r\n    if (this.jsf.formGroup) {\r\n\r\n      // Reset initial form values\r\n      if (!isEmpty(this.jsf.formValues) &&\r\n        this.jsf.formOptions.setSchemaDefaults !== true &&\r\n        this.jsf.formOptions.setLayoutDefaults !== true\r\n      ) {\r\n        this.setFormValues(this.jsf.formValues);\r\n      }\r\n\r\n      // TODO: Figure out how to display calculated values without changing object data\r\n      // See http://ulion.github.io/jsonform/playground/?example=templating-values\r\n      // Calculate references to other fields\r\n      // if (!isEmpty(this.jsf.formGroup.value)) {\r\n      //   forEach(this.jsf.formGroup.value, (value, key, object, rootObject) => {\r\n      //     if (typeof value === 'string') {\r\n      //       object[key] = this.jsf.parseText(value, value, rootObject, key);\r\n      //     }\r\n      //   }, 'top-down');\r\n      // }\r\n\r\n      // Subscribe to form changes to output live data, validation, and errors\r\n      this.dataChangesSubs=this.jsf.dataChanges.pipe(takeUntil(this.unsubscribeOnActivateForm$)).subscribe(data => {\r\n        this.onChanges.emit(this.objectWrap ? data['1'] : data);\r\n        if (this.formValuesInput && this.formValuesInput.indexOf('.') === -1) {\r\n          this[`${this.formValuesInput}Change`].emit(this.objectWrap ? data['1'] : data);\r\n        }\r\n      });\r\n\r\n      // Trigger change detection on statusChanges to show updated errors\r\n      this.statusChangesSubs= this.jsf.formGroup.statusChanges.pipe(takeUntil(this.unsubscribeOnActivateForm$)).subscribe(() => this.changeDetector.markForCheck());\r\n      this.isValidChangesSubs=this.jsf.isValidChanges.pipe(takeUntil(this.unsubscribeOnActivateForm$)).subscribe(isValid => this.isValid.emit(isValid));\r\n      this.validationErrorChangesSubs=this.jsf.validationErrorChanges.pipe(takeUntil(this.unsubscribeOnActivateForm$)).subscribe(err => this.validationErrors.emit(err));\r\n\r\n      // Output final schema, final layout, and initial data\r\n      this.formSchema.emit(this.jsf.schema);\r\n      this.formLayout.emit(this.jsf.layout);\r\n      this.onChanges.emit(this.objectWrap ? this.jsf.data['1'] : this.jsf.data);\r\n\r\n      // If validateOnRender, output initial validation and any errors\r\n      const validateOnRender =\r\n        JsonPointer.get(this.jsf, '/formOptions/validateOnRender');\r\n      if (validateOnRender) { // validateOnRender === 'auto' || true\r\n        const touchAll = (control) => {\r\n          if (validateOnRender === true || hasValue(control.value)) {\r\n            control.markAsTouched();\r\n          }\r\n          Object.keys(control.controls || {})\r\n            .forEach(key => touchAll(control.controls[key]));\r\n        };\r\n        touchAll(this.jsf.formGroup);\r\n        this.isValid.emit(this.jsf.isValid);\r\n        this.validationErrors.emit(this.jsf.ajvErrors);\r\n      }\r\n    }\r\n  }\r\n\r\n}\r\n","<form [autocomplete]=\"jsf?.formOptions?.autocomplete ? 'on' : 'off'\" class=\"json-schema-form\" (ngSubmit)=\"submitForm()\">\r\n  <root-widget [layout]=\"jsf?.layout\"></root-widget>\r\n</form>\r\n<div *ngIf=\"debug || jsf?.formOptions?.debug\">\r\n  Debug output:\r\n  <pre>{{debugOutput}}</pre>\r\n</div>","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'no-framework',\r\n  templateUrl: './no-framework.component.html',\r\n})\r\nexport class NoFrameworkComponent {\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n}\r\n","<select-widget-widget [dataIndex]=\"dataIndex\" [layoutIndex]=\"layoutIndex\" [layoutNode]=\"layoutNode\">\r\n</select-widget-widget>","import { Injectable } from '@angular/core';\r\nimport { Framework } from './framework';\r\nimport { NoFrameworkComponent } from './no-framework.component';\r\n// No framework - plain HTML controls (styles from form layout only)\r\n\r\n@Injectable()\r\nexport class NoFramework extends Framework {\r\n  name = 'no-framework';\r\n  text ='None (plain HTML)';\r\n  framework = NoFrameworkComponent;\r\n}\r\n","import { AbstractControl } from '@angular/forms';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'hidden-widget',\r\n  template: `\r\n    <input *ngIf=\"boundControl\"\r\n      [formControl]=\"formControl\"\r\n      [id]=\"'control' + layoutNode?._id\"\r\n      [name]=\"controlName\"\r\n      type=\"hidden\">\r\n    <input *ngIf=\"!boundControl\"\r\n      [disabled]=\"controlDisabled\"\r\n      [name]=\"controlName\"\r\n      [id]=\"'control' + layoutNode?._id\"\r\n      type=\"hidden\"\r\n      [value]=\"controlValue\">`,\r\n})\r\nexport class HiddenComponent implements OnInit {\r\n  formControl: AbstractControl;\r\n  controlName: string;\r\n  controlValue: any;\r\n  controlDisabled = false;\r\n  boundControl = false;\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.jsf.initializeControl(this);\r\n  }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { JsonSchemaFormService } from '../json-schema-form.service';\r\n\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'tab-widget',\r\n  template: `\r\n    <div [class]=\"options?.htmlClass || ''\">\r\n      <root-widget\r\n        [dataIndex]=\"dataIndex\"\r\n        [layoutIndex]=\"layoutIndex\"\r\n        [layout]=\"layoutNode.items\"></root-widget>\r\n    </div>`,\r\n})\r\nexport class TabComponent implements OnInit {\r\n  options: any;\r\n  @Input() layoutNode: any;\r\n  @Input() layoutIndex: number[];\r\n  @Input() dataIndex: number[];\r\n\r\n  constructor(\r\n    private jsf: JsonSchemaFormService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.options = this.layoutNode.options || {};\r\n  }\r\n}\r\n","import { AddReferenceComponent } from './add-reference.component';\r\nimport { ButtonComponent } from './button.component';\r\nimport { CheckboxComponent } from './checkbox.component';\r\nimport { CheckboxesComponent } from './checkboxes.component';\r\nimport { FileComponent } from './file.component';\r\nimport { HiddenComponent } from './hidden.component';\r\nimport { InputComponent } from './input.component';\r\nimport { MessageComponent } from './message.component';\r\nimport { NoneComponent } from './none.component';\r\nimport { NumberComponent } from './number.component';\r\nimport { OneOfComponent } from './one-of.component';\r\nimport { RadiosComponent } from './radios.component';\r\nimport { RootComponent } from './root.component';\r\nimport { SectionComponent } from './section.component';\r\nimport { SelectComponent } from './select.component';\r\nimport { SelectFrameworkComponent } from './select-framework.component';\r\nimport { SelectWidgetComponent } from './select-widget.component';\r\nimport { SubmitComponent } from './submit.component';\r\nimport { TabComponent } from './tab.component';\r\nimport { TabsComponent } from './tabs.component';\r\nimport { TemplateComponent } from './template.component';\r\nimport { TextareaComponent } from './textarea.component';\r\n\r\nexport const BASIC_WIDGETS = [\r\n  AddReferenceComponent, OneOfComponent, ButtonComponent, CheckboxComponent,\r\n  CheckboxesComponent, FileComponent, HiddenComponent, InputComponent,\r\n  MessageComponent, NoneComponent, NumberComponent, RadiosComponent,\r\n  RootComponent, SectionComponent, SelectComponent, SelectFrameworkComponent,\r\n  SelectWidgetComponent, SubmitComponent, TabComponent, TabsComponent,\r\n  TemplateComponent, TextareaComponent\r\n];\r\n\r\nexport { AddReferenceComponent } from './add-reference.component';\r\nexport { OneOfComponent } from './one-of.component';\r\nexport { ButtonComponent } from './button.component';\r\nexport { CheckboxComponent } from './checkbox.component';\r\nexport { CheckboxesComponent } from './checkboxes.component';\r\nexport { FileComponent } from './file.component';\r\nexport { HiddenComponent } from './hidden.component';\r\nexport { InputComponent } from './input.component';\r\nexport { MessageComponent } from './message.component';\r\nexport { NoneComponent } from './none.component';\r\nexport { NumberComponent } from './number.component';\r\nexport { OrderableDirective } from './orderable.directive';\r\nexport { RadiosComponent } from './radios.component';\r\nexport { RootComponent } from './root.component';\r\nexport { SectionComponent } from './section.component';\r\nexport { SelectComponent } from './select.component';\r\nexport { SelectFrameworkComponent } from './select-framework.component';\r\nexport { SelectWidgetComponent } from './select-widget.component';\r\nexport { SubmitComponent } from './submit.component';\r\nexport { TabComponent } from './tab.component';\r\nexport { TabsComponent } from './tabs.component';\r\nexport { TemplateComponent } from './template.component';\r\nexport { TextareaComponent } from './textarea.component';\r\nexport { WidgetLibraryService } from './widget-library.service';\r\n","import { BASIC_WIDGETS } from './index';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { NgModule } from '@angular/core';\r\nimport { OrderableDirective } from './orderable.directive';\r\n\r\n@NgModule({\r\n    imports: [CommonModule, FormsModule, ReactiveFormsModule],\r\n    declarations: [...BASIC_WIDGETS, OrderableDirective],\r\n    exports: [...BASIC_WIDGETS, OrderableDirective]\r\n})\r\nexport class WidgetLibraryModule {\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Framework } from './framework';\r\nimport { NgModule } from '@angular/core';\r\nimport { NoFramework } from './no.framework';\r\nimport { NoFrameworkComponent } from './no-framework.component';\r\nimport { WidgetLibraryModule } from '../widget-library/widget-library.module';\r\n\r\n// No framework - plain HTML controls (styles from form layout only)\r\n\r\n@NgModule({\r\n    imports: [CommonModule, WidgetLibraryModule],\r\n    declarations: [NoFrameworkComponent],\r\n    exports: [NoFrameworkComponent],\r\n    providers: [\r\n        { provide: Framework, useClass: NoFramework, multi: true }\r\n    ]\r\n})\r\nexport class NoFrameworkModule { }\r\n","import { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { NgModule } from '@angular/core';\r\nimport { JsonSchemaFormComponent } from './json-schema-form.component';\r\nimport { NoFrameworkModule } from './framework-library/no-framework.module';\r\nimport { WidgetLibraryModule } from './widget-library/widget-library.module';\r\n\r\n@NgModule({\r\n  imports: [\r\n    CommonModule, FormsModule, ReactiveFormsModule,\r\n    WidgetLibraryModule, NoFrameworkModule\r\n  ],\r\n  declarations: [JsonSchemaFormComponent],\r\n  exports: [JsonSchemaFormComponent, WidgetLibraryModule]\r\n})\r\nexport class JsonSchemaFormModule {\r\n}\r\n","/*\r\n * Public API Surface of json-schema-form\r\n */\r\n\r\nexport { JsonSchemaFormModule } from './lib/json-schema-form.module';\r\nexport { TitleMapItem, ErrorMessages, JsonSchemaFormService } from './lib/json-schema-form.service';\r\nexport { JsonSchemaFormComponent } from './lib/json-schema-form.component';\r\nexport { Framework } from './lib/framework-library/framework';\r\nexport { FrameworkLibraryService } from './lib/framework-library/framework-library.service';\r\nexport {\r\n    deValidationMessages,\r\n    enValidationMessages,\r\n    esValidationMessages,\r\n    frValidationMessages,\r\n    itValidationMessages,\r\n    ptValidationMessages,\r\n    zhValidationMessages\r\n  } from './lib/locale';\r\nexport * from './lib/widget-library';\r\nexport * from './lib/widget-library/widget-library.module';\r\nexport * from './lib/shared';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["isEqual","map","_isEqual","i1.JsonSchemaFormService","i3.SelectFrameworkComponent","i4.OrderableDirective","i3.RootComponent","i1.FrameworkLibraryService","i2.WidgetLibraryService","i3.JsonSchemaFormService","i4","i5","i6.RootComponent","i1.SelectWidgetComponent","i2.RootComponent","i1.AddReferenceComponent","i2.OneOfComponent","i3.ButtonComponent","i4.CheckboxComponent","i5.CheckboxesComponent","i6.FileComponent","i7.HiddenComponent","i8.InputComponent","i9.MessageComponent","i10.NoneComponent","i11.NumberComponent","i12.RadiosComponent","i13.RootComponent","i14.SectionComponent","i15.SelectComponent","i16.SelectFrameworkComponent","i17.SelectWidgetComponent","i18.SubmitComponent","i19.TabComponent","i20.TabsComponent","i21.TemplateComponent","i22.TextareaComponent"],"mappings":"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"}