@openmrs/esm-app-shell 10.0.1-pre.5378 → 10.0.1-pre.5393

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.
@@ -5780,7 +5780,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webp
5780
5780
  },
5781
5781
  "../../framework/esm-extensions/dist/render.js"(__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
5782
5782
  "use strict";
5783
- eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n createParcelMounter: () => (createParcelMounter),\n renderExtension: () => (renderExtension),\n renderParcel: () => (renderParcel)\n});\n/* import */ var single_spa__rspack_import_0 = __webpack_require__(\"webpack/sharing/consume/default/single-spa/single-spa\");\n/* import */ var single_spa__rspack_import_0_default = /*#__PURE__*/__webpack_require__.n(single_spa__rspack_import_0);\n/* import */ var _extensions_js__rspack_import_1 = __webpack_require__(\"../../framework/esm-extensions/dist/extensions.js\");\n/* import */ var _helpers_js__rspack_import_2 = __webpack_require__(\"../../framework/esm-extensions/dist/helpers.js\");\n/* import */ var _store_js__rspack_import_3 = __webpack_require__(\"../../framework/esm-extensions/dist/store.js\");\n/** @module @category Extension */ \n\n\n\nlet parcelCount = 0;\nlet parcelMounter = null;\n/**\n * Mark parcels as dead if they do not succeed within 15s. Note that loading and unloading is\n * skipped as that has an unpredictable timing. Failing here allows us to clean-up correctly\n * if the parcel doesn't fully mount.\n */ const lifecycleTimeouts = {\n bootstrap: {\n millis: 15000,\n dieOnTimeout: true\n },\n mount: {\n millis: 15000,\n dieOnTimeout: true\n },\n unmount: {\n millis: 15000,\n dieOnTimeout: true\n }\n};\n/**\n * Applies {@link lifecycleTimeouts} to a parcel config, resolving the function form first so that a\n * lazily loaded config gets them too.\n *\n * The cast is needed because single-spa reads `timeouts` off a parcel config but doesn't declare it\n * on `ParcelConfigObject`.\n */ function withLifecycleTimeouts(parcelConfig) {\n // Spread after ours, so a parcel that declares its own timeouts keeps them.\n if (typeof parcelConfig === 'function') {\n return ()=>parcelConfig().then((resolved)=>({\n timeouts: lifecycleTimeouts,\n ...resolved\n }));\n }\n return {\n timeouts: lifecycleTimeouts,\n ...parcelConfig\n };\n}\n/**\n * Resolves the function used to mount extensions, which is the `mountParcel()` of a long-lived\n * parcel of our own rather than single-spa's `mountRootParcel()`.\n *\n * single-spa only removes a parcel from its owner's registry when it unmounts if that owner has a\n * name, and the internal object backing `mountRootParcel()` has none (fixed in single-spa 7).\n * Anything mounted with it is therefore retained for the lifetime of the page, along with the\n * `domElement` it was given and the whole subtree rendered into it. Extensions mounted through a\n * named owner are pruned as they should be.\n *\n * The host parcel is mounted at most once, lazily, and never unmounted; if mounting it fails we\n * fall back to `mountRootParcel()`, since leaking is better than not rendering.\n */ function getParcelMounter() {\n parcelMounter ?? (parcelMounter = new Promise((resolve, reject)=>{\n const host = (0,single_spa__rspack_import_0.mountRootParcel)({\n name: 'openmrs-extension-host',\n bootstrap: ()=>Promise.resolve(),\n mount: (props)=>{\n // single-spa types a parcel's lifecycle props as only the custom props it was mounted\n // with, but they also carry the props single-spa itself injects, `mountParcel` included.\n resolve(props.mountParcel);\n return Promise.resolve();\n },\n unmount: ()=>Promise.resolve()\n }, {\n domElement: document.createElement('div')\n });\n host.mountPromise.catch(reject);\n }).catch((err)=>{\n console.error('The host parcel used to mount extensions could not be mounted. Falling back to mounting ' + 'extensions as root parcels, which leaks their DOM elements.', err);\n return single_spa__rspack_import_0.mountRootParcel;\n }));\n return parcelMounter;\n}\n/**\n * Mounts a parcel through the framework's host parcel, which lets single-spa release the parcel,\n * its `domElement` and everything rendered into it once it unmounts. Prefer this to single-spa's\n * `mountRootParcel()`, which retains all three for the lifetime of the page.\n *\n * @param parcelConfig The parcel config, or a function that loads one\n * @param customProps The props to mount the parcel with, including the `domElement` to render into\n * @returns The parcel handle; mounting completes with its `mountPromise`\n */ async function renderParcel(parcelConfig, customProps) {\n const mountParcel = await getParcelMounter();\n return mountParcel(withLifecycleTimeouts(parcelConfig), customProps);\n}\n/**\n * Provides the equivalent of {@link renderParcel} for callers that need a `mountParcel()` they can\n * call synchronously, single-spa-react's `<Parcel mountParcel={...} />` being the usual case.\n *\n * The parcel it returns is a stand-in until the real one exists, so its `getStatus()` reports\n * `LOADING_SOURCE_CODE` rather than the real status for a short while after mounting. Prefer\n * {@link renderParcel} wherever the caller can await it.\n *\n * @returns A `mountParcel()` that mounts through the host parcel\n */ function createParcelMounter() {\n return mountParcel;\n}\n/**\n * Adapts the asynchronous `renderParcel()` to single-spa's synchronous `mountParcel()` signature,\n * by returning an object that stands in for the parcel and forwards each call to the real one once\n * it resolves. A caller that serialises its calls on `mountPromise`, as single-spa-react's\n * `<Parcel>` does, never observes the stand-in; one that doesn't sees `getStatus()` report\n * `LOADING_SOURCE_CODE` until the parcel is mounted, and an unmounted parcel's `update()` and\n * `unmount()` deferred rather than rejected.\n */ function mountParcel(config, props) {\n let mounted;\n const pending = renderParcel(config, props).then((parcel)=>mounted = parcel);\n return {\n mount: ()=>pending.then((parcel)=>parcel.mount()),\n unmount: ()=>pending.then((parcel)=>parcel.unmount()),\n update: (customProps)=>pending.then((parcel)=>parcel.update?.(customProps)),\n getStatus: ()=>mounted?.getStatus() ?? 'LOADING_SOURCE_CODE',\n // Derived lazily so a mount failure surfaces only on the promise the caller actually reads,\n // instead of becoming an unhandled rejection on the ones it ignores.\n get loadPromise () {\n return pending.then((parcel)=>parcel.loadPromise);\n },\n get bootstrapPromise () {\n return pending.then((parcel)=>parcel.bootstrapPromise);\n },\n get mountPromise () {\n return pending.then((parcel)=>parcel.mountPromise);\n },\n get unmountPromise () {\n return pending.then((parcel)=>parcel.unmountPromise);\n }\n };\n}\n/**\n * Mounts into a DOM node (representing an extension slot)\n * a lazy-loaded component from *any* frontend module\n * that registered an extension component for this slot.\n */ async function renderExtension(domElement, extensionSlotName, extensionSlotModuleName, extensionId, renderFunction = (x)=>x, additionalProps = {}) {\n const extensionName = (0,_extensions_js__rspack_import_1.getExtensionNameFromId)(extensionId);\n const extensionRegistration = (0,_extensions_js__rspack_import_1.getExtensionRegistration)(extensionId);\n let parcel = null;\n if (domElement) {\n if (!extensionRegistration) {\n throw Error(`Couldn't find extension '${extensionName}' to attach to '${extensionSlotName}'`);\n }\n const { meta, moduleName, online, offline, load } = extensionRegistration;\n if ((0,_helpers_js__rspack_import_2.checkStatus)(online, offline)) {\n const id = parcelCount++;\n const renderingId = `${extensionSlotName}/${extensionId}-${id}`;\n // Marks the node for the UI editor, which needs to pair a rendering with the element it went\n // into and cannot tell two renderings of one extension apart by any other attribute.\n domElement.dataset.extensionRenderingId = renderingId;\n const forget = ()=>(0,_store_js__rspack_import_3.unregisterExtensionRendering)(renderingId);\n const forgetSafely = (cleanupErrorMessage)=>{\n try {\n forget();\n } catch (cleanupError) {\n console.error(cleanupErrorMessage, cleanupError);\n }\n };\n // Registered before loading so that the config system can start resolving this extension's\n // config while its bundle is still in flight. Registering drives the config derivation\n // synchronously, so a failure there has to release the record before it propagates — nothing\n // else has a handle on it yet.\n try {\n (0,_store_js__rspack_import_3.registerExtensionRendering)({\n renderingId,\n extensionName,\n extensionModuleName: moduleName,\n extensionId,\n slotName: extensionSlotName,\n slotModuleName: extensionSlotModuleName\n });\n } catch (e) {\n forgetSafely(`Recomputing configuration after registering '${extensionId}' failed also failed`);\n throw e;\n }\n let lifecycle;\n try {\n lifecycle = await load();\n } catch (e) {\n forgetSafely(`Recomputing configuration after '${extensionId}' failed to load also failed`);\n throw e;\n }\n try {\n parcel = await renderParcel(renderFunction({\n ...lifecycle,\n name: `${extensionSlotName}/${extensionName}-${id}`\n }), {\n ...additionalProps,\n _meta: meta,\n _extensionContext: {\n extensionId,\n extensionSlotName,\n extensionSlotModuleName,\n extensionModuleName: moduleName\n },\n domElement\n });\n } catch (e) {\n forgetSafely(`Recomputing configuration after '${extensionId}' failed to mount also failed`);\n throw e;\n }\n // A parcel that fails to bootstrap or mount never settles `unmountPromise`, so the mount\n // rejection has to release the record too. single-spa hard-fails parcels, so its own error\n // handlers never see either failure and the rejected promise is the only channel left.\n parcel.mountPromise.then(undefined, (err)=>{\n console.error(`Extension '${extensionId}' in slot '${extensionSlotName}' failed to mount`, err);\n forgetSafely(`Recomputing configuration after '${extensionId}' failed to mount also failed`);\n });\n parcel.unmountPromise.then(()=>forgetSafely(`Recomputing configuration after unmounting '${extensionId}' failed`), (err)=>{\n console.error(`Extension '${extensionId}' in slot '${extensionSlotName}' failed to unmount`, err);\n forgetSafely(`Recomputing configuration after '${extensionId}' failed to unmount also failed`);\n });\n }\n } else {\n console.warn(`Tried to render ${extensionId} into ${extensionSlotName} but no DOM element was available.`);\n }\n return parcel;\n}\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC9lc218YnVpbHRpbjpzd2MtbG9hZGVyPz9ydWxlU2V0WzFdLnJ1bGVzWzVdLnVzZVswXSEvaG9tZS9ydW5uZXIvd29yay9vcGVubXJzLWVzbS1jb3JlL29wZW5tcnMtZXNtLWNvcmUvcGFja2FnZXMvZnJhbWV3b3JrL2VzbS1leHRlbnNpb25zL2Rpc3QvcmVuZGVyLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLWV4dGVuc2lvbnMvZGlzdC9yZW5kZXIuanM/ZWUxNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQG1vZHVsZSBAY2F0ZWdvcnkgRXh0ZW5zaW9uICovIGltcG9ydCB7IG1vdW50Um9vdFBhcmNlbCB9IGZyb20gXCJzaW5nbGUtc3BhXCI7XG5pbXBvcnQgeyBnZXRFeHRlbnNpb25OYW1lRnJvbUlkLCBnZXRFeHRlbnNpb25SZWdpc3RyYXRpb24gfSBmcm9tIFwiLi9leHRlbnNpb25zLmpzXCI7XG5pbXBvcnQgeyBjaGVja1N0YXR1cyB9IGZyb20gXCIuL2hlbHBlcnMuanNcIjtcbmltcG9ydCB7IHJlZ2lzdGVyRXh0ZW5zaW9uUmVuZGVyaW5nLCB1bnJlZ2lzdGVyRXh0ZW5zaW9uUmVuZGVyaW5nIH0gZnJvbSBcIi4vc3RvcmUuanNcIjtcbmxldCBwYXJjZWxDb3VudCA9IDA7XG5sZXQgcGFyY2VsTW91bnRlciA9IG51bGw7XG4vKipcbiAqIE1hcmsgcGFyY2VscyBhcyBkZWFkIGlmIHRoZXkgZG8gbm90IHN1Y2NlZWQgd2l0aGluIDE1cy4gTm90ZSB0aGF0IGxvYWRpbmcgYW5kIHVubG9hZGluZyBpc1xuICogc2tpcHBlZCBhcyB0aGF0IGhhcyBhbiB1bnByZWRpY3RhYmxlIHRpbWluZy4gRmFpbGluZyBoZXJlIGFsbG93cyB1cyB0byBjbGVhbi11cCBjb3JyZWN0bHlcbiAqIGlmIHRoZSBwYXJjZWwgZG9lc24ndCBmdWxseSBtb3VudC5cbiAqLyBjb25zdCBsaWZlY3ljbGVUaW1lb3V0cyA9IHtcbiAgICBib290c3RyYXA6IHtcbiAgICAgICAgbWlsbGlzOiAxNTAwMCxcbiAgICAgICAgZGllT25UaW1lb3V0OiB0cnVlXG4gICAgfSxcbiAgICBtb3VudDoge1xuICAgICAgICBtaWxsaXM6IDE1MDAwLFxuICAgICAgICBkaWVPblRpbWVvdXQ6IHRydWVcbiAgICB9LFxuICAgIHVubW91bnQ6IHtcbiAgICAgICAgbWlsbGlzOiAxNTAwMCxcbiAgICAgICAgZGllT25UaW1lb3V0OiB0cnVlXG4gICAgfVxufTtcbi8qKlxuICogQXBwbGllcyB7QGxpbmsgbGlmZWN5Y2xlVGltZW91dHN9IHRvIGEgcGFyY2VsIGNvbmZpZywgcmVzb2x2aW5nIHRoZSBmdW5jdGlvbiBmb3JtIGZpcnN0IHNvIHRoYXQgYVxuICogbGF6aWx5IGxvYWRlZCBjb25maWcgZ2V0cyB0aGVtIHRvby5cbiAqXG4gKiBUaGUgY2FzdCBpcyBuZWVkZWQgYmVjYXVzZSBzaW5nbGUtc3BhIHJlYWRzIGB0aW1lb3V0c2Agb2ZmIGEgcGFyY2VsIGNvbmZpZyBidXQgZG9lc24ndCBkZWNsYXJlIGl0XG4gKiBvbiBgUGFyY2VsQ29uZmlnT2JqZWN0YC5cbiAqLyBmdW5jdGlvbiB3aXRoTGlmZWN5Y2xlVGltZW91dHMocGFyY2VsQ29uZmlnKSB7XG4gICAgLy8gU3ByZWFkIGFmdGVyIG91cnMsIHNvIGEgcGFyY2VsIHRoYXQgZGVjbGFyZXMgaXRzIG93biB0aW1lb3V0cyBrZWVwcyB0aGVtLlxuICAgIGlmICh0eXBlb2YgcGFyY2VsQ29uZmlnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiAoKT0+cGFyY2VsQ29uZmlnKCkudGhlbigocmVzb2x2ZWQpPT4oe1xuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0czogbGlmZWN5Y2xlVGltZW91dHMsXG4gICAgICAgICAgICAgICAgICAgIC4uLnJlc29sdmVkXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0aW1lb3V0czogbGlmZWN5Y2xlVGltZW91dHMsXG4gICAgICAgIC4uLnBhcmNlbENvbmZpZ1xuICAgIH07XG59XG4vKipcbiAqIFJlc29sdmVzIHRoZSBmdW5jdGlvbiB1c2VkIHRvIG1vdW50IGV4dGVuc2lvbnMsIHdoaWNoIGlzIHRoZSBgbW91bnRQYXJjZWwoKWAgb2YgYSBsb25nLWxpdmVkXG4gKiBwYXJjZWwgb2Ygb3VyIG93biByYXRoZXIgdGhhbiBzaW5nbGUtc3BhJ3MgYG1vdW50Um9vdFBhcmNlbCgpYC5cbiAqXG4gKiBzaW5nbGUtc3BhIG9ubHkgcmVtb3ZlcyBhIHBhcmNlbCBmcm9tIGl0cyBvd25lcidzIHJlZ2lzdHJ5IHdoZW4gaXQgdW5tb3VudHMgaWYgdGhhdCBvd25lciBoYXMgYVxuICogbmFtZSwgYW5kIHRoZSBpbnRlcm5hbCBvYmplY3QgYmFja2luZyBgbW91bnRSb290UGFyY2VsKClgIGhhcyBub25lIChmaXhlZCBpbiBzaW5nbGUtc3BhIDcpLlxuICogQW55dGhpbmcgbW91bnRlZCB3aXRoIGl0IGlzIHRoZXJlZm9yZSByZXRhaW5lZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBwYWdlLCBhbG9uZyB3aXRoIHRoZVxuICogYGRvbUVsZW1lbnRgIGl0IHdhcyBnaXZlbiBhbmQgdGhlIHdob2xlIHN1YnRyZWUgcmVuZGVyZWQgaW50byBpdC4gRXh0ZW5zaW9ucyBtb3VudGVkIHRocm91Z2ggYVxuICogbmFtZWQgb3duZXIgYXJlIHBydW5lZCBhcyB0aGV5IHNob3VsZCBiZS5cbiAqXG4gKiBUaGUgaG9zdCBwYXJjZWwgaXMgbW91bnRlZCBhdCBtb3N0IG9uY2UsIGxhemlseSwgYW5kIG5ldmVyIHVubW91bnRlZDsgaWYgbW91bnRpbmcgaXQgZmFpbHMgd2VcbiAqIGZhbGwgYmFjayB0byBgbW91bnRSb290UGFyY2VsKClgLCBzaW5jZSBsZWFraW5nIGlzIGJldHRlciB0aGFuIG5vdCByZW5kZXJpbmcuXG4gKi8gZnVuY3Rpb24gZ2V0UGFyY2VsTW91bnRlcigpIHtcbiAgICBwYXJjZWxNb3VudGVyID8/IChwYXJjZWxNb3VudGVyID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk9PntcbiAgICAgICAgY29uc3QgaG9zdCA9IG1vdW50Um9vdFBhcmNlbCh7XG4gICAgICAgICAgICBuYW1lOiAnb3Blbm1ycy1leHRlbnNpb24taG9zdCcsXG4gICAgICAgICAgICBib290c3RyYXA6ICgpPT5Qcm9taXNlLnJlc29sdmUoKSxcbiAgICAgICAgICAgIG1vdW50OiAocHJvcHMpPT57XG4gICAgICAgICAgICAgICAgLy8gc2luZ2xlLXNwYSB0eXBlcyBhIHBhcmNlbCdzIGxpZmVjeWNsZSBwcm9wcyBhcyBvbmx5IHRoZSBjdXN0b20gcHJvcHMgaXQgd2FzIG1vdW50ZWRcbiAgICAgICAgICAgICAgICAvLyB3aXRoLCBidXQgdGhleSBhbHNvIGNhcnJ5IHRoZSBwcm9wcyBzaW5nbGUtc3BhIGl0c2VsZiBpbmplY3RzLCBgbW91bnRQYXJjZWxgIGluY2x1ZGVkLlxuICAgICAgICAgICAgICAgIHJlc29sdmUocHJvcHMubW91bnRQYXJjZWwpO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bm1vdW50OiAoKT0+UHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZG9tRWxlbWVudDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICAgICAgfSk7XG4gICAgICAgIGhvc3QubW91bnRQcm9taXNlLmNhdGNoKHJlamVjdCk7XG4gICAgfSkuY2F0Y2goKGVycik9PntcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIGhvc3QgcGFyY2VsIHVzZWQgdG8gbW91bnQgZXh0ZW5zaW9ucyBjb3VsZCBub3QgYmUgbW91bnRlZC4gRmFsbGluZyBiYWNrIHRvIG1vdW50aW5nICcgKyAnZXh0ZW5zaW9ucyBhcyByb290IHBhcmNlbHMsIHdoaWNoIGxlYWtzIHRoZWlyIERPTSBlbGVtZW50cy4nLCBlcnIpO1xuICAgICAgICByZXR1cm4gbW91bnRSb290UGFyY2VsO1xuICAgIH0pKTtcbiAgICByZXR1cm4gcGFyY2VsTW91bnRlcjtcbn1cbi8qKlxuICogTW91bnRzIGEgcGFyY2VsIHRocm91Z2ggdGhlIGZyYW1ld29yaydzIGhvc3QgcGFyY2VsLCB3aGljaCBsZXRzIHNpbmdsZS1zcGEgcmVsZWFzZSB0aGUgcGFyY2VsLFxuICogaXRzIGBkb21FbGVtZW50YCBhbmQgZXZlcnl0aGluZyByZW5kZXJlZCBpbnRvIGl0IG9uY2UgaXQgdW5tb3VudHMuIFByZWZlciB0aGlzIHRvIHNpbmdsZS1zcGEnc1xuICogYG1vdW50Um9vdFBhcmNlbCgpYCwgd2hpY2ggcmV0YWlucyBhbGwgdGhyZWUgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgcGFnZS5cbiAqXG4gKiBAcGFyYW0gcGFyY2VsQ29uZmlnIFRoZSBwYXJjZWwgY29uZmlnLCBvciBhIGZ1bmN0aW9uIHRoYXQgbG9hZHMgb25lXG4gKiBAcGFyYW0gY3VzdG9tUHJvcHMgVGhlIHByb3BzIHRvIG1vdW50IHRoZSBwYXJjZWwgd2l0aCwgaW5jbHVkaW5nIHRoZSBgZG9tRWxlbWVudGAgdG8gcmVuZGVyIGludG9cbiAqIEByZXR1cm5zIFRoZSBwYXJjZWwgaGFuZGxlOyBtb3VudGluZyBjb21wbGV0ZXMgd2l0aCBpdHMgYG1vdW50UHJvbWlzZWBcbiAqLyBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyUGFyY2VsKHBhcmNlbENvbmZpZywgY3VzdG9tUHJvcHMpIHtcbiAgICBjb25zdCBtb3VudFBhcmNlbCA9IGF3YWl0IGdldFBhcmNlbE1vdW50ZXIoKTtcbiAgICByZXR1cm4gbW91bnRQYXJjZWwod2l0aExpZmVjeWNsZVRpbWVvdXRzKHBhcmNlbENvbmZpZyksIGN1c3RvbVByb3BzKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgdGhlIGVxdWl2YWxlbnQgb2Yge0BsaW5rIHJlbmRlclBhcmNlbH0gZm9yIGNhbGxlcnMgdGhhdCBuZWVkIGEgYG1vdW50UGFyY2VsKClgIHRoZXkgY2FuXG4gKiBjYWxsIHN5bmNocm9ub3VzbHksIHNpbmdsZS1zcGEtcmVhY3QncyBgPFBhcmNlbCBtb3VudFBhcmNlbD17Li4ufSAvPmAgYmVpbmcgdGhlIHVzdWFsIGNhc2UuXG4gKlxuICogVGhlIHBhcmNlbCBpdCByZXR1cm5zIGlzIGEgc3RhbmQtaW4gdW50aWwgdGhlIHJlYWwgb25lIGV4aXN0cywgc28gaXRzIGBnZXRTdGF0dXMoKWAgcmVwb3J0c1xuICogYExPQURJTkdfU09VUkNFX0NPREVgIHJhdGhlciB0aGFuIHRoZSByZWFsIHN0YXR1cyBmb3IgYSBzaG9ydCB3aGlsZSBhZnRlciBtb3VudGluZy4gUHJlZmVyXG4gKiB7QGxpbmsgcmVuZGVyUGFyY2VsfSB3aGVyZXZlciB0aGUgY2FsbGVyIGNhbiBhd2FpdCBpdC5cbiAqXG4gKiBAcmV0dXJucyBBIGBtb3VudFBhcmNlbCgpYCB0aGF0IG1vdW50cyB0aHJvdWdoIHRoZSBob3N0IHBhcmNlbFxuICovIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXJjZWxNb3VudGVyKCkge1xuICAgIHJldHVybiBtb3VudFBhcmNlbDtcbn1cbi8qKlxuICogQWRhcHRzIHRoZSBhc3luY2hyb25vdXMgYHJlbmRlclBhcmNlbCgpYCB0byBzaW5nbGUtc3BhJ3Mgc3luY2hyb25vdXMgYG1vdW50UGFyY2VsKClgIHNpZ25hdHVyZSxcbiAqIGJ5IHJldHVybmluZyBhbiBvYmplY3QgdGhhdCBzdGFuZHMgaW4gZm9yIHRoZSBwYXJjZWwgYW5kIGZvcndhcmRzIGVhY2ggY2FsbCB0byB0aGUgcmVhbCBvbmUgb25jZVxuICogaXQgcmVzb2x2ZXMuIEEgY2FsbGVyIHRoYXQgc2VyaWFsaXNlcyBpdHMgY2FsbHMgb24gYG1vdW50UHJvbWlzZWAsIGFzIHNpbmdsZS1zcGEtcmVhY3Qnc1xuICogYDxQYXJjZWw+YCBkb2VzLCBuZXZlciBvYnNlcnZlcyB0aGUgc3RhbmQtaW47IG9uZSB0aGF0IGRvZXNuJ3Qgc2VlcyBgZ2V0U3RhdHVzKClgIHJlcG9ydFxuICogYExPQURJTkdfU09VUkNFX0NPREVgIHVudGlsIHRoZSBwYXJjZWwgaXMgbW91bnRlZCwgYW5kIGFuIHVubW91bnRlZCBwYXJjZWwncyBgdXBkYXRlKClgIGFuZFxuICogYHVubW91bnQoKWAgZGVmZXJyZWQgcmF0aGVyIHRoYW4gcmVqZWN0ZWQuXG4gKi8gZnVuY3Rpb24gbW91bnRQYXJjZWwoY29uZmlnLCBwcm9wcykge1xuICAgIGxldCBtb3VudGVkO1xuICAgIGNvbnN0IHBlbmRpbmcgPSByZW5kZXJQYXJjZWwoY29uZmlnLCBwcm9wcykudGhlbigocGFyY2VsKT0+bW91bnRlZCA9IHBhcmNlbCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbW91bnQ6ICgpPT5wZW5kaW5nLnRoZW4oKHBhcmNlbCk9PnBhcmNlbC5tb3VudCgpKSxcbiAgICAgICAgdW5tb3VudDogKCk9PnBlbmRpbmcudGhlbigocGFyY2VsKT0+cGFyY2VsLnVubW91bnQoKSksXG4gICAgICAgIHVwZGF0ZTogKGN1c3RvbVByb3BzKT0+cGVuZGluZy50aGVuKChwYXJjZWwpPT5wYXJjZWwudXBkYXRlPy4oY3VzdG9tUHJvcHMpKSxcbiAgICAgICAgZ2V0U3RhdHVzOiAoKT0+bW91bnRlZD8uZ2V0U3RhdHVzKCkgPz8gJ0xPQURJTkdfU09VUkNFX0NPREUnLFxuICAgICAgICAvLyBEZXJpdmVkIGxhemlseSBzbyBhIG1vdW50IGZhaWx1cmUgc3VyZmFjZXMgb25seSBvbiB0aGUgcHJvbWlzZSB0aGUgY2FsbGVyIGFjdHVhbGx5IHJlYWRzLFxuICAgICAgICAvLyBpbnN0ZWFkIG9mIGJlY29taW5nIGFuIHVuaGFuZGxlZCByZWplY3Rpb24gb24gdGhlIG9uZXMgaXQgaWdub3Jlcy5cbiAgICAgICAgZ2V0IGxvYWRQcm9taXNlICgpIHtcbiAgICAgICAgICAgIHJldHVybiBwZW5kaW5nLnRoZW4oKHBhcmNlbCk9PnBhcmNlbC5sb2FkUHJvbWlzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBib290c3RyYXBQcm9taXNlICgpIHtcbiAgICAgICAgICAgIHJldHVybiBwZW5kaW5nLnRoZW4oKHBhcmNlbCk9PnBhcmNlbC5ib290c3RyYXBQcm9taXNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IG1vdW50UHJvbWlzZSAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcGVuZGluZy50aGVuKChwYXJjZWwpPT5wYXJjZWwubW91bnRQcm9taXNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IHVubW91bnRQcm9taXNlICgpIHtcbiAgICAgICAgICAgIHJldHVybiBwZW5kaW5nLnRoZW4oKHBhcmNlbCk9PnBhcmNlbC51bm1vdW50UHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuLyoqXG4gKiBNb3VudHMgaW50byBhIERPTSBub2RlIChyZXByZXNlbnRpbmcgYW4gZXh0ZW5zaW9uIHNsb3QpXG4gKiBhIGxhenktbG9hZGVkIGNvbXBvbmVudCBmcm9tICphbnkqIGZyb250ZW5kIG1vZHVsZVxuICogdGhhdCByZWdpc3RlcmVkIGFuIGV4dGVuc2lvbiBjb21wb25lbnQgZm9yIHRoaXMgc2xvdC5cbiAqLyBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyRXh0ZW5zaW9uKGRvbUVsZW1lbnQsIGV4dGVuc2lvblNsb3ROYW1lLCBleHRlbnNpb25TbG90TW9kdWxlTmFtZSwgZXh0ZW5zaW9uSWQsIHJlbmRlckZ1bmN0aW9uID0gKHgpPT54LCBhZGRpdGlvbmFsUHJvcHMgPSB7fSkge1xuICAgIGNvbnN0IGV4dGVuc2lvbk5hbWUgPSBnZXRFeHRlbnNpb25OYW1lRnJvbUlkKGV4dGVuc2lvbklkKTtcbiAgICBjb25zdCBleHRlbnNpb25SZWdpc3RyYXRpb24gPSBnZXRFeHRlbnNpb25SZWdpc3RyYXRpb24oZXh0ZW5zaW9uSWQpO1xuICAgIGxldCBwYXJjZWwgPSBudWxsO1xuICAgIGlmIChkb21FbGVtZW50KSB7XG4gICAgICAgIGlmICghZXh0ZW5zaW9uUmVnaXN0cmF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgQ291bGRuJ3QgZmluZCBleHRlbnNpb24gJyR7ZXh0ZW5zaW9uTmFtZX0nIHRvIGF0dGFjaCB0byAnJHtleHRlbnNpb25TbG90TmFtZX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBtZXRhLCBtb2R1bGVOYW1lLCBvbmxpbmUsIG9mZmxpbmUsIGxvYWQgfSA9IGV4dGVuc2lvblJlZ2lzdHJhdGlvbjtcbiAgICAgICAgaWYgKGNoZWNrU3RhdHVzKG9ubGluZSwgb2ZmbGluZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gcGFyY2VsQ291bnQrKztcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmluZ0lkID0gYCR7ZXh0ZW5zaW9uU2xvdE5hbWV9LyR7ZXh0ZW5zaW9uSWR9LSR7aWR9YDtcbiAgICAgICAgICAgIC8vIE1hcmtzIHRoZSBub2RlIGZvciB0aGUgVUkgZWRpdG9yLCB3aGljaCBuZWVkcyB0byBwYWlyIGEgcmVuZGVyaW5nIHdpdGggdGhlIGVsZW1lbnQgaXQgd2VudFxuICAgICAgICAgICAgLy8gaW50byBhbmQgY2Fubm90IHRlbGwgdHdvIHJlbmRlcmluZ3Mgb2Ygb25lIGV4dGVuc2lvbiBhcGFydCBieSBhbnkgb3RoZXIgYXR0cmlidXRlLlxuICAgICAgICAgICAgZG9tRWxlbWVudC5kYXRhc2V0LmV4dGVuc2lvblJlbmRlcmluZ0lkID0gcmVuZGVyaW5nSWQ7XG4gICAgICAgICAgICBjb25zdCBmb3JnZXQgPSAoKT0+dW5yZWdpc3RlckV4dGVuc2lvblJlbmRlcmluZyhyZW5kZXJpbmdJZCk7XG4gICAgICAgICAgICBjb25zdCBmb3JnZXRTYWZlbHkgPSAoY2xlYW51cEVycm9yTWVzc2FnZSk9PntcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3JnZXQoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChjbGVhbnVwRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihjbGVhbnVwRXJyb3JNZXNzYWdlLCBjbGVhbnVwRXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBSZWdpc3RlcmVkIGJlZm9yZSBsb2FkaW5nIHNvIHRoYXQgdGhlIGNvbmZpZyBzeXN0ZW0gY2FuIHN0YXJ0IHJlc29sdmluZyB0aGlzIGV4dGVuc2lvbidzXG4gICAgICAgICAgICAvLyBjb25maWcgd2hpbGUgaXRzIGJ1bmRsZSBpcyBzdGlsbCBpbiBmbGlnaHQuIFJlZ2lzdGVyaW5nIGRyaXZlcyB0aGUgY29uZmlnIGRlcml2YXRpb25cbiAgICAgICAgICAgIC8vIHN5bmNocm9ub3VzbHksIHNvIGEgZmFpbHVyZSB0aGVyZSBoYXMgdG8gcmVsZWFzZSB0aGUgcmVjb3JkIGJlZm9yZSBpdCBwcm9wYWdhdGVzIOKAlCBub3RoaW5nXG4gICAgICAgICAgICAvLyBlbHNlIGhhcyBhIGhhbmRsZSBvbiBpdCB5ZXQuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlZ2lzdGVyRXh0ZW5zaW9uUmVuZGVyaW5nKHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyaW5nSWQsXG4gICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbk1vZHVsZU5hbWU6IG1vZHVsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICBzbG90TmFtZTogZXh0ZW5zaW9uU2xvdE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHNsb3RNb2R1bGVOYW1lOiBleHRlbnNpb25TbG90TW9kdWxlTmFtZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGZvcmdldFNhZmVseShgUmVjb21wdXRpbmcgY29uZmlndXJhdGlvbiBhZnRlciByZWdpc3RlcmluZyAnJHtleHRlbnNpb25JZH0nIGZhaWxlZCBhbHNvIGZhaWxlZGApO1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbGlmZWN5Y2xlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsaWZlY3ljbGUgPSBhd2FpdCBsb2FkKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZm9yZ2V0U2FmZWx5KGBSZWNvbXB1dGluZyBjb25maWd1cmF0aW9uIGFmdGVyICcke2V4dGVuc2lvbklkfScgZmFpbGVkIHRvIGxvYWQgYWxzbyBmYWlsZWRgKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJjZWwgPSBhd2FpdCByZW5kZXJQYXJjZWwocmVuZGVyRnVuY3Rpb24oe1xuICAgICAgICAgICAgICAgICAgICAuLi5saWZlY3ljbGUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke2V4dGVuc2lvblNsb3ROYW1lfS8ke2V4dGVuc2lvbk5hbWV9LSR7aWR9YFxuICAgICAgICAgICAgICAgIH0pLCB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmFkZGl0aW9uYWxQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgX21ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgIF9leHRlbnNpb25Db250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvblNsb3ROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uU2xvdE1vZHVsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25Nb2R1bGVOYW1lOiBtb2R1bGVOYW1lXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBmb3JnZXRTYWZlbHkoYFJlY29tcHV0aW5nIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgJyR7ZXh0ZW5zaW9uSWR9JyBmYWlsZWQgdG8gbW91bnQgYWxzbyBmYWlsZWRgKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQSBwYXJjZWwgdGhhdCBmYWlscyB0byBib290c3RyYXAgb3IgbW91bnQgbmV2ZXIgc2V0dGxlcyBgdW5tb3VudFByb21pc2VgLCBzbyB0aGUgbW91bnRcbiAgICAgICAgICAgIC8vIHJlamVjdGlvbiBoYXMgdG8gcmVsZWFzZSB0aGUgcmVjb3JkIHRvby4gc2luZ2xlLXNwYSBoYXJkLWZhaWxzIHBhcmNlbHMsIHNvIGl0cyBvd24gZXJyb3JcbiAgICAgICAgICAgIC8vIGhhbmRsZXJzIG5ldmVyIHNlZSBlaXRoZXIgZmFpbHVyZSBhbmQgdGhlIHJlamVjdGVkIHByb21pc2UgaXMgdGhlIG9ubHkgY2hhbm5lbCBsZWZ0LlxuICAgICAgICAgICAgcGFyY2VsLm1vdW50UHJvbWlzZS50aGVuKHVuZGVmaW5lZCwgKGVycik9PntcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFeHRlbnNpb24gJyR7ZXh0ZW5zaW9uSWR9JyBpbiBzbG90ICcke2V4dGVuc2lvblNsb3ROYW1lfScgZmFpbGVkIHRvIG1vdW50YCwgZXJyKTtcbiAgICAgICAgICAgICAgICBmb3JnZXRTYWZlbHkoYFJlY29tcHV0aW5nIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgJyR7ZXh0ZW5zaW9uSWR9JyBmYWlsZWQgdG8gbW91bnQgYWxzbyBmYWlsZWRgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGFyY2VsLnVubW91bnRQcm9taXNlLnRoZW4oKCk9PmZvcmdldFNhZmVseShgUmVjb21wdXRpbmcgY29uZmlndXJhdGlvbiBhZnRlciB1bm1vdW50aW5nICcke2V4dGVuc2lvbklkfScgZmFpbGVkYCksIChlcnIpPT57XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXh0ZW5zaW9uICcke2V4dGVuc2lvbklkfScgaW4gc2xvdCAnJHtleHRlbnNpb25TbG90TmFtZX0nIGZhaWxlZCB0byB1bm1vdW50YCwgZXJyKTtcbiAgICAgICAgICAgICAgICBmb3JnZXRTYWZlbHkoYFJlY29tcHV0aW5nIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgJyR7ZXh0ZW5zaW9uSWR9JyBmYWlsZWQgdG8gdW5tb3VudCBhbHNvIGZhaWxlZGApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYFRyaWVkIHRvIHJlbmRlciAke2V4dGVuc2lvbklkfSBpbnRvICR7ZXh0ZW5zaW9uU2xvdE5hbWV9IGJ1dCBubyBET00gZWxlbWVudCB3YXMgYXZhaWxhYmxlLmApO1xuICAgIH1cbiAgICByZXR1cm4gcGFyY2VsO1xufVxuIl0sIm5hbWVzIjpbIm1vdW50Um9vdFBhcmNlbCIsImdldEV4dGVuc2lvbk5hbWVGcm9tSWQiLCJnZXRFeHRlbnNpb25SZWdpc3RyYXRpb24iLCJjaGVja1N0YXR1cyIsInJlZ2lzdGVyRXh0ZW5zaW9uUmVuZGVyaW5nIiwidW5yZWdpc3RlckV4dGVuc2lvblJlbmRlcmluZyIsInBhcmNlbENvdW50IiwicGFyY2VsTW91bnRlciIsImxpZmVjeWNsZVRpbWVvdXRzIiwid2l0aExpZmVjeWNsZVRpbWVvdXRzIiwicGFyY2VsQ29uZmlnIiwicmVzb2x2ZWQiLCJnZXRQYXJjZWxNb3VudGVyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJob3N0IiwicHJvcHMiLCJkb2N1bWVudCIsImVyciIsImNvbnNvbGUiLCJyZW5kZXJQYXJjZWwiLCJjdXN0b21Qcm9wcyIsIm1vdW50UGFyY2VsIiwiY3JlYXRlUGFyY2VsTW91bnRlciIsImNvbmZpZyIsIm1vdW50ZWQiLCJwZW5kaW5nIiwicGFyY2VsIiwicmVuZGVyRXh0ZW5zaW9uIiwiZG9tRWxlbWVudCIsImV4dGVuc2lvblNsb3ROYW1lIiwiZXh0ZW5zaW9uU2xvdE1vZHVsZU5hbWUiLCJleHRlbnNpb25JZCIsInJlbmRlckZ1bmN0aW9uIiwieCIsImFkZGl0aW9uYWxQcm9wcyIsImV4dGVuc2lvbk5hbWUiLCJleHRlbnNpb25SZWdpc3RyYXRpb24iLCJFcnJvciIsIm1ldGEiLCJtb2R1bGVOYW1lIiwib25saW5lIiwib2ZmbGluZSIsImxvYWQiLCJpZCIsInJlbmRlcmluZ0lkIiwiZm9yZ2V0IiwiZm9yZ2V0U2FmZWx5IiwiY2xlYW51cEVycm9yTWVzc2FnZSIsImNsZWFudXBFcnJvciIsImUiLCJsaWZlY3ljbGUiLCJ1bmRlZmluZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsZ0NBQWdDLEdBQWdEO0FBQ0c7QUFDeEM7QUFDMkM7QUFDdEYsSUFBSU0sY0FBYztBQUNsQixJQUFJQyxnQkFBZ0I7QUFDcEI7Ozs7Q0FJQyxHQUFHLE1BQU1DLG9CQUFvQjtJQUMxQixXQUFXO1FBQ1AsUUFBUTtRQUNSLGNBQWM7SUFDbEI7SUFDQSxPQUFPO1FBQ0gsUUFBUTtRQUNSLGNBQWM7SUFDbEI7SUFDQSxTQUFTO1FBQ0wsUUFBUTtRQUNSLGNBQWM7SUFDbEI7QUFDSjtBQUNBOzs7Ozs7Q0FNQyxHQUFHLFNBQVNDLHNCQUFzQkMsWUFBWTtJQUMzQyw0RUFBNEU7SUFDNUUsSUFBSSxPQUFPQSxpQkFBaUIsWUFBWTtRQUNwQyxPQUFPLElBQUlBLGVBQWUsSUFBSSxDQUFDLENBQUNDLFdBQVk7b0JBQ2hDLFVBQVVIO29CQUNWLEdBQUdHLFFBQVE7Z0JBQ2Y7SUFDWjtJQUNBLE9BQU87UUFDSCxVQUFVSDtRQUNWLEdBQUdFLFlBQVk7SUFDbkI7QUFDSjtBQUNBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUFHLFNBQVNFO0lBQ1RMLGlCQUFrQkEsQ0FBQUEsZ0JBQWdCLElBQUlNLFFBQVEsQ0FBQ0MsU0FBU0M7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\n//# sourceURL=webpack-internal:///../../framework/esm-extensions/dist/render.js\n\n}");
5783
+ eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n createParcelMounter: () => (createParcelMounter),\n renderExtension: () => (renderExtension),\n renderParcel: () => (renderParcel)\n});\n/* import */ var single_spa__rspack_import_0 = __webpack_require__(\"webpack/sharing/consume/default/single-spa/single-spa\");\n/* import */ var single_spa__rspack_import_0_default = /*#__PURE__*/__webpack_require__.n(single_spa__rspack_import_0);\n/* import */ var _extensions_js__rspack_import_1 = __webpack_require__(\"../../framework/esm-extensions/dist/extensions.js\");\n/* import */ var _helpers_js__rspack_import_2 = __webpack_require__(\"../../framework/esm-extensions/dist/helpers.js\");\n/* import */ var _store_js__rspack_import_3 = __webpack_require__(\"../../framework/esm-extensions/dist/store.js\");\n/** @module @category Extension */ \n\n\n\nlet parcelCount = 0;\nlet parcelMounter = null;\n/**\n * How long each lifecycle gets before the parcel is marked dead. Loading and unloading are left\n * out, as their timing is unpredictable. These are meant to be generous.\n *\n * These are enforced by {@link withDeadline} rather than through single-spa's `timeouts`, because\n * `reasonableTime()` never clears the timers it schedules from that config: until one fires its\n * closure retains the parcel, the `domElement` it was given and the whole subtree rendered into it.\n */ const lifecycleDeadlines = {\n bootstrap: 15000,\n mount: 15000,\n unmount: 15000\n};\n/** single-spa's own test for a thenable, which is all it requires a lifecycle to return. */ function isPromiseLike(value) {\n const thenable = value;\n return typeof thenable?.then === 'function' && typeof thenable?.catch === 'function';\n}\n/**\n * Collapses single-spa's \"function or array of functions\" lifecycle shape into one function that\n * runs each in turn, rejecting if any of them returns something that is not a promise.\n */ function toSingleFn(lifecycle, name, which) {\n const fns = Array.isArray(lifecycle) ? lifecycle : [\n lifecycle\n ];\n return (props)=>fns.reduce((chain, fn, index)=>chain.then(()=>{\n const result = fn(props);\n return isPromiseLike(result) ? result : Promise.reject(new Error(`Lifecycle function ${which} at array index ${index} for parcel ${name} did not return a promise`));\n }), Promise.resolve(undefined));\n}\n/**\n * Wraps a lifecycle so that it rejects once `millis` have elapsed, clearing the timer as soon as it\n * settles either way. Rejecting puts the parcel into the same broken state single-spa's own\n * `dieOnTimeout` would, but without leaving a timer holding the parcel for the full deadline.\n */ function withDeadline(lifecycle, millis, name, which) {\n const run = toSingleFn(lifecycle, name, which);\n return (props)=>{\n let timer;\n const deadline = new Promise((_, reject)=>{\n timer = setTimeout(()=>reject(new Error(`Lifecycle function ${which} for parcel ${name} did not settle within ${millis}ms`)), millis);\n });\n return Promise.race([\n run(props),\n deadline\n ]).finally(()=>clearTimeout(timer));\n };\n}\n/** Applies {@link lifecycleDeadlines} to a resolved parcel config. */ function boundLifecycles(parcelConfig) {\n // A parcel that declares its own timeouts is bounding itself, so it is left to single-spa.\n if (parcelConfig.timeouts) {\n return parcelConfig;\n }\n const name = parcelConfig.name ?? 'parcel';\n const bounded = Object.fromEntries(Object.keys(lifecycleDeadlines).filter((which)=>parcelConfig[which]).map((which)=>[\n which,\n withDeadline(parcelConfig[which], lifecycleDeadlines[which], name, which)\n ]));\n return {\n ...parcelConfig,\n ...bounded\n };\n}\n/**\n * Applies {@link boundLifecycles} to a parcel config, resolving the function form first so that a\n * lazily loaded config gets the deadlines too.\n */ function withLifecycleDeadlines(parcelConfig) {\n if (typeof parcelConfig === 'function') {\n return ()=>parcelConfig().then(boundLifecycles);\n }\n return boundLifecycles(parcelConfig);\n}\n/**\n * Resolves the function used to mount extensions, which is the `mountParcel()` of a long-lived\n * parcel of our own rather than single-spa's `mountRootParcel()`.\n *\n * single-spa only removes a parcel from its owner's registry when it unmounts if that owner has a\n * name, and the internal object backing `mountRootParcel()` has none (fixed in single-spa 7).\n * Anything mounted with it is therefore retained for the lifetime of the page, along with the\n * `domElement` it was given and the whole subtree rendered into it. Extensions mounted through a\n * named owner are pruned as they should be.\n *\n * The host parcel is mounted at most once, lazily, and never unmounted; if mounting it fails we\n * fall back to `mountRootParcel()`, since leaking is better than not rendering.\n */ function getParcelMounter() {\n parcelMounter ?? (parcelMounter = new Promise((resolve, reject)=>{\n const host = (0,single_spa__rspack_import_0.mountRootParcel)({\n name: 'openmrs-extension-host',\n bootstrap: ()=>Promise.resolve(),\n mount: (props)=>{\n // single-spa types a parcel's lifecycle props as only the custom props it was mounted\n // with, but they also carry the props single-spa itself injects, `mountParcel` included.\n resolve(props.mountParcel);\n return Promise.resolve();\n },\n unmount: ()=>Promise.resolve()\n }, {\n domElement: document.createElement('div')\n });\n host.mountPromise.catch(reject);\n }).catch((err)=>{\n console.error('The host parcel used to mount extensions could not be mounted. Falling back to mounting ' + 'extensions as root parcels, which leaks their DOM elements.', err);\n return single_spa__rspack_import_0.mountRootParcel;\n }));\n return parcelMounter;\n}\n/**\n * Mounts a parcel through the framework's host parcel, which lets single-spa release the parcel,\n * its `domElement` and everything rendered into it once it unmounts. Prefer this to single-spa's\n * `mountRootParcel()`, which retains all three for the lifetime of the page.\n *\n * @param parcelConfig The parcel config, or a function that loads one\n * @param customProps The props to mount the parcel with, including the `domElement` to render into\n * @returns The parcel handle; mounting completes with its `mountPromise`\n */ async function renderParcel(parcelConfig, customProps) {\n const mountParcel = await getParcelMounter();\n return mountParcel(withLifecycleDeadlines(parcelConfig), customProps);\n}\n/**\n * Provides the equivalent of {@link renderParcel} for callers that need a `mountParcel()` they can\n * call synchronously, single-spa-react's `<Parcel mountParcel={...} />` being the usual case.\n *\n * The parcel it returns is a stand-in until the real one exists, so its `getStatus()` reports\n * `LOADING_SOURCE_CODE` rather than the real status for a short while after mounting. Prefer\n * {@link renderParcel} wherever the caller can await it.\n *\n * @returns A `mountParcel()` that mounts through the host parcel\n */ function createParcelMounter() {\n return mountParcel;\n}\n/**\n * Adapts the asynchronous `renderParcel()` to single-spa's synchronous `mountParcel()` signature,\n * by returning an object that stands in for the parcel and forwards each call to the real one once\n * it resolves. A caller that serialises its calls on `mountPromise`, as single-spa-react's\n * `<Parcel>` does, never observes the stand-in; one that doesn't sees `getStatus()` report\n * `LOADING_SOURCE_CODE` until the parcel is mounted, and an unmounted parcel's `update()` and\n * `unmount()` deferred rather than rejected.\n */ function mountParcel(config, props) {\n let mounted;\n const pending = renderParcel(config, props).then((parcel)=>mounted = parcel);\n return {\n mount: ()=>pending.then((parcel)=>parcel.mount()),\n unmount: ()=>pending.then((parcel)=>parcel.unmount()),\n update: (customProps)=>pending.then((parcel)=>parcel.update?.(customProps)),\n getStatus: ()=>mounted?.getStatus() ?? 'LOADING_SOURCE_CODE',\n // Derived lazily so a mount failure surfaces only on the promise the caller actually reads,\n // instead of becoming an unhandled rejection on the ones it ignores.\n get loadPromise () {\n return pending.then((parcel)=>parcel.loadPromise);\n },\n get bootstrapPromise () {\n return pending.then((parcel)=>parcel.bootstrapPromise);\n },\n get mountPromise () {\n return pending.then((parcel)=>parcel.mountPromise);\n },\n get unmountPromise () {\n return pending.then((parcel)=>parcel.unmountPromise);\n }\n };\n}\n/**\n * Mounts into a DOM node (representing an extension slot)\n * a lazy-loaded component from *any* frontend module\n * that registered an extension component for this slot.\n */ async function renderExtension(domElement, extensionSlotName, extensionSlotModuleName, extensionId, renderFunction = (x)=>x, additionalProps = {}) {\n const extensionName = (0,_extensions_js__rspack_import_1.getExtensionNameFromId)(extensionId);\n const extensionRegistration = (0,_extensions_js__rspack_import_1.getExtensionRegistration)(extensionId);\n let parcel = null;\n if (domElement) {\n if (!extensionRegistration) {\n throw Error(`Couldn't find extension '${extensionName}' to attach to '${extensionSlotName}'`);\n }\n const { meta, moduleName, online, offline, load } = extensionRegistration;\n if ((0,_helpers_js__rspack_import_2.checkStatus)(online, offline)) {\n const id = parcelCount++;\n const renderingId = `${extensionSlotName}/${extensionId}-${id}`;\n // Marks the node for the UI editor, which needs to pair a rendering with the element it went\n // into and cannot tell two renderings of one extension apart by any other attribute.\n domElement.dataset.extensionRenderingId = renderingId;\n const forget = ()=>(0,_store_js__rspack_import_3.unregisterExtensionRendering)(renderingId);\n const forgetSafely = (cleanupErrorMessage)=>{\n try {\n forget();\n } catch (cleanupError) {\n console.error(cleanupErrorMessage, cleanupError);\n }\n };\n // Registered before loading so that the config system can start resolving this extension's\n // config while its bundle is still in flight. Registering drives the config derivation\n // synchronously, so a failure there has to release the record before it propagates — nothing\n // else has a handle on it yet.\n try {\n (0,_store_js__rspack_import_3.registerExtensionRendering)({\n renderingId,\n extensionName,\n extensionModuleName: moduleName,\n extensionId,\n slotName: extensionSlotName,\n slotModuleName: extensionSlotModuleName\n });\n } catch (e) {\n forgetSafely(`Recomputing configuration after registering '${extensionId}' failed also failed`);\n throw e;\n }\n let lifecycle;\n try {\n lifecycle = await load();\n } catch (e) {\n forgetSafely(`Recomputing configuration after '${extensionId}' failed to load also failed`);\n throw e;\n }\n try {\n parcel = await renderParcel(renderFunction({\n ...lifecycle,\n name: `${extensionSlotName}/${extensionName}-${id}`\n }), {\n ...additionalProps,\n _meta: meta,\n _extensionContext: {\n extensionId,\n extensionSlotName,\n extensionSlotModuleName,\n extensionModuleName: moduleName\n },\n domElement\n });\n } catch (e) {\n forgetSafely(`Recomputing configuration after '${extensionId}' failed to mount also failed`);\n throw e;\n }\n // A parcel that fails to bootstrap or mount never settles `unmountPromise`, so the mount\n // rejection has to release the record too. single-spa hard-fails parcels, so its own error\n // handlers never see either failure and the rejected promise is the only channel left.\n parcel.mountPromise.then(undefined, (err)=>{\n console.error(`Extension '${extensionId}' in slot '${extensionSlotName}' failed to mount`, err);\n forgetSafely(`Recomputing configuration after '${extensionId}' failed to mount also failed`);\n });\n parcel.unmountPromise.then(()=>forgetSafely(`Recomputing configuration after unmounting '${extensionId}' failed`), (err)=>{\n console.error(`Extension '${extensionId}' in slot '${extensionSlotName}' failed to unmount`, err);\n forgetSafely(`Recomputing configuration after '${extensionId}' failed to unmount also failed`);\n });\n }\n } else {\n console.warn(`Tried to render ${extensionId} into ${extensionSlotName} but no DOM element was available.`);\n }\n return parcel;\n}\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC9lc218YnVpbHRpbjpzd2MtbG9hZGVyPz9ydWxlU2V0WzFdLnJ1bGVzWzVdLnVzZVswXSEvaG9tZS9ydW5uZXIvd29yay9vcGVubXJzLWVzbS1jb3JlL29wZW5tcnMtZXNtLWNvcmUvcGFja2FnZXMvZnJhbWV3b3JrL2VzbS1leHRlbnNpb25zL2Rpc3QvcmVuZGVyLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLWV4dGVuc2lvbnMvZGlzdC9yZW5kZXIuanM/ZWUxNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQG1vZHVsZSBAY2F0ZWdvcnkgRXh0ZW5zaW9uICovIGltcG9ydCB7IG1vdW50Um9vdFBhcmNlbCB9IGZyb20gXCJzaW5nbGUtc3BhXCI7XG5pbXBvcnQgeyBnZXRFeHRlbnNpb25OYW1lRnJvbUlkLCBnZXRFeHRlbnNpb25SZWdpc3RyYXRpb24gfSBmcm9tIFwiLi9leHRlbnNpb25zLmpzXCI7XG5pbXBvcnQgeyBjaGVja1N0YXR1cyB9IGZyb20gXCIuL2hlbHBlcnMuanNcIjtcbmltcG9ydCB7IHJlZ2lzdGVyRXh0ZW5zaW9uUmVuZGVyaW5nLCB1bnJlZ2lzdGVyRXh0ZW5zaW9uUmVuZGVyaW5nIH0gZnJvbSBcIi4vc3RvcmUuanNcIjtcbmxldCBwYXJjZWxDb3VudCA9IDA7XG5sZXQgcGFyY2VsTW91bnRlciA9IG51bGw7XG4vKipcbiAqIEhvdyBsb25nIGVhY2ggbGlmZWN5Y2xlIGdldHMgYmVmb3JlIHRoZSBwYXJjZWwgaXMgbWFya2VkIGRlYWQuIExvYWRpbmcgYW5kIHVubG9hZGluZyBhcmUgbGVmdFxuICogb3V0LCBhcyB0aGVpciB0aW1pbmcgaXMgdW5wcmVkaWN0YWJsZS4gVGhlc2UgYXJlIG1lYW50IHRvIGJlIGdlbmVyb3VzLlxuICpcbiAqIFRoZXNlIGFyZSBlbmZvcmNlZCBieSB7QGxpbmsgd2l0aERlYWRsaW5lfSByYXRoZXIgdGhhbiB0aHJvdWdoIHNpbmdsZS1zcGEncyBgdGltZW91dHNgLCBiZWNhdXNlXG4gKiBgcmVhc29uYWJsZVRpbWUoKWAgbmV2ZXIgY2xlYXJzIHRoZSB0aW1lcnMgaXQgc2NoZWR1bGVzIGZyb20gdGhhdCBjb25maWc6IHVudGlsIG9uZSBmaXJlcyBpdHNcbiAqIGNsb3N1cmUgcmV0YWlucyB0aGUgcGFyY2VsLCB0aGUgYGRvbUVsZW1lbnRgIGl0IHdhcyBnaXZlbiBhbmQgdGhlIHdob2xlIHN1YnRyZWUgcmVuZGVyZWQgaW50byBpdC5cbiAqLyBjb25zdCBsaWZlY3ljbGVEZWFkbGluZXMgPSB7XG4gICAgYm9vdHN0cmFwOiAxNTAwMCxcbiAgICBtb3VudDogMTUwMDAsXG4gICAgdW5tb3VudDogMTUwMDBcbn07XG4vKiogc2luZ2xlLXNwYSdzIG93biB0ZXN0IGZvciBhIHRoZW5hYmxlLCB3aGljaCBpcyBhbGwgaXQgcmVxdWlyZXMgYSBsaWZlY3ljbGUgdG8gcmV0dXJuLiAqLyBmdW5jdGlvbiBpc1Byb21pc2VMaWtlKHZhbHVlKSB7XG4gICAgY29uc3QgdGhlbmFibGUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdHlwZW9mIHRoZW5hYmxlPy50aGVuID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0aGVuYWJsZT8uY2F0Y2ggPT09ICdmdW5jdGlvbic7XG59XG4vKipcbiAqIENvbGxhcHNlcyBzaW5nbGUtc3BhJ3MgXCJmdW5jdGlvbiBvciBhcnJheSBvZiBmdW5jdGlvbnNcIiBsaWZlY3ljbGUgc2hhcGUgaW50byBvbmUgZnVuY3Rpb24gdGhhdFxuICogcnVucyBlYWNoIGluIHR1cm4sIHJlamVjdGluZyBpZiBhbnkgb2YgdGhlbSByZXR1cm5zIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBhIHByb21pc2UuXG4gKi8gZnVuY3Rpb24gdG9TaW5nbGVGbihsaWZlY3ljbGUsIG5hbWUsIHdoaWNoKSB7XG4gICAgY29uc3QgZm5zID0gQXJyYXkuaXNBcnJheShsaWZlY3ljbGUpID8gbGlmZWN5Y2xlIDogW1xuICAgICAgICBsaWZlY3ljbGVcbiAgICBdO1xuICAgIHJldHVybiAocHJvcHMpPT5mbnMucmVkdWNlKChjaGFpbiwgZm4sIGluZGV4KT0+Y2hhaW4udGhlbigoKT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZuKHByb3BzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNQcm9taXNlTGlrZShyZXN1bHQpID8gcmVzdWx0IDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBMaWZlY3ljbGUgZnVuY3Rpb24gJHt3aGljaH0gYXQgYXJyYXkgaW5kZXggJHtpbmRleH0gZm9yIHBhcmNlbCAke25hbWV9IGRpZCBub3QgcmV0dXJuIGEgcHJvbWlzZWApKTtcbiAgICAgICAgICAgIH0pLCBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKSk7XG59XG4vKipcbiAqIFdyYXBzIGEgbGlmZWN5Y2xlIHNvIHRoYXQgaXQgcmVqZWN0cyBvbmNlIGBtaWxsaXNgIGhhdmUgZWxhcHNlZCwgY2xlYXJpbmcgdGhlIHRpbWVyIGFzIHNvb24gYXMgaXRcbiAqIHNldHRsZXMgZWl0aGVyIHdheS4gUmVqZWN0aW5nIHB1dHMgdGhlIHBhcmNlbCBpbnRvIHRoZSBzYW1lIGJyb2tlbiBzdGF0ZSBzaW5nbGUtc3BhJ3Mgb3duXG4gKiBgZGllT25UaW1lb3V0YCB3b3VsZCwgYnV0IHdpdGhvdXQgbGVhdmluZyBhIHRpbWVyIGhvbGRpbmcgdGhlIHBhcmNlbCBmb3IgdGhlIGZ1bGwgZGVhZGxpbmUuXG4gKi8gZnVuY3Rpb24gd2l0aERlYWRsaW5lKGxpZmVjeWNsZSwgbWlsbGlzLCBuYW1lLCB3aGljaCkge1xuICAgIGNvbnN0IHJ1biA9IHRvU2luZ2xlRm4obGlmZWN5Y2xlLCBuYW1lLCB3aGljaCk7XG4gICAgcmV0dXJuIChwcm9wcyk9PntcbiAgICAgICAgbGV0IHRpbWVyO1xuICAgICAgICBjb25zdCBkZWFkbGluZSA9IG5ldyBQcm9taXNlKChfLCByZWplY3QpPT57XG4gICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCk9PnJlamVjdChuZXcgRXJyb3IoYExpZmVjeWNsZSBmdW5jdGlvbiAke3doaWNofSBmb3IgcGFyY2VsICR7bmFtZX0gZGlkIG5vdCBzZXR0bGUgd2l0aGluICR7bWlsbGlzfW1zYCkpLCBtaWxsaXMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmFjZShbXG4gICAgICAgICAgICBydW4ocHJvcHMpLFxuICAgICAgICAgICAgZGVhZGxpbmVcbiAgICAgICAgXSkuZmluYWxseSgoKT0+Y2xlYXJUaW1lb3V0KHRpbWVyKSk7XG4gICAgfTtcbn1cbi8qKiBBcHBsaWVzIHtAbGluayBsaWZlY3ljbGVEZWFkbGluZXN9IHRvIGEgcmVzb2x2ZWQgcGFyY2VsIGNvbmZpZy4gKi8gZnVuY3Rpb24gYm91bmRMaWZlY3ljbGVzKHBhcmNlbENvbmZpZykge1xuICAgIC8vIEEgcGFyY2VsIHRoYXQgZGVjbGFyZXMgaXRzIG93biB0aW1lb3V0cyBpcyBib3VuZGluZyBpdHNlbGYsIHNvIGl0IGlzIGxlZnQgdG8gc2luZ2xlLXNwYS5cbiAgICBpZiAocGFyY2VsQ29uZmlnLnRpbWVvdXRzKSB7XG4gICAgICAgIHJldHVybiBwYXJjZWxDb25maWc7XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSBwYXJjZWxDb25maWcubmFtZSA/PyAncGFyY2VsJztcbiAgICBjb25zdCBib3VuZGVkID0gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5rZXlzKGxpZmVjeWNsZURlYWRsaW5lcykuZmlsdGVyKCh3aGljaCk9PnBhcmNlbENvbmZpZ1t3aGljaF0pLm1hcCgod2hpY2gpPT5bXG4gICAgICAgICAgICB3aGljaCxcbiAgICAgICAgICAgIHdpdGhEZWFkbGluZShwYXJjZWxDb25maWdbd2hpY2hdLCBsaWZlY3ljbGVEZWFkbGluZXNbd2hpY2hdLCBuYW1lLCB3aGljaClcbiAgICAgICAgXSkpO1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLnBhcmNlbENvbmZpZyxcbiAgICAgICAgLi4uYm91bmRlZFxuICAgIH07XG59XG4vKipcbiAqIEFwcGxpZXMge0BsaW5rIGJvdW5kTGlmZWN5Y2xlc30gdG8gYSBwYXJjZWwgY29uZmlnLCByZXNvbHZpbmcgdGhlIGZ1bmN0aW9uIGZvcm0gZmlyc3Qgc28gdGhhdCBhXG4gKiBsYXppbHkgbG9hZGVkIGNvbmZpZyBnZXRzIHRoZSBkZWFkbGluZXMgdG9vLlxuICovIGZ1bmN0aW9uIHdpdGhMaWZlY3ljbGVEZWFkbGluZXMocGFyY2VsQ29uZmlnKSB7XG4gICAgaWYgKHR5cGVvZiBwYXJjZWxDb25maWcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuICgpPT5wYXJjZWxDb25maWcoKS50aGVuKGJvdW5kTGlmZWN5Y2xlcyk7XG4gICAgfVxuICAgIHJldHVybiBib3VuZExpZmVjeWNsZXMocGFyY2VsQ29uZmlnKTtcbn1cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gbW91bnQgZXh0ZW5zaW9ucywgd2hpY2ggaXMgdGhlIGBtb3VudFBhcmNlbCgpYCBvZiBhIGxvbmctbGl2ZWRcbiAqIHBhcmNlbCBvZiBvdXIgb3duIHJhdGhlciB0aGFuIHNpbmdsZS1zcGEncyBgbW91bnRSb290UGFyY2VsKClgLlxuICpcbiAqIHNpbmdsZS1zcGEgb25seSByZW1vdmVzIGEgcGFyY2VsIGZyb20gaXRzIG93bmVyJ3MgcmVnaXN0cnkgd2hlbiBpdCB1bm1vdW50cyBpZiB0aGF0IG93bmVyIGhhcyBhXG4gKiBuYW1lLCBhbmQgdGhlIGludGVybmFsIG9iamVjdCBiYWNraW5nIGBtb3VudFJvb3RQYXJjZWwoKWAgaGFzIG5vbmUgKGZpeGVkIGluIHNpbmdsZS1zcGEgNykuXG4gKiBBbnl0aGluZyBtb3VudGVkIHdpdGggaXQgaXMgdGhlcmVmb3JlIHJldGFpbmVkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHBhZ2UsIGFsb25nIHdpdGggdGhlXG4gKiBgZG9tRWxlbWVudGAgaXQgd2FzIGdpdmVuIGFuZCB0aGUgd2hvbGUgc3VidHJlZSByZW5kZXJlZCBpbnRvIGl0LiBFeHRlbnNpb25zIG1vdW50ZWQgdGhyb3VnaCBhXG4gKiBuYW1lZCBvd25lciBhcmUgcHJ1bmVkIGFzIHRoZXkgc2hvdWxkIGJlLlxuICpcbiAqIFRoZSBob3N0IHBhcmNlbCBpcyBtb3VudGVkIGF0IG1vc3Qgb25jZSwgbGF6aWx5LCBhbmQgbmV2ZXIgdW5tb3VudGVkOyBpZiBtb3VudGluZyBpdCBmYWlscyB3ZVxuICogZmFsbCBiYWNrIHRvIGBtb3VudFJvb3RQYXJjZWwoKWAsIHNpbmNlIGxlYWtpbmcgaXMgYmV0dGVyIHRoYW4gbm90IHJlbmRlcmluZy5cbiAqLyBmdW5jdGlvbiBnZXRQYXJjZWxNb3VudGVyKCkge1xuICAgIHBhcmNlbE1vdW50ZXIgPz8gKHBhcmNlbE1vdW50ZXIgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KT0+e1xuICAgICAgICBjb25zdCBob3N0ID0gbW91bnRSb290UGFyY2VsKHtcbiAgICAgICAgICAgIG5hbWU6ICdvcGVubXJzLWV4dGVuc2lvbi1ob3N0JyxcbiAgICAgICAgICAgIGJvb3RzdHJhcDogKCk9PlByb21pc2UucmVzb2x2ZSgpLFxuICAgICAgICAgICAgbW91bnQ6IChwcm9wcyk9PntcbiAgICAgICAgICAgICAgICAvLyBzaW5nbGUtc3BhIHR5cGVzIGEgcGFyY2VsJ3MgbGlmZWN5Y2xlIHByb3BzIGFzIG9ubHkgdGhlIGN1c3RvbSBwcm9wcyBpdCB3YXMgbW91bnRlZFxuICAgICAgICAgICAgICAgIC8vIHdpdGgsIGJ1dCB0aGV5IGFsc28gY2FycnkgdGhlIHByb3BzIHNpbmdsZS1zcGEgaXRzZWxmIGluamVjdHMsIGBtb3VudFBhcmNlbGAgaW5jbHVkZWQuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShwcm9wcy5tb3VudFBhcmNlbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVubW91bnQ6ICgpPT5Qcm9taXNlLnJlc29sdmUoKVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBkb21FbGVtZW50OiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgICAgICB9KTtcbiAgICAgICAgaG9zdC5tb3VudFByb21pc2UuY2F0Y2gocmVqZWN0KTtcbiAgICB9KS5jYXRjaCgoZXJyKT0+e1xuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgaG9zdCBwYXJjZWwgdXNlZCB0byBtb3VudCBleHRlbnNpb25zIGNvdWxkIG5vdCBiZSBtb3VudGVkLiBGYWxsaW5nIGJhY2sgdG8gbW91bnRpbmcgJyArICdleHRlbnNpb25zIGFzIHJvb3QgcGFyY2Vscywgd2hpY2ggbGVha3MgdGhlaXIgRE9NIGVsZW1lbnRzLicsIGVycik7XG4gICAgICAgIHJldHVybiBtb3VudFJvb3RQYXJjZWw7XG4gICAgfSkpO1xuICAgIHJldHVybiBwYXJjZWxNb3VudGVyO1xufVxuLyoqXG4gKiBNb3VudHMgYSBwYXJjZWwgdGhyb3VnaCB0aGUgZnJhbWV3b3JrJ3MgaG9zdCBwYXJjZWwsIHdoaWNoIGxldHMgc2luZ2xlLXNwYSByZWxlYXNlIHRoZSBwYXJjZWwsXG4gKiBpdHMgYGRvbUVsZW1lbnRgIGFuZCBldmVyeXRoaW5nIHJlbmRlcmVkIGludG8gaXQgb25jZSBpdCB1bm1vdW50cy4gUHJlZmVyIHRoaXMgdG8gc2luZ2xlLXNwYSdzXG4gKiBgbW91bnRSb290UGFyY2VsKClgLCB3aGljaCByZXRhaW5zIGFsbCB0aHJlZSBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBwYWdlLlxuICpcbiAqIEBwYXJhbSBwYXJjZWxDb25maWcgVGhlIHBhcmNlbCBjb25maWcsIG9yIGEgZnVuY3Rpb24gdGhhdCBsb2FkcyBvbmVcbiAqIEBwYXJhbSBjdXN0b21Qcm9wcyBUaGUgcHJvcHMgdG8gbW91bnQgdGhlIHBhcmNlbCB3aXRoLCBpbmNsdWRpbmcgdGhlIGBkb21FbGVtZW50YCB0byByZW5kZXIgaW50b1xuICogQHJldHVybnMgVGhlIHBhcmNlbCBoYW5kbGU7IG1vdW50aW5nIGNvbXBsZXRlcyB3aXRoIGl0cyBgbW91bnRQcm9taXNlYFxuICovIGV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJQYXJjZWwocGFyY2VsQ29uZmlnLCBjdXN0b21Qcm9wcykge1xuICAgIGNvbnN0IG1vdW50UGFyY2VsID0gYXdhaXQgZ2V0UGFyY2VsTW91bnRlcigpO1xuICAgIHJldHVybiBtb3VudFBhcmNlbCh3aXRoTGlmZWN5Y2xlRGVhZGxpbmVzKHBhcmNlbENvbmZpZyksIGN1c3RvbVByb3BzKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgdGhlIGVxdWl2YWxlbnQgb2Yge0BsaW5rIHJlbmRlclBhcmNlbH0gZm9yIGNhbGxlcnMgdGhhdCBuZWVkIGEgYG1vdW50UGFyY2VsKClgIHRoZXkgY2FuXG4gKiBjYWxsIHN5bmNocm9ub3VzbHksIHNpbmdsZS1zcGEtcmVhY3QncyBgPFBhcmNlbCBtb3VudFBhcmNlbD17Li4ufSAvPmAgYmVpbmcgdGhlIHVzdWFsIGNhc2UuXG4gKlxuICogVGhlIHBhcmNlbCBpdCByZXR1cm5zIGlzIGEgc3RhbmQtaW4gdW50aWwgdGhlIHJlYWwgb25lIGV4aXN0cywgc28gaXRzIGBnZXRTdGF0dXMoKWAgcmVwb3J0c1xuICogYExPQURJTkdfU09VUkNFX0NPREVgIHJhdGhlciB0aGFuIHRoZSByZWFsIHN0YXR1cyBmb3IgYSBzaG9ydCB3aGlsZSBhZnRlciBtb3VudGluZy4gUHJlZmVyXG4gKiB7QGxpbmsgcmVuZGVyUGFyY2VsfSB3aGVyZXZlciB0aGUgY2FsbGVyIGNhbiBhd2FpdCBpdC5cbiAqXG4gKiBAcmV0dXJucyBBIGBtb3VudFBhcmNlbCgpYCB0aGF0IG1vdW50cyB0aHJvdWdoIHRoZSBob3N0IHBhcmNlbFxuICovIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXJjZWxNb3VudGVyKCkge1xuICAgIHJldHVybiBtb3VudFBhcmNlbDtcbn1cbi8qKlxuICogQWRhcHRzIHRoZSBhc3luY2hyb25vdXMgYHJlbmRlclBhcmNlbCgpYCB0byBzaW5nbGUtc3BhJ3Mgc3luY2hyb25vdXMgYG1vdW50UGFyY2VsKClgIHNpZ25hdHVyZSxcbiAqIGJ5IHJldHVybmluZyBhbiBvYmplY3QgdGhhdCBzdGFuZHMgaW4gZm9yIHRoZSBwYXJjZWwgYW5kIGZvcndhcmRzIGVhY2ggY2FsbCB0byB0aGUgcmVhbCBvbmUgb25jZVxuICogaXQgcmVzb2x2ZXMuIEEgY2FsbGVyIHRoYXQgc2VyaWFsaXNlcyBpdHMgY2FsbHMgb24gYG1vdW50UHJvbWlzZWAsIGFzIHNpbmdsZS1zcGEtcmVhY3Qnc1xuICogYDxQYXJjZWw+YCBkb2VzLCBuZXZlciBvYnNlcnZlcyB0aGUgc3RhbmQtaW47IG9uZSB0aGF0IGRvZXNuJ3Qgc2VlcyBgZ2V0U3RhdHVzKClgIHJlcG9ydFxuICogYExPQURJTkdfU09VUkNFX0NPREVgIHVudGlsIHRoZSBwYXJjZWwgaXMgbW91bnRlZCwgYW5kIGFuIHVubW91bnRlZCBwYXJjZWwncyBgdXBkYXRlKClgIGFuZFxuICogYHVubW91bnQoKWAgZGVmZXJyZWQgcmF0aGVyIHRoYW4gcmVqZWN0ZWQuXG4gKi8gZnVuY3Rpb24gbW91bnRQYXJjZWwoY29uZmlnLCBwcm9wcykge1xuICAgIGxldCBtb3VudGVkO1xuICAgIGNvbnN0IHBlbmRpbmcgPSByZW5kZXJQYXJjZWwoY29uZmlnLCBwcm9wcykudGhlbigocGFyY2VsKT0+bW91bnRlZCA9IHBhcmNlbCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbW91bnQ6ICgpPT5wZW5kaW5nLnRoZW4oKHBhcmNlbCk9PnBhcmNlbC5tb3VudCgpKSxcbiAgICAgICAgdW5tb3VudDogKCk9PnBlbmRpbmcudGhlbigocGFyY2VsKT0+cGFyY2VsLnVubW91bnQoKSksXG4gICAgICAgIHVwZGF0ZTogKGN1c3RvbVByb3BzKT0+cGVuZGluZy50aGVuKChwYXJjZWwpPT5wYXJjZWwudXBkYXRlPy4oY3VzdG9tUHJvcHMpKSxcbiAgICAgICAgZ2V0U3RhdHVzOiAoKT0+bW91bnRlZD8uZ2V0U3RhdHVzKCkgPz8gJ0xPQURJTkdfU09VUkNFX0NPREUnLFxuICAgICAgICAvLyBEZXJpdmVkIGxhemlseSBzbyBhIG1vdW50IGZhaWx1cmUgc3VyZmFjZXMgb25seSBvbiB0aGUgcHJvbWlzZSB0aGUgY2FsbGVyIGFjdHVhbGx5IHJlYWRzLFxuICAgICAgICAvLyBpbnN0ZWFkIG9mIGJlY29taW5nIGFuIHVuaGFuZGxlZCByZWplY3Rpb24gb24gdGhlIG9uZXMgaXQgaWdub3Jlcy5cbiAgICAgICAgZ2V0IGxvYWRQcm9taXNlICgpIHtcbiAgICAgICAgICAgIHJldHVybiBwZW5kaW5nLnRoZW4oKHBhcmNlbCk9PnBhcmNlbC5sb2FkUHJvbWlzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBib290c3RyYXBQcm9taXNlICgpIHtcbiAgICAgICAgICAgIHJldHVybiBwZW5kaW5nLnRoZW4oKHBhcmNlbCk9PnBhcmNlbC5ib290c3RyYXBQcm9taXNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IG1vdW50UHJvbWlzZSAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcGVuZGluZy50aGVuKChwYXJjZWwpPT5wYXJjZWwubW91bnRQcm9taXNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IHVubW91bnRQcm9taXNlICgpIHtcbiAgICAgICAgICAgIHJldHVybiBwZW5kaW5nLnRoZW4oKHBhcmNlbCk9PnBhcmNlbC51bm1vdW50UHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuLyoqXG4gKiBNb3VudHMgaW50byBhIERPTSBub2RlIChyZXByZXNlbnRpbmcgYW4gZXh0ZW5zaW9uIHNsb3QpXG4gKiBhIGxhenktbG9hZGVkIGNvbXBvbmVudCBmcm9tICphbnkqIGZyb250ZW5kIG1vZHVsZVxuICogdGhhdCByZWdpc3RlcmVkIGFuIGV4dGVuc2lvbiBjb21wb25lbnQgZm9yIHRoaXMgc2xvdC5cbiAqLyBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyRXh0ZW5zaW9uKGRvbUVsZW1lbnQsIGV4dGVuc2lvblNsb3ROYW1lLCBleHRlbnNpb25TbG90TW9kdWxlTmFtZSwgZXh0ZW5zaW9uSWQsIHJlbmRlckZ1bmN0aW9uID0gKHgpPT54LCBhZGRpdGlvbmFsUHJvcHMgPSB7fSkge1xuICAgIGNvbnN0IGV4dGVuc2lvbk5hbWUgPSBnZXRFeHRlbnNpb25OYW1lRnJvbUlkKGV4dGVuc2lvbklkKTtcbiAgICBjb25zdCBleHRlbnNpb25SZWdpc3RyYXRpb24gPSBnZXRFeHRlbnNpb25SZWdpc3RyYXRpb24oZXh0ZW5zaW9uSWQpO1xuICAgIGxldCBwYXJjZWwgPSBudWxsO1xuICAgIGlmIChkb21FbGVtZW50KSB7XG4gICAgICAgIGlmICghZXh0ZW5zaW9uUmVnaXN0cmF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgQ291bGRuJ3QgZmluZCBleHRlbnNpb24gJyR7ZXh0ZW5zaW9uTmFtZX0nIHRvIGF0dGFjaCB0byAnJHtleHRlbnNpb25TbG90TmFtZX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBtZXRhLCBtb2R1bGVOYW1lLCBvbmxpbmUsIG9mZmxpbmUsIGxvYWQgfSA9IGV4dGVuc2lvblJlZ2lzdHJhdGlvbjtcbiAgICAgICAgaWYgKGNoZWNrU3RhdHVzKG9ubGluZSwgb2ZmbGluZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gcGFyY2VsQ291bnQrKztcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmluZ0lkID0gYCR7ZXh0ZW5zaW9uU2xvdE5hbWV9LyR7ZXh0ZW5zaW9uSWR9LSR7aWR9YDtcbiAgICAgICAgICAgIC8vIE1hcmtzIHRoZSBub2RlIGZvciB0aGUgVUkgZWRpdG9yLCB3aGljaCBuZWVkcyB0byBwYWlyIGEgcmVuZGVyaW5nIHdpdGggdGhlIGVsZW1lbnQgaXQgd2VudFxuICAgICAgICAgICAgLy8gaW50byBhbmQgY2Fubm90IHRlbGwgdHdvIHJlbmRlcmluZ3Mgb2Ygb25lIGV4dGVuc2lvbiBhcGFydCBieSBhbnkgb3RoZXIgYXR0cmlidXRlLlxuICAgICAgICAgICAgZG9tRWxlbWVudC5kYXRhc2V0LmV4dGVuc2lvblJlbmRlcmluZ0lkID0gcmVuZGVyaW5nSWQ7XG4gICAgICAgICAgICBjb25zdCBmb3JnZXQgPSAoKT0+dW5yZWdpc3RlckV4dGVuc2lvblJlbmRlcmluZyhyZW5kZXJpbmdJZCk7XG4gICAgICAgICAgICBjb25zdCBmb3JnZXRTYWZlbHkgPSAoY2xlYW51cEVycm9yTWVzc2FnZSk9PntcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3JnZXQoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChjbGVhbnVwRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihjbGVhbnVwRXJyb3JNZXNzYWdlLCBjbGVhbnVwRXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBSZWdpc3RlcmVkIGJlZm9yZSBsb2FkaW5nIHNvIHRoYXQgdGhlIGNvbmZpZyBzeXN0ZW0gY2FuIHN0YXJ0IHJlc29sdmluZyB0aGlzIGV4dGVuc2lvbidzXG4gICAgICAgICAgICAvLyBjb25maWcgd2hpbGUgaXRzIGJ1bmRsZSBpcyBzdGlsbCBpbiBmbGlnaHQuIFJlZ2lzdGVyaW5nIGRyaXZlcyB0aGUgY29uZmlnIGRlcml2YXRpb25cbiAgICAgICAgICAgIC8vIHN5bmNocm9ub3VzbHksIHNvIGEgZmFpbHVyZSB0aGVyZSBoYXMgdG8gcmVsZWFzZSB0aGUgcmVjb3JkIGJlZm9yZSBpdCBwcm9wYWdhdGVzIOKAlCBub3RoaW5nXG4gICAgICAgICAgICAvLyBlbHNlIGhhcyBhIGhhbmRsZSBvbiBpdCB5ZXQuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlZ2lzdGVyRXh0ZW5zaW9uUmVuZGVyaW5nKHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyaW5nSWQsXG4gICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbk1vZHVsZU5hbWU6IG1vZHVsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICBzbG90TmFtZTogZXh0ZW5zaW9uU2xvdE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHNsb3RNb2R1bGVOYW1lOiBleHRlbnNpb25TbG90TW9kdWxlTmFtZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGZvcmdldFNhZmVseShgUmVjb21wdXRpbmcgY29uZmlndXJhdGlvbiBhZnRlciByZWdpc3RlcmluZyAnJHtleHRlbnNpb25JZH0nIGZhaWxlZCBhbHNvIGZhaWxlZGApO1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbGlmZWN5Y2xlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsaWZlY3ljbGUgPSBhd2FpdCBsb2FkKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZm9yZ2V0U2FmZWx5KGBSZWNvbXB1dGluZyBjb25maWd1cmF0aW9uIGFmdGVyICcke2V4dGVuc2lvbklkfScgZmFpbGVkIHRvIGxvYWQgYWxzbyBmYWlsZWRgKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJjZWwgPSBhd2FpdCByZW5kZXJQYXJjZWwocmVuZGVyRnVuY3Rpb24oe1xuICAgICAgICAgICAgICAgICAgICAuLi5saWZlY3ljbGUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke2V4dGVuc2lvblNsb3ROYW1lfS8ke2V4dGVuc2lvbk5hbWV9LSR7aWR9YFxuICAgICAgICAgICAgICAgIH0pLCB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmFkZGl0aW9uYWxQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgX21ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgIF9leHRlbnNpb25Db250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvblNsb3ROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uU2xvdE1vZHVsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25Nb2R1bGVOYW1lOiBtb2R1bGVOYW1lXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBmb3JnZXRTYWZlbHkoYFJlY29tcHV0aW5nIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgJyR7ZXh0ZW5zaW9uSWR9JyBmYWlsZWQgdG8gbW91bnQgYWxzbyBmYWlsZWRgKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQSBwYXJjZWwgdGhhdCBmYWlscyB0byBib290c3RyYXAgb3IgbW91bnQgbmV2ZXIgc2V0dGxlcyBgdW5tb3VudFByb21pc2VgLCBzbyB0aGUgbW91bnRcbiAgICAgICAgICAgIC8vIHJlamVjdGlvbiBoYXMgdG8gcmVsZWFzZSB0aGUgcmVjb3JkIHRvby4gc2luZ2xlLXNwYSBoYXJkLWZhaWxzIHBhcmNlbHMsIHNvIGl0cyBvd24gZXJyb3JcbiAgICAgICAgICAgIC8vIGhhbmRsZXJzIG5ldmVyIHNlZSBlaXRoZXIgZmFpbHVyZSBhbmQgdGhlIHJlamVjdGVkIHByb21pc2UgaXMgdGhlIG9ubHkgY2hhbm5lbCBsZWZ0LlxuICAgICAgICAgICAgcGFyY2VsLm1vdW50UHJvbWlzZS50aGVuKHVuZGVmaW5lZCwgKGVycik9PntcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFeHRlbnNpb24gJyR7ZXh0ZW5zaW9uSWR9JyBpbiBzbG90ICcke2V4dGVuc2lvblNsb3ROYW1lfScgZmFpbGVkIHRvIG1vdW50YCwgZXJyKTtcbiAgICAgICAgICAgICAgICBmb3JnZXRTYWZlbHkoYFJlY29tcHV0aW5nIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgJyR7ZXh0ZW5zaW9uSWR9JyBmYWlsZWQgdG8gbW91bnQgYWxzbyBmYWlsZWRgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGFyY2VsLnVubW91bnRQcm9taXNlLnRoZW4oKCk9PmZvcmdldFNhZmVseShgUmVjb21wdXRpbmcgY29uZmlndXJhdGlvbiBhZnRlciB1bm1vdW50aW5nICcke2V4dGVuc2lvbklkfScgZmFpbGVkYCksIChlcnIpPT57XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXh0ZW5zaW9uICcke2V4dGVuc2lvbklkfScgaW4gc2xvdCAnJHtleHRlbnNpb25TbG90TmFtZX0nIGZhaWxlZCB0byB1bm1vdW50YCwgZXJyKTtcbiAgICAgICAgICAgICAgICBmb3JnZXRTYWZlbHkoYFJlY29tcHV0aW5nIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgJyR7ZXh0ZW5zaW9uSWR9JyBmYWlsZWQgdG8gdW5tb3VudCBhbHNvIGZhaWxlZGApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYFRyaWVkIHRvIHJlbmRlciAke2V4dGVuc2lvbklkfSBpbnRvICR7ZXh0ZW5zaW9uU2xvdE5hbWV9IGJ1dCBubyBET00gZWxlbWVudCB3YXMgYXZhaWxhYmxlLmApO1xuICAgIH1cbiAgICByZXR1cm4gcGFyY2VsO1xufVxuIl0sIm5hbWVzIjpbIm1vdW50Um9vdFBhcmNlbCIsImdldEV4dGVuc2lvbk5hbWVGcm9tSWQiLCJnZXRFeHRlbnNpb25SZWdpc3RyYXRpb24iLCJjaGVja1N0YXR1cyIsInJlZ2lzdGVyRXh0ZW5zaW9uUmVuZGVyaW5nIiwidW5yZWdpc3RlckV4dGVuc2lvblJlbmRlcmluZyIsInBhcmNlbENvdW50IiwicGFyY2VsTW91bnRlciIsImxpZmVjeWNsZURlYWRsaW5lcyIsImlzUHJvbWlzZUxpa2UiLCJ2YWx1ZSIsInRoZW5hYmxlIiwidG9TaW5nbGVGbiIsImxpZmVjeWNsZSIsIm5hbWUiLCJ3aGljaCIsImZucyIsIkFycmF5IiwicHJvcHMiLCJjaGFpbiIsImZuIiwiaW5kZXgiLCJyZXN1bHQiLCJQcm9taXNlIiwiRXJyb3IiLCJ1bmRlZmluZWQiLCJ3aXRoRGVhZGxpbmUiLCJtaWxsaXMiLCJydW4iLCJ0aW1lciIsImRlYWRsaW5lIiwiXyIsInJlamVjdCIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJib3VuZExpZmVjeWNsZXMiLCJwYXJjZWxDb25maWciLCJib3VuZGVkIiwiT2JqZWN0Iiwid2l0aExpZmVjeWNsZURlYWRsaW5lcyIsImdldFBhcmNlbE1vdW50ZXIiLCJyZXNvbHZlIiwiaG9zdCIsImRvY3VtZW50IiwiZXJyIiwiY29uc29sZSIsInJlbmRlclBhcmNlbCIsImN1c3RvbVByb3BzIiwibW91bnRQYXJjZWwiLCJjcmVhdGVQYXJjZWxNb3VudGVyIiwiY29uZmlnIiwibW91bnRlZCIsInBlbmRpbmciLCJwYXJjZWwiLCJyZW5kZXJFeHRlbnNpb24iLCJkb21FbGVtZW50IiwiZXh0ZW5zaW9uU2xvdE5hbWUiLCJleHRlbnNpb25TbG90TW9kdWxlTmFtZSIsImV4dGVuc2lvbklkIiwicmVuZGVyRnVuY3Rpb24iLCJ4IiwiYWRkaXRpb25hbFByb3BzIiwiZXh0ZW5zaW9uTmFtZSIsImV4dGVuc2lvblJlZ2lzdHJhdGlvbiIsIm1ldGEiLCJtb2R1bGVOYW1lIiwib25saW5lIiwib2ZmbGluZSIsImxvYWQiLCJpZCIsInJlbmRlcmluZ0lkIiwiZm9yZ2V0IiwiZm9yZ2V0U2FmZWx5IiwiY2xlYW51cEVycm9yTWVzc2FnZSIsImNsZWFudXBFcnJvciIsImUiXSwibWFwcGluZ3MiOiI7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\n//# sourceURL=webpack-internal:///../../framework/esm-extensions/dist/render.js\n\n}");
5784
5784
 
