Releases: publint/publint
v0.2.7
Features
- If the library exports from both
"main"
/"module"
and"exports"
fields, but the"exports"
field doesn't export the root entrypoint, warn about the inconsistency. When"exports"
is defined, it takes the highest priority, so all the library's entrypoint (root and deep) needs to be specified here. (#88) - Suggest using the
"type"
field. In Node.js v20.10.0, it introduces a new--experimental-default-type
flag to flip the default module system from "CJS-as-default" to "ESM-as-default". It's recommended for libraries to specify the"type"
field explicitly to prevent CJS files from being incorrectly interpreted as ESM. This suggestion helps push towards a better ESM experience in the future. (#83)
Full Changelog: v0.2.6...v0.2.7
v0.2.6
v0.2.5
v0.2.4
Bug fixes
- Check for packed files locally before providing the
"files"
suggestion. An incorrect suggestion was given when you're using.npmignore
or.gitignore
to limit publishing certain files.
Site
- Fix rules page mobile responsiveness
Full Changelog: v0.2.3...v0.2.4
v0.2.3
Features
-
Error if
package.json
has fields with invalid string, boolean, object, etc type (#73) -
Suggest using the
"files"
field if detected test or config files are published (#77) -
Warn on
"exports"
and"browser"
object conflict for browser-ish environments (#58)For example, given this setup:
{ "browser": { "./lib.server.js": "./lib.browser.js" }, "exports": { ".": { "worker": "./lib.server.js", "browser": "./lib.browser.js", "default": "./lib.server.js" } } }
When matching the
"worker"
condition, it will resolve to"./lib.server.js"
which is intended to work in a worker environment. However, the"browser"
field also has a matching mapping for"./lib.server.js"
, causing the final resolved path to be"./lib.browser.js"
. This is usually not intended and causes the wrong file to be loaded. -
Error on invalid JSX extensions, such as
.cjsx
,.mjsx
,.ctsx
, and.mtsx
(#76)These extensions are usually mistaken as ESM and CJS variants of JSX, which is not valid. Instead they should be written in ESM with the
.jsx
extension instead.
Bug fixes
- Skip file format checks only for globbed files
- Fix
"main"
field with ESM content detection (#75)
Site
- Add sidebar menu to rules page by @btea (#65)
- Quickly scroll to the prompt information location by @btea (#68)
- Fix version switch title not updated by @btea (#72)
- Improve documentation for
"types"
format - Fix message border styles
- Fix docs list missing dot
Full Changelog: v0.2.2...v0.2.3
v0.2.2
Features
- Lint
"typings"
field file existence (#60) - Check packed files when globbing exports locally (#61)
- Improve
"browser"
field suggestion for using"imports"
and"exports"
fields instead (#59)
Bug fixes
- Lower deprecated trailing slash glob syntax as
suggestion
instead of awarning
when it's used for backwards compatibility only (#62) - Suppress invalid globbed file format if has correct adjacent file
- Fix extension replacement in messages
- Improve invalid types format message and docs
Site
- Fix invalid package name not found message
- Highlight code blocks in rules page
New Contributors
Full Changelog: v0.2.1...v0.2.2
v0.2.1
Bug fixes
- Fix
"types"
condition check with"exports"
array format - Disable packed files search when a
vfs
is passed - Fix
"browser"
field file existence extensions check - Fix file existence check with trailing slash
Site
- Site-wide design touch-up
- New "Popular packages" section
- New package version select switcher (#56)
- New navigation header design
- Update bottom documentation for clarity
- Improve repo URL parsing
New Contributors
- @lachlancollins made their first contribution in #53
Full Changelog: v0.2.0...v0.2.1
v0.2.0
Breaking changes
Note: If you're using publint
from the CLI, these breaking changes should not affect you.
-
publint()
now returns an object withmessages
instead of themessages
array directly. This makes way for future APIs wherepublint
will return more information than justmessages
.- const messages = await publint() + const { messages } = await publint()
-
Rename
printMessage
API toformatMessage
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 theFILE_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 thepublint
package. This provides a better error message if you callrequire("publint")
.
Features
-
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 https://arethetypeswrong.github.io.
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