(window["webpackJsonpLIS"] = window["webpackJsonpLIS"] || []).push([["vendors~parse-opening-times"],{

/***/ "./node_modules/@nimius/object-utility/index.js":
/*!******************************************************!*\
  !*** ./node_modules/@nimius/object-utility/index.js ***!
  \******************************************************/
/*! exports provided: cloneObject, sortObject, syncObjectKeys, deepGet, deepSet, deepDelete */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _src_clone_object__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src/clone-object */ \"./node_modules/@nimius/object-utility/src/clone-object.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"cloneObject\", function() { return _src_clone_object__WEBPACK_IMPORTED_MODULE_0__[\"cloneObject\"]; });\n\n/* harmony import */ var _src_sort_object__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./src/sort-object */ \"./node_modules/@nimius/object-utility/src/sort-object.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"sortObject\", function() { return _src_sort_object__WEBPACK_IMPORTED_MODULE_1__[\"sortObject\"]; });\n\n/* harmony import */ var _src_sync_object_keys__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./src/sync-object-keys */ \"./node_modules/@nimius/object-utility/src/sync-object-keys.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"syncObjectKeys\", function() { return _src_sync_object_keys__WEBPACK_IMPORTED_MODULE_2__[\"syncObjectKeys\"]; });\n\n/* harmony import */ var _src_deep_get__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./src/deep-get */ \"./node_modules/@nimius/object-utility/src/deep-get.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"deepGet\", function() { return _src_deep_get__WEBPACK_IMPORTED_MODULE_3__[\"deepGet\"]; });\n\n/* harmony import */ var _src_deep_set__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./src/deep-set */ \"./node_modules/@nimius/object-utility/src/deep-set.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"deepSet\", function() { return _src_deep_set__WEBPACK_IMPORTED_MODULE_4__[\"deepSet\"]; });\n\n/* harmony import */ var _src_deep_delete__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./src/deep-delete */ \"./node_modules/@nimius/object-utility/src/deep-delete.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"deepDelete\", function() { return _src_deep_delete__WEBPACK_IMPORTED_MODULE_5__[\"deepDelete\"]; });\n\n\n\n\n\n\n\n\n//# sourceURL=webpack://LIS/./node_modules/@nimius/object-utility/index.js?");

/***/ }),

/***/ "./node_modules/@nimius/object-utility/src/clone-object.js":
/*!*****************************************************************!*\
  !*** ./node_modules/@nimius/object-utility/src/clone-object.js ***!
  \*****************************************************************/
/*! exports provided: cloneObject */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cloneObject\", function() { return cloneObject; });\n/**\n * @description Clones the given Object.\n * @summary\n * NOTE: Because of the limitations of this method, only primitive types are clonable.\n *\n * @example\n * import { cloneObject } from '@nimius/object-utility'\n *\n * const first = { a: 'test' }\n * const second =  cloneObject(first)\n * first.a = 'hello'\n *\n * console.log(first.a)\n * // => hello\n * console.log(second.a)\n * // => test\n *\n * @template T - Type of the object that is cloned.\n * @param {T} object - The Object that should be cloned. This can be any deep\n *        structure of primitive types.\n * @returns {T} Clone of the Object given to the method.\n */\nfunction cloneObject(object) {\n  return JSON.parse(JSON.stringify(object));\n}\n\n//# sourceURL=webpack://LIS/./node_modules/@nimius/object-utility/src/clone-object.js?");

/***/ }),

/***/ "./node_modules/@nimius/object-utility/src/deep-delete.js":
/*!****************************************************************!*\
  !*** ./node_modules/@nimius/object-utility/src/deep-delete.js ***!
  \****************************************************************/
/*! exports provided: deepDelete */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"deepDelete\", function() { return deepDelete; });\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/**\n * @description Deletes a property in an object by it's path.\n * @summary\n * The path may contain separators (by default dots) to indicate, that the value should be\n * deleted from sub-elements of the object. This allows for easy deep deletion of object\n * properties.\n *\n * @example <caption>Simple example: Deleting properties</caption>\n * import { deepDelete } from '@nimius/object-utility'\n *\n * const data = { foo: { bar: 'baz' }, test: 'test' }\n * deepDelete(data, 'foo.bar');\n * console.log(data);\n * // => { foo: {},  test: 'test' }\n *\n * @param {Object} object - The object to delete data from.\n * @param {string} path  - The path of the value in the Object. By default dot-notation is used to separate the\n *        different hierarchical layers.\n * @param {string|RegExp} [pathSeparator=.] - The character that separates the path parts. Defaults to a dot, as\n *        dot-notation is the default for expressing object hierarchy.\n * @returns {*|undefined} - The value that exists at the given location or `undefined`, if the path does not exist\n *          in the given object.\n */\nfunction deepDelete(object, path) {\n  var pathSeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.';\n  var pathElements = path.split(pathSeparator);\n  var lastElement = pathElements.pop();\n  var currentObject = object;\n\n  var _iterator = _createForOfIteratorHelper(pathElements),\n      _step;\n\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var element = _step.value;\n\n      if (currentObject[element] === undefined) {\n        return undefined;\n      }\n\n      currentObject = currentObject[element];\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n\n  var value = currentObject[lastElement];\n  delete currentObject[lastElement];\n  return value;\n}\n\n//# sourceURL=webpack://LIS/./node_modules/@nimius/object-utility/src/deep-delete.js?");

