All files / src/modules documentFactory.ts

25% Statements 5/20
0% Branches 0/7
0% Functions 0/2
26.32% Lines 5/19
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 341x   1x 1x   1x                                                       1x
import DocumentLike     from '../NodeLike/ParentNodeLike/DocumentLike/DocumentLike';
import IDocumentLike    from '../NodeLike/ParentNodeLike/DocumentLike/IDocumentLike';
import isIDocumentLike  from '../TypeGuards/isIDocumentLike';
import storyDataFactory from './storyDataFactory';
import TPassage         from '../TypeAliases/TPassage';
const docConstruct = function docConstruct() { return new DocumentLike(); };
function documentFactory(
  passages:            Array<TPassage>,
  documentConstructor: Function = docConstruct): IDocumentLike
{
  let doc: IDocumentLike | null = null;
  if (documentConstructor &&
    typeof documentConstructor === 'function')
  {
    doc = documentConstructor();
  }
 
  if (!isIDocumentLike(doc)) {
    throw new Error('The documentConstructor function did not create a ' +
                    'valid document.');
  }
 
  const documentElement = doc.createElement('html');
  doc.appendChild(documentElement);
  const head = doc.createElement('head');
  documentElement.appendChild(head);
  const body = doc.createElement('body');
  documentElement.appendChild(body);
  const storyData = storyDataFactory(passages, doc);
  body.appendChild(storyData);
  return doc;
}
 
export default documentFactory;