@ckeditor/ckeditor5-utils 40.0.0 → 40.2.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.
Files changed (135) hide show
  1. package/CHANGELOG.md +26 -26
  2. package/LICENSE.md +3 -3
  3. package/package.json +1 -1
  4. package/src/abortabledebounce.d.ts +17 -0
  5. package/src/abortabledebounce.js +22 -0
  6. package/src/areconnectedthroughproperties.d.ts +11 -11
  7. package/src/areconnectedthroughproperties.js +73 -73
  8. package/src/ckeditorerror.d.ts +123 -123
  9. package/src/ckeditorerror.js +176 -176
  10. package/src/collection.d.ts +433 -427
  11. package/src/collection.js +583 -575
  12. package/src/comparearrays.d.ts +30 -30
  13. package/src/comparearrays.js +47 -47
  14. package/src/config.d.ts +163 -163
  15. package/src/config.js +163 -162
  16. package/src/count.d.ts +18 -18
  17. package/src/count.js +24 -24
  18. package/src/delay.d.ts +19 -19
  19. package/src/delay.js +26 -26
  20. package/src/diff.d.ts +31 -31
  21. package/src/diff.js +115 -115
  22. package/src/difftochanges.d.ts +59 -59
  23. package/src/difftochanges.js +79 -79
  24. package/src/dom/createelement.d.ts +57 -57
  25. package/src/dom/createelement.js +40 -40
  26. package/src/dom/emittermixin.d.ts +142 -142
  27. package/src/dom/emittermixin.js +239 -239
  28. package/src/dom/findclosestscrollableancestor.d.ts +11 -11
  29. package/src/dom/findclosestscrollableancestor.js +31 -31
  30. package/src/dom/getancestors.d.ts +17 -17
  31. package/src/dom/getancestors.js +27 -27
  32. package/src/dom/getborderwidths.d.ts +24 -24
  33. package/src/dom/getborderwidths.js +24 -24
  34. package/src/dom/getcommonancestor.d.ts +12 -12
  35. package/src/dom/getcommonancestor.js +25 -25
  36. package/src/dom/getdatafromelement.d.ts +14 -14
  37. package/src/dom/getdatafromelement.js +20 -20
  38. package/src/dom/getpositionedancestor.d.ts +10 -10
  39. package/src/dom/getpositionedancestor.js +22 -22
  40. package/src/dom/global.d.ts +32 -32
  41. package/src/dom/global.js +35 -35
  42. package/src/dom/indexof.d.ts +14 -14
  43. package/src/dom/indexof.js +21 -21
  44. package/src/dom/insertat.d.ts +15 -15
  45. package/src/dom/insertat.js +17 -17
  46. package/src/dom/iscomment.d.ts +11 -11
  47. package/src/dom/iscomment.js +14 -14
  48. package/src/dom/isnode.d.ts +11 -11
  49. package/src/dom/isnode.js +21 -21
  50. package/src/dom/isrange.d.ts +11 -11
  51. package/src/dom/isrange.js +13 -13
  52. package/src/dom/istext.d.ts +11 -11
  53. package/src/dom/istext.js +13 -13
  54. package/src/dom/isvalidattributename.d.ts +10 -10
  55. package/src/dom/isvalidattributename.js +22 -22
  56. package/src/dom/isvisible.d.ts +18 -18
  57. package/src/dom/isvisible.js +20 -20
  58. package/src/dom/iswindow.d.ts +11 -11
  59. package/src/dom/iswindow.js +22 -22
  60. package/src/dom/position.d.ts +211 -211
  61. package/src/dom/position.js +313 -313
  62. package/src/dom/rect.d.ts +195 -195
  63. package/src/dom/rect.js +474 -474
  64. package/src/dom/remove.d.ts +13 -13
  65. package/src/dom/remove.js +18 -18
  66. package/src/dom/resizeobserver.d.ts +74 -74
  67. package/src/dom/resizeobserver.js +126 -126
  68. package/src/dom/scroll.d.ts +73 -73
  69. package/src/dom/scroll.js +383 -383
  70. package/src/dom/setdatainelement.d.ts +14 -14
  71. package/src/dom/setdatainelement.js +20 -20
  72. package/src/dom/tounit.d.ts +22 -22
  73. package/src/dom/tounit.js +16 -16
  74. package/src/elementreplacer.d.ts +31 -31
  75. package/src/elementreplacer.js +43 -43
  76. package/src/emittermixin.d.ts +312 -312
  77. package/src/emittermixin.js +453 -453
  78. package/src/env.d.ts +117 -117
  79. package/src/env.js +122 -122
  80. package/src/eventinfo.d.ts +58 -58
  81. package/src/eventinfo.js +26 -26
  82. package/src/fastdiff.d.ts +112 -112
  83. package/src/fastdiff.js +248 -248
  84. package/src/first.d.ts +11 -11
  85. package/src/first.js +17 -17
  86. package/src/focustracker.d.ts +75 -75
  87. package/src/focustracker.js +95 -95
  88. package/src/index.d.ts +64 -61
  89. package/src/index.js +63 -60
  90. package/src/inserttopriorityarray.d.ts +30 -30
  91. package/src/inserttopriorityarray.js +21 -21
  92. package/src/isiterable.d.ts +14 -14
  93. package/src/isiterable.js +16 -16
  94. package/src/keyboard.d.ts +126 -126
  95. package/src/keyboard.js +221 -221
  96. package/src/keystrokehandler.d.ts +87 -87
  97. package/src/keystrokehandler.js +122 -122
  98. package/src/language.d.ts +17 -17
  99. package/src/language.js +19 -19
  100. package/src/locale.d.ts +120 -120
  101. package/src/locale.js +76 -76
  102. package/src/mapsequal.d.ts +15 -15
  103. package/src/mapsequal.js +27 -27
  104. package/src/mix.d.ts +85 -85
  105. package/src/mix.js +50 -50
  106. package/src/nth.d.ts +16 -16
  107. package/src/nth.js +24 -24
  108. package/src/objecttomap.d.ts +23 -23
  109. package/src/objecttomap.js +27 -27
  110. package/src/observablemixin.d.ts +560 -560
  111. package/src/observablemixin.js +580 -580
  112. package/src/priorities.d.ts +33 -33
  113. package/src/priorities.js +23 -23
  114. package/src/retry.d.ts +33 -0
  115. package/src/retry.js +47 -0
  116. package/src/splicearray.d.ts +26 -26
  117. package/src/splicearray.js +40 -40
  118. package/src/spy.d.ts +21 -21
  119. package/src/spy.js +22 -22
  120. package/src/toarray.d.ts +25 -25
  121. package/src/toarray.js +7 -7
  122. package/src/tomap.d.ts +19 -19
  123. package/src/tomap.js +29 -29
  124. package/src/translation-service.d.ts +168 -168
  125. package/src/translation-service.js +198 -198
  126. package/src/uid.d.ts +15 -15
  127. package/src/uid.js +57 -57
  128. package/src/unicode.d.ts +54 -54
  129. package/src/unicode.js +85 -85
  130. package/src/verifylicense.d.ts +15 -15
  131. package/src/verifylicense.js +87 -87
  132. package/src/version.d.ts +10 -10
  133. package/src/version.js +153 -153
  134. package/src/wait.d.ts +16 -0
  135. package/src/wait.js +29 -0
