UNPKG

vanilla-native-federation

Version:

A lightweight **runtime micro frontend orchestrator** that loads micro frontends built with native federation into any web page. It can cache dependencies across page reloads, making it perfect for traditional server-rendered hosts (PHP, Java, Rails, etc.

8 lines (7 loc) 5.36 kB
{ "version": 3, "sources": ["../../src/lib/native-federation.error.ts", "../../src/lib/2.app/flows/audit/externals-audit.ts"], "sourcesContent": ["class NFError extends Error {\n constructor(message: string, cause?: Error) {\n super(message, cause);\n this.name = 'NFError';\n }\n}\n\nexport { NFError };\n", "import { NFError } from 'lib/native-federation.error';\nimport type { LoggingConfig, ModeConfig } from '../../config';\nimport type { DrivingContract } from '../../driving-ports/driving.contract';\nimport type { RemoteEntry, SharedExternal, SharedVersion } from 'lib/1.domain';\nimport type { ForAuditingExternals } from '../../driver-ports/audit/for-auditing-externals.port';\n\nexport function createExternalsAudit(\n config: LoggingConfig & ModeConfig,\n ports: Pick<DrivingContract, 'versionCheck' | 'sharedExternalsRepo' | 'scopedExternalsRepo'>\n): ForAuditingExternals {\n return remoteEntry => {\n let success = true;\n remoteEntry.shared\n .filter(external => !external.singleton)\n .forEach(external => {\n const isValid = checkIfExternalCouldBeSingleton(external, remoteEntry);\n if (!isValid) success = false;\n });\n\n const isValid = warnForScopedSingletons(remoteEntry);\n if (!isValid) success = false;\n\n if (!success && config.strict.strictExternalCompatibility) {\n config.log.error(3, `[${remoteEntry.name}] Not all externals are compatible.`);\n return Promise.reject(new NFError(`Failed externals audit`));\n }\n return Promise.resolve();\n };\n\n function checkIfExternalCouldBeSingleton(\n targetExternal: { packageName: string; requiredVersion: string },\n remoteEntry: RemoteEntry\n ) {\n for (const shareScope of ports.sharedExternalsRepo.getScopes()) {\n const sharedExternal =\n ports.sharedExternalsRepo.getFromScope(shareScope)[targetExternal.packageName];\n if (!sharedExternal) continue;\n\n for (const version of sharedExternal.versions) {\n if (version.action !== 'share') return true;\n\n if (ports.versionCheck.isCompatible(version.tag, targetExternal.requiredVersion)) {\n const msg = `[${remoteEntry.name}][scoped][${shareScope}][${targetExternal.packageName}] External is compatible with shared range '${version.remotes[0]!.requiredVersion}'. Should be 'singleton: true'`;\n config.log.warn(3, msg);\n return false;\n }\n }\n }\n return true;\n }\n\n function warnForScopedSingletons(remoteEntry: RemoteEntry) {\n let success = true;\n for (const shareScope of ports.sharedExternalsRepo.getScopes()) {\n for (const [packageName, external] of Object.entries<SharedExternal>(\n ports.sharedExternalsRepo.getFromScope(shareScope)\n )) {\n for (const version of external.versions as SharedVersion[]) {\n if (version.action !== 'scope') continue;\n\n if (version.remotes.some(remote => remote.name === remoteEntry.name)) {\n const sharedVersion = external.versions.find(v => v.action === 'share');\n const isOlder =\n sharedVersion && ports.versionCheck.compare(version.tag, sharedVersion.tag) === -1;\n\n let msg = `[${remoteEntry.name}][shared][${shareScope}][${packageName}@${version.tag}] External is ${\n isOlder ? 'older' : 'newer'\n } than shared compatible range '${sharedVersion?.remotes[0]!.requiredVersion}'.`;\n\n if (isOlder) {\n success = false;\n msg += \" Should be 'singleton: false'\";\n }\n config.log.warn(3, msg);\n }\n }\n }\n }\n return success;\n }\n}\n"], "mappings": ";AAAA,IAAM,UAAN,cAAsB,MAAM;AAAA,EAC1B,YAAY,SAAiB,OAAe;AAC1C,UAAM,SAAS,KAAK;AACpB,SAAK,OAAO;AAAA,EACd;AACF;;;ACCO,SAAS,qBACd,QACA,OACsB;AACtB,SAAO,iBAAe;AACpB,QAAI,UAAU;AACd,gBAAY,OACT,OAAO,cAAY,CAAC,SAAS,SAAS,EACtC,QAAQ,cAAY;AACnB,YAAMA,WAAU,gCAAgC,UAAU,WAAW;AACrE,UAAI,CAACA,SAAS,WAAU;AAAA,IAC1B,CAAC;AAEH,UAAM,UAAU,wBAAwB,WAAW;AACnD,QAAI,CAAC,QAAS,WAAU;AAExB,QAAI,CAAC,WAAW,OAAO,OAAO,6BAA6B;AACzD,aAAO,IAAI,MAAM,GAAG,IAAI,YAAY,IAAI,qCAAqC;AAC7E,aAAO,QAAQ,OAAO,IAAI,QAAQ,wBAAwB,CAAC;AAAA,IAC7D;AACA,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAEA,WAAS,gCACP,gBACA,aACA;AACA,eAAW,cAAc,MAAM,oBAAoB,UAAU,GAAG;AAC9D,YAAM,iBACJ,MAAM,oBAAoB,aAAa,UAAU,EAAE,eAAe,WAAW;AAC/E,UAAI,CAAC,eAAgB;AAErB,iBAAW,WAAW,eAAe,UAAU;AAC7C,YAAI,QAAQ,WAAW,QAAS,QAAO;AAEvC,YAAI,MAAM,aAAa,aAAa,QAAQ,KAAK,eAAe,eAAe,GAAG;AAChF,gBAAM,MAAM,IAAI,YAAY,IAAI,aAAa,UAAU,KAAK,eAAe,WAAW,+CAA+C,QAAQ,QAAQ,CAAC,EAAG,eAAe;AACxK,iBAAO,IAAI,KAAK,GAAG,GAAG;AACtB,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,WAAS,wBAAwB,aAA0B;AACzD,QAAI,UAAU;AACd,eAAW,cAAc,MAAM,oBAAoB,UAAU,GAAG;AAC9D,iBAAW,CAAC,aAAa,QAAQ,KAAK,OAAO;AAAA,QAC3C,MAAM,oBAAoB,aAAa,UAAU;AAAA,MACnD,GAAG;AACD,mBAAW,WAAW,SAAS,UAA6B;AAC1D,cAAI,QAAQ,WAAW,QAAS;AAEhC,cAAI,QAAQ,QAAQ,KAAK,YAAU,OAAO,SAAS,YAAY,IAAI,GAAG;AACpE,kBAAM,gBAAgB,SAAS,SAAS,KAAK,OAAK,EAAE,WAAW,OAAO;AACtE,kBAAM,UACJ,iBAAiB,MAAM,aAAa,QAAQ,QAAQ,KAAK,cAAc,GAAG,MAAM;AAElF,gBAAI,MAAM,IAAI,YAAY,IAAI,aAAa,UAAU,KAAK,WAAW,IAAI,QAAQ,GAAG,iBAClF,UAAU,UAAU,OACtB,kCAAkC,eAAe,QAAQ,CAAC,EAAG,eAAe;AAE5E,gBAAI,SAAS;AACX,wBAAU;AACV,qBAAO;AAAA,YACT;AACA,mBAAO,IAAI,KAAK,GAAG,GAAG;AAAA,UACxB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;", "names": ["isValid"] }