qiwi/module-federation-manifest-plugin

View on GitHub
src/main/ts/identifier-parsers/remote-module.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import { IdentifierParser } from './interface'

export interface ParsedRemoteModule {
  remoteName: string
  moduleName: string
  shareScope: string
}

class RemoteModuleParser implements IdentifierParser<ParsedRemoteModule> {
  private readonly REMOTE_MODULE_IDENTIFIER_REGEX = /remote \((.*)\) webpack\/container\/reference\/(\S+) (.+)/

  canActive(identifier: string): boolean {
    return identifier.startsWith('remote ')
  }

  parse(identifier: string): ParsedRemoteModule {
    const [, shareScope, remoteName, moduleName] = Array.from(
      identifier.match(this.REMOTE_MODULE_IDENTIFIER_REGEX) || [],
    )

    return {
      remoteName,
      moduleName: moduleName.replace(/^\.\//, ''),
      shareScope,
    }
  }
}

export const remoteModuleParser = new RemoteModuleParser()