Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

html-validate

html-validate490.4kMIT9.5.3TypeScript support: included

Offline html5 validator

html, lint, validator, html-validate

readme

html-validate

pipeline status coverage report

Offline HTML5 validator. Validates either a full document or a smaller (incomplete) template, e.g. from an AngularJS or Vue.js component.

Read the full documentation at https://html-validate.org/

Features

  • Can test fragments of HTML, for instance a component template.
  • Does not upload any data to a remote server, all testing is done locally.
  • Strict and non-forgiving parsing. It will not try to correct any incorrect markup or guess what it should do.

Usage

npm install -g html-validate
html-validate [OPTIONS] [FILENAME..] [DIR..]

Configuration

Create .htmlvalidate.json:

{
  "extends": [
    "html-validate:recommended"
  ],

  "rules": {
    "close-order": "error",
    "void": ["warn", {"style": "omit"}]
  }
}

Example

<p>
  <button>Click me!</button>
  <div id="show-me">
    Lorem ipsum
  </div>
</p>
  1:1  error  Element <p> is implicitly closed by adjacent <div>  no-implicit-close
  2:2  error  Button is missing type attribute                    button-type
  6:4  error  Unexpected close-tag, expected opening tag          close-order

Bundles

The library comes in four flavours:

  • CommonJS full (dist/cjs/index.js)
  • CommonJS browser (dist/cjs/browser.js)
  • ESM full (dist/es/index.js)
  • ESM browser (dist/es/browser.js)

The browser bundle contains a slimmed version without CLI and NodeJS dependencies.

/* automatically determine build based on `browser` export condition */
import { ... } from "html-validate";

/* explicitly use nodejs bundle */
import { ... } from "html-validate/node";

/* explicitly use browser bundle */
import { ... } from "html-validate/browser";

See running in browser for details about getting HTML-Validate running in a browser environment.

Developing

Prerequisites

  • NodeJS 18
  • NPM 7

Test

Testing is done using jest.

npm test

or call jest directly.

Some tests are autogenerated from documentation examples, use npm run docs to build those before running.

Lint

Linting is done using ESLint.

npm run eslint

or call eslint directly.

Build

npm run build

To build documentation use:

npm run docs

The documentation can be served locally using:

npm start

changelog

html-validate changelog

9.5.3 (2025-04-13)

Bug Fixes

  • fix crash when aria attribute references id with comma (fb91b7c), closes #299
  • fix crash when attribute selector [..] contains escaped characters (0c19b82)

9.5.2 (2025-03-17)

Bug Fixes

  • jest: increase internal timeout for .toHTMLValidate() from 10s to 30s (f5f9917), closes #298

9.5.1 (2025-03-13)

Bug Fixes

9.5.0 (2025-03-08)

Features

  • deps: update dependency @sidvind/better-ajv-errors to v4 (75a17cf)

9.4.2 (2025-03-06)

Performance Improvements

  • rewrite and optimize HtmlElement.matches() increasing performance of large documents (4eb28a7), closes #45

9.4.1 (2025-02-27)

Bug Fixes

  • fix another configuration path issue on windows (1967d8f)

9.4.0 (2025-02-22)

Features

  • support custom fs implementation in validateFile and similar functions: optional for node required for browser (f9edf65), closes #293

9.3.0 (2025-02-16)

Features

  • ensure width and height are non-negative integers on <img> and other embedded elements (6bde9e6), closes #280

Bug Fixes

  • cli: fix --rule overwriting extends from --config (5623120)
  • cli: fix --rule overwriting all rules from --config or --preset (8cc81c8), closes #289
  • include id in valid-id error message (c0c6b73), closes #282

Performance Improvements

  • improve no-dup-id performance (8da515f), closes #288
  • improve performance for void-style (5a156de), closes #287

9.2.2 (2025-02-12)

Bug Fixes

  • handle dashes in custom element names (4a87773), closes #283

9.2.1 (2025-02-05)

Bug Fixes

  • fix repetitive "validator crashed" messages (4a71fcf)
  • only require SRI on <link> with rel="stylesheet", rel="preload" or rel="modulepreload" (0b47d2a)

9.2.0 (2025-01-28)