/***/ }),

/***/ "./node_modules/@nimius/object-utility/src/deep-get.js":
/*!*************************************************************!*\
  !*** ./node_modules/@nimius/object-utility/src/deep-get.js ***!
  \*************************************************************/
/*! exports provided: deepGet */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"deepGet\", function() { return deepGet; });\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/**\n * @description Gets a property in an object by it's path.\n * @summary\n * The path may contain separators (by default dots) to indicate, that the value should be\n * retrieved from sub-elements of the object. This allows for easy deep querying of objects.\n *\n * If the given path does not exist in the Object, then `undefined` is returned.\n *\n * @example <caption>Simple example: retrieving properties</caption>\n * import { deepGet } from '@nimius/object-utility'\n *\n * const data = { foo: { bar: 'baz' } }\n * deepGet(data, 'foo.bar');\n * // => 'baz'\n *\n *\n * @example <caption>Using custom path separators</caption>\n * import { deepGet } from '@nimius/object-utility'\n *\n * const data = { foo: { bar: { baz: 'test' } } }\n * deepGet(data, 'foo#bar.baz', /[#.]/);\n * // => 'test'\n *\n *\n * @example <caption>Querying for undefined paths</caption>\n * import { deepGet } from '@nimius/object-utility'\n *\n * const data = { foo: 'bar' }\n * deepGet(data, 'bar.baz');\n * // => undefined\n *\n *\n * @param {Object} object - The object to get data from.\n * @param {string} path - The path of the value in the Object. By default dot-notation is used to separate the\n *        different hierarchical layers.\n * @param {string|RegExp} [pathSeparator=.] - The character that separates the path parts. Defaults to a dot, as\n *        dot-notation is the default for expressing object hierarchy.\n * @returns {*|undefined} - The value that exists at the given location or `undefined`, if the path does not exist\n *          in the given object.\n */\nfunction deepGet(object, path) {\n  var pathSeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.';\n  var pathElements = path.split(pathSeparator);\n  var lastElement = pathElements.pop();\n  var currentObject = object;\n\n  var _iterator = _createForOfIteratorHelper(pathElements),\n      _step;\n\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var element = _step.value;\n\n      if (!currentObject[element]) {\n        return undefined;\n      }\n\n      currentObject = currentObject[element];\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n\n  return currentObject[lastElement];\n}\n\n//# sourceURL=webpack://LIS/./node_modules/@nimius/object-utility/src/deep-get.js?");

/***/ }),

/***/ "./node_modules/@nimius/object-utility/src/deep-set.js":
/*!*************************************************************!*\
  !*** ./node_modules/@nimius/object-utility/src/deep-set.js ***!
  \*************************************************************/
