@openmrs/esm-app-shell 5.3.3-pre.1424 → 5.3.3-pre.1425
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +98 -98
- package/dist/9c61459c588fc919.js +1 -0
- package/dist/9c61459c588fc919.js.map +1 -0
- package/dist/index.html +1 -1
- package/dist/openmrs.979f269c8d270a17.js +2 -0
- package/dist/openmrs.979f269c8d270a17.js.map +1 -0
- package/dist/service-worker.js +1 -1
- package/dist/service-worker.js.map +1 -1
- package/lib/{389e67ea4e97eec9.js → 0102ace6d215c50f.js} +2 -2
- package/lib/esm-devtools-app/889.js +1 -1
- package/lib/esm-devtools-app/889.js.map +1 -1
- package/lib/esm-devtools-app/main.js +1 -1
- package/lib/esm-devtools-app/openmrs-esm-devtools-app.js +1 -1
- package/lib/esm-devtools-app/openmrs-esm-devtools-app.js.buildmanifest.json +5 -5
- package/lib/esm-devtools-app/routes.json +1 -1
- package/lib/esm-login-app/889.js +1 -1
- package/lib/esm-login-app/889.js.map +1 -1
- package/lib/esm-login-app/main.js +1 -1
- package/lib/esm-login-app/openmrs-esm-login-app.js +1 -1
- package/lib/esm-login-app/openmrs-esm-login-app.js.buildmanifest.json +5 -5
- package/lib/esm-login-app/routes.json +1 -1
- package/lib/esm-offline-tools-app/889.js +1 -1
- package/lib/esm-offline-tools-app/889.js.map +1 -1
- package/lib/esm-offline-tools-app/main.js +1 -1
- package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js +1 -1
- package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js.buildmanifest.json +5 -5
- package/lib/esm-offline-tools-app/routes.json +1 -1
- package/lib/esm-primary-navigation-app/889.js +1 -1
- package/lib/esm-primary-navigation-app/889.js.map +1 -1
- package/lib/esm-primary-navigation-app/main.js +1 -1
- package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js +1 -1
- package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js.buildmanifest.json +5 -5
- package/lib/esm-primary-navigation-app/routes.json +1 -1
- package/lib/index.html +1 -1
- package/lib/openmrs.js +9 -9
- package/lib/service-worker.js +1 -1
- package/package.json +3 -3
- package/src/apps.ts +3 -2
- package/src/locale.ts +9 -15
- package/dist/520c9285f129a478.js +0 -1
- package/dist/520c9285f129a478.js.map +0 -1
- package/dist/openmrs.ba564766142e4cd3.js +0 -2
- package/dist/openmrs.ba564766142e4cd3.js.map +0 -1
- /package/dist/{openmrs.ba564766142e4cd3.js.LICENSE.txt → openmrs.979f269c8d270a17.js.LICENSE.txt} +0 -0
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
\*********************/
|
|
16
16
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
17
17
|
|
|
18
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ finishRegisteringAllApps: () => (/* binding */ finishRegisteringAllApps),\n/* harmony export */ registerApp: () => (/* binding */ registerApp),\n/* harmony export */ tryRegisterExtension: () => (/* binding */ tryRegisterExtension),\n/* harmony export */ tryRegisterPage: () => (/* binding */ tryRegisterPage)\n/* harmony export */ });\n/* harmony import */ var _openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @openmrs/esm-framework */ \"webpack/sharing/consume/default/@openmrs/esm-framework/@openmrs/esm-framework\");\n/* harmony import */ var _openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var single_spa__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! single-spa */ \"webpack/sharing/consume/default/single-spa/single-spa\");\n/* harmony import */ var single_spa__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(single_spa__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n}\nfunction _object_spread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _define_property(target, key, source[key]);\n });\n }\n return target;\n}\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _object_spread_props(target, source) {\n source = source != null ? source : {};\n if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _ts_generator(thisArg, body) {\n var f, y, t, g, _ = {\n label: 0,\n sent: function() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n };\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(_)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\n\n\n\nvar pages = [];\n/**\n * This takes a page's route definitions and returns a single-spa\n * activityFn which returns true when the page matches the current\n * route and false if it does not.\n *\n * @param route A string or regexp that matches the location when the\n * page should be displayed, a boolean constant, or an array of such\n * strings, regexps, and booleans\n * @returns An activityFn suitable to use for a single-spa application\n */ function getActivityFn(route) {\n if (Array.isArray(route)) {\n var activators = route.map(getActivityFn);\n return function(location) {\n return activators.some(function(activator) {\n return activator(location);\n });\n };\n } else if (typeof route === \"string\") {\n return (0,single_spa__WEBPACK_IMPORTED_MODULE_1__.pathToActiveWhen)(window.getOpenmrsSpaBase() + route);\n } else if (_instanceof(route, RegExp)) {\n return function(location) {\n return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.routeRegex)(route, location);\n };\n } else {\n return function() {\n return route;\n };\n }\n}\n/**\n * For pages, we also support the activityFn taking into account the online / offline\n * status. This wraps an existing single-spa activityFn and only allows the page to\n * be rendered in the appropriate mode.\n *\n * By default, we assume that all pages should be rendered when online, but only rendered\n * offline if specifically configured to do so.\n *\n * @param activityFn A standard single-spa activityFn such as that returned by {@link getActivityFn()}\n * @param pageDefinition The RegisteredPageDefinition object for this page\n * @returns An activityFn suitable to use for a single-spa application\n */ function wrapPageActivityFn(activityFn, param) {\n var online = param.online, offline = param.offline;\n return function(location) {\n // basically, if the page should only work online and we're offline or if the\n // page should only work offline and we're online, defaulting to always rendering\n // the page\n if (!(navigator.onLine && (online !== null && online !== void 0 ? online : true) || !navigator.onLine && (offline !== null && offline !== void 0 ? offline : false))) {\n return false;\n }\n return activityFn(location);\n };\n}\nvar STARTUP_FUNCTION = \"startupApp\";\n/**\n * @internal\n *\n * Used internally to track which apps have had their `startupApp()` initializer called\n *\n * Values are promises to support asynchronous loading of the same app multiple times\n */ var initializedApps = new Map();\n/**\n * This function creates a loader function suitable for use in either a single-spa\n * application or parcel.\n *\n * The returned function is lazy and ensures that the appropriate module is loaded,\n * that the module's `startupApp()` is called before the component is loaded. It\n * then calls the component function, which should return either a single-spa\n * {@link LifeCycles} object or a {@link Promise} that will resolve to such an object.\n *\n * React-based pages or extensions should generally use the framework's\n * `getAsyncLifecycle()` or `getSyncLifecycle()` functions.\n */ function getLoader(appName, component) {\n return /*#__PURE__*/ _async_to_generator(function() {\n var module;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n return [\n 4,\n (0,_openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_0__.importDynamic)(appName)\n ];\n case 1:\n module = _state.sent();\n if (!(module && Object.hasOwn(module, component) && typeof module[component] === \"function\")) return [\n 3,\n 6\n ];\n if (!!(appName in initializedApps)) return [\n 3,\n 3\n ];\n return [\n 4,\n initializedApps[appName] = new Promise(function(resolve, reject) {\n if (Object.hasOwn(module, STARTUP_FUNCTION)) {\n var startup = module[STARTUP_FUNCTION];\n if (typeof startup === \"function\") {\n return Promise.resolve(startup()).then(resolve).catch(reject);\n }\n }\n resolve(null);\n })\n ];\n case 2:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 3:\n return [\n 4,\n initializedApps[appName]\n ];\n case 4:\n _state.sent();\n _state.label = 5;\n case 5:\n return [\n 2,\n Promise.resolve(module[component]())\n ];\n case 6:\n if (module && Object.hasOwn(module, component)) {\n console.warn(\"The export \".concat(component, \" of the app \").concat(appName, \" is not a function\"));\n } else {\n console.warn(\"The app \".concat(appName, \" does not define a component called \").concat(component, \", this cannot be loaded\"));\n }\n _state.label = 7;\n case 7:\n return [\n 2,\n _helpers__WEBPACK_IMPORTED_MODULE_2__.emptyLifecycle\n ];\n }\n });\n });\n}\n/**\n * This is the main entry-point for registering an app with the app shell.\n * Each app has a name and should have a `routes.json` file that defines it's\n * associated routes.\n *\n * @param appName The name of the application, e.g. `@openmrs/esm-my-app`\n * @param routes A Javascript object that corresponds to the app's routes.json`\n * definition.\n */ function registerApp(appName, routes) {\n if (appName && routes && typeof routes === \"object\") {\n var _routes_pages;\n (0,_openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_0__.defineConfigSchema)(appName, {});\n var _routes_extensions;\n var availableExtensions = (_routes_extensions = routes.extensions) !== null && _routes_extensions !== void 0 ? _routes_extensions : [];\n (_routes_pages = routes.pages) === null || _routes_pages === void 0 ? void 0 : _routes_pages.forEach(function(p) {\n if (p && typeof p === \"object\" && Object.hasOwn(p, \"component\") && (Object.hasOwn(p, \"route\") || Object.hasOwn(p, \"routeRegex\") || Object.hasOwn(p, \"routes\"))) {\n var _p_order;\n pages.push(_object_spread_props(_object_spread({}, p), {\n order: (_p_order = p.order) !== null && _p_order !== void 0 ? _p_order : Number.MAX_SAFE_INTEGER,\n appName: appName\n }));\n } else {\n console.warn(\"A page for \".concat(appName, \" could not be registered as it does not appear to have the required properties\"), p);\n }\n });\n availableExtensions.forEach(function(ext) {\n if (ext && typeof ext === \"object\" && Object.hasOwn(ext, \"name\") && Object.hasOwn(ext, \"component\")) {\n tryRegisterExtension(appName, ext);\n } else {\n console.warn(\"An extension for \".concat(appName, \" could not be registered as it does not appear to have the required properties\"), ext);\n }\n });\n }\n}\n/**\n * This is called by the app shell once all route entries have been processed.\n * This actually registers the pages with the application. This function is\n * necessary to ensure that pages are rendered in the DOM according to their\n * order definition, especially because certain pages _must_ be first in the DOM.\n *\n * Each page is rendered into a div with an appropriate name.\n */ function finishRegisteringAllApps() {\n pages.sort(function(a, b) {\n var sort = a.order - b.order;\n if (sort != 0) {\n return sort;\n }\n return a.appName.localeCompare(b.appName, \"en\");\n });\n // Create a div for each page. This ensures their DOM order.\n // If we don't do this, Single-SPA 5 will create the DOM element only once\n // the page becomes active, which makes it impossible to guarantee order.\n var appIndices = new Map();\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = pages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var page = _step.value;\n if (!appIndices.has(page.appName)) {\n appIndices.set(page.appName, 0);\n } else {\n appIndices.set(page.appName, appIndices.get(page.appName) + 1);\n }\n var index = appIndices.get(page.appName);\n var name = \"\".concat(page.appName, \"-page-\").concat(index);\n var div = document.createElement(\"div\");\n div.id = \"single-spa-application:\".concat(name);\n document.body.appendChild(div);\n tryRegisterPage(name, page);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\n/**\n * This function actually converts each page definition into a single-spa application\n * if that's possible. After this point, pages are rendered using single-spa's\n * routing logic.\n *\n * @param appName The name of the app containing this page\n * @param page A Javascript object that describes the page defintion, derived from `routes.json`\n */ function tryRegisterPage(appName, page) {\n var route = typeof page.route !== \"undefined\" ? page.route : typeof page.routeRegex !== \"undefined\" ? new RegExp(page.routeRegex) : false;\n if (route === false) {\n console.warn('A registered page definition is missing a route and thus cannot be registered.\\nTo fix this, ensure that you define the \"route\" (or alternatively the \"routeRegex\") field inside the extension definition.', appName);\n return;\n }\n if (!page.component) {\n console.warn('A registered page definition is missing a component and thus cannot be registered.\\nTo fix this, ensure that you define the \"component\" field inside the page definition.', appName);\n return;\n }\n var activityFn = wrapPageActivityFn(getActivityFn(route), page);\n var loader = getLoader(page.appName, page.component);\n (0,single_spa__WEBPACK_IMPORTED_MODULE_1__.registerApplication)(appName, loader, activityFn);\n}\n/**\n * This function actually registers an extension definition with the framework and will\n * attach the extension to any configured slots.\n *\n * @param appName The name of the app containing this page\n * @param extension A Javascript object that describes the extension defintion, derived from `routes.json`\n */ function tryRegisterExtension(appName, extension) {\n var name = extension.name;\n if (!name) {\n console.error(\"An extension definition in \".concat(appName, ' is missing an name and thus cannot be\\nregistered. To fix this, ensure that you define the \"name\" field inside the\\nextension definition.'), extension);\n return;\n }\n if (extension.slots && extension.slot) {\n console.warn(\"The extension \".concat(name, \" from \").concat(appName, \" declares both a 'slots' property and\\na 'slot' property. Only the 'slots' property will be honored.\"));\n }\n var slots = extension.slots ? extension.slots : extension.slot ? [\n extension.slot\n ] : [];\n if (!extension.component && !extension.load) {\n console.error(\"The extension \".concat(name, \" from \").concat(appName, \" is missing a 'component' entry and thus cannot be registered.\\nTo fix this, ensure that you define a 'component' field inside the extension definition.\"), extension);\n return;\n }\n var loader = undefined;\n if (extension.component) {\n loader = getLoader(appName, extension.component);\n } else if (extension.load) {\n if (typeof extension.load !== \"function\") {\n console.error(\"The extension \".concat(name, \" from \").concat(appName, \" declares a 'load' property that is not a function. This is not\\nsupported, so the extension will not be loaded.\"));\n return;\n }\n loader = extension.load;\n }\n if (loader) {\n var _extension_online, _extension_offline;\n (0,_openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_0__.registerExtension)({\n name: name,\n load: loader,\n meta: extension.meta || {},\n order: extension.order,\n moduleName: appName,\n privileges: extension.privileges,\n online: (_extension_online = extension.online) !== null && _extension_online !== void 0 ? _extension_online : true,\n offline: (_extension_offline = extension.offline) !== null && _extension_offline !== void 0 ? _extension_offline : false,\n featureFlag: extension.featureFlag\n });\n }\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = slots[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var slot = _step.value;\n (0,_openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_0__.attach)(slot, name);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUE7OztpQkFBQTtnQkFBQTs7O2dCQUFBO3NCQUFBOzs7O0FBR1AsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi9zcmMvYXBwcy50cz81MTIzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgUmVnaXN0ZXJlZFBhZ2VEZWZpbml0aW9uLFxuICBFeHRlbnNpb25EZWZpbml0aW9uLFxuICBPcGVubXJzQXBwUm91dGVzLFxuICBSb3V0ZURlZmluaXRpb24sXG4gIEV4dGVuc2lvblJlZ2lzdHJhdGlvbixcbn0gZnJvbSAnQG9wZW5tcnMvZXNtLWZyYW1ld29yayc7XG5pbXBvcnQgeyBhdHRhY2gsIHJlZ2lzdGVyRXh0ZW5zaW9uLCBkZWZpbmVDb25maWdTY2hlbWEsIGltcG9ydER5bmFtaWMgfSBmcm9tICdAb3Blbm1ycy9lc20tZnJhbWV3b3JrJztcbmltcG9ydCB7IHR5cGUgQWN0aXZpdHlGbiwgdHlwZSBMaWZlQ3ljbGVzLCBwYXRoVG9BY3RpdmVXaGVuLCByZWdpc3RlckFwcGxpY2F0aW9uIH0gZnJvbSAnc2luZ2xlLXNwYSc7XG5pbXBvcnQgeyBlbXB0eUxpZmVjeWNsZSwgcm91dGVSZWdleCB9IGZyb20gJy4vaGVscGVycyc7XG5cbmNvbnN0IHBhZ2VzOiBBcnJheTxSZWdpc3RlcmVkUGFnZURlZmluaXRpb24+ID0gW107XG5cbi8qKlxuICogVGhpcyB0YWtlcyBhIHBhZ2UncyByb3V0ZSBkZWZpbml0aW9ucyBhbmQgcmV0dXJucyBhIHNpbmdsZS1zcGFcbiAqIGFjdGl2aXR5Rm4gd2hpY2ggcmV0dXJucyB0cnVlIHdoZW4gdGhlIHBhZ2UgbWF0Y2hlcyB0aGUgY3VycmVudFxuICogcm91dGUgYW5kIGZhbHNlIGlmIGl0IGRvZXMgbm90LlxuICpcbiAqIEBwYXJhbSByb3V0ZSBBIHN0cmluZyBvciByZWdleHAgdGhhdCBtYXRjaGVzIHRoZSBsb2NhdGlvbiB3aGVuIHRoZVxuICogcGFnZSBzaG91bGQgYmUgZGlzcGxheWVkLCBhIGJvb2xlYW4gY29uc3RhbnQsIG9yIGFuIGFycmF5IG9mIHN1Y2hcbiAqIHN0cmluZ3MsIHJlZ2V4cHMsIGFuZCBib29sZWFuc1xuICogQHJldHVybnMgQW4gYWN0aXZpdHlGbiBzdWl0YWJsZSB0byB1c2UgZm9yIGEgc2luZ2xlLXNwYSBhcHBsaWNhdGlvblxuICovXG5mdW5jdGlvbiBnZXRBY3Rpdml0eUZuKHJvdXRlOiBSb3V0ZURlZmluaXRpb24gfCBBcnJheTxSb3V0ZURlZmluaXRpb24+KTogQWN0aXZpdHlGbiB7XG4gIGlmIChBcnJheS5pc0FycmF5KHJvdXRlKSkge1xuICAgIGNvbnN0IGFjdGl2YXRvcnMgPSByb3V0ZS5tYXAoZ2V0QWN0aXZpdHlGbik7XG4gICAgcmV0dXJuIChsb2NhdGlvbikgPT4gYWN0aXZhdG9ycy5zb21lKChhY3RpdmF0b3IpID0+IGFjdGl2YXRvcihsb2NhdGlvbikpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiByb3V0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGF0aFRvQWN0aXZlV2hlbih3aW5kb3cuZ2V0T3Blbm1yc1NwYUJhc2UoKSArIHJvdXRlKTtcbiAgfSBlbHNlIGlmIChyb3V0ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiAobG9jYXRpb24pID0+IHJvdXRlUmVnZXgocm91dGUsIGxvY2F0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKCkgPT4gcm91dGU7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3IgcGFnZXMsIHdlIGFsc28gc3VwcG9ydCB0aGUgYWN0aXZpdHlGbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBvbmxpbmUgLyBvZmZsaW5lXG4gKiBzdGF0dXMuIFRoaXMgd3JhcHMgYW4gZXhpc3Rpbmcgc2luZ2xlLXNwYSBhY3Rpdml0eUZuIGFuZCBvbmx5IGFsbG93cyB0aGUgcGFnZSB0b1xuICogYmUgcmVuZGVyZWQgaW4gdGhlIGFwcHJvcHJpYXRlIG1vZGUuXG4gKlxuICogQnkgZGVmYXVsdCwgd2UgYXNzdW1lIHRoYXQgYWxsIHBhZ2VzIHNob3VsZCBiZSByZW5kZXJlZCB3aGVuIG9ubGluZSwgYnV0IG9ubHkgcmVuZGVyZWRcbiAqIG9mZmxpbmUgaWYgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQgdG8gZG8gc28uXG4gKlxuICogQHBhcmFtIGFjdGl2aXR5Rm4gQSBzdGFuZGFyZCBzaW5nbGUtc3BhIGFjdGl2aXR5Rm4gc3VjaCBhcyB0aGF0IHJldHVybmVkIGJ5IHtAbGluayBnZXRBY3Rpdml0eUZuKCl9XG4gKiBAcGFyYW0gcGFnZURlZmluaXRpb24gVGhlIFJlZ2lzdGVyZWRQYWdlRGVmaW5pdGlvbiBvYmplY3QgZm9yIHRoaXMgcGFnZVxuICogQHJldHVybnMgQW4gYWN0aXZpdHlGbiBzdWl0YWJsZSB0byB1c2UgZm9yIGEgc2luZ2xlLXNwYSBhcHBsaWNhdGlvblxuICovXG5mdW5jdGlvbiB3cmFwUGFnZUFjdGl2aXR5Rm4oYWN0aXZpdHlGbjogQWN0aXZpdHlGbiwgeyBvbmxpbmUsIG9mZmxpbmUgfTogUmVnaXN0ZXJlZFBhZ2VEZWZpbml0aW9uKSB7XG4gIHJldHVybiAobG9jYXRpb246IExvY2F0aW9uKSA9PiB7XG4gICAgLy8gYmFzaWNhbGx5LCBpZiB0aGUgcGFnZSBzaG91bGQgb25seSB3b3JrIG9ubGluZSBhbmQgd2UncmUgb2ZmbGluZSBvciBpZiB0aGVcbiAgICAvLyBwYWdlIHNob3VsZCBvbmx5IHdvcmsgb2ZmbGluZSBhbmQgd2UncmUgb25saW5lLCBkZWZhdWx0aW5nIHRvIGFsd2F5cyByZW5kZXJpbmdcbiAgICAvLyB0aGUgcGFnZVxuICAgIGlmICghKChuYXZpZ2F0b3Iub25MaW5lICYmIChvbmxpbmUgPz8gdHJ1ZSkpIHx8ICghbmF2aWdhdG9yLm9uTGluZSAmJiAob2ZmbGluZSA/PyBmYWxzZSkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpdml0eUZuKGxvY2F0aW9uKTtcbiAgfTtcbn1cblxuY29uc3QgU1RBUlRVUF9GVU5DVElPTiA9ICdzdGFydHVwQXBwJztcbi8qKlxuICogQGludGVybmFsXG4gKlxuICogVXNlZCBpbnRlcm5hbGx5IHRvIHRyYWNrIHdoaWNoIGFwcHMgaGF2ZSBoYWQgdGhlaXIgYHN0YXJ0dXBBcHAoKWAgaW5pdGlhbGl6ZXIgY2FsbGVkXG4gKlxuICogVmFsdWVzIGFyZSBwcm9taXNlcyB0byBzdXBwb3J0IGFzeW5jaHJvbm91cyBsb2FkaW5nIG9mIHRoZSBzYW1lIGFwcCBtdWx0aXBsZSB0aW1lc1xuICovXG5jb25zdCBpbml0aWFsaXplZEFwcHMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTx1bmtub3duPj4oKTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBsb2FkZXIgZnVuY3Rpb24gc3VpdGFibGUgZm9yIHVzZSBpbiBlaXRoZXIgYSBzaW5nbGUtc3BhXG4gKiBhcHBsaWNhdGlvbiBvciBwYXJjZWwuXG4gKlxuICogVGhlIHJldHVybmVkIGZ1bmN0aW9uIGlzIGxhenkgYW5kIGVuc3VyZXMgdGhhdCB0aGUgYXBwcm9wcmlhdGUgbW9kdWxlIGlzIGxvYWRlZCxcbiAqIHRoYXQgdGhlIG1vZHVsZSdzIGBzdGFydHVwQXBwKClgIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGNvbXBvbmVudCBpcyBsb2FkZWQuIEl0XG4gKiB0aGVuIGNhbGxzIHRoZSBjb21wb25lbnQgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCByZXR1cm4gZWl0aGVyIGEgc2luZ2xlLXNwYVxuICoge0BsaW5rIExpZmVDeWNsZXN9IG9iamVjdCBvciBhIHtAbGluayBQcm9taXNlfSB0aGF0IHdpbGwgcmVzb2x2ZSB0byBzdWNoIGFuIG9iamVjdC5cbiAqXG4gKiBSZWFjdC1iYXNlZCBwYWdlcyBvciBleHRlbnNpb25zIHNob3VsZCBnZW5lcmFsbHkgdXNlIHRoZSBmcmFtZXdvcmsnc1xuICogYGdldEFzeW5jTGlmZWN5Y2xlKClgIG9yIGBnZXRTeW5jTGlmZWN5Y2xlKClgIGZ1bmN0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0TG9hZGVyKGFwcE5hbWU6IHN0cmluZywgY29tcG9uZW50OiBzdHJpbmcpOiAoKSA9PiBQcm9taXNlPExpZmVDeWNsZXM+IHtcbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnREeW5hbWljPFxuICAgICAgUmVjb3JkPEV4Y2x1ZGU8c3RyaW5nLCAnc3RhcnR1cEFwcCc+LCAoKSA9PiBMaWZlQ3ljbGVzIHwgUHJvbWlzZTxMaWZlQ3ljbGVzPj4gJiB7IHN0YXJ0dXBBcHA/OiAoKSA9PiB1bmtub3duIH1cbiAgICA+KGFwcE5hbWUpO1xuXG4gICAgaWYgKG1vZHVsZSAmJiBPYmplY3QuaGFzT3duKG1vZHVsZSwgY29tcG9uZW50KSAmJiB0eXBlb2YgbW9kdWxlW2NvbXBvbmVudF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICghKGFwcE5hbWUgaW4gaW5pdGlhbGl6ZWRBcHBzKSkge1xuICAgICAgICBhd2FpdCAoaW5pdGlhbGl6ZWRBcHBzW2FwcE5hbWVdID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGlmIChPYmplY3QuaGFzT3duKG1vZHVsZSwgU1RBUlRVUF9GVU5DVElPTikpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0dXAgPSBtb2R1bGVbU1RBUlRVUF9GVU5DVElPTl07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0YXJ0dXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdGFydHVwKCkpLnRoZW4ocmVzb2x2ZSkuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBpbml0aWFsaXplZEFwcHNbYXBwTmFtZV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobW9kdWxlW2NvbXBvbmVudF0oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtb2R1bGUgJiYgT2JqZWN0Lmhhc093bihtb2R1bGUsIGNvbXBvbmVudCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBUaGUgZXhwb3J0ICR7Y29tcG9uZW50fSBvZiB0aGUgYXBwICR7YXBwTmFtZX0gaXMgbm90IGEgZnVuY3Rpb25gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgVGhlIGFwcCAke2FwcE5hbWV9IGRvZXMgbm90IGRlZmluZSBhIGNvbXBvbmVudCBjYWxsZWQgJHtjb21wb25lbnR9LCB0aGlzIGNhbm5vdCBiZSBsb2FkZWRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZW1wdHlMaWZlY3ljbGU7XG4gIH07XG59XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbWFpbiBlbnRyeS1wb2ludCBmb3IgcmVnaXN0ZXJpbmcgYW4gYXBwIHdpdGggdGhlIGFwcCBzaGVsbC5cbiAqIEVhY2ggYXBwIGhhcyBhIG5hbWUgYW5kIHNob3VsZCBoYXZlIGEgYHJvdXRlcy5qc29uYCBmaWxlIHRoYXQgZGVmaW5lcyBpdCdzXG4gKiBhc3NvY2lhdGVkIHJvdXRlcy5cbiAqXG4gKiBAcGFyYW0gYXBwTmFtZSBUaGUgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24sIGUuZy4gYEBvcGVubXJzL2VzbS1teS1hcHBgXG4gKiBAcGFyYW0gcm91dGVzIEEgSmF2YXNjcmlwdCBvYmplY3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgYXBwJ3MgIHJvdXRlcy5qc29uYFxuICogZGVmaW5pdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQXBwKGFwcE5hbWU6IHN0cmluZywgcm91dGVzOiBPcGVubXJzQXBwUm91dGVzKSB7XG4gIGlmIChhcHBOYW1lICYmIHJvdXRlcyAmJiB0eXBlb2Ygcm91dGVzID09PSAnb2JqZWN0Jykge1xuICAgIGRlZmluZUNvbmZpZ1NjaGVtYShhcHBOYW1lLCB7fSk7XG5cbiAgICBjb25zdCBhdmFpbGFibGVFeHRlbnNpb25zOiBBcnJheTxFeHRlbnNpb25EZWZpbml0aW9uPiA9IHJvdXRlcy5leHRlbnNpb25zID8/IFtdO1xuXG4gICAgcm91dGVzLnBhZ2VzPy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHAgJiZcbiAgICAgICAgdHlwZW9mIHAgPT09ICdvYmplY3QnICYmXG4gICAgICAgIE9iamVjdC5oYXNPd24ocCwgJ2NvbXBvbmVudCcpICYmXG4gICAgICAgIChPYmplY3QuaGFzT3duKHAsICdyb3V0ZScpIHx8IE9iamVjdC5oYXNPd24ocCwgJ3JvdXRlUmVnZXgnKSB8fCBPYmplY3QuaGFzT3duKHAsICdyb3V0ZXMnKSlcbiAgICAgICkge1xuICAgICAgICBwYWdlcy5wdXNoKHtcbiAgICAgICAgICAuLi5wLFxuICAgICAgICAgIG9yZGVyOiBwLm9yZGVyID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICAgICAgICAgIGFwcE5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBBIHBhZ2UgZm9yICR7YXBwTmFtZX0gY291bGQgbm90IGJlIHJlZ2lzdGVyZWQgYXMgaXQgZG9lcyBub3QgYXBwZWFyIHRvIGhhdmUgdGhlIHJlcXVpcmVkIHByb3BlcnRpZXNgLFxuICAgICAgICAgIHAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhdmFpbGFibGVFeHRlbnNpb25zLmZvckVhY2goKGV4dCkgPT4ge1xuICAgICAgaWYgKGV4dCAmJiB0eXBlb2YgZXh0ID09PSAnb2JqZWN0JyAmJiBPYmplY3QuaGFzT3duKGV4dCwgJ25hbWUnKSAmJiBPYmplY3QuaGFzT3duKGV4dCwgJ2NvbXBvbmVudCcpKSB7XG4gICAgICAgIHRyeVJlZ2lzdGVyRXh0ZW5zaW9uKGFwcE5hbWUsIGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYEFuIGV4dGVuc2lvbiBmb3IgJHthcHBOYW1lfSBjb3VsZCBub3QgYmUgcmVnaXN0ZXJlZCBhcyBpdCBkb2VzIG5vdCBhcHBlYXIgdG8gaGF2ZSB0aGUgcmVxdWlyZWQgcHJvcGVydGllc2AsXG4gICAgICAgICAgZXh0LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIGFwcCBzaGVsbCBvbmNlIGFsbCByb3V0ZSBlbnRyaWVzIGhhdmUgYmVlbiBwcm9jZXNzZWQuXG4gKiBUaGlzIGFjdHVhbGx5IHJlZ2lzdGVycyB0aGUgcGFnZXMgd2l0aCB0aGUgYXBwbGljYXRpb24uIFRoaXMgZnVuY3Rpb24gaXNcbiAqIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBwYWdlcyBhcmUgcmVuZGVyZWQgaW4gdGhlIERPTSBhY2NvcmRpbmcgdG8gdGhlaXJcbiAqIG9yZGVyIGRlZmluaXRpb24sIGVzcGVjaWFsbHkgYmVjYXVzZSBjZXJ0YWluIHBhZ2VzIF9tdXN0XyBiZSBmaXJzdCBpbiB0aGUgRE9NLlxuICpcbiAqIEVhY2ggcGFnZSBpcyByZW5kZXJlZCBpbnRvIGEgZGl2IHdpdGggYW4gYXBwcm9wcmlhdGUgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmlzaFJlZ2lzdGVyaW5nQWxsQXBwcygpIHtcbiAgcGFnZXMuc29ydCgoYSwgYikgPT4ge1xuICAgIGxldCBzb3J0ID0gYS5vcmRlciAtIGIub3JkZXI7XG4gICAgaWYgKHNvcnQgIT0gMCkge1xuICAgICAgcmV0dXJuIHNvcnQ7XG4gICAgfVxuICAgIHJldHVybiBhLmFwcE5hbWUubG9jYWxlQ29tcGFyZShiLmFwcE5hbWUsICdlbicpO1xuICB9KTtcblxuICAvLyBDcmVhdGUgYSBkaXYgZm9yIGVhY2ggcGFnZS4gVGhpcyBlbnN1cmVzIHRoZWlyIERPTSBvcmRlci5cbiAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgU2luZ2xlLVNQQSA1IHdpbGwgY3JlYXRlIHRoZSBET00gZWxlbWVudCBvbmx5IG9uY2VcbiAgLy8gdGhlIHBhZ2UgYmVjb21lcyBhY3RpdmUsIHdoaWNoIG1ha2VzIGl0IGltcG9zc2libGUgdG8gZ3VhcmFudGVlIG9yZGVyLlxuICBsZXQgYXBwSW5kaWNlcyA9IG5ldyBNYXAoKTtcbiAgZm9yIChsZXQgcGFnZSBvZiBwYWdlcykge1xuICAgIGlmICghYXBwSW5kaWNlcy5oYXMocGFnZS5hcHBOYW1lKSkge1xuICAgICAgYXBwSW5kaWNlcy5zZXQocGFnZS5hcHBOYW1lLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwSW5kaWNlcy5zZXQocGFnZS5hcHBOYW1lLCBhcHBJbmRpY2VzLmdldChwYWdlLmFwcE5hbWUpICsgMSk7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gYXBwSW5kaWNlcy5nZXQocGFnZS5hcHBOYW1lKTtcblxuICAgIGNvbnN0IG5hbWUgPSBgJHtwYWdlLmFwcE5hbWV9LXBhZ2UtJHtpbmRleH1gO1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi5pZCA9IGBzaW5nbGUtc3BhLWFwcGxpY2F0aW9uOiR7bmFtZX1gO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICB0cnlSZWdpc3RlclBhZ2UobmFtZSwgcGFnZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGNvbnZlcnRzIGVhY2ggcGFnZSBkZWZpbml0aW9uIGludG8gYSBzaW5nbGUtc3BhIGFwcGxpY2F0aW9uXG4gKiBpZiB0aGF0J3MgcG9zc2libGUuIEFmdGVyIHRoaXMgcG9pbnQsIHBhZ2VzIGFyZSByZW5kZXJlZCB1c2luZyBzaW5nbGUtc3BhJ3NcbiAqIHJvdXRpbmcgbG9naWMuXG4gKlxuICogQHBhcmFtIGFwcE5hbWUgVGhlIG5hbWUgb2YgdGhlIGFwcCBjb250YWluaW5nIHRoaXMgcGFnZVxuICogQHBhcmFtIHBhZ2UgQSBKYXZhc2NyaXB0IG9iamVjdCB0aGF0IGRlc2NyaWJlcyB0aGUgcGFnZSBkZWZpbnRpb24sIGRlcml2ZWQgZnJvbSBgcm91dGVzLmpzb25gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cnlSZWdpc3RlclBhZ2UoYXBwTmFtZTogc3RyaW5nLCBwYWdlOiBSZWdpc3RlcmVkUGFnZURlZmluaXRpb24pIHtcbiAgY29uc3Qgcm91dGUgPVxuICAgIHR5cGVvZiBwYWdlLnJvdXRlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgPyBwYWdlLnJvdXRlXG4gICAgICA6IHR5cGVvZiBwYWdlLnJvdXRlUmVnZXggIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gbmV3IFJlZ0V4cChwYWdlLnJvdXRlUmVnZXgpXG4gICAgICAgIDogZmFsc2U7XG5cbiAgaWYgKHJvdXRlID09PSBmYWxzZSkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBBIHJlZ2lzdGVyZWQgcGFnZSBkZWZpbml0aW9uIGlzIG1pc3NpbmcgYSByb3V0ZSBhbmQgdGh1cyBjYW5ub3QgYmUgcmVnaXN0ZXJlZC5cblRvIGZpeCB0aGlzLCBlbnN1cmUgdGhhdCB5b3UgZGVmaW5lIHRoZSBcInJvdXRlXCIgKG9yIGFsdGVybmF0aXZlbHkgdGhlIFwicm91dGVSZWdleFwiKSBmaWVsZCBpbnNpZGUgdGhlIGV4dGVuc2lvbiBkZWZpbml0aW9uLmAsXG4gICAgICBhcHBOYW1lLFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFwYWdlLmNvbXBvbmVudCkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBBIHJlZ2lzdGVyZWQgcGFnZSBkZWZpbml0aW9uIGlzIG1pc3NpbmcgYSBjb21wb25lbnQgYW5kIHRodXMgY2Fubm90IGJlIHJlZ2lzdGVyZWQuXG5UbyBmaXggdGhpcywgZW5zdXJlIHRoYXQgeW91IGRlZmluZSB0aGUgXCJjb21wb25lbnRcIiBmaWVsZCBpbnNpZGUgdGhlIHBhZ2UgZGVmaW5pdGlvbi5gLFxuICAgICAgYXBwTmFtZSxcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFjdGl2aXR5Rm4gPSB3cmFwUGFnZUFjdGl2aXR5Rm4oZ2V0QWN0aXZpdHlGbihyb3V0ZSksIHBhZ2UpO1xuICBjb25zdCBsb2FkZXIgPSBnZXRMb2FkZXIocGFnZS5hcHBOYW1lLCBwYWdlLmNvbXBvbmVudCk7XG4gIHJlZ2lzdGVyQXBwbGljYXRpb24oYXBwTmFtZSwgbG9hZGVyLCBhY3Rpdml0eUZuKTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGFjdHVhbGx5IHJlZ2lzdGVycyBhbiBleHRlbnNpb24gZGVmaW5pdGlvbiB3aXRoIHRoZSBmcmFtZXdvcmsgYW5kIHdpbGxcbiAqIGF0dGFjaCB0aGUgZXh0ZW5zaW9uIHRvIGFueSBjb25maWd1cmVkIHNsb3RzLlxuICpcbiAqIEBwYXJhbSBhcHBOYW1lIFRoZSBuYW1lIG9mIHRoZSBhcHAgY29udGFpbmluZyB0aGlzIHBhZ2VcbiAqIEBwYXJhbSBleHRlbnNpb24gQSBKYXZhc2NyaXB0IG9iamVjdCB0aGF0IGRlc2NyaWJlcyB0aGUgZXh0ZW5zaW9uIGRlZmludGlvbiwgZGVyaXZlZCBmcm9tIGByb3V0ZXMuanNvbmBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyeVJlZ2lzdGVyRXh0ZW5zaW9uKGFwcE5hbWU6IHN0cmluZywgZXh0ZW5zaW9uOiBFeHRlbnNpb25EZWZpbml0aW9uKSB7XG4gIGNvbnN0IG5hbWUgPSBleHRlbnNpb24ubmFtZTtcbiAgaWYgKCFuYW1lKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBBbiBleHRlbnNpb24gZGVmaW5pdGlvbiBpbiAke2FwcE5hbWV9IGlzIG1pc3NpbmcgYW4gbmFtZSBhbmQgdGh1cyBjYW5ub3QgYmVcbnJlZ2lzdGVyZWQuIFRvIGZpeCB0aGlzLCBlbnN1cmUgdGhhdCB5b3UgZGVmaW5lIHRoZSBcIm5hbWVcIiBmaWVsZCBpbnNpZGUgdGhlXG5leHRlbnNpb24gZGVmaW5pdGlvbi5gLFxuICAgICAgZXh0ZW5zaW9uLFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGV4dGVuc2lvbi5zbG90cyAmJiBleHRlbnNpb24uc2xvdCkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBUaGUgZXh0ZW5zaW9uICR7bmFtZX0gZnJvbSAke2FwcE5hbWV9IGRlY2xhcmVzIGJvdGggYSAnc2xvdHMnIHByb3BlcnR5IGFuZFxuYSAnc2xvdCcgcHJvcGVydHkuIE9ubHkgdGhlICdzbG90cycgcHJvcGVydHkgd2lsbCBiZSBob25vcmVkLmAsXG4gICAgKTtcbiAgfVxuICBjb25zdCBzbG90cyA9IGV4dGVuc2lvbi5zbG90cyA/IGV4dGVuc2lvbi5zbG90cyA6IGV4dGVuc2lvbi5zbG90ID8gW2V4dGVuc2lvbi5zbG90XSA6IFtdO1xuXG4gIGlmICghZXh0ZW5zaW9uLmNvbXBvbmVudCAmJiAhZXh0ZW5zaW9uLmxvYWQpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgYFRoZSBleHRlbnNpb24gJHtuYW1lfSBmcm9tICR7YXBwTmFtZX0gaXMgbWlzc2luZyBhICdjb21wb25lbnQnIGVudHJ5IGFuZCB0aHVzIGNhbm5vdCBiZSByZWdpc3RlcmVkLlxuVG8gZml4IHRoaXMsIGVuc3VyZSB0aGF0IHlvdSBkZWZpbmUgYSAnY29tcG9uZW50JyBmaWVsZCBpbnNpZGUgdGhlIGV4dGVuc2lvbiBkZWZpbml0aW9uLmAsXG4gICAgICBleHRlbnNpb24sXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgbG9hZGVyOiBFeHRlbnNpb25SZWdpc3RyYXRpb25bJ2xvYWQnXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgaWYgKGV4dGVuc2lvbi5jb21wb25lbnQpIHtcbiAgICBsb2FkZXIgPSBnZXRMb2FkZXIoYXBwTmFtZSwgZXh0ZW5zaW9uLmNvbXBvbmVudCk7XG4gIH0gZWxzZSBpZiAoZXh0ZW5zaW9uLmxvYWQpIHtcbiAgICBpZiAodHlwZW9mIGV4dGVuc2lvbi5sb2FkICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgVGhlIGV4dGVuc2lvbiAke25hbWV9IGZyb20gJHthcHBOYW1lfSBkZWNsYXJlcyBhICdsb2FkJyBwcm9wZXJ0eSB0aGF0IGlzIG5vdCBhIGZ1bmN0aW9uLiBUaGlzIGlzIG5vdFxuc3VwcG9ydGVkLCBzbyB0aGUgZXh0ZW5zaW9uIHdpbGwgbm90IGJlIGxvYWRlZC5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbG9hZGVyID0gZXh0ZW5zaW9uLmxvYWQ7XG4gIH1cblxuICBpZiAobG9hZGVyKSB7XG4gICAgcmVnaXN0ZXJFeHRlbnNpb24oe1xuICAgICAgbmFtZSxcbiAgICAgIGxvYWQ6IGxvYWRlcixcbiAgICAgIG1ldGE6IGV4dGVuc2lvbi5tZXRhIHx8IHt9LFxuICAgICAgb3JkZXI6IGV4dGVuc2lvbi5vcmRlcixcbiAgICAgIG1vZHVsZU5hbWU6IGFwcE5hbWUsXG4gICAgICBwcml2aWxlZ2VzOiBleHRlbnNpb24ucHJpdmlsZWdlcyxcbiAgICAgIG9ubGluZTogZXh0ZW5zaW9uLm9ubGluZSA/PyB0cnVlLFxuICAgICAgb2ZmbGluZTogZXh0ZW5zaW9uLm9mZmxpbmUgPz8gZmFsc2UsXG4gICAgICBmZWF0dXJlRmxhZzogZXh0ZW5zaW9uLmZlYXR1cmVGbGFnLFxuICAgIH0pO1xuICB9XG5cbiAgZm9yIChjb25zdCBzbG90IG9mIHNsb3RzKSB7XG4gICAgYXR0YWNoKHNsb3QsIG5hbWUpO1xuICB9XG59XG4iXSwibmFtZXMiOlsiYXR0YWNoIiwicmVnaXN0ZXJFeHRlbnNpb24iLCJkZWZpbmVDb25maWdTY2hlbWEiLCJpbXBvcnREeW5hbWljIiwicGF0aFRvQWN0aXZlV2hlbiIsInJlZ2lzdGVyQXBwbGljYXRpb24iLCJlbXB0eUxpZmVjeWNsZSIsInJvdXRlUmVnZXgiLCJwYWdlcyIsImdldEFjdGl2aXR5Rm4iLCJyb3V0ZSIsIkFycmF5IiwiaXNBcnJheSIsImFjdGl2YXRvcnMiLCJtYXAiLCJsb2NhdGlvbiIsInNvbWUiLCJhY3RpdmF0b3IiLCJ3aW5kb3ciLCJnZXRPcGVubXJzU3BhQmFzZSIsIlJlZ0V4cCIsIndyYXBQYWdlQWN0aXZpdHlGbiIsImFjdGl2aXR5Rm4iLCJvbmxpbmUiLCJvZmZsaW5lIiwibmF2aWdhdG9yIiwib25MaW5lIiwiU1RBUlRVUF9GVU5DVElPTiIsImluaXRpYWxpemVkQXBwcyIsIk1hcCIsImdldExvYWRlciIsImFwcE5hbWUiLCJjb21wb25lbnQiLCJtb2R1bGUiLCJPYmplY3QiLCJoYXNPd24iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInN0YXJ0dXAiLCJ0aGVuIiwiY2F0Y2giLCJjb25zb2xlIiwid2FybiIsInJlZ2lzdGVyQXBwIiwicm91dGVzIiwiYXZhaWxhYmxlRXh0ZW5zaW9ucyIsImV4dGVuc2lvbnMiLCJmb3JFYWNoIiwicCIsInB1c2giLCJvcmRlciIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJleHQiLCJ0cnlSZWdpc3RlckV4dGVuc2lvbiIsImZpbmlzaFJlZ2lzdGVyaW5nQWxsQXBwcyIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJhcHBJbmRpY2VzIiwicGFnZSIsImhhcyIsInNldCIsImdldCIsImluZGV4IiwibmFtZSIsImRpdiIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlkIiwiYm9keSIsImFwcGVuZENoaWxkIiwidHJ5UmVnaXN0ZXJQYWdlIiwibG9hZGVyIiwiZXh0ZW5zaW9uIiwiZXJyb3IiLCJzbG90cyIsInNsb3QiLCJsb2FkIiwidW5kZWZpbmVkIiwibWV0YSIsIm1vZHVsZU5hbWUiLCJwcml2aWxlZ2VzIiwiZmVhdHVyZUZsYWciXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/apps.ts\n");
|
|
18
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ finishRegisteringAllApps: () => (/* binding */ finishRegisteringAllApps),\n/* harmony export */ registerApp: () => (/* binding */ registerApp),\n/* harmony export */ tryRegisterExtension: () => (/* binding */ tryRegisterExtension),\n/* harmony export */ tryRegisterPage: () => (/* binding */ tryRegisterPage)\n/* harmony export */ });\n/* harmony import */ var _openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @openmrs/esm-framework */ \"webpack/sharing/consume/default/@openmrs/esm-framework/@openmrs/esm-framework\");\n/* harmony import */ var _openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var single_spa__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! single-spa */ \"webpack/sharing/consume/default/single-spa/single-spa\");\n/* harmony import */ var single_spa__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(single_spa__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @openmrs/esm-framework/src/internal */ \"webpack/sharing/consume/default/@openmrs/esm-framework/src/internal/@openmrs/esm-framework/src/internal\");\n/* harmony import */ var _openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_3__);\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n}\nfunction _object_spread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _define_property(target, key, source[key]);\n });\n }\n return target;\n}\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _object_spread_props(target, source) {\n source = source != null ? source : {};\n if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _ts_generator(thisArg, body) {\n var f, y, t, g, _ = {\n label: 0,\n sent: function() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n };\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(_)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\n\n\n\n\nvar pages = [];\n/**\n * This takes a page's route definitions and returns a single-spa\n * activityFn which returns true when the page matches the current\n * route and false if it does not.\n *\n * @param route A string or regexp that matches the location when the\n * page should be displayed, a boolean constant, or an array of such\n * strings, regexps, and booleans\n * @returns An activityFn suitable to use for a single-spa application\n */ function getActivityFn(route) {\n if (Array.isArray(route)) {\n var activators = route.map(getActivityFn);\n return function(location) {\n return activators.some(function(activator) {\n return activator(location);\n });\n };\n } else if (typeof route === \"string\") {\n return (0,single_spa__WEBPACK_IMPORTED_MODULE_1__.pathToActiveWhen)(window.getOpenmrsSpaBase() + route);\n } else if (_instanceof(route, RegExp)) {\n return function(location) {\n return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.routeRegex)(route, location);\n };\n } else {\n return function() {\n return route;\n };\n }\n}\n/**\n * For pages, we also support the activityFn taking into account the online / offline\n * status. This wraps an existing single-spa activityFn and only allows the page to\n * be rendered in the appropriate mode.\n *\n * By default, we assume that all pages should be rendered when online, but only rendered\n * offline if specifically configured to do so.\n *\n * @param activityFn A standard single-spa activityFn such as that returned by {@link getActivityFn()}\n * @param pageDefinition The RegisteredPageDefinition object for this page\n * @returns An activityFn suitable to use for a single-spa application\n */ function wrapPageActivityFn(activityFn, param) {\n var online = param.online, offline = param.offline;\n return function(location) {\n // basically, if the page should only work online and we're offline or if the\n // page should only work offline and we're online, defaulting to always rendering\n // the page\n if (!(navigator.onLine && (online !== null && online !== void 0 ? online : true) || !navigator.onLine && (offline !== null && offline !== void 0 ? offline : false))) {\n return false;\n }\n return activityFn(location);\n };\n}\nvar STARTUP_FUNCTION = \"startupApp\";\n/**\n * @internal\n *\n * Used internally to track which apps have had their `startupApp()` initializer called\n *\n * Values are promises to support asynchronous loading of the same app multiple times\n */ var initializedApps = new Map();\n/**\n * This function creates a loader function suitable for use in either a single-spa\n * application or parcel.\n *\n * The returned function is lazy and ensures that the appropriate module is loaded,\n * that the module's `startupApp()` is called before the component is loaded. It\n * then calls the component function, which should return either a single-spa\n * {@link LifeCycles} object or a {@link Promise} that will resolve to such an object.\n *\n * React-based pages or extensions should generally use the framework's\n * `getAsyncLifecycle()` or `getSyncLifecycle()` functions.\n */ function getLoader(appName, component) {\n return /*#__PURE__*/ _async_to_generator(function() {\n var module;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n return [\n 4,\n (0,_openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_0__.importDynamic)(appName)\n ];\n case 1:\n module = _state.sent();\n if (!(module && Object.hasOwn(module, component) && typeof module[component] === \"function\")) return [\n 3,\n 6\n ];\n if (!!(appName in initializedApps)) return [\n 3,\n 3\n ];\n return [\n 4,\n initializedApps[appName] = new Promise(function(resolve, reject) {\n if (Object.hasOwn(module, STARTUP_FUNCTION)) {\n var startup = module[STARTUP_FUNCTION];\n if (typeof startup === \"function\") {\n return Promise.resolve(startup()).then(resolve).catch(reject);\n }\n }\n resolve(null);\n })\n ];\n case 2:\n _state.sent();\n return [\n 3,\n 5\n ];\n case 3:\n return [\n 4,\n initializedApps[appName]\n ];\n case 4:\n _state.sent();\n _state.label = 5;\n case 5:\n return [\n 2,\n Promise.resolve(module[component]())\n ];\n case 6:\n if (module && Object.hasOwn(module, component)) {\n console.warn(\"The export \".concat(component, \" of the app \").concat(appName, \" is not a function\"));\n } else {\n console.warn(\"The app \".concat(appName, \" does not define a component called \").concat(component, \", this cannot be loaded\"));\n }\n _state.label = 7;\n case 7:\n return [\n 2,\n _helpers__WEBPACK_IMPORTED_MODULE_2__.emptyLifecycle\n ];\n }\n });\n });\n}\n/**\n * This is the main entry-point for registering an app with the app shell.\n * Each app has a name and should have a `routes.json` file that defines it's\n * associated routes.\n *\n * @param appName The name of the application, e.g. `@openmrs/esm-my-app`\n * @param routes A Javascript object that corresponds to the app's routes.json`\n * definition.\n */ function registerApp(appName, routes) {\n if (appName && routes && typeof routes === \"object\") {\n var _routes_pages;\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_3__.registerModuleWithConfigSystem)(appName);\n var _routes_extensions;\n var availableExtensions = (_routes_extensions = routes.extensions) !== null && _routes_extensions !== void 0 ? _routes_extensions : [];\n (_routes_pages = routes.pages) === null || _routes_pages === void 0 ? void 0 : _routes_pages.forEach(function(p) {\n if (p && typeof p === \"object\" && Object.hasOwn(p, \"component\") && (Object.hasOwn(p, \"route\") || Object.hasOwn(p, \"routeRegex\") || Object.hasOwn(p, \"routes\"))) {\n var _p_order;\n pages.push(_object_spread_props(_object_spread({}, p), {\n order: (_p_order = p.order) !== null && _p_order !== void 0 ? _p_order : Number.MAX_SAFE_INTEGER,\n appName: appName\n }));\n } else {\n console.warn(\"A page for \".concat(appName, \" could not be registered as it does not appear to have the required properties\"), p);\n }\n });\n availableExtensions.forEach(function(ext) {\n if (ext && typeof ext === \"object\" && Object.hasOwn(ext, \"name\") && Object.hasOwn(ext, \"component\")) {\n tryRegisterExtension(appName, ext);\n } else {\n console.warn(\"An extension for \".concat(appName, \" could not be registered as it does not appear to have the required properties\"), ext);\n }\n });\n }\n}\n/**\n * This is called by the app shell once all route entries have been processed.\n * This actually registers the pages with the application. This function is\n * necessary to ensure that pages are rendered in the DOM according to their\n * order definition, especially because certain pages _must_ be first in the DOM.\n *\n * Each page is rendered into a div with an appropriate name.\n */ function finishRegisteringAllApps() {\n pages.sort(function(a, b) {\n var sort = a.order - b.order;\n if (sort != 0) {\n return sort;\n }\n return a.appName.localeCompare(b.appName, \"en\");\n });\n // Create a div for each page. This ensures their DOM order.\n // If we don't do this, Single-SPA 5 will create the DOM element only once\n // the page becomes active, which makes it impossible to guarantee order.\n var appIndices = new Map();\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = pages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var page = _step.value;\n if (!appIndices.has(page.appName)) {\n appIndices.set(page.appName, 0);\n } else {\n appIndices.set(page.appName, appIndices.get(page.appName) + 1);\n }\n var index = appIndices.get(page.appName);\n var name = \"\".concat(page.appName, \"-page-\").concat(index);\n var div = document.createElement(\"div\");\n div.id = \"single-spa-application:\".concat(name);\n document.body.appendChild(div);\n tryRegisterPage(name, page);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\n/**\n * This function actually converts each page definition into a single-spa application\n * if that's possible. After this point, pages are rendered using single-spa's\n * routing logic.\n *\n * @param appName The name of the app containing this page\n * @param page A Javascript object that describes the page defintion, derived from `routes.json`\n */ function tryRegisterPage(appName, page) {\n var route = typeof page.route !== \"undefined\" ? page.route : typeof page.routeRegex !== \"undefined\" ? new RegExp(page.routeRegex) : false;\n if (route === false) {\n console.warn('A registered page definition is missing a route and thus cannot be registered.\\nTo fix this, ensure that you define the \"route\" (or alternatively the \"routeRegex\") field inside the extension definition.', appName);\n return;\n }\n if (!page.component) {\n console.warn('A registered page definition is missing a component and thus cannot be registered.\\nTo fix this, ensure that you define the \"component\" field inside the page definition.', appName);\n return;\n }\n var activityFn = wrapPageActivityFn(getActivityFn(route), page);\n var loader = getLoader(page.appName, page.component);\n (0,single_spa__WEBPACK_IMPORTED_MODULE_1__.registerApplication)(appName, loader, activityFn);\n}\n/**\n * This function actually registers an extension definition with the framework and will\n * attach the extension to any configured slots.\n *\n * @param appName The name of the app containing this page\n * @param extension A Javascript object that describes the extension defintion, derived from `routes.json`\n */ function tryRegisterExtension(appName, extension) {\n var name = extension.name;\n if (!name) {\n console.error(\"An extension definition in \".concat(appName, ' is missing an name and thus cannot be\\nregistered. To fix this, ensure that you define the \"name\" field inside the\\nextension definition.'), extension);\n return;\n }\n if (extension.slots && extension.slot) {\n console.warn(\"The extension \".concat(name, \" from \").concat(appName, \" declares both a 'slots' property and\\na 'slot' property. Only the 'slots' property will be honored.\"));\n }\n var slots = extension.slots ? extension.slots : extension.slot ? [\n extension.slot\n ] : [];\n if (!extension.component && !extension.load) {\n console.error(\"The extension \".concat(name, \" from \").concat(appName, \" is missing a 'component' entry and thus cannot be registered.\\nTo fix this, ensure that you define a 'component' field inside the extension definition.\"), extension);\n return;\n }\n var loader = undefined;\n if (extension.component) {\n loader = getLoader(appName, extension.component);\n } else if (extension.load) {\n if (typeof extension.load !== \"function\") {\n console.error(\"The extension \".concat(name, \" from \").concat(appName, \" declares a 'load' property that is not a function. This is not\\nsupported, so the extension will not be loaded.\"));\n return;\n }\n loader = extension.load;\n }\n if (loader) {\n var _extension_online, _extension_offline;\n (0,_openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_0__.registerExtension)({\n name: name,\n load: loader,\n meta: extension.meta || {},\n order: extension.order,\n moduleName: appName,\n privileges: extension.privileges,\n online: (_extension_online = extension.online) !== null && _extension_online !== void 0 ? _extension_online : true,\n offline: (_extension_offline = extension.offline) !== null && _extension_offline !== void 0 ? _extension_offline : false,\n featureFlag: extension.featureFlag\n });\n }\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = slots[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var slot = _step.value;\n (0,_openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_0__.attach)(slot, name);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTs7O2lCQUFBO2dCQUFBOzs7Z0JBQUE7c0JBQUE7Ozs7QUFHUCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uL3NyYy9hcHBzLnRzPzUxMjMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBSZWdpc3RlcmVkUGFnZURlZmluaXRpb24sXG4gIEV4dGVuc2lvbkRlZmluaXRpb24sXG4gIE9wZW5tcnNBcHBSb3V0ZXMsXG4gIFJvdXRlRGVmaW5pdGlvbixcbiAgRXh0ZW5zaW9uUmVnaXN0cmF0aW9uLFxufSBmcm9tICdAb3Blbm1ycy9lc20tZnJhbWV3b3JrJztcbmltcG9ydCB7IGF0dGFjaCwgcmVnaXN0ZXJFeHRlbnNpb24sIGltcG9ydER5bmFtaWMgfSBmcm9tICdAb3Blbm1ycy9lc20tZnJhbWV3b3JrJztcbmltcG9ydCB7IHR5cGUgQWN0aXZpdHlGbiwgdHlwZSBMaWZlQ3ljbGVzLCBwYXRoVG9BY3RpdmVXaGVuLCByZWdpc3RlckFwcGxpY2F0aW9uIH0gZnJvbSAnc2luZ2xlLXNwYSc7XG5pbXBvcnQgeyBlbXB0eUxpZmVjeWNsZSwgcm91dGVSZWdleCB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyByZWdpc3Rlck1vZHVsZVdpdGhDb25maWdTeXN0ZW0gfSBmcm9tICdAb3Blbm1ycy9lc20tZnJhbWV3b3JrL3NyYy9pbnRlcm5hbCc7XG5cbmNvbnN0IHBhZ2VzOiBBcnJheTxSZWdpc3RlcmVkUGFnZURlZmluaXRpb24+ID0gW107XG5cbi8qKlxuICogVGhpcyB0YWtlcyBhIHBhZ2UncyByb3V0ZSBkZWZpbml0aW9ucyBhbmQgcmV0dXJucyBhIHNpbmdsZS1zcGFcbiAqIGFjdGl2aXR5Rm4gd2hpY2ggcmV0dXJucyB0cnVlIHdoZW4gdGhlIHBhZ2UgbWF0Y2hlcyB0aGUgY3VycmVudFxuICogcm91dGUgYW5kIGZhbHNlIGlmIGl0IGRvZXMgbm90LlxuICpcbiAqIEBwYXJhbSByb3V0ZSBBIHN0cmluZyBvciByZWdleHAgdGhhdCBtYXRjaGVzIHRoZSBsb2NhdGlvbiB3aGVuIHRoZVxuICogcGFnZSBzaG91bGQgYmUgZGlzcGxheWVkLCBhIGJvb2xlYW4gY29uc3RhbnQsIG9yIGFuIGFycmF5IG9mIHN1Y2hcbiAqIHN0cmluZ3MsIHJlZ2V4cHMsIGFuZCBib29sZWFuc1xuICogQHJldHVybnMgQW4gYWN0aXZpdHlGbiBzdWl0YWJsZSB0byB1c2UgZm9yIGEgc2luZ2xlLXNwYSBhcHBsaWNhdGlvblxuICovXG5mdW5jdGlvbiBnZXRBY3Rpdml0eUZuKHJvdXRlOiBSb3V0ZURlZmluaXRpb24gfCBBcnJheTxSb3V0ZURlZmluaXRpb24+KTogQWN0aXZpdHlGbiB7XG4gIGlmIChBcnJheS5pc0FycmF5KHJvdXRlKSkge1xuICAgIGNvbnN0IGFjdGl2YXRvcnMgPSByb3V0ZS5tYXAoZ2V0QWN0aXZpdHlGbik7XG4gICAgcmV0dXJuIChsb2NhdGlvbikgPT4gYWN0aXZhdG9ycy5zb21lKChhY3RpdmF0b3IpID0+IGFjdGl2YXRvcihsb2NhdGlvbikpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiByb3V0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGF0aFRvQWN0aXZlV2hlbih3aW5kb3cuZ2V0T3Blbm1yc1NwYUJhc2UoKSArIHJvdXRlKTtcbiAgfSBlbHNlIGlmIChyb3V0ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiAobG9jYXRpb24pID0+IHJvdXRlUmVnZXgocm91dGUsIGxvY2F0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKCkgPT4gcm91dGU7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3IgcGFnZXMsIHdlIGFsc28gc3VwcG9ydCB0aGUgYWN0aXZpdHlGbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBvbmxpbmUgLyBvZmZsaW5lXG4gKiBzdGF0dXMuIFRoaXMgd3JhcHMgYW4gZXhpc3Rpbmcgc2luZ2xlLXNwYSBhY3Rpdml0eUZuIGFuZCBvbmx5IGFsbG93cyB0aGUgcGFnZSB0b1xuICogYmUgcmVuZGVyZWQgaW4gdGhlIGFwcHJvcHJpYXRlIG1vZGUuXG4gKlxuICogQnkgZGVmYXVsdCwgd2UgYXNzdW1lIHRoYXQgYWxsIHBhZ2VzIHNob3VsZCBiZSByZW5kZXJlZCB3aGVuIG9ubGluZSwgYnV0IG9ubHkgcmVuZGVyZWRcbiAqIG9mZmxpbmUgaWYgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQgdG8gZG8gc28uXG4gKlxuICogQHBhcmFtIGFjdGl2aXR5Rm4gQSBzdGFuZGFyZCBzaW5nbGUtc3BhIGFjdGl2aXR5Rm4gc3VjaCBhcyB0aGF0IHJldHVybmVkIGJ5IHtAbGluayBnZXRBY3Rpdml0eUZuKCl9XG4gKiBAcGFyYW0gcGFnZURlZmluaXRpb24gVGhlIFJlZ2lzdGVyZWRQYWdlRGVmaW5pdGlvbiBvYmplY3QgZm9yIHRoaXMgcGFnZVxuICogQHJldHVybnMgQW4gYWN0aXZpdHlGbiBzdWl0YWJsZSB0byB1c2UgZm9yIGEgc2luZ2xlLXNwYSBhcHBsaWNhdGlvblxuICovXG5mdW5jdGlvbiB3cmFwUGFnZUFjdGl2aXR5Rm4oYWN0aXZpdHlGbjogQWN0aXZpdHlGbiwgeyBvbmxpbmUsIG9mZmxpbmUgfTogUmVnaXN0ZXJlZFBhZ2VEZWZpbml0aW9uKSB7XG4gIHJldHVybiAobG9jYXRpb246IExvY2F0aW9uKSA9PiB7XG4gICAgLy8gYmFzaWNhbGx5LCBpZiB0aGUgcGFnZSBzaG91bGQgb25seSB3b3JrIG9ubGluZSBhbmQgd2UncmUgb2ZmbGluZSBvciBpZiB0aGVcbiAgICAvLyBwYWdlIHNob3VsZCBvbmx5IHdvcmsgb2ZmbGluZSBhbmQgd2UncmUgb25saW5lLCBkZWZhdWx0aW5nIHRvIGFsd2F5cyByZW5kZXJpbmdcbiAgICAvLyB0aGUgcGFnZVxuICAgIGlmICghKChuYXZpZ2F0b3Iub25MaW5lICYmIChvbmxpbmUgPz8gdHJ1ZSkpIHx8ICghbmF2aWdhdG9yLm9uTGluZSAmJiAob2ZmbGluZSA/PyBmYWxzZSkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpdml0eUZuKGxvY2F0aW9uKTtcbiAgfTtcbn1cblxuY29uc3QgU1RBUlRVUF9GVU5DVElPTiA9ICdzdGFydHVwQXBwJztcbi8qKlxuICogQGludGVybmFsXG4gKlxuICogVXNlZCBpbnRlcm5hbGx5IHRvIHRyYWNrIHdoaWNoIGFwcHMgaGF2ZSBoYWQgdGhlaXIgYHN0YXJ0dXBBcHAoKWAgaW5pdGlhbGl6ZXIgY2FsbGVkXG4gKlxuICogVmFsdWVzIGFyZSBwcm9taXNlcyB0byBzdXBwb3J0IGFzeW5jaHJvbm91cyBsb2FkaW5nIG9mIHRoZSBzYW1lIGFwcCBtdWx0aXBsZSB0aW1lc1xuICovXG5jb25zdCBpbml0aWFsaXplZEFwcHMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTx1bmtub3duPj4oKTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBsb2FkZXIgZnVuY3Rpb24gc3VpdGFibGUgZm9yIHVzZSBpbiBlaXRoZXIgYSBzaW5nbGUtc3BhXG4gKiBhcHBsaWNhdGlvbiBvciBwYXJjZWwuXG4gKlxuICogVGhlIHJldHVybmVkIGZ1bmN0aW9uIGlzIGxhenkgYW5kIGVuc3VyZXMgdGhhdCB0aGUgYXBwcm9wcmlhdGUgbW9kdWxlIGlzIGxvYWRlZCxcbiAqIHRoYXQgdGhlIG1vZHVsZSdzIGBzdGFydHVwQXBwKClgIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGNvbXBvbmVudCBpcyBsb2FkZWQuIEl0XG4gKiB0aGVuIGNhbGxzIHRoZSBjb21wb25lbnQgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCByZXR1cm4gZWl0aGVyIGEgc2luZ2xlLXNwYVxuICoge0BsaW5rIExpZmVDeWNsZXN9IG9iamVjdCBvciBhIHtAbGluayBQcm9taXNlfSB0aGF0IHdpbGwgcmVzb2x2ZSB0byBzdWNoIGFuIG9iamVjdC5cbiAqXG4gKiBSZWFjdC1iYXNlZCBwYWdlcyBvciBleHRlbnNpb25zIHNob3VsZCBnZW5lcmFsbHkgdXNlIHRoZSBmcmFtZXdvcmsnc1xuICogYGdldEFzeW5jTGlmZWN5Y2xlKClgIG9yIGBnZXRTeW5jTGlmZWN5Y2xlKClgIGZ1bmN0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0TG9hZGVyKGFwcE5hbWU6IHN0cmluZywgY29tcG9uZW50OiBzdHJpbmcpOiAoKSA9PiBQcm9taXNlPExpZmVDeWNsZXM+IHtcbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnREeW5hbWljPFxuICAgICAgUmVjb3JkPEV4Y2x1ZGU8c3RyaW5nLCAnc3RhcnR1cEFwcCc+LCAoKSA9PiBMaWZlQ3ljbGVzIHwgUHJvbWlzZTxMaWZlQ3ljbGVzPj4gJiB7IHN0YXJ0dXBBcHA/OiAoKSA9PiB1bmtub3duIH1cbiAgICA+KGFwcE5hbWUpO1xuXG4gICAgaWYgKG1vZHVsZSAmJiBPYmplY3QuaGFzT3duKG1vZHVsZSwgY29tcG9uZW50KSAmJiB0eXBlb2YgbW9kdWxlW2NvbXBvbmVudF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICghKGFwcE5hbWUgaW4gaW5pdGlhbGl6ZWRBcHBzKSkge1xuICAgICAgICBhd2FpdCAoaW5pdGlhbGl6ZWRBcHBzW2FwcE5hbWVdID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGlmIChPYmplY3QuaGFzT3duKG1vZHVsZSwgU1RBUlRVUF9GVU5DVElPTikpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0dXAgPSBtb2R1bGVbU1RBUlRVUF9GVU5DVElPTl07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0YXJ0dXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdGFydHVwKCkpLnRoZW4ocmVzb2x2ZSkuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBpbml0aWFsaXplZEFwcHNbYXBwTmFtZV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobW9kdWxlW2NvbXBvbmVudF0oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtb2R1bGUgJiYgT2JqZWN0Lmhhc093bihtb2R1bGUsIGNvbXBvbmVudCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBUaGUgZXhwb3J0ICR7Y29tcG9uZW50fSBvZiB0aGUgYXBwICR7YXBwTmFtZX0gaXMgbm90IGEgZnVuY3Rpb25gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgVGhlIGFwcCAke2FwcE5hbWV9IGRvZXMgbm90IGRlZmluZSBhIGNvbXBvbmVudCBjYWxsZWQgJHtjb21wb25lbnR9LCB0aGlzIGNhbm5vdCBiZSBsb2FkZWRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZW1wdHlMaWZlY3ljbGU7XG4gIH07XG59XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbWFpbiBlbnRyeS1wb2ludCBmb3IgcmVnaXN0ZXJpbmcgYW4gYXBwIHdpdGggdGhlIGFwcCBzaGVsbC5cbiAqIEVhY2ggYXBwIGhhcyBhIG5hbWUgYW5kIHNob3VsZCBoYXZlIGEgYHJvdXRlcy5qc29uYCBmaWxlIHRoYXQgZGVmaW5lcyBpdCdzXG4gKiBhc3NvY2lhdGVkIHJvdXRlcy5cbiAqXG4gKiBAcGFyYW0gYXBwTmFtZSBUaGUgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24sIGUuZy4gYEBvcGVubXJzL2VzbS1teS1hcHBgXG4gKiBAcGFyYW0gcm91dGVzIEEgSmF2YXNjcmlwdCBvYmplY3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgYXBwJ3MgIHJvdXRlcy5qc29uYFxuICogZGVmaW5pdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQXBwKGFwcE5hbWU6IHN0cmluZywgcm91dGVzOiBPcGVubXJzQXBwUm91dGVzKSB7XG4gIGlmIChhcHBOYW1lICYmIHJvdXRlcyAmJiB0eXBlb2Ygcm91dGVzID09PSAnb2JqZWN0Jykge1xuICAgIHJlZ2lzdGVyTW9kdWxlV2l0aENvbmZpZ1N5c3RlbShhcHBOYW1lKTtcblxuICAgIGNvbnN0IGF2YWlsYWJsZUV4dGVuc2lvbnM6IEFycmF5PEV4dGVuc2lvbkRlZmluaXRpb24+ID0gcm91dGVzLmV4dGVuc2lvbnMgPz8gW107XG5cbiAgICByb3V0ZXMucGFnZXM/LmZvckVhY2goKHApID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgcCAmJlxuICAgICAgICB0eXBlb2YgcCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgT2JqZWN0Lmhhc093bihwLCAnY29tcG9uZW50JykgJiZcbiAgICAgICAgKE9iamVjdC5oYXNPd24ocCwgJ3JvdXRlJykgfHwgT2JqZWN0Lmhhc093bihwLCAncm91dGVSZWdleCcpIHx8IE9iamVjdC5oYXNPd24ocCwgJ3JvdXRlcycpKVxuICAgICAgKSB7XG4gICAgICAgIHBhZ2VzLnB1c2goe1xuICAgICAgICAgIC4uLnAsXG4gICAgICAgICAgb3JkZXI6IHAub3JkZXIgPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgICAgICAgYXBwTmFtZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYEEgcGFnZSBmb3IgJHthcHBOYW1lfSBjb3VsZCBub3QgYmUgcmVnaXN0ZXJlZCBhcyBpdCBkb2VzIG5vdCBhcHBlYXIgdG8gaGF2ZSB0aGUgcmVxdWlyZWQgcHJvcGVydGllc2AsXG4gICAgICAgICAgcCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGF2YWlsYWJsZUV4dGVuc2lvbnMuZm9yRWFjaCgoZXh0KSA9PiB7XG4gICAgICBpZiAoZXh0ICYmIHR5cGVvZiBleHQgPT09ICdvYmplY3QnICYmIE9iamVjdC5oYXNPd24oZXh0LCAnbmFtZScpICYmIE9iamVjdC5oYXNPd24oZXh0LCAnY29tcG9uZW50JykpIHtcbiAgICAgICAgdHJ5UmVnaXN0ZXJFeHRlbnNpb24oYXBwTmFtZSwgZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgQW4gZXh0ZW5zaW9uIGZvciAke2FwcE5hbWV9IGNvdWxkIG5vdCBiZSByZWdpc3RlcmVkIGFzIGl0IGRvZXMgbm90IGFwcGVhciB0byBoYXZlIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzYCxcbiAgICAgICAgICBleHQsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgYXBwIHNoZWxsIG9uY2UgYWxsIHJvdXRlIGVudHJpZXMgaGF2ZSBiZWVuIHByb2Nlc3NlZC5cbiAqIFRoaXMgYWN0dWFsbHkgcmVnaXN0ZXJzIHRoZSBwYWdlcyB3aXRoIHRoZSBhcHBsaWNhdGlvbi4gVGhpcyBmdW5jdGlvbiBpc1xuICogbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHBhZ2VzIGFyZSByZW5kZXJlZCBpbiB0aGUgRE9NIGFjY29yZGluZyB0byB0aGVpclxuICogb3JkZXIgZGVmaW5pdGlvbiwgZXNwZWNpYWxseSBiZWNhdXNlIGNlcnRhaW4gcGFnZXMgX211c3RfIGJlIGZpcnN0IGluIHRoZSBET00uXG4gKlxuICogRWFjaCBwYWdlIGlzIHJlbmRlcmVkIGludG8gYSBkaXYgd2l0aCBhbiBhcHByb3ByaWF0ZSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluaXNoUmVnaXN0ZXJpbmdBbGxBcHBzKCkge1xuICBwYWdlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgbGV0IHNvcnQgPSBhLm9yZGVyIC0gYi5vcmRlcjtcbiAgICBpZiAoc29ydCAhPSAwKSB7XG4gICAgICByZXR1cm4gc29ydDtcbiAgICB9XG4gICAgcmV0dXJuIGEuYXBwTmFtZS5sb2NhbGVDb21wYXJlKGIuYXBwTmFtZSwgJ2VuJyk7XG4gIH0pO1xuXG4gIC8vIENyZWF0ZSBhIGRpdiBmb3IgZWFjaCBwYWdlLiBUaGlzIGVuc3VyZXMgdGhlaXIgRE9NIG9yZGVyLlxuICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCBTaW5nbGUtU1BBIDUgd2lsbCBjcmVhdGUgdGhlIERPTSBlbGVtZW50IG9ubHkgb25jZVxuICAvLyB0aGUgcGFnZSBiZWNvbWVzIGFjdGl2ZSwgd2hpY2ggbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBndWFyYW50ZWUgb3JkZXIuXG4gIGxldCBhcHBJbmRpY2VzID0gbmV3IE1hcCgpO1xuICBmb3IgKGxldCBwYWdlIG9mIHBhZ2VzKSB7XG4gICAgaWYgKCFhcHBJbmRpY2VzLmhhcyhwYWdlLmFwcE5hbWUpKSB7XG4gICAgICBhcHBJbmRpY2VzLnNldChwYWdlLmFwcE5hbWUsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBJbmRpY2VzLnNldChwYWdlLmFwcE5hbWUsIGFwcEluZGljZXMuZ2V0KHBhZ2UuYXBwTmFtZSkgKyAxKTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSBhcHBJbmRpY2VzLmdldChwYWdlLmFwcE5hbWUpO1xuXG4gICAgY29uc3QgbmFtZSA9IGAke3BhZ2UuYXBwTmFtZX0tcGFnZS0ke2luZGV4fWA7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2LmlkID0gYHNpbmdsZS1zcGEtYXBwbGljYXRpb246JHtuYW1lfWA7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xuICAgIHRyeVJlZ2lzdGVyUGFnZShuYW1lLCBwYWdlKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgY29udmVydHMgZWFjaCBwYWdlIGRlZmluaXRpb24gaW50byBhIHNpbmdsZS1zcGEgYXBwbGljYXRpb25cbiAqIGlmIHRoYXQncyBwb3NzaWJsZS4gQWZ0ZXIgdGhpcyBwb2ludCwgcGFnZXMgYXJlIHJlbmRlcmVkIHVzaW5nIHNpbmdsZS1zcGEnc1xuICogcm91dGluZyBsb2dpYy5cbiAqXG4gKiBAcGFyYW0gYXBwTmFtZSBUaGUgbmFtZSBvZiB0aGUgYXBwIGNvbnRhaW5pbmcgdGhpcyBwYWdlXG4gKiBAcGFyYW0gcGFnZSBBIEphdmFzY3JpcHQgb2JqZWN0IHRoYXQgZGVzY3JpYmVzIHRoZSBwYWdlIGRlZmludGlvbiwgZGVyaXZlZCBmcm9tIGByb3V0ZXMuanNvbmBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyeVJlZ2lzdGVyUGFnZShhcHBOYW1lOiBzdHJpbmcsIHBhZ2U6IFJlZ2lzdGVyZWRQYWdlRGVmaW5pdGlvbikge1xuICBjb25zdCByb3V0ZSA9XG4gICAgdHlwZW9mIHBhZ2Uucm91dGUgIT09ICd1bmRlZmluZWQnXG4gICAgICA/IHBhZ2Uucm91dGVcbiAgICAgIDogdHlwZW9mIHBhZ2Uucm91dGVSZWdleCAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyBuZXcgUmVnRXhwKHBhZ2Uucm91dGVSZWdleClcbiAgICAgICAgOiBmYWxzZTtcblxuICBpZiAocm91dGUgPT09IGZhbHNlKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYEEgcmVnaXN0ZXJlZCBwYWdlIGRlZmluaXRpb24gaXMgbWlzc2luZyBhIHJvdXRlIGFuZCB0aHVzIGNhbm5vdCBiZSByZWdpc3RlcmVkLlxuVG8gZml4IHRoaXMsIGVuc3VyZSB0aGF0IHlvdSBkZWZpbmUgdGhlIFwicm91dGVcIiAob3IgYWx0ZXJuYXRpdmVseSB0aGUgXCJyb3V0ZVJlZ2V4XCIpIGZpZWxkIGluc2lkZSB0aGUgZXh0ZW5zaW9uIGRlZmluaXRpb24uYCxcbiAgICAgIGFwcE5hbWUsXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXBhZ2UuY29tcG9uZW50KSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYEEgcmVnaXN0ZXJlZCBwYWdlIGRlZmluaXRpb24gaXMgbWlzc2luZyBhIGNvbXBvbmVudCBhbmQgdGh1cyBjYW5ub3QgYmUgcmVnaXN0ZXJlZC5cblRvIGZpeCB0aGlzLCBlbnN1cmUgdGhhdCB5b3UgZGVmaW5lIHRoZSBcImNvbXBvbmVudFwiIGZpZWxkIGluc2lkZSB0aGUgcGFnZSBkZWZpbml0aW9uLmAsXG4gICAgICBhcHBOYW1lLFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWN0aXZpdHlGbiA9IHdyYXBQYWdlQWN0aXZpdHlGbihnZXRBY3Rpdml0eUZuKHJvdXRlKSwgcGFnZSk7XG4gIGNvbnN0IGxvYWRlciA9IGdldExvYWRlcihwYWdlLmFwcE5hbWUsIHBhZ2UuY29tcG9uZW50KTtcbiAgcmVnaXN0ZXJBcHBsaWNhdGlvbihhcHBOYW1lLCBsb2FkZXIsIGFjdGl2aXR5Rm4pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgcmVnaXN0ZXJzIGFuIGV4dGVuc2lvbiBkZWZpbml0aW9uIHdpdGggdGhlIGZyYW1ld29yayBhbmQgd2lsbFxuICogYXR0YWNoIHRoZSBleHRlbnNpb24gdG8gYW55IGNvbmZpZ3VyZWQgc2xvdHMuXG4gKlxuICogQHBhcmFtIGFwcE5hbWUgVGhlIG5hbWUgb2YgdGhlIGFwcCBjb250YWluaW5nIHRoaXMgcGFnZVxuICogQHBhcmFtIGV4dGVuc2lvbiBBIEphdmFzY3JpcHQgb2JqZWN0IHRoYXQgZGVzY3JpYmVzIHRoZSBleHRlbnNpb24gZGVmaW50aW9uLCBkZXJpdmVkIGZyb20gYHJvdXRlcy5qc29uYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ5UmVnaXN0ZXJFeHRlbnNpb24oYXBwTmFtZTogc3RyaW5nLCBleHRlbnNpb246IEV4dGVuc2lvbkRlZmluaXRpb24pIHtcbiAgY29uc3QgbmFtZSA9IGV4dGVuc2lvbi5uYW1lO1xuICBpZiAoIW5hbWUpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgYEFuIGV4dGVuc2lvbiBkZWZpbml0aW9uIGluICR7YXBwTmFtZX0gaXMgbWlzc2luZyBhbiBuYW1lIGFuZCB0aHVzIGNhbm5vdCBiZVxucmVnaXN0ZXJlZC4gVG8gZml4IHRoaXMsIGVuc3VyZSB0aGF0IHlvdSBkZWZpbmUgdGhlIFwibmFtZVwiIGZpZWxkIGluc2lkZSB0aGVcbmV4dGVuc2lvbiBkZWZpbml0aW9uLmAsXG4gICAgICBleHRlbnNpb24sXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZXh0ZW5zaW9uLnNsb3RzICYmIGV4dGVuc2lvbi5zbG90KSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYFRoZSBleHRlbnNpb24gJHtuYW1lfSBmcm9tICR7YXBwTmFtZX0gZGVjbGFyZXMgYm90aCBhICdzbG90cycgcHJvcGVydHkgYW5kXG5hICdzbG90JyBwcm9wZXJ0eS4gT25seSB0aGUgJ3Nsb3RzJyBwcm9wZXJ0eSB3aWxsIGJlIGhvbm9yZWQuYCxcbiAgICApO1xuICB9XG4gIGNvbnN0IHNsb3RzID0gZXh0ZW5zaW9uLnNsb3RzID8gZXh0ZW5zaW9uLnNsb3RzIDogZXh0ZW5zaW9uLnNsb3QgPyBbZXh0ZW5zaW9uLnNsb3RdIDogW107XG5cbiAgaWYgKCFleHRlbnNpb24uY29tcG9uZW50ICYmICFleHRlbnNpb24ubG9hZCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgVGhlIGV4dGVuc2lvbiAke25hbWV9IGZyb20gJHthcHBOYW1lfSBpcyBtaXNzaW5nIGEgJ2NvbXBvbmVudCcgZW50cnkgYW5kIHRodXMgY2Fubm90IGJlIHJlZ2lzdGVyZWQuXG5UbyBmaXggdGhpcywgZW5zdXJlIHRoYXQgeW91IGRlZmluZSBhICdjb21wb25lbnQnIGZpZWxkIGluc2lkZSB0aGUgZXh0ZW5zaW9uIGRlZmluaXRpb24uYCxcbiAgICAgIGV4dGVuc2lvbixcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBsb2FkZXI6IEV4dGVuc2lvblJlZ2lzdHJhdGlvblsnbG9hZCddIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBpZiAoZXh0ZW5zaW9uLmNvbXBvbmVudCkge1xuICAgIGxvYWRlciA9IGdldExvYWRlcihhcHBOYW1lLCBleHRlbnNpb24uY29tcG9uZW50KTtcbiAgfSBlbHNlIGlmIChleHRlbnNpb24ubG9hZCkge1xuICAgIGlmICh0eXBlb2YgZXh0ZW5zaW9uLmxvYWQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBUaGUgZXh0ZW5zaW9uICR7bmFtZX0gZnJvbSAke2FwcE5hbWV9IGRlY2xhcmVzIGEgJ2xvYWQnIHByb3BlcnR5IHRoYXQgaXMgbm90IGEgZnVuY3Rpb24uIFRoaXMgaXMgbm90XG5zdXBwb3J0ZWQsIHNvIHRoZSBleHRlbnNpb24gd2lsbCBub3QgYmUgbG9hZGVkLmAsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2FkZXIgPSBleHRlbnNpb24ubG9hZDtcbiAgfVxuXG4gIGlmIChsb2FkZXIpIHtcbiAgICByZWdpc3RlckV4dGVuc2lvbih7XG4gICAgICBuYW1lLFxuICAgICAgbG9hZDogbG9hZGVyLFxuICAgICAgbWV0YTogZXh0ZW5zaW9uLm1ldGEgfHwge30sXG4gICAgICBvcmRlcjogZXh0ZW5zaW9uLm9yZGVyLFxuICAgICAgbW9kdWxlTmFtZTogYXBwTmFtZSxcbiAgICAgIHByaXZpbGVnZXM6IGV4dGVuc2lvbi5wcml2aWxlZ2VzLFxuICAgICAgb25saW5lOiBleHRlbnNpb24ub25saW5lID8/IHRydWUsXG4gICAgICBvZmZsaW5lOiBleHRlbnNpb24ub2ZmbGluZSA/PyBmYWxzZSxcbiAgICAgIGZlYXR1cmVGbGFnOiBleHRlbnNpb24uZmVhdHVyZUZsYWcsXG4gICAgfSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHNsb3Qgb2Ygc2xvdHMpIHtcbiAgICBhdHRhY2goc2xvdCwgbmFtZSk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJhdHRhY2giLCJyZWdpc3RlckV4dGVuc2lvbiIsImltcG9ydER5bmFtaWMiLCJwYXRoVG9BY3RpdmVXaGVuIiwicmVnaXN0ZXJBcHBsaWNhdGlvbiIsImVtcHR5TGlmZWN5Y2xlIiwicm91dGVSZWdleCIsInJlZ2lzdGVyTW9kdWxlV2l0aENvbmZpZ1N5c3RlbSIsInBhZ2VzIiwiZ2V0QWN0aXZpdHlGbiIsInJvdXRlIiwiQXJyYXkiLCJpc0FycmF5IiwiYWN0aXZhdG9ycyIsIm1hcCIsImxvY2F0aW9uIiwic29tZSIsImFjdGl2YXRvciIsIndpbmRvdyIsImdldE9wZW5tcnNTcGFCYXNlIiwiUmVnRXhwIiwid3JhcFBhZ2VBY3Rpdml0eUZuIiwiYWN0aXZpdHlGbiIsIm9ubGluZSIsIm9mZmxpbmUiLCJuYXZpZ2F0b3IiLCJvbkxpbmUiLCJTVEFSVFVQX0ZVTkNUSU9OIiwiaW5pdGlhbGl6ZWRBcHBzIiwiTWFwIiwiZ2V0TG9hZGVyIiwiYXBwTmFtZSIsImNvbXBvbmVudCIsIm1vZHVsZSIsIk9iamVjdCIsImhhc093biIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwic3RhcnR1cCIsInRoZW4iLCJjYXRjaCIsImNvbnNvbGUiLCJ3YXJuIiwicmVnaXN0ZXJBcHAiLCJyb3V0ZXMiLCJhdmFpbGFibGVFeHRlbnNpb25zIiwiZXh0ZW5zaW9ucyIsImZvckVhY2giLCJwIiwicHVzaCIsIm9yZGVyIiwiTnVtYmVyIiwiTUFYX1NBRkVfSU5URUdFUiIsImV4dCIsInRyeVJlZ2lzdGVyRXh0ZW5zaW9uIiwiZmluaXNoUmVnaXN0ZXJpbmdBbGxBcHBzIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsImFwcEluZGljZXMiLCJwYWdlIiwiaGFzIiwic2V0IiwiZ2V0IiwiaW5kZXgiLCJuYW1lIiwiZGl2IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJ0cnlSZWdpc3RlclBhZ2UiLCJsb2FkZXIiLCJleHRlbnNpb24iLCJlcnJvciIsInNsb3RzIiwic2xvdCIsImxvYWQiLCJ1bmRlZmluZWQiLCJtZXRhIiwibW9kdWxlTmFtZSIsInByaXZpbGVnZXMiLCJmZWF0dXJlRmxhZyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/apps.ts\n");
|
|
19
19
|
|
|
20
20
|
/***/ }),
|
|
21
21
|
|
|
@@ -35,7 +35,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
35
35
|
\***********************/
|
|
36
36
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
37
37
|
|
|
38
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ setupI18n: () => (/* binding */ setupI18n)\n/* harmony export */ });\n/* harmony import */ var i18next__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18next */ \"webpack/sharing/consume/default/i18next/i18next\");\n/* harmony import */ var i18next__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(i18next__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var i18next_browser_languagedetector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18next-browser-languagedetector */ \"../../../node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-i18next */ \"webpack/sharing/consume/default/react-i18next/react-i18next\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_i18next__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lodash_es_merge__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es/merge */ \"../../../node_modules/lodash-es/merge.js\");\n/* harmony import */ var _openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @openmrs/esm-framework/src/internal */ \"webpack/sharing/consume/default/@openmrs/esm-framework/src/internal/@openmrs/esm-framework/src/internal\");\n/* harmony import */ var _openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_3__);\nfunction _array_like_to_array(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 _array_with_holes(arr) {\n if (Array.isArray(arr)) return arr;\n}\nfunction _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n}\nfunction _iterable_to_array_limit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n try {\n for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally{\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally{\n if (_d) throw _e;\n }\n }\n return _arr;\n}\nfunction _non_iterable_rest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _sliced_to_array(arr, i) {\n return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(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(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\n\n\n\n\n\nfunction setupI18n() {\n window.i18next = (i18next__WEBPACK_IMPORTED_MODULE_0___default()) || i18next__WEBPACK_IMPORTED_MODULE_0__;\n var languageChangeObserver = new MutationObserver(function() {\n var reDetect = undefined;\n window.i18next.changeLanguage(reDetect).catch(function(e) {\n return console.error(\"i18next failed to re-detect language\", e);\n });\n });\n languageChangeObserver.observe(document.documentElement, {\n attributeFilter: [\n \"lang\"\n ],\n attributes: true\n });\n window.i18next.on(\"languageChanged\", function() {\n document.documentElement.setAttribute(\"dir\", window.i18next.dir());\n });\n return window.i18next.use(i18next_browser_languagedetector__WEBPACK_IMPORTED_MODULE_1__[\"default\"]).use({\n type: \"backend\",\n init: function init() {},\n read: function read(language, namespace, callback) {\n if (namespace === \"translation\") {\n callback(Error(\"can't handle translation namespace\"), null);\n } else if (namespace === undefined || language === undefined) {\n callback(Error(), null);\n } else if (namespace === \"@openmrs/esm-app-shell\") {\n // currently, we don't have translations in the app shell\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_3__.getConfigInternal)(namespace).then(function(config) {\n var translations = {};\n if (config && \"Translation overrides\" in config) {\n var overrides = config[\"Translation overrides\"];\n if (language in overrides) {\n translations = overrides[language];\n }\n }\n callback(null, translations);\n }).catch(function(err) {\n callback(err, null);\n });\n } else {\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_3__.importDynamic)(namespace).then(function(module) {\n return Promise.all([\n getImportPromise(module, namespace, language),\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_3__.getConfigInternal)(namespace)\n ]);\n }).then(function(param) {\n var _param = _sliced_to_array(param, 2), json = _param[0], config = _param[1];\n var translations = json !== null && json !== void 0 ? json : {};\n if (config && \"Translation overrides\" in config) {\n var overrides = config[\"Translation overrides\"];\n if (language in overrides) {\n translations = (0,lodash_es_merge__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(translations, overrides[language]);\n }\n }\n callback(null, translations);\n }).catch(function(err) {\n callback(err, null);\n });\n }\n }\n }).use(react_i18next__WEBPACK_IMPORTED_MODULE_2__.initReactI18next).init({\n detection: {\n order: [\n \"querystring\",\n \"htmlTag\",\n \"localStorage\",\n \"navigator\"\n ],\n lookupQuerystring: \"lang\"\n },\n fallbackLng: \"en\"\n });\n}\nfunction getImportPromise(module, namespace, language) {\n if (typeof module.importTranslation !== \"function\") {\n throw Error(\"Module \".concat(namespace, \" does not export an importTranslation function\"));\n }\n var importPromise = module.importTranslation(\"./\".concat(language, \".json\"));\n if (!_instanceof(importPromise, Promise)) {\n throw Error(\"Module \".concat(namespace, \" exports an importTranslation function that does not return a promise. Did you forget to set require.context mode to 'lazy'?\"));\n }\n return importPromise;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QjtRQUNyQjtRQUNBQyxhQUFhO0lBQ2Y7QUFDSixDQUFDO0FBRUQsU0FBU0wsaUJBQ1BILE1BRUMsRUFDRFIsU0FBaUIsRUFDakJELFFBQWdCLEVBQ2hCO0lBQ0EsSUFBSSxPQUFPUyxPQUFPUyxpQkFBaUIsS0FBSyxZQUFZO1FBQ2xELE1BQU1mLE1BQU0sVUFBb0IsT0FBVkYsV0FBVSxtREFBaUQ7SUFDbkYsQ0FBQztJQUVELElBQU1rQixnQkFBZ0JWLE9BQU9TLGlCQUFpQixDQUFDLEtBQWMsT0FBVGxCLFVBQVM7SUFFN0QsSUFBSSxDQUFFbUIsWUFBQUEsZUFBeUJULFVBQVU7UUFDdkMsTUFBTVAsTUFDSixVQUFvQixPQUFWRixXQUFVLGlJQUNwQjtJQUNKLENBQUM7SUFFRCxPQUFPa0I7QUFDVCIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi9zcmMvbG9jYWxlLnRzPzVjMWMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaTE4bmV4dCBmcm9tICdpMThuZXh0JztcbmltcG9ydCBMYW5ndWFnZURldGVjdG9yIGZyb20gJ2kxOG5leHQtYnJvd3Nlci1sYW5ndWFnZWRldGVjdG9yJztcbmltcG9ydCB7IGluaXRSZWFjdEkxOG5leHQgfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCBtZXJnZSBmcm9tICdsb2Rhc2gtZXMvbWVyZ2UnO1xuaW1wb3J0IHsgZ2V0Q29uZmlnSW50ZXJuYWwsIGltcG9ydER5bmFtaWMgfSBmcm9tICdAb3Blbm1ycy9lc20tZnJhbWV3b3JrL3NyYy9pbnRlcm5hbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEkxOG4oKSB7XG4gIHdpbmRvdy5pMThuZXh0ID0gaTE4bmV4dC5kZWZhdWx0IHx8IGkxOG5leHQ7XG5cbiAgY29uc3QgbGFuZ3VhZ2VDaGFuZ2VPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcbiAgICBjb25zdCByZURldGVjdDogYW55ID0gdW5kZWZpbmVkO1xuICAgIHdpbmRvdy5pMThuZXh0LmNoYW5nZUxhbmd1YWdlKHJlRGV0ZWN0KS5jYXRjaCgoZSkgPT4gY29uc29sZS5lcnJvcignaTE4bmV4dCBmYWlsZWQgdG8gcmUtZGV0ZWN0IGxhbmd1YWdlJywgZSkpO1xuICB9KTtcblxuICBsYW5ndWFnZUNoYW5nZU9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB7XG4gICAgYXR0cmlidXRlRmlsdGVyOiBbJ2xhbmcnXSxcbiAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICB9KTtcblxuICB3aW5kb3cuaTE4bmV4dC5vbignbGFuZ3VhZ2VDaGFuZ2VkJywgKCkgPT4ge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RpcicsIHdpbmRvdy5pMThuZXh0LmRpcigpKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHdpbmRvdy5pMThuZXh0XG4gICAgLnVzZShMYW5ndWFnZURldGVjdG9yKVxuICAgIC51c2U8aTE4bmV4dC5CYWNrZW5kTW9kdWxlPih7XG4gICAgICB0eXBlOiAnYmFja2VuZCcsXG4gICAgICBpbml0KCkge30sXG4gICAgICByZWFkKGxhbmd1YWdlLCBuYW1lc3BhY2UsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChuYW1lc3BhY2UgPT09ICd0cmFuc2xhdGlvbicpIHtcbiAgICAgICAgICBjYWxsYmFjayhFcnJvcihcImNhbid0IGhhbmRsZSB0cmFuc2xhdGlvbiBuYW1lc3BhY2VcIiksIG51bGwpO1xuICAgICAgICB9IGVsc2UgaWYgKG5hbWVzcGFjZSA9PT0gdW5kZWZpbmVkIHx8IGxhbmd1YWdlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjYWxsYmFjayhFcnJvcigpLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIGlmIChuYW1lc3BhY2UgPT09ICdAb3Blbm1ycy9lc20tYXBwLXNoZWxsJykge1xuICAgICAgICAgIC8vIGN1cnJlbnRseSwgd2UgZG9uJ3QgaGF2ZSB0cmFuc2xhdGlvbnMgaW4gdGhlIGFwcCBzaGVsbFxuICAgICAgICAgIGdldENvbmZpZ0ludGVybmFsKG5hbWVzcGFjZSlcbiAgICAgICAgICAgIC50aGVuKChjb25maWcpID0+IHtcbiAgICAgICAgICAgICAgbGV0IHRyYW5zbGF0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICBpZiAoY29uZmlnICYmICdUcmFuc2xhdGlvbiBvdmVycmlkZXMnIGluIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJyaWRlcyA9IGNvbmZpZ1snVHJhbnNsYXRpb24gb3ZlcnJpZGVzJ107XG4gICAgICAgICAgICAgICAgaWYgKGxhbmd1YWdlIGluIG92ZXJyaWRlcykge1xuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zID0gb3ZlcnJpZGVzW2xhbmd1YWdlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB0cmFuc2xhdGlvbnMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1wb3J0RHluYW1pYyhuYW1lc3BhY2UpXG4gICAgICAgICAgICAudGhlbigobW9kdWxlKSA9PlxuICAgICAgICAgICAgICBQcm9taXNlLmFsbChbZ2V0SW1wb3J0UHJvbWlzZShtb2R1bGUsIG5hbWVzcGFjZSwgbGFuZ3VhZ2UpLCBnZXRDb25maWdJbnRlcm5hbChuYW1lc3BhY2UpXSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAudGhlbigoW2pzb24sIGNvbmZpZ10pID0+IHtcbiAgICAgICAgICAgICAgbGV0IHRyYW5zbGF0aW9ucyA9IGpzb24gPz8ge307XG5cbiAgICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiAnVHJhbnNsYXRpb24gb3ZlcnJpZGVzJyBpbiBjb25maWcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVycmlkZXMgPSBjb25maWdbJ1RyYW5zbGF0aW9uIG92ZXJyaWRlcyddO1xuICAgICAgICAgICAgICAgIGlmIChsYW5ndWFnZSBpbiBvdmVycmlkZXMpIHtcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9ucyA9IG1lcmdlKHRyYW5zbGF0aW9ucywgb3ZlcnJpZGVzW2xhbmd1YWdlXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgdHJhbnNsYXRpb25zKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pXG4gICAgLnVzZShpbml0UmVhY3RJMThuZXh0KVxuICAgIC5pbml0KHtcbiAgICAgIGRldGVjdGlvbjoge1xuICAgICAgICBvcmRlcjogWydxdWVyeXN0cmluZycsICdodG1sVGFnJywgJ2xvY2FsU3RvcmFnZScsICduYXZpZ2F0b3InXSxcbiAgICAgICAgbG9va3VwUXVlcnlzdHJpbmc6ICdsYW5nJyxcbiAgICAgIH0sXG4gICAgICBmYWxsYmFja0xuZzogJ2VuJyxcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0SW1wb3J0UHJvbWlzZShcbiAgbW9kdWxlOiB7XG4gICAgaW1wb3J0VHJhbnNsYXRpb246IChsYW5ndWFnZTogc3RyaW5nKSA9PiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuICB9LFxuICBuYW1lc3BhY2U6IHN0cmluZyxcbiAgbGFuZ3VhZ2U6IHN0cmluZyxcbikge1xuICBpZiAodHlwZW9mIG1vZHVsZS5pbXBvcnRUcmFuc2xhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IEVycm9yKGBNb2R1bGUgJHtuYW1lc3BhY2V9IGRvZXMgbm90IGV4cG9ydCBhbiBpbXBvcnRUcmFuc2xhdGlvbiBmdW5jdGlvbmApO1xuICB9XG5cbiAgY29uc3QgaW1wb3J0UHJvbWlzZSA9IG1vZHVsZS5pbXBvcnRUcmFuc2xhdGlvbihgLi8ke2xhbmd1YWdlfS5qc29uYCk7XG5cbiAgaWYgKCEoaW1wb3J0UHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBgTW9kdWxlICR7bmFtZXNwYWNlfSBleHBvcnRzIGFuIGltcG9ydFRyYW5zbGF0aW9uIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgcmV0dXJuIGEgcHJvbWlzZS4gRGlkIHlvdSBmb3JnZXQgdG8gc2V0IHJlcXVpcmUuY29udGV4dCBtb2RlIHRvICdsYXp5Jz9gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gaW1wb3J0UHJvbWlzZTtcbn1cbiJdLCJuYW1lcyI6WyJpMThuZXh0IiwiTGFuZ3VhZ2VEZXRlY3RvciIsImluaXRSZWFjdEkxOG5leHQiLCJtZXJnZSIsImdldENvbmZpZ0ludGVybmFsIiwiaW1wb3J0RHluYW1pYyIsInNldHVwSTE4biIsIndpbmRvdyIsImRlZmF1bHQiLCJsYW5ndWFnZUNoYW5nZU9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsInJlRGV0ZWN0IiwidW5kZWZpbmVkIiwiY2hhbmdlTGFuZ3VhZ2UiLCJjYXRjaCIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJvYnNlcnZlIiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJhdHRyaWJ1dGVGaWx0ZXIiLCJhdHRyaWJ1dGVzIiwib24iLCJzZXRBdHRyaWJ1dGUiLCJkaXIiLCJ1c2UiLCJ0eXBlIiwiaW5pdCIsInJlYWQiLCJsYW5ndWFnZSIsIm5hbWVzcGFjZSIsImNhbGxiYWNrIiwiRXJyb3IiLCJ0aGVuIiwiY29uZmlnIiwidHJhbnNsYXRpb25zIiwib3ZlcnJpZGVzIiwiZXJyIiwibW9kdWxlIiwiUHJvbWlzZSIsImFsbCIsImdldEltcG9ydFByb21pc2UiLCJqc29uIiwiZGV0ZWN0aW9uIiwib3JkZXIiLCJsb29rdXBRdWVyeXN0cmluZyIsImZhbGxiYWNrTG5nIiwiaW1wb3J0VHJhbnNsYXRpb24iLCJpbXBvcnRQcm9taXNlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/locale.ts\n");
|
|
38
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ setupI18n: () => (/* binding */ setupI18n)\n/* harmony export */ });\n/* harmony import */ var i18next__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! i18next */ \"webpack/sharing/consume/default/i18next/i18next\");\n/* harmony import */ var i18next__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(i18next__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var i18next_browser_languagedetector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18next-browser-languagedetector */ \"../../../node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-i18next */ \"webpack/sharing/consume/default/react-i18next/react-i18next\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_i18next__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lodash_es_merge__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es/merge */ \"../../../node_modules/lodash-es/merge.js\");\n/* harmony import */ var _openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @openmrs/esm-framework/src/internal */ \"webpack/sharing/consume/default/@openmrs/esm-framework/src/internal/@openmrs/esm-framework/src/internal\");\n/* harmony import */ var _openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_3__);\nfunction _array_like_to_array(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 _array_with_holes(arr) {\n if (Array.isArray(arr)) return arr;\n}\nfunction _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n}\nfunction _iterable_to_array_limit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n try {\n for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally{\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally{\n if (_d) throw _e;\n }\n }\n return _arr;\n}\nfunction _non_iterable_rest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _sliced_to_array(arr, i) {\n return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(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(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\n\n\n\n\n\nfunction setupI18n() {\n window.i18next = (i18next__WEBPACK_IMPORTED_MODULE_0___default()) || i18next__WEBPACK_IMPORTED_MODULE_0__;\n var languageChangeObserver = new MutationObserver(function() {\n var reDetect = undefined;\n window.i18next.changeLanguage(reDetect).catch(function(e) {\n return console.error(\"i18next failed to re-detect language\", e);\n });\n });\n languageChangeObserver.observe(document.documentElement, {\n attributeFilter: [\n \"lang\"\n ],\n attributes: true\n });\n window.i18next.on(\"languageChanged\", function() {\n document.documentElement.setAttribute(\"dir\", window.i18next.dir());\n });\n return window.i18next.use(i18next_browser_languagedetector__WEBPACK_IMPORTED_MODULE_1__[\"default\"]).use({\n type: \"backend\",\n init: function init() {},\n read: function read(language, namespace, callback) {\n if (namespace === \"translation\") {\n callback(Error(\"can't handle translation namespace\"), null);\n } else if (namespace === undefined || language === undefined) {\n callback(Error(), null);\n } else if (namespace === \"@openmrs/esm-app-shell\") {\n // currently, we don't have translations in the app shell\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_3__.getTranslationOverrides)(namespace).then(function(overrides) {\n var translations = {};\n if (language in overrides) {\n translations = overrides[language];\n }\n callback(null, translations);\n }).catch(function(err) {\n callback(err, null);\n });\n } else {\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_3__.importDynamic)(namespace).then(function(module) {\n return Promise.all([\n getImportPromise(module, namespace, language),\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_3__.getTranslationOverrides)(namespace)\n ]);\n }).then(function(param) {\n var _param = _sliced_to_array(param, 2), json = _param[0], overrides = _param[1];\n var translations = json !== null && json !== void 0 ? json : {};\n if (language in overrides) {\n translations = (0,lodash_es_merge__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(translations, overrides[language]);\n }\n callback(null, translations);\n }).catch(function(err) {\n callback(err, null);\n });\n }\n }\n }).use(react_i18next__WEBPACK_IMPORTED_MODULE_2__.initReactI18next).init({\n detection: {\n order: [\n \"querystring\",\n \"htmlTag\",\n \"localStorage\",\n \"navigator\"\n ],\n lookupQuerystring: \"lang\"\n },\n fallbackLng: \"en\"\n });\n}\nfunction getImportPromise(module, namespace, language) {\n if (typeof module.importTranslation !== \"function\") {\n throw Error(\"Module \".concat(namespace, \" does not export an importTranslation function\"));\n }\n var importPromise = module.importTranslation(\"./\".concat(language, \".json\"));\n if (!_instanceof(importPromise, Promise)) {\n throw Error(\"Module \".concat(namespace, \" exports an importTranslation function that does not return a promise. Did you forget to set require.context mode to 'lazy'?\"));\n }\n return importPromise;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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V0FBVSxtREFBaUQ7SUFDbkYsQ0FBQztJQUVELElBQU1pQixnQkFBZ0JWLE9BQU9TLGlCQUFpQixDQUFDLEtBQWMsT0FBVGpCLFVBQVM7SUFFN0QsSUFBSSxDQUFFa0IsWUFBQUEsZUFBeUJULFVBQVU7UUFDdkMsTUFBTU4sTUFDSixVQUFvQixPQUFWRixXQUFVLGlJQUNwQjtJQUNKLENBQUM7SUFFRCxPQUFPaUI7QUFDVCIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi9zcmMvbG9jYWxlLnRzPzVjMWMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaTE4bmV4dCBmcm9tICdpMThuZXh0JztcbmltcG9ydCBMYW5ndWFnZURldGVjdG9yIGZyb20gJ2kxOG5leHQtYnJvd3Nlci1sYW5ndWFnZWRldGVjdG9yJztcbmltcG9ydCB7IGluaXRSZWFjdEkxOG5leHQgfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCBtZXJnZSBmcm9tICdsb2Rhc2gtZXMvbWVyZ2UnO1xuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb25PdmVycmlkZXMsIGltcG9ydER5bmFtaWMgfSBmcm9tICdAb3Blbm1ycy9lc20tZnJhbWV3b3JrL3NyYy9pbnRlcm5hbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEkxOG4oKSB7XG4gIHdpbmRvdy5pMThuZXh0ID0gaTE4bmV4dC5kZWZhdWx0IHx8IGkxOG5leHQ7XG5cbiAgY29uc3QgbGFuZ3VhZ2VDaGFuZ2VPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcbiAgICBjb25zdCByZURldGVjdDogYW55ID0gdW5kZWZpbmVkO1xuICAgIHdpbmRvdy5pMThuZXh0LmNoYW5nZUxhbmd1YWdlKHJlRGV0ZWN0KS5jYXRjaCgoZSkgPT4gY29uc29sZS5lcnJvcignaTE4bmV4dCBmYWlsZWQgdG8gcmUtZGV0ZWN0IGxhbmd1YWdlJywgZSkpO1xuICB9KTtcblxuICBsYW5ndWFnZUNoYW5nZU9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB7XG4gICAgYXR0cmlidXRlRmlsdGVyOiBbJ2xhbmcnXSxcbiAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICB9KTtcblxuICB3aW5kb3cuaTE4bmV4dC5vbignbGFuZ3VhZ2VDaGFuZ2VkJywgKCkgPT4ge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RpcicsIHdpbmRvdy5pMThuZXh0LmRpcigpKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHdpbmRvdy5pMThuZXh0XG4gICAgLnVzZShMYW5ndWFnZURldGVjdG9yKVxuICAgIC51c2U8aTE4bmV4dC5CYWNrZW5kTW9kdWxlPih7XG4gICAgICB0eXBlOiAnYmFja2VuZCcsXG4gICAgICBpbml0KCkge30sXG4gICAgICByZWFkKGxhbmd1YWdlLCBuYW1lc3BhY2UsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChuYW1lc3BhY2UgPT09ICd0cmFuc2xhdGlvbicpIHtcbiAgICAgICAgICBjYWxsYmFjayhFcnJvcihcImNhbid0IGhhbmRsZSB0cmFuc2xhdGlvbiBuYW1lc3BhY2VcIiksIG51bGwpO1xuICAgICAgICB9IGVsc2UgaWYgKG5hbWVzcGFjZSA9PT0gdW5kZWZpbmVkIHx8IGxhbmd1YWdlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjYWxsYmFjayhFcnJvcigpLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIGlmIChuYW1lc3BhY2UgPT09ICdAb3Blbm1ycy9lc20tYXBwLXNoZWxsJykge1xuICAgICAgICAgIC8vIGN1cnJlbnRseSwgd2UgZG9uJ3QgaGF2ZSB0cmFuc2xhdGlvbnMgaW4gdGhlIGFwcCBzaGVsbFxuICAgICAgICAgIGdldFRyYW5zbGF0aW9uT3ZlcnJpZGVzKG5hbWVzcGFjZSlcbiAgICAgICAgICAgIC50aGVuKChvdmVycmlkZXMpID0+IHtcbiAgICAgICAgICAgICAgbGV0IHRyYW5zbGF0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICBpZiAobGFuZ3VhZ2UgaW4gb3ZlcnJpZGVzKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zID0gb3ZlcnJpZGVzW2xhbmd1YWdlXTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRyYW5zbGF0aW9ucyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbXBvcnREeW5hbWljKG5hbWVzcGFjZSlcbiAgICAgICAgICAgIC50aGVuKChtb2R1bGUpID0+XG4gICAgICAgICAgICAgIFByb21pc2UuYWxsKFtnZXRJbXBvcnRQcm9taXNlKG1vZHVsZSwgbmFtZXNwYWNlLCBsYW5ndWFnZSksIGdldFRyYW5zbGF0aW9uT3ZlcnJpZGVzKG5hbWVzcGFjZSldKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKChbanNvbiwgb3ZlcnJpZGVzXSkgPT4ge1xuICAgICAgICAgICAgICBsZXQgdHJhbnNsYXRpb25zID0ganNvbiA/PyB7fTtcblxuICAgICAgICAgICAgICBpZiAobGFuZ3VhZ2UgaW4gb3ZlcnJpZGVzKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zID0gbWVyZ2UodHJhbnNsYXRpb25zLCBvdmVycmlkZXNbbGFuZ3VhZ2VdKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRyYW5zbGF0aW9ucyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KVxuICAgIC51c2UoaW5pdFJlYWN0STE4bmV4dClcbiAgICAuaW5pdCh7XG4gICAgICBkZXRlY3Rpb246IHtcbiAgICAgICAgb3JkZXI6IFsncXVlcnlzdHJpbmcnLCAnaHRtbFRhZycsICdsb2NhbFN0b3JhZ2UnLCAnbmF2aWdhdG9yJ10sXG4gICAgICAgIGxvb2t1cFF1ZXJ5c3RyaW5nOiAnbGFuZycsXG4gICAgICB9LFxuICAgICAgZmFsbGJhY2tMbmc6ICdlbicsXG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEltcG9ydFByb21pc2UoXG4gIG1vZHVsZToge1xuICAgIGltcG9ydFRyYW5zbGF0aW9uOiAobGFuZ3VhZ2U6IHN0cmluZykgPT4gUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgfSxcbiAgbmFtZXNwYWNlOiBzdHJpbmcsXG4gIGxhbmd1YWdlOiBzdHJpbmcsXG4pIHtcbiAgaWYgKHR5cGVvZiBtb2R1bGUuaW1wb3J0VHJhbnNsYXRpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBFcnJvcihgTW9kdWxlICR7bmFtZXNwYWNlfSBkb2VzIG5vdCBleHBvcnQgYW4gaW1wb3J0VHJhbnNsYXRpb24gZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGNvbnN0IGltcG9ydFByb21pc2UgPSBtb2R1bGUuaW1wb3J0VHJhbnNsYXRpb24oYC4vJHtsYW5ndWFnZX0uanNvbmApO1xuXG4gIGlmICghKGltcG9ydFByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgIHRocm93IEVycm9yKFxuICAgICAgYE1vZHVsZSAke25hbWVzcGFjZX0gZXhwb3J0cyBhbiBpbXBvcnRUcmFuc2xhdGlvbiBmdW5jdGlvbiB0aGF0IGRvZXMgbm90IHJldHVybiBhIHByb21pc2UuIERpZCB5b3UgZm9yZ2V0IHRvIHNldCByZXF1aXJlLmNvbnRleHQgbW9kZSB0byAnbGF6eSc/YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGltcG9ydFByb21pc2U7XG59XG4iXSwibmFtZXMiOlsiaTE4bmV4dCIsIkxhbmd1YWdlRGV0ZWN0b3IiLCJpbml0UmVhY3RJMThuZXh0IiwibWVyZ2UiLCJnZXRUcmFuc2xhdGlvbk92ZXJyaWRlcyIsImltcG9ydER5bmFtaWMiLCJzZXR1cEkxOG4iLCJ3aW5kb3ciLCJkZWZhdWx0IiwibGFuZ3VhZ2VDaGFuZ2VPYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJyZURldGVjdCIsInVuZGVmaW5lZCIsImNoYW5nZUxhbmd1YWdlIiwiY2F0Y2giLCJlIiwiY29uc29sZSIsImVycm9yIiwib2JzZXJ2ZSIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiwiYXR0cmlidXRlRmlsdGVyIiwiYXR0cmlidXRlcyIsIm9uIiwic2V0QXR0cmlidXRlIiwiZGlyIiwidXNlIiwidHlwZSIsImluaXQiLCJyZWFkIiwibGFuZ3VhZ2UiLCJuYW1lc3BhY2UiLCJjYWxsYmFjayIsIkVycm9yIiwidGhlbiIsIm92ZXJyaWRlcyIsInRyYW5zbGF0aW9ucyIsImVyciIsIm1vZHVsZSIsIlByb21pc2UiLCJhbGwiLCJnZXRJbXBvcnRQcm9taXNlIiwianNvbiIsImRldGVjdGlvbiIsIm9yZGVyIiwibG9va3VwUXVlcnlzdHJpbmciLCJmYWxsYmFja0xuZyIsImltcG9ydFRyYW5zbGF0aW9uIiwiaW1wb3J0UHJvbWlzZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/locale.ts\n");
|
|
39
39
|
|
|
40
40
|
/***/ }),
|
|
41
41
|
|