@openmrs/esm-dynamic-loading 5.3.3-pre.1237 → 5.3.3-pre.1247
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +9 -9
- package/dist/openmrs-esm-dynamic-loading.js.map +1 -1
- package/jest.config.js +3 -3
- package/package.json +2 -2
- package/src/dynamic-loading.ts +27 -32
- package/src/index.ts +1 -1
- package/src/public.ts +1 -1
- package/webpack.config.js +13 -13
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
[
|
|
2
|
-
[
|
|
3
|
-
[
|
|
4
|
-
[
|
|
5
|
-
[
|
|
6
|
-
[
|
|
7
|
-
[
|
|
8
|
-
[
|
|
9
|
-
[
|
|
1
|
+
[35m@openmrs/esm-dynamic-loading:build[0m: cache hit, replaying output [2m22b900d8bcb17f42[0m
|
|
2
|
+
[35m@openmrs/esm-dynamic-loading:build: [0mBrowserslist: caniuse-lite is outdated. Please run:
|
|
3
|
+
[35m@openmrs/esm-dynamic-loading:build: [0m npx update-browserslist-db@latest
|
|
4
|
+
[35m@openmrs/esm-dynamic-loading:build: [0m Why you should do it regularly: https://github.com/browserslist/update-db#readme
|
|
5
|
+
[35m@openmrs/esm-dynamic-loading:build: [0masset [1m[32mopenmrs-esm-dynamic-loading.js[39m[22m 4.77 KiB [1m[32m[emitted][39m[22m [1m[32m[minimized][39m[22m (name: main) 1 related asset
|
|
6
|
+
[35m@openmrs/esm-dynamic-loading:build: [0mruntime modules 2.47 KiB 4 modules
|
|
7
|
+
[35m@openmrs/esm-dynamic-loading:build: [0morphan modules 12 KiB [1m[33m[orphan][39m[22m 1 module
|
|
8
|
+
[35m@openmrs/esm-dynamic-loading:build: [0m[1m./src/index.ts + 1 modules[39m[22m 12 KiB [1m[33m[built][39m[22m [1m[33m[code generated][39m[22m
|
|
9
|
+
[35m@openmrs/esm-dynamic-loading:build: [0mwebpack 5.88.0 compiled [1m[32msuccessfully[39m[22m in 5627 ms
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openmrs-esm-dynamic-loading.js","mappings":"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","sources":["webpack://@openmrs/esm-dynamic-loading/webpack/bootstrap","webpack://@openmrs/esm-dynamic-loading/webpack/runtime/define property getters","webpack://@openmrs/esm-dynamic-loading/webpack/runtime/hasOwnProperty shorthand","webpack://@openmrs/esm-dynamic-loading/webpack/runtime/make namespace object","webpack://@openmrs/esm-dynamic-loading/webpack/runtime/sharing","webpack://@openmrs/esm-dynamic-loading/./src/dynamic-loading.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.S = {};\nvar initPromises = {};\nvar initTokens = {};\n__webpack_require__.I = (name, initScope) => {\n\tif(!initScope) initScope = [];\n\t// handling circular init calls\n\tvar initToken = initTokens[name];\n\tif(!initToken) initToken = initTokens[name] = {};\n\tif(initScope.indexOf(initToken) >= 0) return;\n\tinitScope.push(initToken);\n\t// only runs once\n\tif(initPromises[name]) return initPromises[name];\n\t// creates a new share scope if needed\n\tif(!__webpack_require__.o(__webpack_require__.S, name)) __webpack_require__.S[name] = {};\n\t// runs all init snippets from all modules reachable\n\tvar scope = __webpack_require__.S[name];\n\tvar warn = (msg) => {\n\t\tif (typeof console !== \"undefined\" && console.warn) console.warn(msg);\n\t};\n\tvar uniqueName = \"@openmrs/esm-dynamic-loading\";\n\tvar register = (name, version, factory, eager) => {\n\t\tvar versions = scope[name] = scope[name] || {};\n\t\tvar activeVersion = versions[version];\n\t\tif(!activeVersion || (!activeVersion.loaded && (!eager != !activeVersion.eager ? eager : uniqueName > activeVersion.from))) versions[version] = { get: factory, from: uniqueName, eager: !!eager };\n\t};\n\tvar initExternal = (id) => {\n\t\tvar handleError = (err) => (warn(\"Initialization of sharing external failed: \" + err));\n\t\ttry {\n\t\t\tvar module = __webpack_require__(id);\n\t\t\tif(!module) return;\n\t\t\tvar initFn = (module) => (module && module.init && module.init(__webpack_require__.S[name], initScope))\n\t\t\tif(module.then) return promises.push(module.then(initFn, handleError));\n\t\t\tvar initResult = initFn(module);\n\t\t\tif(initResult && initResult.then) return promises.push(initResult['catch'](handleError));\n\t\t} catch(err) { handleError(err); }\n\t}\n\tvar promises = [];\n\tswitch(name) {\n\t}\n\tif(!promises.length) return initPromises[name] = 1;\n\treturn initPromises[name] = Promise.all(promises).then(() => (initPromises[name] = 1));\n};","/** @module @category Dynamic Loading */\n\"use strict\";\n// hack to make the types defined in esm-globals available here\nimport type { ImportMap } from \"@openmrs/esm-globals\";\n\n/**\n * @internal\n *\n * Transforms an ESM module name to a valid JS identifier\n *\n * @param name the name of a module\n * @returns An opaque, equivalent JS identifier for the module\n */\nexport function slugify(name: string) {\n return name.replace(/[\\/\\-@]/g, \"_\");\n}\n\n/**\n * Loads the named export from a named package. This might be used like:\n *\n * ```js\n * const { someComponent } = importDynamic(\"@openmrs/esm-template-app\")\n * ```\n *\n * @param jsPackage The package to load the export from\n * @param share Indicates the name of the shared module; this is an advanced feature if the package you are loading\n * doesn't use the default OpenMRS shared module name \"./start\"\n */\nexport async function importDynamic<T = any>(\n jsPackage: string,\n share: string = \"./start\",\n options?: { importMap?: ImportMap }\n): Promise<T> {\n await preloadImport(jsPackage, options?.importMap);\n\n const jsPackageSlug = slugify(jsPackage);\n\n const container = window[jsPackageSlug] as unknown;\n if (!isFederatedModule(container)) {\n const error = `The global variable ${jsPackageSlug} does not refer to a federated module`;\n console.error(error);\n throw new Error(error);\n }\n\n container.init(__webpack_share_scopes__.default);\n\n const factory = await container.get(share);\n const module = factory();\n\n if (!(typeof module === \"object\") || module === null) {\n const error = `Container for ${jsPackage} did not return an ESM module as expected`;\n console.error(error);\n throw new Error(error);\n }\n\n return module as unknown as T;\n}\n\n/**\n * @internal\n *\n * This internal method is used to ensure that the script belonging\n * to the given package is loaded and added to the head.\n *\n * @param jsPackage The package to load\n * @param importMap The import map to use for loading this package.\n * The main reason for specifying this is to avoid needing to call\n * `getCurrentPageMap()` for every script when bulk loading.\n */\nexport async function preloadImport(jsPackage: string, importMap?: ImportMap) {\n if (typeof jsPackage !== \"string\" || jsPackage.trim().length === 0) {\n const error =\n \"Attempted to call importDynamic() without supplying a package to load\";\n console.error(error);\n throw new Error(error);\n }\n\n const jsPackageSlug = slugify(jsPackage);\n\n if (!window[jsPackageSlug]) {\n const activeImportMap = importMap ?? (await getCurrentImportMap());\n if (!activeImportMap.imports.hasOwnProperty(jsPackage)) {\n const error = `Could not find the package ${jsPackage} defined in the current importmap`;\n console.error(error);\n throw new Error(error);\n }\n\n let url = activeImportMap.imports[jsPackage];\n if (url.startsWith(\"./\")) {\n url = window.spaBase + url.substring(1);\n }\n\n await new Promise((resolve, reject) => {\n loadScript(url, resolve, reject);\n });\n }\n}\n\n/**\n * @internal\n *\n * Used to load the current import map\n *\n * @returns The current page map\n */\nexport async function getCurrentImportMap() {\n return window.importMapOverrides.getCurrentPageMap();\n}\n\ninterface FederatedModule {\n init: (scope: typeof __webpack_share_scopes__.default) => void;\n get: (_export: string) => Promise<() => unknown>;\n}\n\nfunction isFederatedModule(a: unknown): a is FederatedModule {\n return (\n typeof a === \"object\" &&\n a !== null &&\n \"init\" in a &&\n typeof a[\"init\"] === \"function\" &&\n \"get\" in a &&\n typeof a[\"get\"] === \"function\"\n );\n}\n\n// internals to track script loading\n// basically, if we're already loading a script, we should wait until the script is loaded\n// we use a global to track this\nconst OPENMRS_SCRIPT_LOADING = Symbol(\"__openmrs_script_loading\");\n\n/**\n * Appends a `<script>` to the DOM with the given URL.\n */\nfunction loadScript(\n url: string,\n resolve: (value: unknown) => void,\n reject: (reason?: any) => void\n) {\n const scriptElement = document.head.querySelector(`script[src=\"${url}\"]`);\n let scriptLoading: Set<String> = window[OPENMRS_SCRIPT_LOADING];\n if (!scriptLoading) {\n scriptLoading = window[OPENMRS_SCRIPT_LOADING] = new Set([]);\n }\n\n if (!scriptElement) {\n scriptLoading.add(url);\n const element = document.createElement(\"script\");\n element.src = url;\n element.type = \"text/javascript\";\n element.async = true;\n const loadFn = () => {\n scriptLoading.delete(url);\n element.removeEventListener(\"load\", loadFn);\n resolve(null);\n };\n element.addEventListener(\"load\", loadFn);\n\n const errFn = (ev: ErrorEvent) => {\n scriptLoading.delete(url);\n console.error(`Failed to load script from ${url}`, ev);\n element.removeEventListener(\"error\", errFn);\n reject(ev.message);\n };\n element.addEventListener(\"error\", errFn);\n\n document.head.appendChild(element);\n } else {\n if (scriptLoading.has(url)) {\n const loadFn = () => {\n scriptElement?.removeEventListener(\"load\", loadFn);\n resolve(null);\n };\n scriptElement.addEventListener(\"load\", loadFn);\n\n const errFn = (ev: ErrorEvent) => {\n console.error(`Failed to load script from ${url}`, ev);\n scriptElement?.removeEventListener(\"error\", errFn);\n reject(ev.message);\n };\n scriptElement.addEventListener(\"error\", errFn);\n } else {\n console.warn(\"Script already loaded. Not loading it again.\", url);\n resolve(null);\n }\n }\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","S","initPromises","initTokens","I","name","initScope","initToken","indexOf","push","promises","length","Promise","all","then","slugify","replace","importDynamic","jsPackage","share","options","jsPackageSlug","container","error","factory","module","preloadImport","importMap","a","window","console","Error","init","__webpack_share_scopes__","default","activeImportMap","url","trim","getCurrentImportMap","imports","startsWith","spaBase","substring","resolve","reject","scriptElement","document","head","querySelector","scriptLoading","OPENMRS_SCRIPT_LOADING","Set","has","loadFn","removeEventListener","addEventListener","errFn","ev","message","warn","add","element","createElement","src","type","async","delete","appendChild","loadScript","importMapOverrides","getCurrentPageMap"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"openmrs-esm-dynamic-loading.js","mappings":"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","sources":["webpack://@openmrs/esm-dynamic-loading/webpack/bootstrap","webpack://@openmrs/esm-dynamic-loading/webpack/runtime/define property getters","webpack://@openmrs/esm-dynamic-loading/webpack/runtime/hasOwnProperty shorthand","webpack://@openmrs/esm-dynamic-loading/webpack/runtime/make namespace object","webpack://@openmrs/esm-dynamic-loading/webpack/runtime/sharing","webpack://@openmrs/esm-dynamic-loading/./src/dynamic-loading.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.S = {};\nvar initPromises = {};\nvar initTokens = {};\n__webpack_require__.I = (name, initScope) => {\n\tif(!initScope) initScope = [];\n\t// handling circular init calls\n\tvar initToken = initTokens[name];\n\tif(!initToken) initToken = initTokens[name] = {};\n\tif(initScope.indexOf(initToken) >= 0) return;\n\tinitScope.push(initToken);\n\t// only runs once\n\tif(initPromises[name]) return initPromises[name];\n\t// creates a new share scope if needed\n\tif(!__webpack_require__.o(__webpack_require__.S, name)) __webpack_require__.S[name] = {};\n\t// runs all init snippets from all modules reachable\n\tvar scope = __webpack_require__.S[name];\n\tvar warn = (msg) => {\n\t\tif (typeof console !== \"undefined\" && console.warn) console.warn(msg);\n\t};\n\tvar uniqueName = \"@openmrs/esm-dynamic-loading\";\n\tvar register = (name, version, factory, eager) => {\n\t\tvar versions = scope[name] = scope[name] || {};\n\t\tvar activeVersion = versions[version];\n\t\tif(!activeVersion || (!activeVersion.loaded && (!eager != !activeVersion.eager ? eager : uniqueName > activeVersion.from))) versions[version] = { get: factory, from: uniqueName, eager: !!eager };\n\t};\n\tvar initExternal = (id) => {\n\t\tvar handleError = (err) => (warn(\"Initialization of sharing external failed: \" + err));\n\t\ttry {\n\t\t\tvar module = __webpack_require__(id);\n\t\t\tif(!module) return;\n\t\t\tvar initFn = (module) => (module && module.init && module.init(__webpack_require__.S[name], initScope))\n\t\t\tif(module.then) return promises.push(module.then(initFn, handleError));\n\t\t\tvar initResult = initFn(module);\n\t\t\tif(initResult && initResult.then) return promises.push(initResult['catch'](handleError));\n\t\t} catch(err) { handleError(err); }\n\t}\n\tvar promises = [];\n\tswitch(name) {\n\t}\n\tif(!promises.length) return initPromises[name] = 1;\n\treturn initPromises[name] = Promise.all(promises).then(() => (initPromises[name] = 1));\n};","/** @module @category Dynamic Loading */\n'use strict';\n// hack to make the types defined in esm-globals available here\nimport type { ImportMap } from '@openmrs/esm-globals';\n\n/**\n * @internal\n *\n * Transforms an ESM module name to a valid JS identifier\n *\n * @param name the name of a module\n * @returns An opaque, equivalent JS identifier for the module\n */\nexport function slugify(name: string) {\n return name.replace(/[\\/\\-@]/g, '_');\n}\n\n/**\n * Loads the named export from a named package. This might be used like:\n *\n * ```js\n * const { someComponent } = importDynamic(\"@openmrs/esm-template-app\")\n * ```\n *\n * @param jsPackage The package to load the export from\n * @param share Indicates the name of the shared module; this is an advanced feature if the package you are loading\n * doesn't use the default OpenMRS shared module name \"./start\"\n */\nexport async function importDynamic<T = any>(\n jsPackage: string,\n share: string = './start',\n options?: { importMap?: ImportMap },\n): Promise<T> {\n await preloadImport(jsPackage, options?.importMap);\n\n const jsPackageSlug = slugify(jsPackage);\n\n const container = window[jsPackageSlug] as unknown;\n if (!isFederatedModule(container)) {\n const error = `The global variable ${jsPackageSlug} does not refer to a federated module`;\n console.error(error);\n throw new Error(error);\n }\n\n container.init(__webpack_share_scopes__.default);\n\n const factory = await container.get(share);\n const module = factory();\n\n if (!(typeof module === 'object') || module === null) {\n const error = `Container for ${jsPackage} did not return an ESM module as expected`;\n console.error(error);\n throw new Error(error);\n }\n\n return module as unknown as T;\n}\n\n/**\n * @internal\n *\n * This internal method is used to ensure that the script belonging\n * to the given package is loaded and added to the head.\n *\n * @param jsPackage The package to load\n * @param importMap The import map to use for loading this package.\n * The main reason for specifying this is to avoid needing to call\n * `getCurrentPageMap()` for every script when bulk loading.\n */\nexport async function preloadImport(jsPackage: string, importMap?: ImportMap) {\n if (typeof jsPackage !== 'string' || jsPackage.trim().length === 0) {\n const error = 'Attempted to call importDynamic() without supplying a package to load';\n console.error(error);\n throw new Error(error);\n }\n\n const jsPackageSlug = slugify(jsPackage);\n\n if (!window[jsPackageSlug]) {\n const activeImportMap = importMap ?? (await getCurrentImportMap());\n if (!activeImportMap.imports.hasOwnProperty(jsPackage)) {\n const error = `Could not find the package ${jsPackage} defined in the current importmap`;\n console.error(error);\n throw new Error(error);\n }\n\n let url = activeImportMap.imports[jsPackage];\n if (url.startsWith('./')) {\n url = window.spaBase + url.substring(1);\n }\n\n await new Promise((resolve, reject) => {\n loadScript(url, resolve, reject);\n });\n }\n}\n\n/**\n * @internal\n *\n * Used to load the current import map\n *\n * @returns The current page map\n */\nexport async function getCurrentImportMap() {\n return window.importMapOverrides.getCurrentPageMap();\n}\n\ninterface FederatedModule {\n init: (scope: typeof __webpack_share_scopes__.default) => void;\n get: (_export: string) => Promise<() => unknown>;\n}\n\nfunction isFederatedModule(a: unknown): a is FederatedModule {\n return (\n typeof a === 'object' &&\n a !== null &&\n 'init' in a &&\n typeof a['init'] === 'function' &&\n 'get' in a &&\n typeof a['get'] === 'function'\n );\n}\n\n// internals to track script loading\n// basically, if we're already loading a script, we should wait until the script is loaded\n// we use a global to track this\nconst OPENMRS_SCRIPT_LOADING = Symbol('__openmrs_script_loading');\n\n/**\n * Appends a `<script>` to the DOM with the given URL.\n */\nfunction loadScript(url: string, resolve: (value: unknown) => void, reject: (reason?: any) => void) {\n const scriptElement = document.head.querySelector(`script[src=\"${url}\"]`);\n let scriptLoading: Set<String> = window[OPENMRS_SCRIPT_LOADING];\n if (!scriptLoading) {\n scriptLoading = window[OPENMRS_SCRIPT_LOADING] = new Set([]);\n }\n\n if (!scriptElement) {\n scriptLoading.add(url);\n const element = document.createElement('script');\n element.src = url;\n element.type = 'text/javascript';\n element.async = true;\n const loadFn = () => {\n scriptLoading.delete(url);\n element.removeEventListener('load', loadFn);\n resolve(null);\n };\n element.addEventListener('load', loadFn);\n\n const errFn = (ev: ErrorEvent) => {\n scriptLoading.delete(url);\n console.error(`Failed to load script from ${url}`, ev);\n element.removeEventListener('error', errFn);\n reject(ev.message);\n };\n element.addEventListener('error', errFn);\n\n document.head.appendChild(element);\n } else {\n if (scriptLoading.has(url)) {\n const loadFn = () => {\n scriptElement?.removeEventListener('load', loadFn);\n resolve(null);\n };\n scriptElement.addEventListener('load', loadFn);\n\n const errFn = (ev: ErrorEvent) => {\n console.error(`Failed to load script from ${url}`, ev);\n scriptElement?.removeEventListener('error', errFn);\n reject(ev.message);\n };\n scriptElement.addEventListener('error', errFn);\n } else {\n console.warn('Script already loaded. Not loading it again.', url);\n resolve(null);\n }\n }\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","S","initPromises","initTokens","I","name","initScope","initToken","indexOf","push","promises","length","Promise","all","then","slugify","replace","importDynamic","jsPackage","share","options","jsPackageSlug","container","error","factory","module","preloadImport","importMap","a","window","console","Error","init","__webpack_share_scopes__","default","activeImportMap","url","trim","getCurrentImportMap","imports","startsWith","spaBase","substring","resolve","reject","scriptElement","document","head","querySelector","scriptLoading","OPENMRS_SCRIPT_LOADING","Set","has","loadFn","removeEventListener","addEventListener","errFn","ev","message","warn","add","element","createElement","src","type","async","delete","appendChild","loadScript","importMapOverrides","getCurrentPageMap"],"sourceRoot":""}
|
package/jest.config.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openmrs/esm-dynamic-loading",
|
|
3
|
-
"version": "5.3.3-pre.
|
|
3
|
+
"version": "5.3.3-pre.1247",
|
|
4
4
|
"license": "MPL-2.0",
|
|
5
5
|
"description": "Utilities for dynamically loading code in OpenMRS",
|
|
6
6
|
"browser": "dist/openmrs-esm-dynamic-loading.js",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"@openmrs/esm-globals": "5.x"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@openmrs/esm-globals": "5.3.3-pre.
|
|
45
|
+
"@openmrs/esm-globals": "5.3.3-pre.1247"
|
|
46
46
|
},
|
|
47
47
|
"stableVersion": "5.3.2"
|
|
48
48
|
}
|
package/src/dynamic-loading.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** @module @category Dynamic Loading */
|
|
2
|
-
|
|
2
|
+
'use strict';
|
|
3
3
|
// hack to make the types defined in esm-globals available here
|
|
4
|
-
import type { ImportMap } from
|
|
4
|
+
import type { ImportMap } from '@openmrs/esm-globals';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @internal
|
|
@@ -12,7 +12,7 @@ import type { ImportMap } from "@openmrs/esm-globals";
|
|
|
12
12
|
* @returns An opaque, equivalent JS identifier for the module
|
|
13
13
|
*/
|
|
14
14
|
export function slugify(name: string) {
|
|
15
|
-
return name.replace(/[\/\-@]/g,
|
|
15
|
+
return name.replace(/[\/\-@]/g, '_');
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -28,8 +28,8 @@ export function slugify(name: string) {
|
|
|
28
28
|
*/
|
|
29
29
|
export async function importDynamic<T = any>(
|
|
30
30
|
jsPackage: string,
|
|
31
|
-
share: string =
|
|
32
|
-
options?: { importMap?: ImportMap }
|
|
31
|
+
share: string = './start',
|
|
32
|
+
options?: { importMap?: ImportMap },
|
|
33
33
|
): Promise<T> {
|
|
34
34
|
await preloadImport(jsPackage, options?.importMap);
|
|
35
35
|
|
|
@@ -47,7 +47,7 @@ export async function importDynamic<T = any>(
|
|
|
47
47
|
const factory = await container.get(share);
|
|
48
48
|
const module = factory();
|
|
49
49
|
|
|
50
|
-
if (!(typeof module ===
|
|
50
|
+
if (!(typeof module === 'object') || module === null) {
|
|
51
51
|
const error = `Container for ${jsPackage} did not return an ESM module as expected`;
|
|
52
52
|
console.error(error);
|
|
53
53
|
throw new Error(error);
|
|
@@ -68,9 +68,8 @@ export async function importDynamic<T = any>(
|
|
|
68
68
|
* `getCurrentPageMap()` for every script when bulk loading.
|
|
69
69
|
*/
|
|
70
70
|
export async function preloadImport(jsPackage: string, importMap?: ImportMap) {
|
|
71
|
-
if (typeof jsPackage !==
|
|
72
|
-
const error =
|
|
73
|
-
"Attempted to call importDynamic() without supplying a package to load";
|
|
71
|
+
if (typeof jsPackage !== 'string' || jsPackage.trim().length === 0) {
|
|
72
|
+
const error = 'Attempted to call importDynamic() without supplying a package to load';
|
|
74
73
|
console.error(error);
|
|
75
74
|
throw new Error(error);
|
|
76
75
|
}
|
|
@@ -86,7 +85,7 @@ export async function preloadImport(jsPackage: string, importMap?: ImportMap) {
|
|
|
86
85
|
}
|
|
87
86
|
|
|
88
87
|
let url = activeImportMap.imports[jsPackage];
|
|
89
|
-
if (url.startsWith(
|
|
88
|
+
if (url.startsWith('./')) {
|
|
90
89
|
url = window.spaBase + url.substring(1);
|
|
91
90
|
}
|
|
92
91
|
|
|
@@ -114,28 +113,24 @@ interface FederatedModule {
|
|
|
114
113
|
|
|
115
114
|
function isFederatedModule(a: unknown): a is FederatedModule {
|
|
116
115
|
return (
|
|
117
|
-
typeof a ===
|
|
116
|
+
typeof a === 'object' &&
|
|
118
117
|
a !== null &&
|
|
119
|
-
|
|
120
|
-
typeof a[
|
|
121
|
-
|
|
122
|
-
typeof a[
|
|
118
|
+
'init' in a &&
|
|
119
|
+
typeof a['init'] === 'function' &&
|
|
120
|
+
'get' in a &&
|
|
121
|
+
typeof a['get'] === 'function'
|
|
123
122
|
);
|
|
124
123
|
}
|
|
125
124
|
|
|
126
125
|
// internals to track script loading
|
|
127
126
|
// basically, if we're already loading a script, we should wait until the script is loaded
|
|
128
127
|
// we use a global to track this
|
|
129
|
-
const OPENMRS_SCRIPT_LOADING = Symbol(
|
|
128
|
+
const OPENMRS_SCRIPT_LOADING = Symbol('__openmrs_script_loading');
|
|
130
129
|
|
|
131
130
|
/**
|
|
132
131
|
* Appends a `<script>` to the DOM with the given URL.
|
|
133
132
|
*/
|
|
134
|
-
function loadScript(
|
|
135
|
-
url: string,
|
|
136
|
-
resolve: (value: unknown) => void,
|
|
137
|
-
reject: (reason?: any) => void
|
|
138
|
-
) {
|
|
133
|
+
function loadScript(url: string, resolve: (value: unknown) => void, reject: (reason?: any) => void) {
|
|
139
134
|
const scriptElement = document.head.querySelector(`script[src="${url}"]`);
|
|
140
135
|
let scriptLoading: Set<String> = window[OPENMRS_SCRIPT_LOADING];
|
|
141
136
|
if (!scriptLoading) {
|
|
@@ -144,42 +139,42 @@ function loadScript(
|
|
|
144
139
|
|
|
145
140
|
if (!scriptElement) {
|
|
146
141
|
scriptLoading.add(url);
|
|
147
|
-
const element = document.createElement(
|
|
142
|
+
const element = document.createElement('script');
|
|
148
143
|
element.src = url;
|
|
149
|
-
element.type =
|
|
144
|
+
element.type = 'text/javascript';
|
|
150
145
|
element.async = true;
|
|
151
146
|
const loadFn = () => {
|
|
152
147
|
scriptLoading.delete(url);
|
|
153
|
-
element.removeEventListener(
|
|
148
|
+
element.removeEventListener('load', loadFn);
|
|
154
149
|
resolve(null);
|
|
155
150
|
};
|
|
156
|
-
element.addEventListener(
|
|
151
|
+
element.addEventListener('load', loadFn);
|
|
157
152
|
|
|
158
153
|
const errFn = (ev: ErrorEvent) => {
|
|
159
154
|
scriptLoading.delete(url);
|
|
160
155
|
console.error(`Failed to load script from ${url}`, ev);
|
|
161
|
-
element.removeEventListener(
|
|
156
|
+
element.removeEventListener('error', errFn);
|
|
162
157
|
reject(ev.message);
|
|
163
158
|
};
|
|
164
|
-
element.addEventListener(
|
|
159
|
+
element.addEventListener('error', errFn);
|
|
165
160
|
|
|
166
161
|
document.head.appendChild(element);
|
|
167
162
|
} else {
|
|
168
163
|
if (scriptLoading.has(url)) {
|
|
169
164
|
const loadFn = () => {
|
|
170
|
-
scriptElement?.removeEventListener(
|
|
165
|
+
scriptElement?.removeEventListener('load', loadFn);
|
|
171
166
|
resolve(null);
|
|
172
167
|
};
|
|
173
|
-
scriptElement.addEventListener(
|
|
168
|
+
scriptElement.addEventListener('load', loadFn);
|
|
174
169
|
|
|
175
170
|
const errFn = (ev: ErrorEvent) => {
|
|
176
171
|
console.error(`Failed to load script from ${url}`, ev);
|
|
177
|
-
scriptElement?.removeEventListener(
|
|
172
|
+
scriptElement?.removeEventListener('error', errFn);
|
|
178
173
|
reject(ev.message);
|
|
179
174
|
};
|
|
180
|
-
scriptElement.addEventListener(
|
|
175
|
+
scriptElement.addEventListener('error', errFn);
|
|
181
176
|
} else {
|
|
182
|
-
console.warn(
|
|
177
|
+
console.warn('Script already loaded. Not loading it again.', url);
|
|
183
178
|
resolve(null);
|
|
184
179
|
}
|
|
185
180
|
}
|
package/src/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from './dynamic-loading';
|
package/src/public.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { importDynamic } from
|
|
1
|
+
export { importDynamic } from './dynamic-loading';
|
package/webpack.config.js
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
const ForkTsCheckerWebpackPlugin = require(
|
|
2
|
-
const { resolve, basename } = require(
|
|
3
|
-
const { CleanWebpackPlugin } = require(
|
|
4
|
-
const { BundleAnalyzerPlugin } = require(
|
|
1
|
+
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
|
|
2
|
+
const { resolve, basename } = require('path');
|
|
3
|
+
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
|
|
4
|
+
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
|
|
5
5
|
|
|
6
|
-
const { browser, peerDependencies } = require(
|
|
6
|
+
const { browser, peerDependencies } = require('./package.json');
|
|
7
7
|
|
|
8
8
|
module.exports = (env) => ({
|
|
9
|
-
entry: [resolve(__dirname,
|
|
9
|
+
entry: [resolve(__dirname, 'src/index.ts')],
|
|
10
10
|
output: {
|
|
11
11
|
filename: basename(browser),
|
|
12
|
-
path: resolve(__dirname,
|
|
13
|
-
library: { type:
|
|
12
|
+
path: resolve(__dirname, 'dist'),
|
|
13
|
+
library: { type: 'system' },
|
|
14
14
|
},
|
|
15
|
-
devtool:
|
|
15
|
+
devtool: 'source-map',
|
|
16
16
|
module: {
|
|
17
17
|
rules: [
|
|
18
18
|
{
|
|
19
19
|
test: /\.m?(js|ts|tsx)$/,
|
|
20
20
|
exclude: /node_modules/,
|
|
21
|
-
use:
|
|
21
|
+
use: 'swc-loader',
|
|
22
22
|
},
|
|
23
23
|
],
|
|
24
24
|
},
|
|
25
25
|
externals: Object.keys(peerDependencies || {}),
|
|
26
26
|
resolve: {
|
|
27
|
-
extensions: [
|
|
27
|
+
extensions: ['.ts', '.js', '.tsx', '.jsx'],
|
|
28
28
|
},
|
|
29
29
|
plugins: [
|
|
30
30
|
new CleanWebpackPlugin(),
|
|
31
31
|
new ForkTsCheckerWebpackPlugin(),
|
|
32
32
|
new BundleAnalyzerPlugin({
|
|
33
|
-
analyzerMode: env && env.analyze ?
|
|
33
|
+
analyzerMode: env && env.analyze ? 'static' : 'disabled',
|
|
34
34
|
}),
|
|
35
35
|
],
|
|
36
36
|
devServer: {
|
|
37
37
|
disableHostCheck: true,
|
|
38
38
|
headers: {
|
|
39
|
-
|
|
39
|
+
'Access-Control-Allow-Origin': '*',
|
|
40
40
|
},
|
|
41
41
|
},
|
|
42
42
|
});
|