html-validate
Advanced tools
Changelog
9.0.0 (2024-12-23)
ESM support has finally landed in HTML-Validate V9!
.htmlvalidate.mjs
or when "type"
is "module"
in package.json
).This release is primarly breaking for API uses but some configuration changes might be required (see below).
For API users the TL;DR version is most functions can return a Promise
so make sure to await
it.
config: This change affects all users. The following deprecated configuration presets has been removed:
htmlvalidate:recommended
- replace with html-validate:recommended
.htmlvalidate:document
- replace with html-validate:document
.html-validate:a17y
- replace with html-validate:a11y
.cli: CLI uses ESM (with esmResolver
). For most part this shouldn't
affect anything but in some cases you might need slight configuration
migration. See Migration Guide for details.
cli: use ESM in CLI
meta: The deprecated metadata property expressions have been removed and can be replaced with callback functions. This gives greater control for the metadata author, provides better IDE support and is more reusable when querying the metadata directly.
deps: Requires NodeJS v18 or later.
api: Config.merge(..)
will return a Promise
when used with an
async loader or resolver.
api: The deprecated tag:open
and tag:close
events has been
removed, use tag:begin
and tag:end
instead.
api: The Config.resolve()
method can return a Promise
if any
underlying loader or resolver has returned a Promise
.
It is recommended to assume it returns a Promise
and always await
the
result:
-const resolved = config.resolve();
+const resolved = await config.resolve();
If you need synchronous code ensure the configuration, the loader and the
resolver all returns synchronous results, e.g. the staticResolver
with
synchronous code.
api: The HtmlValidate.getConfigurationSchema()
method is now async
and returns a Promise
. If you use this method you need to await the result:
-const schema = htmlvalidate.getConfigurationSchema();
+const schema = await htmlvalidate.getConfigurationSchema();
api: If you are writing your own transformers they may now
optionally return a Promise
. If you are using test-utils
to write unit tests
you must now resolve the promise.
import { transformSource } from "html-validate/test-utils";
-const result = transformSource(transformer, source);
+const result = await transformSource(transformer, source);
This is no matter if your transformer is actually async or not.
api: The CLI.isIgnored(..)
method has been removed from the public
API. There is no replacement. If you need this method open an issue describing
the use-case.
api: If you are using the CLI
class most methods are now async and
returns Promise
. There is no synchronous version of these API calls.
api: Config.fromFile(..)
and Config.fromObject(..)
will return a
Promise when used with an async loader or resolver.
api: ConfigLoader
methods can optionally return a Promise
for
async operation. For most use-cases this will not require any changes.
api: The ConfigLoader.globalConfig
property has been replaced with
ConfigLoader.getGlobalConfig()
(async) and
ConfigLoader.getGlobalConfigSync()
(sync).
api: The redundant and deprecated Config.init()
method has been
removed.
Remove any calls to the method:
const config = Config.fromObject({ /* ... */ });
-config.init();
CLI.isIgnored()
made private (9e3679a)CLI
methods async and return Promise (677c73e)Config.fromFile
and Config.fromObject
can return Promise
(b126361)Config.merge(..)
can return Promise
(cccb313)Config.resolve()
can return Promise
(09159f3)ConfigLoader
s can optionally return Promise
for async operation (6041581)FileSystemConfigLoader
uses esmResolver
by default (dd4cfb1)HtmlValidate.getConfigurationSchema()
returns promise (f10ec1a)esmResolver
using import(..)
(available for both nodejs and browser) (81b4777), closes #230Config.init()
(0bd8ab7)tag:open
and tag:close
events (88ac65e)ConfigLoader.globalConfig
with ConfigLoader.getGlobalConfig()
(a64935a)Promise
for async operation (fe3c6a6)Promise
for async operation (823da19)esmResolver
) (3e4759e).htmlvalidate.mjs
configuration files (0ffd9b5), closes #125