diff --git a/packages/module-federation-common/package.json b/packages/module-federation-common/package.json index 15acc57fbd..31a03b686f 100644 --- a/packages/module-federation-common/package.json +++ b/packages/module-federation-common/package.json @@ -39,14 +39,12 @@ "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/types": "workspace:^", - "@module-federation/runtime": "^0.21.6", - "serialize-javascript": "^6.0.0" + "@module-federation/runtime": "^0.21.6" }, "devDependencies": { "@backstage/cli": "workspace:^", "@backstage/test-utils": "workspace:^", "@types/react": "^18.0.0", - "@types/serialize-javascript": "^5.0.4", "react": "^18.0.2", "react-dom": "^18.0.2", "react-router-dom": "^6.3.0" diff --git a/packages/module-federation-common/src/runtime.ts b/packages/module-federation-common/src/runtime.ts index 1670d8c941..dada9dcf46 100644 --- a/packages/module-federation-common/src/runtime.ts +++ b/packages/module-federation-common/src/runtime.ts @@ -15,7 +15,6 @@ */ import { Host, Runtime, SharedDependencies } from './types'; -import { default as serialize } from 'serialize-javascript'; import type { UserOptions } from '@module-federation/runtime/types'; import { ForwardedError } from '@backstage/errors'; @@ -37,7 +36,8 @@ const BACKSTAGE_RUNTIME_SHARED_DEPENDENCIES_GLOBAL = export function prepareRuntimeSharedDependenciesScript( hostSharedDependencies: SharedDependencies, ) { - const runtimeSharedDependencies: SharedDependencies = + type StringModule = Omit & { module: string }; + const runtimeSharedDependencies: SharedDependencies = Object.fromEntries( Object.entries(hostSharedDependencies).map(([name, sharedDep]) => [ name, @@ -48,20 +48,18 @@ export function prepareRuntimeSharedDependenciesScript( ? { singleton: sharedDep.singleton } : {}), ...(sharedDep.eager !== undefined ? { eager: sharedDep.eager } : {}), - // eslint-disable-next-line no-new-func - module: new Function( - `return () => import('${name}')`, - )() as () => Promise, + module: `() => import('${name}')`, }, ]), ); - return `window['${BACKSTAGE_RUNTIME_SHARED_DEPENDENCIES_GLOBAL}'] = ${serialize( + return `window['${BACKSTAGE_RUNTIME_SHARED_DEPENDENCIES_GLOBAL}'] = ${JSON.stringify( runtimeSharedDependencies, - { - space: 2, - unsafe: true, - }, + null, + 2, + ).replace( + /(^\s+"module":\s*)"([^"]+)"$/gm, + (_, start, unquoted) => `${start}${unquoted}`, )};`; } diff --git a/yarn.lock b/yarn.lock index 7dcfbd2512..8135ad7473 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4059,11 +4059,9 @@ __metadata: "@backstage/types": "workspace:^" "@module-federation/runtime": "npm:^0.21.6" "@types/react": "npm:^18.0.0" - "@types/serialize-javascript": "npm:^5.0.4" react: "npm:^18.0.2" react-dom: "npm:^18.0.2" react-router-dom: "npm:^6.3.0" - serialize-javascript: "npm:^6.0.0" peerDependencies: "@emotion/react": ^11.10.5 "@material-ui/core": ^4.12.2 @@ -22050,13 +22048,6 @@ __metadata: languageName: node linkType: hard -"@types/serialize-javascript@npm:^5.0.4": - version: 5.0.4 - resolution: "@types/serialize-javascript@npm:5.0.4" - checksum: 10/c342a4d151736c1ba4913e6d9b00537bcf62401a06e3489dcf96b7d51a4ab147efcf3fe20ca9491b1349ee7e55c6d69606682e1630f2e076e2828eaee3764f94 - languageName: node - linkType: hard - "@types/serve-handler@npm:^6.1.0": version: 6.1.4 resolution: "@types/serve-handler@npm:6.1.4" @@ -46061,7 +46052,7 @@ __metadata: languageName: node linkType: hard -"serialize-javascript@npm:^6.0.0, serialize-javascript@npm:^6.0.2": +"serialize-javascript@npm:^6.0.2": version: 6.0.2 resolution: "serialize-javascript@npm:6.0.2" dependencies: