diff --git a/CHANGELOG.md b/CHANGELOG.md
index bd970895da..c6aede4670 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+### [4.8.2](https://github.com/dequelabs/axe-core/compare/v4.8.1...v4.8.2) (2023-09-18)
+
+### Bug Fixes
+
+- polyfill Object.hasOwn for node 14 ([#4152](https://github.com/dequelabs/axe-core/issues/4152)) ([c7b597b](https://github.com/dequelabs/axe-core/commit/c7b597b9ec9c74009f4ddac16d5311ee642ab352))
+
### [4.8.1](https://github.com/dequelabs/axe-core/compare/v4.8.0...v4.8.1) (2023-09-08)
### Bug Fixes
diff --git a/bower.json b/bower.json
index 5adb1abf40..d9aea5c26d 100644
--- a/bower.json
+++ b/bower.json
@@ -1,6 +1,6 @@
{
"name": "axe-core",
- "version": "4.8.1",
+ "version": "4.8.2",
"deprecated": true,
"contributors": [
{
diff --git a/lib/core/imports/index.js b/lib/core/imports/index.js
index f88ac876fa..63622d7636 100644
--- a/lib/core/imports/index.js
+++ b/lib/core/imports/index.js
@@ -7,6 +7,11 @@ import Color from 'colorjs.io';
import es6promise from 'es6-promise';
import { Uint32Array } from 'typedarray';
import 'weakmap-polyfill';
+import hasOwn from 'core-js-pure/actual/object/has-own';
+
+if (!('hasOwn' in Object)) {
+ Object.hasOwn = hasOwn;
+}
// prevent striping newline characters from strings (e.g. failure
// summaries). value must be synced with build/configure.js
diff --git a/locales/ja.json b/locales/ja.json
index 8ee94527f8..e84bff43d9 100644
--- a/locales/ja.json
+++ b/locales/ja.json
@@ -10,8 +10,8 @@
"help": "アクティブな要素には代替テキストが存在しなければなりません"
},
"aria-allowed-attr": {
- "description": "要素のロールにARIA属性が許可されていることを確認します",
- "help": "要素には許可されているARIA属性のみを使用しなければなりません"
+ "description": "要素のロールがARIA属性をサポートしていることを確認します",
+ "help": "要素にはサポートされているARIA属性のみを使用しなければなりません"
},
"aria-allowed-role": {
"description": "role属性の値が要素に対して適切であることを確認します",
@@ -38,8 +38,8 @@
"help": "ARIA dialogとalertdialogノードにはアクセシブルな名前がなければなりません"
},
"aria-hidden-body": {
- "description": "ドキュメント本体にaria-hidden='true'が存在しないことを確認します",
- "help": "ドキュメント本体にaria-hidden='true'が存在してはなりません"
+ "description": "ドキュメント本体にaria-hidden=\"true\"が存在しないことを確認します",
+ "help": "ドキュメント本体にaria-hidden=\"true\"が存在してはなりません"
},
"aria-hidden-focus": {
"description": "aria-hiddenが指定されている要素にフォーカスできないこと、その要素にフォーカス可能な要素が含まれていないことを確認します",
@@ -350,8 +350,8 @@
"help": "ページのすべてのコンテンツはlandmarkに含まれていなければなりません"
},
"role-img-alt": {
- "description": "[role='img'] の要素に代替テキストが存在することを確認します",
- "help": "[role='img'] の要素には代替テキストがなければなりません"
+ "description": "[role=\"img\"] の要素に代替テキストが存在することを確認します",
+ "help": "[role=\"img\"] の要素には代替テキストがなければなりません"
},
"scope-attr-valid": {
"description": "scope属性がテーブルで正しく使用されていることを確認します",
@@ -710,7 +710,7 @@
"focusable-not-tabbable": {
"pass": "要素内にフォーカス不可能な要素は含まれていません",
"incomplete": "フォーカス可能な要素がすぐにフォーカスインジケータを動かすかどうか確認しましょう",
- "fail": "フォーカス可能なコンテンツはtabindex='-1'を指定するか、DOMから削除するべきです"
+ "fail": "フォーカス可能なコンテンツはtabindex=\"-1\"を指定するか、DOMから削除するべきです"
},
"frame-focusable-content": {
"pass": "要素の子孫にフォーカス可能なものはありません",
@@ -725,7 +725,7 @@
"pass": "要素の子孫にフォーカス可能なものはありません",
"fail": {
"default": "要素の子孫にフォーカス可能なものがあります",
- "notHidden": "インタラクティブなコントロールの内側の要素に負のtabindexを指定しても、('aria-hidden=true'が指定されている場合も)支援技術がその要素にフォーカスできないようにはなりません"
+ "notHidden": "インタラクティブなコントロールの内側の要素に負のtabindexを指定しても、(aria-hidden=\"true\"が指定されている場合も)支援技術がその要素にフォーカスできないようにはなりません"
},
"incomplete": "要素に子孫があるか判定できませんでした"
},
@@ -862,11 +862,11 @@
"fail": "タグの${data}がモバイルデバイスでの拡大を無効にします"
},
"target-offset": {
- "pass": "ターゲットに最も近い隣接要素からのオフセットが十分にあリます (${data.closestOffset}pxであり、${data.minOffset}px以上です)",
- "fail": "ターゲットの最も近い隣接要素からのオフセットが不十分です (${data.closestOffset}pxですが、${data.minOffset}px以上でなければなりません)",
+ "pass": "ターゲットに最も近い隣接要素との間の空白の大きさは十分です。クリッカブルな領域として十分な大きさは、直径${data.minOffset}pxで、${data.minOffset}px以上です。",
+ "fail": "ターゲットに最も近い隣接要素との間の空白の大きさが不十分です。クリッカブルな領域として十分な大きさは、${data.minOffset}px以上ではなく、直径${data.closestOffset}pxです。",
"incomplete": {
- "default": "tabindexが負の要素において、最も近い隣接要素からのオフセットが不十分です (${data.closestOffset}pxですが、${data.minOffset}px以上でなければなりません)。これがターゲットであるか確認しましょう",
- "nonTabbableNeighbor": "ターゲットの隣接ノードで、tabindexが負のものからのオフセットが不十分です (${data.closestOffset}pxですが、${data.minOffset}px以上でなければなりません)。隣接要素がターゲットであるか確認しましょう"
+ "default": "tabindexが負の要素において、最も近い隣接要素との間の空白の大きさが不十分です。クリッカブルな領域として十分な大きさは、${data.minOffset}px以上ではなく、直径${data.closestOffset}pxです。これがターゲットであるか確認しましょう。",
+ "nonTabbableNeighbor": "ターゲットに最も近い隣接要素との間の空白の大きさが不十分です。クリッカブルな領域として十分な大きさは、${data.minOffset}px以上ではなく、直径${data.closestOffset}pxです。隣接要素がターゲットであるか確認しましょう。"
}
},
"target-size": {
diff --git a/package-lock.json b/package-lock.json
index 362b8091ba..c764ae24e5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "axe-core",
- "version": "4.8.1",
+ "version": "4.8.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "axe-core",
- "version": "4.8.1",
+ "version": "4.8.2",
"license": "MPL-2.0",
"devDependencies": {
"@axe-core/webdriverjs": "^4.5.2",
diff --git a/package.json b/package.json
index b0c37d82ec..ebbeb67dd6 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "axe-core",
"description": "Accessibility engine for automated Web UI testing",
- "version": "4.8.1",
+ "version": "4.8.2",
"license": "MPL-2.0",
"engines": {
"node": ">=4"
diff --git a/sri-history.json b/sri-history.json
index fa203ea8ea..c8398cf348 100644
--- a/sri-history.json
+++ b/sri-history.json
@@ -358,5 +358,9 @@
"4.8.1": {
"axe.js": "sha256-xAiDRfIT8BFIcORsehvJYCROe4K+U0Ak5MVJMaCvn9k=",
"axe.min.js": "sha256-EkEySwRAuCQljOYWJ29XQp4s80KPPlsmKwFtKFn6Vr0="
+ },
+ "4.8.2": {
+ "axe.js": "sha256-VZuuruUDDRwfzCo4ZDDzXiVefuy4pSW6BlGx+D/ucC0=",
+ "axe.min.js": "sha256-O9U055OcfxyKV61g3Qn7N9mvpJNht0RCPcFw+QjWTG4="
}
}