/*! exports provided: deepSet */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"deepSet\", function() { return deepSet; });\n/**\n * @description Sets a property in an object by it's path.\n * @summary\n * The path may contain separators (by default dots) to indicate, that the value should be\n * set on sub-elements of the object. This allows for easy deep manipulation of objects.\n *\n * If the given path does not exist in the Object, then it is created.\n *\n *\n * @example <caption>Simple example: deep setting on an object</caption>\n * import { deepSet } from '@nimius/object-utility';\n *\n * let data = { foo: { bar: 'baz' } };\n * data = deepSet(data, 'foo.test', 'NIMIUS');\n * // => { foo: { bar: 'baz', test: 'NIMIUS' }\n *\n *\n * @example <caption>Deep setting on an object that does not contain the destination path</caption>\n * import { deepSet } from '@nimius/object-utility';\n *\n * let data = { foo: 'bar' };\n * data = deepSet(data, 'deep.path.that.does.not.exist', 'value')\n * // => { foo: 'bar', deep: { path: { that: { does: { not: { exist: 'value' } } } } } }\n *\n *\n * @example <caption>Deep setting with integer indexes that are not defined creates arrays</caption>\n * import { deepSet } from '@nimius/object-utility';\n *\n * let data = { };\n * deepSet(data, 'foo.0.bar', 'test');\n * // => { foo: [ { bar: 'test' } ] }\n *\n * @example <caption>Using custom path separator</caption>\n * import { deepSet } from '@nimius/object-utility';\n *\n * let data = { foo: { bar: { baz: 'test' } } };\n * deepSet(data, 'foo#bar.baz', 'new value', /[#.]/);\n * // => { foo: { bar: { baz: 'new value' } } }\n *\n *\n * @template {T} - Input Object. Is the same as the output object.\n * @param {T} object - The object to set data on.\n * @param {string} path - The path of the value in the Object. By default dot-notation is used to separate the\n *        different hierarchical layers.\n * @param {*} value - The value that should be set\n * @param {string|RegExp} [pathSeparator=.] - The character that separates the path parts. Defaults to a dot, as\n *        dot-notation is the default for expressing object hierarchy.\n * @returns {T} - Same object reference as the input value.\n */\nfunction deepSet(object, path, value) {\n  var pathSeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '.';\n  var pathElements = path.split(pathSeparator);\n  var currentObject = object; // Iterating over all path elements but the last one to ensure that the path to the element\n  // exists (creating objects & arrays along the way as needed)\n\n  for (var i = 0; i < pathElements.length - 1; i++) {\n    currentObject = ensurePathExists(currentObject, pathElements[i], pathElements[i + 1]);\n  } // set the path\n\n\n  var lastElement = pathElements[pathElements.length - 1];\n  currentObject[lastElement] = value;\n  return object;\n}\n/**\n * @template T\n * @param {T} object\n * @param {string|number} path\n * @param {string|number} nextPath\n * @returns {T}\n */\n\nfunction ensurePathExists(object, path, nextPath) {\n  if (object[path]) {\n    return object[path];\n  }\n\n  if (isInt(nextPath)) {\n    object[path] = [];\n  } else {\n    object[path] = {};\n  }\n\n  return object[path];\n}\n/**\n * @param {any} value\n * @returns {boolean}\n */\n\n\nfunction isInt(value) {\n  // Using weak comparison on purpose.\n  return parseInt(value) == value;\n}\n\n//# sourceURL=webpack://LIS/./node_modules/@nimius/object-utility/src/deep-set.js?");

/***/ }),

/***/ "./node_modules/@nimius/object-utility/src/sort-object.js":
/*!****************************************************************!*\
  !*** ./node_modules/@nimius/object-utility/src/sort-object.js ***!
  \****************************************************************/
/*! exports provided: sortObject */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sortObject\", function() { return sortObject; });\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n/**\n * @description Sorts the elements of an object.\n * @summary\n * **About sorted Objects**\n *\n * It is important to note, that by design this method cannot return another Object:\n * Objects do not have any sorting. Any sorting that may exist in small objects is only due to specific browser\n * implementations. As per specifications Objects are unordered:\n *\n * > An object is a member of the type Object.\n * > It is an unordered collection of properties each of which contains a primitive value, object, or function.\n * - ECMA-262 Chapter 4.3.3\n * {@see http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf}\n *\n * The new ES6 type Map() implements a HashMap that ensures property order.\n * However, not all frameworks and Libraries support ES6 Map() types.\n * For this reason it is possible to let this function return a 2 Dimensional Array instead.\n *\n * @example\n * import { sortObject } from '@nimius/object-utility'\n *\n * // Default sort: by keys ascending\n * const object = { b: 3, a: 1, c: 2 };\n * sortObject(object);\n * // => Map { a: 1, b: 3, c: 2 });\n *\n * @example\n * import { sortObject } from '@nimius/object-utility'\n *\n * // Custom sort: By value using array unpacking\n * const object = { b: 3, a: 1, c: 2 };\n * sortObject(object, ([keyA, valueA], [keyB, valueB]) => valueA - valueB);\n * // => Map { a: 1, c: 2, b: 3 }\n *\n * @example\n * import { sortObject } from '@nimius/object-utility'\n *\n * // Return array\n * const object = { b: 3, a: 1, c: 2 };\n * sortObject(object, ([keyA, valueA], [keyB, valueB]) => valueA - valueB, true);\n * // => [ ['a', 1], ['c', 2], ['b', 3] ]\n *\n * @param {Object} object - The Object that should be sorted\n * @param {function} [sortingMethod = null] - A custom sorting method that is compatible\n *        with `Array#sort` where both elements are arrays. The first element of\n *        each array corresponds to the key whereas the second element corresponds\n *        to the value. This is done to be compatible with the `Map` constructor\n *        and allow for easy array unpacking. If no sorting method is specified,\n *        then the Object is sorted by keys, ascending.\n * @param {boolean} [returnArray = false] - If set to true, then an array of the\n *        same form as above is returned, If it is set to false (default),\n *        then a Map is returned.\n * @returns {Map<any>|any[][]}\n */\nfunction sortObject(object) {\n  var sortingMethod = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  var returnArray = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  // Default sorting method: By key ascending\n  sortingMethod = sortingMethod || function (_ref, _ref2) {\n    var _ref3 = _slicedToArray(_ref, 1),\n        keyA = _ref3[0];\n\n    var _ref4 = _slicedToArray(_ref2, 1),\n        keyB = _ref4[0];\n\n    return keyA > keyB;\n  }; // Build an array containing the keys and values of the object.\n  // This is done, because arrays can be sorted.\n\n\n  var sortedArray = Object.keys(object).map(function (key) {\n    return [key, object[key]];\n  }).sort(sortingMethod);\n  return returnArray ? sortedArray : new Map(sortedArray);\n}\n\n//# sourceURL=webpack://LIS/./node_modules/@nimius/object-utility/src/sort-object.js?");

