Skip to content


Choose a tag to compare
@bluwy bluwy released this 26 Jul 15:40
· 72 commits to master since this release

Breaking changes

Note: If you're using publint from the CLI, these breaking changes should not affect you.

  • publint() now returns an object with messages instead of the messages array directly. This makes way for future APIs where publint will return more information than just messages.

    - const messages = await publint()
    + const { messages } = await publint()
  • Rename printMessage API to formatMessage to better reflect it's intent. (#43)

    - import { printMessage } from "publint/utils"
    + import { formatMessage } from "publint/utils"
    const { messages } = await publint()
    for (const message of messages) {
    - console.log(printMessage(message))
    + console.log(formatMessage(message))
  • Remove filePath arg for the FILE_DOES_NOT_EXIST message.

    import type { Message } from "publint"
    import { getPkgPathValue } from "publint/utils"
    function messageToString(message: Message, pkg: Record<string, any>) {
      switch (message.code) {
        case "FILE_DOES_NOT_EXIST":
    -     return `The file "${message.args.filePath}" does not exist.`
    +     return `The file "${getPkgPathValue(pkg, message.path)}" does not exist.`
  • Remove the import condition for the publint package. This provides a better error message if you call require("publint").


  • Improve warnings when the exported "types" condition has an invalid format in ESM or CJS. This ensures your library's types will work in both environments when dual publishing. (#46)

    It affects packages commonly packaged like:

      "exports": {
        ".": {
          "types": "./index.d.ts", <-- only works in CJS
          "import": "./index.mjs",
          "require": "./index.js",

    For more information, visit the rules documentation. This feature is inspired by

Bug fixes

  • Suppress warnings when exported JS files using the "exports" field have adjacent .d.ts files and no "types" condition. This follows TypeScript's resolution algorithm. For more information, visit the rules documentation. (#46)

Full Changelog: v0.1.16...v0.2.0