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; |