const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin')
const mf = require('@angular-architects/module-federation/webpack')
const path = require('path')
const share = mf.share

const sharedMappings = new mf.SharedMappings()
sharedMappings.register(path.join(__dirname, 'tsconfig.json'), [])

module.exports = {
  output: {
    uniqueName: 'shell',
    publicPath: 'http://localhost:3000/',
  },
  optimization: {
    runtimeChunk: false,
  },
  resolve: {
    alias: {
      ...sharedMappings.getAliases(),
    },
  },
  plugins: [
    new ModuleFederationPlugin({
      remotes: {
        mfe1: 'mfe1@http://localhost:3001/remoteEntry.js',
        mfe2: 'mfe2@http://localhost:3002/remoteEntry.js',
        mfe3: 'mfe3@http://localhost:3003/remoteEntry.js',
      },
      shared: share({
        'assets/img': { singleton: true },
        '@angular/core': {
          singleton: true,
          strictVersion: true,
          requiredVersion: 'auto',
        },
        '@angular/common': {
          singleton: true,
          strictVersion: true,
          requiredVersion: 'auto',
        },
        '@angular/common/http': {
          singleton: true,
          strictVersion: true,
          requiredVersion: 'auto',
        },
        '@angular/router': {
          singleton: true,
          strictVersion: true,
          requiredVersion: 'auto',
        },
        'my-shared': {
          singleton: true,
          strictVersion: true,
          import: 'my-shared',
          requiredVersion: '*',
        },
        'dynamic-core': {
          singleton: true,
          strictVersion: true,
          import: 'dynamic-core',
          requiredVersion: '*',
        },
        'dynamic-components': {
          singleton: true,
          strictVersion: true,
          import: 'dynamic-components',
          requiredVersion: '*',
        },
        ...sharedMappings.getDescriptors(),
      }),
    }),
    sharedMappings.getPlugin(),
  ],
}