5785
5785
  },
5786
5786
  "../../framework/esm-extensions/dist/store.js"(__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
package/lib/openmrs.js CHANGED
@@ -17,7 +17,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webp
17
17
  },
18
18
  "./src/index.ts"(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
19
19
  "use strict";
20
- eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n setupUtils: () => (setupUtils)\n});\n/* import */ var _federation_runtime__rspack_import_0 = __webpack_require__(\"./src/federation-runtime.ts\");\n/* import */ var _framework_share__rspack_import_1 = __webpack_require__(\"./src/framework-share.ts\");\n\n\n// Before anything else: every frontend module reads the Module Federation runtime from the globals\n// this publishes, and modules are only ever loaded from code reached via `initializeSpa` below.\n(0,_federation_runtime__rspack_import_0.publishFederationRuntime)();\nfunction _createSpaBase(baseUrl) {\n return ()=>baseUrl;\n}\nfunction setupPaths(config) {\n let error = false;\n if (!config.apiUrl) {\n console.error('initializeSpa() was called without supplying an apiUrl. This means that the application cannot communicate with the backend.');\n error = true;\n }\n if (!config.spaPath) {\n console.error('initializeSpa() was called without supplying a spaPath. This means that the application cannot properly generate urls.');\n error = true;\n }\n if (error) {\n throw new Error('One or more required properties in the basic configuration of the application was missing and the application cannot be rendered. Please see the browser console for details.');\n }\n // Object.defineProperty used to make these read-only\n Object.defineProperty(window, 'openmrsBase', {\n value: config.apiUrl,\n writable: false,\n configurable: false\n });\n Object.defineProperty(window, 'spaBase', {\n value: config.spaPath,\n writable: false,\n configurable: false\n });\n Object.defineProperty(window, 'spaEnv', {\n value: config.env || 'production',\n writable: false,\n configurable: false\n });\n Object.defineProperty(window, 'spaVersion', {\n value: \"10.0.1-pre.5378-20260910\" ?? 0,\n writable: false,\n configurable: false\n });\n const spaBaseWithSlash = window.spaBase.endsWith('/') ? window.spaBase : window.spaBase + '/';\n Object.defineProperty(window, 'getOpenmrsSpaBase', {\n value: _createSpaBase(spaBaseWithSlash),\n writable: false,\n configurable: false\n });\n}\nfunction setupUtils() {\n Object.defineProperty(window, 'copyText', {\n value: (source)=>{\n const sel = window.getSelection();\n if (sel) {\n const r = document.createRange();\n r.selectNode(source);\n sel.removeAllRanges();\n sel.addRange(r);\n document.execCommand('copy');\n sel.removeAllRanges();\n }\n },\n writable: false,\n configurable: false\n });\n}\nfunction wireSpaPaths() {\n const baseElement = document.createElement('base');\n const baseHref = window.getOpenmrsSpaBase();\n baseElement.href = baseHref;\n document.head.appendChild(baseElement);\n __webpack_require__.p = baseHref;\n}\nlet initPromise = null;\n/**\n * Initializes the OpenMRS Frontend App Shell.\n * @param config The global configuration to apply.\n */ function initializeSpa(config) {\n if (initPromise) {\n return initPromise;\n }\n setupUtils();\n setupPaths(config);\n wireSpaPaths();\n initPromise = Promise.resolve(__webpack_require__.I('default')).then(async ()=>{\n const shareScope = __webpack_require__.S.default;\n // MF will deduplicate these as they're aliased at build time, but at runtime\n // apps try to load `@openmrs/esm-framework`, so here we provide a runtime\n // alias that resolves to the \"internal\" copy of the framework\n if (shareScope['@openmrs/esm-framework/src/internal'] && !shareScope['@openmrs/esm-framework']) {\n shareScope['@openmrs/esm-framework'] = shareScope['@openmrs/esm-framework/src/internal'];\n }\n // Frontend modules also register their own framework into this scope; this keeps them resolving\n // to the app shell's copy no matter what version they bring.\n (0,_framework_share__rspack_import_1.pinFrameworkToAppShell)(shareScope);\n const { configUrls = [], offline = false } = config;\n Object.defineProperty(window, 'offlineEnabled', {\n value: offline,\n writable: false,\n configurable: false\n });\n const { run } = await Promise.all(/* import() */ [__webpack_require__.e(\"default-webpack_sharing_consume_default_react_react\"), __webpack_require__.e(\"default-webpack_sharing_consume_default_react-dom_react-dom\"), __webpack_require__.e(\"default-node_modules_carbon_icons-react_es_generated_bucket-11_js-node_modules_carbon_icons-r-63ea09\"), __webpack_require__.e(\"default-framework_esm-framework_dist_internal_js\"), __webpack_require__.e(\"default-node_modules_rxjs__esm5_internal_observable_empty_js-node_modules_rxjs__esm5_internal-336f2f\"), __webpack_require__.e(\"default-vendors-node_modules_rxjs__esm5_internal_operators_take_js-node_modules_i18next-brows-3238fc\"), __webpack_require__.e(\"default-src_run_ts\")]).then(__webpack_require__.bind(__webpack_require__, \"./src/run.ts\"));\n return run(configUrls);\n });\n return initPromise;\n}\nObject.defineProperty(window, 'initializeSpa', {\n value: initializeSpa,\n writable: false,\n configurable: false\n});\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbHRpbjpzd2MtbG9hZGVyPz9ydWxlU2V0WzFdLnJ1bGVzWzVdLnVzZVswXSEvaG9tZS9ydW5uZXIvd29yay9vcGVubXJzLWVzbS1jb3JlL29wZW5tcnMtZXNtLWNvcmUvcGFja2FnZXMvc2hlbGwvZXNtLWFwcC1zaGVsbC9zcmMvaW5kZXgudHMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4vc3JjL2luZGV4LnRzPzhjYzUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHVibGlzaEZlZGVyYXRpb25SdW50aW1lIH0gZnJvbSAnLi9mZWRlcmF0aW9uLXJ1bnRpbWUnO1xuaW1wb3J0IHsgcGluRnJhbWV3b3JrVG9BcHBTaGVsbCB9IGZyb20gJy4vZnJhbWV3b3JrLXNoYXJlJztcbmltcG9ydCB0eXBlIHsgU3BhQ29uZmlnIH0gZnJvbSAnQG9wZW5tcnMvZXNtLWZyYW1ld29yay9zcmMvaW50ZXJuYWwnO1xuXG4vLyBCZWZvcmUgYW55dGhpbmcgZWxzZTogZXZlcnkgZnJvbnRlbmQgbW9kdWxlIHJlYWRzIHRoZSBNb2R1bGUgRmVkZXJhdGlvbiBydW50aW1lIGZyb20gdGhlIGdsb2JhbHNcbi8vIHRoaXMgcHVibGlzaGVzLCBhbmQgbW9kdWxlcyBhcmUgb25seSBldmVyIGxvYWRlZCBmcm9tIGNvZGUgcmVhY2hlZCB2aWEgYGluaXRpYWxpemVTcGFgIGJlbG93LlxucHVibGlzaEZlZGVyYXRpb25SdW50aW1lKCk7XG5cbmZ1bmN0aW9uIF9jcmVhdGVTcGFCYXNlKGJhc2VVcmw6IHN0cmluZykge1xuICByZXR1cm4gKCkgPT4gYmFzZVVybDtcbn1cblxuZnVuY3Rpb24gc2V0dXBQYXRocyhjb25maWc6IFNwYUNvbmZpZykge1xuICBsZXQgZXJyb3IgPSBmYWxzZTtcbiAgaWYgKCFjb25maWcuYXBpVXJsKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICdpbml0aWFsaXplU3BhKCkgd2FzIGNhbGxlZCB3aXRob3V0IHN1cHBseWluZyBhbiBhcGlVcmwuIFRoaXMgbWVhbnMgdGhhdCB0aGUgYXBwbGljYXRpb24gY2Fubm90IGNvbW11bmljYXRlIHdpdGggdGhlIGJhY2tlbmQuJyxcbiAgICApO1xuICAgIGVycm9yID0gdHJ1ZTtcbiAgfVxuXG4gIGlmICghY29uZmlnLnNwYVBhdGgpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJ2luaXRpYWxpemVTcGEoKSB3YXMgY2FsbGVkIHdpdGhvdXQgc3VwcGx5aW5nIGEgc3BhUGF0aC4gVGhpcyBtZWFucyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBjYW5ub3QgcHJvcGVybHkgZ2VuZXJhdGUgdXJscy4nLFxuICAgICk7XG4gICAgZXJyb3IgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ09uZSBvciBtb3JlIHJlcXVpcmVkIHByb3BlcnRpZXMgaW4gdGhlIGJhc2ljIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uIHdhcyBtaXNzaW5nIGFuZCB0aGUgYXBwbGljYXRpb24gY2Fubm90IGJlIHJlbmRlcmVkLiBQbGVhc2Ugc2VlIHRoZSBicm93c2VyIGNvbnNvbGUgZm9yIGRldGFpbHMuJyxcbiAgICApO1xuICB9XG5cbiAgLy8gT2JqZWN0LmRlZmluZVByb3BlcnR5IHVzZWQgdG8gbWFrZSB0aGVzZSByZWFkLW9ubHlcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ29wZW5tcnNCYXNlJywge1xuICAgIHZhbHVlOiBjb25maWcuYXBpVXJsLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ3NwYUJhc2UnLCB7XG4gICAgdmFsdWU6IGNvbmZpZy5zcGFQYXRoLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ3NwYUVudicsIHtcbiAgICB2YWx1ZTogY29uZmlnLmVudiB8fCAncHJvZHVjdGlvbicsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnc3BhVmVyc2lvbicsIHtcbiAgICB2YWx1ZTogcHJvY2Vzcy5lbnYuQlVJTERfVkVSU0lPTiA/PyAnbG9jYWwnLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICB9KTtcblxuICBjb25zdCBzcGFCYXNlV2l0aFNsYXNoID0gd2luZG93LnNwYUJhc2UuZW5kc1dpdGgoJy8nKSA/IHdpbmRvdy5zcGFCYXNlIDogd2luZG93LnNwYUJhc2UgKyAnLyc7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICdnZXRPcGVubXJzU3BhQmFzZScsIHtcbiAgICB2YWx1ZTogX2NyZWF0ZVNwYUJhc2Uoc3BhQmFzZVdpdGhTbGFzaCksXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBVdGlscygpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ2NvcHlUZXh0Jywge1xuICAgIHZhbHVlOiAoc291cmNlOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gICAgICBpZiAoc2VsKSB7XG4gICAgICAgIGNvbnN0IHIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICByLnNlbGVjdE5vZGUoc291cmNlKTtcbiAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBzZWwuYWRkUmFuZ2Uocik7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gd2lyZVNwYVBhdGhzKCkge1xuICBjb25zdCBiYXNlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Jhc2UnKTtcbiAgY29uc3QgYmFzZUhyZWYgPSB3aW5kb3cuZ2V0T3Blbm1yc1NwYUJhc2UoKTtcbiAgYmFzZUVsZW1lbnQuaHJlZiA9IGJhc2VIcmVmO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGJhc2VFbGVtZW50KTtcbiAgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gPSBiYXNlSHJlZjtcbn1cblxubGV0IGluaXRQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIE9wZW5NUlMgRnJvbnRlbmQgQXBwIFNoZWxsLlxuICogQHBhcmFtIGNvbmZpZyBUaGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gdG8gYXBwbHkuXG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVTcGEoY29uZmlnOiBTcGFDb25maWcpIHtcbiAgaWYgKGluaXRQcm9taXNlKSB7XG4gICAgcmV0dXJuIGluaXRQcm9taXNlO1xuICB9XG5cbiAgc2V0dXBVdGlscygpO1xuICBzZXR1cFBhdGhzKGNvbmZpZyk7XG4gIHdpcmVTcGFQYXRocygpO1xuICBpbml0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShfX3dlYnBhY2tfaW5pdF9zaGFyaW5nX18oJ2RlZmF1bHQnKSkudGhlbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2hhcmVTY29wZSA9IF9fd2VicGFja19zaGFyZV9zY29wZXNfXy5kZWZhdWx0O1xuICAgIC8vIE1GIHdpbGwgZGVkdXBsaWNhdGUgdGhlc2UgYXMgdGhleSdyZSBhbGlhc2VkIGF0IGJ1aWxkIHRpbWUsIGJ1dCBhdCBydW50aW1lXG4gICAgLy8gYXBwcyB0cnkgdG8gbG9hZCBgQG9wZW5tcnMvZXNtLWZyYW1ld29ya2AsIHNvIGhlcmUgd2UgcHJvdmlkZSBhIHJ1bnRpbWVcbiAgICAvLyBhbGlhcyB0aGF0IHJlc29sdmVzIHRvIHRoZSBcImludGVybmFsXCIgY29weSBvZiB0aGUgZnJhbWV3b3JrXG4gICAgaWYgKHNoYXJlU2NvcGVbJ0BvcGVubXJzL2VzbS1mcmFtZXdvcmsvc3JjL2ludGVybmFsJ10gJiYgIXNoYXJlU2NvcGVbJ0BvcGVubXJzL2VzbS1mcmFtZXdvcmsnXSkge1xuICAgICAgc2hhcmVTY29wZVsnQG9wZW5tcnMvZXNtLWZyYW1ld29yayddID0gc2hhcmVTY29wZVsnQG9wZW5tcnMvZXNtLWZyYW1ld29yay9zcmMvaW50ZXJuYWwnXTtcbiAgICB9XG5cbiAgICAvLyBGcm9udGVuZCBtb2R1bGVzIGFsc28gcmVnaXN0ZXIgdGhlaXIgb3duIGZyYW1ld29yayBpbnRvIHRoaXMgc2NvcGU7IHRoaXMga2VlcHMgdGhlbSByZXNvbHZpbmdcbiAgICAvLyB0byB0aGUgYXBwIHNoZWxsJ3MgY29weSBubyBtYXR0ZXIgd2hhdCB2ZXJzaW9uIHRoZXkgYnJpbmcuXG4gICAgcGluRnJhbWV3b3JrVG9BcHBTaGVsbChzaGFyZVNjb3BlKTtcblxuICAgIGNvbnN0IHsgY29uZmlnVXJscyA9IFtdLCBvZmZsaW5lID0gZmFsc2UgfSA9IGNvbmZpZztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnb2ZmbGluZUVuYWJsZWQnLCB7XG4gICAgICB2YWx1ZTogb2ZmbGluZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IHJ1biB9ID0gYXdhaXQgaW1wb3J0KC8qIHdlYnBhY2tQcmVsb2FkOiB0cnVlICovICcuL3J1bicpO1xuICAgIHJldHVybiBydW4oY29uZmlnVXJscyk7XG4gIH0pO1xuICByZXR1cm4gaW5pdFByb21pc2U7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICdpbml0aWFsaXplU3BhJywge1xuICB2YWx1ZTogaW5pdGlhbGl6ZVNwYSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlLFxufSk7XG4iXSwibmFtZXMiOlsicHVibGlzaEZlZGVyYXRpb25SdW50aW1lIiwicGluRnJhbWV3b3JrVG9BcHBTaGVsbCIsIl9jcmVhdGVTcGFCYXNlIiwiYmFzZVVybCIsInNldHVwUGF0aHMiLCJjb25maWciLCJlcnJvciIsImNvbnNvbGUiLCJFcnJvciIsIk9iamVjdCIsIndpbmRvdyIsInByb2Nlc3MiLCJzcGFCYXNlV2l0aFNsYXNoIiwic2V0dXBVdGlscyIsInNvdXJjZSIsInNlbCIsInIiLCJkb2N1bWVudCIsIndpcmVTcGFQYXRocyIsImJhc2VFbGVtZW50IiwiYmFzZUhyZWYiLCJfX3dlYnBhY2tfcHVibGljX3BhdGhfXyIsImluaXRQcm9taXNlIiwiaW5pdGlhbGl6ZVNwYSIsIlByb21pc2UiLCJfX3dlYnBhY2tfaW5pdF9zaGFyaW5nX18iLCJzaGFyZVNjb3BlIiwiX193ZWJwYWNrX3NoYXJlX3Njb3Blc19fIiwiY29uZmlnVXJscyIsIm9mZmxpbmUiLCJydW4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFnRTtBQUNMO0FBRzNELG1HQUFtRztBQUNuRyxnR0FBZ0c7QUFDaEdBLGlFQUF3QkE7QUFFeEIsU0FBU0UsZUFBZUMsT0FBZTtJQUNyQyxPQUFPLElBQU1BO0FBQ2Y7QUFFQSxTQUFTQyxXQUFXQyxNQUFpQjtJQUNuQyxJQUFJQyxRQUFRO0lBQ1osSUFBSSxDQUFDRCxPQUFPLE1BQU0sRUFBRTtRQUNsQkUsUUFBUSxLQUFLLENBQ1g7UUFFRkQsUUFBUTtJQUNWO0lBRUEsSUFBSSxDQUFDRCxPQUFPLE9BQU8sRUFBRTtRQUNuQkUsUUFBUSxLQUFLLENBQ1g7UUFFRkQsUUFBUTtJQUNWO0lBRUEsSUFBSUEsT0FBTztRQUNULE1BQU0sSUFBSUUsTUFDUjtJ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\n//# sourceURL=webpack-internal:///./src/index.ts\n\n}");
20
+ eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n setupUtils: () => (setupUtils)\n});\n/* import */ var _federation_runtime__rspack_import_0 = __webpack_require__(\"./src/federation-runtime.ts\");\n/* import */ var _framework_share__rspack_import_1 = __webpack_require__(\"./src/framework-share.ts\");\n\n\n// Before anything else: every frontend module reads the Module Federation runtime from the globals\n// this publishes, and modules are only ever loaded from code reached via `initializeSpa` below.\n(0,_federation_runtime__rspack_import_0.publishFederationRuntime)();\nfunction _createSpaBase(baseUrl) {\n return ()=>baseUrl;\n}\nfunction setupPaths(config) {\n let error = false;\n if (!config.apiUrl) {\n console.error('initializeSpa() was called without supplying an apiUrl. This means that the application cannot communicate with the backend.');\n error = true;\n }\n if (!config.spaPath) {\n console.error('initializeSpa() was called without supplying a spaPath. This means that the application cannot properly generate urls.');\n error = true;\n }\n if (error) {\n throw new Error('One or more required properties in the basic configuration of the application was missing and the application cannot be rendered. Please see the browser console for details.');\n }\n // Object.defineProperty used to make these read-only\n Object.defineProperty(window, 'openmrsBase', {\n value: config.apiUrl,\n writable: false,\n configurable: false\n });\n Object.defineProperty(window, 'spaBase', {\n value: config.spaPath,\n writable: false,\n configurable: false\n });\n Object.defineProperty(window, 'spaEnv', {\n value: config.env || 'production',\n writable: false,\n configurable: false\n });\n Object.defineProperty(window, 'spaVersion', {\n value: \"10.0.1-pre.5393-20260912\" ?? 0,\n writable: false,\n configurable: false\n });\n const spaBaseWithSlash = window.spaBase.endsWith('/') ? window.spaBase : window.spaBase + '/';\n Object.defineProperty(window, 'getOpenmrsSpaBase', {\n value: _createSpaBase(spaBaseWithSlash),\n writable: false,\n configurable: false\n });\n}\nfunction setupUtils() {\n Object.defineProperty(window, 'copyText', {\n value: (source)=>{\n const sel = window.getSelection();\n if (sel) {\n const r = document.createRange();\n r.selectNode(source);\n sel.removeAllRanges();\n sel.addRange(r);\n document.execCommand('copy');\n sel.removeAllRanges();\n }\n },\n writable: false,\n configurable: false\n });\n}\nfunction wireSpaPaths() {\n const baseElement = document.createElement('base');\n const baseHref = window.getOpenmrsSpaBase();\n baseElement.href = baseHref;\n document.head.appendChild(baseElement);\n __webpack_require__.p = baseHref;\n}\nlet initPromise = null;\n/**\n * Initializes the OpenMRS Frontend App Shell.\n * @param config The global configuration to apply.\n */ function initializeSpa(config) {\n if (initPromise) {\n return initPromise;\n }\n setupUtils();\n setupPaths(config);\n wireSpaPaths();\n initPromise = Promise.resolve(__webpack_require__.I('default')).then(async ()=>{\n const shareScope = __webpack_require__.S.default;\n // MF will deduplicate these as they're aliased at build time, but at runtime\n // apps try to load `@openmrs/esm-framework`, so here we provide a runtime\n // alias that resolves to the \"internal\" copy of the framework\n if (shareScope['@openmrs/esm-framework/src/internal'] && !shareScope['@openmrs/esm-framework']) {\n shareScope['@openmrs/esm-framework'] = shareScope['@openmrs/esm-framework/src/internal'];\n }\n // Frontend modules also register their own framework into this scope; this keeps them resolving\n // to the app shell's copy no matter what version they bring.\n (0,_framework_share__rspack_import_1.pinFrameworkToAppShell)(shareScope);\n const { configUrls = [], offline = false } = config;\n Object.defineProperty(window, 'offlineEnabled', {\n value: offline,\n writable: false,\n configurable: false\n });\n const { run } = await Promise.all(/* import() */ [__webpack_require__.e(\"default-webpack_sharing_consume_default_react_react\"), __webpack_require__.e(\"default-webpack_sharing_consume_default_react-dom_react-dom\"), __webpack_require__.e(\"default-node_modules_carbon_icons-react_es_generated_bucket-11_js-node_modules_carbon_icons-r-63ea09\"), __webpack_require__.e(\"default-framework_esm-framework_dist_internal_js\"), __webpack_require__.e(\"default-node_modules_rxjs__esm5_internal_observable_empty_js-node_modules_rxjs__esm5_internal-336f2f\"), __webpack_require__.e(\"default-vendors-node_modules_rxjs__esm5_internal_operators_take_js-node_modules_i18next-brows-3238fc\"), __webpack_require__.e(\"default-src_run_ts\")]).then(__webpack_require__.bind(__webpack_require__, \"./src/run.ts\"));\n return run(configUrls);\n });\n return initPromise;\n}\nObject.defineProperty(window, 'initializeSpa', {\n value: initializeSpa,\n writable: false,\n configurable: false\n});\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbHRpbjpzd2MtbG9hZGVyPz9ydWxlU2V0WzFdLnJ1bGVzWzVdLnVzZVswXSEvaG9tZS9ydW5uZXIvd29yay9vcGVubXJzLWVzbS1jb3JlL29wZW5tcnMtZXNtLWNvcmUvcGFja2FnZXMvc2hlbGwvZXNtLWFwcC1zaGVsbC9zcmMvaW5kZXgudHMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4vc3JjL2luZGV4LnRzPzhjYzUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHVibGlzaEZlZGVyYXRpb25SdW50aW1lIH0gZnJvbSAnLi9mZWRlcmF0aW9uLXJ1bnRpbWUnO1xuaW1wb3J0IHsgcGluRnJhbWV3b3JrVG9BcHBTaGVsbCB9IGZyb20gJy4vZnJhbWV3b3JrLXNoYXJlJztcbmltcG9ydCB0eXBlIHsgU3BhQ29uZmlnIH0gZnJvbSAnQG9wZW5tcnMvZXNtLWZyYW1ld29yay9zcmMvaW50ZXJuYWwnO1xuXG4vLyBCZWZvcmUgYW55dGhpbmcgZWxzZTogZXZlcnkgZnJvbnRlbmQgbW9kdWxlIHJlYWRzIHRoZSBNb2R1bGUgRmVkZXJhdGlvbiBydW50aW1lIGZyb20gdGhlIGdsb2JhbHNcbi8vIHRoaXMgcHVibGlzaGVzLCBhbmQgbW9kdWxlcyBhcmUgb25seSBldmVyIGxvYWRlZCBmcm9tIGNvZGUgcmVhY2hlZCB2aWEgYGluaXRpYWxpemVTcGFgIGJlbG93LlxucHVibGlzaEZlZGVyYXRpb25SdW50aW1lKCk7XG5cbmZ1bmN0aW9uIF9jcmVhdGVTcGFCYXNlKGJhc2VVcmw6IHN0cmluZykge1xuICByZXR1cm4gKCkgPT4gYmFzZVVybDtcbn1cblxuZnVuY3Rpb24gc2V0dXBQYXRocyhjb25maWc6IFNwYUNvbmZpZykge1xuICBsZXQgZXJyb3IgPSBmYWxzZTtcbiAgaWYgKCFjb25maWcuYXBpVXJsKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICdpbml0aWFsaXplU3BhKCkgd2FzIGNhbGxlZCB3aXRob3V0IHN1cHBseWluZyBhbiBhcGlVcmwuIFRoaXMgbWVhbnMgdGhhdCB0aGUgYXBwbGljYXRpb24gY2Fubm90IGNvbW11bmljYXRlIHdpdGggdGhlIGJhY2tlbmQuJyxcbiAgICApO1xuICAgIGVycm9yID0gdHJ1ZTtcbiAgfVxuXG4gIGlmICghY29uZmlnLnNwYVBhdGgpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJ2luaXRpYWxpemVTcGEoKSB3YXMgY2FsbGVkIHdpdGhvdXQgc3VwcGx5aW5nIGEgc3BhUGF0aC4gVGhpcyBtZWFucyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBjYW5ub3QgcHJvcGVybHkgZ2VuZXJhdGUgdXJscy4nLFxuICAgICk7XG4gICAgZXJyb3IgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ09uZSBvciBtb3JlIHJlcXVpcmVkIHByb3BlcnRpZXMgaW4gdGhlIGJhc2ljIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uIHdhcyBtaXNzaW5nIGFuZCB0aGUgYXBwbGljYXRpb24gY2Fubm90IGJlIHJlbmRlcmVkLiBQbGVhc2Ugc2VlIHRoZSBicm93c2VyIGNvbnNvbGUgZm9yIGRldGFpbHMuJyxcbiAgICApO1xuICB9XG5cbiAgLy8gT2JqZWN0LmRlZmluZVByb3BlcnR5IHVzZWQgdG8gbWFrZSB0aGVzZSByZWFkLW9ubHlcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ29wZW5tcnNCYXNlJywge1xuICAgIHZhbHVlOiBjb25maWcuYXBpVXJsLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ3NwYUJhc2UnLCB7XG4gICAgdmFsdWU6IGNvbmZpZy5zcGFQYXRoLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ3NwYUVudicsIHtcbiAgICB2YWx1ZTogY29uZmlnLmVudiB8fCAncHJvZHVjdGlvbicsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnc3BhVmVyc2lvbicsIHtcbiAgICB2YWx1ZTogcHJvY2Vzcy5lbnYuQlVJTERfVkVSU0lPTiA/PyAnbG9jYWwnLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICB9KTtcblxuICBjb25zdCBzcGFCYXNlV2l0aFNsYXNoID0gd2luZG93LnNwYUJhc2UuZW5kc1dpdGgoJy8nKSA/IHdpbmRvdy5zcGFCYXNlIDogd2luZG93LnNwYUJhc2UgKyAnLyc7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICdnZXRPcGVubXJzU3BhQmFzZScsIHtcbiAgICB2YWx1ZTogX2NyZWF0ZVNwYUJhc2Uoc3BhQmFzZVdpdGhTbGFzaCksXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBVdGlscygpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ2NvcHlUZXh0Jywge1xuICAgIHZhbHVlOiAoc291cmNlOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gICAgICBpZiAoc2VsKSB7XG4gICAgICAgIGNvbnN0IHIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICByLnNlbGVjdE5vZGUoc291cmNlKTtcbiAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBzZWwuYWRkUmFuZ2Uocik7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gd2lyZVNwYVBhdGhzKCkge1xuICBjb25zdCBiYXNlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Jhc2UnKTtcbiAgY29uc3QgYmFzZUhyZWYgPSB3aW5kb3cuZ2V0T3Blbm1yc1NwYUJhc2UoKTtcbiAgYmFzZUVsZW1lbnQuaHJlZiA9IGJhc2VIcmVmO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGJhc2VFbGVtZW50KTtcbiAgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gPSBiYXNlSHJlZjtcbn1cblxubGV0IGluaXRQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIE9wZW5NUlMgRnJvbnRlbmQgQXBwIFNoZWxsLlxuICogQHBhcmFtIGNvbmZpZyBUaGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gdG8gYXBwbHkuXG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVTcGEoY29uZmlnOiBTcGFDb25maWcpIHtcbiAgaWYgKGluaXRQcm9taXNlKSB7XG4gICAgcmV0dXJuIGluaXRQcm9taXNlO1xuICB9XG5cbiAgc2V0dXBVdGlscygpO1xuICBzZXR1cFBhdGhzKGNvbmZpZyk7XG4gIHdpcmVTcGFQYXRocygpO1xuICBpbml0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShfX3dlYnBhY2tfaW5pdF9zaGFyaW5nX18oJ2RlZmF1bHQnKSkudGhlbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2hhcmVTY29wZSA9IF9fd2VicGFja19zaGFyZV9zY29wZXNfXy5kZWZhdWx0O1xuICAgIC8vIE1GIHdpbGwgZGVkdXBsaWNhdGUgdGhlc2UgYXMgdGhleSdyZSBhbGlhc2VkIGF0IGJ1aWxkIHRpbWUsIGJ1dCBhdCBydW50aW1lXG4gICAgLy8gYXBwcyB0cnkgdG8gbG9hZCBgQG9wZW5tcnMvZXNtLWZyYW1ld29ya2AsIHNvIGhlcmUgd2UgcHJvdmlkZSBhIHJ1bnRpbWVcbiAgICAvLyBhbGlhcyB0aGF0IHJlc29sdmVzIHRvIHRoZSBcImludGVybmFsXCIgY29weSBvZiB0aGUgZnJhbWV3b3JrXG4gICAgaWYgKHNoYXJlU2NvcGVbJ0BvcGVubXJzL2VzbS1mcmFtZXdvcmsvc3JjL2ludGVybmFsJ10gJiYgIXNoYXJlU2NvcGVbJ0BvcGVubXJzL2VzbS1mcmFtZXdvcmsnXSkge1xuICAgICAgc2hhcmVTY29wZVsnQG9wZW5tcnMvZXNtLWZyYW1ld29yayddID0gc2hhcmVTY29wZVsnQG9wZW5tcnMvZXNtLWZyYW1ld29yay9zcmMvaW50ZXJuYWwnXTtcbiAgICB9XG5cbiAgICAvLyBGcm9udGVuZCBtb2R1bGVzIGFsc28gcmVnaXN0ZXIgdGhlaXIgb3duIGZyYW1ld29yayBpbnRvIHRoaXMgc2NvcGU7IHRoaXMga2VlcHMgdGhlbSByZXNvbHZpbmdcbiAgICAvLyB0byB0aGUgYXBwIHNoZWxsJ3MgY29weSBubyBtYXR0ZXIgd2hhdCB2ZXJzaW9uIHRoZXkgYnJpbmcuXG4gICAgcGluRnJhbWV3b3JrVG9BcHBTaGVsbChzaGFyZVNjb3BlKTtcblxuICAgIGNvbnN0IHsgY29uZmlnVXJscyA9IFtdLCBvZmZsaW5lID0gZmFsc2UgfSA9IGNvbmZpZztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnb2ZmbGluZUVuYWJsZWQnLCB7XG4gICAgICB2YWx1ZTogb2ZmbGluZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IHJ1biB9ID0gYXdhaXQgaW1wb3J0KC8qIHdlYnBhY2tQcmVsb2FkOiB0cnVlICovICcuL3J1bicpO1xuICAgIHJldHVybiBydW4oY29uZmlnVXJscyk7XG4gIH0pO1xuICByZXR1cm4gaW5pdFByb21pc2U7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICdpbml0aWFsaXplU3BhJywge1xuICB2YWx1ZTogaW5pdGlhbGl6ZVNwYSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlLFxufSk7XG4iXSwibmFtZXMiOlsicHVibGlzaEZlZGVyYXRpb25SdW50aW1lIiwicGluRnJhbWV3b3JrVG9BcHBTaGVsbCIsIl9jcmVhdGVTcGFCYXNlIiwiYmFzZVVybCIsInNldHVwUGF0aHMiLCJjb25maWciLCJlcnJvciIsImNvbnNvbGUiLCJFcnJvciIsIk9iamVjdCIsIndpbmRvdyIsInByb2Nlc3MiLCJzcGFCYXNlV2l0aFNsYXNoIiwic2V0dXBVdGlscyIsInNvdXJjZSIsInNlbCIsInIiLCJkb2N1bWVudCIsIndpcmVTcGFQYXRocyIsImJhc2VFbGVtZW50IiwiYmFzZUhyZWYiLCJfX3dlYnBhY2tfcHVibGljX3BhdGhfXyIsImluaXRQcm9taXNlIiwiaW5pdGlhbGl6ZVNwYSIsIlByb21pc2UiLCJfX3dlYnBhY2tfaW5pdF9zaGFyaW5nX18iLCJzaGFyZVNjb3BlIiwiX193ZWJwYWNrX3NoYXJlX3Njb3Blc19fIiwiY29uZmlnVXJscyIsIm9mZmxpbmUiLCJydW4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFnRTtBQUNMO0FBRzNELG1HQUFtRztBQUNuRyxnR0FBZ0c7QUFDaEdBLGlFQUF3QkE7QUFFeEIsU0FBU0UsZUFBZUMsT0FBZTtJQUNyQyxPQUFPLElBQU1BO0FBQ2Y7QUFFQSxTQUFTQyxXQUFXQyxNQUFpQjtJQUNuQyxJQUFJQyxRQUFRO0lBQ1osSUFBSSxDQUFDRCxPQUFPLE1BQU0sRUFBRTtRQUNsQkUsUUFBUSxLQUFLLENBQ1g7UUFFRkQsUUFBUTtJQUNWO0lBRUEsSUFBSSxDQUFDRCxPQUFPLE9BQU8sRUFBRTtRQUNuQkUsUUFBUSxLQUFLLENBQ1g7UUFFRkQsUUFBUTtJQUNWO0lBRUEsSUFBSUEsT0FBTztRQUNULE1BQU0sSUFBSUUsTUFDUjtJ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\n//# sourceURL=webpack-internal:///./src/index.ts\n\n}");
21
21
 
