From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../ja/web/api/workerglobalscope/caches/index.html | 82 ++++++ .../web/api/workerglobalscope/console/index.html | 50 ++++ .../api/workerglobalscope/importscripts/index.html | 75 ++++++ files/ja/web/api/workerglobalscope/index.html | 284 +++++++++++++++++++++ .../languagechange_event/index.html | 81 ++++++ files/ja/web/api/workerglobalscope/self/index.html | 141 ++++++++++ 6 files changed, 713 insertions(+) create mode 100644 files/ja/web/api/workerglobalscope/caches/index.html create mode 100644 files/ja/web/api/workerglobalscope/console/index.html create mode 100644 files/ja/web/api/workerglobalscope/importscripts/index.html create mode 100644 files/ja/web/api/workerglobalscope/index.html create mode 100644 files/ja/web/api/workerglobalscope/languagechange_event/index.html create mode 100644 files/ja/web/api/workerglobalscope/self/index.html (limited to 'files/ja/web/api/workerglobalscope') diff --git a/files/ja/web/api/workerglobalscope/caches/index.html b/files/ja/web/api/workerglobalscope/caches/index.html new file mode 100644 index 0000000000..5d4002bd19 --- /dev/null +++ b/files/ja/web/api/workerglobalscope/caches/index.html @@ -0,0 +1,82 @@ +--- +title: WorkerGlobalScope.caches +slug: Web/API/WorkerGlobalScope/caches +tags: + - API + - Experimental + - Property + - Read-only + - Reference + - Service Workers + - Web Workers + - Window + - WindowOrWorkerGlobalScope +translation_of: Web/API/WindowOrWorkerGlobalScope/caches +--- +
{{APIRef()}}{{SeeCompatTable}}
+ +

{{domxref("WindowOrWorkerGlobalScope")}} インターフェイスの caches 読み取り専用プロパティは、現在のワーカーコンテキストに関連する {{domxref("CacheStorage")}} オブジェクトを返します。このオブジェクトにより、オフライン利用のために資産 (assets、アセット) を保存したり、リクエストに対するカスタムレスポンスを生成したりするなどの機能を使用できます。

+ +

構文

+ +
var myCacheStorage = self.caches; // または単に caches
+
+ +

+ +

{{domxref("CacheStorage")}}。

+ +

+ +

次の例では、アセットをオフラインで利用できるようにするために、ServiceWorker コンテキストでキャッシュを使う方法を示しています。

+ +
this.addEventListener('install', function(event) {
+  event.waitUntil(
+    caches.open('v1').then(function(cache) {
+      return cache.addAll(
+        '/sw-test/',
+        '/sw-test/index.html',
+        '/sw-test/style.css',
+        '/sw-test/app.js',
+        '/sw-test/image-list.js',
+        '/sw-test/star-wars-logo.jpg',
+        '/sw-test/gallery/',
+        '/sw-test/gallery/bountyHunters.jpg',
+        '/sw-test/gallery/myLittleVader.jpg',
+        '/sw-test/gallery/snowTroopers.jpg'
+      );
+    })
+  );
+});
+ +

仕様

+ + + + + + + + + + + + + + +
仕様ステータスコメント
{{SpecName('Service Workers')}}{{Spec2('Service Workers')}}初期定義。
+ +

ブラウザー実装状況

+ + + +

{{Compat("api.WindowOrWorkerGlobalScope.caches")}}

+ +

関連項目

+ + diff --git a/files/ja/web/api/workerglobalscope/console/index.html b/files/ja/web/api/workerglobalscope/console/index.html new file mode 100644 index 0000000000..17626a7181 --- /dev/null +++ b/files/ja/web/api/workerglobalscope/console/index.html @@ -0,0 +1,50 @@ +--- +title: WorkerGlobalScope.console +slug: Web/API/WorkerGlobalScope/console +tags: + - API + - ウェブワーカー + - リファレンス + - リファレンス(2) + - ワーカーグローバルスコープ + - 読み込み専用 +translation_of: Web/API/WorkerGlobalScope/console +--- +

