diff --git a/packages/frontend/node_modules/.cache/.eslintcache b/packages/frontend/node_modules/.cache/.eslintcache
index cb3d35e..2fdbd39 100644
--- a/packages/frontend/node_modules/.cache/.eslintcache
+++ b/packages/frontend/node_modules/.cache/.eslintcache
@@ -1 +1 @@
-[{"/Users/gavinlynch04/Desktop/csc307_receipt_app/packages/frontend/src/index.js":"1","/Users/gavinlynch04/Desktop/csc307_receipt_app/packages/frontend/src/Table.js":"2","/Users/gavinlynch04/Desktop/csc307_receipt_app/packages/frontend/src/Header.js":"3","/Users/gavinlynch04/Desktop/csc307_receipt_app/packages/frontend/src/AddUsers.js":"4","/Users/gavinlynch04/Desktop/csc307_receipt_app/packages/frontend/src/LoginSignup.js":"5","/Users/gavinlynch04/Desktop/csc307_receipt_app/packages/frontend/src/PopUp.js":"6","/Users/gavinlynch04/Desktop/csc307_receipt_app/packages/frontend/src/App.js":"7","/Users/gavinlynch04/Desktop/csc307_receipt_app/packages/frontend/src/ImageUpload.js":"8"},{"size":364,"mtime":1701149761580,"results":"9","hashOfConfig":"10"},{"size":3430,"mtime":1701211683677,"results":"11","hashOfConfig":"10"},{"size":1012,"mtime":1701149761579,"results":"12","hashOfConfig":"10"},{"size":849,"mtime":1701207322765,"results":"13","hashOfConfig":"10"},{"size":4712,"mtime":1701149761579,"results":"14","hashOfConfig":"10"},{"size":1898,"mtime":1701211402487,"results":"15","hashOfConfig":"10"},{"size":2487,"mtime":1701210325571,"results":"16","hashOfConfig":"10"},{"size":3545,"mtime":1701210215195,"results":"17","hashOfConfig":"10"},{"filePath":"18","messages":"19","suppressedMessages":"20","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"21"},"1eek0sp",{"filePath":"22","messages":"23","suppressedMessages":"24","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"25","messages":"26","suppressedMessages":"27","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"21"},{"filePath":"28","messages":"29","suppressedMessages":"30","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"31","messages":"32","suppressedMessages":"33","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"21"},{"filePath":"34","messages":"35","suppressedMessages":"36","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"37","messages":"38","suppressedMessages":"39","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"40","messages":"41","suppressedMessages":"42","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/Users/gavinlynch04/Desktop/csc307_receipt_app/packages/frontend/src/index.js",[],[],["43","44","45","46","47","48"],"/Users/gavinlynch04/Desktop/csc307_receipt_app/packages/frontend/src/Table.js",["49"],[],"/Users/gavinlynch04/Desktop/csc307_receipt_app/packages/frontend/src/Header.js",[],[],"/Users/gavinlynch04/Desktop/csc307_receipt_app/packages/frontend/src/AddUsers.js",[],[],"/Users/gavinlynch04/Desktop/csc307_receipt_app/packages/frontend/src/LoginSignup.js",[],[],"/Users/gavinlynch04/Desktop/csc307_receipt_app/packages/frontend/src/PopUp.js",[],[],"/Users/gavinlynch04/Desktop/csc307_receipt_app/packages/frontend/src/App.js",[],[],"/Users/gavinlynch04/Desktop/csc307_receipt_app/packages/frontend/src/ImageUpload.js",[],[],{"ruleId":"50","replacedBy":"51"},{"ruleId":"52","replacedBy":"53"},{"ruleId":"54","replacedBy":"55"},{"ruleId":"56","replacedBy":"57"},{"ruleId":"58","replacedBy":"59"},{"ruleId":"60","replacedBy":"61"},{"ruleId":"62","severity":1,"message":"63","line":42,"column":48,"nodeType":"64","messageId":"65","endLine":42,"endColumn":49},"dot-location",[],"new-parens",[],"no-mixed-operators",[],"no-new-object",["66"],"no-whitespace-before-property",[],"rest-spread-spacing",[],"no-useless-concat","Unexpected string concatenation of literals.","BinaryExpression","unexpectedConcat","no-object-constructor"]
\ No newline at end of file
+[{"C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\index.js":"1","C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\Table.js":"2","C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\PopUp.js":"3","C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\Header.js":"4","C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\LoginSignup.js":"5","C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\ImageUpload.js":"6","C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\AddUsers.js":"7","C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\App.js":"8","C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\ImageCapture.js":"9"},{"size":377,"mtime":1701278389303,"results":"10","hashOfConfig":"11"},{"size":3524,"mtime":1701278389301,"results":"12","hashOfConfig":"11"},{"size":1962,"mtime":1701278389297,"results":"13","hashOfConfig":"11"},{"size":1061,"mtime":1701279223243,"results":"14","hashOfConfig":"11"},{"size":4839,"mtime":1701278389295,"results":"15","hashOfConfig":"11"},{"size":3646,"mtime":1701278389292,"results":"16","hashOfConfig":"11"},{"size":878,"mtime":1700645123933,"results":"17","hashOfConfig":"11"},{"size":2854,"mtime":1701279126071,"results":"18","hashOfConfig":"11"},{"size":3462,"mtime":1701279161761,"results":"19","hashOfConfig":"11"},{"filePath":"20","messages":"21","suppressedMessages":"22","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"qsfgwb",{"filePath":"23","messages":"24","suppressedMessages":"25","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26","messages":"27","suppressedMessages":"28","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29","messages":"30","suppressedMessages":"31","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32","messages":"33","suppressedMessages":"34","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35","messages":"36","suppressedMessages":"37","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38","messages":"39","suppressedMessages":"40","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"41"},{"filePath":"42","messages":"43","suppressedMessages":"44","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"45","messages":"46","suppressedMessages":"47","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\index.js",[],[],"C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\Table.js",["48"],[],"C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\PopUp.js",[],[],"C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\Header.js",[],[],"C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\LoginSignup.js",[],[],"C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\ImageUpload.js",[],[],"C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\AddUsers.js",[],[],["49","50","51","52","53","54"],"C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\App.js",[],[],"C:\\Users\\ryana\\csc307\\CSC307-Receipt-App\\packages\\frontend\\src\\ImageCapture.js",[],[],{"ruleId":"55","severity":1,"message":"56","line":42,"column":48,"nodeType":"57","messageId":"58","endLine":42,"endColumn":49},{"ruleId":"59","replacedBy":"60"},{"ruleId":"61","replacedBy":"62"},{"ruleId":"63","replacedBy":"64"},{"ruleId":"65","replacedBy":"66"},{"ruleId":"67","replacedBy":"68"},{"ruleId":"69","replacedBy":"70"},"no-useless-concat","Unexpected string concatenation of literals.","BinaryExpression","unexpectedConcat","dot-location",[],"new-parens",[],"no-mixed-operators",[],"no-new-object",["71"],"no-whitespace-before-property",[],"rest-spread-spacing",[],"no-object-constructor"]
\ No newline at end of file
diff --git a/packages/frontend/node_modules/.cache/babel-loader/00c67b3493adf2c3e279e77b002dbe206c0f9eb46bcf77b54eb51d614d1b2c05.json b/packages/frontend/node_modules/.cache/babel-loader/00c67b3493adf2c3e279e77b002dbe206c0f9eb46bcf77b54eb51d614d1b2c05.json
new file mode 100644
index 0000000..463d5df
--- /dev/null
+++ b/packages/frontend/node_modules/.cache/babel-loader/00c67b3493adf2c3e279e77b002dbe206c0f9eb46bcf77b54eb51d614d1b2c05.json
@@ -0,0 +1 @@
+{"ast":null,"code":"/******/(function () {\n // webpackBootstrap\n /******/\n \"use strict\";\n\n /******/\n var __webpack_modules__ = {\n /***/\"./client-src/modules/logger/SyncBailHookFake.js\":\n /*!*******************************************************!*\\\n !*** ./client-src/modules/logger/SyncBailHookFake.js ***!\n \\*******************************************************/\n /***/\n function (module) {\n /**\n * Client stub for tapable SyncBailHook\n */\n module.exports = function clientTapableSyncBailHook() {\n return {\n call: function call() {}\n };\n };\n\n /***/\n },\n\n /***/\"./node_modules/webpack/lib/logging/Logger.js\":\n /*!****************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/Logger.js ***!\n \\****************************************************/\n /***/\n function (__unused_webpack_module, exports) {\n /*\n \tMIT License http://www.opensource.org/licenses/mit-license.php\n \tAuthor Tobias Koppers @sokra\n */\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n function _iterableToArray(iter) {\n if (typeof (typeof Symbol !== \"undefined\" ? Symbol : function (i) {\n return i;\n }) !== \"undefined\" && iter[(typeof Symbol !== \"undefined\" ? Symbol : function (i) {\n return i;\n }).iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n }\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n }\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n function _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n }\n function _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[(typeof Symbol !== \"undefined\" ? Symbol : function (i) {\n return i;\n }).toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n }\n var LogType = Object.freeze({\n error: /** @type {\"error\"} */\"error\",\n // message, c style arguments\n warn: /** @type {\"warn\"} */\"warn\",\n // message, c style arguments\n info: /** @type {\"info\"} */\"info\",\n // message, c style arguments\n log: /** @type {\"log\"} */\"log\",\n // message, c style arguments\n debug: /** @type {\"debug\"} */\"debug\",\n // message, c style arguments\n\n trace: /** @type {\"trace\"} */\"trace\",\n // no arguments\n\n group: /** @type {\"group\"} */\"group\",\n // [label]\n groupCollapsed: /** @type {\"groupCollapsed\"} */\"groupCollapsed\",\n // [label]\n groupEnd: /** @type {\"groupEnd\"} */\"groupEnd\",\n // [label]\n\n profile: /** @type {\"profile\"} */\"profile\",\n // [profileName]\n profileEnd: /** @type {\"profileEnd\"} */\"profileEnd\",\n // [profileName]\n\n time: /** @type {\"time\"} */\"time\",\n // name, time as [seconds, nanoseconds]\n\n clear: /** @type {\"clear\"} */\"clear\",\n // no arguments\n status: /** @type {\"status\"} */\"status\" // message, arguments\n });\n\n exports.LogType = LogType;\n\n /** @typedef {typeof LogType[keyof typeof LogType]} LogTypeEnum */\n\n var LOG_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) {\n return i;\n })(\"webpack logger raw log method\");\n var TIMERS_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) {\n return i;\n })(\"webpack logger times\");\n var TIMERS_AGGREGATES_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) {\n return i;\n })(\"webpack logger aggregated times\");\n var WebpackLogger = /*#__PURE__*/function () {\n /**\n * @param {function(LogTypeEnum, any[]=): void} log log function\n * @param {function(string | function(): string): WebpackLogger} getChildLogger function to create child logger\n */\n function WebpackLogger(log, getChildLogger) {\n _classCallCheck(this, WebpackLogger);\n this[LOG_SYMBOL] = log;\n this.getChildLogger = getChildLogger;\n }\n _createClass(WebpackLogger, [{\n key: \"error\",\n value: function error() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n this[LOG_SYMBOL](LogType.error, args);\n }\n }, {\n key: \"warn\",\n value: function warn() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n this[LOG_SYMBOL](LogType.warn, args);\n }\n }, {\n key: \"info\",\n value: function info() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n this[LOG_SYMBOL](LogType.info, args);\n }\n }, {\n key: \"log\",\n value: function log() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n this[LOG_SYMBOL](LogType.log, args);\n }\n }, {\n key: \"debug\",\n value: function debug() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n this[LOG_SYMBOL](LogType.debug, args);\n }\n }, {\n key: \"assert\",\n value: function assert(assertion) {\n if (!assertion) {\n for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n args[_key6 - 1] = arguments[_key6];\n }\n this[LOG_SYMBOL](LogType.error, args);\n }\n }\n }, {\n key: \"trace\",\n value: function trace() {\n this[LOG_SYMBOL](LogType.trace, [\"Trace\"]);\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this[LOG_SYMBOL](LogType.clear);\n }\n }, {\n key: \"status\",\n value: function status() {\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n this[LOG_SYMBOL](LogType.status, args);\n }\n }, {\n key: \"group\",\n value: function group() {\n for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n args[_key8] = arguments[_key8];\n }\n this[LOG_SYMBOL](LogType.group, args);\n }\n }, {\n key: \"groupCollapsed\",\n value: function groupCollapsed() {\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n this[LOG_SYMBOL](LogType.groupCollapsed, args);\n }\n }, {\n key: \"groupEnd\",\n value: function groupEnd() {\n for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n args[_key10] = arguments[_key10];\n }\n this[LOG_SYMBOL](LogType.groupEnd, args);\n }\n }, {\n key: \"profile\",\n value: function profile(label) {\n this[LOG_SYMBOL](LogType.profile, [label]);\n }\n }, {\n key: \"profileEnd\",\n value: function profileEnd(label) {\n this[LOG_SYMBOL](LogType.profileEnd, [label]);\n }\n }, {\n key: \"time\",\n value: function time(label) {\n this[TIMERS_SYMBOL] = this[TIMERS_SYMBOL] || new Map();\n this[TIMERS_SYMBOL].set(label, process.hrtime());\n }\n }, {\n key: \"timeLog\",\n value: function timeLog(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeLog()\"));\n }\n var time = process.hrtime(prev);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }, {\n key: \"timeEnd\",\n value: function timeEnd(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeEnd()\"));\n }\n var time = process.hrtime(prev);\n this[TIMERS_SYMBOL].delete(label);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }, {\n key: \"timeAggregate\",\n value: function timeAggregate(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeAggregate()\"));\n }\n var time = process.hrtime(prev);\n this[TIMERS_SYMBOL].delete(label);\n this[TIMERS_AGGREGATES_SYMBOL] = this[TIMERS_AGGREGATES_SYMBOL] || new Map();\n var current = this[TIMERS_AGGREGATES_SYMBOL].get(label);\n if (current !== undefined) {\n if (time[1] + current[1] > 1e9) {\n time[0] += current[0] + 1;\n time[1] = time[1] - 1e9 + current[1];\n } else {\n time[0] += current[0];\n time[1] += current[1];\n }\n }\n this[TIMERS_AGGREGATES_SYMBOL].set(label, time);\n }\n }, {\n key: \"timeAggregateEnd\",\n value: function timeAggregateEnd(label) {\n if (this[TIMERS_AGGREGATES_SYMBOL] === undefined) return;\n var time = this[TIMERS_AGGREGATES_SYMBOL].get(label);\n if (time === undefined) return;\n this[TIMERS_AGGREGATES_SYMBOL].delete(label);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }]);\n return WebpackLogger;\n }();\n exports.Logger = WebpackLogger;\n\n /***/\n },\n\n /***/\"./node_modules/webpack/lib/logging/createConsoleLogger.js\":\n /*!*****************************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/createConsoleLogger.js ***!\n \\*****************************************************************/\n /***/\n function (module, __unused_webpack_exports, __webpack_require__) {\n /*\n \tMIT License http://www.opensource.org/licenses/mit-license.php\n \tAuthor Tobias Koppers @sokra\n */\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n function _iterableToArray(iter) {\n if (typeof (typeof Symbol !== \"undefined\" ? Symbol : function (i) {\n return i;\n }) !== \"undefined\" && iter[(typeof Symbol !== \"undefined\" ? Symbol : function (i) {\n return i;\n }).iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n }\n var _require = __webpack_require__( /*! ./Logger */\"./node_modules/webpack/lib/logging/Logger.js\"),\n LogType = _require.LogType;\n\n /** @typedef {import(\"../../declarations/WebpackOptions\").FilterItemTypes} FilterItemTypes */\n /** @typedef {import(\"../../declarations/WebpackOptions\").FilterTypes} FilterTypes */\n /** @typedef {import(\"./Logger\").LogTypeEnum} LogTypeEnum */\n\n /** @typedef {function(string): boolean} FilterFunction */\n\n /**\n * @typedef {Object} LoggerConsole\n * @property {function(): void} clear\n * @property {function(): void} trace\n * @property {(...args: any[]) => void} info\n * @property {(...args: any[]) => void} log\n * @property {(...args: any[]) => void} warn\n * @property {(...args: any[]) => void} error\n * @property {(...args: any[]) => void=} debug\n * @property {(...args: any[]) => void=} group\n * @property {(...args: any[]) => void=} groupCollapsed\n * @property {(...args: any[]) => void=} groupEnd\n * @property {(...args: any[]) => void=} status\n * @property {(...args: any[]) => void=} profile\n * @property {(...args: any[]) => void=} profileEnd\n * @property {(...args: any[]) => void=} logTime\n */\n\n /**\n * @typedef {Object} LoggerOptions\n * @property {false|true|\"none\"|\"error\"|\"warn\"|\"info\"|\"log\"|\"verbose\"} level loglevel\n * @property {FilterTypes|boolean} debug filter for debug logging\n * @property {LoggerConsole} console the console to log to\n */\n\n /**\n * @param {FilterItemTypes} item an input item\n * @returns {FilterFunction} filter function\n */\n var filterToFunction = function filterToFunction(item) {\n if (typeof item === \"string\") {\n var regExp = new RegExp(\"[\\\\\\\\/]\".concat(item.replace(\n // eslint-disable-next-line no-useless-escape\n /[-[\\]{}()*+?.\\\\^$|]/g, \"\\\\$&\"), \"([\\\\\\\\/]|$|!|\\\\?)\"));\n return function (ident) {\n return regExp.test(ident);\n };\n }\n if (item && typeof item === \"object\" && typeof item.test === \"function\") {\n return function (ident) {\n return item.test(ident);\n };\n }\n if (typeof item === \"function\") {\n return item;\n }\n if (typeof item === \"boolean\") {\n return function () {\n return item;\n };\n }\n };\n\n /**\n * @enum {number}\n */\n var LogLevel = {\n none: 6,\n false: 6,\n error: 5,\n warn: 4,\n info: 3,\n log: 2,\n true: 2,\n verbose: 1\n };\n\n /**\n * @param {LoggerOptions} options options object\n * @returns {function(string, LogTypeEnum, any[]): void} logging function\n */\n module.exports = function (_ref) {\n var _ref$level = _ref.level,\n level = _ref$level === void 0 ? \"info\" : _ref$level,\n _ref$debug = _ref.debug,\n debug = _ref$debug === void 0 ? false : _ref$debug,\n console = _ref.console;\n var debugFilters = typeof debug === \"boolean\" ? [function () {\n return debug;\n }] : /** @type {FilterItemTypes[]} */[].concat(debug).map(filterToFunction);\n /** @type {number} */\n var loglevel = LogLevel[\"\".concat(level)] || 0;\n\n /**\n * @param {string} name name of the logger\n * @param {LogTypeEnum} type type of the log entry\n * @param {any[]} args arguments of the log entry\n * @returns {void}\n */\n var logger = function logger(name, type, args) {\n var labeledArgs = function labeledArgs() {\n if (Array.isArray(args)) {\n if (args.length > 0 && typeof args[0] === \"string\") {\n return [\"[\".concat(name, \"] \").concat(args[0])].concat(_toConsumableArray(args.slice(1)));\n } else {\n return [\"[\".concat(name, \"]\")].concat(_toConsumableArray(args));\n }\n } else {\n return [];\n }\n };\n var debug = debugFilters.some(function (f) {\n return f(name);\n });\n switch (type) {\n case LogType.debug:\n if (!debug) return;\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.debug === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.debug.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n break;\n case LogType.log:\n if (!debug && loglevel > LogLevel.log) return;\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n break;\n case LogType.info:\n if (!debug && loglevel > LogLevel.info) return;\n console.info.apply(console, _toConsumableArray(labeledArgs()));\n break;\n case LogType.warn:\n if (!debug && loglevel > LogLevel.warn) return;\n console.warn.apply(console, _toConsumableArray(labeledArgs()));\n break;\n case LogType.error:\n if (!debug && loglevel > LogLevel.error) return;\n console.error.apply(console, _toConsumableArray(labeledArgs()));\n break;\n case LogType.trace:\n if (!debug) return;\n console.trace();\n break;\n case LogType.groupCollapsed:\n if (!debug && loglevel > LogLevel.log) return;\n if (!debug && loglevel > LogLevel.verbose) {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.groupCollapsed === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.groupCollapsed.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n break;\n }\n // falls through\n case LogType.group:\n if (!debug && loglevel > LogLevel.log) return;\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.group === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.group.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n break;\n case LogType.groupEnd:\n if (!debug && loglevel > LogLevel.log) return;\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.groupEnd === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.groupEnd();\n }\n break;\n case LogType.time:\n {\n if (!debug && loglevel > LogLevel.log) return;\n var ms = args[1] * 1000 + args[2] / 1000000;\n var msg = \"[\".concat(name, \"] \").concat(args[0], \": \").concat(ms, \" ms\");\n if (typeof console.logTime === \"function\") {\n console.logTime(msg);\n } else {\n console.log(msg);\n }\n break;\n }\n case LogType.profile:\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.profile === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.profile.apply(console, _toConsumableArray(labeledArgs()));\n }\n break;\n case LogType.profileEnd:\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.profileEnd === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.profileEnd.apply(console, _toConsumableArray(labeledArgs()));\n }\n break;\n case LogType.clear:\n if (!debug && loglevel > LogLevel.log) return;\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.clear === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.clear();\n }\n break;\n case LogType.status:\n if (!debug && loglevel > LogLevel.info) return;\n if (typeof console.status === \"function\") {\n if (args.length === 0) {\n console.status();\n } else {\n console.status.apply(console, _toConsumableArray(labeledArgs()));\n }\n } else {\n if (args.length !== 0) {\n console.info.apply(console, _toConsumableArray(labeledArgs()));\n }\n }\n break;\n default:\n throw new Error(\"Unexpected LogType \".concat(type));\n }\n };\n return logger;\n };\n\n /***/\n },\n\n /***/\"./node_modules/webpack/lib/logging/runtime.js\":\n /*!*****************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/runtime.js ***!\n \\*****************************************************/\n /***/\n function (__unused_webpack_module, exports, __webpack_require__) {\n /*\n \tMIT License http://www.opensource.org/licenses/mit-license.php\n \tAuthor Tobias Koppers @sokra\n */\n\n function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n }\n var SyncBailHook = __webpack_require__( /*! tapable/lib/SyncBailHook */\"./client-src/modules/logger/SyncBailHookFake.js\");\n var _require = __webpack_require__( /*! ./Logger */\"./node_modules/webpack/lib/logging/Logger.js\"),\n Logger = _require.Logger;\n var createConsoleLogger = __webpack_require__( /*! ./createConsoleLogger */\"./node_modules/webpack/lib/logging/createConsoleLogger.js\");\n\n /** @type {createConsoleLogger.LoggerOptions} */\n var currentDefaultLoggerOptions = {\n level: \"info\",\n debug: false,\n console: console\n };\n var currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);\n\n /**\n * @param {string} name name of the logger\n * @returns {Logger} a logger\n */\n exports.getLogger = function (name) {\n return new Logger(function (type, args) {\n if (exports.hooks.log.call(name, type, args) === undefined) {\n currentDefaultLogger(name, type, args);\n }\n }, function (childName) {\n return exports.getLogger(\"\".concat(name, \"/\").concat(childName));\n });\n };\n\n /**\n * @param {createConsoleLogger.LoggerOptions} options new options, merge with old options\n * @returns {void}\n */\n exports.configureDefaultLogger = function (options) {\n _extends(currentDefaultLoggerOptions, options);\n currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);\n };\n exports.hooks = {\n log: new SyncBailHook([\"origin\", \"type\", \"args\"])\n };\n\n /***/\n }\n\n /******/\n };\n /************************************************************************/\n /******/ // The module cache\n /******/\n var __webpack_module_cache__ = {};\n /******/\n /******/ // The require function\n /******/\n function __webpack_require__(moduleId) {\n /******/ // Check if module is in cache\n /******/var cachedModule = __webpack_module_cache__[moduleId];\n /******/\n if (cachedModule !== undefined) {\n /******/return cachedModule.exports;\n /******/\n }\n /******/ // Create a new module (and put it into the cache)\n /******/\n var module = __webpack_module_cache__[moduleId] = {\n /******/ // no module.id needed\n /******/ // no module.loaded needed\n /******/exports: {}\n /******/\n };\n /******/\n /******/ // Execute the module function\n /******/\n __webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n /******/\n /******/ // Return the exports of the module\n /******/\n return module.exports;\n /******/\n }\n /******/\n /************************************************************************/\n /******/ /* webpack/runtime/define property getters */\n /******/\n !function () {\n /******/ // define getter functions for harmony exports\n /******/__webpack_require__.d = function (exports, definition) {\n /******/for (var key in definition) {\n /******/if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n /******/Object.defineProperty(exports, key, {\n enumerable: true,\n get: definition[key]\n });\n /******/\n }\n /******/\n }\n /******/\n };\n /******/\n }();\n /******/\n /******/ /* webpack/runtime/hasOwnProperty shorthand */\n /******/\n !function () {\n /******/__webpack_require__.o = function (obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n };\n /******/\n }();\n /******/\n /******/ /* webpack/runtime/make namespace object */\n /******/\n !function () {\n /******/ // define __esModule on exports\n /******/__webpack_require__.r = function (exports) {\n /******/if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n /******/Object.defineProperty(exports, Symbol.toStringTag, {\n value: 'Module'\n });\n /******/\n }\n /******/\n Object.defineProperty(exports, '__esModule', {\n value: true\n });\n /******/\n };\n /******/\n }();\n /******/\n /************************************************************************/\n var __webpack_exports__ = {};\n // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n !function () {\n /*!********************************************!*\\\n !*** ./client-src/modules/logger/index.js ***!\n \\********************************************/\n __webpack_require__.r(__webpack_exports__);\n /* harmony export */\n __webpack_require__.d(__webpack_exports__, {\n /* harmony export */\"default\": function () {\n return (/* reexport default export from named module */webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__\n );\n }\n /* harmony export */\n });\n /* harmony import */\n var webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__( /*! webpack/lib/logging/runtime.js */\"./node_modules/webpack/lib/logging/runtime.js\");\n }();\n var __webpack_export_target__ = exports;\n for (var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i];\n if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, \"__esModule\", {\n value: true\n });\n /******/\n})();","map":{"version":3,"names":["__webpack_modules__","./client-src/modules/logger/SyncBailHookFake.js","module","exports","clientTapableSyncBailHook","call","./node_modules/webpack/lib/logging/Logger.js","__unused_webpack_module","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","TypeError","o","minLen","_arrayLikeToArray","n","Object","prototype","toString","slice","constructor","name","Array","from","test","iter","Symbol","i","iterator","isArray","len","length","arr2","_classCallCheck","instance","Constructor","_defineProperties","target","props","descriptor","enumerable","configurable","writable","defineProperty","_toPropertyKey","key","_createClass","protoProps","staticProps","arg","_toPrimitive","String","input","hint","prim","toPrimitive","undefined","res","Number","LogType","freeze","error","warn","info","log","debug","trace","group","groupCollapsed","groupEnd","profile","profileEnd","time","clear","status","LOG_SYMBOL","TIMERS_SYMBOL","TIMERS_AGGREGATES_SYMBOL","WebpackLogger","getChildLogger","value","_len","arguments","args","_key","_len2","_key2","_len3","_key3","_len4","_key4","_len5","_key5","assert","assertion","_len6","_key6","_len7","_key7","_len8","_key8","_len9","_key9","_len10","_key10","label","Map","set","process","hrtime","timeLog","prev","get","Error","concat","timeEnd","delete","timeAggregate","current","timeAggregateEnd","Logger","./node_modules/webpack/lib/logging/createConsoleLogger.js","__unused_webpack_exports","__webpack_require__","_require","filterToFunction","item","regExp","RegExp","replace","ident","LogLevel","none","false","true","verbose","_ref","_ref$level","level","_ref$debug","console","debugFilters","map","loglevel","logger","type","labeledArgs","some","f","apply","ms","msg","logTime","./node_modules/webpack/lib/logging/runtime.js","_extends","assign","bind","source","hasOwnProperty","SyncBailHook","createConsoleLogger","currentDefaultLoggerOptions","currentDefaultLogger","getLogger","hooks","childName","configureDefaultLogger","options","__webpack_module_cache__","moduleId","cachedModule","d","definition","obj","prop","r","toStringTag","__webpack_exports__","default","webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__","__webpack_export_target__","__esModule"],"sources":["C:/Users/ryana/csc307/CSC307-Receipt-App/node_modules/webpack-dev-server/client/modules/logger/index.js"],"sourcesContent":["/******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./client-src/modules/logger/SyncBailHookFake.js\":\n/*!*******************************************************!*\\\n !*** ./client-src/modules/logger/SyncBailHookFake.js ***!\n \\*******************************************************/\n/***/ (function(module) {\n\n\n\n/**\n * Client stub for tapable SyncBailHook\n */\nmodule.exports = function clientTapableSyncBailHook() {\n return {\n call: function call() {}\n };\n};\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/Logger.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/Logger.js ***!\n \\****************************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _iterableToArray(iter) {\n if (typeof (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }) !== \"undefined\" && iter[(typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }).iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n}\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[(typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }).toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nvar LogType = Object.freeze({\n error: /** @type {\"error\"} */\"error\",\n // message, c style arguments\n warn: /** @type {\"warn\"} */\"warn\",\n // message, c style arguments\n info: /** @type {\"info\"} */\"info\",\n // message, c style arguments\n log: /** @type {\"log\"} */\"log\",\n // message, c style arguments\n debug: /** @type {\"debug\"} */\"debug\",\n // message, c style arguments\n\n trace: /** @type {\"trace\"} */\"trace\",\n // no arguments\n\n group: /** @type {\"group\"} */\"group\",\n // [label]\n groupCollapsed: /** @type {\"groupCollapsed\"} */\"groupCollapsed\",\n // [label]\n groupEnd: /** @type {\"groupEnd\"} */\"groupEnd\",\n // [label]\n\n profile: /** @type {\"profile\"} */\"profile\",\n // [profileName]\n profileEnd: /** @type {\"profileEnd\"} */\"profileEnd\",\n // [profileName]\n\n time: /** @type {\"time\"} */\"time\",\n // name, time as [seconds, nanoseconds]\n\n clear: /** @type {\"clear\"} */\"clear\",\n // no arguments\n status: /** @type {\"status\"} */\"status\" // message, arguments\n});\n\nexports.LogType = LogType;\n\n/** @typedef {typeof LogType[keyof typeof LogType]} LogTypeEnum */\n\nvar LOG_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger raw log method\");\nvar TIMERS_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger times\");\nvar TIMERS_AGGREGATES_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger aggregated times\");\nvar WebpackLogger = /*#__PURE__*/function () {\n /**\n * @param {function(LogTypeEnum, any[]=): void} log log function\n * @param {function(string | function(): string): WebpackLogger} getChildLogger function to create child logger\n */\n function WebpackLogger(log, getChildLogger) {\n _classCallCheck(this, WebpackLogger);\n this[LOG_SYMBOL] = log;\n this.getChildLogger = getChildLogger;\n }\n _createClass(WebpackLogger, [{\n key: \"error\",\n value: function error() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n this[LOG_SYMBOL](LogType.error, args);\n }\n }, {\n key: \"warn\",\n value: function warn() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n this[LOG_SYMBOL](LogType.warn, args);\n }\n }, {\n key: \"info\",\n value: function info() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n this[LOG_SYMBOL](LogType.info, args);\n }\n }, {\n key: \"log\",\n value: function log() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n this[LOG_SYMBOL](LogType.log, args);\n }\n }, {\n key: \"debug\",\n value: function debug() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n this[LOG_SYMBOL](LogType.debug, args);\n }\n }, {\n key: \"assert\",\n value: function assert(assertion) {\n if (!assertion) {\n for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n args[_key6 - 1] = arguments[_key6];\n }\n this[LOG_SYMBOL](LogType.error, args);\n }\n }\n }, {\n key: \"trace\",\n value: function trace() {\n this[LOG_SYMBOL](LogType.trace, [\"Trace\"]);\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this[LOG_SYMBOL](LogType.clear);\n }\n }, {\n key: \"status\",\n value: function status() {\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n this[LOG_SYMBOL](LogType.status, args);\n }\n }, {\n key: \"group\",\n value: function group() {\n for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n args[_key8] = arguments[_key8];\n }\n this[LOG_SYMBOL](LogType.group, args);\n }\n }, {\n key: \"groupCollapsed\",\n value: function groupCollapsed() {\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n this[LOG_SYMBOL](LogType.groupCollapsed, args);\n }\n }, {\n key: \"groupEnd\",\n value: function groupEnd() {\n for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n args[_key10] = arguments[_key10];\n }\n this[LOG_SYMBOL](LogType.groupEnd, args);\n }\n }, {\n key: \"profile\",\n value: function profile(label) {\n this[LOG_SYMBOL](LogType.profile, [label]);\n }\n }, {\n key: \"profileEnd\",\n value: function profileEnd(label) {\n this[LOG_SYMBOL](LogType.profileEnd, [label]);\n }\n }, {\n key: \"time\",\n value: function time(label) {\n this[TIMERS_SYMBOL] = this[TIMERS_SYMBOL] || new Map();\n this[TIMERS_SYMBOL].set(label, process.hrtime());\n }\n }, {\n key: \"timeLog\",\n value: function timeLog(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeLog()\"));\n }\n var time = process.hrtime(prev);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }, {\n key: \"timeEnd\",\n value: function timeEnd(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeEnd()\"));\n }\n var time = process.hrtime(prev);\n this[TIMERS_SYMBOL].delete(label);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }, {\n key: \"timeAggregate\",\n value: function timeAggregate(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeAggregate()\"));\n }\n var time = process.hrtime(prev);\n this[TIMERS_SYMBOL].delete(label);\n this[TIMERS_AGGREGATES_SYMBOL] = this[TIMERS_AGGREGATES_SYMBOL] || new Map();\n var current = this[TIMERS_AGGREGATES_SYMBOL].get(label);\n if (current !== undefined) {\n if (time[1] + current[1] > 1e9) {\n time[0] += current[0] + 1;\n time[1] = time[1] - 1e9 + current[1];\n } else {\n time[0] += current[0];\n time[1] += current[1];\n }\n }\n this[TIMERS_AGGREGATES_SYMBOL].set(label, time);\n }\n }, {\n key: \"timeAggregateEnd\",\n value: function timeAggregateEnd(label) {\n if (this[TIMERS_AGGREGATES_SYMBOL] === undefined) return;\n var time = this[TIMERS_AGGREGATES_SYMBOL].get(label);\n if (time === undefined) return;\n this[TIMERS_AGGREGATES_SYMBOL].delete(label);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }]);\n return WebpackLogger;\n}();\nexports.Logger = WebpackLogger;\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/createConsoleLogger.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/createConsoleLogger.js ***!\n \\*****************************************************************/\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _iterableToArray(iter) {\n if (typeof (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }) !== \"undefined\" && iter[(typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }).iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nvar _require = __webpack_require__(/*! ./Logger */ \"./node_modules/webpack/lib/logging/Logger.js\"),\n LogType = _require.LogType;\n\n/** @typedef {import(\"../../declarations/WebpackOptions\").FilterItemTypes} FilterItemTypes */\n/** @typedef {import(\"../../declarations/WebpackOptions\").FilterTypes} FilterTypes */\n/** @typedef {import(\"./Logger\").LogTypeEnum} LogTypeEnum */\n\n/** @typedef {function(string): boolean} FilterFunction */\n\n/**\n * @typedef {Object} LoggerConsole\n * @property {function(): void} clear\n * @property {function(): void} trace\n * @property {(...args: any[]) => void} info\n * @property {(...args: any[]) => void} log\n * @property {(...args: any[]) => void} warn\n * @property {(...args: any[]) => void} error\n * @property {(...args: any[]) => void=} debug\n * @property {(...args: any[]) => void=} group\n * @property {(...args: any[]) => void=} groupCollapsed\n * @property {(...args: any[]) => void=} groupEnd\n * @property {(...args: any[]) => void=} status\n * @property {(...args: any[]) => void=} profile\n * @property {(...args: any[]) => void=} profileEnd\n * @property {(...args: any[]) => void=} logTime\n */\n\n/**\n * @typedef {Object} LoggerOptions\n * @property {false|true|\"none\"|\"error\"|\"warn\"|\"info\"|\"log\"|\"verbose\"} level loglevel\n * @property {FilterTypes|boolean} debug filter for debug logging\n * @property {LoggerConsole} console the console to log to\n */\n\n/**\n * @param {FilterItemTypes} item an input item\n * @returns {FilterFunction} filter function\n */\nvar filterToFunction = function filterToFunction(item) {\n if (typeof item === \"string\") {\n var regExp = new RegExp(\"[\\\\\\\\/]\".concat(item.replace(\n // eslint-disable-next-line no-useless-escape\n /[-[\\]{}()*+?.\\\\^$|]/g, \"\\\\$&\"), \"([\\\\\\\\/]|$|!|\\\\?)\"));\n return function (ident) {\n return regExp.test(ident);\n };\n }\n if (item && typeof item === \"object\" && typeof item.test === \"function\") {\n return function (ident) {\n return item.test(ident);\n };\n }\n if (typeof item === \"function\") {\n return item;\n }\n if (typeof item === \"boolean\") {\n return function () {\n return item;\n };\n }\n};\n\n/**\n * @enum {number}\n */\nvar LogLevel = {\n none: 6,\n false: 6,\n error: 5,\n warn: 4,\n info: 3,\n log: 2,\n true: 2,\n verbose: 1\n};\n\n/**\n * @param {LoggerOptions} options options object\n * @returns {function(string, LogTypeEnum, any[]): void} logging function\n */\nmodule.exports = function (_ref) {\n var _ref$level = _ref.level,\n level = _ref$level === void 0 ? \"info\" : _ref$level,\n _ref$debug = _ref.debug,\n debug = _ref$debug === void 0 ? false : _ref$debug,\n console = _ref.console;\n var debugFilters = typeof debug === \"boolean\" ? [function () {\n return debug;\n }] : /** @type {FilterItemTypes[]} */[].concat(debug).map(filterToFunction);\n /** @type {number} */\n var loglevel = LogLevel[\"\".concat(level)] || 0;\n\n /**\n * @param {string} name name of the logger\n * @param {LogTypeEnum} type type of the log entry\n * @param {any[]} args arguments of the log entry\n * @returns {void}\n */\n var logger = function logger(name, type, args) {\n var labeledArgs = function labeledArgs() {\n if (Array.isArray(args)) {\n if (args.length > 0 && typeof args[0] === \"string\") {\n return [\"[\".concat(name, \"] \").concat(args[0])].concat(_toConsumableArray(args.slice(1)));\n } else {\n return [\"[\".concat(name, \"]\")].concat(_toConsumableArray(args));\n }\n } else {\n return [];\n }\n };\n var debug = debugFilters.some(function (f) {\n return f(name);\n });\n switch (type) {\n case LogType.debug:\n if (!debug) return;\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.debug === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.debug.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n break;\n case LogType.log:\n if (!debug && loglevel > LogLevel.log) return;\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n break;\n case LogType.info:\n if (!debug && loglevel > LogLevel.info) return;\n console.info.apply(console, _toConsumableArray(labeledArgs()));\n break;\n case LogType.warn:\n if (!debug && loglevel > LogLevel.warn) return;\n console.warn.apply(console, _toConsumableArray(labeledArgs()));\n break;\n case LogType.error:\n if (!debug && loglevel > LogLevel.error) return;\n console.error.apply(console, _toConsumableArray(labeledArgs()));\n break;\n case LogType.trace:\n if (!debug) return;\n console.trace();\n break;\n case LogType.groupCollapsed:\n if (!debug && loglevel > LogLevel.log) return;\n if (!debug && loglevel > LogLevel.verbose) {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.groupCollapsed === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.groupCollapsed.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n break;\n }\n // falls through\n case LogType.group:\n if (!debug && loglevel > LogLevel.log) return;\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.group === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.group.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n break;\n case LogType.groupEnd:\n if (!debug && loglevel > LogLevel.log) return;\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.groupEnd === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.groupEnd();\n }\n break;\n case LogType.time:\n {\n if (!debug && loglevel > LogLevel.log) return;\n var ms = args[1] * 1000 + args[2] / 1000000;\n var msg = \"[\".concat(name, \"] \").concat(args[0], \": \").concat(ms, \" ms\");\n if (typeof console.logTime === \"function\") {\n console.logTime(msg);\n } else {\n console.log(msg);\n }\n break;\n }\n case LogType.profile:\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.profile === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.profile.apply(console, _toConsumableArray(labeledArgs()));\n }\n break;\n case LogType.profileEnd:\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.profileEnd === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.profileEnd.apply(console, _toConsumableArray(labeledArgs()));\n }\n break;\n case LogType.clear:\n if (!debug && loglevel > LogLevel.log) return;\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.clear === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.clear();\n }\n break;\n case LogType.status:\n if (!debug && loglevel > LogLevel.info) return;\n if (typeof console.status === \"function\") {\n if (args.length === 0) {\n console.status();\n } else {\n console.status.apply(console, _toConsumableArray(labeledArgs()));\n }\n } else {\n if (args.length !== 0) {\n console.info.apply(console, _toConsumableArray(labeledArgs()));\n }\n }\n break;\n default:\n throw new Error(\"Unexpected LogType \".concat(type));\n }\n };\n return logger;\n};\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/runtime.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/runtime.js ***!\n \\*****************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nvar SyncBailHook = __webpack_require__(/*! tapable/lib/SyncBailHook */ \"./client-src/modules/logger/SyncBailHookFake.js\");\nvar _require = __webpack_require__(/*! ./Logger */ \"./node_modules/webpack/lib/logging/Logger.js\"),\n Logger = _require.Logger;\nvar createConsoleLogger = __webpack_require__(/*! ./createConsoleLogger */ \"./node_modules/webpack/lib/logging/createConsoleLogger.js\");\n\n/** @type {createConsoleLogger.LoggerOptions} */\nvar currentDefaultLoggerOptions = {\n level: \"info\",\n debug: false,\n console: console\n};\nvar currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);\n\n/**\n * @param {string} name name of the logger\n * @returns {Logger} a logger\n */\nexports.getLogger = function (name) {\n return new Logger(function (type, args) {\n if (exports.hooks.log.call(name, type, args) === undefined) {\n currentDefaultLogger(name, type, args);\n }\n }, function (childName) {\n return exports.getLogger(\"\".concat(name, \"/\").concat(childName));\n });\n};\n\n/**\n * @param {createConsoleLogger.LoggerOptions} options new options, merge with old options\n * @returns {void}\n */\nexports.configureDefaultLogger = function (options) {\n _extends(currentDefaultLoggerOptions, options);\n currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);\n};\nexports.hooks = {\n log: new SyncBailHook([\"origin\", \"type\", \"args\"])\n};\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n!function() {\n/*!********************************************!*\\\n !*** ./client-src/modules/logger/index.js ***!\n \\********************************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport default export from named module */ webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__; }\n/* harmony export */ });\n/* harmony import */ var webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! webpack/lib/logging/runtime.js */ \"./node_modules/webpack/lib/logging/runtime.js\");\n\n}();\nvar __webpack_export_target__ = exports;\nfor(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i];\nif(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, \"__esModule\", { value: true });\n/******/ })()\n;"],"mappings":"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"},"metadata":{},"sourceType":"script","externalDependencies":[]}
\ No newline at end of file
diff --git a/packages/frontend/node_modules/.cache/babel-loader/01f8afe612577521aad8205aff3972f77f78d38dd077ddf9562a475aec4eec81.json b/packages/frontend/node_modules/.cache/babel-loader/01f8afe612577521aad8205aff3972f77f78d38dd077ddf9562a475aec4eec81.json
new file mode 100644
index 0000000..ae9a144
--- /dev/null
+++ b/packages/frontend/node_modules/.cache/babel-loader/01f8afe612577521aad8205aff3972f77f78d38dd077ddf9562a475aec4eec81.json
@@ -0,0 +1 @@
+{"ast":null,"code":"'use strict';\n\nmodule.exports = ansiHTML;\n\n// Reference to https://github.com/sindresorhus/ansi-regex\nvar _regANSI = /(?:(?:\\u001b\\[)|\\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\\u001b[A-M]/;\nvar _defColors = {\n reset: ['fff', '000'],\n // [FOREGROUD_COLOR, BACKGROUND_COLOR]\n black: '000',\n red: 'ff0000',\n green: '209805',\n yellow: 'e8bf03',\n blue: '0000ff',\n magenta: 'ff00ff',\n cyan: '00ffee',\n lightgrey: 'f0f0f0',\n darkgrey: '888'\n};\nvar _styles = {\n 30: 'black',\n 31: 'red',\n 32: 'green',\n 33: 'yellow',\n 34: 'blue',\n 35: 'magenta',\n 36: 'cyan',\n 37: 'lightgrey'\n};\nvar _openTags = {\n '1': 'font-weight:bold',\n // bold\n '2': 'opacity:0.5',\n // dim\n '3': '',\n // italic\n '4': '',\n // underscore\n '8': 'display:none',\n // hidden\n '9': '' // delete\n};\n\nvar _closeTags = {\n '23': '',\n // reset italic\n '24': '',\n // reset underscore\n '29': '' // reset delete\n};\n\n[0, 21, 22, 27, 28, 39, 49].forEach(function (n) {\n _closeTags[n] = '';\n});\n\n/**\n * Converts text with ANSI color codes to HTML markup.\n * @param {String} text\n * @returns {*}\n */\nfunction ansiHTML(text) {\n // Returns the text if the string has no ANSI escape code.\n if (!_regANSI.test(text)) {\n return text;\n }\n\n // Cache opened sequence.\n var ansiCodes = [];\n // Replace with markup.\n var ret = text.replace(/\\033\\[(\\d+)m/g, function (match, seq) {\n var ot = _openTags[seq];\n if (ot) {\n // If current sequence has been opened, close it.\n if (!!~ansiCodes.indexOf(seq)) {\n // eslint-disable-line no-extra-boolean-cast\n ansiCodes.pop();\n return '';\n }\n // Open tag.\n ansiCodes.push(seq);\n return ot[0] === '<' ? ot : '';\n }\n var ct = _closeTags[seq];\n if (ct) {\n // Pop sequence\n ansiCodes.pop();\n return ct;\n }\n return '';\n });\n\n // Make sure tags are closed.\n var l = ansiCodes.length;\n l > 0 && (ret += Array(l + 1).join(''));\n return ret;\n}\n\n/**\n * Customize colors.\n * @param {Object} colors reference to _defColors\n */\nansiHTML.setColors = function (colors) {\n if (typeof colors !== 'object') {\n throw new Error('`colors` parameter must be an Object.');\n }\n var _finalColors = {};\n for (var key in _defColors) {\n var hex = colors.hasOwnProperty(key) ? colors[key] : null;\n if (!hex) {\n _finalColors[key] = _defColors[key];\n continue;\n }\n if ('reset' === key) {\n if (typeof hex === 'string') {\n hex = [hex];\n }\n if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) {\n return typeof h !== 'string';\n })) {\n throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000');\n }\n var defHexColor = _defColors[key];\n if (!hex[0]) {\n hex[0] = defHexColor[0];\n }\n if (hex.length === 1 || !hex[1]) {\n hex = [hex[0]];\n hex.push(defHexColor[1]);\n }\n hex = hex.slice(0, 2);\n } else if (typeof hex !== 'string') {\n throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000');\n }\n _finalColors[key] = hex;\n }\n _setTags(_finalColors);\n};\n\n/**\n * Reset colors.\n */\nansiHTML.reset = function () {\n _setTags(_defColors);\n};\n\n/**\n * Expose tags, including open and close.\n * @type {Object}\n */\nansiHTML.tags = {};\nif (Object.defineProperty) {\n Object.defineProperty(ansiHTML.tags, 'open', {\n get: function () {\n return _openTags;\n }\n });\n Object.defineProperty(ansiHTML.tags, 'close', {\n get: function () {\n return _closeTags;\n }\n });\n} else {\n ansiHTML.tags.open = _openTags;\n ansiHTML.tags.close = _closeTags;\n}\nfunction _setTags(colors) {\n // reset all\n _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1];\n // inverse\n _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0];\n // dark grey\n _openTags['90'] = 'color:#' + colors.darkgrey;\n for (var code in _styles) {\n var color = _styles[code];\n var oriColor = colors[color] || '000';\n _openTags[code] = 'color:#' + oriColor;\n code = parseInt(code);\n _openTags[(code + 10).toString()] = 'background:#' + oriColor;\n }\n}\nansiHTML.reset();","map":{"version":3,"names":["module","exports","ansiHTML","_regANSI","_defColors","reset","black","red","green","yellow","blue","magenta","cyan","lightgrey","darkgrey","_styles","_openTags","_closeTags","forEach","n","text","test","ansiCodes","ret","replace","match","seq","ot","indexOf","pop","push","ct","l","length","Array","join","setColors","colors","Error","_finalColors","key","hex","hasOwnProperty","isArray","some","h","defHexColor","slice","_setTags","tags","Object","defineProperty","get","open","close","code","color","oriColor","parseInt","toString"],"sources":["C:/Users/ryana/csc307/CSC307-Receipt-App/node_modules/ansi-html-community/index.js"],"sourcesContent":["'use strict'\n\nmodule.exports = ansiHTML\n\n// Reference to https://github.com/sindresorhus/ansi-regex\nvar _regANSI = /(?:(?:\\u001b\\[)|\\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\\u001b[A-M]/\n\nvar _defColors = {\n reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR]\n black: '000',\n red: 'ff0000',\n green: '209805',\n yellow: 'e8bf03',\n blue: '0000ff',\n magenta: 'ff00ff',\n cyan: '00ffee',\n lightgrey: 'f0f0f0',\n darkgrey: '888'\n}\nvar _styles = {\n 30: 'black',\n 31: 'red',\n 32: 'green',\n 33: 'yellow',\n 34: 'blue',\n 35: 'magenta',\n 36: 'cyan',\n 37: 'lightgrey'\n}\nvar _openTags = {\n '1': 'font-weight:bold', // bold\n '2': 'opacity:0.5', // dim\n '3': '', // italic\n '4': '', // underscore\n '8': 'display:none', // hidden\n '9': '' // delete\n}\nvar _closeTags = {\n '23': '', // reset italic\n '24': '', // reset underscore\n '29': '' // reset delete\n}\n\n;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) {\n _closeTags[n] = ''\n})\n\n/**\n * Converts text with ANSI color codes to HTML markup.\n * @param {String} text\n * @returns {*}\n */\nfunction ansiHTML (text) {\n // Returns the text if the string has no ANSI escape code.\n if (!_regANSI.test(text)) {\n return text\n }\n\n // Cache opened sequence.\n var ansiCodes = []\n // Replace with markup.\n var ret = text.replace(/\\033\\[(\\d+)m/g, function (match, seq) {\n var ot = _openTags[seq]\n if (ot) {\n // If current sequence has been opened, close it.\n if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast\n ansiCodes.pop()\n return ''\n }\n // Open tag.\n ansiCodes.push(seq)\n return ot[0] === '<' ? ot : ''\n }\n\n var ct = _closeTags[seq]\n if (ct) {\n // Pop sequence\n ansiCodes.pop()\n return ct\n }\n return ''\n })\n\n // Make sure tags are closed.\n var l = ansiCodes.length\n ;(l > 0) && (ret += Array(l + 1).join(''))\n\n return ret\n}\n\n/**\n * Customize colors.\n * @param {Object} colors reference to _defColors\n */\nansiHTML.setColors = function (colors) {\n if (typeof colors !== 'object') {\n throw new Error('`colors` parameter must be an Object.')\n }\n\n var _finalColors = {}\n for (var key in _defColors) {\n var hex = colors.hasOwnProperty(key) ? colors[key] : null\n if (!hex) {\n _finalColors[key] = _defColors[key]\n continue\n }\n if ('reset' === key) {\n if (typeof hex === 'string') {\n hex = [hex]\n }\n if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) {\n return typeof h !== 'string'\n })) {\n throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000')\n }\n var defHexColor = _defColors[key]\n if (!hex[0]) {\n hex[0] = defHexColor[0]\n }\n if (hex.length === 1 || !hex[1]) {\n hex = [hex[0]]\n hex.push(defHexColor[1])\n }\n\n hex = hex.slice(0, 2)\n } else if (typeof hex !== 'string') {\n throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000')\n }\n _finalColors[key] = hex\n }\n _setTags(_finalColors)\n}\n\n/**\n * Reset colors.\n */\nansiHTML.reset = function () {\n _setTags(_defColors)\n}\n\n/**\n * Expose tags, including open and close.\n * @type {Object}\n */\nansiHTML.tags = {}\n\nif (Object.defineProperty) {\n Object.defineProperty(ansiHTML.tags, 'open', {\n get: function () { return _openTags }\n })\n Object.defineProperty(ansiHTML.tags, 'close', {\n get: function () { return _closeTags }\n })\n} else {\n ansiHTML.tags.open = _openTags\n ansiHTML.tags.close = _closeTags\n}\n\nfunction _setTags (colors) {\n // reset all\n _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1]\n // inverse\n _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0]\n // dark grey\n _openTags['90'] = 'color:#' + colors.darkgrey\n\n for (var code in _styles) {\n var color = _styles[code]\n var oriColor = colors[color] || '000'\n _openTags[code] = 'color:#' + oriColor\n code = parseInt(code)\n _openTags[(code + 10).toString()] = 'background:#' + oriColor\n }\n}\n\nansiHTML.reset()\n"],"mappings":"AAAA,YAAY;;AAEZA,MAAM,CAACC,OAAO,GAAGC,QAAQ;;AAEzB;AACA,IAAIC,QAAQ,GAAG,sFAAsF;AAErG,IAAIC,UAAU,GAAG;EACfC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;EAAE;EACvBC,KAAK,EAAE,KAAK;EACZC,GAAG,EAAE,QAAQ;EACbC,KAAK,EAAE,QAAQ;EACfC,MAAM,EAAE,QAAQ;EAChBC,IAAI,EAAE,QAAQ;EACdC,OAAO,EAAE,QAAQ;EACjBC,IAAI,EAAE,QAAQ;EACdC,SAAS,EAAE,QAAQ;EACnBC,QAAQ,EAAE;AACZ,CAAC;AACD,IAAIC,OAAO,GAAG;EACZ,EAAE,EAAE,OAAO;EACX,EAAE,EAAE,KAAK;EACT,EAAE,EAAE,OAAO;EACX,EAAE,EAAE,QAAQ;EACZ,EAAE,EAAE,MAAM;EACV,EAAE,EAAE,SAAS;EACb,EAAE,EAAE,MAAM;EACV,EAAE,EAAE;AACN,CAAC;AACD,IAAIC,SAAS,GAAG;EACd,GAAG,EAAE,kBAAkB;EAAE;EACzB,GAAG,EAAE,aAAa;EAAE;EACpB,GAAG,EAAE,KAAK;EAAE;EACZ,GAAG,EAAE,KAAK;EAAE;EACZ,GAAG,EAAE,cAAc;EAAE;EACrB,GAAG,EAAE,OAAO,CAAC;AACf,CAAC;;AACD,IAAIC,UAAU,GAAG;EACf,IAAI,EAAE,MAAM;EAAE;EACd,IAAI,EAAE,MAAM;EAAE;EACd,IAAI,EAAE,QAAQ,CAAC;AACjB,CAAC;;AAEA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAACC,OAAO,CAAC,UAAUC,CAAC,EAAE;EAChDF,UAAU,CAACE,CAAC,CAAC,GAAG,SAAS;AAC3B,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA,SAASjB,QAAQA,CAAEkB,IAAI,EAAE;EACvB;EACA,IAAI,CAACjB,QAAQ,CAACkB,IAAI,CAACD,IAAI,CAAC,EAAE;IACxB,OAAOA,IAAI;EACb;;EAEA;EACA,IAAIE,SAAS,GAAG,EAAE;EAClB;EACA,IAAIC,GAAG,GAAGH,IAAI,CAACI,OAAO,CAAC,eAAe,EAAE,UAAUC,KAAK,EAAEC,GAAG,EAAE;IAC5D,IAAIC,EAAE,GAAGX,SAAS,CAACU,GAAG,CAAC;IACvB,IAAIC,EAAE,EAAE;MACN;MACA,IAAI,CAAC,CAAC,CAACL,SAAS,CAACM,OAAO,CAACF,GAAG,CAAC,EAAE;QAAE;QAC/BJ,SAAS,CAACO,GAAG,CAAC,CAAC;QACf,OAAO,SAAS;MAClB;MACA;MACAP,SAAS,CAACQ,IAAI,CAACJ,GAAG,CAAC;MACnB,OAAOC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,GAAGA,EAAE,GAAG,eAAe,GAAGA,EAAE,GAAG,KAAK;IAC1D;IAEA,IAAII,EAAE,GAAGd,UAAU,CAACS,GAAG,CAAC;IACxB,IAAIK,EAAE,EAAE;MACN;MACAT,SAAS,CAACO,GAAG,CAAC,CAAC;MACf,OAAOE,EAAE;IACX;IACA,OAAO,EAAE;EACX,CAAC,CAAC;;EAEF;EACA,IAAIC,CAAC,GAAGV,SAAS,CAACW,MAAM;EACtBD,CAAC,GAAG,CAAC,KAAMT,GAAG,IAAIW,KAAK,CAACF,CAAC,GAAG,CAAC,CAAC,CAACG,IAAI,CAAC,SAAS,CAAC,CAAC;EAEjD,OAAOZ,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACArB,QAAQ,CAACkC,SAAS,GAAG,UAAUC,MAAM,EAAE;EACrC,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;IAC9B,MAAM,IAAIC,KAAK,CAAC,uCAAuC,CAAC;EAC1D;EAEA,IAAIC,YAAY,GAAG,CAAC,CAAC;EACrB,KAAK,IAAIC,GAAG,IAAIpC,UAAU,EAAE;IAC1B,IAAIqC,GAAG,GAAGJ,MAAM,CAACK,cAAc,CAACF,GAAG,CAAC,GAAGH,MAAM,CAACG,GAAG,CAAC,GAAG,IAAI;IACzD,IAAI,CAACC,GAAG,EAAE;MACRF,YAAY,CAACC,GAAG,CAAC,GAAGpC,UAAU,CAACoC,GAAG,CAAC;MACnC;IACF;IACA,IAAI,OAAO,KAAKA,GAAG,EAAE;MACnB,IAAI,OAAOC,GAAG,KAAK,QAAQ,EAAE;QAC3BA,GAAG,GAAG,CAACA,GAAG,CAAC;MACb;MACA,IAAI,CAACP,KAAK,CAACS,OAAO,CAACF,GAAG,CAAC,IAAIA,GAAG,CAACR,MAAM,KAAK,CAAC,IAAIQ,GAAG,CAACG,IAAI,CAAC,UAAUC,CAAC,EAAE;QACnE,OAAO,OAAOA,CAAC,KAAK,QAAQ;MAC9B,CAAC,CAAC,EAAE;QACF,MAAM,IAAIP,KAAK,CAAC,gBAAgB,GAAGE,GAAG,GAAG,oFAAoF,CAAC;MAChI;MACA,IAAIM,WAAW,GAAG1C,UAAU,CAACoC,GAAG,CAAC;MACjC,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC,EAAE;QACXA,GAAG,CAAC,CAAC,CAAC,GAAGK,WAAW,CAAC,CAAC,CAAC;MACzB;MACA,IAAIL,GAAG,CAACR,MAAM,KAAK,CAAC,IAAI,CAACQ,GAAG,CAAC,CAAC,CAAC,EAAE;QAC/BA,GAAG,GAAG,CAACA,GAAG,CAAC,CAAC,CAAC,CAAC;QACdA,GAAG,CAACX,IAAI,CAACgB,WAAW,CAAC,CAAC,CAAC,CAAC;MAC1B;MAEAL,GAAG,GAAGA,GAAG,CAACM,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,MAAM,IAAI,OAAON,GAAG,KAAK,QAAQ,EAAE;MAClC,MAAM,IAAIH,KAAK,CAAC,gBAAgB,GAAGE,GAAG,GAAG,+CAA+C,CAAC;IAC3F;IACAD,YAAY,CAACC,GAAG,CAAC,GAAGC,GAAG;EACzB;EACAO,QAAQ,CAACT,YAAY,CAAC;AACxB,CAAC;;AAED;AACA;AACA;AACArC,QAAQ,CAACG,KAAK,GAAG,YAAY;EAC3B2C,QAAQ,CAAC5C,UAAU,CAAC;AACtB,CAAC;;AAED;AACA;AACA;AACA;AACAF,QAAQ,CAAC+C,IAAI,GAAG,CAAC,CAAC;AAElB,IAAIC,MAAM,CAACC,cAAc,EAAE;EACzBD,MAAM,CAACC,cAAc,CAACjD,QAAQ,CAAC+C,IAAI,EAAE,MAAM,EAAE;IAC3CG,GAAG,EAAE,SAAAA,CAAA,EAAY;MAAE,OAAOpC,SAAS;IAAC;EACtC,CAAC,CAAC;EACFkC,MAAM,CAACC,cAAc,CAACjD,QAAQ,CAAC+C,IAAI,EAAE,OAAO,EAAE;IAC5CG,GAAG,EAAE,SAAAA,CAAA,EAAY;MAAE,OAAOnC,UAAU;IAAC;EACvC,CAAC,CAAC;AACJ,CAAC,MAAM;EACLf,QAAQ,CAAC+C,IAAI,CAACI,IAAI,GAAGrC,SAAS;EAC9Bd,QAAQ,CAAC+C,IAAI,CAACK,KAAK,GAAGrC,UAAU;AAClC;AAEA,SAAS+B,QAAQA,CAAEX,MAAM,EAAE;EACzB;EACArB,SAAS,CAAC,GAAG,CAAC,GAAG,sCAAsC,GAAGqB,MAAM,CAAChC,KAAK,CAAC,CAAC,CAAC,GAAG,eAAe,GAAGgC,MAAM,CAAChC,KAAK,CAAC,CAAC,CAAC;EAC7G;EACAW,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,GAAGqB,MAAM,CAAChC,KAAK,CAAC,CAAC,CAAC,GAAG,eAAe,GAAGgC,MAAM,CAAChC,KAAK,CAAC,CAAC,CAAC;EAChF;EACAW,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,GAAGqB,MAAM,CAACvB,QAAQ;EAE7C,KAAK,IAAIyC,IAAI,IAAIxC,OAAO,EAAE;IACxB,IAAIyC,KAAK,GAAGzC,OAAO,CAACwC,IAAI,CAAC;IACzB,IAAIE,QAAQ,GAAGpB,MAAM,CAACmB,KAAK,CAAC,IAAI,KAAK;IACrCxC,SAAS,CAACuC,IAAI,CAAC,GAAG,SAAS,GAAGE,QAAQ;IACtCF,IAAI,GAAGG,QAAQ,CAACH,IAAI,CAAC;IACrBvC,SAAS,CAAC,CAACuC,IAAI,GAAG,EAAE,EAAEI,QAAQ,CAAC,CAAC,CAAC,GAAG,cAAc,GAAGF,QAAQ;EAC/D;AACF;AAEAvD,QAAQ,CAACG,KAAK,CAAC,CAAC"},"metadata":{},"sourceType":"script","externalDependencies":[]}
\ No newline at end of file
diff --git a/packages/frontend/node_modules/.cache/babel-loader/035f0458e4421e8c5e673452a3aed3545343a3ba19d1449db043722b2694ca86.json b/packages/frontend/node_modules/.cache/babel-loader/035f0458e4421e8c5e673452a3aed3545343a3ba19d1449db043722b2694ca86.json
new file mode 100644
index 0000000..cffa504
--- /dev/null
+++ b/packages/frontend/node_modules/.cache/babel-loader/035f0458e4421e8c5e673452a3aed3545343a3ba19d1449db043722b2694ca86.json
@@ -0,0 +1 @@
+{"ast":null,"code":"'use strict';\n\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};","map":{"version":3,"names":["uncurryThis","require","id","postfix","Math","random","toString","module","exports","key","undefined"],"sources":["C:/Users/ryana/csc307/CSC307-Receipt-App/node_modules/core-js-pure/internals/uid.js"],"sourcesContent":["'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n"],"mappings":"AAAA,YAAY;;AACZ,IAAIA,WAAW,GAAGC,OAAO,CAAC,oCAAoC,CAAC;AAE/D,IAAIC,EAAE,GAAG,CAAC;AACV,IAAIC,OAAO,GAAGC,IAAI,CAACC,MAAM,CAAC,CAAC;AAC3B,IAAIC,QAAQ,GAAGN,WAAW,CAAC,GAAG,CAACM,QAAQ,CAAC;AAExCC,MAAM,CAACC,OAAO,GAAG,UAAUC,GAAG,EAAE;EAC9B,OAAO,SAAS,IAAIA,GAAG,KAAKC,SAAS,GAAG,EAAE,GAAGD,GAAG,CAAC,GAAG,IAAI,GAAGH,QAAQ,CAAC,EAAEJ,EAAE,GAAGC,OAAO,EAAE,EAAE,CAAC;AACzF,CAAC"},"metadata":{},"sourceType":"script","externalDependencies":[]}
\ No newline at end of file
diff --git a/packages/frontend/node_modules/.cache/babel-loader/047686faa300c3fc642e4479bb004ba2bf0ec29f0cf1e2f89a809fb9c754b67f.json b/packages/frontend/node_modules/.cache/babel-loader/047686faa300c3fc642e4479bb004ba2bf0ec29f0cf1e2f89a809fb9c754b67f.json
new file mode 100644
index 0000000..dacb177
--- /dev/null
+++ b/packages/frontend/node_modules/.cache/babel-loader/047686faa300c3fc642e4479bb004ba2bf0ec29f0cf1e2f89a809fb9c754b67f.json
@@ -0,0 +1 @@
+{"ast":null,"code":"","map":{"version":3,"names":[],"sources":["C:/Users/ryana/csc307/CSC307-Receipt-App/packages/frontend/src/ImageCapture.js"],"sourcesContent":[""],"mappings":""},"metadata":{},"sourceType":"module","externalDependencies":[]}
\ No newline at end of file
diff --git a/packages/frontend/node_modules/.cache/babel-loader/04d83fed231ed7536342eeb32af42c92c6c5cc999eb850c862980d3ea0e362a1.json b/packages/frontend/node_modules/.cache/babel-loader/04d83fed231ed7536342eeb32af42c92c6c5cc999eb850c862980d3ea0e362a1.json
new file mode 100644
index 0000000..1d75609
--- /dev/null
+++ b/packages/frontend/node_modules/.cache/babel-loader/04d83fed231ed7536342eeb32af42c92c6c5cc999eb850c862980d3ea0e362a1.json
@@ -0,0 +1 @@
+{"ast":null,"code":"/**\n * @remix-run/router v1.12.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Actions represent the type of change to a location value.\n */\nvar Action;\n(function (Action) {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Action[\"Pop\"] = \"POP\";\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Action[\"Push\"] = \"PUSH\";\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Action[\"Replace\"] = \"REPLACE\";\n})(Action || (Action = {}));\nconst PopStateEventType = \"popstate\";\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nfunction createMemoryHistory(options) {\n if (options === void 0) {\n options = {};\n }\n let {\n initialEntries = [\"/\"],\n initialIndex,\n v5Compat = false\n } = options;\n let entries; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) => createMemoryLocation(entry, typeof entry === \"string\" ? null : entry.state, index === 0 ? \"default\" : undefined));\n let index = clampIndex(initialIndex == null ? entries.length - 1 : initialIndex);\n let action = Action.Pop;\n let listener = null;\n function clampIndex(n) {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation() {\n return entries[index];\n }\n function createMemoryLocation(to, state, key) {\n if (state === void 0) {\n state = null;\n }\n let location = createLocation(entries ? getCurrentLocation().pathname : \"/\", to, state, key);\n warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in memory history: \" + JSON.stringify(to));\n return location;\n }\n function createHref(to) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n let history = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\"\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({\n action,\n location: nextLocation,\n delta: 1\n });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({\n action,\n location: nextLocation,\n delta: 0\n });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({\n action,\n location: nextLocation,\n delta\n });\n }\n },\n listen(fn) {\n listener = fn;\n return () => {\n listener = null;\n };\n }\n };\n return history;\n}\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nfunction createBrowserHistory(options) {\n if (options === void 0) {\n options = {};\n }\n function createBrowserLocation(window, globalHistory) {\n let {\n pathname,\n search,\n hash\n } = window.location;\n return createLocation(\"\", {\n pathname,\n search,\n hash\n },\n // state defaults to `null` because `window.history.state` does\n globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n }\n function createBrowserHref(window, to) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n return getUrlBasedHistory(createBrowserLocation, createBrowserHref, null, options);\n}\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nfunction createHashHistory(options) {\n if (options === void 0) {\n options = {};\n }\n function createHashLocation(window, globalHistory) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\"\n } = parsePath(window.location.hash.substr(1));\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n return createLocation(\"\", {\n pathname,\n search,\n hash\n },\n // state defaults to `null` because `window.history.state` does\n globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n }\n function createHashHref(window, to) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n function validateHashLocation(location, to) {\n warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in hash history.push(\" + JSON.stringify(to) + \")\");\n }\n return getUrlBasedHistory(createHashLocation, createHashHref, validateHashLocation, options);\n}\nfunction invariant(value, message) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\nfunction warning(cond, message) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience, so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location, index) {\n return {\n usr: location.state,\n key: location.key,\n idx: index\n };\n}\n/**\n * Creates a Location object with a unique key from the given Path\n */\nfunction createLocation(current, to, state, key) {\n if (state === void 0) {\n state = null;\n }\n let location = _extends({\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\"\n }, typeof to === \"string\" ? parsePath(to) : to, {\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: to && to.key || key || createKey()\n });\n return location;\n}\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nfunction createPath(_ref) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\"\n } = _ref;\n if (search && search !== \"?\") pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\") pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nfunction parsePath(path) {\n let parsedPath = {};\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n if (path) {\n parsedPath.pathname = path;\n }\n }\n return parsedPath;\n}\nfunction getUrlBasedHistory(getLocation, createHref, validateLocation, options) {\n if (options === void 0) {\n options = {};\n }\n let {\n window = document.defaultView,\n v5Compat = false\n } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener = null;\n let index = getIndex();\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState(_extends({}, globalHistory.state, {\n idx: index\n }), \"\");\n }\n function getIndex() {\n let state = globalHistory.state || {\n idx: null\n };\n return state.idx;\n }\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({\n action,\n location: history.location,\n delta\n });\n }\n }\n function push(to, state) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n if (v5Compat && listener) {\n listener({\n action,\n location: history.location,\n delta: 1\n });\n }\n }\n function replace(to, state) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n if (v5Compat && listener) {\n listener({\n action,\n location: history.location,\n delta: 0\n });\n }\n }\n function createURL(to) {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base = window.location.origin !== \"null\" ? window.location.origin : window.location.href;\n let href = typeof to === \"string\" ? to : createPath(to);\n invariant(base, \"No window.location.(origin|href) available to create URL for href: \" + href);\n return new URL(href, base);\n }\n let history = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n }\n };\n return history;\n}\n//#endregion\n\nvar ResultType;\n(function (ResultType) {\n ResultType[\"data\"] = \"data\";\n ResultType[\"deferred\"] = \"deferred\";\n ResultType[\"redirect\"] = \"redirect\";\n ResultType[\"error\"] = \"error\";\n})(ResultType || (ResultType = {}));\nconst immutableRouteKeys = new Set([\"lazy\", \"caseSensitive\", \"path\", \"id\", \"index\", \"children\"]);\nfunction isIndexRoute(route) {\n return route.index === true;\n}\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nfunction convertRoutesToDataRoutes(routes, mapRouteProperties, parentPath, manifest) {\n if (parentPath === void 0) {\n parentPath = [];\n }\n if (manifest === void 0) {\n manifest = {};\n }\n return routes.map((route, index) => {\n let treePath = [...parentPath, index];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(route.index !== true || !route.children, \"Cannot specify children on an index route\");\n invariant(!manifest[id], \"Found a route id collision on id \\\"\" + id + \"\\\". Route \" + \"id's must be globally unique within Data Router usages\");\n if (isIndexRoute(route)) {\n let indexRoute = _extends({}, route, mapRouteProperties(route), {\n id\n });\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute = _extends({}, route, mapRouteProperties(route), {\n id,\n children: undefined\n });\n manifest[id] = pathOrLayoutRoute;\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(route.children, mapRouteProperties, treePath, manifest);\n }\n return pathOrLayoutRoute;\n }\n });\n}\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nfunction matchRoutes(routes, locationArg, basename) {\n if (basename === void 0) {\n basename = \"/\";\n }\n let location = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n let pathname = stripBasename(location.pathname || \"/\", basename);\n if (pathname == null) {\n return null;\n }\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n matches = matchRouteBranch(branches[i],\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n safelyDecodeURI(pathname));\n }\n return matches;\n}\nfunction convertRouteMatchToUiMatch(match, loaderData) {\n let {\n route,\n pathname,\n params\n } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle\n };\n}\nfunction flattenRoutes(routes, branches, parentsMeta, parentPath) {\n if (branches === void 0) {\n branches = [];\n }\n if (parentsMeta === void 0) {\n parentsMeta = [];\n }\n if (parentPath === void 0) {\n parentPath = \"\";\n }\n let flattenRoute = (route, index, relativePath) => {\n let meta = {\n relativePath: relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route\n };\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(meta.relativePath.startsWith(parentPath), \"Absolute route path \\\"\" + meta.relativePath + \"\\\" nested under path \" + (\"\\\"\" + parentPath + \"\\\" is not valid. An absolute child route path \") + \"must start with the combined path of all its parent routes.\");\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n // Add the children before adding this route to the array, so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true, \"Index routes must not have child routes. Please remove \" + (\"all child routes from route path \\\"\" + path + \"\\\".\"));\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta\n });\n };\n routes.forEach((route, index) => {\n var _route$path;\n // coarse-grain check for optional params\n if (route.path === \"\" || !((_route$path = route.path) != null && _route$path.includes(\"?\"))) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n return branches;\n}\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path) {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n let [first, ...rest] = segments;\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n let result = [];\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children, so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explode _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(...restExploded.map(subpath => subpath === \"\" ? required : [required, subpath].join(\"/\")));\n // Then, if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n // for absolute paths, ensure `/` instead of empty segment\n return result.map(exploded => path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded);\n}\nfunction rankRouteBranches(branches) {\n branches.sort((a, b) => a.score !== b.score ? b.score - a.score // Higher score first\n : compareIndexes(a.routesMeta.map(meta => meta.childrenIndex), b.routesMeta.map(meta => meta.childrenIndex)));\n}\nconst paramRe = /^:\\w+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = s => s === \"*\";\nfunction computeScore(path, index) {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n if (index) {\n initialScore += indexRouteValue;\n }\n return segments.filter(s => !isSplat(s)).reduce((score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === \"\" ? emptySegmentValue : staticSegmentValue), initialScore);\n}\nfunction compareIndexes(a, b) {\n let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n return siblings ?\n // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1] :\n // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\nfunction matchRouteBranch(branch, pathname) {\n let {\n routesMeta\n } = branch;\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname = matchedPathname === \"/\" ? pathname : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath({\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end\n }, remainingPathname);\n if (!match) return null;\n Object.assign(matchedParams, match.params);\n let route = meta.route;\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(joinPaths([matchedPathname, match.pathnameBase])),\n route\n });\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n return matches;\n}\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nfunction generatePath(originalPath, params) {\n if (params === void 0) {\n params = {};\n }\n let path = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(false, \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n path = path.replace(/\\*$/, \"/*\");\n }\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n const stringify = p => p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n const segments = path.split(/\\/+/).map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\";\n // Apply the splat\n return stringify(params[star]);\n }\n const keyMatch = segment.match(/^:(\\w+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key];\n invariant(optional === \"?\" || param != null, \"Missing \\\":\" + key + \"\\\" param\");\n return stringify(param);\n }\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter(segment => !!segment);\n return prefix + segments.join(\"/\");\n}\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nfunction matchPath(pattern, pathname) {\n if (typeof pattern === \"string\") {\n pattern = {\n path: pattern,\n caseSensitive: false,\n end: true\n };\n }\n let [matcher, compiledParams] = compilePath(pattern.path, pattern.caseSensitive, pattern.end);\n let match = pathname.match(matcher);\n if (!match) return null;\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params = compiledParams.reduce((memo, _ref, index) => {\n let {\n paramName,\n isOptional\n } = _ref;\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\\/+$/, \"$1\");\n }\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = safelyDecodeURIComponent(value || \"\", paramName);\n }\n return memo;\n }, {});\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern\n };\n}\nfunction compilePath(path, caseSensitive, end) {\n if (caseSensitive === void 0) {\n caseSensitive = false;\n }\n if (end === void 0) {\n end = true;\n }\n warning(path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"), \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n let params = [];\n let regexpSource = \"^\" + path.replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(/\\/:(\\w+)(\\?)?/g, (_, paramName, isOptional) => {\n params.push({\n paramName,\n isOptional: isOptional != null\n });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n });\n if (path.endsWith(\"*\")) {\n params.push({\n paramName: \"*\"\n });\n regexpSource += path === \"*\" || path === \"/*\" ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex, so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else ;\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n return [matcher, params];\n}\nfunction safelyDecodeURI(value) {\n try {\n return decodeURI(value);\n } catch (error) {\n warning(false, \"The URL path \\\"\" + value + \"\\\" could not be decoded because it is is a \" + \"malformed URL segment. This is probably due to a bad percent \" + (\"encoding (\" + error + \").\"));\n return value;\n }\n}\nfunction safelyDecodeURIComponent(value, paramName) {\n try {\n return decodeURIComponent(value);\n } catch (error) {\n warning(false, \"The value for the URL param \\\"\" + paramName + \"\\\" will not be decoded because\" + (\" the string \\\"\" + value + \"\\\" is a malformed URL segment. This is probably\") + (\" due to a bad percent encoding (\" + error + \").\"));\n return value;\n }\n}\n/**\n * @private\n */\nfunction stripBasename(pathname, basename) {\n if (basename === \"/\") return pathname;\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\") ? basename.length - 1 : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n return pathname.slice(startIndex) || \"/\";\n}\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nfunction resolvePath(to, fromPathname) {\n if (fromPathname === void 0) {\n fromPathname = \"/\";\n }\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\"\n } = typeof to === \"string\" ? parsePath(to) : to;\n let pathname = toPathname ? toPathname.startsWith(\"/\") ? toPathname : resolvePathname(toPathname, fromPathname) : fromPathname;\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash)\n };\n}\nfunction resolvePathname(relativePath, fromPathname) {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n relativeSegments.forEach(segment => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\nfunction getInvalidPathError(char, field, dest, path) {\n return \"Cannot include a '\" + char + \"' character in a manually specified \" + (\"`to.\" + field + \"` field [\" + JSON.stringify(path) + \"]. Please separate it out to the \") + (\"`to.\" + dest + \"` field. Alternatively you may provide the full path as \") + \"a string in and the router will parse it for you.\";\n}\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * \n * \n * \n *\n * \n * \n * }> // <-- Does not contribute\n * // <-- Does not contribute\n * \n * \n */\nfunction getPathContributingMatches(matches) {\n return matches.filter((match, index) => index === 0 || match.route.path && match.route.path.length > 0);\n}\n/**\n * @private\n */\nfunction resolveTo(toArg, routePathnames, locationPathname, isPathRelative) {\n if (isPathRelative === void 0) {\n isPathRelative = false;\n }\n let to;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = _extends({}, toArg);\n invariant(!to.pathname || !to.pathname.includes(\"?\"), getInvalidPathError(\"?\", \"pathname\", \"search\", to));\n invariant(!to.pathname || !to.pathname.includes(\"#\"), getInvalidPathError(\"#\", \"pathname\", \"hash\", to));\n invariant(!to.search || !to.search.includes(\"#\"), getInvalidPathError(\"#\", \"search\", \"hash\", to));\n }\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n let from;\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (toPathname == null) {\n from = locationPathname;\n } else if (isPathRelative) {\n let fromSegments = routePathnames[routePathnames.length - 1].replace(/^\\//, \"\").split(\"/\");\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n // With relative=\"path\", each leading .. segment means \"go up one URL segment\"\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n fromSegments.pop();\n }\n to.pathname = toSegments.join(\"/\");\n }\n from = \"/\" + fromSegments.join(\"/\");\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"to\" value instead of a \"href\".\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n to.pathname = toSegments.join(\"/\");\n }\n // If there are more \"..\" segments than parent routes, resolve relative to\n // the root / URL.\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n let path = resolvePath(to, from);\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash = toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash = (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (!path.pathname.endsWith(\"/\") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) {\n path.pathname += \"/\";\n }\n return path;\n}\n/**\n * @private\n */\nfunction getToPathname(to) {\n // Empty strings should be treated the same as / paths\n return to === \"\" || to.pathname === \"\" ? \"/\" : typeof to === \"string\" ? parsePath(to).pathname : to.pathname;\n}\n/**\n * @private\n */\nconst joinPaths = paths => paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n/**\n * @private\n */\nconst normalizePathname = pathname => pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n/**\n * @private\n */\nconst normalizeSearch = search => !search || search === \"?\" ? \"\" : search.startsWith(\"?\") ? search : \"?\" + search;\n/**\n * @private\n */\nconst normalizeHash = hash => !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nconst json = function json(data, init) {\n if (init === void 0) {\n init = {};\n }\n let responseInit = typeof init === \"number\" ? {\n status: init\n } : init;\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n return new Response(JSON.stringify(data), _extends({}, responseInit, {\n headers\n }));\n};\nclass AbortedDeferredError extends Error {}\nclass DeferredData {\n constructor(data, responseInit) {\n this.pendingKeysSet = new Set();\n this.subscribers = new Set();\n this.deferredKeys = [];\n invariant(data && typeof data === \"object\" && !Array.isArray(data), \"defer() only accepts plain objects\");\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject;\n this.abortPromise = new Promise((_, r) => reject = r);\n this.controller = new AbortController();\n let onAbort = () => reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () => this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n this.data = Object.entries(data).reduce((acc, _ref2) => {\n let [key, value] = _ref2;\n return Object.assign(acc, {\n [key]: this.trackPromise(key, value)\n });\n }, {});\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n this.init = responseInit;\n }\n trackPromise(key, value) {\n if (!(value instanceof Promise)) {\n return value;\n }\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise = Promise.race([value, this.abortPromise]).then(data => this.onSettle(promise, key, undefined, data), error => this.onSettle(promise, key, error));\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n Object.defineProperty(promise, \"_tracked\", {\n get: () => true\n });\n return promise;\n }\n onSettle(promise, key, error, data) {\n if (this.controller.signal.aborted && error instanceof AbortedDeferredError) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", {\n get: () => error\n });\n return Promise.reject(error);\n }\n this.pendingKeysSet.delete(key);\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n // If the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\"Deferred data for key \\\"\" + key + \"\\\" resolved/rejected with `undefined`, \" + \"you must resolve/reject with a value or `null`.\");\n Object.defineProperty(promise, \"_error\", {\n get: () => undefinedError\n });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", {\n get: () => error\n });\n this.emit(false, key);\n return Promise.reject(error);\n }\n Object.defineProperty(promise, \"_data\", {\n get: () => data\n });\n this.emit(false, key);\n return data;\n }\n emit(aborted, settledKey) {\n this.subscribers.forEach(subscriber => subscriber(aborted, settledKey));\n }\n subscribe(fn) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n async resolveData(signal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise(resolve => {\n this.subscribe(aborted => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n get unwrappedData() {\n invariant(this.data !== null && this.done, \"Can only unwrap data on initialized and settled deferreds\");\n return Object.entries(this.data).reduce((acc, _ref3) => {\n let [key, value] = _ref3;\n return Object.assign(acc, {\n [key]: unwrapTrackedPromise(value)\n });\n }, {});\n }\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\nfunction isTrackedPromise(value) {\n return value instanceof Promise && value._tracked === true;\n}\nfunction unwrapTrackedPromise(value) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\nconst defer = function defer(data, init) {\n if (init === void 0) {\n init = {};\n }\n let responseInit = typeof init === \"number\" ? {\n status: init\n } : init;\n return new DeferredData(data, responseInit);\n};\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirect = function redirect(url, init) {\n if (init === void 0) {\n init = 302;\n }\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = {\n status: responseInit\n };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n return new Response(null, _extends({}, responseInit, {\n headers\n }));\n};\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirectDocument = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nclass ErrorResponseImpl {\n constructor(status, statusText, data, internal) {\n if (internal === void 0) {\n internal = false;\n }\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nfunction isRouteErrorResponse(error) {\n return error != null && typeof error.status === \"number\" && typeof error.statusText === \"string\" && typeof error.internal === \"boolean\" && \"data\" in error;\n}\nconst validMutationMethodsArr = [\"post\", \"put\", \"patch\", \"delete\"];\nconst validMutationMethods = new Set(validMutationMethodsArr);\nconst validRequestMethodsArr = [\"get\", ...validMutationMethodsArr];\nconst validRequestMethods = new Set(validRequestMethodsArr);\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\nconst IDLE_NAVIGATION = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined\n};\nconst IDLE_FETCHER = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined\n};\nconst IDLE_BLOCKER = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined\n};\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nconst defaultMapRouteProperties = route => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary)\n});\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Create a router and listen to history POP navigations\n */\nfunction createRouter(init) {\n const routerWindow = init.window ? init.window : typeof window !== \"undefined\" ? window : undefined;\n const isBrowser = typeof routerWindow !== \"undefined\" && typeof routerWindow.document !== \"undefined\" && typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n invariant(init.routes.length > 0, \"You must provide a non-empty routes array to createRouter\");\n let mapRouteProperties;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = route => ({\n hasErrorBoundary: detectErrorBoundary(route)\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n // Routes keyed by ID\n let manifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(init.routes, mapRouteProperties, undefined, manifest);\n let inFlightDataRoutes;\n let basename = init.basename || \"/\";\n // Config driven behavior flags\n let future = _extends({\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_prependBasename: false\n }, init.future);\n // Cleanup function for history\n let unlistenHistory = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialErrors = null;\n if (initialMatches == null) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname\n });\n let {\n matches,\n route\n } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = {\n [route.id]: error\n };\n }\n let initialized =\n // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n !initialMatches.some(m => m.route.lazy) && (\n // And we have to either have no loaders or have been provided hydrationData\n !initialMatches.some(m => m.route.loader) || init.hydrationData != null);\n let router;\n let state = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: init.hydrationData && init.hydrationData.loaderData || {},\n actionData: init.hydrationData && init.hydrationData.actionData || null,\n errors: init.hydrationData && init.hydrationData.errors || initialErrors,\n fetchers: new Map(),\n blockers: new Map()\n };\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction = Action.Pop;\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n // AbortController for the active navigation\n let pendingNavigationController;\n // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions = new Map();\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener = null;\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidator()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes = [];\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads = [];\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map();\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map();\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set();\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map();\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map();\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let ignoreNextHistoryUpdate = false;\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(_ref => {\n let {\n action: historyAction,\n location,\n delta\n } = _ref;\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (ignoreNextHistoryUpdate) {\n ignoreNextHistoryUpdate = false;\n return;\n }\n warning(blockerFunctions.size === 0 || delta != null, \"You are trying to use a blocker on a POP navigation to a location \" + \"that was not created by @remix-run/router. This will fail silently in \" + \"production. This can happen if you are navigating outside the router \" + \"via `window.history.pushState`/`window.location.hash` instead of using \" + \"router navigation APIs. This can also happen if you are using \" + \"createHashRouter and the user manually changes the URL.\");\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction\n });\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n ignoreNextHistoryUpdate = true;\n init.history.go(delta * -1);\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location\n });\n // Re-do the same POP navigation we just blocked\n init.history.go(delta);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey, IDLE_BLOCKER);\n updateState({\n blockers\n });\n }\n });\n return;\n }\n return startNavigation(historyAction, location);\n });\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () => persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () => routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\n if (!state.initialized) {\n startNavigation(Action.Pop, state.location);\n }\n return router;\n }\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n // Subscribe to state updates for the router\n function subscribe(fn) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n // Update our state and notify the calling context of the change\n function updateState(newState, opts) {\n if (opts === void 0) {\n opts = {};\n }\n state = _extends({}, state, newState);\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers = [];\n let deletedFetchersKeys = [];\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach(subscriber => subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true\n }));\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach(key => state.fetchers.delete(key));\n deletedFetchersKeys.forEach(key => deleteFetcher(key));\n }\n }\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(location, newState, _temp) {\n var _location$state, _location$state2;\n let {\n flushSync\n } = _temp === void 0 ? {} : _temp;\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload = state.actionData != null && state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && state.navigation.state === \"loading\" && ((_location$state = location.state) == null ? void 0 : _location$state._isRedirect) !== true;\n let actionData;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData ? mergeLoaderData(state.loaderData, newState.loaderData, newState.matches || [], newState.errors) : state.loaderData;\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset = pendingPreventScrollReset === true || state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && ((_location$state2 = location.state) == null ? void 0 : _location$state2._isRedirect) !== true;\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n if (isUninterruptedRevalidation) ;else if (pendingAction === Action.Pop) ;else if (pendingAction === Action.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === Action.Replace) {\n init.history.replace(location, location.state);\n }\n let viewTransitionOpts;\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === Action.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location\n };\n }\n updateState(_extends({}, newState, {\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(location, newState.matches || state.matches),\n preventScrollReset,\n blockers\n }), {\n viewTransitionOpts,\n flushSync: flushSync === true\n });\n // Reset stateful navigation vars\n pendingAction = Action.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n cancelledFetcherLoads = [];\n }\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(to, opts) {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, to, opts == null ? void 0 : opts.fromRouteId, opts == null ? void 0 : opts.relative);\n let {\n path,\n submission,\n error\n } = normalizeNavigateOptions(future.v7_normalizeFormMethod, false, normalizedPath, opts);\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = _extends({}, nextLocation, init.history.encodeLocation(nextLocation));\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n let historyAction = Action.Push;\n if (userReplace === true) {\n historyAction = Action.Replace;\n } else if (userReplace === false) ;else if (submission != null && isMutationMethod(submission.formMethod) && submission.formAction === state.location.pathname + state.location.search) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = Action.Replace;\n }\n let preventScrollReset = opts && \"preventScrollReset\" in opts ? opts.preventScrollReset === true : undefined;\n let flushSync = (opts && opts.unstable_flushSync) === true;\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction\n });\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey, IDLE_BLOCKER);\n updateState({\n blockers\n });\n }\n });\n return;\n }\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync\n });\n }\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({\n revalidation: \"loading\"\n });\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true\n });\n return;\n }\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(pendingAction || state.historyAction, state.navigation.location, {\n overrideNavigation: state.navigation\n });\n }\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(historyAction, location, opts) {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation = (opts && opts.startUninterruptedRevalidation) === true;\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let error = getInternalRouterError(404, {\n pathname: location.pathname\n });\n let {\n matches: notFoundMatches,\n route\n } = getShortCircuitMatches(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(location, {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error\n }\n }, {\n flushSync\n });\n return;\n }\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a