@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 +2 -2
- package/README.md +2 -1
- package/build/watchdog.js +2 -2
- package/package.json +8 -8
- package/src/contextwatchdog.js +65 -42
- package/src/editorwatchdog.js +0 -5
- package/src/utils/getsubnodes.js +4 -2
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
|
|
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
|
|
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
|
[](https://www.npmjs.com/package/@ckeditor/ckeditor5-watchdog)
|
|
5
5
|
[](https://coveralls.io/github/ckeditor/ckeditor5?branch=master)
|
|
6
|
-
[](https://travis-ci.com/ckeditor/ckeditor5)
|
|
6
|
+
[](https://app.travis-ci.com/github/ckeditor/ckeditor5)
|
|
7
|
+

|
|
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
|
|
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": "
|
|
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": "^
|
|
18
|
-
"@ckeditor/ckeditor5-dev-utils": "^
|
|
19
|
-
"@ckeditor/ckeditor5-editor-classic": "^
|
|
20
|
-
"@ckeditor/ckeditor5-paragraph": "^
|
|
21
|
-
"@ckeditor/ckeditor5-theme-lark": "^
|
|
22
|
-
"@ckeditor/ckeditor5-utils": "^
|
|
23
|
-
"ckeditor5": "^
|
|
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
|
},
|
package/src/contextwatchdog.js
CHANGED
|
@@ -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 {
|
|
82
|
+
* @type {ActionQueues}
|
|
81
83
|
*/
|
|
82
|
-
this.
|
|
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.
|
|
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.
|
|
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
|
|
240
|
-
|
|
241
|
-
|
|
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
|
-
|
|
245
|
-
|
|
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.
|
|
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
|
|
314
|
-
return
|
|
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.
|
|
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.
|
|
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
|
-
//
|
|
480
|
-
class
|
|
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
|
-
|
|
508
|
+
enqueue( queueId, action ) {
|
|
509
|
+
const isMainAction = queueId === mainQueueId;
|
|
502
510
|
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
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 =
|
|
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 {*}
|
|
543
|
+
// @param {*} elementOrArray The value to transform to an array.
|
|
521
544
|
// @returns {Array} An array created from data.
|
|
522
|
-
function toArray(
|
|
523
|
-
return Array.isArray(
|
|
545
|
+
function toArray( elementOrArray ) {
|
|
546
|
+
return Array.isArray( elementOrArray ) ? elementOrArray : [ elementOrArray ];
|
|
524
547
|
}
|
|
525
548
|
|
|
526
549
|
/**
|
package/src/editorwatchdog.js
CHANGED
|
@@ -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;
|
package/src/utils/getsubnodes.js
CHANGED
|
@@ -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 >
|
|
21
|
-
|
|
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;
|