{{APIRef("Web Workers API")}}{{Non-standard_header}}

+ +

{{domxref("Console")}} インターフェイスの読み取り専用 console プロパティは、ワーカーにブラウザコンソールへのアクセスを提供する {{domxref("Console")}} オブジェクトを返します。

+ +

構文

+ +
var consoleObj = self.console;
+ +

+ +

{{domxref("Console")}} オブジェクト

+ +

+ +

このプロパティはワーカー内でデバッグのためにブラウザコンソールへアクセスすることを可能にします。よって、例えばこのようにコールできます

+ +
console.log('test');
+ +

inside a worker (which would basically be the equivalent of self.console.log('test');, as these are being called on the worker scope, which can be referenced with {{domxref("WorkerGlobalScope.self")}}), to return a test message out to the browser console.

+ +

If you are calling console.log() from a {{domxref("DedicatedWorkerGlobalScope")}} or other worker scope that acts on a single loaded window, that tab's web console will receive the logs. However, If you are calling console.log() from a {{domxref("SharedWorkerGlobalScope")}}, the global browser console will receive the logs.

+ +

仕様

+ +

仕様の一部ではありません。

+ +

Browser compatibility

+ + + +

{{Compat("api.WorkerGlobalScope.console")}}

+ +

関連

+ + diff --git a/files/ja/web/api/workerglobalscope/importscripts/index.html b/files/ja/web/api/workerglobalscope/importscripts/index.html new file mode 100644 index 0000000000..8d3f2252e5 --- /dev/null +++ b/files/ja/web/api/workerglobalscope/importscripts/index.html @@ -0,0 +1,75 @@ +--- +title: WorkerGlobalScope.importScripts() +slug: Web/API/WorkerGlobalScope/importScripts +tags: + - API + - Method + - Reference + - Web Workers + - WorkderGlobalScope + - importScripts + - ウェブワーカー + - メソッド + - ワーカーグローバルスコープ +translation_of: Web/API/WorkerGlobalScope/importScripts +--- +

{{APIRef("Web Workers API")}}

+ +

importScripts() は {{domxref("WorkerGlobalScope")}} インターフェースのメソッドで、1つ以上のスクリプトをワーカーのスコープ内に同期的に読み込みます。

+ +

構文

+ +
self.importScripts('foo.js');
+self.importScripts('foo.js', 'bar.js', ...);
+ +

引数

+ +

インポートされるスクリプト表す {{domxref("DOMString")}} オブジェクトのカンマ区切りのリストです。これらは HTML 文書のベース URL からの相対パスです。

+ +

返値

+ +

なし。

+ +

例外

+ +
+
NetworkError
+
インポートされたスクリプトが妥当な JavaScript の MIME 型 (すなわち text/javascript) で提供されていなかった場合。
+
+ +

+ +

foo.js という別なスクリプトで書かれた機能を worker.js の内部で使用したい場合、以下のような行でインポートして使用することができます。

+ +
importScripts('foo.js');
+ +

importScripts()self.importScripts() は実質的に同じです。 — 両方とも importScripts() をワーカーの内部スコープの中から呼び出すことを表します。

+ +

仕様書

+ + + + + + + + + + + + + + +
仕様書状態備考
{{SpecName('HTML WHATWG', '#dom-workerglobalscope-importscripts', 'importScripts()')}}{{Spec2('HTML WHATWG')}}
+ +

ブラウザーの互換性

+ + + +

{{Compat("api.WorkerGlobalScope.importScripts")}}

+ +

関連情報

+ + diff --git a/files/ja/web/api/workerglobalscope/index.html b/files/ja/web/api/workerglobalscope/index.html new file mode 100644 index 0000000000..ed9affc439 --- /dev/null +++ b/files/ja/web/api/workerglobalscope/index.html @@ -0,0 +1,284 @@ +--- +title: WorkerGlobalScope +slug: Web/API/WorkerGlobalScope +tags: + - API + - Interface + - NeedsBrowserCompatibility + - Reference + - WorkerGlobalScope + - Workers +translation_of: Web/API/WorkerGlobalScope +--- +