@@ -1,123 +1,123 @@
1
- /**
2
- * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
- */
5
- /**
6
- * @module utils/ckeditorerror
7
- */
8
- /**
9
- * URL to the documentation with error codes.
10
- */
11
- export declare const DOCUMENTATION_URL = "https://ckeditor.com/docs/ckeditor5/latest/support/error-codes.html";
12
- /**
13
- * The CKEditor error class.
14
- *
15
- * You should throw `CKEditorError` when:
16
- *
17
- * * An unexpected situation occurred and the editor (most probably) will not work properly. Such exception will be handled
18
- * by the {@link module:watchdog/watchdog~Watchdog watchdog} (if it is integrated),
19
- * * If the editor is incorrectly integrated or the editor API is used in the wrong way. This way you will give
20
- * feedback to the developer as soon as possible. Keep in mind that for common integration issues which should not
21
- * stop editor initialization (like missing upload adapter, wrong name of a toolbar component) we use
22
- * {@link module:utils/ckeditorerror~logWarning `logWarning()`} and
23
- * {@link module:utils/ckeditorerror~logError `logError()`}
24
- * to improve developers experience and let them see the a working editor as soon as possible.
25
- *
26
- * ```ts
27
- * /**
28
- * * Error thrown when a plugin cannot be loaded due to JavaScript errors, lack of plugins with a given name, etc.
29
- * *
30
- * * @error plugin-load
31
- * * @param pluginName The name of the plugin that could not be loaded.
32
- * * @param moduleName The name of the module which tried to load this plugin.
33
- * *\/
34
- * throw new CKEditorError( 'plugin-load', {
35
- * pluginName: 'foo',
36
- * moduleName: 'bar'
37
- * } );
38
- * ```
39
- */
40
- export default class CKEditorError extends Error {
41
- /**
42
- * A context of the error by which the Watchdog is able to determine which editor crashed.
43
- */
44
- readonly context: object | null | undefined;
45
- /**
46
- * The additional error data passed to the constructor. Undefined if none was passed.
47
- */
48
- readonly data?: object;
49
- /**
50
- * Creates an instance of the CKEditorError class.
51
- *
52
- * @param errorName The error id in an `error-name` format. A link to this error documentation page will be added
53
- * to the thrown error's `message`.
54
- * @param context A context of the error by which the {@link module:watchdog/watchdog~Watchdog watchdog}
55
- * is able to determine which editor crashed. It should be an editor instance or a property connected to it. It can be also
56
- * a `null` value if the editor should not be restarted in case of the error (e.g. during the editor initialization).
57
- * The error context should be checked using the `areConnectedThroughProperties( editor, context )` utility
58
- * to check if the object works as the context.
59
- * @param data Additional data describing the error. A stringified version of this object
60
- * will be appended to the error message, so the data are quickly visible in the console. The original
61
- * data object will also be later available under the {@link #data} property.
62
- */
63
- constructor(errorName: string, context?: object | null, data?: object);
64
- /**
65
- * Checks if the error is of the `CKEditorError` type.
66
- */
67
- is(type: string): boolean;
68
- /**
69
- * A utility that ensures that the thrown error is a {@link module:utils/ckeditorerror~CKEditorError} one.
70
- * It is useful when combined with the {@link module:watchdog/watchdog~Watchdog} feature, which can restart the editor in case
71
- * of a {@link module:utils/ckeditorerror~CKEditorError} error.
72
- *
73
- * @param err The error to rethrow.
74
- * @param context An object connected through properties with the editor instance. This context will be used
75
- * by the watchdog to verify which editor should be restarted.
76
- */
77
- static rethrowUnexpectedError(err: Error, context: object): never;
78
- }
79
- /**
80
- * Logs a warning to the console with a properly formatted message and adds a link to the documentation.
81
- * Use whenever you want to log a warning to the console.
82
- *
83
- * ```ts
84
- * /**
85
- * * There was a problem processing the configuration of the toolbar. The item with the given
86
- * * name does not exist, so it was omitted when rendering the toolbar.
87
- * *
88
- * * @error toolbarview-item-unavailable
89
- * * @param {String} name The name of the component.
90
- * *\/
91
- * logWarning( 'toolbarview-item-unavailable', { name } );
92
- * ```
93
- *
94
- * See also {@link module:utils/ckeditorerror~CKEditorError} for an explanation when to throw an error and when to log
95
- * a warning or an error to the console.
96
- *
97
- * @param errorName The error name to be logged.
98
- * @param data Additional data to be logged.
99
- */
100
- export declare function logWarning(errorName: string, data?: object): void;
101
- /**
102
- * Logs an error to the console with a properly formatted message and adds a link to the documentation.
103
- * Use whenever you want to log an error to the console.
104
- *
105
- * ```ts
106
- * /**
107
- * * There was a problem processing the configuration of the toolbar. The item with the given
108
- * * name does not exist, so it was omitted when rendering the toolbar.
109
- * *
110
- * * @error toolbarview-item-unavailable
111
- * * @param {String} name The name of the component.
112
- * *\/
113
- * logError( 'toolbarview-item-unavailable', { name } );
114
- * ```
115
- *
116
- * **Note**: In most cases logging a warning using {@link module:utils/ckeditorerror~logWarning} is enough.
117
- *
118
- * See also {@link module:utils/ckeditorerror~CKEditorError} for an explanation when to use each method.
119
- *
120
- * @param errorName The error name to be logged.
121
- * @param data Additional data to be logged.
122
- */
123
- export declare function logError(errorName: string, data?: object): void;
1
+ /**
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ /**
6
+ * @module utils/ckeditorerror
7
+ */
8
+ /**
9
+ * URL to the documentation with error codes.
10
+ */
11
+ export declare const DOCUMENTATION_URL = "https://ckeditor.com/docs/ckeditor5/latest/support/error-codes.html";
12
+ /**
13
+ * The CKEditor error class.
14
+ *
15
+ * You should throw `CKEditorError` when:
16
+ *
17
+ * * An unexpected situation occurred and the editor (most probably) will not work properly. Such exception will be handled
18
+ * by the {@link module:watchdog/watchdog~Watchdog watchdog} (if it is integrated),
19
+ * * If the editor is incorrectly integrated or the editor API is used in the wrong way. This way you will give
20
+ * feedback to the developer as soon as possible. Keep in mind that for common integration issues which should not
21
+ * stop editor initialization (like missing upload adapter, wrong name of a toolbar component) we use
22
+ * {@link module:utils/ckeditorerror~logWarning `logWarning()`} and
23
+ * {@link module:utils/ckeditorerror~logError `logError()`}
24
+ * to improve developers experience and let them see the a working editor as soon as possible.
25
+ *
26
+ * ```ts
27
+ * /**
28
+ * * Error thrown when a plugin cannot be loaded due to JavaScript errors, lack of plugins with a given name, etc.
29
+ * *
30
+ * * @error plugin-load
31
+ * * @param pluginName The name of the plugin that could not be loaded.
32
+ * * @param moduleName The name of the module which tried to load this plugin.
33
+ * *\/
34
+ * throw new CKEditorError( 'plugin-load', {
35
+ * pluginName: 'foo',
36
+ * moduleName: 'bar'
37
+ * } );
38
+ * ```
39
+ */
40
+ export default class CKEditorError extends Error {
41
+ /**
42
+ * A context of the error by which the Watchdog is able to determine which editor crashed.
43
+ */
44
+ readonly context: object | null | undefined;
45
+ /**
46
+ * The additional error data passed to the constructor. Undefined if none was passed.
47
+ */
48
+ readonly data?: object;
49
+ /**
50
+ * Creates an instance of the CKEditorError class.
51
+ *
52
+ * @param errorName The error id in an `error-name` format. A link to this error documentation page will be added
53
+ * to the thrown error's `message`.
54
+ * @param context A context of the error by which the {@link module:watchdog/watchdog~Watchdog watchdog}
55
+ * is able to determine which editor crashed. It should be an editor instance or a property connected to it. It can be also
56
+ * a `null` value if the editor should not be restarted in case of the error (e.g. during the editor initialization).
57
+ * The error context should be checked using the `areConnectedThroughProperties( editor, context )` utility
58
+ * to check if the object works as the context.
59
+ * @param data Additional data describing the error. A stringified version of this object
60
+ * will be appended to the error message, so the data are quickly visible in the console. The original
61
+ * data object will also be later available under the {@link #data} property.
62
+ */
63
+ constructor(errorName: string, context?: object | null, data?: object);
64
+ /**
65
+ * Checks if the error is of the `CKEditorError` type.
66
+ */
67
+ is(type: string): boolean;
68
+ /**
69
+ * A utility that ensures that the thrown error is a {@link module:utils/ckeditorerror~CKEditorError} one.
70
+ * It is useful when combined with the {@link module:watchdog/watchdog~Watchdog} feature, which can restart the editor in case
71
+ * of a {@link module:utils/ckeditorerror~CKEditorError} error.
72
+ *
73
+ * @param err The error to rethrow.
74
+ * @param context An object connected through properties with the editor instance. This context will be used
75
+ * by the watchdog to verify which editor should be restarted.
76
+ */
77
+ static rethrowUnexpectedError(err: Error, context: object): never;
78
+ }
79
+ /**
80
+ * Logs a warning to the console with a properly formatted message and adds a link to the documentation.
81
+ * Use whenever you want to log a warning to the console.
82
+ *
83
+ * ```ts
84
+ * /**
85
+ * * There was a problem processing the configuration of the toolbar. The item with the given
86
+ * * name does not exist, so it was omitted when rendering the toolbar.
87
+ * *
88
+ * * @error toolbarview-item-unavailable
89
+ * * @param {String} name The name of the component.
90
+ * *\/
91
+ * logWarning( 'toolbarview-item-unavailable', { name } );
92
+ * ```
93
+ *
94
+ * See also {@link module:utils/ckeditorerror~CKEditorError} for an explanation when to throw an error and when to log
95
+ * a warning or an error to the console.
96
+ *
97
+ * @param errorName The error name to be logged.
98
+ * @param data Additional data to be logged.
99
+ */
100
+ export declare function logWarning(errorName: string, data?: object): void;
101
+ /**
102
+ * Logs an error to the console with a properly formatted message and adds a link to the documentation.
103
+ * Use whenever you want to log an error to the console.
104
+ *
105
+ * ```ts
106
+ * /**
107
+ * * There was a problem processing the configuration of the toolbar. The item with the given
108
+ * * name does not exist, so it was omitted when rendering the toolbar.
109
+ * *
110
+ * * @error toolbarview-item-unavailable
111
+ * * @param {String} name The name of the component.
112
+ * *\/
113
+ * logError( 'toolbarview-item-unavailable', { name } );
114
+ * ```
115
+ *
116
+ * **Note**: In most cases logging a warning using {@link module:utils/ckeditorerror~logWarning} is enough.
117
+ *
118
+ * See also {@link module:utils/ckeditorerror~CKEditorError} for an explanation when to use each method.
119
+ *
120
+ * @param errorName The error name to be logged.
121
+ * @param data Additional data to be logged.
122
+ */
123
+ export declare function logError(errorName: string, data?: object): void;
@@ -1,176 +1,176 @@
1
- /**
2
- * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
- */
5
- /**
6
- * @module utils/ckeditorerror
7
- */
8
- /* globals console */
9
- /**
10
- * URL to the documentation with error codes.
11
- */
12
- export const DOCUMENTATION_URL = 'https://ckeditor.com/docs/ckeditor5/latest/support/error-codes.html';
13
- /**
14
- * The CKEditor error class.
15
- *
16
- * You should throw `CKEditorError` when:
17
- *
18
- * * An unexpected situation occurred and the editor (most probably) will not work properly. Such exception will be handled
19
- * by the {@link module:watchdog/watchdog~Watchdog watchdog} (if it is integrated),
20
- * * If the editor is incorrectly integrated or the editor API is used in the wrong way. This way you will give
21
- * feedback to the developer as soon as possible. Keep in mind that for common integration issues which should not
22
- * stop editor initialization (like missing upload adapter, wrong name of a toolbar component) we use
23
- * {@link module:utils/ckeditorerror~logWarning `logWarning()`} and
24
- * {@link module:utils/ckeditorerror~logError `logError()`}
25
- * to improve developers experience and let them see the a working editor as soon as possible.
26
- *
27
- * ```ts
28
- * /**
29
- * * Error thrown when a plugin cannot be loaded due to JavaScript errors, lack of plugins with a given name, etc.
30
- * *
31
- * * @error plugin-load
32
- * * @param pluginName The name of the plugin that could not be loaded.
33
- * * @param moduleName The name of the module which tried to load this plugin.
34
- * *\/
35
- * throw new CKEditorError( 'plugin-load', {
36
- * pluginName: 'foo',
37
- * moduleName: 'bar'
38
- * } );
39
- * ```
40
- */
41
- export default class CKEditorError extends Error {
42
- /**
43
- * Creates an instance of the CKEditorError class.
44
- *
45
- * @param errorName The error id in an `error-name` format. A link to this error documentation page will be added
46
- * to the thrown error's `message`.
47
- * @param context A context of the error by which the {@link module:watchdog/watchdog~Watchdog watchdog}
48
- * is able to determine which editor crashed. It should be an editor instance or a property connected to it. It can be also
49
- * a `null` value if the editor should not be restarted in case of the error (e.g. during the editor initialization).
50
- * The error context should be checked using the `areConnectedThroughProperties( editor, context )` utility
51
- * to check if the object works as the context.
52
- * @param data Additional data describing the error. A stringified version of this object
53
- * will be appended to the error message, so the data are quickly visible in the console. The original
54
- * data object will also be later available under the {@link #data} property.
55
- */
56
- constructor(errorName, context, data) {
57
- super(getErrorMessage(errorName, data));
58
- this.name = 'CKEditorError';
59
- this.context = context;
60
- this.data = data;
61
- }
62
- /**
63
- * Checks if the error is of the `CKEditorError` type.
64
- */
65
- is(type) {
66
- return type === 'CKEditorError';
67
- }
68
- /**
69
- * A utility that ensures that the thrown error is a {@link module:utils/ckeditorerror~CKEditorError} one.
70
- * It is useful when combined with the {@link module:watchdog/watchdog~Watchdog} feature, which can restart the editor in case
71
- * of a {@link module:utils/ckeditorerror~CKEditorError} error.
72
- *
73
- * @param err The error to rethrow.
74
- * @param context An object connected through properties with the editor instance. This context will be used
75
- * by the watchdog to verify which editor should be restarted.
76
- */
77
- static rethrowUnexpectedError(err, context) {
78
- if (err.is && err.is('CKEditorError')) {
79
- throw err;
80
- }
81
- /**
82
- * An unexpected error occurred inside the CKEditor 5 codebase. This error will look like the original one
83
- * to make the debugging easier.
84
- *
85
- * This error is only useful when the editor is initialized using the {@link module:watchdog/watchdog~Watchdog} feature.
86
- * In case of such error (or any {@link module:utils/ckeditorerror~CKEditorError} error) the watchdog should restart the editor.
87
- *
88
- * @error unexpected-error
89
- */
90
- const error = new CKEditorError(err.message, context);
91
- // Restore the original stack trace to make the error look like the original one.
92
- // See https://github.com/ckeditor/ckeditor5/issues/5595 for more details.
93
- error.stack = err.stack;
94
- throw error;
95
- }
96
- }
97
- /**
98
- * Logs a warning to the console with a properly formatted message and adds a link to the documentation.
99
- * Use whenever you want to log a warning to the console.
100
- *
101
- * ```ts
102
- * /**
103
- * * There was a problem processing the configuration of the toolbar. The item with the given
104
- * * name does not exist, so it was omitted when rendering the toolbar.
105
- * *
106
- * * @error toolbarview-item-unavailable
107
- * * @param {String} name The name of the component.
108
- * *\/
109
- * logWarning( 'toolbarview-item-unavailable', { name } );
110
- * ```
111
- *
112
- * See also {@link module:utils/ckeditorerror~CKEditorError} for an explanation when to throw an error and when to log
113
- * a warning or an error to the console.
114
- *
115
- * @param errorName The error name to be logged.
116
- * @param data Additional data to be logged.
117
- */
118
- export function logWarning(errorName, data) {
119
- console.warn(...formatConsoleArguments(errorName, data));
120
- }
121
- /**
122
- * Logs an error to the console with a properly formatted message and adds a link to the documentation.
123
- * Use whenever you want to log an error to the console.
124
- *
125
- * ```ts
126
- * /**
127
- * * There was a problem processing the configuration of the toolbar. The item with the given
128
- * * name does not exist, so it was omitted when rendering the toolbar.
129
- * *
130
- * * @error toolbarview-item-unavailable
131
- * * @param {String} name The name of the component.
132
- * *\/
133
- * logError( 'toolbarview-item-unavailable', { name } );
134
- * ```
135
- *
136
- * **Note**: In most cases logging a warning using {@link module:utils/ckeditorerror~logWarning} is enough.
137
- *
138
- * See also {@link module:utils/ckeditorerror~CKEditorError} for an explanation when to use each method.
139
- *
140
- * @param errorName The error name to be logged.
141
- * @param data Additional data to be logged.
142
- */
143
- export function logError(errorName, data) {
144
- console.error(...formatConsoleArguments(errorName, data));
145
- }
146
- /**
147
- * Returns formatted link to documentation message.
148
- */
149
- function getLinkToDocumentationMessage(errorName) {
150
- return `\nRead more: ${DOCUMENTATION_URL}#error-${errorName}`;
151
- }
152
- /**
153
- * Returns formatted error message.
154
- */
155
- function getErrorMessage(errorName, data) {
156
- const processedObjects = new WeakSet();
157
- const circularReferencesReplacer = (key, value) => {
158
- if (typeof value === 'object' && value !== null) {
159
- if (processedObjects.has(value)) {
160
- return `[object ${value.constructor.name}]`;
161
- }
162
- processedObjects.add(value);
163
- }
164
- return value;
165
- };
166
- const stringifiedData = data ? ` ${JSON.stringify(data, circularReferencesReplacer)}` : '';
167
- const documentationLink = getLinkToDocumentationMessage(errorName);
168
- return errorName + stringifiedData + documentationLink;
169
- }
170
- /**
171
- * Returns formatted console error arguments.
172
- */
173
- function formatConsoleArguments(errorName, data) {
174
- const documentationMessage = getLinkToDocumentationMessage(errorName);
175
- return data ? [errorName, data, documentationMessage] : [errorName, documentationMessage];
176
- }
1
+ /**
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ /**
6
+ * @module utils/ckeditorerror
7
+ */
8
+ /* globals console */
9
+ /**
10
+ * URL to the documentation with error codes.
11
+ */
12
+ export const DOCUMENTATION_URL = 'https://ckeditor.com/docs/ckeditor5/latest/support/error-codes.html';
13
+ /**
14
+ * The CKEditor error class.
15
+ *
16
+ * You should throw `CKEditorError` when:
17
+ *
18
+ * * An unexpected situation occurred and the editor (most probably) will not work properly. Such exception will be handled
19
+ * by the {@link module:watchdog/watchdog~Watchdog watchdog} (if it is integrated),
20
+ * * If the editor is incorrectly integrated or the editor API is used in the wrong way. This way you will give
21
+ * feedback to the developer as soon as possible. Keep in mind that for common integration issues which should not
22
+ * stop editor initialization (like missing upload adapter, wrong name of a toolbar component) we use
23
+ * {@link module:utils/ckeditorerror~logWarning `logWarning()`} and
24
+ * {@link module:utils/ckeditorerror~logError `logError()`}
25
+ * to improve developers experience and let them see the a working editor as soon as possible.
26
+ *
27
+ * ```ts
28
+ * /**
29
+ * * Error thrown when a plugin cannot be loaded due to JavaScript errors, lack of plugins with a given name, etc.
30
+ * *
31
+ * * @error plugin-load
32
+ * * @param pluginName The name of the plugin that could not be loaded.
33
+ * * @param moduleName The name of the module which tried to load this plugin.
34
+ * *\/
35
+ * throw new CKEditorError( 'plugin-load', {
36
+ * pluginName: 'foo',
37
+ * moduleName: 'bar'
38
+ * } );
39
+ * ```
40
+ */
41
+ export default class CKEditorError extends Error {
42
+ /**
43
+ * Creates an instance of the CKEditorError class.
44
+ *
45
+ * @param errorName The error id in an `error-name` format. A link to this error documentation page will be added
46
+ * to the thrown error's `message`.
47
+ * @param context A context of the error by which the {@link module:watchdog/watchdog~Watchdog watchdog}
48
+ * is able to determine which editor crashed. It should be an editor instance or a property connected to it. It can be also
49
+ * a `null` value if the editor should not be restarted in case of the error (e.g. during the editor initialization).
50
+ * The error context should be checked using the `areConnectedThroughProperties( editor, context )` utility
51
+ * to check if the object works as the context.
52
+ * @param data Additional data describing the error. A stringified version of this object
53
+ * will be appended to the error message, so the data are quickly visible in the console. The original
54
+ * data object will also be later available under the {@link #data} property.
55
+ */
56
+ constructor(errorName, context, data) {
57
+ super(getErrorMessage(errorName, data));
58
+ this.name = 'CKEditorError';
59
+ this.context = context;
60
+ this.data = data;
61
+ }
62
+ /**
63
+ * Checks if the error is of the `CKEditorError` type.
64
+ */
65
+ is(type) {
66
+ return type === 'CKEditorError';
67
+ }
68
+ /**
69
+ * A utility that ensures that the thrown error is a {@link module:utils/ckeditorerror~CKEditorError} one.
70
+ * It is useful when combined with the {@link module:watchdog/watchdog~Watchdog} feature, which can restart the editor in case
71
+ * of a {@link module:utils/ckeditorerror~CKEditorError} error.
72
+ *
73
+ * @param err The error to rethrow.
74
+ * @param context An object connected through properties with the editor instance. This context will be used
75
+ * by the watchdog to verify which editor should be restarted.
76
+ */
77
+ static rethrowUnexpectedError(err, context) {
78
+ if (err.is && err.is('CKEditorError')) {
79
+ throw err;
80
+ }
81
+ /**
82
+ * An unexpected error occurred inside the CKEditor 5 codebase. This error will look like the original one
83
+ * to make the debugging easier.
84
+ *
85
+ * This error is only useful when the editor is initialized using the {@link module:watchdog/watchdog~Watchdog} feature.
86
+ * In case of such error (or any {@link module:utils/ckeditorerror~CKEditorError} error) the watchdog should restart the editor.
87
+ *
88
+ * @error unexpected-error
89
+ */
90
+ const error = new CKEditorError(err.message, context);
91
+ // Restore the original stack trace to make the error look like the original one.
92
+ // See https://github.com/ckeditor/ckeditor5/issues/5595 for more details.
93
+ error.stack = err.stack;
94
+ throw error;
95
+ }
96
+ }
97
+ /**
98
+ * Logs a warning to the console with a properly formatted message and adds a link to the documentation.
99
+ * Use whenever you want to log a warning to the console.
100
+ *
101
+ * ```ts
102
+ * /**
103
+ * * There was a problem processing the configuration of the toolbar. The item with the given
104
+ * * name does not exist, so it was omitted when rendering the toolbar.
105
+ * *
106
+ * * @error toolbarview-item-unavailable
107
+ * * @param {String} name The name of the component.
108
+ * *\/
109
+ * logWarning( 'toolbarview-item-unavailable', { name } );
110
+ * ```
111
+ *
112
+ * See also {@link module:utils/ckeditorerror~CKEditorError} for an explanation when to throw an error and when to log
113
+ * a warning or an error to the console.
114
+ *
115
+ * @param errorName The error name to be logged.
116
+ * @param data Additional data to be logged.
117
+ */
118
+ export function logWarning(errorName, data) {
119
+ console.warn(...formatConsoleArguments(errorName, data));
120
+ }
121
+ /**
122
+ * Logs an error to the console with a properly formatted message and adds a link to the documentation.
123
+ * Use whenever you want to log an error to the console.
124
+ *
125
+ * ```ts
126
+ * /**
127
+ * * There was a problem processing the configuration of the toolbar. The item with the given
128
+ * * name does not exist, so it was omitted when rendering the toolbar.
129
+ * *
130
+ * * @error toolbarview-item-unavailable
131
+ * * @param {String} name The name of the component.
132
+ * *\/
133
+ * logError( 'toolbarview-item-unavailable', { name } );
134
+ * ```
135
+ *
136
+ * **Note**: In most cases logging a warning using {@link module:utils/ckeditorerror~logWarning} is enough.
137
+ *
138
+ * See also {@link module:utils/ckeditorerror~CKEditorError} for an explanation when to use each method.
139
+ *
140
+ * @param errorName The error name to be logged.
141
+ * @param data Additional data to be logged.
142
+ */
143
+ export function logError(errorName, data) {
144
+ console.error(...formatConsoleArguments(errorName, data));
145
+ }
146
+ /**
147
+ * Returns formatted link to documentation message.
148
+ */
149
+ function getLinkToDocumentationMessage(errorName) {
150
+ return `\nRead more: ${DOCUMENTATION_URL}#error-${errorName}`;
151
+ }
152
+ /**
153
+ * Returns formatted error message.
154
+ */
155
+ function getErrorMessage(errorName, data) {
156
+ const processedObjects = new WeakSet();
157
+ const circularReferencesReplacer = (key, value) => {
158
+ if (typeof value === 'object' && value !== null) {
159
+ if (processedObjects.has(value)) {
160
+ return `[object ${value.constructor.name}]`;
161
+ }
162
+ processedObjects.add(value);
163
+ }
164
+ return value;
165
+ };
166
+ const stringifiedData = data ? ` ${JSON.stringify(data, circularReferencesReplacer)}` : '';
167
+ const documentationLink = getLinkToDocumentationMessage(errorName);
168
+ return errorName + stringifiedData + documentationLink;
169
+ }
170
+ /**
171
+ * Returns formatted console error arguments.
172
+ */
173
+ function formatConsoleArguments(errorName, data) {
174
+ const documentationMessage = getLinkToDocumentationMessage(errorName);
175
+ return data ? [errorName, data, documentationMessage] : [errorName, documentationMessage];
176
+ }