File

libs/nx/src/executors/journal/journal.impl.ts

Index

Properties

Properties

error
Type function
hasErrors
Type function
info
Type function
success
Type function
warn
Type function
import { ExecutorContext } from '@nx/devkit';
import chalk from 'chalk';
import { join, relative } from 'path';
import { extractPackageJsonData } from '../shared/metadata-utils/extract-package-json-data';
import { JournalExecutorSchema } from './schema';
import { generateJournal } from './utils/generate-journal';
import { writeJournal } from './write-journal';

export default async function runJournalExecutor(
  options: JournalExecutorSchema,
  context: ExecutorContext
) {
  const logger = createLogger();
  logger.info(`Running Journal Executor on '${options.project}'`);

  // TODO: infer project path from executor context
  const projectPath = join(context.root, options.project);
  // TODO: use sane default for outputFile
  const outputFile = join(context.root, options.outputFile);

  const { name: packageName } = extractPackageJsonData(projectPath);

  const data = await generateJournal({
    libraryFolder: projectPath,
    packageName,
    logger
  });

  await writeJournal(outputFile, data);

  if (logger.hasErrors()) {
    logger.error('The executor failed to create a proper Journal file due to the above error(s).');
    return {
      success: false
    };
  }

  logger.success(`Success ✓\nJournal written to '${relative(context.root, outputFile)}'`);
  return { success: true };
}

export interface JournalLogger {
  info: (message: string) => void;
  error: (message: string) => void;
  success: (message: string) => void;
  warn: (message: string) => void;
  hasErrors: () => boolean;
}

export function createLogger(): JournalLogger {
  let hasError = false;

  return {
    info: (message: string) => console.info(message),
    error: (message: string) => {
      hasError = true;
      console.error(chalk.red(message));
    },
    success: (message: string) => console.info(chalk.green(message)),
    warn: (message: string) => console.warn(chalk.yellow(message)),
    hasErrors: () => hasError
  };
}

results matching ""

    No results matching ""