{{APIRef("Web Workers API")}}

+ +

Web Workers APIWorkerGlobalScope インターフェースは、いずれかの worker のスコープを表すインターフェースです。worker はブラウジングコンテクストを持ちません; このスコープには、通常 {{domxref("Window")}} オブジェクトによって伝えられた情報が含まれます — この場合、イベントハンドラやコンソール、関連する {{domxref("WorkerNavigator")}} オブジェクトのことです。ぞれぞれの WorkerGlobalScope は独自のイベントループを持ちます。

+ +

このインターフェースは通常、 それぞれの work タイプによって特化されます: dedicated workers   のための {{domxref("DedicatedWorkerGlobalScope")}} と shared workers のための {{domxref("SharedWorkerGlobalScope")}}、ServiceWorker のための {{domxref("ServiceWorkerGlobalScope")}} です。self プロパティはそれぞれのコンテキストに特化したスコープを返します。

+ +

プロパティ

+ +

このインターフェースは、 {{domxref("EventTarget")}} インターフェースから継承したプロパティと、 {{domxref("WindowTimers")}}、 {{domxref("WindowBase64")}}、 {{domxref("WindowEventHandlers")}} からのプロパティを実装しています。

+ +

標準プロパティ

+ +
+
{{domxref("WorkerGlobalScope.caches")}} {{readOnlyinline}}
+
現在のコンテキストに関連した {{domxref("CacheStorage")}} オブジェクトを返す。このオブジェクトは、オフラインで使用するために資産を保存することやリクエストに対してカスタムレスポンスを生成するなどの  service worker の機能を使用できる。
+
{{domxref("WorkerGlobalScope.navigator")}} {{readOnlyinline}}
+
worker に関連した {{domxref("WorkerNavigator")}} を返す。これは特定の navigator オブジェクト、主にブラウジングスコープの {{domxref("Navigator")}} ではなく、worker に適合する。
+
{{domxref("WorkerGlobalScope.self")}} {{readOnlyinline}}
+
WorkerGlobalScope 自身の参照を返す。ほとんどの場合、 {{domxref("DedicatedWorkerGlobalScope")}} や {{domxref("SharedWorkerGlobalScope")}} 、{{domxref("ServiceWorkerGlobalScope")}} のような特定のスコープである。
+
{{domxref("WorkerGlobalScope.location")}} {{readOnlyinline}}
+
worker に関連した {{domxref("WorkerLocation")}} を返す。これは特定の location オブジェクト、主にブラウジングスコープの {{domxref("Location")}} ではなく、worker に適合する。
+
+ +

非標準プロパティ

+ +
+
{{domxref("WorkerGlobalScope.performance")}} {{readOnlyinline}}
+
work に関連した {{domxref("Performance")}} を返す。これは、プロパティとメソッドのサブセットのみが worker で利用できることを除いて、通常の performance オブジェクトである。
+
{{domxref("WorkerGlobalScope.console")}} {{readOnlyinline}} {{Non-standard_inline}}
+
worker に関連した {{domxref("Console")}} オブジェクトを返す。
+
+ +

イベントハンドラ

+ +

このインターフェースは、{{domxref("EventTarget")}} インターフェースから継承したイベントハンドラと {{domxref("WindowTimers")}} と {{domxref("WindowBase64")}} のイベントハンドラを実装しています。