Features

  • api: error classes marked internal (84e957b)
  • api: new `isUserError(..) to determine if an exception is caused by a user misconfiguration (20dab72)
  • deps: support vitest v3 (0926c7f)

Bug Fixes

  • better error message when import.meta.resolve isnt available (8ed0ae8)
  • cli: fix CLI argument --config not finding configuration file on windows (9a1c41c)
  • deps: update dependency ignore to v7.0.1 (d1ab96e)
  • deps: update dependency ignore to v7.0.3 (cbc0f6e)

9.1.3 (2025-01-09)

Bug Fixes

  • nodejs 18.19 or later is required (69ec7e2)

9.1.2 (2025-01-08)

Bug Fixes

  • fix ERR_UNSUPPORTED_ESM_URL_SCHEME on windows (6b193f3)

9.1.1 (2025-01-05)

Bug Fixes

  • vitest: fix require is not defined in vitest (6a42bb1), closes #276

9.1.0 (2024-12-25)

Features

  • deps: update dependency ignore to v7 (43ae9ac)

Bug Fixes

  • use jest worker for toMatchCodeframe (3c29ad5)

9.0.1 (2024-12-23)

Bug Fixes

  • fix validateMultipleFiles incorrectly using sync API (0c26918)

9.0.0 (2024-12-23)

ESM support has finally landed in HTML-Validate V9!

  • Configuration files (using .htmlvalidate.mjs or when "type" is "module" in package.json).
  • Plugins, element metadata, shared configurations and transformers can be written natively in ESM.

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.

⚠BREAKING CHANGES

  • 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();

Features

  • api: CLI.isIgnored() made private (9e3679a)
  • api: CLI methods async and return Promise (677c73e)
  • api: Config.fromFile and Config.fromObject can return Promise (b126361)
  • api: Config.merge(..) can return Promise (cccb313)
  • api: Config.resolve() can return Promise (09159f3)
  • api: ConfigLoaders can optionally return Promise for async operation (6041581)
  • api: FileSystemConfigLoader uses esmResolver by default (dd4cfb1)
  • api: HtmlValidate.getConfigurationSchema() returns promise (f10ec1a)
  • api: allow transformers to return single source (fd126da)
  • api: new esmResolver using import(..) (available for both nodejs and browser) (81b4777), closes #230
  • api: remove deprecated Config.init() (0bd8ab7)
  • api: remove deprecated tag:open and tag:close events (88ac65e)
  • api: replace ConfigLoader.globalConfig with ConfigLoader.getGlobalConfig() (a64935a)
  • api: resolvers may optionally return Promise for async operation (fe3c6a6)
  • api: transformers may optionally return Promise for async operation (823da19)
  • cli: cli uses esm (with esmResolver) (3e4759e)
  • config: remove deprecated configuration presets (dbf5cf4)
  • config: support .htmlvalidate.mjs configuration files (0ffd9b5), closes #125
  • deps: require node 18 or later (d4f3bcb)
  • meta: remove deprecated property expressions (a77043c)

8.29.0 (2024-12-22)

Features

  • config: allow to specify transformer function directly in config (df2c752)
  • meta: allow labelable property to be a callback (8204b5b)

8.28.0 (2024-12-18)

Features

  • refactor jest and vitest toHTMLValidate(..) matcher (a6a60ab)

8.27.0 (2024-11-30)

Features

  • api: deprecate Config.init() (d4b5987)
  • config: lazy load transformers (d82bc57), closes #194

8.26.0 (2024-11-26)

Features

  • better handling of mismatched/unclosed tags (489ccae), closes #272

8.25.1 (2024-11-24)

Bug Fixes

  • fix dump tree output with nested elements (854c274)

8.25.0 (2024-11-11)

Features

  • cli: add --preset to set preset when using cli (2ec038f), closes #269

Bug Fixes

  • properly close elements with optional end tag when implicit document element is used (bbe2a99), closes #268
  • types: narrow numeric rule severity to only 0, 1 and 2 (88cf8a2)

8.24.2 (2024-10-16)

Bug Fixes

  • add default environment to package.json exports (a21a1ef), closes #265

8.24.1 (2024-10-07)

Bug Fixes

  • dont validate quotes in dynamically added attributes (2125d86)

8.24.0 (2024-09-24)

Features

  • new html-validate:browser configuration preset (f4e6f5b), closes #261

8.23.0 (2024-09-22)

Features

  • deps: support vitest v2 (860b0c0)

8.22.0 (2024-09-09)

Features

  • api: make DOMNode constructor internal (13377ac)
  • api: make HtmlElement constructor private (fbf4303)
  • deps: drop @babel/code-frame dependency (0003ffd)
  • deps: update @sidvind/better-ajv-errors to v3 (3112289)

Bug Fixes

  • deps: update dependency ignore to v5.3.2 (9d86e68)

8.21.0 (2024-07-20)

Features

  • api: add DOMTree.readyState (1f6f69b)
  • api: deprecate DOMTree.find(..) in favour of querySelector(..) (ac0bb77)
  • api: internal methods of DOMTree removed from public API (79a03be)
  • api: new walk.depthFirst(..) API to replace now deprecated DOMTree.visitDepthFirst(..) method (f9dbda0)

Bug Fixes

  • html5: spellcheck is a global attribute (46594a1)

8.20.1 (2024-06-11)

Bug Fixes

  • rules: fix attribute-allowed-values error location for empty values (2c04eeb)

8.20.0 (2024-06-02)

Features

  • api: new setConfig method on StaticConfigLoader to change config (1bf7559)
  • api: new getter/setter for configuration loader (6283091)

8.19.1 (2024-05-23)

Bug Fixes

  • rules: wcag/h36 no longer reports for hidden elements (aba06d1)
  • rules: wcag/h37 no longer validates <input type="submit"> (use wcag/h36 instead) (e82b17a), closes #254
  • rules: make wcag/h36 have better message and location (8a80cc8)

8.19.0 (2024-05-18)

Features

  • rules: new option allowCheckboxDefault for form-dup-name (293b951), closes #251

Bug Fixes

  • rules: multiple-labeled-controls handles hidden input (4d794b6), closes #251
  • rules: wcag/h30 only applies to <a href> (cd93dfe), closes #252
  • rules: handle unicode letters in valid-id (c83687a), closes #253

8.18.2 (2024-04-20)

Bug Fixes

  • html5: allow textarea to have autocomplete values other than on and off (c1dfbb1), closes #249

8.18.1 (2024-03-30)

Bug Fixes

  • rules: form-dup-name handles <template> element (9c77444), closes #247
  • rules: no-dup-id handles <template> element (04f3e0d), closes #247

8.18.0 (2024-03-23)

Features

  • rules: new pattern bem for pattern rules (c1ead1b)
  • rules: new pattern snakecase for pattern rules (4b95ccb), closes #245

Bug Fixes

  • rules: disallow consecutive hyphens and underscors for kebab-case and snake_case (a4338a7), closes #246
  • rules: require initial character for all patterns to be letter (646ff16)

8.17.1 (2024-03-21)

Bug Fixes

  • rules: properly handle inert on ancestor elements (2990669), closes #243

8.17.0 (2024-03-19)

Features

  • rules: new rule name-pattern (f2209c0), closes #216
  • rules: support multiple patterns in id-pattern, class-pattern and name-pattern rules (15dd007)

Bug Fixes

  • meta: handle regexp with slash inside (4c88396), closes #242
  • rules: input-missing-label now ignores <input> hidden by css (c40e48e), closes #241
  • rules: input-missing-label now tests if <label> is inert or hidden by css (d0d6f40)
  • rules: show pattern name in id-pattern, class-pattern and name-pattern rules (4bd70ab)

8.16.0 (2024-03-18)

Features

  • api: new tabIndex property reflecting the parsed tabindex attribute (a4e5d5b)
  • meta: add inert as global attribute (a5e6477)
  • meta: new formAssociated.disablable property (0b141ab)

Bug Fixes

  • html5: <summary> element is focusable if child of <details> (79dec74)
  • rules: hidden-focusable handles inert elements (89bb969), closes #240
  • rules: hidden-focusable no longer reports for disabled form controls (d337397)
  • rules: hidden-focusable no longer reports for elements with tabindex="-1" (03d7223), closes #240

8.15.0 (2024-03-11)

Features

  • rules: new rule valid-autocomplete (bebd0d1)

Bug Fixes

  • rules: case-insensitive match for url in meta-refresh (3177295)

8.14.0 (2024-03-09)

Features

  • rules: new option allowLongDelay to meta-refresh to allow 20h+ delays (629625c)

8.13.0 (2024-03-06)

Features

  • meta: allow <link> under <body> if appropriate rel attribute is present (ae1e070)
  • meta: allow content categories to be a callback (0eb4e77)
  • meta: disallow invalid rel attribute keywords (dc36cfb)

8.12.0 (2024-03-04)

Features

  • rules: new rule no-abstract-role (923680b)

8.11.1 (2024-02-26)

Bug Fixes

  • dom: fix regression error with selectors ending with characters a, d or 9 (a9a9ef9)

8.11.0 (2024-02-26)

Features

  • html5: add new property aria.naming representing if the element can be named (4fca264)
  • html5: update role metadata from html-aria standard (b029a3f)
  • meta: move implicitRole to aria.implicitRole (bc8cacf)

Bug Fixes

  • handle selectors containing tabs and newlines (5e45d54), closes #238
  • rules: new option allowAnyNamable for aria-label-misuse (c08a3ba), closes #237

8.10.0 (2024-02-21)

Features

  • rules: new rule no-implicit-input-type (6cc0c6d)

Bug Fixes

  • deps: update dependency ignore to v5.3.1 (4553b89)
  • html5: type for <input> no longer required (37284d0), closes #235
  • rules: change wording required to recommended in no-implicit-button-type (1926c06)

8.9.1 (2024-01-10)

Bug Fixes

  • rules: <form> and <section> without explicit accessible name is no longer considered landmark (a36deac)
  • rules: <header> and <footer> nested in <main> or sectioning content is no longer considered landmark (bcab354), closes #234

8.9.0 (2024-01-08)

Features

  • elements: new property focusable to mark elements as focusable (c59c8b2)
  • rules: new rule hidden-focusable (243e7fb)
  • rules: new rule unique-landmark (187be1e)

Bug Fixes

  • api: remove internal listeners property from public API (303e5d5)
  • dom: ancestor with role="presentation" no longer counts decendants as missing from a11y tree (cc72da1)
  • dom: handle role="none" as a synonym for role="presentation" (b1d7b50)
  • dom: interactive and focusable elements ignore role="presentation" (017308f)
  • rules: better error description for require-sri (ffc3695)
  • rules: rule wcag/h30 no longer requires text on <a hidden> (a20cc84)
  • rules: rule wcag/h30 no longer requires text on links with display: none or visibility: hidden (36ff07e)
  • rules: rules wcag/h32 handles <button> without explicit type (84c6a6e)

8.8.0 (2023-12-27)

Features

  • api: Report.merge() can merge async results (35689fc)
  • api: rename nodejsResolver to cjsResolver (8c72c8f)
  • config: new defineConfig helper (35e265a)

Bug Fixes

  • config: proper error message when certain configuration properties was invalid (b029569)

8.7.4 (2023-12-10)

Bug Fixes

  • deps: pin @sidvind/better-ajv-errors (94f778b), closes #231
  • deps: support vitest v1 (4cc4d23)

8.7.3 (2023-11-23)

Bug Fixes

  • disable doctype-style when using prettier preset (f1f4004)

8.7.2 (2023-11-18)

Bug Fixes

  • deps: update dependency ignore to v5.3.0 (143e994)

8.7.1 (2023-11-11)

Bug Fixes

  • rules: fix form-dup-name issue when more than two names are present in array (5d9ff3b), closes #228

8.7.0 (2023-10-21)

Features

  • html5: support referrerpolicy attribute (851b559)

8.6.1 (2023-10-21)

Bug Fixes

  • dom: remove usage of regex negative lookbehind (f406393), closes #147
  • rules: improve attribute-misuse error message (fccce69), closes #226
  • typo in CONTRIBUTING.md (855bacf)

8.6.0 (2023-10-13)

Features

  • api: add meta: MetaAttribute in AttributeEvent (2cda0ae)
  • cli: --rule severity can now be set with strings, fixes #225. (054972e)

8.5.0 (2023-10-01)

Features

8.4.1 (2023-09-23)

Bug Fixes

  • rules: fix contextual documentation for attr-pattern rule (0082aef)

8.4.0 (2023-09-09)

Features

  • html5: support <search> element (720bdd9)
  • new implicitRole metadata for better handling of implicit ARIA roles (fe45ec4), closes #224

8.3.0 (2023-08-20)

Features

  • rules: new rule no-implicit-button-type (38efd72), closes #221

Bug Fixes

  • html5: <label> cannot have empty for (3626e1a), closes #223
  • html5: element-required-attributes allows <button> without type (use no-implicit-button-type instead) (d32f492), closes #221

8.2.0 (2023-08-07)

Features

  • add allowedIfParentIsPresent metadata helper (2668899)
  • html5: add <source> attributes metadata (e3a3311)
  • support passing native HTMLElement to metadata helpers (8af6d01), closes #207

Bug Fixes

  • api: typing for Rule.setSeverity() changed to only accept Severity (64f4210)

8.1.0 (2023-07-22)

Features

  • rules: new rule no-redundant-aria-label (59b5bab), closes #206

Bug Fixes

  • add compatibilityCheck function to browser bundle (b89dcc2)
  • api: remove unintended null return value from plugins api (0eb0ea8)

8.0.5 (2023-06-13)

Bug Fixes

  • fix import issue with elements/html5.js (0604c21), closes #219
  • make elements/html5 work with esm (d95de27)

8.0.4 (2023-06-12)

Bug Fixes

  • add explicit node import (73f9a1f)

8.0.3 (2023-06-12)

Bug Fixes

  • fix regression bug when using elements in extended configuration files and plugins (6892083)
  • use correct dts when using custom conditions (1b6971e)

8.0.2 (2023-06-10)

Bug Fixes

  • add browser condition for main import (d2f7a74)
  • remove usage of node:path and process in browser build (2580aeb)

8.0.1 (2023-06-10)

Bug Fixes

  • fix nodejs code being included in browser bundle (7c76a3b)

8.0.0 (2023-06-04)

⚠BREAKING CHANGES

See {@link migration migration guide} for details.

  • api: The ConfigFactory parameter to ConfigLoader (and its child classes StaticConfigLoader and FileSystemConfigLoader) has been removed. No replacement.

If you are using this you are probably better off implementing a fully custom loader later returning a ResolvedConfig.

  • api: A new getContextualDocumentation replaces the now deprecated getRuleDocumentation method. The context parameter to getRuleDocumentation is now required and must not be omitted.

For rule authors this means you can now rely on the context parameter being set in the documentation callback.

For IDE integration and toolchain authors this means you should migrate to use getContextualDocumentation as soon as possible or if you are continuing to use getRuleDocumentation you are now required to pass the config and context field from the reported message.

  • api: This change affect API users only, specifically API users directly using the Config class. Additionally when using the StaticConfigLoader no modules will be resolved using require(..) by default any longer. Instructions for running in a browser is also updated, see below.

To create a Config instance you must now pass in a Resolver (single or array):

+const resolvers = [ /* ... */ ];
-const config = new Config( /* ... */ );
+const config = new Config(resolvers, /* ... */ );

This applies to calls to Config.fromObject(..) as well.

The default resolvers for StaticConfigLoader is StaticResolver and for FileSystemConfigLoader is NodeJSResolver. Both can optionally take a new set of resolvers (including custom ones).

Each resolver will, in order, try to load things by name. For instance, when using the NodeJSResolver it uses require(..) to load new items.

  • NodeJSResolver - uses require(..)
  • StaticResolver - uses a predefined set of items.
  • api: The HtmlValidate class now has a Promise based API where most methods return a promise. The old synchronous methods are renamed.

Either adapt to the new asynchronous API:

-const result = htmlvalidate.validateFile("my-awesome-file.html");
+const result = await htmlvalidate.validateFile("my-awesome-file.html");

or migrate to the synchronous API:

-const result = htmlvalidate.validateFile("my-awesome-file.html");
+const result = htmlvalidate.validateFileSync("my-awesome-file.html");

For unittesting with Jest it is recommended to make the entire test-case async:

-it("my awesome test", () => {
+it("my awesome test", async () => {
   const htmlvalidate = new HtmlValidate();
-  const report = htmlvalidate.validateString("...");
+  const report = await htmlvalidate.validateString("...");
   expect(report).toMatchCodeFrame();
});
  • api: ConfigLoader must return ResolvedConfig. This change affects API users who implements custom configuration loaders.

In the simplest case this only requires to call Config.resolve():

-return config;
+return config.resolve();

A resolved configuration cannot further reference any new files to extend, plugins to load, etc.

  • api: The TemplateExtractor class has been moved to the @html-validate/plugin-utils package. This change only affects API users who use the TemplateExtractor class, typically this is only used when writing plugins.
  • config: Deprecated severity alias disabled removed. If you use this in your configuration you need to update it to off.
 {
   "rules": {
-    "my-awesome-rule": "disabled"
+    "my-awesome-rule": "off"
   }
 }
  • rules: The void rule has been removed after being deprecated a long time, it is replaced with the separate void-content, void-style and no-self-closing rules.
  • deps: minimum required node version is v16
  • deps: minimum required jest version is v27

Features

  • api: ConfigLoader must return ResolvedConfig (d685e6a)
  • api: FileSystemConfigLoader supports passing a custom fs-like object (fac704e)
  • api: add Promise based API to HtmlValidate class (adc7783)
  • api: add Resolver classes as a mean to separate fs from browser build (3dc1724)
  • api: new getContextualDocumentation to replace getRuleDocumentation (60c9a12)
  • api: remove ConfigFactory (e309d89)
  • api: remove TemplateExtractor in favour of @html-validate/plugin-utils (a0a512b)
  • deps: minimum required jest version is v27 (dc79b6b)
  • deps: minimum required node version is v16 (f6ccdb0)
  • rules: remove deprecated void rule (3e727d8)

Bug Fixes

  • config: remove deprecated severity alias disabled (6282293)

7.18.1 (2023-06-04)

Bug Fixes

  • cli: error message on missing --config file (e948a18)

7.18.0 (2023-05-24)

Features

  • add new preset html-validate:prettier (9491016), closes #215

Bug Fixes

  • api: mark Config.fromFile() as internal (3e70028)
  • api: mark Config.getMetaTable() as internal (8cb6dd0)
  • api: mark dumpEvents,dumpSource, dumpTokens and dumpTree as internal (866f219)
  • jest: toMatchCodeframe and toMatchInlineCodeframe handles async result (584c67e)

7.17.0 (2023-05-12)

Features

  • allow to specify plugins inline in configuration (6ba1467)

Bug Fixes

  • rules: allow custom elements to use aria-label (513a813)

7.16.0 (2023-05-04)

Features

  • api: ConfigLoader returns a ResolvedConfig (1fd8b73)

Dependency upgrades

  • deps: update dependency @html-validate/stylish to v4 (2a089ec)

7.15.3 (2023-05-03)

Bug Fixes

  • api: remove unused url import (a2017ff)

7.15.2 (2023-05-03)

Bug Fixes

  • api: fix typescript not finding type declarations (0950bb9), closes #217
  • rules: form-dup-name defaults to allow <button type="submit"> to share name (b39b9ad), closes #212

Dependency upgrades

  • deps: update dependency glob to v10 (1855cf0)

7.15.1 (2023-04-09)

Bug Fixes

  • add missing exports (7fb141d)
  • fix html-validate/test-utils entrypoint (62fbee3)
  • include tsdoc-metadata.json (61dd7dd)

7.15.0 (2023-04-09)

Features

Bug Fixes

  • dom: querySelector typescript declaration returns null to match implementation (9c9befe)
  • fix browser entrypoint for older bundlers (c8320ba)

7.14.0 (2023-03-26)

Features

  • rules: add [role="alertdialog"] as a default sectioning root for heading-level (b87581a)

Bug Fixes

  • cli: fix glob pattern when file extension list is empty (d95a418)

Dependency upgrades

  • deps: update dependency glob to v9 (effd3bc)

7.13.3 (2023-03-10)

Bug Fixes

  • rules: check for empty alt tag in wcag/h37 (5f3b43f), closes #209

7.13.2 (2023-02-08)

Bug Fixes

  • add button and reset types to form-dup-name shared options (d6ef9f8)

7.13.1 (2023-01-15)

Bug Fixes

  • no-unused-disable properly reports location when more than two rules are disabled (26d1970)
  • allow no-unused-disable to be disabled by directive (b11166c)

7.13.0 (2023-01-15)

Features

7.12.2 (2023-01-09)

Bug Fixes

  • form-dup-name validate checkboxes by default (d5e7b7d), closes #202
  • add allowArrayBrackets option to form-dup-name rule (a43ea0b), closes #203
  • add shared option to form-dup-name to set which controls allow shared names (7ddc02b), closes #201

7.12.1 (2023-01-05)

Bug Fixes

  • rules: form-dup-name reports when radio and non-radio uses same name (6d9a282), closes #200

7.12.0 (2022-12-28)

Features

  • api: Attribute.valueMatches can take array of keywords to match against (0a5ff8e)
  • api: add Rule.getMetaFor(..) (5a76381)
  • api: add new formAssociated property when defining metadata (3d56c4a)
  • meta: MetaAttributeAllowedCallback takes the attribute as second argument (7a4edeb)
  • rules: new rule form-dup-name (74f8e2d), closes #197
  • rules: new rule map-id-name (abe5acb), closes #184

Bug Fixes

  • parser: enable cache api on document root (a1cfe64)

7.11.1 (2022-12-22)

Bug Fixes

  • allow setting metadata attribute to null to remove it (7118d9b)
  • better error message when element inheritance fails (717c186)

7.11.0 (2022-12-19)

Features

  • api: add keywordPatternMatcher for usage with include/exclude options (6bd360f)
  • rules: add include and exclude support to no-unknown-elements (cd7fb23)
  • validateOccurrences and element-permitted-occurences support tag category (b37d9ac)

Bug Fixes

  • hgroup is still valid, support the current content model (4040db3), closes #198
  • rules: improve error message for wcag/h63 (fa16f51)
  • rules: improved error message with element-required-content using categories (a71a2d8)

7.10.1 (2022-12-04)

Bug Fixes

7.10.0 (2022-11-17)

Features

  • rules: add wcag/h63 for header cell scopes (ee012c6)

Bug Fixes

  • html5: <th> does not require scope attribute (44bb935), closes #189
  • rules: empty-heading handles hidden attribute (e33b55e), closes #193
  • rules: wcag/h30 handles hidden attribute (c5ac930)

7.9.0 (2022-11-16)

Features

  • new definePlugin helper (e28c275)
  • rules: new option ignoreCase added to unrecognized-char-ref (4a1b9af)
  • rules: new option requireSemicolon added to unrecognized-char-ref (b7a5067)
  • rules: new rule map-dup-name (ad7bfff), closes #180

Bug Fixes

  • rules: add selector to unrecognized-char-ref errors (73b29ef)
  • rules: include different capitalization for named character references (html entities) (83f205a), closes #192

7.8.0 (2022-10-31)

Features

  • html5: bundle element metadata (1e59f3e)

Bug Fixes

  • api: getFormatter ts declaration guarantees a Formatter will be returned for known formatters (14ce8b1)

7.7.1 (2022-10-24)

Bug Fixes

  • api: export browser bundle as html-validate/browser (dc1c322)
  • html5: handle <meta property> (RDFa such as OG) (63e8814), closes #187

7.7.0 (2022-10-23)

Features

  • html5: validates <a target> and <area target> for valid keywords (6fa0bd9)
  • new defineMetadata helper for writing custom element metadata (6a06811), closes #186
  • rules: new rule area-alt (3c1f0b3), closes #178
  • rules: new rule attribute-misuse (07a0bbe), closes #181

Bug Fixes

  • html5: <map> requires name attribute (6104eb3)
  • html5: <meta charset> should only allow utf-8 (aaa15fe)
  • html5: disallow <area coords> when shape is default (76115f2), closes #183
  • html5: mark <keygen> as deprecated (859402d)
  • html5: require <area coords> when shape is requires is (ed750c1), closes #182

7.6.0 (2022-10-10)

Features

  • input-missing-label checks for presence of text (4aa7d77), closes #170
  • api: add HtmlElement.ariaLabelledby (8463d43)
  • api: expose classifyNodeText helper (97621fd)
  • api: new rule helper hasAccessibleText (b8f8330)
  • rules: classifyNodeText helper respects hidden and aria-hidden attributes (8ba2c5a)
  • rules: classifyNodeText option to ignore hidden attribute on element (41ba7f9)
  • rules: isHTMLHidden and isAriaHidden can return detailed results (fb28c2e)

Bug Fixes

  • <select> does no longer classify as having text content (3fb1d15)
  • <textarea> does no longer classify as having text content (04517cf)
  • rules: empty-heading satisfied by images with alt text (ff68fbb), closes #176

7.5.0 (2022-09-19)

Features

  • support js config files when using --config (929f2c8), closes #175

7.4.1 (2022-09-11)

Bug Fixes

  • input-missing-label should ignore <input type="reset"> too (280bb5c)
  • allow <template> as parent to <li> (aa0aadc)

7.4.0 (2022-09-11)

Features

  • deps: support jest v29 (0f266ca)
  • rules: new rule element-permitted-parent (cdcc117)

Bug Fixes

  • html5: <meta itemprop> can be used where flow or phrasing is expected (0c6c74c), closes #168
  • rename preset html-validate:a17y to html-validate:a11y (typo fix) (0440fcd), closes #171
  • rules: input-missing-label now ignores input type submit and button (39317da), closes #170
  • rules: improve error message when alt is empty (8f50e8f)
  • rules: verify presence of alt attribute on <input type="image"> (feeb56e)

7.3.3 (2022-08-25)

Bug Fixes

  • <form> action attribute false positives (f93a8fc), closes #167
  • cli: fix typo in maximum warnings message (8971323)

7.3.2 (2022-08-24)

Bug Fixes

  • better error message when failing to parse html-validate directive (0e9d98e), closes #166

7.3.1 (2022-08-21)

Bug Fixes

  • handle quoted ., #, : and[ in attribute selectors (7282625), closes #162 #147
  • html5: disallow empty action attribute on <form> (0cdb7b2), closes #165

7.3.0 (2022-08-11)

Features

  • allow method="dialog" on <form> element (997f999), closes #161

7.2.0 (2022-08-04)

Features

  • html5: add <dialog> element (243bf56), closes #160
  • rules: element-permitted-content lists all required ancestors (be34e01)
  • rules: element-permitted-content verifies root element (6eb721f)
  • rules: split ancestor validation from element-permitted-content to new rule element-required-ancestors (dcb2096)

Bug Fixes

  • api: allow passing object when reporting errors (f8500be)
  • api: hide internal properties when using --dump-events (206294f)
  • html5: <body> should only accept flow content (1b08c66)
  • html5: <li> requires <ul>, <ol> or <menu> parent (b88384e)
  • rules: element-permitted-content documentation fixes (613dd48)

7.1.2 (2022-07-05)

Bug Fixes

  • add missing metadata for SVG <title> and <desc> elements (78ec55f), closes #157
  • escape additional characters in CSS selectors (774ba95), closes #158

7.1.1 (2022-05-22)

Bug Fixes

  • rules: match attribute enum values case insensitive (36a8ed9), closes #154

Dependency upgrades

  • deps: update dependency @html-validate/stylish to v3 (23549e3)

7.1.0 (2022-05-15)

Features

  • rules: add any option to attr-quotes (cedf9d5), closes #152
  • rules: add include/exclude options to require-sri rule (93931c5), closes #153
  • rules: new rule require-csp-nonce (d534a32)

Dependency upgrades

  • deps: update dependency @sidvind/better-ajv-errors to v2 (bd27e3c)

7.0.0 (2022-05-06)

⚠BREAKING CHANGES

See {@link migration migration guide} for details.

  • require node 14

Features

6.11.1 (2022-05-06)

Bug Fixes

  • add type declaration for html5.js (4647dee)
  • expose MetaDataTable type (79f30d0)
  • fix loading jest.js and test-utils.js (84877df)

6.11.0 (2022-05-05)

Features

Bug Fixes

  • handle windows \\ when expanding directories (dfe3dbf)

6.10.0 (2022-05-04)

Features

  • jest: add .toMatchCodeframe() as complement to .toMatchInlineCodeframe() (23473e4)
  • jest: support passing string to toMatch{,Inline}Codeframe() (1864e43)

Bug Fixes

  • jest: extend recommended config when using toHTMLValidate() (5c890ea)

Performance Improvements

  • improve performance by caching json schema (6be5c3a)

6.9.1 (2022-04-29)

Bug Fixes

  • include <menu> in builtin HTML5 elements (28d7a2b), closes #151

6.9.0 (2022-04-27)

Features

Bug Fixes

  • generate valid selector when id is numeric (4d6711e), closes #149

6.8.0 (2022-04-24)

Features

  • tel-non-breaking checks for presence of white-space: nowrap (6d1b968)
  • deferred generation of selectors for error messages for more accurate results (ac98c6e)
  • implement style property on HtmlElement (f6f8ad2)
  • jest: add new toMatchInlineCodeframe matcher (dc0eab4)
  • jest: remove internal toBeToken matcher from public consumption (15f7e1c)
  • migrate html5.json to html5.js (6316b98)
  • require jest 25.1 or later (f4fad37)

Dependency upgrades

  • deps: update dependency glob to v8 (ccb6dd4)

6.7.1 (2022-04-08)

Bug Fixes

  • rules: fix reported selector for tel-non-breaking errors (0909ce4)
  • rules: show character description in tel-non-breaking (894d456)

6.7.0 (2022-04-08)

Features

  • jest: allow passing object to toHaveError(..) (bc098f5)
  • rules: new rule tel-non-breaking (32a6fe2)

Bug Fixes

  • cli: proper argument count to --print-config (91c1a45)
  • remove unnecessary fields from published package.json (06528c7)
  • rules: better error message for attr-delimiter (acf4249)

6.6.1 (2022-03-25)

Bug Fixes

  • api: typescript declaration for ProcessElementContext updated (e843b8c)

6.6.0 (2022-03-20)

Features

  • parser: parse SVG <title> and <desc> elements (51025e1), closes #43 #146

Bug Fixes

  • cli: report error when mode flags are missing filename (7e87cd4), closes #144
  • disable svg-focusable by default (d15a503)

6.5.0 (2022-02-27)

Features

  • rules: support message interpolation (9356809)
  • support -- as delimiter for comments (7c90250), closes #143
  • throw error when directive is missing end bracket (4cba14b)

Bug Fixes

  • dom: proper location when using DOMTokenList with multiple whitespace (7b2d62c)

6.4.0 (2022-02-18)

Features

  • dom: add typeguards to attribute API (f831223)
  • event: add parent element to conditional event (b248e3b)

Bug Fixes

  • rules: add selector to no-conditional-comment (6391ebf), closes #142

6.3.2 (2022-02-16)

Bug Fixes

  • handle reading stdin (/dev/stdin) on Windows (dcf65d1), closes #141
  • replace \\ in urls generated on Windows (950b3cf), closes #140

6.3.1 (2022-02-03)

Dependency upgrades

  • deps: update dependency @sidvind/better-ajv-error to v1.1.1 (8aa3438)

6.3.0 (2022-02-03)

Features

  • new rule aria-hidden-body (4f3b04f)

Bug Fixes

  • global element metadata is returned for unknown elements (831f227)
  • rules: improve error message for element-required-content (b29d908)
  • rules: improve error message for empty-title (0a62b1a)

Dependency upgrades

  • deps: update dependency @sidvind/better-ajv-error to v1.1.0 (f785448)

6.2.0 (2022-01-17)

Features

Bug Fixes

  • rules: improve error message for attribute-allowed-values (b3d4d11)

6.1.6 (2022-01-07)

Bug Fixes

  • meta: disallow unknown element properties (aca70fc)

Dependency upgrades

  • deps: drop json-merge-patch dependency (5306b2d)

6.1.5 (2021-12-28)

Bug Fixes

  • config: dont process extends multiple times (f014311)
  • config: elements from extended configs should be loaded first not last (d19519e)

6.1.4 (2021-12-04)

Bug Fixes

  • handle multiline srcset attribute (0bb92a7), closes #138

6.1.3 (2021-11-19)

Bug Fixes

  • parse <style> content as text instead of markup (0ab61e6), closes #137
  • rules: handle malformed style attribute in no-inline-style rule (7e12d50)

6.1.2 (2021-11-13)

Bug Fixes

  • fix .d.ts paths in package (f24c2f4)

6.1.1 (2021-11-10)

Dependency upgrades

  • deps: update dependency @sidvind/better-ajv-errors to v1 (373b608)

6.1.0 (2021-10-02)

Features

  • rules: allowed-links support include and exclude (a3f7b6a)

Bug Fixes

  • handle multiline templating strings (cddf7d5), closes #134

6.0.2 (2021-09-27)

Bug Fixes

  • jest: jest matcher should use FileSystemConfigLoader (4d04bdc)

6.0.1 (2021-09-27)

Bug Fixes

6.0.0 (2021-09-26)

⚠BREAKING CHANGES

See {@link migration migration guide} for details.

  • htmlvalidate: This change only affects API users, the CLI tool continues to work as before.

The default configuration loader has changed from FileSystemConfigLoader to StaticConfigLoader, i.e. the directory traversal looking for .htmlvalidate.json configuration files must now be explicitly enabled.

  • event: ConfigReadyEvent passes ResolvedConfig instance instead of ConfigData
  • meta: MetaElement.attribute has changed from string[] to MetaAttribute[] and both requiredAttributes and deprecatedAttributes has been merged into object. This only affects API usage, primarily custom rules accessing attribute metadata.See MIGRATION.md for details.

The old format is deprecated but is internally converted as to not break user configuration. For compatibility it will probably be around for quite a while but users should try to migrate as soon as possible.

Features

  • bump required node version to 12.22 (80f3399)
  • elements: migrate bundled html5 element metadata to new attribute syntax (6132b82)
  • event: ConfigReadyEvent passes ResolvedConfig instance instead of ConfigData (5808a6b)
  • htmlvalidate: use StaticConfigLoader by default (bb94341)
  • meta: add new list property to MetaAttribute (4c1e3c9)
  • meta: extend element attribute metadata (6506aa6), closes #71

Dependency upgrades

  • deps: update dependency espree to v9 (3e0ea96)

4.14.1 (2021-09-18)

Bug Fixes

  • jest: handle when jest-diff default import is object (74f9b84)

5.5.0 (2021-09-05)

Features

  • dom: add iterator to DOMTokenList (7bef736)
  • rules: no-missing-references handles more aria attributes (2843680)
  • rules: add minInitialRank option to heading-level (7f58572), closes #132

Bug Fixes

  • jest: synchronous matchers as long as the passed value is synchronous (0ede9f7)
  • rules: no-missing-references handles attributes with reference lists (2afcd86), closes #133

5.4.1 (2021-08-29)

Bug Fixes

  • meta: use global meta as base when merging (9fe3793), closes #60

5.4.0 (2021-08-27)

Features

  • cli: expand relative paths to absolute paths (bdc3019), closes #131

Bug Fixes

  • cli: handle absolute paths as input filenames (c860af6), closes #131

5.3.0 (2021-08-23)

Features

  • jest matchers support async results (ef7331f)

Bug Fixes

  • jest: handle when jest-diff default import is object (7413db9)

5.2.1 (2021-08-09)

Bug Fixes

  • html5: add user and environment to capture attribute (d6b8f90), closes #130

5.2.0 (2021-07-23)

Features

  • support specifying a custom loader when using library (0e509a3)
  • config: add StaticConfigData for simple static config (ae40706)

Bug Fixes

  • elements: disallow whitespace in id (df2906b)
  • meta: regex matching attribute allowed values matches entire string (ffa0d12)
  • rules: handle id with whitespace in no-redundant-for (a79f266), closes #128

5.1.1 (2021-07-11)

Bug Fixes

  • broken typescript declaration in previous release (ad9cf68), closes #127

5.1.0 (2021-07-11)

Features

  • lexer: add attribute key-value delimiter to attribute value token (0979798)
  • rules: new rule attr-delimiter (eb98461), closes #126
  • support .cjs configuration files (cd458e3)

Bug Fixes

  • automatically find external dependencies (62af8c5)
  • es build (6b1cec5)
  • import semver correctly (4ed8eac)
  • make prefer-button tag and attribute checks case-insensitive (95e7748)
  • only check value of type attribute in prefer-button rule (2e46586)

5.0.2 (2021-06-28)

Bug Fixes

  • handle leading and trailing whitespace in style attributes (a71b947), closes #122

5.0.1 (2021-06-27)

Bug Fixes

  • custom log callback for compatibilityCheck (cbd2226)

Dependency upgrades

  • deps: update dependency @html-validate/stylish to v2 (ab0b1f9)

5.0.0 (2021-06-27)

⚠BREAKING CHANGES

  • the library is now shipped as a hybrid CJS/ESM package. If you are simply consuming the CLI tool or one of the existing integrations this will not affect you.

For plugin developers and if you consume the API in any way the biggest change is that the distributed source is now bundled and you can no longer access individual files.

Typically something like:

-import foo from "html-validate/dist/foo";
+import { foo } from "html-validate"

Feel free to open an issue if some symbol you need isn't exported.

If your usage includes checking presence of rules use the ruleExists helper:

-try {
-  require("html-validate/dist/rules/attr-case");
-} catch (err) {
-  /* fallback */
-}
+import { ruleExists } from "html-validate";
+if (!ruleExists("attr-case")) {
+  /* fallback */
+}
  • drop support for NodeJS 10

Features

  • add compatibilityCheck helper for plugins (4758595)
  • cjs/esm hybrid package (39c960a), closes #112
  • drop support for NodeJS 10 (8f74291)

Dependency upgrades

  • deps: update dependency ajv to v8 (cccb73a)

4.14.0 (2021-06-14)

Features

4.13.1 (2021-05-28)

Bug Fixes

  • jest: fix TypeError: diff is not a function (2afc2e8)

4.13.0 (2021-05-28)

Features

  • jest: better compatibility with jest in node environment (79d14ca)

Dependency upgrades

  • deps: support jest v27 (863f73d)
  • deps: update dependency @sidvind/better-ajv-errors to ^0.9.0 (8f6d162)

4.12.0 (2021-05-17)

Features

  • rules: enforce initial heading-level in sectioning roots (c4306ad)

4.11.0 (2021-05-08)

Features

  • dom:ready and dom:load contains source reference (430ec7c), closes #115
  • add :scope pseudoselector (6e3d837), closes #114
  • add isSameNode() (7d99007)
  • add new event source:ready (4c1d115), closes #115
  • rules: deprecated takes include and exclude options (e00d7c1)

Bug Fixes

  • dom: throw if tagName is invalid (42d7100)

4.10.1 (2021-04-25)

Bug Fixes

  • handle directives with excessive whitespace (0400563)

4.10.0 (2021-04-18)

Features

  • dom: implement {first,last}ElementChild accessors (5e70aee)
  • formatters: stylish and codeframe displays links to error descriptions (86cf213), closes #113
  • formatters: checkstyle output is indented (e284fb7)
  • parser: add full location to attr event (key, quotes, value) (931a39f)
  • rules: add rule url to Message (6845fac)
  • rules: new option allowedProperties to no-inline-style (defaults to display) (75aa5f0)

Bug Fixes

  • rules: rule documentation url for rules in subdirectories (c91c36d)

4.9.0 (2021-04-04)

Features

  • add rule option schemas (f88f0da)
  • rules: validate rule configuration (5ab6a21)

Bug Fixes

  • config: validate preset configurations (dca9fc3)
  • error: present original json for configuration errors (23a50f3)
  • meta: memory leak when loading meta table (940ca4e), closes #106

4.8.0 (2021-03-28)

Features

  • support ignoring files with .htmlvalidateignore (77ec9a6), closes #109

4.7.1 (2021-03-19)

Bug Fixes

  • add $schema to html5.json (9a89d30)

4.1.1 (2021-03-19)

Bug Fixes

  • $schema keyword being invalid (3b67062)

4.7.0 (2021-03-14)

Features

Bug Fixes

  • dom: input[type="hidden"] no longer labelable (244d37d)

4.6.1 (2021-03-02)

Bug Fixes

  • dom: generateSelector() escapes characters (c2e316c), closes #108
  • dom: querySelector handles escaped characters (30e7503)
  • dom: throw error when selector is missing pseudoclass name (516ca06)

4.6.0 (2021-02-13)

Features

  • parser: add DOCTYPE tag to DoctypeEvent (8c53d40)
  • parser: new event token emitted for each lexer token (f9d44d6)
  • rules: allow rules to unregister event listeners (8b1a6bc)
  • rules: new rule attr-spacing requiring attributes to be separated by whitespace (7734dc6), closes #105
  • rules: new rule doctype-style requiring doctype to be specific case (e94f819)
  • rules: new rule no-utf8-bom disallowing usage of UTF-8 BOM (7a2d264)

Bug Fixes

  • lexer: handle CRLF after xml declaration (97fd77d)
  • lexer: handle doctype with mixed case (a40e28e)
  • lexer: handle html comment before doctype (6c1b830)
  • lexer: handle unicode bom (97506b1)

4.5.0 (2021-02-05)

Features

  • meta: transparent can be limited to specific elements (bef8a16)

Bug Fixes

  • html5: <audio> and <video> allows <track> and <source> transparently (526006c), closes #104

4.4.0 (2021-01-31)

Features

  • events: new event tag:ready emitted when start tag is parsed (cfbf3dc)
  • events: rename tag:open and tag:close to tag:start and tag:end (7a2150f)
  • rules: heading-level supports sectioning roots (8149cc6), closes #92

Bug Fixes

  • rules: better error message for heading-level (0871706)

Dependency upgrades

  • deps: update dependency @sidvind/better-ajv-errors to ^0.8.0 (f317223)

4.3.0 (2021-01-19)

Features

  • rules: new rule text-content (2fef395), closes #101
  • transform: new helper processElement for writing tests (3052f81)
  • add browser entry point without cli classes (7840ec2)
  • set sideEffects to false (41b47f8)

Bug Fixes

  • dom: DOMTokenList (such as classlist) handles newlines and tabs (35e601e)

4.2.0 (2021-01-15)

Features

  • dom: disable cache until node is fully constructed (5e35c49)
  • htmlvalidate: add getConfigurationSchema() to get effective configuration schema (1dd81d9)
  • htmlvalidate: add getElementsSchema() to get effective elements schema (4baac36), closes #78
  • rule: support filter callback for rule events (f3f949c)
  • rules: add allowMultipleH1 option to heading-level (a33071d)

Bug Fixes

  • enable strictNullCheck (64b5af2), closes #76
  • event: location property can be null for some events (fbbc87c)
  • event: pass null when attribute value is missing (08c2876)
  • rules: rule options uses Partial<T> (221113b)

Dependency upgrades

  • deps: update dependency ajv to v7 (4c04388)

4.1.0 (2020-12-14)

Features

  • replace inquirer with prompts (82d17eb)

4.0.2 (2020-11-19)

Bug Fixes

  • deps: replace dependency on eslint with @html-validate/stylish (2d1bc81)

4.0.1 (2020-11-09)

Bug Fixes

  • rules: wcag/h32 checks for type="image" (4a43819)
  • rules: wcag/h32 handles submit buttons using form attribute to associate (cb2e843)

4.0.0 (2020-11-07)

⚠BREAKING CHANGES

  • config: With this release any custom configuration files will no longer automatically extend html-validate:recommended.

The previous behaviour was to to always merge with the default configuration containing extends: ["html-validate:recommended"]. This is counter-intuitive when adding a blank {} .htmlvalidate.json configuration file (or a file with extends: []). The new behaviour is to not apply default configuration if another configuration is found.

To retain the previous behaviour you must ensure your configuration contains extends: ["html-validate:recommended"]. Users who have root: true are not affected. If unsure: test your configuration by deliberatly introducing and error and verify it is detected.

For CLI users: ensure your .htmlvalidate.json configuration files are updated.

For IDE integration users: ensure your .htmlvalidate.json configuration files are updated.

For CLI API users: same as with CLI the configuration loading has changed and all users must update their .htmlvalidate.json accordingly.

For HtmlValidate API users: you are most likely not affected, only if both of the following conditions are true you need to take care to ensure any .htmlvalidate.json is updated:

  1. you are using validateFile or supply filenames to other validation functions.
  2. you allow user-supplied configurations (or use them yourself) via .htmlvalidate.json (default unless root: true is set in the configuration object passed to new HtmlValidate(..))

The ConfigLoader API has also been updated and fromTarget may now return null if no configuration file was found.

  • The build folder has been renamed to dist.

This affects API users only and in general should not be an issue unless importing files via full path. In that case replace import 'html-validate/build/...' with import 'html-validate/dist/... but in general those imports are discouraged.

Instead users should import only via import { ... } from "html-validate" and file an issue if an export is missing.

This does not affect the elements imports which is considered a safe to import as-is.

  • Only node 10 or later is supported

Features

  • new utility function ruleExists to test presence of bundled rules (09aad04)
  • rules: new helper isHTMLHidden (ae20335)
  • shim: add new export html-validate/test-utils exposing test-utils (30f5d40)
  • shim: expose all event structures in shim (294bb0d)
  • shim: expose metadata structures (271e521)

Bug Fixes

  • config: dont automatically apply extends: ["html-validate:recommended"] (fcad0b2), closes #98
  • require node 10 (d1a48b1)
  • rules: input-missing-label handles multiple labels (a6af2da)
  • rules: input-missing-label ignores hidden <input> (41c39e9)
  • rules: input-missing-label requires label to be non-hidden (ff5e855), closes #99

Miscellaneous Chores

3.5.0 (2020-10-18)

Features

  • rules: new rule no-multiple-main (fa3c065)

3.4.1 (2020-10-13)

Bug Fixes

  • rules: ignore links hidden from accessibility tree - fixes #97 (064514b)

3.4.0 (2020-10-08)

Bug Fixes

  • deps: update dependency acorn-walk to v8 (5a41662)
  • rules: fix issue in no-dup-id where value is dynamic (203debe), closes #96

Features

  • api: add additional prototypes to validateString (69e8102)
  • dom: new api for caching data on DOMNode (13d99e4)
  • rules: implement caching in some helper methods (5746d6c)

3.3.0 (2020-09-08)

Bug Fixes

  • jest: add missing filename to typescript declaration (4be48fa)
  • meta: default to pass when testing excluded category from unknown element (07afa1a)
  • rules: handle unknown elements better in element-permitted-content (58ba1aa), closes #95

Features

  • jest: toHTMLValidate() supports passing expected errors (7b3c30e)

3.2.0 (2020-08-26)

Features

  • rules: new rule allowed-links (d876206)

3.1.0 (2020-08-20)

Bug Fixes

  • rules: no-redundant-for should only target <label> (a2395b6)

Features

  • meta: new property labelable (bf5cd6e)
  • rules: new rule multiple-labeled-controls (ee28774), closes #86
  • rules: new rule no-redundant-for (d4445bb), closes #87

3.0.0 (2020-06-21)

Bug Fixes

  • deps: update dependency chalk to v4 (614da1b)
  • deps: update dependency eslint to v7 (186be9b)
  • deps: update dependency espree to v7 (863cd0f)

chore

BREAKING CHANGES

  • Node 8 support has been removed.

2.23.1 (2020-06-21)

Bug Fixes

  • rules: no-trailing-whitespace handles CRLF (windows) newlines (2aaddc2), closes #93

2.23.0 (2020-05-18)

Bug Fixes

  • cli: expandFiles path normalization for windows (b902853)

Features

  • config: add two new config presets html-validate:standard and html-validate:a17y (36bf9ec), closes #90
  • rules: add include and exclude options to prefer-button (b046dc5), closes #90
  • rules: add isKeywordExtended method for rule authors (ca7e835)

2.22.0 (2020-05-15)

Bug Fixes

  • elements: add <details> and <summary> elements (47ba673), closes #89
  • <legend> should allow heading elements (73e150f)
  • deps: update dependency json-merge-patch to v1 (e9f83d2)

Features

  • rules: new rule no-autoplay (9ed5474), closes #84

2.21.0 (2020-04-26)

Bug Fixes

  • meta: throw schema validation error when element metadata does not validate (6ecf050), closes #81
  • schema: allow permittedContent and permittedDescendants to use AND-syntax (2fa742c), closes #82
  • transform: expose computeOffset (d033538)

Features

2.20.1 (2020-04-19)

Bug Fixes

  • handle loading js-files via extends again (e29987f)

2.20.0 (2020-04-05)

Bug Fixes

  • meta: add missing null return type to MetaTable.getMetaFor (44eac5b)
  • allow loading elements from js-file again (5569a94)
  • make ast property private (cb1a2c8)

Features

  • support loading custom formatters (0b02a31)
  • formatters: use factory to load formatters to make it more webpack-friendly (81bef6e)

2.19.0 (2020-03-24)

Bug Fixes

  • meta: deep merge during inheritance (85c377d), closes #72

Features

  • meta: implicit inheritance when overriding existing element (8833a0f)

2.18.1 (2020-03-22)

Bug Fixes

  • meta: allow regexp literal in element schema (444a472), closes #70
  • meta: make all meta properties optional in type declaration (eac5052)
  • meta: support case-insensitive regexp flag (96e7343), closes #69
  • rules: use original wcag rule names (1d5aa3c)

Reverts

  • Revert "ci: temporary add debug to troubleshoot @semantic-release/gitlab" (b4d016b)

2.18.0 (2020-03-11)

Bug Fixes

  • validate input[list] (9c70db2)
  • rules: no-dup-id handles when id is set but omitted value (5f678a5)
  • rules: no-missing-references ignores omitted references (b8863cd)
  • rules: add contextual documentation for deprecated (7fbf433)
  • rules: add contextual documentation for element-name (2a98bad)
  • rules: better and more contextual messages for deprecated (3602be7)
  • rules: contextual documentation for deprecated-rule (8b10601)
  • rules: improve documentation for doctype-html (1a896a8)
  • shim: expose ConfigError and UserError (2d002c7)
  • transform: ignore non-string values in TemplateExtractor (7f27c8b)
  • allow both null and empty string when attribute allows empty values (5b6991b)

Features

  • attribute-allowed-values handle omitted values (962d079)
  • new rule attribute-empty-style (a328b55)

2.17.1 (2020-03-02)

Bug Fixes

  • disable void-style when using toHTMLValidate matcher (4d6bb3d)

2.17.0 (2020-02-17)

Bug Fixes

  • elements: <img> srcset attribute cannot be empty (27699ad)
  • jest: typescript compatibility with jest@23 (4efae54)
  • rules: add aria-label helper (6d5d963)
  • rules: fix deprecated-rule missing location (1156c1e)
  • change config merge order in toHTMLValidate (204a8fa)
  • rules: handle aria-label on links for WCAG H30 (eb01542), closes #67

Features

  • rules: mark void as deprecated (f6afc0f), closes #58
  • rules: new rule no-self-closing (d9c869b), closes #58
  • rules: new rule script-element (48ad6da)
  • rules: new rule script-type (a680f1d)
  • rules: new rule void-content (c93c63b), closes #58
  • rules: new rule void-style (f30de03), closes #58
  • allow configuration override when using validate{String,Source} (6e62852)

2.16.0 (2020-02-12)

Bug Fixes

  • cli: fix typo when using --init with vuejs (6eee478)
  • dom: querySelector and friends return empty when selector is empty (6a871de)
  • schema: add title and description to most properties (a7cea78)
  • schema: handle $schema in config and elements (a4f9054)
  • add missing jest.js and jest.d.ts (8b767c2)

Features

  • add import html-validate/jest as a shortcut to the jest matchers (4ccf6ed)
  • expose NodeClosed, TextNode, Plugin and Parser (f344527)

2.15.0 (2020-02-09)

Features

  • plugin: load default transformer if loading named transformer without name (efb0eb9)

2.14.0 (2020-02-06)

Features

  • elements: make <legend> in <fieldset> optional (covered by new h71 rule instead) (f3a59b9)
  • rules: new method getTagsDerivedFrom to get tag and tags inheriting from it (0118738)
  • rules: new rule wcag/h71 requiring <fieldset> to have <legend> (1b8ceab)

2.13.0 (2020-02-02)

Features

  • meta: allow plugins to add copyable metadata (242eaa8)

2.12.0 (2020-01-27)

Bug Fixes

  • rules: don't report elements where the tag is already correct (ee354a0), closes #65

Features

  • rules: new rule no-redundant-role (a32b816), closes #65

2.11.0 (2020-01-26)

Bug Fixes

  • dom: use case-insensitive match for is() (d2687c2)
  • plugin: fix rule type definition (6f0213d)

Features

  • dom: add generateSelector (12e718e)
  • dom: new type DOMInternalID (ada3cd3)
  • dom: support pseudo-classes :first-child, :last-child and :nth-child (af39ea1)
  • rules: add selector to reported errors (6b6ae3d)
  • rules: improved reported error location for some rules (216b449)
  • shim: expose Report (6091050)

2.10.0 (2020-01-22)

Features

  • rules: make options type-safe (c85342a)
  • rules: new rule prefer-native-element (06c44ce)

2.9.0 (2020-01-17)

Features

  • jest: add toHTMLValidate() (44388ea)
  • rules: check references from aria-controls (9e9805d)

2.8.2 (2020-01-09)

Bug Fixes

  • create directory only if missing (5db6fe8)

2.8.1 (2020-01-06)

Bug Fixes

  • cli: create output directory as needed (b5569f3)
  • meta: load metadata with readFile instead of require (c5de95b)

2.8.0 (2020-01-02)

Features

  • rule: validate matching case for start and end tags (288cf86)
  • rules: refactor parseStyle from element-case and attr-case (24d8fad)
  • rules: support multiple case styles (5a397bd), closes #50
  • rules: support pascalcase and camelcase for element-case rule (be7d692)

2.7.0 (2019-12-16)

Bug Fixes

  • config: more helpful error when user forgot to load plugin (62bbbe5)

Features

  • config: configuration schema validation (c9fe45f), closes #61
  • dom: allow plugins to modify element annotation (979da57)
  • dom: allow plugins to modify element metadata (cbe3e78), closes #62
  • elements: make schema publicly accessible (bcab9e4)
  • rules: use annotated name (1895ef4)

2.6.0 (2019-12-12)

Bug Fixes

  • cli: useful error message when metadata is invalid (165da72)
  • elements: allow requiredAttributes and others to be empty array (244d038), closes #59
  • error: better schema validation error (9a5f8fe)

Features

  • lexer: handle rudimentary template tags such as <% .. %> (a0f6190)

2.5.0 (2019-12-09)

Bug Fixes

  • config: keep track of plugin original name (9e7ea3e)
  • config: throw error is plugin is missing (bc61a6b)
  • htmlvalidate: more verbose output from --dump-source (f0089c6)
  • htmlvalidate: prefer html-validate:recommended (8deb03a)

Features

  • htmlvalidate: new method canValidate to test if a file can be validated (f523028)

2.4.3 (2019-12-08)

Bug Fixes

  • parser: report parser-error when stream ends before required token (50e1d67)

2.4.2 (2019-12-05)

Bug Fixes

  • config: handle exceptions from loading plugin (3aec3f3), closes #55

2.4.1 (2019-12-02)

Bug Fixes

  • lexer: handle missing Source properties (like offset) (2092942)

2.4.0 (2019-12-01)

Bug Fixes

  • config: init can now safely be called multiple times (ed46c19)
  • htmlvalidate: initialize global config if needed (6d05747)

Features

  • htmlvalidate: retain offset when yielding multiple sources (fe1705e)
  • transform: add offsetToLineColumn helper (1e61d00)

2.3.0 (2019-11-27)

Bug Fixes

  • config: update --init config for html-validate-vue@2 (6553ded)

Features

  • transform: support hasChain to test if a transformer is present (e8ef4f5)

2.2.0 (2019-11-23)

Bug Fixes

  • config: throw ConfigError when elements cannot be loaded (62c08e7)
  • docs: update plugin docs (340d0ca)
  • plugin: make all fields optional (a587239)

Features

  • plugin: allow specifying name (6554f72)

2.1.0 (2019-11-21)

Bug Fixes

  • deps: update dependency chalk to v3 (f84bd35)
  • rules: wcag/h32 support custom form elements (e00e1ed)

Features

  • meta: add method to query all tags with given property (eb3c593)
  • meta: adding form property (edf05b0)
  • meta: allow inheritance (5c7725d)
  • meta: support @form category (66d75a8)

2.0.1 (2019-11-19)

Bug Fixes

  • config: better error when loading missing transformer from plugin (db48a01)
  • config: fix loading non-plugin transformer with plugin present (c9ad080), closes #54

2.0.0 (2019-11-17)

Features

  • config: transformers must now operate on Source (9c2112c)
  • config: wrap transformer error message better (9f833e9)
  • htmlvalidate: string sources are now transformed too (0645e37)
  • plugin: support exposing transformers from plugins (1370565)
  • transform: add context object as this (cb76cb3)
  • transform: add version number to API (94a5663)
  • transform: adding test utils (9e42590)
  • transform: support chaining transformers (4a6fd51)
  • transform: support returning iterators (623b2f2)

BREAKING CHANGES

  • config: Previously transformers took a filename and had to read data of the file itself. Transformers will now receive a Source instance with the data preread.

1.16.0 (2019-11-09)

Bug Fixes

  • cli: fix --init not creating configuration unless overwriting (9098529)
  • config: use readFile to prevent unintended caching (4864bfa)

Features

  • shim: expose version number in shim (890d122)

1.15.0 (2019-11-03)

Bug Fixes

  • cli: --help does not take an argument (e22293f)

Features

  • cli: add --dump-source to debug transformers (4d32a0d)
  • cli: add --init to create initial configuration (6852d30)

1.14.1 (2019-10-27)

Bug Fixes

  • input hidden should not have label (66cf13d), closes #53

1.14.0 (2019-10-20)

Features

  • shim: expose more types (86bb78d)
  • enable typescript strict mode (excect strict null) (5d2b45e)
  • htmlvalidate: support passing filename to validateString (c2e09a2)

1.13.0 (2019-10-13)

Features

  • rules: support deprecating rules (de80d96)

1.12.0 (2019-10-08)

Features

  • cli: new API to get validator instance (6f4be7d)
  • cli: support passing options to CLI class (aa544d6)
  • config: add root property to stop searching file system (9040ed5)
  • shim: expose HtmlElement in shim (dbb673f)

1.11.0 (2019-09-23)

Bug Fixes

  • config: expand <rootDir> in elements (eeddf4c)

Features

  • meta: new property scriptSupporting (c271a04)

1.10.0 (2019-09-19)

Features

  • api: better exposure of cli api (2c16c5b)
  • api: new method validateMultipleFiles (536be69)

1.9.1 (2019-09-19)

Bug Fixes

  • rules: fix handling of invalid void style (4682d96), closes #52

1.9.0 (2019-09-17)

Features

  • rules: new rule svg-focusable (c354364)

1.8.0 (2019-09-16)

Bug Fixes

  • rules: fix prefer-button crashing on boolean type attribute (94ce2a8)

Features

  • cli: allow specifying extensions (2bdd75f)
  • cli: cli learned --version to print version number (95c6737)
  • cli: exit early when encountering unknown cli arguments (1381c51)
  • cli: expose expandFiles function (edab9cf)
  • cli: handle passing directories (f152a12)
  • cli: support setting cwd when calling expandFiles (420dc88)
  • event: new event config:ready (c2990b5)

1.7.1 (2019-09-15)

Bug Fixes

  • config: better error message when transformer fails to load (c5a4f38)

1.7.0 (2019-09-11)

Bug Fixes

  • parser: fix conditional comments pushing elements into tree (b26fe80), closes #51
  • rules: attr-case no longer reports duplicate errors for dynamic attributes (c06ae67), closes #48

Features

  • location: allow sliceLocation to wrap line/column (cbd7796)
  • rules: add PascalCase and camelCase styles for attr-case (9e91f81), closes #49

1.6.0 (2019-09-01)

Bug Fixes

  • matchers: typo in error message (daeabba)

Features

  • matchers: optionally test context (44fcf47)

1.5.1 (2019-08-20)

Bug Fixes

  • elements: mark contextmenu attribute as deprecated (db4069f)

Features

  • rules: new rule no-unknown-elements (96f5fcf)

1.5.0 (2019-08-17)

Bug Fixes

  • elements: <img> must have non-empty src (8916e19)
  • rules: change output format of wcag/h37 and element-required-attributes to match (26f5074)

Features

  • cli: add --config to specify a custom configuration file (87b565f)
  • elements: <fieldset> requires <legend> (0bce9dd)
  • elements: <head> requires <title> (8aaa801)
  • elements: src, href, etc attributes cannot be empty (89c7ac6)
  • parser: include valueLocation in doctype event (803ddae)
  • rules: new rule doctype-html (46061a7)
  • rules: new rule element-required-content (664dead)
  • rules: new rule no-style-tag (a1dff5c)

1.4.0 (2019-08-15)

Bug Fixes

  • deps: update dependency acorn-walk to v7 (1fe89e0)
  • reporter: fix {error,warning}Count after merging reports (bc657d0)
  • reporter: require {error,warning}Count to be present in Result (b1306a4)

Features

  • cli: add new --max-warnings flag (e78a1dc)
  • reporter: add {error,warning}Count summary to Report object (2bae1d0)

1.3.0 (2019-08-12)

Features

  • rules: new rule no-missing-references (4653384)

1.2.1 (2019-07-30)

  • fix configuration when using multiple extends.

1.2.0 (2019-06-23)

  • new rule prefer-tbody to validate presence of <tbody> in <table.
  • add requiredAncestors metadata and validation to test elements with additional requirements for the parent elements, such as <area> and <dd>/<dt>.
  • add HtmlElement.closest() to locate a parent matching the given selector.
  • add HtmlElement.matches() to test if a selector matches the given element.
  • fix so multiple combinators can be used in selectors, e.g. foo > bar > baz now works as expected.

1.1.2 (2019-06-18)

  • allow div to group elements under dl (fixes #44).

1.1.1 (2019-06-07)

  • Reporter is now exposed in shim.
  • getFormatter CLI API now returns output as string instead of writing directly to stdout.
  • codeframe formatter now adds final newline in output.

1.1.0 (2019-06-04)

  • input-missing-label now validates <textarea> and <select>.
  • querySelector and friends now handles [attr="keyword-with-dashes"] and similar constructs.

1.0.0 (2019-05-12)

  • rule wcag/h37 now ignores images with role="presentation or aria-hidden="true".
  • allow crossorigin attribute to be boolean or "" (maps to "anonymous").
  • add <picture> element.
  • mark <style> as foreign as to not trigger errors inside css content.
  • allow whitespace around attribute equals sign, e.g class = "foo".

0.25.1 (2019-05-10)

  • allow raw ampersands (&) in quoted attributes.
  • extend set of allowed characters in unquoted attributes in lexer.

0.25.0 (2019-04-23)

  • new rule unrecognized-char-ref for validating character references.
  • add support for auto style for attr-quotes rule.
  • new rule no-raw-characters to check for presence of unescaped <, > and & characters.

0.24.2 (2019-03-31)

Features

  • new rule meta-refresh.
  • new event element:ready triggered after an element and its children has been fully constructed.
  • add plugin callbacks init() and setup().
  • new rule require-sri.
  • add <slot> element.

0.24.1 (2019-03-26)

Bugfixes

  • fix broken edit links in footer.
  • fix broken import causing typescript API users getting build errors.

0.24.0 (2019-03-26)

Features

  • adding link to edit documentation and view rule source in documentation.
  • new rule wcag/h36.
  • new rule wcag/h30.
  • new rule long-title.
  • new rule empty-title.
  • add UserError exception which is to be used for any error which is not caused by an internal error, e.g. configuration errors or a plugin. The error suppresses the notice about internal error which should be reported as a bug.
  • reworked and extendable validation of elements metadata. Plugins may now add support for custom metadata.

Bugfixes

  • fix handling of plugins with no rules.

0.23.0 (2019-03-20)

Features

  • new rule empty-heading validating headers have textual content.
  • let plugins add configuration presets.
  • add processElement hook on Source.
  • add textContent property on DOMNode to get text (recursive) from child nodes. A new node type TextNode is added.
  • add firstChild and lastChild to DOMNode.
  • docs: precompile syntax highlighting for smoother page loads.
  • expose Config, ConfigData and ConfigLoader in shim.

0.22.1 (2019-02-25)

Breaking change

  • .children has been split and moved from HtmlElement to DOMNode. .childNodes replaces the original .children but is now typed DOMNode[] (and in a future release may contain other node types). A getter .nodeElements can be used to access only HtmlElement from .childNodes and is typed HtmlElement[]. If your rules use .children the

Bugfixes

  • <rootDir> is now respected when configuring plugins.
  • fix cosmetic case of wcag/h37 rule.

0.22.0 (2019-02-24)

Breaking changes

  • HtmlElement direct access to attr is replaced with attributes. The former was an key-value object and the latter is a flattened array of Attribute.

Features

  • exposes Source and AttributeData in shim.
  • HtmlElement will now store duplicated (or aliased) attributes. The biggest change this introduces is that classList will now contain a merged list of all classes. This is needed when combining a static class attribute with a dynamic one.
  • DOM Attribute got two flags isStatic and isDynamic to easily tell if the value is static or dynamic.
  • more verbose exception when a transformer fails. (fixes #37)
  • allow processAttribute hook to yield multiple attributes, typically used when adding aliased attributes such as :class. By adding both the alias and the original the latter can be validated as well (e.g. no-dup-attr can trigger for multiple uses of :class). (fixes #36)
  • allow setting hooks when using HtmlValidate.validateString, makes it easier to write tests which requires hooks, e.g. processing attributes.

Bugfixes

  • [attr] selector now matches boolean attributes.
  • attribute-boolean-style and no-dup-attr now handles when dynamic attributes is used to alias other attributes, e.g :required="foo" no longer triggers an boolean style and class=".." combined with :class=".." no longer triggers duplicate attributes. (fixes #35)
  • attribute-allowed-values now ignores boolean attributes with dynamic values. (partially fixes #35)

0.21.0 (2019-02-17)

Breaking changes

  • button-type is replaced with element-required-attributes.

Features

  • new rule element-required-attributes replaces button-type and allows any element to contain requiredAttributes metadata.
  • support foreign elements. The body of the foreign element will be discarded from the DOM tree and not trigger any rules.
  • CLI write a more verbose message when unhandled exceptions are raised.
  • --dump-events output reduced by hiding element metadata and compacting location data.
  • use jest snapshots to test element metadata as it is more maintainable.

Bugfixes

  • allow <area shape="default"> (fixes #31)

0.20.1 (2019-02-06)

Bugfixes

  • fix #33: ensure wcag/h37 and wcag/h67 checks if node exists before testing tagname.
  • handle boolean attributes in attribute-allowed-values.

0.20.0 (2019-01-29)

Features

  • update codeframe formatter to show not just start location but also end.

Bugfixes

  • Fixes html-validate-angular#1 by handling both regular and arrow functions.

0.19.0 (2019-01-27)

Breaking changes

  • img-req-alt has been renamed wcag/h37.

Features

  • new rule prefer-button.
  • Attribute now stores location of value.
  • new rules wcag/h32 and wcag/h67.
  • move location and isRootElement to DOMNode and add new nodeType property.
  • add Attribute.valueMatches to test attribute value. Handles DynamicValue.
  • querySelector now handles selector lists (comma-separated selectors)

0.18.2 (2019-01-14)

Bugfixes

  • fix issue when calling getAttributeValue on a boolean attribute.
  • handle DynamicValue in DOMTokenList and id-pattern.

0.18.1 (2019-01-12)

Features

  • CLI learned --print-config to output configuration for a given file.

0.18.0 (2019-01-10)

Features

  • add support for dynamic attribute values, that is the value is marked as being set but has no known value. Rules are expected to assume the value exists and is valid. The primary usage for this is in combination with the parseAttribute hook, e.g :id="..." can yield attribute id with a dynamic value.
  • add support for transformer hooks, currently the only hook is parseAttribute allowing the transformer to alter the attribute before any events are emitted, e.g. it can pick up the vuejs :id attribute and pass it as id to allow other rules to continue just as if id was typed.

Bugfixes

  • fix ConfigLoader tests when running on windows.

0.17.0 (2019-01-09)

Breaking changes

  • DOMNode has been renamed HtmlElement and there is instead a new base class DOMnode which HtmlElement extends from. Rules using DOMNode need to be changed to use HtmlElement.

Features

  • use Prettier for formatting sources.
  • add HtmlValidate.getRuleDocumentation() API for IDEs to fetch contextual rule documentation.
  • add codeframe formatter (from eslint).
  • add HtmlValidate.flushConfigCache to allow flushing the config loader cache.
  • add TemplateExtractor.createSource as a quick way to create a source from filename.
  • add typescript definition for shim.js
  • add validateSource to HtmlValidate allowing to manually passing a source.
  • HtmlValidate.getConfigFor is now part of public API.

Bugfixes

  • Directives can now enable/disable rules working with dom:ready event.
  • HtmlElement location is now shifted by 1.

0.16.1 (2018-12-16)

Bugfixes

  • Message now passes size property from Location

0.16.0 (2018-12-15)

Features

  • Location has a new property size holding the number of characters the location refers to.
  • HtmlValidate class now loads same default config as CLI if no configuration is passed explicitly.
  • Location has a new property offset holding the offset into the source data (starting at zero).
  • CLI learned --stdin and --stdin-filename for passing markup on standard input and explicitly naming it. Useful for external tools and IDEs which wants to pass the markup in stdin instead of a temporary file.

0.15.3 (2018-12-05)

Features

  • expose querySelector and querySelectorAll on DOMNode, not just DOMTree.

0.15.2 (2018-12-01)

Features

0.15.1 (2018-11-26)

Features

  • new properties previousSibling and nextSibling on DOMNode.

0.15.0 (2018-11-21)

Features

  • new rule attribute-boolean-style to validate style of boolean attributes.
  • new property nodeName on DOMNode.

Bugfixes

  • attribute-allowed-values now normalizes boolean attributes before validating, i.e. it will accept disabled, disabled="" or disabled="disabled". Fixes #13.
  • input learned required attribute.
  • querySelector properly handles attribute selectors with dashes and digits. Fixes #15.

0.14.2 (2018-11-06)

Features

  • bump dependencies.
  • use acorn-walk instead of acorn@5.

0.14.1 (2018-11-04)

Bugfixes

  • fix dependency on acorn, the package now properly resolves acorn 5 when dependant pulls acorn 6.

0.14.0 (2018-11-03)

  • support global metadata.
  • new rule attribute-allowed-values validates allowed values for attributes, such as type for <input>.

0.13.0 (2018-10-21)

Features

  • deprecated supports adding a message for custom elements.
  • Rule constructors can now throw exceptions. Previously the exceptions would be silently swallowed and the rule would trigger the missing rule logic.
  • Support writing element metadata inline in configuration file.

Bugfixes

  • element-permitted-order now reports the error where the malplaced element is instead of the parent element (which holds the restriction). Fixes #10.

0.12.0 (2018-10-17)

Features

  • Support writing plugins with custom rules.
  • Bump dependencies, including typescript 3.0 to 3.1

0.11.1 (2018-10-07)

Features

  • Rule documentation examples are now validated automatically with htmlvalidate to provide direct feedback of how a rule will react on the given markup.

Bugfixes

  • no-implicit-close now provides more context when closed by a sibling.
  • close-order no longer reports error for implicitly closed elements.

0.11.0 (2018-09-23)

Breaking changes

  • For compatibility with other tools the severity disable has been renamed to off. The old name will continue to work but will be removed in the future.

Features

  • support directives to enable/disable rules inside files, e.g. to ignore a single error.
  • rules are now using dynamic severity which can change at runtime.
  • new class Attribute used by DOMNode. Attributes now holds the location they are created from making DOM attribute rules more precise.
  • new rule heading-level for validating sequential heading levels.

Bugfixes

  • element-permitted-occurrences no longer triggers for the first occurrence, only subsequent usages.
  • Table.getMetaFor(..) is not case-insensitive.

0.10.0 (2018-08-11)

Breaking changes

  • rule api overhaul, all rules are now classes.

Features

  • support multiple events for single listener and listener deregistration.
  • new Engine class for easier programmatical usage.
  • stricter types related to events
  • bump dependencies.

Bugfixes

  • add espree dependency

0.9.2 (2018-07-12)

Features

  • add no-inline-style to htmlvalidate:recommended.
  • add htmlvalidate:document for predefined set of document-related rules, e.g. recommended for documents but not component templates.
  • add missing-doctype rule to require doctype.
  • add source location to root DOMNode containing the first line and column in the source file.
  • add doctype property to DOMTree.
  • add doctype event, emitted when a doctype is encountered.
  • add element-case rule for validating case of element names.
  • add attr-case rule for validating case of attributes.

0.9.1 (2018-07-01)

Features

  • add protractor-html-validate to docs.

0.9.0 (2018-06-17)

Breaking changes

  • semantics for require changed from require('html-validate') to require('html-validate').HtmlValidate to support exposing other classes.

Features

  • new TemplateExtractor helper class for extracting templates from javascript sources.
  • trigger downstream projects on release

Bugfixes

  • Report valid now only checks for errors, the result will still be valid if only warnings are present.

0.8.3 (2018-06-12)

  • run tests against multiple node versions (8.x, 9.x and 10.x) to ensure compatibility.
  • exposed getFormatter as a reusable function to load formatters from string (like CLI tool): name[=DST][,name=DST...]

0.8.2 (2018-05-28)

Bugfixes

  • lexer better handling of newlines, especially CRLF \r\n.

0.8.1 (2018-05-27)

Misc

  • update package.json

0.8.0 (2018-05-27)

Features

  • easier API usage: require('html-validate') now returns class without using require(html-validate/build/htmlvalidate').default.
  • support transform in configuration to extract source html from other files.
  • attach depth and unique read-only properties to DOMNode corresponding to the nodes depth in the DOM tree and a sequential id (unique for the session).
  • new rule no-conditional-comments to disallow usage of conditional comments.
  • handle conditional comments.

Bugfixes

  • handle whitespace before doctype
  • DOMTokenlist now handles multiple spaces as delimiter and strip leading/trailing whitespace.

0.7.0 (2017-11-04)

Features

  • new rule no-implicit-close to disallow usage of optional end tags.
  • handle optional end tags.
  • better result sorting, error messages are now sorted by line and column, the stage which triggered the error doesn't matter any longer.
  • better result merging, files will no longer be duplicated.
  • element metadata can no be sourced from multiple sources and be configured using the elements configuration property.

Improvements

  • better configuration merging

Bugfixes

  • fixed script tag incorrectly consuming markup due to greedy matching.

0.6.0 (2017-10-29)

Features

  • new rule no-deprecated-attr for testing if any deprecated attributes is used.
  • CLI supports globbing (as fallback if shell doesn't expand the glob already)

Bugfixes

  • fix lowercase <!doctype html> crashing the lexer.
  • fix node binary name in shebang
  • fix directory traversal on windows

0.5.0 (2017-10-17)

Features

  • Rule element-name learned whitelist and blacklist options.
  • Support outputting to multiple formatters and capturing output to file.
  • checkstyle formatter. Use -f checkstyle.

0.4.0 (2017-10-17)

Features

  • new rule no-inline-style disallowing inline style attribute.
  • new rule img-req-alt validating that images have alternative text.
  • new rule element-permitted-order validating the required order of elements with restrictions.
  • new rule element-permitted-occurrences validating elements with content models limiting the number of times child elements can be used.

Bugfixes

  • the parser now resets the DOM tree before starting, fixes issue when running the same parser instance on multiple sources.

0.3.0 (2017-10-12)

Features

  • new rules id-pattern and class-pattern for requiring a specific formats.
  • new rule no-dup-class preventing duplicate classes names on the same element.

Bugfixes

  • lexer now chokes on <ANY\n<ANY></ANY></ANY> (first tag missing >) instead of handling the inner <ANY> as an attribute.
  • element-permitted-content fixed issue where descending with missing metadata would report as disallowed content.

0.2.0 (2017-10-11)

Features

  • Support putting configuration in .htmlvalidate.json file.
  • void rule rewritten to better handle both tag omission and self-closing. It learned a new option style to allow a single style.
  • new rule element-permitted-content verifies that only allowed content is used.
  • new rule element-name to validate custom element names.

0.1.3 (2017-10-08)

Features

  • Rule documentation

Bugfixes

  • no-dup-attr now handles attribute names with different case.