mikaelvesavuori/figmagic

View on GitHub
bin/frameworks/filesystem/prepareWrite.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { WriteOperation, GetFileDataOperation, FileContentAndPath } from '../../contracts/Write';

import { getElement, getText, getExtraProps, getImports } from './getDataHelpers';
import { getFileContentAndPath } from '../filesystem/getFileContentAndPath';

import { ErrorPrepareWrite, ErrorWriteFile } from '../errors/errors';

/**
 * @description Controller that starts the prepping/formatting of the file(s)
 */
export function prepareWrite(writeOperation: WriteOperation): FileContentAndPath {
  if (!writeOperation) throw Error(ErrorWriteFile);

  const {
    type,
    file,
    path,
    name,
    format,
    outputFolderTokens,
    tokensRelativeImportPrefix,
    metadata,
    templates
  } = writeOperation;

  if ((type === 'css' || type === 'story' || type === 'component') && !templates)
    throw Error(ErrorPrepareWrite);

  const getFileDataOperation: GetFileDataOperation = {
    type,
    file,
    path,
    name: name.replace(/\s/g, ''),
    format,
    text: getText(metadata),
    element: getElement(metadata),
    imports: getImports(metadata, outputFolderTokens, tokensRelativeImportPrefix),
    extraProps: getExtraProps(metadata),
    metadata,
    templates
  };

  return getFileContentAndPath(getFileDataOperation);
}