@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
package/src/version.js CHANGED
@@ -1,153 +1,153 @@
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/version
7
- */
8
- import CKEditorError from './ckeditorerror';
9
- const version = '40.0.0';
10
- export default version;
11
- // The second argument is not a month. It is `monthIndex` and starts from `0`.
12
- export const releaseDate = new Date(2023, 9, 4);
13
- /* istanbul ignore next -- @preserve */
14
- if (globalThis.CKEDITOR_VERSION) {
15
- /**
16
- * This error is thrown when due to a mistake in how CKEditor 5 was installed or initialized, some
17
- * of its modules were duplicated (evaluated and executed twice). Module duplication leads to inevitable runtime
18
- * errors.
19
- *
20
- * There are many situations in which some modules can be loaded twice. In the worst case scenario,
21
- * you may need to check your project for each of these issues and fix them all.
22
- *
23
- * # Trying to add a plugin to an existing build
24
- *
25
- * If you import an existing CKEditor 5 build and a plugin like this:
26
- *
27
- * ```ts
28
- * import ClassicEditor from '@ckeditor/ckeditor5-build-classic';
29
- * import Highlight from '@ckeditor/ckeditor5-highlight/src/highlight';
30
- * ```
31
- *
32
- * Then your project loads some CKEditor 5 packages twice. How does it happen?
33
- *
34
- * The build package contains a file which is already compiled with webpack. This means
35
- * that it contains all the necessary code from e.g. `@ckeditor/ckeditor5-engine` and `@ckeditor/ckeditor5-utils`.
36
- *
37
- * However, the `Highlight` plugin imports some of the modules from these packages, too. If you ask webpack to
38
- * build such a project, you will end up with the modules being included (and run) twice — first, because they are
39
- * included inside the build package, and second, because they are required by the `Highlight` plugin.
40
- *
41
- * Therefore, **you must never add plugins to an existing build** unless your plugin has no dependencies.
42
- *
43
- * Adding plugins to a build is done by taking the source version of this build (so, before it was built with webpack)
44
- * and adding plugins there. In this situation, webpack will know that it only needs to load each plugin once.
45
- *
46
- * Read more in the {@glink installation/plugins/installing-plugins Installing plugins} guide.
47
- *
48
- * # Confused an editor build with an editor implementation
49
- *
50
- * This scenario is very similar to the previous one, but has a different origin.
51
- *
52
- * Let's assume that you wanted to use CKEditor 5 from source, as explained in the
53
- * {@glink installation/advanced/alternative-setups/integrating-from-source-webpack "Building from source"} section
54
- * or in the {@glink framework/quick-start "Quick start"} guide of CKEditor 5 Framework.
55
- *
56
- * The correct way to do so is to import an editor and plugins and run them together like this:
57
- *
58
- * ```ts
59
- * import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor';
60
- * import Essentials from '@ckeditor/ckeditor5-essentials/src/essentials';
61
- * import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
62
- * import Bold from '@ckeditor/ckeditor5-basic-styles/src/bold';
63
- * import Italic from '@ckeditor/ckeditor5-basic-styles/src/italic';
64
- *
65
- * ClassicEditor
66
- * .create( document.querySelector( '#editor' ), {
67
- * plugins: [ Essentials, Paragraph, Bold, Italic ],
68
- * toolbar: [ 'bold', 'italic' ]
69
- * } )
70
- * .then( editor => {
71
- * console.log( 'Editor was initialized', editor );
72
- * } )
73
- * .catch( error => {
74
- * console.error( error.stack );
75
- * } );
76
- * ```
77
- *
78
- * However, you might have mistakenly imported a build instead of the source `ClassicEditor`. In this case
79
- * your imports will look like this:
80
- *
81
- * ```ts
82
- * import ClassicEditor from '@ckeditor/ckeditor5-build-classic';
83
- * import Essentials from '@ckeditor/ckeditor5-essentials/src/essentials';
84
- * import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
85
- * import Bold from '@ckeditor/ckeditor5-basic-styles/src/bold';
86
- * import Italic from '@ckeditor/ckeditor5-basic-styles/src/italic';
87
- * ```
88
- *
89
- * This creates the same situation as in the previous section because you use a build together with source plugins.
90
- *
91
- * Remember: `@ckeditor/ckeditor5-build-*` packages contain editor builds and `@ckeditor/ckeditor5-editor-*` contain source editors.
92
- *
93
- * # Loading two or more builds on one page
94
- *
95
- * If you use CKEditor 5 builds, you might have loaded two (or more) `ckeditor.js` files on one web page.
96
- * Check your web page for duplicated `<script>` elements or make sure your page builder/bundler includes CKEditor only once.
97
- *
98
- * If you want to use two different types of editors at once, see the
99
- * {@glink installation/advanced/using-two-editors "Using two different editors"}
100
- * section.
101
- *
102
- * # Using outdated packages
103
- *
104
- * Building CKEditor 5 from source requires using multiple npm packages. These packages have their dependencies
105
- * to other packages. If you use the latest version of, for example, `@ckeditor/ckeditor5-editor-classic` with
106
- * an outdated version of `@ckeditor/ckeditor5-image`, npm or yarn will need to install two different versions of
107
- * `@ckeditor/ckeditor5-core` because `@ckeditor/ckeditor5-editor-classic` and `@ckeditor/ckeditor5-image` may require
108
- * different versions of the core package.
109
- *
110
- * The solution to this issue is to update all packages to their latest version. We recommend
111
- * using tools like [`npm-check-updates`](https://www.npmjs.com/package/npm-check-updates) which simplify this process.
112
- *
113
- * # Conflicting version of dependencies
114
- *
115
- * This is a special case of the previous scenario. If you use CKEditor 5 with some third-party plugins,
116
- * it may happen that even if you use the latest versions of the official packages and the latest version of
117
- * these third-party packages, there will be a conflict between some of their dependencies.
118
- *
119
- * Such a problem can be resolved by either downgrading CKEditor 5 packages (which we do not recommend) or
120
- * asking the author of the third-party package to upgrade its depdendencies (or forking their project and doing this yourself).
121
- *
122
- * **Note:** All official CKEditor 5 packages (excluding integrations and `ckeditor5-dev-*` packages) are released in the
123
- * same major version. This is &mdash; in the `x.y.z`, the `x` is the same for all packages. This is the simplest way to check
124
- * whether you use packages coming from the same CKEditor 5 version. You can read more about versioning in the
125
- * {@glink updating/versioning-policy Versioning policy} guide.
126
- *
127
- * # Packages were duplicated in `node_modules`
128
- *
129
- * In some situations, especially when calling `npm install` multiple times, it may happen
130
- * that npm will not correctly "deduplicate" packages.
131
- *
132
- * Normally, npm deduplicates all packages so, for example, `@ckeditor/ckeditor5-core` is installed only once in `node_modules/`.
133
- * However, it is known to fail to do so from time to time.
134
- *
135
- * We recommend checking if any of the steps listed below help:
136
- *
137
- * * `rm -rf node_modules && npm install` to make sure you have a clean `node_modules/` directory. This step
138
- * is known to help in most cases.
139
- * * If you use `yarn.lock` or `package-lock.json`, remove it before `npm install`.
140
- * * Check whether all CKEditor 5 packages are up to date and reinstall them
141
- * if you changed anything (`rm -rf node_modules && npm install`).
142
- *
143
- * If all packages are correct and compatible with each other, the steps above are known to help. If not, you may
144
- * try to check with `npm ls` how many times packages like `@ckeditor/ckeditor5-core`, `@ckeditor/ckeditor5-engine` and
145
- *`@ckeditor/ckeditor5-utils` are installed. If more than once, verify which package causes that.
146
- *
147
- * @error ckeditor-duplicated-modules
148
- */
149
- throw new CKEditorError('ckeditor-duplicated-modules', null);
150
- }
151
- else {
152
- globalThis.CKEDITOR_VERSION = version;
153
- }
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/version
7
+ */
8
+ import CKEditorError from './ckeditorerror';
9
+ const version = '40.2.0';
10
+ export default version;
11
+ // The second argument is not a month. It is `monthIndex` and starts from `0`.
12
+ export const releaseDate = new Date(2023, 11, 12);
13
+ /* istanbul ignore next -- @preserve */
14
+ if (globalThis.CKEDITOR_VERSION) {
15
+ /**
16
+ * This error is thrown when due to a mistake in how CKEditor 5 was installed or initialized, some
17
+ * of its modules were duplicated (evaluated and executed twice). Module duplication leads to inevitable runtime
18
+ * errors.
19
+ *
20
+ * There are many situations in which some modules can be loaded twice. In the worst case scenario,
21
+ * you may need to check your project for each of these issues and fix them all.
22
+ *
23
+ * # Trying to add a plugin to an existing build
24
+ *
25
+ * If you import an existing CKEditor 5 build and a plugin like this:
26
+ *
27
+ * ```ts
28
+ * import ClassicEditor from '@ckeditor/ckeditor5-build-classic';
29
+ * import Highlight from '@ckeditor/ckeditor5-highlight/src/highlight';
30
+ * ```
31
+ *
32
+ * Then your project loads some CKEditor 5 packages twice. How does it happen?
33
+ *
34
+ * The build package contains a file which is already compiled with webpack. This means
35
+ * that it contains all the necessary code from e.g. `@ckeditor/ckeditor5-engine` and `@ckeditor/ckeditor5-utils`.
36
+ *
37
+ * However, the `Highlight` plugin imports some of the modules from these packages, too. If you ask webpack to
38
+ * build such a project, you will end up with the modules being included (and run) twice &ndash; first, because they are
39
+ * included inside the build package, and second, because they are required by the `Highlight` plugin.
40
+ *
41
+ * Therefore, **you must never add plugins to an existing build** unless your plugin has no dependencies.
42
+ *
43
+ * Adding plugins to a build is done by taking the source version of this build (so, before it was built with webpack)
44
+ * and adding plugins there. In this situation, webpack will know that it only needs to load each plugin once.
45
+ *
46
+ * Read more in the {@glink installation/plugins/installing-plugins Installing plugins} guide.
47
+ *
48
+ * # Confused an editor build with an editor implementation
49
+ *
50
+ * This scenario is very similar to the previous one, but has a different origin.
51
+ *
52
+ * Let's assume that you wanted to use CKEditor 5 from source, as explained in the
53
+ * {@glink installation/advanced/alternative-setups/integrating-from-source-webpack "Building from source"} section
54
+ * or in the {@glink framework/quick-start "Quick start"} guide of CKEditor 5 Framework.
55
+ *
56
+ * The correct way to do so is to import an editor and plugins and run them together like this:
57
+ *
58
+ * ```ts
59
+ * import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor';
60
+ * import Essentials from '@ckeditor/ckeditor5-essentials/src/essentials';
61
+ * import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
62
+ * import Bold from '@ckeditor/ckeditor5-basic-styles/src/bold';
63
+ * import Italic from '@ckeditor/ckeditor5-basic-styles/src/italic';
64
+ *
65
+ * ClassicEditor
66
+ * .create( document.querySelector( '#editor' ), {
67
+ * plugins: [ Essentials, Paragraph, Bold, Italic ],
68
+ * toolbar: [ 'bold', 'italic' ]
69
+ * } )
70
+ * .then( editor => {
71
+ * console.log( 'Editor was initialized', editor );
72
+ * } )
73
+ * .catch( error => {
74
+ * console.error( error.stack );
75
+ * } );
76
+ * ```
77
+ *
78
+ * However, you might have mistakenly imported a build instead of the source `ClassicEditor`. In this case
79
+ * your imports will look like this:
80
+ *
81
+ * ```ts
82
+ * import ClassicEditor from '@ckeditor/ckeditor5-build-classic';
83
+ * import Essentials from '@ckeditor/ckeditor5-essentials/src/essentials';
84
+ * import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
85
+ * import Bold from '@ckeditor/ckeditor5-basic-styles/src/bold';
86
+ * import Italic from '@ckeditor/ckeditor5-basic-styles/src/italic';
87
+ * ```
88
+ *
89
+ * This creates the same situation as in the previous section because you use a build together with source plugins.
90
+ *
91
+ * Remember: `@ckeditor/ckeditor5-build-*` packages contain editor builds and `@ckeditor/ckeditor5-editor-*` contain source editors.
92
+ *
93
+ * # Loading two or more builds on one page
94
+ *
95
+ * If you use CKEditor 5 builds, you might have loaded two (or more) `ckeditor.js` files on one web page.
96
+ * Check your web page for duplicated `<script>` elements or make sure your page builder/bundler includes CKEditor only once.
97
+ *
98
+ * If you want to use two different types of editors at once, see the
99
+ * {@glink installation/advanced/using-two-editors "Using two different editors"}
100
+ * section.
101
+ *
102
+ * # Using outdated packages
103
+ *
104
+ * Building CKEditor 5 from source requires using multiple npm packages. These packages have their dependencies
105
+ * to other packages. If you use the latest version of, for example, `@ckeditor/ckeditor5-editor-classic` with
106
+ * an outdated version of `@ckeditor/ckeditor5-image`, npm or yarn will need to install two different versions of
107
+ * `@ckeditor/ckeditor5-core` because `@ckeditor/ckeditor5-editor-classic` and `@ckeditor/ckeditor5-image` may require
108
+ * different versions of the core package.
109
+ *
110
+ * The solution to this issue is to update all packages to their latest version. We recommend
111
+ * using tools like [`npm-check-updates`](https://www.npmjs.com/package/npm-check-updates) which simplify this process.
112
+ *
113
+ * # Conflicting version of dependencies
114
+ *
115
+ * This is a special case of the previous scenario. If you use CKEditor 5 with some third-party plugins,
116
+ * it may happen that even if you use the latest versions of the official packages and the latest version of
117
+ * these third-party packages, there will be a conflict between some of their dependencies.
118
+ *
119
+ * Such a problem can be resolved by either downgrading CKEditor 5 packages (which we do not recommend) or
120
+ * asking the author of the third-party package to upgrade its depdendencies (or forking their project and doing this yourself).
121
+ *
122
+ * **Note:** All official CKEditor 5 packages (excluding integrations and `ckeditor5-dev-*` packages) are released in the
123
+ * same major version. This means that in the `x.y.z` version, the `x` is the same for all packages. This is the simplest way to check
124
+ * whether you use packages coming from the same CKEditor 5 version. You can read more about versioning in the
125
+ * {@glink updating/versioning-policy Versioning policy} guide.
126
+ *
127
+ * # Packages were duplicated in `node_modules`
128
+ *
129
+ * In some situations, especially when calling `npm install` multiple times, it may happen
130
+ * that npm will not correctly "deduplicate" packages.
131
+ *
132
+ * Normally, npm deduplicates all packages so, for example, `@ckeditor/ckeditor5-core` is installed only once in `node_modules/`.
133
+ * However, it is known to fail to do so from time to time.
134
+ *
135
+ * We recommend checking if any of the steps listed below help:
136
+ *
137
+ * * `rm -rf node_modules && npm install` to make sure you have a clean `node_modules/` directory. This step
138
+ * is known to help in most cases.
139
+ * * If you use `yarn.lock` or `package-lock.json`, remove it before `npm install`.
140
+ * * Check whether all CKEditor 5 packages are up to date and reinstall them
141
+ * if you changed anything (`rm -rf node_modules && npm install`).
142
+ *
143
+ * If all packages are correct and compatible with each other, the steps above are known to help. If not, you may
144
+ * try to check with `npm ls` how many times packages like `@ckeditor/ckeditor5-core`, `@ckeditor/ckeditor5-engine` and
145
+ *`@ckeditor/ckeditor5-utils` are installed. If more than once, verify which package causes that.
146
+ *
147
+ * @error ckeditor-duplicated-modules
148
+ */
149
+ throw new CKEditorError('ckeditor-duplicated-modules', null);
150
+ }
151
+ else {
152
+ globalThis.CKEDITOR_VERSION = version;
153
+ }
package/src/wait.d.ts ADDED
@@ -0,0 +1,16 @@
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/wait
7
+ */
8
+ /**
9
+ * Returns a promise that is resolved after the specified time.
10
+ *
11
+ * @param timeout The time in milliseconds to wait.
12
+ * @param options.signal A signal to abort the waiting.
13
+ */
14
+ export default function wait(timeout: number, options?: {
15
+ signal?: AbortSignal;
16
+ }): Promise<void>;
package/src/wait.js ADDED
@@ -0,0 +1,29 @@
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/wait
7
+ */
8
+ /**
9
+ * Returns a promise that is resolved after the specified time.
10
+ *
11
+ * @param timeout The time in milliseconds to wait.
12
+ * @param options.signal A signal to abort the waiting.
13
+ */
14
+ export default function wait(timeout, options = {}) {
15
+ return new Promise((resolve, reject) => {
16
+ const signal = options.signal || (new AbortController()).signal;
17
+ signal.throwIfAborted();
18
+ const timer = setTimeout(timeoutHandler, timeout);
19
+ signal.addEventListener('abort', abortHandler, { once: true });
20
+ function timeoutHandler() {
21
+ signal.removeEventListener('abort', abortHandler);
22
+ resolve();
23
+ }
24
+ function abortHandler() {
25
+ clearTimeout(timer);
26
+ reject(signal.reason);
27
+ }
28
+ });
29
+ }