+ +
+
{{domxref("WorkerGlobalScope.onerror")}}
+
{{event("error")}} イベントが発生したときに呼び出されるコードを表す {{domxref("EventHandler")}}。
+
{{domxref("WorkerGlobalScope.onoffline")}}
+
{{event("offline")}} イベントが発生したときに呼び出されるコードを表す {{domxref("EventHandler")}}。
+
{{domxref("WorkerGlobalScope.ononline")}}
+
{{event("online")}} イベントが発生したときに呼び出されるコードを表す {{domxref("EventHandler")}}。
+
{{domxref("WorkerGlobalScope.onlanguagechange")}}
+
ユーザーの選択言語を変更したときに、 global/worker スコープオブジェクトで発火する {{domxref("EventHandler")}}。
+
+ +
+
{{domxref("WorkerGlobalScope.onclose")}} {{non-standard_inline}}
+
{{event("close")}} イベントが発生したときに呼び出されるコードを表す {{domxref("EventHandler")}}。
+
{{domxref("WorkerGlobalScope.onrejectionhandled")}} {{non-standard_inline}}
+
Promise の rejection イベントを制御するためのイベントハンドラ。
+
{{domxref("WorkerGlobalScope.onunhandledrejection")}} {{non-standard_inline}}
+
制御されていない Promise の rejection イベントのためのイベントハンドラ。
+
+ +

メソッド

+ +

このインターフェースは、{{domxref("EventTarget")}} インターフェースから併称したメソッドと{{domxref("WindowTimers")}}、 {{domxref("WindowBase64")}}、 {{domxref("WindowEventHandlers")}}、 {{domxref("GlobalFetch")}} のメソッドを実装しています。

+ +

標準メソッド

+ +
+
{{domxref("WorkerGlobalScope.close()")}}
+
効果的に特定のスコープを閉じ、 WorkerGlobalScope のイベントループにキューされているタスクを破棄する。
+
{{domxref("WorkerGlobalScope.importScripts()")}}
+
worker のスコープに 1 つ以上のスクリプトをインポートする。カンマ区切りで任意の数を指定できる。例: importScripts('foo.js', 'bar.js');
+
+ +

非標準メソッド

+ +
+
{{domxref("WorkerGlobalScope.dump()")}} {{non-standard_inline}}
+
標準出力にメッセージを記述できる — たとえば、ターミナルに。これは Firefox の {{domxref("window.dump")}} と同様に worker のためのものである。
+
+ +

ほかで実装されているメソッド

+ +
+
{{domxref("WindowBase64.atob()")}}
+
base-64 エンコーディングを使用してエンコードされた文字データをデコードする。
+
{{domxref("WindowBase64.btoa()")}}
+
バイナリデータ文字列から base-64 エンコードされた ASCII 文字列を生成する。
+
{{domxref("WindowTimers.clearInterval()")}}
+
{{domxref("WindowTimers.setInterval()")}} を使用して設定された繰り返し処理をキャンセルする。
+
{{domxref("WindowTimers.clearTimeout()")}}
+
{{domxref("WindowTimers.setTimeout()")}} を使用して設定された繰り返し処理をキャンセルする。
+
{{domxref("ImageBitmapFactories.createImageBitmap()")}}
+
異なるさまざまな画像ソースを受け入れ、{{domxref("ImageBitmap")}} を解決する {{domxref("Promise")}} を返す。
+
{{domxref("GlobalFetch.fetch()")}}
+
リソースの取得プロセスを開始する。
+
{{domxref("WindowTimers.setInterval()")}}
+
X ミリ秒ごとの処理実行をスケジューリングする。
+
{{domxref("WindowTimers.setTimeout()")}}
+
遅延処理を設定する。
+
+ +

+ +

コード内で WorkerGlobalScope に直接アクセスすることはありません; しかし、{{domxref("DedicatedWorkerGlobalScope")}} や {{domxref("SharedWorkerGlobalScope")}} のような特定のグローバルスコープからプロパティやメソッドが継承されています。たとえば、worker にほかのスクリプトをインポートして、次の 2 行を使用して worker スコープの navigator オブジェクトのコンテンツを表示できます:

+ +
importScripts('foo.js');
+console.log(navigator);
+ +
+

ノート: worker スクリプトのグローバルスコープは、実行している worker グローバルスコープ({{domxref("DedicatedWorkerGlobalScope")}} やそのほか)と WorkerGlobalScope からメソッドやプロパティなどを継承している すべての worker グローバルスコープで有効であるため、上記のように親オブジェクトを指定しなくとも実行できます。