/***/ }),

/***/ "./node_modules/@nimius/object-utility/src/sync-object-keys.js":
/*!*********************************************************************!*\
  !*** ./node_modules/@nimius/object-utility/src/sync-object-keys.js ***!
  \*********************************************************************/
/*! exports provided: syncObjectKeys */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"syncObjectKeys\", function() { return syncObjectKeys; });\n/**\n * @callback syncObjectKeys~getter\n * @param {string} key - The key that should be fetched\n * @returns {*|Promise} - Either a direct value or a promise that resolves to the\n *                        correct value\n */\n\n/**\n * @description Syncs the object keys with the given keys.\n * @summary\n * The first argument is the object, that is the subject of this method.\n * The second argument is an array of strings that contain the keys, that should exist in the given object.\n * This method will remove all keys from the object that are not in the keys array.\n * It will also fetch new values for the ones that are in the array using the getter callback.\n * The getter callback will be called with the key as argument and may return a value itself or a Promise that is\n * resolved to a value at some point.\n *\n * This method returns a Promise, that resolves with the new Object.\n *\n * @example\n * import { syncObjectKeys } from '@nimius/object-utility'\n * const data = { a: 'value_a' }\n * const getter = key => `value_${key}`\n *\n * // - Property `a` is removed\n * // - Property `b` is passed to the getter\n * syncObjectKeys(data, ['b'], getter).then(d => console.log(d));\n * // => { b: 'value_b' }\n *\n * @example\n * import { syncObjectKeys } from '@nimius/object-utility'\n * const data = { a: 'value_a' }\n * const getter = key => `value_${key}`\n *\n * // - The changes are not written into `data` and the returned object is\n * //   a new object.\n * syncObjectKeys(data, ['b'], getter, true).then(d => {\n *    console.log(d);\n *    // => { b: 'value_b' }\n *    console.log(data);\n *    // => { a: 'value_a' }\n * });\n *\n * @example\n * import { syncObjectKeys } from '@nimius/object-utility'\n * const data = { a: 'value_a' }\n * const getter = key => fetchDataFromServer(key)\n *\n *\n * // The getter returns a promise that is used to fill the data\n * // the returned promise is resolved when the object is saturated\n * syncObjectKeys(data, ['b'], getter).then(d => console.log(d));\n *\n * @param {Object} object - Object taht is being modified\n * @param {string[]} keys - The keys that should exist in the object.\n *        If this array contains a key that does not exist in the object, then\n *        it is fetched using the getter.\n *        If the object contains keys that is not in the array, then those keys\n *        are removed.\n * @param {syncObjectKeys~getter} getter - The method that is used to fetch new\n *        Object values if they are missing. This method receives the name of\n *        the key and returns the value that should be inserted.\n *        If the returned value is a Promise, then the promise is resolved and\n *        the object is saturated with the resolved data.\n * @param clone - Set to true, if the object should be cloned before applying\n          changes.\n * @returns {Promise}\n */\nfunction syncObjectKeys(object, keys, getter) {\n  var clone = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n  // Clone the object, if it was requested\n  object = clone ? JSON.parse(JSON.stringify(object)) : object; // Keys that are not in the new keys array are deleted\n\n  Object.keys(object).filter(function (k) {\n    return keys.indexOf(k) === -1;\n  }).forEach(function (keyToDelete) {\n    return delete object[keyToDelete];\n  }); // Keys that are not yet in the object must be fetched\n\n  var objectKeys = Object.keys(object);\n  var promises = [];\n  keys.filter(function (k) {\n    return objectKeys.indexOf(k) === -1;\n  }).forEach(function (keyToAdd) {\n    var value = getter(keyToAdd); // Wait for promise to resolve or write directly to object.\n\n    if (value instanceof Promise || value.then && typeof value.then === 'function') {\n      value = value.then(function (v) {\n        return object[keyToAdd] = v;\n      });\n      promises.push(value);\n    } else {\n      object[keyToAdd] = value;\n    }\n  });\n  return Promise.all(promises).then(function () {\n    return object;\n  });\n}\n\n//# sourceURL=webpack://LIS/./node_modules/@nimius/object-utility/src/sync-object-keys.js?");

/***/ })

}]);