22
22
  },
23
23
  "@module-federation/runtime/rspack.js!=!data:text/javascript,import __module_federation_bundler_runtime__ from \"/home/runner/work/openmrs-esm-core/openmrs-esm-core/node_modules/@module-federation/webpack-bundler-runtime/dist/index.cjs\";import __module_federation_runtime_plugin_0__ from \"/home/runner/work/openmrs-esm-core/openmrs-esm-core/node_modules/@module-federation/inject-external-runtime-core-plugin/dist/index.cjs\";const __module_federation_runtime_plugins__ = [{ plugin: __module_federation_runtime_plugin_0__, params: undefined }].filter(({ plugin }) => plugin).map(({ plugin, params }) => plugin(params));const __module_federation_remote_infos__ = {};const __module_federation_container_name__ = \"@openmrs/esm-app-shell\";const __module_federation_share_strategy__ = \"version-first\";if((__webpack_require__.initializeSharingData||__webpack_require__.initializeExposesData)&&__webpack_require__.federation){var _ref,_ref1,_ref2,_ref3,_ref4;var __webpack_require___remotesLoadingData,__webpack_require___remotesLoadingData1,__webpack_require___initializeSharingData,__webpack_require___consumesLoadingData,__webpack_require___consumesLoadingData1,__webpack_require___initializeExposesData,__webpack_require___consumesLoadingData2;const override=(obj,key,value)=>{if(!obj)return;if(obj[key])obj[key]=value};const merge=(obj,key,fn)=>{const value=fn();if(Array.isArray(value)){var _obj,_key,_;(_=(_obj=obj)[_key=key])!==null&&_!==void 0?_:_obj[_key]=[];obj[key].push(...value)}else if(typeof value===\"object\"&&value!==null){var _obj1,_key1,_1;(_1=(_obj1=obj)[_key1=key])!==null&&_1!==void 0?_1:_obj1[_key1]={};Object.assign(obj[key],value)}};const early=(obj,key,initial)=>{var _obj,_key,_;(_=(_obj=obj)[_key=key])!==null&&_!==void 0?_:_obj[_key]=initial()};const remotesLoadingChunkMapping=(_ref=(__webpack_require___remotesLoadingData=__webpack_require__.remotesLoadingData)===null||__webpack_require___remotesLoadingData===void 0?void 0:__webpack_require___remotesLoadingData.chunkMapping)!==null&&_ref!==void 0?_ref:{};const remotesLoadingModuleIdToRemoteDataMapping=(_ref1=(__webpack_require___remotesLoadingData1=__webpack_require__.remotesLoadingData)===null||__webpack_require___remotesLoadingData1===void 0?void 0:__webpack_require___remotesLoadingData1.moduleIdToRemoteDataMapping)!==null&&_ref1!==void 0?_ref1:{};const initializeSharingScopeToInitDataMapping=(_ref2=(__webpack_require___initializeSharingData=__webpack_require__.initializeSharingData)===null||__webpack_require___initializeSharingData===void 0?void 0:__webpack_require___initializeSharingData.scopeToSharingDataMapping)!==null&&_ref2!==void 0?_ref2:{};const consumesLoadingChunkMapping=(_ref3=(__webpack_require___consumesLoadingData=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData===void 0?void 0:__webpack_require___consumesLoadingData.chunkMapping)!==null&&_ref3!==void 0?_ref3:{};const consumesLoadingModuleToConsumeDataMapping=(_ref4=(__webpack_require___consumesLoadingData1=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData1===void 0?void 0:__webpack_require___consumesLoadingData1.moduleIdToConsumeDataMapping)!==null&&_ref4!==void 0?_ref4:{};const consumesLoadinginstalledModules={};const initializeSharingInitPromises=[];const initializeSharingInitTokens={};const containerShareScope=(__webpack_require___initializeExposesData=__webpack_require__.initializeExposesData)===null||__webpack_require___initializeExposesData===void 0?void 0:__webpack_require___initializeExposesData.shareScope;for(const key in __module_federation_bundler_runtime__){__webpack_require__.federation[key]=__module_federation_bundler_runtime__[key]}early(__webpack_require__.federation,\"consumesLoadingModuleToHandlerMapping\",()=>{const consumesLoadingModuleToHandlerMapping={};for(let[moduleId,data]of Object.entries(consumesLoadingModuleToConsumeDataMapping)){consumesLoadingModuleToHandlerMapping[moduleId]={getter:data.fallback,shareInfo:{shareConfig:{fixedDependencies:false,requiredVersion:data.requiredVersion,strictVersion:data.strictVersion,singleton:data.singleton,eager:data.eager},scope:[data.shareScope]},shareKey:data.shareKey}}return consumesLoadingModuleToHandlerMapping});early(__webpack_require__.federation,\"initOptions\",()=>({}));early(__webpack_require__.federation.initOptions,\"name\",()=>__module_federation_container_name__);early(__webpack_require__.federation.initOptions,\"shareStrategy\",()=>__module_federation_share_strategy__);early(__webpack_require__.federation.initOptions,\"shared\",()=>{const shared={};for(let[scope,stages]of Object.entries(initializeSharingScopeToInitDataMapping)){for(let stage of stages){if(typeof stage===\"object\"&&stage!==null){const{name,version,factory,eager,singleton,requiredVersion,strictVersion}=stage;const shareConfig={};const isValidValue=function(val){return typeof val!==\"undefined\"};if(isValidValue(singleton)){shareConfig.singleton=singleton}if(isValidValue(requiredVersion)){shareConfig.requiredVersion=requiredVersion}if(isValidValue(eager)){shareConfig.eager=eager}if(isValidValue(strictVersion)){shareConfig.strictVersion=strictVersion}const options={version,scope:[scope],shareConfig,get:factory};if(shared[name]){shared[name].push(options)}else{shared[name]=[options]}}}}return shared});merge(__webpack_require__.federation.initOptions,\"remotes\",()=>Object.values(__module_federation_remote_infos__).flat().filter(remote=>remote.externalType===\"script\"));merge(__webpack_require__.federation.initOptions,\"plugins\",()=>__module_federation_runtime_plugins__);early(__webpack_require__.federation,\"bundlerRuntimeOptions\",()=>({}));early(__webpack_require__.federation.bundlerRuntimeOptions,\"remotes\",()=>({}));early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\"chunkMapping\",()=>remotesLoadingChunkMapping);early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\"remoteInfos\",()=>__module_federation_remote_infos__);early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\"idToExternalAndNameMapping\",()=>{const remotesLoadingIdToExternalAndNameMappingMapping={};for(let[moduleId,data]of Object.entries(remotesLoadingModuleIdToRemoteDataMapping)){remotesLoadingIdToExternalAndNameMappingMapping[moduleId]=[data.shareScope,data.name,data.externalModuleId,data.remoteName]}return remotesLoadingIdToExternalAndNameMappingMapping});early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\"webpackRequire\",()=>__webpack_require__);merge(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\"idToRemoteMap\",()=>{const idToRemoteMap={};for(let[id,remoteData]of Object.entries(remotesLoadingModuleIdToRemoteDataMapping)){const info=__module_federation_remote_infos__[remoteData.remoteName];if(info)idToRemoteMap[id]=info}return idToRemoteMap});override(__webpack_require__,\"S\",__webpack_require__.federation.bundlerRuntime.S);if(__webpack_require__.federation.attachShareScopeMap){__webpack_require__.federation.attachShareScopeMap(__webpack_require__)}override(__webpack_require__.f,\"remotes\",(chunkId,promises)=>__webpack_require__.federation.bundlerRuntime.remotes({chunkId,promises,chunkMapping:remotesLoadingChunkMapping,idToExternalAndNameMapping:__webpack_require__.federation.bundlerRuntimeOptions.remotes.idToExternalAndNameMapping,idToRemoteMap:__webpack_require__.federation.bundlerRuntimeOptions.remotes.idToRemoteMap,webpackRequire:__webpack_require__}));override(__webpack_require__.f,\"consumes\",(chunkId,promises)=>__webpack_require__.federation.bundlerRuntime.consumes({chunkId,promises,chunkMapping:consumesLoadingChunkMapping,moduleToHandlerMapping:__webpack_require__.federation.consumesLoadingModuleToHandlerMapping,installedModules:consumesLoadinginstalledModules,webpackRequire:__webpack_require__}));override(__webpack_require__,\"I\",(name,initScope)=>__webpack_require__.federation.bundlerRuntime.I({shareScopeName:name,initScope,initPromises:initializeSharingInitPromises,initTokens:initializeSharingInitTokens,webpackRequire:__webpack_require__}));override(__webpack_require__,\"initContainer\",(shareScope,initScope,remoteEntryInitOptions)=>__webpack_require__.federation.bundlerRuntime.initContainerEntry({shareScope,initScope,remoteEntryInitOptions,shareScopeKey:containerShareScope,webpackRequire:__webpack_require__}));override(__webpack_require__,\"getContainer\",(module1,getScope)=>{var moduleMap=__webpack_require__.initializeExposesData.moduleMap;__webpack_require__.R=getScope;getScope=Object.prototype.hasOwnProperty.call(moduleMap,module1)?moduleMap[module1]():Promise.resolve().then(()=>{throw new Error('Module \"'+module1+'\" does not exist in container.')});__webpack_require__.R=undefined;return getScope});__webpack_require__.federation.instance=__webpack_require__.federation.runtime.init(__webpack_require__.federation.initOptions);if((__webpack_require___consumesLoadingData2=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData2===void 0?void 0:__webpack_require___consumesLoadingData2.initialConsumes){__webpack_require__.federation.bundlerRuntime.installInitialConsumes({webpackRequire:__webpack_require__,installedModules:consumesLoadinginstalledModules,initialConsumes:__webpack_require__.consumesLoadingData.initialConsumes,moduleToHandlerMapping:__webpack_require__.federation.consumesLoadingModuleToHandlerMapping})}}"(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
@@ -122,7 +122,7 @@ eval("{\n//#region src/utils/context.ts\nfunction remoteToEntry(r) {\n\treturn {
122
122
 
123
123
  },
124
124
  "../../../node_modules/@module-federation/runtime-core/dist/utils/env.cjs"(__unused_rspack_module, exports, __webpack_require__) {
125
- eval("{let _module_federation_sdk = __webpack_require__(\"../../../node_modules/@module-federation/sdk/dist/index.cjs\");\n\n//#region src/utils/env.ts\nfunction getBuilderId() {\n\treturn true ? \"@openmrs/esm-app-shell:10.0.1-pre.5378\" : 0;\n}\n\n//#endregion\nexports.getBuilderId = getBuilderId;\n//# sourceMappingURL=env.cjs.map\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC9keW5hbWljfC9ob21lL3J1bm5lci93b3JrL29wZW5tcnMtZXNtLWNvcmUvb3Blbm1ycy1lc20tY29yZS9ub2RlX21vZHVsZXMvQG1vZHVsZS1mZWRlcmF0aW9uL3J1bnRpbWUtY29yZS9kaXN0L3V0aWxzL2Vudi5janMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AbW9kdWxlLWZlZGVyYXRpb24vcnVudGltZS1jb3JlL2Rpc3QvdXRpbHMvZW52LmNqcz83ZWJhIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBfbW9kdWxlX2ZlZGVyYXRpb25fc2RrID0gcmVxdWlyZShcIkBtb2R1bGUtZmVkZXJhdGlvbi9zZGtcIik7XG5cbi8vI3JlZ2lvbiBzcmMvdXRpbHMvZW52LnRzXG5mdW5jdGlvbiBnZXRCdWlsZGVySWQoKSB7XG5cdHJldHVybiB0eXBlb2YgRkVERVJBVElPTl9CVUlMRF9JREVOVElGSUVSICE9PSBcInVuZGVmaW5lZFwiID8gRkVERVJBVElPTl9CVUlMRF9JREVOVElGSUVSIDogXCJcIjtcbn1cblxuLy8jZW5kcmVnaW9uXG5leHBvcnRzLmdldEJ1aWxkZXJJZCA9IGdldEJ1aWxkZXJJZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVudi5janMubWFwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QixtQkFBTyxDQUFDLDZEQUF3Qjs7QUFFN0Q7QUFDQTtBQUNBLFFBQVEsS0FBa0QsR0FBRyx3Q0FBMkIsR0FBRyxDQUFFO0FBQzdGOztBQUVBO0FBQ0Esb0JBQW9CO0FBQ3BCIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@module-federation/runtime-core/dist/utils/env.cjs\n\n}");
125
+ eval("{let _module_federation_sdk = __webpack_require__(\"../../../node_modules/@module-federation/sdk/dist/index.cjs\");\n\n//#region src/utils/env.ts\nfunction getBuilderId() {\n\treturn true ? \"@openmrs/esm-app-shell:10.0.1-pre.5393\" : 0;\n}\n\n//#endregion\nexports.getBuilderId = getBuilderId;\n//# sourceMappingURL=env.cjs.map\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC9keW5hbWljfC9ob21lL3J1bm5lci93b3JrL29wZW5tcnMtZXNtLWNvcmUvb3Blbm1ycy1lc20tY29yZS9ub2RlX21vZHVsZXMvQG1vZHVsZS1mZWRlcmF0aW9uL3J1bnRpbWUtY29yZS9kaXN0L3V0aWxzL2Vudi5janMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AbW9kdWxlLWZlZGVyYXRpb24vcnVudGltZS1jb3JlL2Rpc3QvdXRpbHMvZW52LmNqcz83ZWJhIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBfbW9kdWxlX2ZlZGVyYXRpb25fc2RrID0gcmVxdWlyZShcIkBtb2R1bGUtZmVkZXJhdGlvbi9zZGtcIik7XG5cbi8vI3JlZ2lvbiBzcmMvdXRpbHMvZW52LnRzXG5mdW5jdGlvbiBnZXRCdWlsZGVySWQoKSB7XG5cdHJldHVybiB0eXBlb2YgRkVERVJBVElPTl9CVUlMRF9JREVOVElGSUVSICE9PSBcInVuZGVmaW5lZFwiID8gRkVERVJBVElPTl9CVUlMRF9JREVOVElGSUVSIDogXCJcIjtcbn1cblxuLy8jZW5kcmVnaW9uXG5leHBvcnRzLmdldEJ1aWxkZXJJZCA9IGdldEJ1aWxkZXJJZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVudi5janMubWFwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QixtQkFBTyxDQUFDLDZEQUF3Qjs7QUFFN0Q7QUFDQTtBQUNBLFFBQVEsS0FBa0QsR0FBRyx3Q0FBMkIsR0FBRyxDQUFFO0FBQzdGOztBQUVBO0FBQ0Esb0JBQW9CO0FBQ3BCIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@module-federation/runtime-core/dist/utils/env.cjs\n\n}");
126
126
 
127
127
  },
128
128
  "../../../node_modules/@module-federation/runtime-core/dist/utils/hooks/asyncHook.cjs"(__unused_rspack_module, exports, __webpack_require__) {
@@ -218,7 +218,7 @@ eval("{Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\
218
218
 
219
219
  },
220
220
  "../../../node_modules/@module-federation/runtime-tools/node_modules/@module-federation/runtime/dist/utils.cjs"(__unused_rspack_module, exports, __webpack_require__) {
221
- eval("{const require_runtime = __webpack_require__(\"../../../node_modules/@module-federation/runtime-tools/node_modules/@module-federation/runtime/dist/_virtual/_rolldown/runtime.cjs\");\nlet _module_federation_runtime_core = __webpack_require__(\"../../../node_modules/@module-federation/runtime-core/dist/index.cjs\");\n\n//#region src/utils.ts\nfunction getBuilderId() {\n\treturn true ? \"@openmrs/esm-app-shell:10.0.1-pre.5378\" : 0;\n}\nfunction getGlobalFederationInstance(name, version) {\n\tconst buildId = getBuilderId();\n\treturn _module_federation_runtime_core.CurrentGlobal.__FEDERATION__.__INSTANCES__.find((GMInstance) => {\n\t\tif (buildId && GMInstance.options.id === buildId) return true;\n\t\tif (GMInstance.options.name === name && !GMInstance.options.version && !version) return true;\n\t\tif (GMInstance.options.name === name && version && GMInstance.options.version === version) return true;\n\t\treturn false;\n\t});\n}\n\n//#endregion\nexports.getGlobalFederationInstance = getGlobalFederationInstance;\n//# sourceMappingURL=utils.cjs.map\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC9keW5hbWljfC9ob21lL3J1bm5lci93b3JrL29wZW5tcnMtZXNtLWNvcmUvb3Blbm1ycy1lc20tY29yZS9ub2RlX21vZHVsZXMvQG1vZHVsZS1mZWRlcmF0aW9uL3J1bnRpbWUtdG9vbHMvbm9kZV9tb2R1bGVzL0Btb2R1bGUtZmVkZXJhdGlvbi9ydW50aW1lL2Rpc3QvdXRpbHMuY2pzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG1vZHVsZS1mZWRlcmF0aW9uL3J1bnRpbWUtdG9vbHMvbm9kZV9tb2R1bGVzL0Btb2R1bGUtZmVkZXJhdGlvbi9ydW50aW1lL2Rpc3QvdXRpbHMuY2pzP2QxMTgiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgcmVxdWlyZV9ydW50aW1lID0gcmVxdWlyZSgnLi9fdmlydHVhbC9fcm9sbGRvd24vcnVudGltZS5janMnKTtcbmxldCBfbW9kdWxlX2ZlZGVyYXRpb25fcnVudGltZV9jb3JlID0gcmVxdWlyZShcIkBtb2R1bGUtZmVkZXJhdGlvbi9ydW50aW1lLWNvcmVcIik7XG5cbi8vI3JlZ2lvbiBzcmMvdXRpbHMudHNcbmZ1bmN0aW9uIGdldEJ1aWxkZXJJZCgpIHtcblx0cmV0dXJuIHR5cGVvZiBGRURFUkFUSU9OX0JVSUxEX0lERU5USUZJRVIgIT09IFwidW5kZWZpbmVkXCIgPyBGRURFUkFUSU9OX0JVSUxEX0lERU5USUZJRVIgOiBcIlwiO1xufVxuZnVuY3Rpb24gZ2V0R2xvYmFsRmVkZXJhdGlvbkluc3RhbmNlKG5hbWUsIHZlcnNpb24pIHtcblx0Y29uc3QgYnVpbGRJZCA9IGdldEJ1aWxkZXJJZCgpO1xuXHRyZXR1cm4gX21vZHVsZV9mZWRlcmF0aW9uX3J1bnRpbWVfY29yZS5DdXJyZW50R2xvYmFsLl9fRkVERVJBVElPTl9fLl9fSU5TVEFOQ0VTX18uZmluZCgoR01JbnN0YW5jZSkgPT4ge1xuXHRcdGlmIChidWlsZElkICYmIEdNSW5zdGFuY2Uub3B0aW9ucy5pZCA9PT0gYnVpbGRJZCkgcmV0dXJuIHRydWU7XG5cdFx0aWYgKEdNSW5zdGFuY2Uub3B0aW9ucy5uYW1lID09PSBuYW1lICYmICFHTUluc3RhbmNlLm9wdGlvbnMudmVyc2lvbiAmJiAhdmVyc2lvbikgcmV0dXJuIHRydWU7XG5cdFx0aWYgKEdNSW5zdGFuY2Uub3B0aW9ucy5uYW1lID09PSBuYW1lICYmIHZlcnNpb24gJiYgR01JbnN0YW5jZS5vcHRpb25zLnZlcnNpb24gPT09IHZlcnNpb24pIHJldHVybiB0cnVlO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8vI2VuZHJlZ2lvblxuZXhwb3J0cy5nZXRHbG9iYWxGZWRlcmF0aW9uSW5zdGFuY2UgPSBnZXRHbG9iYWxGZWRlcmF0aW9uSW5zdGFuY2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5janMubWFwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdCQUF3QixtQkFBTyxDQUFDLG9JQUFrQztBQUNsRSxzQ0FBc0MsbUJBQU8sQ0FBQyxzRUFBaUM7O0FBRS9FO0FBQ0E7QUFDQSxRQUFRLEtBQWtELEdBQUcsd0NBQTJCLEdBQUcsQ0FBRTtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0EsbUNBQW1DO0FBQ25DIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@module-federation/runtime-tools/node_modules/@module-federation/runtime/dist/utils.cjs\n\n}");
221
+ eval("{const require_runtime = __webpack_require__(\"../../../node_modules/@module-federation/runtime-tools/node_modules/@module-federation/runtime/dist/_virtual/_rolldown/runtime.cjs\");\nlet _module_federation_runtime_core = __webpack_require__(\"../../../node_modules/@module-federation/runtime-core/dist/index.cjs\");\n\n//#region src/utils.ts\nfunction getBuilderId() {\n\treturn true ? \"@openmrs/esm-app-shell:10.0.1-pre.5393\" : 0;\n}\nfunction getGlobalFederationInstance(name, version) {\n\tconst buildId = getBuilderId();\n\treturn _module_federation_runtime_core.CurrentGlobal.__FEDERATION__.__INSTANCES__.find((GMInstance) => {\n\t\tif (buildId && GMInstance.options.id === buildId) return true;\n\t\tif (GMInstance.options.name === name && !GMInstance.options.version && !version) return true;\n\t\tif (GMInstance.options.name === name && version && GMInstance.options.version === version) return true;\n\t\treturn false;\n\t});\n}\n\n//#endregion\nexports.getGlobalFederationInstance = getGlobalFederationInstance;\n//# sourceMappingURL=utils.cjs.map\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC9keW5hbWljfC9ob21lL3J1bm5lci93b3JrL29wZW5tcnMtZXNtLWNvcmUvb3Blbm1ycy1lc20tY29yZS9ub2RlX21vZHVsZXMvQG1vZHVsZS1mZWRlcmF0aW9uL3J1bnRpbWUtdG9vbHMvbm9kZV9tb2R1bGVzL0Btb2R1bGUtZmVkZXJhdGlvbi9ydW50aW1lL2Rpc3QvdXRpbHMuY2pzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG1vZHVsZS1mZWRlcmF0aW9uL3J1bnRpbWUtdG9vbHMvbm9kZV9tb2R1bGVzL0Btb2R1bGUtZmVkZXJhdGlvbi9ydW50aW1lL2Rpc3QvdXRpbHMuY2pzP2QxMTgiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgcmVxdWlyZV9ydW50aW1lID0gcmVxdWlyZSgnLi9fdmlydHVhbC9fcm9sbGRvd24vcnVudGltZS5janMnKTtcbmxldCBfbW9kdWxlX2ZlZGVyYXRpb25fcnVudGltZV9jb3JlID0gcmVxdWlyZShcIkBtb2R1bGUtZmVkZXJhdGlvbi9ydW50aW1lLWNvcmVcIik7XG5cbi8vI3JlZ2lvbiBzcmMvdXRpbHMudHNcbmZ1bmN0aW9uIGdldEJ1aWxkZXJJZCgpIHtcblx0cmV0dXJuIHR5cGVvZiBGRURFUkFUSU9OX0JVSUxEX0lERU5USUZJRVIgIT09IFwidW5kZWZpbmVkXCIgPyBGRURFUkFUSU9OX0JVSUxEX0lERU5USUZJRVIgOiBcIlwiO1xufVxuZnVuY3Rpb24gZ2V0R2xvYmFsRmVkZXJhdGlvbkluc3RhbmNlKG5hbWUsIHZlcnNpb24pIHtcblx0Y29uc3QgYnVpbGRJZCA9IGdldEJ1aWxkZXJJZCgpO1xuXHRyZXR1cm4gX21vZHVsZV9mZWRlcmF0aW9uX3J1bnRpbWVfY29yZS5DdXJyZW50R2xvYmFsLl9fRkVERVJBVElPTl9fLl9fSU5TVEFOQ0VTX18uZmluZCgoR01JbnN0YW5jZSkgPT4ge1xuXHRcdGlmIChidWlsZElkICYmIEdNSW5zdGFuY2Uub3B0aW9ucy5pZCA9PT0gYnVpbGRJZCkgcmV0dXJuIHRydWU7XG5cdFx0aWYgKEdNSW5zdGFuY2Uub3B0aW9ucy5uYW1lID09PSBuYW1lICYmICFHTUluc3RhbmNlLm9wdGlvbnMudmVyc2lvbiAmJiAhdmVyc2lvbikgcmV0dXJuIHRydWU7XG5cdFx0aWYgKEdNSW5zdGFuY2Uub3B0aW9ucy5uYW1lID09PSBuYW1lICYmIHZlcnNpb24gJiYgR01JbnN0YW5jZS5vcHRpb25zLnZlcnNpb24gPT09IHZlcnNpb24pIHJldHVybiB0cnVlO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8vI2VuZHJlZ2lvblxuZXhwb3J0cy5nZXRHbG9iYWxGZWRlcmF0aW9uSW5zdGFuY2UgPSBnZXRHbG9iYWxGZWRlcmF0aW9uSW5zdGFuY2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5janMubWFwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdCQUF3QixtQkFBTyxDQUFDLG9JQUFrQztBQUNsRSxzQ0FBc0MsbUJBQU8sQ0FBQyxzRUFBaUM7O0FBRS9FO0FBQ0E7QUFDQSxRQUFRLEtBQWtELEdBQUcsd0NBQTJCLEdBQUcsQ0FBRTtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0EsbUNBQW1DO0FBQ25DIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@module-federation/runtime-tools/node_modules/@module-federation/runtime/dist/utils.cjs\n\n}");
222
222
 
223
223
  },
224
224
  "../../../node_modules/@module-federation/sdk/dist/_virtual/_rolldown/runtime.cjs"(__unused_rspack_module, exports) {
@@ -358,7 +358,7 @@ eval("{Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.t
358
358
 
359
359
  },
360
360
  "../../../node_modules/@module-federation/webpack-bundler-runtime/node_modules/@module-federation/runtime/dist/utils.cjs"(__unused_rspack_module, exports, __webpack_require__) {
361
- eval("{const require_runtime = __webpack_require__(\"../../../node_modules/@module-federation/webpack-bundler-runtime/node_modules/@module-federation/runtime/dist/_virtual/_rolldown/runtime.cjs\");\nlet _module_federation_runtime_core = __webpack_require__(\"../../../node_modules/@module-federation/runtime-core/dist/index.cjs\");\n\n//#region src/utils.ts\nfunction getBuilderId() {\n\treturn true ? \"@openmrs/esm-app-shell:10.0.1-pre.5378\" : 0;\n}\nfunction getGlobalFederationInstance(name, version) {\n\tconst buildId = getBuilderId();\n\treturn _module_federation_runtime_core.CurrentGlobal.__FEDERATION__.__INSTANCES__.find((GMInstance) => {\n\t\tif (buildId && GMInstance.options.id === buildId) return true;\n\t\tif (GMInstance.options.name === name && !GMInstance.options.version && !version) return true;\n\t\tif (GMInstance.options.name === name && version && GMInstance.options.version === version) return true;\n\t\treturn false;\n\t});\n}\n\n//#endregion\nexports.getGlobalFederationInstance = getGlobalFederationInstance;\n//# sourceMappingURL=utils.cjs.map\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC9keW5hbWljfC9ob21lL3J1bm5lci93b3JrL29wZW5tcnMtZXNtLWNvcmUvb3Blbm1ycy1lc20tY29yZS9ub2RlX21vZHVsZXMvQG1vZHVsZS1mZWRlcmF0aW9uL3dlYnBhY2stYnVuZGxlci1ydW50aW1lL25vZGVfbW9kdWxlcy9AbW9kdWxlLWZlZGVyYXRpb24vcnVudGltZS9kaXN0L3V0aWxzLmNqcyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Btb2R1bGUtZmVkZXJhdGlvbi93ZWJwYWNrLWJ1bmRsZXItcnVudGltZS9ub2RlX21vZHVsZXMvQG1vZHVsZS1mZWRlcmF0aW9uL3J1bnRpbWUvZGlzdC91dGlscy5janM/Y2M1OCJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCByZXF1aXJlX3J1bnRpbWUgPSByZXF1aXJlKCcuL192aXJ0dWFsL19yb2xsZG93bi9ydW50aW1lLmNqcycpO1xubGV0IF9tb2R1bGVfZmVkZXJhdGlvbl9ydW50aW1lX2NvcmUgPSByZXF1aXJlKFwiQG1vZHVsZS1mZWRlcmF0aW9uL3J1bnRpbWUtY29yZVwiKTtcblxuLy8jcmVnaW9uIHNyYy91dGlscy50c1xuZnVuY3Rpb24gZ2V0QnVpbGRlcklkKCkge1xuXHRyZXR1cm4gdHlwZW9mIEZFREVSQVRJT05fQlVJTERfSURFTlRJRklFUiAhPT0gXCJ1bmRlZmluZWRcIiA/IEZFREVSQVRJT05fQlVJTERfSURFTlRJRklFUiA6IFwiXCI7XG59XG5mdW5jdGlvbiBnZXRHbG9iYWxGZWRlcmF0aW9uSW5zdGFuY2UobmFtZSwgdmVyc2lvbikge1xuXHRjb25zdCBidWlsZElkID0gZ2V0QnVpbGRlcklkKCk7XG5cdHJldHVybiBfbW9kdWxlX2ZlZGVyYXRpb25fcnVudGltZV9jb3JlLkN1cnJlbnRHbG9iYWwuX19GRURFUkFUSU9OX18uX19JTlNUQU5DRVNfXy5maW5kKChHTUluc3RhbmNlKSA9PiB7XG5cdFx0aWYgKGJ1aWxkSWQgJiYgR01JbnN0YW5jZS5vcHRpb25zLmlkID09PSBidWlsZElkKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAoR01JbnN0YW5jZS5vcHRpb25zLm5hbWUgPT09IG5hbWUgJiYgIUdNSW5zdGFuY2Uub3B0aW9ucy52ZXJzaW9uICYmICF2ZXJzaW9uKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAoR01JbnN0YW5jZS5vcHRpb25zLm5hbWUgPT09IG5hbWUgJiYgdmVyc2lvbiAmJiBHTUluc3RhbmNlLm9wdGlvbnMudmVyc2lvbiA9PT0gdmVyc2lvbikgcmV0dXJuIHRydWU7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLy8jZW5kcmVnaW9uXG5leHBvcnRzLmdldEdsb2JhbEZlZGVyYXRpb25JbnN0YW5jZSA9IGdldEdsb2JhbEZlZGVyYXRpb25JbnN0YW5jZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmNqcy5tYXAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0JBQXdCLG1CQUFPLENBQUMsOElBQWtDO0FBQ2xFLHNDQUFzQyxtQkFBTyxDQUFDLHNFQUFpQzs7QUFFL0U7QUFDQTtBQUNBLFFBQVEsS0FBa0QsR0FBRyx3Q0FBMkIsR0FBRyxDQUFFO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQSxtQ0FBbUM7QUFDbkMifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@module-federation/webpack-bundler-runtime/node_modules/@module-federation/runtime/dist/utils.cjs\n\n}");
361
+ eval("{const require_runtime = __webpack_require__(\"../../../node_modules/@module-federation/webpack-bundler-runtime/node_modules/@module-federation/runtime/dist/_virtual/_rolldown/runtime.cjs\");\nlet _module_federation_runtime_core = __webpack_require__(\"../../../node_modules/@module-federation/runtime-core/dist/index.cjs\");\n\n//#region src/utils.ts\nfunction getBuilderId() {\n\treturn true ? \"@openmrs/esm-app-shell:10.0.1-pre.5393\" : 0;\n}\nfunction getGlobalFederationInstance(name, version) {\n\tconst buildId = getBuilderId();\n\treturn _module_federation_runtime_core.CurrentGlobal.__FEDERATION__.__INSTANCES__.find((GMInstance) => {\n\t\tif (buildId && GMInstance.options.id === buildId) return true;\n\t\tif (GMInstance.options.name === name && !GMInstance.options.version && !version) return true;\n\t\tif (GMInstance.options.name === name && version && GMInstance.options.version === version) return true;\n\t\treturn false;\n\t});\n}\n\n//#endregion\nexports.getGlobalFederationInstance = getGlobalFederationInstance;\n//# sourceMappingURL=utils.cjs.map\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC9keW5hbWljfC9ob21lL3J1bm5lci93b3JrL29wZW5tcnMtZXNtLWNvcmUvb3Blbm1ycy1lc20tY29yZS9ub2RlX21vZHVsZXMvQG1vZHVsZS1mZWRlcmF0aW9uL3dlYnBhY2stYnVuZGxlci1ydW50aW1lL25vZGVfbW9kdWxlcy9AbW9kdWxlLWZlZGVyYXRpb24vcnVudGltZS9kaXN0L3V0aWxzLmNqcyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Btb2R1bGUtZmVkZXJhdGlvbi93ZWJwYWNrLWJ1bmRsZXItcnVudGltZS9ub2RlX21vZHVsZXMvQG1vZHVsZS1mZWRlcmF0aW9uL3J1bnRpbWUvZGlzdC91dGlscy5janM/Y2M1OCJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCByZXF1aXJlX3J1bnRpbWUgPSByZXF1aXJlKCcuL192aXJ0dWFsL19yb2xsZG93bi9ydW50aW1lLmNqcycpO1xubGV0IF9tb2R1bGVfZmVkZXJhdGlvbl9ydW50aW1lX2NvcmUgPSByZXF1aXJlKFwiQG1vZHVsZS1mZWRlcmF0aW9uL3J1bnRpbWUtY29yZVwiKTtcblxuLy8jcmVnaW9uIHNyYy91dGlscy50c1xuZnVuY3Rpb24gZ2V0QnVpbGRlcklkKCkge1xuXHRyZXR1cm4gdHlwZW9mIEZFREVSQVRJT05fQlVJTERfSURFTlRJRklFUiAhPT0gXCJ1bmRlZmluZWRcIiA/IEZFREVSQVRJT05fQlVJTERfSURFTlRJRklFUiA6IFwiXCI7XG59XG5mdW5jdGlvbiBnZXRHbG9iYWxGZWRlcmF0aW9uSW5zdGFuY2UobmFtZSwgdmVyc2lvbikge1xuXHRjb25zdCBidWlsZElkID0gZ2V0QnVpbGRlcklkKCk7XG5cdHJldHVybiBfbW9kdWxlX2ZlZGVyYXRpb25fcnVudGltZV9jb3JlLkN1cnJlbnRHbG9iYWwuX19GRURFUkFUSU9OX18uX19JTlNUQU5DRVNfXy5maW5kKChHTUluc3RhbmNlKSA9PiB7XG5cdFx0aWYgKGJ1aWxkSWQgJiYgR01JbnN0YW5jZS5vcHRpb25zLmlkID09PSBidWlsZElkKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAoR01JbnN0YW5jZS5vcHRpb25zLm5hbWUgPT09IG5hbWUgJiYgIUdNSW5zdGFuY2Uub3B0aW9ucy52ZXJzaW9uICYmICF2ZXJzaW9uKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAoR01JbnN0YW5jZS5vcHRpb25zLm5hbWUgPT09IG5hbWUgJiYgdmVyc2lvbiAmJiBHTUluc3RhbmNlLm9wdGlvbnMudmVyc2lvbiA9PT0gdmVyc2lvbikgcmV0dXJuIHRydWU7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLy8jZW5kcmVnaW9uXG5leHBvcnRzLmdldEdsb2JhbEZlZGVyYXRpb25JbnN0YW5jZSA9IGdldEdsb2JhbEZlZGVyYXRpb25JbnN0YW5jZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmNqcy5tYXAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0JBQXdCLG1CQUFPLENBQUMsOElBQWtDO0FBQ2xFLHNDQUFzQyxtQkFBTyxDQUFDLHNFQUFpQzs7QUFFL0U7QUFDQTtBQUNBLFFBQVEsS0FBa0QsR0FBRyx3Q0FBMkIsR0FBRyxDQUFFO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQSxtQ0FBbUM7QUFDbkMifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@module-federation/webpack-bundler-runtime/node_modules/@module-federation/runtime/dist/utils.cjs\n\n}");
362
362
 
363
363
  },
364
364
  "../../../node_modules/@module-federation/error-codes/dist/desc.mjs"(__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
@@ -655,7 +655,7 @@ __webpack_require__.u = (chunkId) => {
655
655
  // return url for filenames not based on template
656
656
 
657
657
  // return url for filenames based on template
658
- return "" + {"default-framework_esm-framework_dist_internal_js": "31c953cde42b57cf","default-framework_esm-styleguide_dist_index_js": "001c3ec614722aa6","default-node_modules_carbon_icons-react_es_generated_bucket-11_js-node_modules_carbon_icons-r-63ea09": "6fa8075110bb9581","default-node_modules_carbon_react_es_index_js": "4907fc954ee36d02","default-node_modules_react-dom_index_js": "41733b40a9c3c3a5","default-node_modules_react-i18next_dist_es_index_js": "dba37f937b9fef08","default-node_modules_react-router-dom_dist_index_js": "41084f226b2f0007","default-node_modules_rxjs__esm5_internal_observable_empty_js-node_modules_rxjs__esm5_internal-336f2f": "3847735de5f0c8c6","default-node_modules_swr_dist__internal_index_mjs": "1c5b49134c999eee","default-node_modules_tslib_tslib_es6_mjs": "a2ed0a758d2afe95","default-src_run_ts": "b0d5eb958b4696a7","default-vendors-node_modules_dayjs_dayjs_min_js": "ab4148a466ebd6ef","default-vendors-node_modules_i18next_dist_esm_i18next_js": "29eb002ac8b08df5","default-vendors-node_modules_react_index_js": "2b18050c552ba37b","default-vendors-node_modules_rxjs__esm5_index_js": "3486b148a0446829","default-vendors-node_modules_rxjs__esm5_internal_operators_take_js-node_modules_i18next-brows-3238fc": "36af6fd3e29fff87","default-vendors-node_modules_single-spa_lib_es2015_esm_single-spa_dev_js": "6a07d9edae91d64a","framework_esm-translations_translations_am_json": "c480caae407f477b","framework_esm-translations_translations_ar_SY_json": "935c56e6fc3f4eb9","framework_esm-translations_translations_ar_json": "d548ccf57a2b3efc","framework_esm-translations_translations_bn_json": "8a39bb2828dd5901","framework_esm-translations_translations_cs_json": "2437de89f6e52cc4","framework_esm-translations_translations_de_json": "a26f73b4efd5a0db","framework_esm-translations_translations_en_US_json": "45470aef57aada9b","framework_esm-translations_translations_en_json": "4e43d493d0158201","framework_esm-translations_translations_es_MX_json": "24d941a4faeeedc3","framework_esm-translations_translations_es_json": "79a70c776c963b07","framework_esm-translations_translations_fr_json": "c30965f09a3e01ba","framework_esm-translations_translations_he_json": "d4fecb39d12881b8","framework_esm-translations_translations_hi_IN_json": "358f3aa095ecae65","framework_esm-translations_translations_hi_json": "6502ebe7d0d0716b","framework_esm-translations_translations_id_json": "5e902230903f56ad","framework_esm-translations_translations_it_json": "94790873eebfc80d","framework_esm-translations_translations_ka_json": "4303c469b7ff7576","framework_esm-translations_translations_km_json": "08ae84f7ae3fd30a","framework_esm-translations_translations_ku_json": "b6518cdc113a6cc8","framework_esm-translations_translations_ky_json": "ae0700dd4f6acc20","framework_esm-translations_translations_lg_json": "7f2111ac7a0220c9","framework_esm-translations_translations_ne_json": "636a0d28b22ffd7c","framework_esm-translations_translations_pl_json": "7b32f9e23be8df86","framework_esm-translations_translations_pt_BR_json": "8c3e1a1a6bbafa66","framework_esm-translations_translations_pt_json": "5b577f83da68cef2","framework_esm-translations_translations_qu_json": "cdec54e1793226fa","framework_esm-translations_translations_ro_RO_json": "a52784d106f5e784","framework_esm-translations_translations_ru_RU_json": "524e945c14018b8e","framework_esm-translations_translations_si_json": "7d5c0f39d43a15ed","framework_esm-translations_translations_sq_json": "95b4328888c96752","framework_esm-translations_translations_sw_KE_json": "bb3fb0f9a62de60b","framework_esm-translations_translations_sw_json": "4b8d4db107d5f32b","framework_esm-translations_translations_tr_TR_json": "bd00a3b5f927dc70","framework_esm-translations_translations_tr_json": "0c1857dcb045ec48","framework_esm-translations_translations_uk_json": "d44fa94144daf6e7","framework_esm-translations_translations_uz_Latn_json": "7d578e9b49663caa","framework_esm-translations_translations_uz_UZ_json": "9a00917b6b8c31a0","framework_esm-translations_translations_uz_json": "12e58d0ec655509e","framework_esm-translations_translations_vi_json": "db5558c4b7d422e5","framework_esm-translations_translations_zh_CN_json": "2a5e745dfce6e1b0","framework_esm-translations_translations_zh_TW_json": "22a4c67262d7c2ec","framework_esm-translations_translations_zh_json": "767a2eb32d699e9e","intl-durationformat-polyfill": "e3ec6219acc5c306",}[chunkId] + ".js"
658
+ return "" + {"default-framework_esm-framework_dist_internal_js": "ef077baa8132e02b","default-framework_esm-styleguide_dist_index_js": "001c3ec614722aa6","default-node_modules_carbon_icons-react_es_generated_bucket-11_js-node_modules_carbon_icons-r-63ea09": "6fa8075110bb9581","default-node_modules_carbon_react_es_index_js": "4907fc954ee36d02","default-node_modules_react-dom_index_js": "41733b40a9c3c3a5","default-node_modules_react-i18next_dist_es_index_js": "dba37f937b9fef08","default-node_modules_react-router-dom_dist_index_js": "41084f226b2f0007","default-node_modules_rxjs__esm5_internal_observable_empty_js-node_modules_rxjs__esm5_internal-336f2f": "3847735de5f0c8c6","default-node_modules_swr_dist__internal_index_mjs": "1c5b49134c999eee","default-node_modules_tslib_tslib_es6_mjs": "a2ed0a758d2afe95","default-src_run_ts": "b0d5eb958b4696a7","default-vendors-node_modules_dayjs_dayjs_min_js": "ab4148a466ebd6ef","default-vendors-node_modules_i18next_dist_esm_i18next_js": "29eb002ac8b08df5","default-vendors-node_modules_react_index_js": "2b18050c552ba37b","default-vendors-node_modules_rxjs__esm5_index_js": "3486b148a0446829","default-vendors-node_modules_rxjs__esm5_internal_operators_take_js-node_modules_i18next-brows-3238fc": "36af6fd3e29fff87","default-vendors-node_modules_single-spa_lib_es2015_esm_single-spa_dev_js": "6a07d9edae91d64a","framework_esm-translations_translations_am_json": "c480caae407f477b","framework_esm-translations_translations_ar_SY_json": "935c56e6fc3f4eb9","framework_esm-translations_translations_ar_json": "d548ccf57a2b3efc","framework_esm-translations_translations_bn_json": "8a39bb2828dd5901","framework_esm-translations_translations_cs_json": "2437de89f6e52cc4","framework_esm-translations_translations_de_json": "a26f73b4efd5a0db","framework_esm-translations_translations_en_US_json": "45470aef57aada9b","framework_esm-translations_translations_en_json": "4e43d493d0158201","framework_esm-translations_translations_es_MX_json": "24d941a4faeeedc3","framework_esm-translations_translations_es_json": "79a70c776c963b07","framework_esm-translations_translations_fr_json": "c30965f09a3e01ba","framework_esm-translations_translations_he_json": "d4fecb39d12881b8","framework_esm-translations_translations_hi_IN_json": "358f3aa095ecae65","framework_esm-translations_translations_hi_json": "6502ebe7d0d0716b","framework_esm-translations_translations_id_json": "5e902230903f56ad","framework_esm-translations_translations_it_json": "94790873eebfc80d","framework_esm-translations_translations_ka_json": "4303c469b7ff7576","framework_esm-translations_translations_km_json": "08ae84f7ae3fd30a","framework_esm-translations_translations_ku_json": "b6518cdc113a6cc8","framework_esm-translations_translations_ky_json": "ae0700dd4f6acc20","framework_esm-translations_translations_lg_json": "7f2111ac7a0220c9","framework_esm-translations_translations_ne_json": "636a0d28b22ffd7c","framework_esm-translations_translations_pl_json": "7b32f9e23be8df86","framework_esm-translations_translations_pt_BR_json": "8c3e1a1a6bbafa66","framework_esm-translations_translations_pt_json": "5b577f83da68cef2","framework_esm-translations_translations_qu_json": "cdec54e1793226fa","framework_esm-translations_translations_ro_RO_json": "a52784d106f5e784","framework_esm-translations_translations_ru_RU_json": "524e945c14018b8e","framework_esm-translations_translations_si_json": "7d5c0f39d43a15ed","framework_esm-translations_translations_sq_json": "95b4328888c96752","framework_esm-translations_translations_sw_KE_json": "bb3fb0f9a62de60b","framework_esm-translations_translations_sw_json": "4b8d4db107d5f32b","framework_esm-translations_translations_tr_TR_json": "bd00a3b5f927dc70","framework_esm-translations_translations_tr_json": "0c1857dcb045ec48","framework_esm-translations_translations_uk_json": "d44fa94144daf6e7","framework_esm-translations_translations_uz_Latn_json": "7d578e9b49663caa","framework_esm-translations_translations_uz_UZ_json": "9a00917b6b8c31a0","framework_esm-translations_translations_uz_json": "12e58d0ec655509e","framework_esm-translations_translations_vi_json": "db5558c4b7d422e5","framework_esm-translations_translations_zh_CN_json": "2a5e745dfce6e1b0","framework_esm-translations_translations_zh_TW_json": "22a4c67262d7c2ec","framework_esm-translations_translations_zh_json": "767a2eb32d699e9e","intl-durationformat-polyfill": "e3ec6219acc5c306",}[chunkId] + ".js"
659
659
  }
660
660
  })();
661
661
  // webpack/runtime/global
@@ -773,7 +773,7 @@ __webpack_require__.rv = () => ("1.7.9")
773
773
  (() => {
774
774
 
775
775
  __webpack_require__.S = {};
776
- __webpack_require__.initializeSharingData = { scopeToSharingDataMapping: { "default": [{ name: "@carbon/react", version: "1.92.1", factory: () => (Promise.all([__webpack_require__.e("default-webpack_sharing_consume_default_react_react"), __webpack_require__.e("default-webpack_sharing_consume_default_react-dom_react-dom"), __webpack_require__.e("default-node_modules_carbon_icons-react_es_generated_bucket-11_js-node_modules_carbon_icons-r-63ea09"), __webpack_require__.e("default-node_modules_tslib_tslib_es6_mjs"), __webpack_require__.e("default-node_modules_carbon_react_es_index_js")]).then(() => (() => (__webpack_require__("../../../node_modules/@carbon/react/es/index.js"))))), eager: 0, singleton: 1, requiredVersion: "1.x", strictVersion: 0 }, { name: "@openmrs/esm-framework/src/internal", version: "10.0.1-pre.5378", factory: () => (Promise.all([__webpack_require__.e("default-webpack_sharing_consume_default_react_react"), __webpack_require__.e("default-webpack_sharing_consume_default_react-dom_react-dom"), __webpack_require__.e("default-node_modules_carbon_icons-react_es_generated_bucket-11_js-node_modules_carbon_icons-r-63ea09"), __webpack_require__.e("default-framework_esm-framework_dist_internal_js")]).then(() => (() => (__webpack_require__("../../framework/esm-framework/dist/internal.js"))))), eager: 0, singleton: 1, requiredVersion: "*", strictVersion: 0 }, { name: "dayjs", version: "1.11.13", factory: () => (__webpack_require__.e("default-vendors-node_modules_dayjs_dayjs_min_js").then(() => (() => (__webpack_require__("../../../node_modules/dayjs/dayjs.min.js"))))), eager: 0, singleton: 1, requiredVersion: "1.x", strictVersion: 0 }, { name: "i18next", version: "25.5.3", factory: () => (__webpack_require__.e("default-vendors-node_modules_i18next_dist_esm_i18next_js").then(() => (() => (__webpack_require__("../../../node_modules/i18next/dist/esm/i18next.js"))))), eager: 0, singleton: 1, requiredVersion: "25.x", strictVersion: 0 }, { name: "react-dom", version: "18.3.1", factory: () => (Promise.all([__webpack_require__.e("default-webpack_sharing_consume_default_react_react"), __webpack_require__.e("default-node_modules_react-dom_index_js")]).then(() => (() => (__webpack_require__("../../../node_modules/react-dom/index.js"))))), eager: 0, singleton: 1, requiredVersion: "18.x", strictVersion: 0 }, { name: "react-i18next", version: "16.0.0", factory: () => (Promise.all([__webpack_require__.e("default-webpack_sharing_consume_default_react_react"), __webpack_require__.e("default-node_modules_react-i18next_dist_es_index_js")]).then(() => (() => (__webpack_require__("../../../node_modules/react-i18next/dist/es/index.js"))))), eager: 0, singleton: 1, requiredVersion: "16.x", strictVersion: 0 }, { name: "react-router-dom", version: "6.30.3", factory: () => (Promise.all([__webpack_require__.e("default-webpack_sharing_consume_default_react_react"), __webpack_require__.e("default-webpack_sharing_consume_default_react-dom_react-dom"), __webpack_require__.e("default-node_modules_react-router-dom_dist_index_js")]).then(() => (() => (__webpack_require__("../../../node_modules/react-router-dom/dist/index.js"))))), eager: 0, singleton: 1, requiredVersion: "6.x", strictVersion: 0 }, { name: "react", version: "18.3.1", factory: () => (__webpack_require__.e("default-vendors-node_modules_react_index_js").then(() => (() => (__webpack_require__("../../../node_modules/react/index.js"))))), eager: 0, singleton: 1, requiredVersion: "18.x", strictVersion: 0 }, { name: "rxjs", version: "6.6.7", factory: () => (Promise.all([__webpack_require__.e("default-node_modules_rxjs__esm5_internal_observable_empty_js-node_modules_rxjs__esm5_internal-336f2f"), __webpack_require__.e("default-vendors-node_modules_rxjs__esm5_index_js")]).then(() => (() => (__webpack_require__("../../../node_modules/rxjs/_esm5/index.js"))))), eager: 0, singleton: 1, requiredVersion: "6.x", strictVersion: 0 }, { name: "single-spa", version: "6.0.3", factory: () => (__webpack_require__.e("default-vendors-node_modules_single-spa_lib_es2015_esm_single-spa_dev_js").then(() => (() => (__webpack_require__("../../../node_modules/single-spa/lib/es2015/esm/single-spa.dev.js"))))), eager: 0, singleton: 1, requiredVersion: "6.x", strictVersion: 0 }, { name: "swr/_internal", version: "2.2.5", factory: () => (Promise.all([__webpack_require__.e("default-webpack_sharing_consume_default_react_react"), __webpack_require__.e("default-node_modules_swr_dist__internal_index_mjs")]).then(() => (() => (__webpack_require__("../../../node_modules/swr/dist/_internal/index.mjs"))))), eager: 0, singleton: 1, requiredVersion: "2.2.5", strictVersion: 0 }] }, uniqueName: "@openmrs/esm-app-shell" };
776
+ __webpack_require__.initializeSharingData = { scopeToSharingDataMapping: { "default": [{ name: "@carbon/react", version: "1.92.1", factory: () => (Promise.all([__webpack_require__.e("default-webpack_sharing_consume_default_react_react"), __webpack_require__.e("default-webpack_sharing_consume_default_react-dom_react-dom"), __webpack_require__.e("default-node_modules_carbon_icons-react_es_generated_bucket-11_js-node_modules_carbon_icons-r-63ea09"), __webpack_require__.e("default-node_modules_tslib_tslib_es6_mjs"), __webpack_require__.e("default-node_modules_carbon_react_es_index_js")]).then(() => (() => (__webpack_require__("../../../node_modules/@carbon/react/es/index.js"))))), eager: 0, singleton: 1, requiredVersion: "1.x", strictVersion: 0 }, { name: "@openmrs/esm-framework/src/internal", version: "10.0.1-pre.5393", factory: () => (Promise.all([__webpack_require__.e("default-webpack_sharing_consume_default_react_react"), __webpack_require__.e("default-webpack_sharing_consume_default_react-dom_react-dom"), __webpack_require__.e("default-node_modules_carbon_icons-react_es_generated_bucket-11_js-node_modules_carbon_icons-r-63ea09"), __webpack_require__.e("default-framework_esm-framework_dist_internal_js")]).then(() => (() => (__webpack_require__("../../framework/esm-framework/dist/internal.js"))))), eager: 0, singleton: 1, requiredVersion: "*", strictVersion: 0 }, { name: "dayjs", version: "1.11.13", factory: () => (__webpack_require__.e("default-vendors-node_modules_dayjs_dayjs_min_js").then(() => (() => (__webpack_require__("../../../node_modules/dayjs/dayjs.min.js"))))), eager: 0, singleton: 1, requiredVersion: "1.x", strictVersion: 0 }, { name: "i18next", version: "25.5.3", factory: () => (__webpack_require__.e("default-vendors-node_modules_i18next_dist_esm_i18next_js").then(() => (() => (__webpack_require__("../../../node_modules/i18next/dist/esm/i18next.js"))))), eager: 0, singleton: 1, requiredVersion: "25.x", strictVersion: 0 }, { name: "react-dom", version: "18.3.1", factory: () => (Promise.all([__webpack_require__.e("default-webpack_sharing_consume_default_react_react"), __webpack_require__.e("default-node_modules_react-dom_index_js")]).then(() => (() => (__webpack_require__("../../../node_modules/react-dom/index.js"))))), eager: 0, singleton: 1, requiredVersion: "18.x", strictVersion: 0 }, { name: "react-i18next", version: "16.0.0", factory: () => (Promise.all([__webpack_require__.e("default-webpack_sharing_consume_default_react_react"), __webpack_require__.e("default-node_modules_react-i18next_dist_es_index_js")]).then(() => (() => (__webpack_require__("../../../node_modules/react-i18next/dist/es/index.js"))))), eager: 0, singleton: 1, requiredVersion: "16.x", strictVersion: 0 }, { name: "react-router-dom", version: "6.30.3", factory: () => (Promise.all([__webpack_require__.e("default-webpack_sharing_consume_default_react_react"), __webpack_require__.e("default-webpack_sharing_consume_default_react-dom_react-dom"), __webpack_require__.e("default-node_modules_react-router-dom_dist_index_js")]).then(() => (() => (__webpack_require__("../../../node_modules/react-router-dom/dist/index.js"))))), eager: 0, singleton: 1, requiredVersion: "6.x", strictVersion: 0 }, { name: "react", version: "18.3.1", factory: () => (__webpack_require__.e("default-vendors-node_modules_react_index_js").then(() => (() => (__webpack_require__("../../../node_modules/react/index.js"))))), eager: 0, singleton: 1, requiredVersion: "18.x", strictVersion: 0 }, { name: "rxjs", version: "6.6.7", factory: () => (Promise.all([__webpack_require__.e("default-node_modules_rxjs__esm5_internal_observable_empty_js-node_modules_rxjs__esm5_internal-336f2f"), __webpack_require__.e("default-vendors-node_modules_rxjs__esm5_index_js")]).then(() => (() => (__webpack_require__("../../../node_modules/rxjs/_esm5/index.js"))))), eager: 0, singleton: 1, requiredVersion: "6.x", strictVersion: 0 }, { name: "single-spa", version: "6.0.3", factory: () => (__webpack_require__.e("default-vendors-node_modules_single-spa_lib_es2015_esm_single-spa_dev_js").then(() => (() => (__webpack_require__("../../../node_modules/single-spa/lib/es2015/esm/single-spa.dev.js"))))), eager: 0, singleton: 1, requiredVersion: "6.x", strictVersion: 0 }, { name: "swr/_internal", version: "2.2.5", factory: () => (Promise.all([__webpack_require__.e("default-webpack_sharing_consume_default_react_react"), __webpack_require__.e("default-node_modules_swr_dist__internal_index_mjs")]).then(() => (() => (__webpack_require__("../../../node_modules/swr/dist/_internal/index.mjs"))))), eager: 0, singleton: 1, requiredVersion: "2.2.5", strictVersion: 0 }] }, uniqueName: "@openmrs/esm-app-shell" };
777
777
  __webpack_require__.I = __webpack_require__.I || function() { throw new Error("should have __webpack_require__.I") }
778
778
 
779
779
  })();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openmrs/esm-app-shell",
3
- "version": "10.0.1-pre.5378",
3
+ "version": "10.0.1-pre.5393",
4
4
  "license": "MPL-2.0",
5
5
  "main": "dist/openmrs.js",
6
6
  "scripts": {
@@ -36,8 +36,8 @@
36
36
  "@module-federation/enhanced": "2.8.1",
37
37
  "@module-federation/error-codes": "2.8.1",
38
38
  "@module-federation/sdk": "2.8.1",
39
- "@openmrs/esm-framework": "10.0.1-pre.5378",
40
- "@openmrs/esm-styleguide": "10.0.1-pre.5378",
39
+ "@openmrs/esm-framework": "10.0.1-pre.5393",
40
+ "@openmrs/esm-styleguide": "10.0.1-pre.5393",
41
41
  "@rspack/cli": "1.7.9",
42
42
  "@rspack/core": "1.7.9",
43
43
  "browserslist-config-openmrs": "^1.0.1",
package/rspack.config.js CHANGED
@@ -142,6 +142,20 @@ function escapeRegExp(string) {
142
142
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
143
143
  }
144
144
 
145
+ /** A trailing file extension, which is what separates a request for a file from one of the app's routes. */
146
+ const fileExtension = /\.[a-z0-9]{1,10}$/i;
147
+
148
+ /**
149
+ * Whether a request under the SPA path is for a file. Files are proxied as they are; everything else
150
+ * falls through to `historyApiFallback` and is served the locally built `index.html`.
151
+ *
152
+ * @param {string} path
153
+ * @returns {boolean}
154
+ */
155
+ function isFileRequest(path) {
156
+ return fileExtension.test(basename(path.split(/[?#]/)[0]));
157
+ }
158
+
145
159
  /**
146
160
  * @param {Record<string, string>} env
147
161
  * @param {Array<string>} argv
@@ -281,11 +295,7 @@ module.exports = (env, argv = []) => {
281
295
  }
282
296
 
283
297
  if (path.startsWith(openmrsPublicPath)) {
284
- if (basename(path).indexOf('.') >= 0) {
285
- return true;
286
- } else {
287
- return false;
288
- }
298
+ return isFileRequest(path);
289
299
  }
290
300
 
291
301
  if (path.startsWith(openmrsApiUrl)) {
@@ -314,21 +324,6 @@ module.exports = (env, argv = []) => {
314
324
  delete proxyRes.headers['content-security-policy'];
315
325
  }
316
326
  },
317
- /**
318
- * @param {string} path
319
- * @param {Request} req
320
- * @returns {string}
321
- */
322
- pathRewrite(path) {
323
- if (path.startsWith(openmrsPublicPath)) {
324
- const matcher = /^.*\/([^\/]*\.(?!html|js)[^.]+)$/i.exec(path);
325
- if (matcher) {
326
- return `${openmrsPublicPath}/${matcher[1]}`;
327
- }
328
- }
329
-
330
- return path;
331
- },
332
327
  },
333
328
  ],
334
329
  static: ['src/assets'],
@@ -0,0 +1,83 @@
1
+ // The dev server serves what it builds, proxies files it doesn't have to a real distribution, and falls
2
+ // back to the locally built `index.html` for everything else. That last split is the one worth pinning:
3
+ // misclassify a route as a file and the browser is quietly handed the upstream's shell instead of this one.
4
+ import { resolve } from 'node:path';
5
+ import { describe, expect, it } from 'vitest';
6
+
7
+ const shellRoot = resolve(__dirname, '..');
8
+ const spaPath = '/openmrs/spa';
9
+
10
+ /** The directory `openmrs assemble` gives a frontend module, named for the package and its version. */
11
+ const moduleDir = 'openmrs-esm-home-app-11.1.1-pre.9638';
12
+
13
+ let proxy: Record<string, any> | undefined;
14
+
15
+ /**
16
+ * The proxy entry the dev server is actually configured with.
17
+ *
18
+ * Loaded from `shellRoot` because the config resolves paths and the styleguide stylesheet relative to
19
+ * its own directory.
20
+ */
21
+ function loadProxy() {
22
+ if (!proxy) {
23
+ const originalCwd = process.cwd();
24
+ process.chdir(shellRoot);
25
+
26
+ try {
27
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
28
+ const config = require('../rspack.config.js')({}, { mode: 'development' }) as Record<string, any>;
29
+ proxy = config.devServer.proxy[0];
30
+ } finally {
31
+ process.chdir(originalCwd);
32
+ }
33
+ }
34
+
35
+ return proxy!;
36
+ }
37
+
38
+ describe('the dev server proxy', () => {
39
+ it.each([
40
+ ['a chunk', `${spaPath}/${moduleDir}/4610.js`],
41
+ ['an extracted stylesheet', `${spaPath}/${moduleDir}/180.css`],
42
+ ['a source map', `${spaPath}/${moduleDir}/180.css.map`],
43
+ ['an image', `${spaPath}/${moduleDir}/9a3f2c1d.png`],
44
+ ['a font', `${spaPath}/${moduleDir}/font.woff2`],
45
+ ['translations', `${spaPath}/${moduleDir}/en.json`],
46
+ ['a root-level asset', `${spaPath}/importmap.json`],
47
+ ['the favicon', `${spaPath}/favicon.ico`],
48
+ ['an asset with a cache-busting query', `${spaPath}/${moduleDir}/180.css?v=2`],
49
+ ])('proxies %s', (_, path) => {
50
+ expect(loadProxy().context(path)).toBe(true);
51
+ });
52
+
53
+ it.each([
54
+ ['a page', `${spaPath}/81239898/patient-chart`],
55
+ ['a patient chart', `${spaPath}/patient/2b0f0cba/chart`],
56
+ ['the home page', `${spaPath}/home`],
57
+ ['the SPA root', `${spaPath}/`],
58
+ // `basename()` sees the query, so any dot in one used to make these look like files.
59
+ ['a search whose query holds a dot', `${spaPath}/search?query=john.doe`],
60
+ ['a page whose query holds a dot', `${spaPath}/81239898/patient-chart?tab=vitals.summary`],
61
+ ])('leaves %s to the locally built index.html', (_, path) => {
62
+ expect(loadProxy().context(path)).toBe(false);
63
+ });
64
+
65
+ it.each([
66
+ ['the REST API', '/openmrs/ws/rest/v1/session'],
67
+ ['the FHIR API', '/openmrs/ws/fhir2/R4/Patient?name=john'],
68
+ ])('proxies %s', (_, path) => {
69
+ expect(loadProxy().context(path)).toBe(true);
70
+ });
71
+
72
+ it.each([
73
+ ['an empty path', ''],
74
+ ['a path it does not own', '/other/thing.js'],
75
+ ])('ignores %s', (_, path) => {
76
+ expect(loadProxy().context(path)).toBe(false);
77
+ });
78
+
79
+ // A remote's assets sit under its own directory, so anything but a verbatim path 404s.
80
+ it('proxies paths verbatim', () => {
81
+ expect(loadProxy().pathRewrite).toBeUndefined();
82
+ });
83
+ });