@ckeditor/ckeditor5-watchdog 32.0.0 → 34.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE.md CHANGED
@@ -2,7 +2,7 @@ Software License Agreement
2
2
  ==========================
3
3
 
4
4
  **CKEditor 5 watchdog feature** – https://github.com/ckeditor/ckeditor5-watchdog <br>
5
- Copyright (c) 2003-2022, [CKSource](http://cksource.com) Holding sp. z o.o. All rights reserved.
5
+ Copyright (c) 2003-2022, [CKSource Holding sp. z o.o.](https://cksource.com) All rights reserved.
6
6
 
7
7
  Licensed under the terms of [GNU General Public License Version 2 or later](http://www.gnu.org/licenses/gpl.html).
8
8
 
@@ -18,4 +18,4 @@ The following libraries are included in CKEditor under the [MIT license](https:/
18
18
  Trademarks
19
19
  ----------
20
20
 
21
- **CKEditor** is a trademark of [CKSource](http://cksource.com) Holding sp. z o.o. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.
21
+ **CKEditor** is a trademark of [CKSource Holding sp. z o.o.](https://cksource.com) All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.
package/README.md CHANGED
@@ -3,7 +3,8 @@ CKEditor 5 watchdog feature
3
3
 
4
4
  [![npm version](https://badge.fury.io/js/%40ckeditor%2Fckeditor5-watchdog.svg)](https://www.npmjs.com/package/@ckeditor/ckeditor5-watchdog)
5
5
  [![Coverage Status](https://coveralls.io/repos/github/ckeditor/ckeditor5/badge.svg?branch=master)](https://coveralls.io/github/ckeditor/ckeditor5?branch=master)
6
- [![Build Status](https://travis-ci.com/ckeditor/ckeditor5.svg?branch=master)](https://travis-ci.com/ckeditor/ckeditor5)
6
+ [![Build Status](https://travis-ci.com/ckeditor/ckeditor5.svg?branch=master)](https://app.travis-ci.com/github/ckeditor/ckeditor5)
7
+ ![Dependency Status](https://img.shields.io/librariesio/release/npm/@ckeditor/ckeditor5-watchdog)
7
8
 
8
9
  This package implements the watchdog feature for CKEditor 5. It keeps a CKEditor 5 rich-text editor instance running.
9
10
 
package/build/watchdog.js CHANGED
@@ -1,4 +1,4 @@
1
1
  /*!
2
- * @license Copyright (c) 2003-2022, CKSource - Frederico Knabben. All rights reserved.
2
+ * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
- */(()=>{"use strict";var t={d:(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{ContextWatchdog:()=>Hr,EditorWatchdog:()=>kr,Watchdog:()=>r});class r{constructor(t){if(this.crashes=[],this.state="initializing",this._crashNumberLimit="number"==typeof t.crashNumberLimit?t.crashNumberLimit:3,this._now=Date.now,this._minimumNonErrorTimePeriod="number"==typeof t.minimumNonErrorTimePeriod?t.minimumNonErrorTimePeriod:5e3,this._boundErrorHandler=t=>{const e=t.error||t.reason;e instanceof Error&&this._handleError(e,t)},this._listeners={},!this._restart)throw new Error("The Watchdog class was split into the abstract `Watchdog` class and the `EditorWatchdog` class. Please, use `EditorWatchdog` if you have used the `Watchdog` class previously.")}setCreator(t){this._creator=t}setDestructor(t){this._destructor=t}destroy(){this._stopErrorHandling(),this._listeners={}}on(t,e){this._listeners[t]||(this._listeners[t]=[]),this._listeners[t].push(e)}off(t,e){this._listeners[t]=this._listeners[t].filter((t=>t!==e))}_fire(t,...e){const r=this._listeners[t]||[];for(const t of r)t.apply(this,[null,...e])}_startErrorHandling(){window.addEventListener("error",this._boundErrorHandler),window.addEventListener("unhandledrejection",this._boundErrorHandler)}_stopErrorHandling(){window.removeEventListener("error",this._boundErrorHandler),window.removeEventListener("unhandledrejection",this._boundErrorHandler)}_handleError(t,e){if(this._shouldReactToError(t)){this.crashes.push({message:t.message,stack:t.stack,filename:e.filename,lineno:e.lineno,colno:e.colno,date:this._now()});const r=this._shouldRestart();this.state="crashed",this._fire("stateChange"),this._fire("error",{error:t,causesRestart:r}),r?this._restart():(this.state="crashedPermanently",this._fire("stateChange"))}}_shouldReactToError(t){return t.is&&t.is("CKEditorError")&&void 0!==t.context&&null!==t.context&&"ready"===this.state&&this._isErrorComingFromThisItem(t)}_shouldRestart(){if(this.crashes.length<=this._crashNumberLimit)return!0;return(this.crashes[this.crashes.length-1].date-this.crashes[this.crashes.length-1-this._crashNumberLimit].date)/this._crashNumberLimit>this._minimumNonErrorTimePeriod}}const n=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)};const o="object"==typeof global&&global&&global.Object===Object&&global;var s="object"==typeof self&&self&&self.Object===Object&&self;const i=o||s||Function("return this")();const c=function(){return i.Date.now()};var a=/\s/;const u=function(t){for(var e=t.length;e--&&a.test(t.charAt(e)););return e};var h=/^\s+/;const l=function(t){return t?t.slice(0,u(t)+1).replace(h,""):t};const f=i.Symbol;var d=Object.prototype,_=d.hasOwnProperty,p=d.toString,y=f?f.toStringTag:void 0;const b=function(t){var e=_.call(t,y),r=t[y];try{t[y]=void 0;var n=!0}catch(t){}var o=p.call(t);return n&&(e?t[y]=r:delete t[y]),o};var v=Object.prototype.toString;const g=function(t){return v.call(t)};var m=f?f.toStringTag:void 0;const j=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":m&&m in Object(t)?b(t):g(t)};const w=function(t){return null!=t&&"object"==typeof t};const E=function(t){return"symbol"==typeof t||w(t)&&"[object Symbol]"==j(t)};var O=/^[-+]0x[0-9a-f]+$/i,x=/^0b[01]+$/i,A=/^0o[0-7]+$/i,P=parseInt;const S=function(t){if("number"==typeof t)return t;if(E(t))return NaN;if(n(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=n(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=l(t);var r=x.test(t);return r||A.test(t)?P(t.slice(2),r?2:8):O.test(t)?NaN:+t};var C=Math.max,T=Math.min;const I=function(t,e,r){var o,s,i,a,u,h,l=0,f=!1,d=!1,_=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function p(e){var r=o,n=s;return o=s=void 0,l=e,a=t.apply(n,r)}function y(t){return l=t,u=setTimeout(v,e),f?p(t):a}function b(t){var r=t-h;return void 0===h||r>=e||r<0||d&&t-l>=i}function v(){var t=c();if(b(t))return g(t);u=setTimeout(v,function(t){var r=e-(t-h);return d?T(r,i-(t-l)):r}(t))}function g(t){return u=void 0,_&&o?p(t):(o=s=void 0,a)}function m(){var t=c(),r=b(t);if(o=arguments,s=this,h=t,r){if(void 0===u)return y(h);if(d)return clearTimeout(u),u=setTimeout(v,e),p(h)}return void 0===u&&(u=setTimeout(v,e)),a}return e=S(e)||0,n(r)&&(f=!!r.leading,i=(d="maxWait"in r)?C(S(r.maxWait)||0,e):i,_="trailing"in r?!!r.trailing:_),m.cancel=function(){void 0!==u&&clearTimeout(u),l=0,o=h=s=u=void 0},m.flush=function(){return void 0===u?a:g(c())},m};const D=function(t,e,r){var o=!0,s=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return n(r)&&(o="leading"in r?!!r.leading:o,s="trailing"in r?!!r.trailing:s),I(t,e,{leading:o,maxWait:e,trailing:s})};const z=function(){this.__data__=[],this.size=0};const N=function(t,e){return t===e||t!=t&&e!=e};const F=function(t,e){for(var r=t.length;r--;)if(N(t[r][0],e))return r;return-1};var W=Array.prototype.splice;const M=function(t){var e=this.__data__,r=F(e,t);return!(r<0)&&(r==e.length-1?e.pop():W.call(e,r,1),--this.size,!0)};const U=function(t){var e=this.__data__,r=F(e,t);return r<0?void 0:e[r][1]};const R=function(t){return F(this.__data__,t)>-1};const $=function(t,e){var r=this.__data__,n=F(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};function L(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}L.prototype.clear=z,L.prototype.delete=M,L.prototype.get=U,L.prototype.has=R,L.prototype.set=$;const k=L;const H=function(){this.__data__=new k,this.size=0};const Q=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r};const B=function(t){return this.__data__.get(t)};const q=function(t){return this.__data__.has(t)};const V=function(t){if(!n(t))return!1;var e=j(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e};const K=i["__core-js_shared__"];var G,Y=(G=/[^.]+$/.exec(K&&K.keys&&K.keys.IE_PROTO||""))?"Symbol(src)_1."+G:"";const J=function(t){return!!Y&&Y in t};var X=Function.prototype.toString;const Z=function(t){if(null!=t){try{return X.call(t)}catch(t){}try{return t+""}catch(t){}}return""};var tt=/^\[object .+?Constructor\]$/,et=Function.prototype,rt=Object.prototype,nt=et.toString,ot=rt.hasOwnProperty,st=RegExp("^"+nt.call(ot).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const it=function(t){return!(!n(t)||J(t))&&(V(t)?st:tt).test(Z(t))};const ct=function(t,e){return null==t?void 0:t[e]};const at=function(t,e){var r=ct(t,e);return it(r)?r:void 0};const ut=at(i,"Map");const ht=at(Object,"create");const lt=function(){this.__data__=ht?ht(null):{},this.size=0};const ft=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e};var dt=Object.prototype.hasOwnProperty;const _t=function(t){var e=this.__data__;if(ht){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return dt.call(e,t)?e[t]:void 0};var pt=Object.prototype.hasOwnProperty;const yt=function(t){var e=this.__data__;return ht?void 0!==e[t]:pt.call(e,t)};const bt=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=ht&&void 0===e?"__lodash_hash_undefined__":e,this};function vt(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}vt.prototype.clear=lt,vt.prototype.delete=ft,vt.prototype.get=_t,vt.prototype.has=yt,vt.prototype.set=bt;const gt=vt;const mt=function(){this.size=0,this.__data__={hash:new gt,map:new(ut||k),string:new gt}};const jt=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t};const wt=function(t,e){var r=t.__data__;return jt(e)?r["string"==typeof e?"string":"hash"]:r.map};const Et=function(t){var e=wt(this,t).delete(t);return this.size-=e?1:0,e};const Ot=function(t){return wt(this,t).get(t)};const xt=function(t){return wt(this,t).has(t)};const At=function(t,e){var r=wt(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this};function Pt(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}Pt.prototype.clear=mt,Pt.prototype.delete=Et,Pt.prototype.get=Ot,Pt.prototype.has=xt,Pt.prototype.set=At;const St=Pt;const Ct=function(t,e){var r=this.__data__;if(r instanceof k){var n=r.__data__;if(!ut||n.length<199)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new St(n)}return r.set(t,e),this.size=r.size,this};function Tt(t){var e=this.__data__=new k(t);this.size=e.size}Tt.prototype.clear=H,Tt.prototype.delete=Q,Tt.prototype.get=B,Tt.prototype.has=q,Tt.prototype.set=Ct;const It=Tt;const Dt=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&!1!==e(t[r],r,t););return t};const zt=function(){try{var t=at(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();const Nt=function(t,e,r){"__proto__"==e&&zt?zt(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r};var Ft=Object.prototype.hasOwnProperty;const Wt=function(t,e,r){var n=t[e];Ft.call(t,e)&&N(n,r)&&(void 0!==r||e in t)||Nt(t,e,r)};const Mt=function(t,e,r,n){var o=!r;r||(r={});for(var s=-1,i=e.length;++s<i;){var c=e[s],a=n?n(r[c],t[c],c,r,t):void 0;void 0===a&&(a=t[c]),o?Nt(r,c,a):Wt(r,c,a)}return r};const Ut=function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n};const Rt=function(t){return w(t)&&"[object Arguments]"==j(t)};var $t=Object.prototype,Lt=$t.hasOwnProperty,kt=$t.propertyIsEnumerable;const Ht=Rt(function(){return arguments}())?Rt:function(t){return w(t)&&Lt.call(t,"callee")&&!kt.call(t,"callee")};const Qt=Array.isArray;const Bt=function(){return!1};var qt="object"==typeof exports&&exports&&!exports.nodeType&&exports,Vt=qt&&"object"==typeof module&&module&&!module.nodeType&&module,Kt=Vt&&Vt.exports===qt?i.Buffer:void 0;const Gt=(Kt?Kt.isBuffer:void 0)||Bt;var Yt=/^(?:0|[1-9]\d*)$/;const Jt=function(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&Yt.test(t))&&t>-1&&t%1==0&&t<e};const Xt=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991};var Zt={};Zt["[object Float32Array]"]=Zt["[object Float64Array]"]=Zt["[object Int8Array]"]=Zt["[object Int16Array]"]=Zt["[object Int32Array]"]=Zt["[object Uint8Array]"]=Zt["[object Uint8ClampedArray]"]=Zt["[object Uint16Array]"]=Zt["[object Uint32Array]"]=!0,Zt["[object Arguments]"]=Zt["[object Array]"]=Zt["[object ArrayBuffer]"]=Zt["[object Boolean]"]=Zt["[object DataView]"]=Zt["[object Date]"]=Zt["[object Error]"]=Zt["[object Function]"]=Zt["[object Map]"]=Zt["[object Number]"]=Zt["[object Object]"]=Zt["[object RegExp]"]=Zt["[object Set]"]=Zt["[object String]"]=Zt["[object WeakMap]"]=!1;const te=function(t){return w(t)&&Xt(t.length)&&!!Zt[j(t)]};const ee=function(t){return function(e){return t(e)}};var re="object"==typeof exports&&exports&&!exports.nodeType&&exports,ne=re&&"object"==typeof module&&module&&!module.nodeType&&module,oe=ne&&ne.exports===re&&o.process;const se=function(){try{var t=ne&&ne.require&&ne.require("util").types;return t||oe&&oe.binding&&oe.binding("util")}catch(t){}}();var ie=se&&se.isTypedArray;const ce=ie?ee(ie):te;var ae=Object.prototype.hasOwnProperty;const ue=function(t,e){var r=Qt(t),n=!r&&Ht(t),o=!r&&!n&&Gt(t),s=!r&&!n&&!o&&ce(t),i=r||n||o||s,c=i?Ut(t.length,String):[],a=c.length;for(var u in t)!e&&!ae.call(t,u)||i&&("length"==u||o&&("offset"==u||"parent"==u)||s&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||Jt(u,a))||c.push(u);return c};var he=Object.prototype;const le=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||he)};const fe=function(t,e){return function(r){return t(e(r))}};const de=fe(Object.keys,Object);var _e=Object.prototype.hasOwnProperty;const pe=function(t){if(!le(t))return de(t);var e=[];for(var r in Object(t))_e.call(t,r)&&"constructor"!=r&&e.push(r);return e};const ye=function(t){return null!=t&&Xt(t.length)&&!V(t)};const be=function(t){return ye(t)?ue(t):pe(t)};const ve=function(t,e){return t&&Mt(e,be(e),t)};const ge=function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e};var me=Object.prototype.hasOwnProperty;const je=function(t){if(!n(t))return ge(t);var e=le(t),r=[];for(var o in t)("constructor"!=o||!e&&me.call(t,o))&&r.push(o);return r};const we=function(t){return ye(t)?ue(t,!0):je(t)};const Ee=function(t,e){return t&&Mt(e,we(e),t)};var Oe="object"==typeof exports&&exports&&!exports.nodeType&&exports,xe=Oe&&"object"==typeof module&&module&&!module.nodeType&&module,Ae=xe&&xe.exports===Oe?i.Buffer:void 0,Pe=Ae?Ae.allocUnsafe:void 0;const Se=function(t,e){if(e)return t.slice();var r=t.length,n=Pe?Pe(r):new t.constructor(r);return t.copy(n),n};const Ce=function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e};const Te=function(t,e){for(var r=-1,n=null==t?0:t.length,o=0,s=[];++r<n;){var i=t[r];e(i,r,t)&&(s[o++]=i)}return s};const Ie=function(){return[]};var De=Object.prototype.propertyIsEnumerable,ze=Object.getOwnPropertySymbols;const Ne=ze?function(t){return null==t?[]:(t=Object(t),Te(ze(t),(function(e){return De.call(t,e)})))}:Ie;const Fe=function(t,e){return Mt(t,Ne(t),e)};const We=function(t,e){for(var r=-1,n=e.length,o=t.length;++r<n;)t[o+r]=e[r];return t};const Me=fe(Object.getPrototypeOf,Object);const Ue=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)We(e,Ne(t)),t=Me(t);return e}:Ie;const Re=function(t,e){return Mt(t,Ue(t),e)};const $e=function(t,e,r){var n=e(t);return Qt(t)?n:We(n,r(t))};const Le=function(t){return $e(t,be,Ne)};const ke=function(t){return $e(t,we,Ue)};const He=at(i,"DataView");const Qe=at(i,"Promise");const Be=at(i,"Set");const qe=at(i,"WeakMap");var Ve="[object Map]",Ke="[object Promise]",Ge="[object Set]",Ye="[object WeakMap]",Je="[object DataView]",Xe=Z(He),Ze=Z(ut),tr=Z(Qe),er=Z(Be),rr=Z(qe),nr=j;(He&&nr(new He(new ArrayBuffer(1)))!=Je||ut&&nr(new ut)!=Ve||Qe&&nr(Qe.resolve())!=Ke||Be&&nr(new Be)!=Ge||qe&&nr(new qe)!=Ye)&&(nr=function(t){var e=j(t),r="[object Object]"==e?t.constructor:void 0,n=r?Z(r):"";if(n)switch(n){case Xe:return Je;case Ze:return Ve;case tr:return Ke;case er:return Ge;case rr:return Ye}return e});const or=nr;var sr=Object.prototype.hasOwnProperty;const ir=function(t){var e=t.length,r=new t.constructor(e);return e&&"string"==typeof t[0]&&sr.call(t,"index")&&(r.index=t.index,r.input=t.input),r};const cr=i.Uint8Array;const ar=function(t){var e=new t.constructor(t.byteLength);return new cr(e).set(new cr(t)),e};const ur=function(t,e){var r=e?ar(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)};var hr=/\w*$/;const lr=function(t){var e=new t.constructor(t.source,hr.exec(t));return e.lastIndex=t.lastIndex,e};var fr=f?f.prototype:void 0,dr=fr?fr.valueOf:void 0;const _r=function(t){return dr?Object(dr.call(t)):{}};const pr=function(t,e){var r=e?ar(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)};const yr=function(t,e,r){var n=t.constructor;switch(e){case"[object ArrayBuffer]":return ar(t);case"[object Boolean]":case"[object Date]":return new n(+t);case"[object DataView]":return ur(t,r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return pr(t,r);case"[object Map]":case"[object Set]":return new n;case"[object Number]":case"[object String]":return new n(t);case"[object RegExp]":return lr(t);case"[object Symbol]":return _r(t)}};var br=Object.create;const vr=function(){function t(){}return function(e){if(!n(e))return{};if(br)return br(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();const gr=function(t){return"function"!=typeof t.constructor||le(t)?{}:vr(Me(t))};const mr=function(t){return w(t)&&"[object Map]"==or(t)};var jr=se&&se.isMap;const wr=jr?ee(jr):mr;const Er=function(t){return w(t)&&"[object Set]"==or(t)};var Or=se&&se.isSet;const xr=Or?ee(Or):Er;var Ar="[object Arguments]",Pr="[object Function]",Sr="[object Object]",Cr={};Cr[Ar]=Cr["[object Array]"]=Cr["[object ArrayBuffer]"]=Cr["[object DataView]"]=Cr["[object Boolean]"]=Cr["[object Date]"]=Cr["[object Float32Array]"]=Cr["[object Float64Array]"]=Cr["[object Int8Array]"]=Cr["[object Int16Array]"]=Cr["[object Int32Array]"]=Cr["[object Map]"]=Cr["[object Number]"]=Cr["[object Object]"]=Cr["[object RegExp]"]=Cr["[object Set]"]=Cr["[object String]"]=Cr["[object Symbol]"]=Cr["[object Uint8Array]"]=Cr["[object Uint8ClampedArray]"]=Cr["[object Uint16Array]"]=Cr["[object Uint32Array]"]=!0,Cr["[object Error]"]=Cr[Pr]=Cr["[object WeakMap]"]=!1;const Tr=function t(e,r,o,s,i,c){var a,u=1&r,h=2&r,l=4&r;if(o&&(a=i?o(e,s,i,c):o(e)),void 0!==a)return a;if(!n(e))return e;var f=Qt(e);if(f){if(a=ir(e),!u)return Ce(e,a)}else{var d=or(e),_=d==Pr||"[object GeneratorFunction]"==d;if(Gt(e))return Se(e,u);if(d==Sr||d==Ar||_&&!i){if(a=h||_?{}:gr(e),!u)return h?Re(e,Ee(a,e)):Fe(e,ve(a,e))}else{if(!Cr[d])return i?e:{};a=yr(e,d,u)}}c||(c=new It);var p=c.get(e);if(p)return p;c.set(e,a),xr(e)?e.forEach((function(n){a.add(t(n,r,o,n,e,c))})):wr(e)&&e.forEach((function(n,s){a.set(s,t(n,r,o,s,e,c))}));var y=f?void 0:(l?h?ke:Le:h?we:be)(e);return Dt(y||e,(function(n,s){y&&(n=e[s=n]),Wt(a,s,t(n,r,o,s,e,c))})),a};const Ir=function(t,e){return Tr(t,5,e="function"==typeof e?e:void 0)};var Dr=Function.prototype,zr=Object.prototype,Nr=Dr.toString,Fr=zr.hasOwnProperty,Wr=Nr.call(Object);const Mr=function(t){if(!w(t)||"[object Object]"!=j(t))return!1;var e=Me(t);if(null===e)return!0;var r=Fr.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&Nr.call(r)==Wr};const Ur=function(t){return w(t)&&1===t.nodeType&&!Mr(t)};function Rr(t,e=new Set){const r=[t],n=new Set;for(;r.length>0;){const t=r.shift();if(!(n.has(t)||$r(t)||e.has(t)))if(n.add(t),t[Symbol.iterator])try{for(const e of t)r.push(e)}catch(t){}else for(const e in t)"defaultValue"!==e&&r.push(t[e])}return n}function $r(t){const e=Object.prototype.toString.call(t),r=typeof t;return"number"===r||"boolean"===r||"string"===r||"symbol"===r||"function"===r||"[object Date]"===e||"[object RegExp]"===e||"[object Module]"===e||null==t||t instanceof EventTarget||t instanceof Event}function Lr(t,e,r=new Set){if(t===e&&("object"==typeof(n=t)&&null!==n))return!0;var n;const o=Rr(t,r),s=Rr(e,r);for(const t of o)if(s.has(t))return!0;return!1}class kr extends r{constructor(t,e={}){super(e),this._editor=null,this._throttledSave=D(this._save.bind(this),"number"==typeof e.saveInterval?e.saveInterval:5e3),this._creator=(e,r)=>t.create(e,r),this._destructor=t=>t.destroy()}get editor(){return this._editor}get _item(){return this._editor}_restart(){return Promise.resolve().then((()=>(this.state="initializing",this._fire("stateChange"),this._destroy()))).catch((t=>{console.error("An error happened during the editor destroying.",t)})).then((()=>{if("string"==typeof this._elementOrData)return this.create(this._data,this._config,this._config.context);{const t=Object.assign({},this._config,{initialData:this._data});return this.create(this._elementOrData,t,t.context)}})).then((()=>{this._fire("restart")}))}create(t=this._elementOrData,e=this._config,r){return Promise.resolve().then((()=>(super._startErrorHandling(),this._elementOrData=t,this._config=this._cloneEditorConfiguration(e)||{},this._config.context=r,this._creator(t,this._config)))).then((t=>{this._editor=t,t.model.document.on("change:data",this._throttledSave),this._lastDocumentVersion=t.model.document.version,this._data=this._getData(),this.state="ready",this._fire("stateChange")}))}destroy(){return Promise.resolve().then((()=>(this.state="destroyed",this._fire("stateChange"),super.destroy(),this._destroy())))}_destroy(){return Promise.resolve().then((()=>{this._stopErrorHandling(),this._throttledSave.flush();const t=this._editor;return this._editor=null,t.model.document.off("change:data",this._throttledSave),this._destructor(t)}))}_save(){const t=this._editor.model.document.version;if(t!==this._lastDocumentVersion)try{this._data=this._getData(),this._lastDocumentVersion=t}catch(t){console.error(t,"An error happened during restoring editor data. Editor will be restored from the previously saved data.")}}_setExcludedProperties(t){this._excludedProps=t}_getData(){const t={};for(const e of this._editor.model.document.getRootNames())t[e]=this._editor.data.get({rootName:e});return t}_isErrorComingFromThisItem(t){return Lr(this._editor,t.context,this._excludedProps)}_cloneEditorConfiguration(t){return Ir(t,((t,e)=>Ur(t)||"context"===e?t:void 0))}}class Hr extends r{constructor(t,e={}){super(e),this._watchdogs=new Map,this._watchdogConfig=e,this._context=null,this._contextProps=new Set,this._actionQueue=new Qr,this._creator=e=>t.create(e),this._destructor=t=>t.destroy(),this._actionQueue.onEmpty((()=>{"initializing"===this.state&&(this.state="ready",this._fire("stateChange"))}))}get context(){return this._context}create(t={}){return this._actionQueue.enqueue((()=>(this._contextConfig=t,this._create())))}getItem(t){return this._getWatchdog(t)._item}getItemState(t){return this._getWatchdog(t).state}add(t){const e=Br(t);return this._actionQueue.enqueue((()=>{if("destroyed"===this.state)throw new Error("Cannot add items to destroyed watchdog.");if(!this._context)throw new Error("Context was not created yet. You should call the `ContextWatchdog#create()` method first.");return Promise.all(e.map((t=>{let e;if(this._watchdogs.has(t.id))throw new Error(`Item with the given id is already added: '${t.id}'.`);if("editor"===t.type)return e=new kr(this._watchdogConfig),e.setCreator(t.creator),e._setExcludedProperties(this._contextProps),t.destructor&&e.setDestructor(t.destructor),this._watchdogs.set(t.id,e),e.on("error",((r,{error:n,causesRestart:o})=>{this._fire("itemError",{itemId:t.id,error:n}),o&&this._actionQueue.enqueue((()=>new Promise((r=>{e.on("restart",function n(){e.off("restart",n),this._fire("itemRestart",{itemId:t.id}),r()}.bind(this))}))))})),e.create(t.sourceElementOrData,t.config,this._context);throw new Error(`Not supported item type: '${t.type}'.`)})))}))}remove(t){const e=Br(t);return this._actionQueue.enqueue((()=>Promise.all(e.map((t=>{const e=this._getWatchdog(t);return this._watchdogs.delete(t),e.destroy()})))))}destroy(){return this._actionQueue.enqueue((()=>(this.state="destroyed",this._fire("stateChange"),super.destroy(),this._destroy())))}_restart(){return this._actionQueue.enqueue((()=>(this.state="initializing",this._fire("stateChange"),this._destroy().catch((t=>{console.error("An error happened during destroying the context or items.",t)})).then((()=>this._create())).then((()=>this._fire("restart"))))))}_create(){return Promise.resolve().then((()=>(this._startErrorHandling(),this._creator(this._contextConfig)))).then((t=>(this._context=t,this._contextProps=Rr(this._context),Promise.all(Array.from(this._watchdogs.values()).map((t=>(t._setExcludedProperties(this._contextProps),t.create(void 0,void 0,this._context))))))))}_destroy(){return Promise.resolve().then((()=>{this._stopErrorHandling();const t=this._context;return this._context=null,this._contextProps=new Set,Promise.all(Array.from(this._watchdogs.values()).map((t=>t.destroy()))).then((()=>this._destructor(t)))}))}_getWatchdog(t){const e=this._watchdogs.get(t);if(!e)throw new Error(`Item with the given id was not registered: ${t}.`);return e}_isErrorComingFromThisItem(t){for(const e of this._watchdogs.values())if(e._isErrorComingFromThisItem(t))return!1;return Lr(this._context,t.context)}}class Qr{constructor(){this._promiseQueue=Promise.resolve(),this._onEmptyCallbacks=[]}onEmpty(t){this._onEmptyCallbacks.push(t)}enqueue(t){let e;const r=this._promiseQueue.then(t).then((()=>{this._promiseQueue===e&&this._onEmptyCallbacks.forEach((t=>t()))}));return e=this._promiseQueue=r.catch((()=>{})),r}}function Br(t){return Array.isArray(t)?t:[t]}(window.CKEditor5=window.CKEditor5||{}).watchdog=e})();
4
+ */(()=>{"use strict";var t={d:(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{ContextWatchdog:()=>Hr,EditorWatchdog:()=>kr,Watchdog:()=>r});class r{constructor(t){if(this.crashes=[],this.state="initializing",this._crashNumberLimit="number"==typeof t.crashNumberLimit?t.crashNumberLimit:3,this._now=Date.now,this._minimumNonErrorTimePeriod="number"==typeof t.minimumNonErrorTimePeriod?t.minimumNonErrorTimePeriod:5e3,this._boundErrorHandler=t=>{const e=t.error||t.reason;e instanceof Error&&this._handleError(e,t)},this._listeners={},!this._restart)throw new Error("The Watchdog class was split into the abstract `Watchdog` class and the `EditorWatchdog` class. Please, use `EditorWatchdog` if you have used the `Watchdog` class previously.")}setCreator(t){this._creator=t}setDestructor(t){this._destructor=t}destroy(){this._stopErrorHandling(),this._listeners={}}on(t,e){this._listeners[t]||(this._listeners[t]=[]),this._listeners[t].push(e)}off(t,e){this._listeners[t]=this._listeners[t].filter((t=>t!==e))}_fire(t,...e){const r=this._listeners[t]||[];for(const t of r)t.apply(this,[null,...e])}_startErrorHandling(){window.addEventListener("error",this._boundErrorHandler),window.addEventListener("unhandledrejection",this._boundErrorHandler)}_stopErrorHandling(){window.removeEventListener("error",this._boundErrorHandler),window.removeEventListener("unhandledrejection",this._boundErrorHandler)}_handleError(t,e){if(this._shouldReactToError(t)){this.crashes.push({message:t.message,stack:t.stack,filename:e.filename,lineno:e.lineno,colno:e.colno,date:this._now()});const r=this._shouldRestart();this.state="crashed",this._fire("stateChange"),this._fire("error",{error:t,causesRestart:r}),r?this._restart():(this.state="crashedPermanently",this._fire("stateChange"))}}_shouldReactToError(t){return t.is&&t.is("CKEditorError")&&void 0!==t.context&&null!==t.context&&"ready"===this.state&&this._isErrorComingFromThisItem(t)}_shouldRestart(){if(this.crashes.length<=this._crashNumberLimit)return!0;return(this.crashes[this.crashes.length-1].date-this.crashes[this.crashes.length-1-this._crashNumberLimit].date)/this._crashNumberLimit>this._minimumNonErrorTimePeriod}}const n=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)};const o="object"==typeof global&&global&&global.Object===Object&&global;var s="object"==typeof self&&self&&self.Object===Object&&self;const i=o||s||Function("return this")();const c=function(){return i.Date.now()};var a=/\s/;const u=function(t){for(var e=t.length;e--&&a.test(t.charAt(e)););return e};var h=/^\s+/;const l=function(t){return t?t.slice(0,u(t)+1).replace(h,""):t};const f=i.Symbol;var d=Object.prototype,_=d.hasOwnProperty,p=d.toString,y=f?f.toStringTag:void 0;const b=function(t){var e=_.call(t,y),r=t[y];try{t[y]=void 0;var n=!0}catch(t){}var o=p.call(t);return n&&(e?t[y]=r:delete t[y]),o};var v=Object.prototype.toString;const g=function(t){return v.call(t)};var m=f?f.toStringTag:void 0;const j=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":m&&m in Object(t)?b(t):g(t)};const w=function(t){return null!=t&&"object"==typeof t};const E=function(t){return"symbol"==typeof t||w(t)&&"[object Symbol]"==j(t)};var O=/^[-+]0x[0-9a-f]+$/i,x=/^0b[01]+$/i,A=/^0o[0-7]+$/i,P=parseInt;const S=function(t){if("number"==typeof t)return t;if(E(t))return NaN;if(n(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=n(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=l(t);var r=x.test(t);return r||A.test(t)?P(t.slice(2),r?2:8):O.test(t)?NaN:+t};var C=Math.max,T=Math.min;const I=function(t,e,r){var o,s,i,a,u,h,l=0,f=!1,d=!1,_=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function p(e){var r=o,n=s;return o=s=void 0,l=e,a=t.apply(n,r)}function y(t){return l=t,u=setTimeout(v,e),f?p(t):a}function b(t){var r=t-h;return void 0===h||r>=e||r<0||d&&t-l>=i}function v(){var t=c();if(b(t))return g(t);u=setTimeout(v,function(t){var r=e-(t-h);return d?T(r,i-(t-l)):r}(t))}function g(t){return u=void 0,_&&o?p(t):(o=s=void 0,a)}function m(){var t=c(),r=b(t);if(o=arguments,s=this,h=t,r){if(void 0===u)return y(h);if(d)return clearTimeout(u),u=setTimeout(v,e),p(h)}return void 0===u&&(u=setTimeout(v,e)),a}return e=S(e)||0,n(r)&&(f=!!r.leading,i=(d="maxWait"in r)?C(S(r.maxWait)||0,e):i,_="trailing"in r?!!r.trailing:_),m.cancel=function(){void 0!==u&&clearTimeout(u),l=0,o=h=s=u=void 0},m.flush=function(){return void 0===u?a:g(c())},m};const z=function(t,e,r){var o=!0,s=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return n(r)&&(o="leading"in r?!!r.leading:o,s="trailing"in r?!!r.trailing:s),I(t,e,{leading:o,maxWait:e,trailing:s})};const D=function(){this.__data__=[],this.size=0};const N=function(t,e){return t===e||t!=t&&e!=e};const W=function(t,e){for(var r=t.length;r--;)if(N(t[r][0],e))return r;return-1};var F=Array.prototype.splice;const M=function(t){var e=this.__data__,r=W(e,t);return!(r<0)&&(r==e.length-1?e.pop():F.call(e,r,1),--this.size,!0)};const q=function(t){var e=this.__data__,r=W(e,t);return r<0?void 0:e[r][1]};const U=function(t){return W(this.__data__,t)>-1};const R=function(t,e){var r=this.__data__,n=W(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};function $(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}$.prototype.clear=D,$.prototype.delete=M,$.prototype.get=q,$.prototype.has=U,$.prototype.set=R;const k=$;const L=function(){this.__data__=new k,this.size=0};const H=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r};const B=function(t){return this.__data__.get(t)};const Q=function(t){return this.__data__.has(t)};const V=function(t){if(!n(t))return!1;var e=j(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e};const K=i["__core-js_shared__"];var G,Y=(G=/[^.]+$/.exec(K&&K.keys&&K.keys.IE_PROTO||""))?"Symbol(src)_1."+G:"";const J=function(t){return!!Y&&Y in t};var X=Function.prototype.toString;const Z=function(t){if(null!=t){try{return X.call(t)}catch(t){}try{return t+""}catch(t){}}return""};var tt=/^\[object .+?Constructor\]$/,et=Function.prototype,rt=Object.prototype,nt=et.toString,ot=rt.hasOwnProperty,st=RegExp("^"+nt.call(ot).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const it=function(t){return!(!n(t)||J(t))&&(V(t)?st:tt).test(Z(t))};const ct=function(t,e){return null==t?void 0:t[e]};const at=function(t,e){var r=ct(t,e);return it(r)?r:void 0};const ut=at(i,"Map");const ht=at(Object,"create");const lt=function(){this.__data__=ht?ht(null):{},this.size=0};const ft=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e};var dt=Object.prototype.hasOwnProperty;const _t=function(t){var e=this.__data__;if(ht){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return dt.call(e,t)?e[t]:void 0};var pt=Object.prototype.hasOwnProperty;const yt=function(t){var e=this.__data__;return ht?void 0!==e[t]:pt.call(e,t)};const bt=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=ht&&void 0===e?"__lodash_hash_undefined__":e,this};function vt(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}vt.prototype.clear=lt,vt.prototype.delete=ft,vt.prototype.get=_t,vt.prototype.has=yt,vt.prototype.set=bt;const gt=vt;const mt=function(){this.size=0,this.__data__={hash:new gt,map:new(ut||k),string:new gt}};const jt=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t};const wt=function(t,e){var r=t.__data__;return jt(e)?r["string"==typeof e?"string":"hash"]:r.map};const Et=function(t){var e=wt(this,t).delete(t);return this.size-=e?1:0,e};const Ot=function(t){return wt(this,t).get(t)};const xt=function(t){return wt(this,t).has(t)};const At=function(t,e){var r=wt(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this};function Pt(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}Pt.prototype.clear=mt,Pt.prototype.delete=Et,Pt.prototype.get=Ot,Pt.prototype.has=xt,Pt.prototype.set=At;const St=Pt;const Ct=function(t,e){var r=this.__data__;if(r instanceof k){var n=r.__data__;if(!ut||n.length<199)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new St(n)}return r.set(t,e),this.size=r.size,this};function Tt(t){var e=this.__data__=new k(t);this.size=e.size}Tt.prototype.clear=L,Tt.prototype.delete=H,Tt.prototype.get=B,Tt.prototype.has=Q,Tt.prototype.set=Ct;const It=Tt;const zt=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&!1!==e(t[r],r,t););return t};const Dt=function(){try{var t=at(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();const Nt=function(t,e,r){"__proto__"==e&&Dt?Dt(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r};var Wt=Object.prototype.hasOwnProperty;const Ft=function(t,e,r){var n=t[e];Wt.call(t,e)&&N(n,r)&&(void 0!==r||e in t)||Nt(t,e,r)};const Mt=function(t,e,r,n){var o=!r;r||(r={});for(var s=-1,i=e.length;++s<i;){var c=e[s],a=n?n(r[c],t[c],c,r,t):void 0;void 0===a&&(a=t[c]),o?Nt(r,c,a):Ft(r,c,a)}return r};const qt=function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n};const Ut=function(t){return w(t)&&"[object Arguments]"==j(t)};var Rt=Object.prototype,$t=Rt.hasOwnProperty,kt=Rt.propertyIsEnumerable;const Lt=Ut(function(){return arguments}())?Ut:function(t){return w(t)&&$t.call(t,"callee")&&!kt.call(t,"callee")};const Ht=Array.isArray;const Bt=function(){return!1};var Qt="object"==typeof exports&&exports&&!exports.nodeType&&exports,Vt=Qt&&"object"==typeof module&&module&&!module.nodeType&&module,Kt=Vt&&Vt.exports===Qt?i.Buffer:void 0;const Gt=(Kt?Kt.isBuffer:void 0)||Bt;var Yt=/^(?:0|[1-9]\d*)$/;const Jt=function(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&Yt.test(t))&&t>-1&&t%1==0&&t<e};const Xt=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991};var Zt={};Zt["[object Float32Array]"]=Zt["[object Float64Array]"]=Zt["[object Int8Array]"]=Zt["[object Int16Array]"]=Zt["[object Int32Array]"]=Zt["[object Uint8Array]"]=Zt["[object Uint8ClampedArray]"]=Zt["[object Uint16Array]"]=Zt["[object Uint32Array]"]=!0,Zt["[object Arguments]"]=Zt["[object Array]"]=Zt["[object ArrayBuffer]"]=Zt["[object Boolean]"]=Zt["[object DataView]"]=Zt["[object Date]"]=Zt["[object Error]"]=Zt["[object Function]"]=Zt["[object Map]"]=Zt["[object Number]"]=Zt["[object Object]"]=Zt["[object RegExp]"]=Zt["[object Set]"]=Zt["[object String]"]=Zt["[object WeakMap]"]=!1;const te=function(t){return w(t)&&Xt(t.length)&&!!Zt[j(t)]};const ee=function(t){return function(e){return t(e)}};var re="object"==typeof exports&&exports&&!exports.nodeType&&exports,ne=re&&"object"==typeof module&&module&&!module.nodeType&&module,oe=ne&&ne.exports===re&&o.process;const se=function(){try{var t=ne&&ne.require&&ne.require("util").types;return t||oe&&oe.binding&&oe.binding("util")}catch(t){}}();var ie=se&&se.isTypedArray;const ce=ie?ee(ie):te;var ae=Object.prototype.hasOwnProperty;const ue=function(t,e){var r=Ht(t),n=!r&&Lt(t),o=!r&&!n&&Gt(t),s=!r&&!n&&!o&&ce(t),i=r||n||o||s,c=i?qt(t.length,String):[],a=c.length;for(var u in t)!e&&!ae.call(t,u)||i&&("length"==u||o&&("offset"==u||"parent"==u)||s&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||Jt(u,a))||c.push(u);return c};var he=Object.prototype;const le=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||he)};const fe=function(t,e){return function(r){return t(e(r))}};const de=fe(Object.keys,Object);var _e=Object.prototype.hasOwnProperty;const pe=function(t){if(!le(t))return de(t);var e=[];for(var r in Object(t))_e.call(t,r)&&"constructor"!=r&&e.push(r);return e};const ye=function(t){return null!=t&&Xt(t.length)&&!V(t)};const be=function(t){return ye(t)?ue(t):pe(t)};const ve=function(t,e){return t&&Mt(e,be(e),t)};const ge=function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e};var me=Object.prototype.hasOwnProperty;const je=function(t){if(!n(t))return ge(t);var e=le(t),r=[];for(var o in t)("constructor"!=o||!e&&me.call(t,o))&&r.push(o);return r};const we=function(t){return ye(t)?ue(t,!0):je(t)};const Ee=function(t,e){return t&&Mt(e,we(e),t)};var Oe="object"==typeof exports&&exports&&!exports.nodeType&&exports,xe=Oe&&"object"==typeof module&&module&&!module.nodeType&&module,Ae=xe&&xe.exports===Oe?i.Buffer:void 0,Pe=Ae?Ae.allocUnsafe:void 0;const Se=function(t,e){if(e)return t.slice();var r=t.length,n=Pe?Pe(r):new t.constructor(r);return t.copy(n),n};const Ce=function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e};const Te=function(t,e){for(var r=-1,n=null==t?0:t.length,o=0,s=[];++r<n;){var i=t[r];e(i,r,t)&&(s[o++]=i)}return s};const Ie=function(){return[]};var ze=Object.prototype.propertyIsEnumerable,De=Object.getOwnPropertySymbols;const Ne=De?function(t){return null==t?[]:(t=Object(t),Te(De(t),(function(e){return ze.call(t,e)})))}:Ie;const We=function(t,e){return Mt(t,Ne(t),e)};const Fe=function(t,e){for(var r=-1,n=e.length,o=t.length;++r<n;)t[o+r]=e[r];return t};const Me=fe(Object.getPrototypeOf,Object);const qe=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)Fe(e,Ne(t)),t=Me(t);return e}:Ie;const Ue=function(t,e){return Mt(t,qe(t),e)};const Re=function(t,e,r){var n=e(t);return Ht(t)?n:Fe(n,r(t))};const $e=function(t){return Re(t,be,Ne)};const ke=function(t){return Re(t,we,qe)};const Le=at(i,"DataView");const He=at(i,"Promise");const Be=at(i,"Set");const Qe=at(i,"WeakMap");var Ve="[object Map]",Ke="[object Promise]",Ge="[object Set]",Ye="[object WeakMap]",Je="[object DataView]",Xe=Z(Le),Ze=Z(ut),tr=Z(He),er=Z(Be),rr=Z(Qe),nr=j;(Le&&nr(new Le(new ArrayBuffer(1)))!=Je||ut&&nr(new ut)!=Ve||He&&nr(He.resolve())!=Ke||Be&&nr(new Be)!=Ge||Qe&&nr(new Qe)!=Ye)&&(nr=function(t){var e=j(t),r="[object Object]"==e?t.constructor:void 0,n=r?Z(r):"";if(n)switch(n){case Xe:return Je;case Ze:return Ve;case tr:return Ke;case er:return Ge;case rr:return Ye}return e});const or=nr;var sr=Object.prototype.hasOwnProperty;const ir=function(t){var e=t.length,r=new t.constructor(e);return e&&"string"==typeof t[0]&&sr.call(t,"index")&&(r.index=t.index,r.input=t.input),r};const cr=i.Uint8Array;const ar=function(t){var e=new t.constructor(t.byteLength);return new cr(e).set(new cr(t)),e};const ur=function(t,e){var r=e?ar(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)};var hr=/\w*$/;const lr=function(t){var e=new t.constructor(t.source,hr.exec(t));return e.lastIndex=t.lastIndex,e};var fr=f?f.prototype:void 0,dr=fr?fr.valueOf:void 0;const _r=function(t){return dr?Object(dr.call(t)):{}};const pr=function(t,e){var r=e?ar(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)};const yr=function(t,e,r){var n=t.constructor;switch(e){case"[object ArrayBuffer]":return ar(t);case"[object Boolean]":case"[object Date]":return new n(+t);case"[object DataView]":return ur(t,r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return pr(t,r);case"[object Map]":case"[object Set]":return new n;case"[object Number]":case"[object String]":return new n(t);case"[object RegExp]":return lr(t);case"[object Symbol]":return _r(t)}};var br=Object.create;const vr=function(){function t(){}return function(e){if(!n(e))return{};if(br)return br(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();const gr=function(t){return"function"!=typeof t.constructor||le(t)?{}:vr(Me(t))};const mr=function(t){return w(t)&&"[object Map]"==or(t)};var jr=se&&se.isMap;const wr=jr?ee(jr):mr;const Er=function(t){return w(t)&&"[object Set]"==or(t)};var Or=se&&se.isSet;const xr=Or?ee(Or):Er;var Ar="[object Arguments]",Pr="[object Function]",Sr="[object Object]",Cr={};Cr[Ar]=Cr["[object Array]"]=Cr["[object ArrayBuffer]"]=Cr["[object DataView]"]=Cr["[object Boolean]"]=Cr["[object Date]"]=Cr["[object Float32Array]"]=Cr["[object Float64Array]"]=Cr["[object Int8Array]"]=Cr["[object Int16Array]"]=Cr["[object Int32Array]"]=Cr["[object Map]"]=Cr["[object Number]"]=Cr["[object Object]"]=Cr["[object RegExp]"]=Cr["[object Set]"]=Cr["[object String]"]=Cr["[object Symbol]"]=Cr["[object Uint8Array]"]=Cr["[object Uint8ClampedArray]"]=Cr["[object Uint16Array]"]=Cr["[object Uint32Array]"]=!0,Cr["[object Error]"]=Cr[Pr]=Cr["[object WeakMap]"]=!1;const Tr=function t(e,r,o,s,i,c){var a,u=1&r,h=2&r,l=4&r;if(o&&(a=i?o(e,s,i,c):o(e)),void 0!==a)return a;if(!n(e))return e;var f=Ht(e);if(f){if(a=ir(e),!u)return Ce(e,a)}else{var d=or(e),_=d==Pr||"[object GeneratorFunction]"==d;if(Gt(e))return Se(e,u);if(d==Sr||d==Ar||_&&!i){if(a=h||_?{}:gr(e),!u)return h?Ue(e,Ee(a,e)):We(e,ve(a,e))}else{if(!Cr[d])return i?e:{};a=yr(e,d,u)}}c||(c=new It);var p=c.get(e);if(p)return p;c.set(e,a),xr(e)?e.forEach((function(n){a.add(t(n,r,o,n,e,c))})):wr(e)&&e.forEach((function(n,s){a.set(s,t(n,r,o,s,e,c))}));var y=f?void 0:(l?h?ke:$e:h?we:be)(e);return zt(y||e,(function(n,s){y&&(n=e[s=n]),Ft(a,s,t(n,r,o,s,e,c))})),a};const Ir=function(t,e){return Tr(t,5,e="function"==typeof e?e:void 0)};var zr=Function.prototype,Dr=Object.prototype,Nr=zr.toString,Wr=Dr.hasOwnProperty,Fr=Nr.call(Object);const Mr=function(t){if(!w(t)||"[object Object]"!=j(t))return!1;var e=Me(t);if(null===e)return!0;var r=Wr.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&Nr.call(r)==Fr};const qr=function(t){return w(t)&&1===t.nodeType&&!Mr(t)};function Ur(t,e=new Set){const r=[t],n=new Set;let o=0;for(;r.length>o;){const t=r[o++];if(!(n.has(t)||Rr(t)||e.has(t)))if(n.add(t),t[Symbol.iterator])try{for(const e of t)r.push(e)}catch(t){}else for(const e in t)"defaultValue"!==e&&r.push(t[e])}return n}function Rr(t){const e=Object.prototype.toString.call(t),r=typeof t;return"number"===r||"boolean"===r||"string"===r||"symbol"===r||"function"===r||"[object Date]"===e||"[object RegExp]"===e||"[object Module]"===e||null==t||t instanceof EventTarget||t instanceof Event}function $r(t,e,r=new Set){if(t===e&&("object"==typeof(n=t)&&null!==n))return!0;var n;const o=Ur(t,r),s=Ur(e,r);for(const t of o)if(s.has(t))return!0;return!1}class kr extends r{constructor(t,e={}){super(e),this._editor=null,this._throttledSave=z(this._save.bind(this),"number"==typeof e.saveInterval?e.saveInterval:5e3),this._creator=(e,r)=>t.create(e,r),this._destructor=t=>t.destroy()}get editor(){return this._editor}get _item(){return this._editor}_restart(){return Promise.resolve().then((()=>(this.state="initializing",this._fire("stateChange"),this._destroy()))).catch((t=>{console.error("An error happened during the editor destroying.",t)})).then((()=>{if("string"==typeof this._elementOrData)return this.create(this._data,this._config,this._config.context);{const t=Object.assign({},this._config,{initialData:this._data});return this.create(this._elementOrData,t,t.context)}})).then((()=>{this._fire("restart")}))}create(t=this._elementOrData,e=this._config,r){return Promise.resolve().then((()=>(super._startErrorHandling(),this._elementOrData=t,this._config=this._cloneEditorConfiguration(e)||{},this._config.context=r,this._creator(t,this._config)))).then((t=>{this._editor=t,t.model.document.on("change:data",this._throttledSave),this._lastDocumentVersion=t.model.document.version,this._data=this._getData(),this.state="ready",this._fire("stateChange")}))}destroy(){return Promise.resolve().then((()=>(this.state="destroyed",this._fire("stateChange"),super.destroy(),this._destroy())))}_destroy(){return Promise.resolve().then((()=>{this._stopErrorHandling(),this._throttledSave.flush();const t=this._editor;return this._editor=null,t.model.document.off("change:data",this._throttledSave),this._destructor(t)}))}_save(){const t=this._editor.model.document.version;try{this._data=this._getData(),this._lastDocumentVersion=t}catch(t){console.error(t,"An error happened during restoring editor data. Editor will be restored from the previously saved data.")}}_setExcludedProperties(t){this._excludedProps=t}_getData(){const t={};for(const e of this._editor.model.document.getRootNames())t[e]=this._editor.data.get({rootName:e});return t}_isErrorComingFromThisItem(t){return $r(this._editor,t.context,this._excludedProps)}_cloneEditorConfiguration(t){return Ir(t,((t,e)=>qr(t)||"context"===e?t:void 0))}}const Lr=Symbol("MainQueueId");class Hr extends r{constructor(t,e={}){super(e),this._watchdogs=new Map,this._watchdogConfig=e,this._context=null,this._contextProps=new Set,this._actionQueues=new Br,this._creator=e=>t.create(e),this._destructor=t=>t.destroy(),this._actionQueues.onEmpty((()=>{"initializing"===this.state&&(this.state="ready",this._fire("stateChange"))}))}get context(){return this._context}create(t={}){return this._actionQueues.enqueue(Lr,(()=>(this._contextConfig=t,this._create())))}getItem(t){return this._getWatchdog(t)._item}getItemState(t){return this._getWatchdog(t).state}add(t){const e=Qr(t);return Promise.all(e.map((t=>this._actionQueues.enqueue(t.id,(()=>{if("destroyed"===this.state)throw new Error("Cannot add items to destroyed watchdog.");if(!this._context)throw new Error("Context was not created yet. You should call the `ContextWatchdog#create()` method first.");let e;if(this._watchdogs.has(t.id))throw new Error(`Item with the given id is already added: '${t.id}'.`);if("editor"===t.type)return e=new kr(this._watchdogConfig),e.setCreator(t.creator),e._setExcludedProperties(this._contextProps),t.destructor&&e.setDestructor(t.destructor),this._watchdogs.set(t.id,e),e.on("error",((r,{error:n,causesRestart:o})=>{this._fire("itemError",{itemId:t.id,error:n}),o&&this._actionQueues.enqueue(t.id,(()=>new Promise((r=>{e.on("restart",function n(){e.off("restart",n),this._fire("itemRestart",{itemId:t.id}),r()}.bind(this))}))))})),e.create(t.sourceElementOrData,t.config,this._context);throw new Error(`Not supported item type: '${t.type}'.`)})))))}remove(t){const e=Qr(t);return Promise.all(e.map((t=>this._actionQueues.enqueue(t,(()=>{const e=this._getWatchdog(t);return this._watchdogs.delete(t),e.destroy()})))))}destroy(){return this._actionQueues.enqueue(Lr,(()=>(this.state="destroyed",this._fire("stateChange"),super.destroy(),this._destroy())))}_restart(){return this._actionQueues.enqueue(Lr,(()=>(this.state="initializing",this._fire("stateChange"),this._destroy().catch((t=>{console.error("An error happened during destroying the context or items.",t)})).then((()=>this._create())).then((()=>this._fire("restart"))))))}_create(){return Promise.resolve().then((()=>(this._startErrorHandling(),this._creator(this._contextConfig)))).then((t=>(this._context=t,this._contextProps=Ur(this._context),Promise.all(Array.from(this._watchdogs.values()).map((t=>(t._setExcludedProperties(this._contextProps),t.create(void 0,void 0,this._context))))))))}_destroy(){return Promise.resolve().then((()=>{this._stopErrorHandling();const t=this._context;return this._context=null,this._contextProps=new Set,Promise.all(Array.from(this._watchdogs.values()).map((t=>t.destroy()))).then((()=>this._destructor(t)))}))}_getWatchdog(t){const e=this._watchdogs.get(t);if(!e)throw new Error(`Item with the given id was not registered: ${t}.`);return e}_isErrorComingFromThisItem(t){for(const e of this._watchdogs.values())if(e._isErrorComingFromThisItem(t))return!1;return $r(this._context,t.context)}}class Br{constructor(){this._onEmptyCallbacks=[],this._queues=new Map,this._actions=new WeakMap,this._lastActionId=0,this._activeActions=0}onEmpty(t){this._onEmptyCallbacks.push(t)}enqueue(t,e){const r=t===Lr;this._activeActions++,this._queues.get(t)||this._queues.set(t,Promise.resolve());const n=(r?Promise.all(this._queues.values()):Promise.all([this._queues.get(Lr),this._queues.get(t)])).then(e),o=n.catch((()=>{}));return this._queues.set(t,o),n.finally((()=>{this._activeActions--,this._queues.get(t)===o&&0===this._activeActions&&this._onEmptyCallbacks.forEach((t=>t()))}))}}function Qr(t){return Array.isArray(t)?t:[t]}(window.CKEditor5=window.CKEditor5||{}).watchdog=e})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ckeditor/ckeditor5-watchdog",
3
- "version": "32.0.0",
3
+ "version": "34.1.0",
4
4
  "description": "A watchdog feature for CKEditor 5 editors. It keeps a CKEditor 5 editor instance running.",
5
5
  "keywords": [
6
6
  "ckeditor",
@@ -14,13 +14,13 @@
14
14
  "lodash-es": "^4.17.15"
15
15
  },
16
16
  "devDependencies": {
17
- "@ckeditor/ckeditor5-core": "^32.0.0",
18
- "@ckeditor/ckeditor5-dev-utils": "^27.1.0",
19
- "@ckeditor/ckeditor5-editor-classic": "^32.0.0",
20
- "@ckeditor/ckeditor5-paragraph": "^32.0.0",
21
- "@ckeditor/ckeditor5-theme-lark": "^32.0.0",
22
- "@ckeditor/ckeditor5-utils": "^32.0.0",
23
- "ckeditor5": "^32.0.0",
17
+ "@ckeditor/ckeditor5-core": "^34.1.0",
18
+ "@ckeditor/ckeditor5-dev-utils": "^30.0.0",
19
+ "@ckeditor/ckeditor5-editor-classic": "^34.1.0",
20
+ "@ckeditor/ckeditor5-paragraph": "^34.1.0",
21
+ "@ckeditor/ckeditor5-theme-lark": "^34.1.0",
22
+ "@ckeditor/ckeditor5-utils": "^34.1.0",
23
+ "ckeditor5": "^34.1.0",
24
24
  "webpack": "^5.58.1",
25
25
  "webpack-cli": "^4.9.0"
26
26
  },
@@ -14,6 +14,8 @@ import EditorWatchdog from './editorwatchdog';
14
14
  import areConnectedThroughProperties from './utils/areconnectedthroughproperties';
15
15
  import getSubNodes from './utils/getsubnodes';
16
16
 
17
+ const mainQueueId = Symbol( 'MainQueueId' );
18
+
17
19
  /**
18
20
  * A watchdog for the {@link module:core/context~Context} class.
19
21
  *
@@ -77,9 +79,9 @@ export default class ContextWatchdog extends Watchdog {
77
79
  * An action queue, which is used to handle async functions queuing.
78
80
  *
79
81
  * @private
80
- * @type {ActionQueue}
82
+ * @type {ActionQueues}
81
83
  */
82
- this._actionQueue = new ActionQueue();
84
+ this._actionQueues = new ActionQueues();
83
85
 
84
86
  /**
85
87
  * The configuration for the {@link module:core/context~Context}.
@@ -99,7 +101,7 @@ export default class ContextWatchdog extends Watchdog {
99
101
  this._creator = contextConfig => Context.create( contextConfig );
100
102
  this._destructor = context => context.destroy();
101
103
 
102
- this._actionQueue.onEmpty( () => {
104
+ this._actionQueues.onEmpty( () => {
103
105
  if ( this.state === 'initializing' ) {
104
106
  this.state = 'ready';
105
107
  this._fire( 'stateChange' );
@@ -158,7 +160,7 @@ export default class ContextWatchdog extends Watchdog {
158
160
  * @returns {Promise}
159
161
  */
160
162
  create( contextConfig = {} ) {
161
- return this._actionQueue.enqueue( () => {
163
+ return this._actionQueues.enqueue( mainQueueId, () => {
162
164
  this._contextConfig = contextConfig;
163
165
 
164
166
  return this._create();
@@ -236,17 +238,16 @@ export default class ContextWatchdog extends Watchdog {
236
238
  add( itemConfigurationOrItemConfigurations ) {
237
239
  const itemConfigurations = toArray( itemConfigurationOrItemConfigurations );
238
240
 
239
- return this._actionQueue.enqueue( () => {
240
- if ( this.state === 'destroyed' ) {
241
- throw new Error( 'Cannot add items to destroyed watchdog.' );
242
- }
241
+ return Promise.all( itemConfigurations.map( item => {
242
+ return this._actionQueues.enqueue( item.id, () => {
243
+ if ( this.state === 'destroyed' ) {
244
+ throw new Error( 'Cannot add items to destroyed watchdog.' );
245
+ }
243
246
 
244
- if ( !this._context ) {
245
- throw new Error( 'Context was not created yet. You should call the `ContextWatchdog#create()` method first.' );
246
- }
247
+ if ( !this._context ) {
248
+ throw new Error( 'Context was not created yet. You should call the `ContextWatchdog#create()` method first.' );
249
+ }
247
250
 
248
- // Create new watchdogs.
249
- return Promise.all( itemConfigurations.map( item => {
250
251
  let watchdog;
251
252
 
252
253
  if ( this._watchdogs.has( item.id ) ) {
@@ -274,7 +275,7 @@ export default class ContextWatchdog extends Watchdog {
274
275
  return;
275
276
  }
276
277
 
277
- this._actionQueue.enqueue( () => new Promise( res => {
278
+ this._actionQueues.enqueue( item.id, () => new Promise( res => {
278
279
  watchdog.on( 'restart', rethrowRestartEventOnce.bind( this ) );
279
280
 
280
281
  function rethrowRestartEventOnce() {
@@ -291,8 +292,8 @@ export default class ContextWatchdog extends Watchdog {
291
292
  } else {
292
293
  throw new Error( `Not supported item type: '${ item.type }'.` );
293
294
  }
294
- } ) );
295
- } );
295
+ } );
296
+ } ) );
296
297
  }
297
298
 
298
299
  /**
@@ -310,15 +311,15 @@ export default class ContextWatchdog extends Watchdog {
310
311
  remove( itemIdOrItemIds ) {
311
312
  const itemIds = toArray( itemIdOrItemIds );
312
313
 
313
- return this._actionQueue.enqueue( () => {
314
- return Promise.all( itemIds.map( itemId => {
314
+ return Promise.all( itemIds.map( itemId => {
315
+ return this._actionQueues.enqueue( itemId, () => {
315
316
  const watchdog = this._getWatchdog( itemId );
316
317
 
317
318
  this._watchdogs.delete( itemId );
318
319
 
319
320
  return watchdog.destroy();
320
- } ) );
321
- } );
321
+ } );
322
+ } ) );
322
323
  }
323
324
 
324
325
  /**
@@ -330,7 +331,7 @@ export default class ContextWatchdog extends Watchdog {
330
331
  * @returns {Promise}
331
332
  */
332
333
  destroy() {
333
- return this._actionQueue.enqueue( () => {
334
+ return this._actionQueues.enqueue( mainQueueId, () => {
334
335
  this.state = 'destroyed';
335
336
  this._fire( 'stateChange' );
336
337
 
@@ -347,7 +348,7 @@ export default class ContextWatchdog extends Watchdog {
347
348
  * @returns {Promise}
348
349
  */
349
350
  _restart() {
350
- return this._actionQueue.enqueue( () => {
351
+ return this._actionQueues.enqueue( mainQueueId, () => {
351
352
  this.state = 'initializing';
352
353
  this._fire( 'stateChange' );
353
354
 
@@ -476,14 +477,20 @@ export default class ContextWatchdog extends Watchdog {
476
477
  */
477
478
  }
478
479
 
479
- // An action queue that allows queuing async functions.
480
- class ActionQueue {
480
+ // Manager of action queues that allows queuing async functions.
481
+ class ActionQueues {
481
482
  constructor() {
482
- // @type {Promise}
483
- this._promiseQueue = Promise.resolve();
484
-
485
483
  // @type {Array.<Function>}
486
484
  this._onEmptyCallbacks = [];
485
+
486
+ // @type {Map.<Promise>}
487
+ this._queues = new Map();
488
+
489
+ this._actions = new WeakMap();
490
+
491
+ this._lastActionId = 0;
492
+
493
+ this._activeActions = 0;
487
494
  }
488
495
 
489
496
  // Used to register callbacks that will be run when the queue becomes empty.
@@ -493,34 +500,50 @@ class ActionQueue {
493
500
  this._onEmptyCallbacks.push( onEmptyCallback );
494
501
  }
495
502
 
496
- // It adds asynchronous actions (functions) to the queue and runs them one by one.
503
+ // It adds asynchronous actions (functions) to the proper queue and runs them one by one.
497
504
  //
505
+ // @param {Symbol|String|Number} queueId The action queue ID.
498
506
  // @param {Function} action A function that should be enqueued.
499
507
  // @returns {Promise}
500
- enqueue( action ) {
501
- let nonErrorQueue;
508
+ enqueue( queueId, action ) {
509
+ const isMainAction = queueId === mainQueueId;
502
510
 
503
- const queueWithAction = this._promiseQueue
504
- .then( action )
505
- .then( () => {
506
- if ( this._promiseQueue === nonErrorQueue ) {
507
- this._onEmptyCallbacks.forEach( cb => cb() );
508
- }
509
- } );
511
+ this._activeActions++;
512
+
513
+ if ( !this._queues.get( queueId ) ) {
514
+ this._queues.set( queueId, Promise.resolve() );
515
+ }
516
+
517
+ // List all sources of actions that the current action needs to await for.
518
+ // For the main action wait for all other actions.
519
+ // For the item action wait only for the item queue and the main queue.
520
+ const awaitedActions = isMainAction ?
521
+ Promise.all( this._queues.values() ) :
522
+ Promise.all( [ this._queues.get( mainQueueId ), this._queues.get( queueId ) ] );
523
+
524
+ const queueWithAction = awaitedActions.then( action );
510
525
 
511
526
  // Catch all errors in the main queue to stack promises even if an error occurred in the past.
512
- nonErrorQueue = this._promiseQueue = queueWithAction.catch( () => { } );
527
+ const nonErrorQueue = queueWithAction.catch( () => {} );
528
+
529
+ this._queues.set( queueId, nonErrorQueue );
513
530
 
514
- return queueWithAction;
531
+ return queueWithAction.finally( () => {
532
+ this._activeActions--;
533
+
534
+ if ( this._queues.get( queueId ) === nonErrorQueue && this._activeActions === 0 ) {
535
+ this._onEmptyCallbacks.forEach( cb => cb() );
536
+ }
537
+ } );
515
538
  }
516
539
  }
517
540
 
518
541
  // Transforms any value to an array. If the provided value is already an array, it is returned unchanged.
519
542
  //
520
- // @param {*} data The value to transform to an array.
543
+ // @param {*} elementOrArray The value to transform to an array.
521
544
  // @returns {Array} An array created from data.
522
- function toArray( data ) {
523
- return Array.isArray( data ) ? data : [ data ];
545
+ function toArray( elementOrArray ) {
546
+ return Array.isArray( elementOrArray ) ? elementOrArray : [ elementOrArray ];
524
547
  }
525
548
 
526
549
  /**
@@ -253,11 +253,6 @@ export default class EditorWatchdog extends Watchdog {
253
253
  _save() {
254
254
  const version = this._editor.model.document.version;
255
255
 
256
- // Operation may not result in a model change, so the document's version can be the same.
257
- if ( version === this._lastDocumentVersion ) {
258
- return;
259
- }
260
-
261
256
  try {
262
257
  this._data = this._getData();
263
258
  this._lastDocumentVersion = version;
@@ -16,9 +16,11 @@ export default function getSubNodes( head, excludedProperties = new Set() ) {
16
16
 
17
17
  // Nodes are stored to prevent infinite looping.
18
18
  const subNodes = new Set();
19
+ let nodeIndex = 0;
19
20
 
20
- while ( nodes.length > 0 ) {
21
- const node = nodes.shift();
21
+ while ( nodes.length > nodeIndex ) {
22
+ // Incrementing the iterator is much faster than changing size of the array with Array.prototype.shift().
23
+ const node = nodes[ nodeIndex++ ];
22
24
 
23
25
  if ( subNodes.has( node ) || shouldNodeBeSkipped( node ) || excludedProperties.has( node ) ) {
24
26
  continue;