+
+ +

仕様

+ + + + + + + + + + + + + + + + + + + + + + + + +
仕様状態コメント
{{SpecName('HTML WHATWG', '#workerglobalscope', 'WorkerGlobalScope')}}{{Spec2('HTML WHATWG')}}{{SpecName("Web Workers")}} から変更なし。
{{SpecName('Service Workers')}}{{Spec2('Service Workers')}}caches を定義。
{{SpecName('Web Workers', '#workerglobalscope', 'WorkerGlobalScope')}}{{Spec2('Web Workers')}}初期定義。
+ +

ブラウザ実装状況

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
機能ChromeFirefox (Gecko)Internet ExplorerOperaSafari
基本サポート{{CompatChrome(4)}}{{CompatGeckoDesktop("1.9.1")}}1010.64
ononline, onoffline{{CompatVersionUnknown}}{{CompatGeckoDesktop("29")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
console {{Non-standard_inline}}{{CompatVersionUnknown}}{{CompatGeckoDesktop("29")}}[1]
+ {{CompatGeckoDesktop("30")}}
{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
performance{{CompatVersionUnknown}}{{CompatGeckoDesktop("34")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
caches{{CompatChrome(40)}}{{CompatUnknown}}{{CompatNo}}{{CompatUnknown}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
機能AndroidChrome for AndroidFirefox Mobile (Gecko)Firefox OS (Gecko)IE MobileOpera MobileSafari Mobile
基本サポート{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatGeckoMobile("1.9.1")}}1.0.11011.55.1
ononline, onoffline{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatGeckoMobile("29")}}[1]
+ {{CompatGeckoMobile("30")}}
1.4{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
console {{Non-standard_inline}}{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatGeckoMobile("29")}}1.4{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
performance{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatGeckoMobile("34")}}2.1{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
caches{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

[1] Gecko 29 ではこれを WorkerConsole として実装しています。バージョン 30 からは通常の Console を使用しています。

+ +

関連項目

+ + diff --git a/files/ja/web/api/workerglobalscope/languagechange_event/index.html b/files/ja/web/api/workerglobalscope/languagechange_event/index.html new file mode 100644 index 0000000000..0a04fac139 --- /dev/null +++ b/files/ja/web/api/workerglobalscope/languagechange_event/index.html @@ -0,0 +1,81 @@ +--- +title: 'WorkerGlobalScope: languagechange イベント' +slug: Web/API/WorkerGlobalScope/languagechange_event +tags: + - API + - Event + - Reference + - WorkerGlobalScope + - イベント +translation_of: Web/API/WorkerGlobalScope/languagechange_event +--- +
{{APIRef}}
+ +

languagechange イベントはグローバルスコープオブジェクトで、ユーザーの推奨言語が変更されたときに発生します。

+ + + + + + + + + + + + + + + + + + + + +
バブリングなし
キャンセル不可
インターフェイス{{domxref("Event")}}
イベントハンドラー{{domxref("WorkerGlobalScope/onlanguagechange", "onlanguagechange")}}
+ +

+ +

languagechange は {{domxref("EventTarget/addEventListener", "addEventListener")}} メソッドで使用することができます。

+ +
worker.addEventListener('languagechange', function() {
+  console.log('languagechange event detected!');
+});
+ +

または、 {{domxref("WorkerGlobalScope/onlanguagechange", "onlanguagechange")}} イベントハンドラープロパティを使用することもできます。

+ +
worker.onlanguagechange = function(event) {
+  console.log('languagechange event detected!');
+};
+ +

仕様書

+ + + + + + + + + + + + + + +
仕様書状態
{{ SpecName('HTML WHATWG', 'workers.html#the-workerglobalscope-common-interface:event-languagechange', 'languagechange') }}{{ Spec2('HTML WHATWG') }}
+ +

ブラウザーの互換性

+ + + +

{{Compat("api.WorkerGlobalScope.languagechange_event")}}

+ +

関連情報

+ + diff --git a/files/ja/web/api/workerglobalscope/self/index.html b/files/ja/web/api/workerglobalscope/self/index.html new file mode 100644 index 0000000000..5d951e1448 --- /dev/null +++ b/files/ja/web/api/workerglobalscope/self/index.html @@ -0,0 +1,141 @@ +--- +title: WorkerGlobalScope.self +slug: Web/API/WorkerGlobalScope/self +tags: + - API + - Property + - Reference + - Web Worker + - WorkerGlobalScope + - self +translation_of: Web/API/WorkerGlobalScope/self +--- +
{{APIRef("Web Workers API")}}
+ +

{{domxref("WorkerGlobalScope")}} インターフェースの self 読み取り専用プロパティは、WorkerGlobalScope 自体への参照を返します。ほとんどの場合、これは {{domxref("DedicatedWorkerGlobalScope")}} や {{domxref("SharedWorkerGlobalScope")}}、{{domxref("ServiceWorkerGlobalScope")}} などの特定のスコープです。

+ +

構文

+ +
var selfRef = self;
+ +

+ +

グローバルスコープオブジェクト (上に示したように、扱っている worker の種類によって異なる)。

+ +

+ +

以下を呼び出した場合、

+ +
console.log(self);
+ +

worker 内で、コンソールに書き込まれたワーカーオブジェクトと同じタイプのワーカーグローバルスコープが取得されます — ある時は次のようになります:

+ +
DedicatedWorkerGlobalScope {
+undefined: undefined, Infinity: Infinity, Math: MathConstructor, NaN: NaN, Intl: Object…}
+    Infinity: Infinity
+    Array: function Array() { [native code] }
+      arguments: null
+      caller: null
+      isArray: function isArray() { [native code] }
+      length: 1
+      name: "Array"
+      observe: function observe() { [native code] }
+      prototype: Array[0]
+      unobserve: function unobserve() { [native code] }
+      __proto__: function Empty() {}
+      <function scope>
+    ArrayBuffer: function ArrayBuffer() { [native code] }
+    Blob: function Blob() { [native code] }
+    Boolean: function Boolean() { [native code] }
+    DataView: function DataView() { [native code] }
+    Date: function Date() { [native code] }
+    DedicatedWorkerGlobalScope: function DedicatedWorkerGlobalScope() { [native code] }
+    Error: function Error() { [native code] }
+// etc. etc.
+
+ +

これは、そのワーカースコープで利用可能なオブジェクトの完全なリストを提供するため、ワーカーが何かを利用できるかを確認したい場合には、非常に便利なテストです。リストをWeb Workers が使用できる関数とクラスでもメンテナンスしています。

+ +
+

ノート: Firefox には console.log を shared/service worker 内で使用したときのバグがあり ({{Bug("1058644")}} を見てください)、おかしな結果を返します。これはすぐに修正されるはずです。

+
+ +

仕様

+ + + + + + + + + + + + + + + + + + + +
仕様ステータスコメント
{{SpecName('HTML WHATWG', '#dom-workerglobalscope-self', 'self')}}{{Spec2('HTML WHATWG')}}{{SpecName("Web Workers")}} から変更なし。
{{SpecName('Web Workers', '#dom-workerglobalscope-self', 'self')}}{{Spec2('Web Workers')}}初期定義。
+ +

ブラウザー実装状況

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + +
機能ChromeFirefox (Gecko)Internet ExplorerOperaSafari
基本サポート{{CompatChrome(4)}}{{CompatGeckoDesktop("1.9.1")}}{{CompatVersionUnknown}}11.54
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
機能AndroidChrome for AndroidFirefox Mobile (Gecko)Firefox OS (Gecko)IE MobileOpera MobileSafari Mobile
基本サポート{{CompatUnknown}}40{{CompatGeckoMobile("1.9.1")}}1.0.1{{CompatVersionUnknown}}{{CompatVersionUnknown}}5.1
+
+ +

関連項目

+ +

{{domxref("WorkerGlobalScope")}}

-- cgit v1.2.3-54-g00ecf