¿Cómo resuelvo una dependencia circular en módulos ES6 con una función de fábrica?

Quiero escribir algo como esto dentro de misrc/core/Chessman.js archivo:

import King from './chessmen/King'

class Chessman {
  static factory(side, quality) {
    switch(quality) {
      case 'king' : return new King(side) break
      // ... other qualities
    }

    constructor(side) { this.side = side }

    cast(position, ref) { }

    run(position, startRef, endRef) {}
  }

y dentro de misrc/core/chessmen/King.js archivo:

import Chessman from '../Chessman'

class King extends Chessman {

  constructor(side) {
    super(side)
    this.iterative = false // true for Queens, Rooks and Bishop
    this.directions = [
      'up', 'up+right', 'right', 'right+down', 
      'down', 'down+left', 'left', 'left+top'
    ]
  }

  // overrides parent behavior
  cast(position, ref) {}
  run(position, startRef, endRef) {}
}

Pero lamentablemente recibo el error (durante la prueba) con Karma, jazmín y babel

TypeError: la súper expresión debe ser nula o una función, no indefinida en src / core / chessmen / King.js: 57

Y no hay línea 57 por el momento enKing.js !

Respuestas a la pregunta(2)

Su respuesta a la pregunta