Properties

message

Required

A string that will be shown as the default title for the check when running the CLI and Commonality Studio.

validate

Required

The validate function is used to set the check’s status to pass, warn, or fail.

The validate function will be run against all packages matching a selector.

This function can be asynchronous.

Parameters

context
CheckContext
An object containing metadata about the package the check is being run against.

Returns

If the function returns true, the check will be set to pass. If the function returns any other value, the check will be set to warn or fail based on the configured level.

import type { Check } from 'commonality';

export default {
  message: 'Package has a CODEOWNER',
  validate: (ctx) => Boolean(ctx.codeowners.length),
} satisfies Check;

Returning a message object allows you to modify the check’s default message and provide additional context about the status of the check.

import type { Check } from 'commonality';
import { json, diff } from 'commonality';

export default {
  message: 'Package has internal config',
  validate: (ctx) => {
    // ...validation logic

    if (fileExists) {
      return {
        // This message will override the default message
        message: 'File "internal-config.json" does not exist',
        // This path will be shown directly underneath the message for quicker debugging
        path: ctx.package.path,
        // This will be shown as a suggestion for how to fix the issue
        suggestion: diff(source, expected)
      };
    }
  },
} satisfies Check;

fix

A check’s fix function will only run on packages that where the check’s validate function has returned a falsey value. This function should update packages so that they pass the check’s validate function.

This function can be asynchronous.

We provide helper utilities like json and text to make it easier to read and write to files in fix functions.

Parameters

context
CheckContext
An object containing metadata about the package the check is being run against.
import type { Check } from 'commonality';
import { json } from 'commonality';

export default {
  return {
    //...
    fix: async (ctx) => {
      const tsConfig = await json(ctx.package.path, 'tsconfig.json').get();

      if (!tsConfig) {
        return;
      }

      await tsConfig.merge({ extends: base });
    },
  };
} satisfies Check;

level

A string that can be set to “warning” or “error”.

If set to "error", the CLI will exit with a non-zero exit code if this check is ever invalid. Default is "warning".