ng-dynamic-mf
Version:
[](https://www.npmjs.com/package/ng-dynamic-mf) [
{"version":3,"file":"ng-dynamic-mf.mjs","sources":["../../projects/ng-dynamic-mf/src/lib/html-head/html-head.service.ts","../../projects/ng-dynamic-mf/src/lib/module-loading/loaded-modules.ts","../../projects/ng-dynamic-mf/src/lib/utils/path.ts","../../projects/ng-dynamic-mf/src/lib/resource-map/resource-mapper.ts","../../projects/ng-dynamic-mf/src/lib/module-loading/load-module.ts","../../projects/ng-dynamic-mf/src/lib/module-loading/load-modules.ts","../../projects/ng-dynamic-mf/src/lib/resource-map/resource-map.pipe.ts","../../projects/ng-dynamic-mf/src/lib/router-entry/find-parent-of-route-recursive.ts","../../projects/ng-dynamic-mf/src/lib/router-entry/is-already-in-config.ts","../../projects/ng-dynamic-mf/src/lib/router-entry/router-entry.service.ts","../../projects/ng-dynamic-mf/src/ng-dynamic-mf.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\r\nimport { inject, Injectable } from '@angular/core';\r\n\r\nimport { AddHtmlHeadElementType } from './html-head-types.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class HtmlHeadService {\r\n private readonly _document = inject(DOCUMENT);\r\n private readonly _knownElements = new Set<string>();\r\n\r\n public addElement(element: AddHtmlHeadElementType) {\r\n const head = this._document.getElementsByTagName('head')[0];\r\n const el = this._document.createElement(element.type);\r\n switch (element.type) {\r\n case 'link': {\r\n if (this._knownElements.has(element.href)) {\r\n return;\r\n }\r\n const link = el as HTMLLinkElement;\r\n link.rel = element.rel;\r\n link.href = element.href;\r\n this._knownElements.add(element.href);\r\n break;\r\n }\r\n case 'script': {\r\n if (this._knownElements.has(element.src)) {\r\n return;\r\n }\r\n const script = el as HTMLScriptElement;\r\n script.src = element.src;\r\n script.crossOrigin = element.crossorigin ?? null;\r\n if (element.data) {\r\n Object.keys(element.data).forEach(key => {\r\n script.setAttribute(`data-${key}`, element.data![key]);\r\n });\r\n }\r\n this._knownElements.add(element.src);\r\n break;\r\n }\r\n }\r\n head.appendChild(el);\r\n }\r\n}\r\n","/**\r\n * Add this to your imports of your angular module to automatically add all remote modules to the app.\r\n */\r\nexport const loadedModules: any[] = [];\r\n","export function join(...paths: string[]): string {\r\n return paths.map(p => normalizePath(p)).join('/');\r\n}\r\n\r\nexport function normalizePath(path: string): string {\r\n return path\r\n .replace(/(?<!:)\\/+/g, '/') // replace every occurence of slashes except the one after the protocol (eg http:// or https://)\r\n .replace(/\\/$/, '') // remove trailing slash\r\n .replace(/^\\//, ''); // remove leading slash\r\n}\r\n","import { join } from '../utils';\r\n\r\nexport const basePaths: { [moduleName: string]: string } = {};\r\n\r\nexport const basePath = (moduleName: string) => {\r\n return basePaths[moduleName] ?? `${location.origin}`;\r\n};\r\n\r\nexport const resourceMapper = (moduleName: string, relativePathFromApp: string) => {\r\n return `${join(basePath(moduleName), relativePathFromApp)}`;\r\n};\r\n","import { environment } from 'ng-dynamic-mf/environment';\r\n\r\nimport { LoadRemoteModule } from './load-remote-module.type';\r\nimport { loadedModules } from './loaded-modules';\r\nimport { ModuleDefinition } from '../models/module-definition.type';\r\nimport { basePaths, resourceMapper } from '../resource-map/resource-mapper';\r\nimport { join } from '../utils';\r\n\r\nexport type MfOrNf = 'mf' | 'nf';\r\n\r\nexport const loadModule = async (\r\n moduleToLoad: ModuleDefinition,\r\n loadRemoteModule: LoadRemoteModule,\r\n mfOrNf: MfOrNf\r\n) => {\r\n fixModuleToLoadUrl(moduleToLoad);\r\n\r\n const remoteEntryFileName = mfOrNf === 'nf' ? 'remoteEntry.json' : 'remoteEntry.js';\r\n\r\n const hash = moduleToLoad.hash ? `?${moduleToLoad.hash}` : '';\r\n\r\n let loadedModule: any;\r\n try {\r\n loadedModule = await loadRemoteModule({\r\n exposedModule: './Module',\r\n remoteEntry: `${join(moduleToLoad.url, remoteEntryFileName)}${hash}`,\r\n });\r\n } catch (error) {\r\n console.error(`Module not loaded: ${moduleToLoad.name}`, error);\r\n return;\r\n }\r\n basePaths[moduleToLoad.name] = moduleToLoad.url;\r\n loadedModules.push(loadedModule[moduleToLoad.ngModuleName]);\r\n if (moduleToLoad.hasGlobalStyles) {\r\n const head = document.getElementsByTagName('head')[0];\r\n const link = document.createElement('link');\r\n link.id = `global-style-${moduleToLoad.name}`;\r\n link.rel = 'stylesheet';\r\n link.type = 'text/css';\r\n link.href = resourceMapper(\r\n moduleToLoad.name,\r\n moduleToLoad.globalStyleBundleName ?? 'global-styles.css'\r\n );\r\n link.media = 'all';\r\n link.onerror = e => {\r\n console.error(`Error loading global styles for module: ${moduleToLoad.name}`, e);\r\n };\r\n head.appendChild(link);\r\n }\r\n if (!environment.production) {\r\n console.debug(`Loaded module: ${moduleToLoad.name}`);\r\n }\r\n};\r\nfunction fixModuleToLoadUrl(moduleToLoad: ModuleDefinition) {\r\n if (!moduleToLoad.url.startsWith('http')) {\r\n if (moduleToLoad.url.startsWith('/')) {\r\n moduleToLoad.url = `.${moduleToLoad.url}`;\r\n } else if (!moduleToLoad.url.startsWith('./')) {\r\n moduleToLoad.url = `./${moduleToLoad.url}`;\r\n }\r\n }\r\n}\r\n","import {\r\n environment,\r\n Environment,\r\n ɵinitializeEnvironment,\r\n ɵreuseEnvironment,\r\n} from 'ng-dynamic-mf/environment';\r\n\r\nimport { loadModule, MfOrNf } from './load-module';\r\nimport { AppStartupSettings, AppStartupSettingsInternal } from './load-module-settings.type';\r\nimport { LoadRemoteModule } from './load-remote-module.type';\r\nimport { loadedModules } from './loaded-modules';\r\nimport { ModuleDefinitions } from '../models/module-definitions.type';\r\n\r\nexport const initializeAppInternal = async (\r\n settings: AppStartupSettings,\r\n loadRemoteModule: LoadRemoteModule,\r\n mfOrNf: MfOrNf\r\n) => {\r\n const actualSettings: AppStartupSettingsInternal = {\r\n loadEnvironment: 'loadAndReuse',\r\n modulePath: '/modules.json',\r\n environmentPath: '/environment.json',\r\n ...settings,\r\n };\r\n\r\n const doLoadEnvironment =\r\n actualSettings.loadEnvironment === 'loadAndReuse' || actualSettings.loadEnvironment === 'load';\r\n\r\n const fetchModules =\r\n settings.type === 'host'\r\n ? fetch(actualSettings.modulePath, { cache: 'no-cache' })\r\n .then(x => x.json())\r\n .catch(() => {\r\n throw new Error('Failed to load modules.json');\r\n })\r\n : Promise.resolve([]);\r\n\r\n const fetchEnvironment = doLoadEnvironment\r\n ? fetch(actualSettings.environmentPath, { cache: 'no-cache' })\r\n .then(x => x.json())\r\n .catch(() => {\r\n throw new Error('Failed to load environment.json');\r\n })\r\n : Promise.resolve({});\r\n\r\n const [moduleDefs, env] = (await Promise.all([fetchModules, fetchEnvironment])) as [\r\n ModuleDefinitions,\r\n Environment,\r\n ];\r\n if (doLoadEnvironment) {\r\n ɵinitializeEnvironment(env, actualSettings.loadEnvironment === 'load');\r\n }\r\n if (actualSettings.loadEnvironment === 'reuse') {\r\n ɵreuseEnvironment();\r\n }\r\n\r\n if (settings.type === 'host') {\r\n const moduleMap: Record<string, string> = {};\r\n moduleDefs.modules.forEach(module => {\r\n moduleMap[module.name] = module.url;\r\n });\r\n await Promise.all(\r\n moduleDefs.modules.map(moduleToLoad => loadModule(moduleToLoad, loadRemoteModule, mfOrNf))\r\n );\r\n if (!environment.production) {\r\n console.debug(\r\n 'Loaded modules:',\r\n moduleDefs.modules.map(x => x.name),\r\n loadedModules\r\n );\r\n }\r\n }\r\n};\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\nimport { resourceMapper } from './resource-mapper';\r\n\r\n@Pipe({\r\n name: 'resourceMap',\r\n})\r\nexport class ResourceMapPipe implements PipeTransform {\r\n transform(value: string, moduleName: string): string {\r\n if (!moduleName) {\r\n throw new Error('The module name is required');\r\n }\r\n return resourceMapper(moduleName, value);\r\n }\r\n}\r\n","import { Route, Routes } from '@angular/router';\r\n\r\nexport const findParentOfRouteRecursive = (routes: Routes, path: string, level = 0): Route | undefined => {\r\n const value = findParentOfRouteRecursiveImpl(routes, path, level);\r\n if (value === true) {\r\n return undefined;\r\n }\r\n return value;\r\n};\r\n\r\nexport const findParentOfRouteRecursiveImpl = (routes: Routes, path: string, level = 0): Route | true | undefined => {\r\n for (const route of routes) {\r\n if (route.path === path) {\r\n if (level === 0) {\r\n throw new Error(\r\n 'The entry point cannot be at the root of the routing configuration.' +\r\n \"You don't need to use this method if you are using the entry point at the root of the routing configuration.\"\r\n );\r\n }\r\n return true;\r\n }\r\n\r\n if (route.children) {\r\n const found = findParentOfRouteRecursiveImpl(route.children, path, level + 1);\r\n if (found === true) {\r\n return route;\r\n } else if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return undefined;\r\n};\r\n","import { Routes } from '@angular/router';\r\n\r\nexport const isAlreadyInConfig = (existingRoutes: Routes, routeConfig: Routes): boolean => {\r\n if (routeConfig.length === 0) {\r\n return true;\r\n }\r\n for (const route of routeConfig) {\r\n const existingRoute = existingRoutes.find(r => r.path === route.path);\r\n if (existingRoute) {\r\n return isAlreadyInConfig(existingRoute.children || [], route.children || []);\r\n }\r\n }\r\n return false;\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { Router, Routes } from '@angular/router';\r\n\r\nimport { findParentOfRouteRecursive } from './find-parent-of-route-recursive';\r\nimport { isAlreadyInConfig } from './is-already-in-config';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RouterEntryService {\r\n private readonly _router: Router;\r\n constructor(router: Router) {\r\n this._router = router;\r\n }\r\n\r\n public registerRoutes(routeConfig: Routes, entryPointName: string = '#module-entry-point#') {\r\n const hostRoutes = this._router.config;\r\n const outletName = entryPointName;\r\n const foundOutlet = findParentOfRouteRecursive(hostRoutes, outletName);\r\n if (!foundOutlet) {\r\n throw new Error(`Could not find outlet \"${outletName}\" in router config.`);\r\n }\r\n const duplicate = isAlreadyInConfig(foundOutlet.children!, routeConfig);\r\n if (duplicate) {\r\n return;\r\n }\r\n const indexInOutlet =\r\n foundOutlet.children?.findIndex(route => route.path === entryPointName) ?? 0;\r\n foundOutlet.children = [\r\n ...foundOutlet.children!.slice(0, indexInOutlet),\r\n ...routeConfig,\r\n ...foundOutlet.children!.slice(indexInOutlet),\r\n ];\r\n this._router.resetConfig(hostRoutes);\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ɵinitializeEnvironment","ɵreuseEnvironment"],"mappings":"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"}