2
0
Эх сурвалжийг харах

Make sure `initialize` can be awaited...

before `converse.initialize` has been called

In the process, remove other "core" promises. There is no core or
community plugins code awaiting on them and since it's possible to
call `converse.initialize` twice, I'm not sure it makes sense to even have them.

Also removed unused error class IllegalMessage.
JC Brand 4 жил өмнө
parent
commit
4e7b29e417

+ 26 - 21
package-lock.json

@@ -5069,9 +5069,9 @@
 			}
 		},
 		"@octokit/types": {
-			"version": "5.4.0",
-			"resolved": "https://registry.npmjs.org/@octokit/types/-/types-5.4.0.tgz",
-			"integrity": "sha512-D/uotqF69M50OIlwMqgyIg9PuLT2daOiBAYF0P40I2ekFA2ESwwBY5dxZe/UhXdPvIbNKDzuZmQrO7rMpuFbcg==",
+			"version": "5.4.1",
+			"resolved": "https://registry.npmjs.org/@octokit/types/-/types-5.4.1.tgz",
+			"integrity": "sha512-OlMlSySBJoJ6uozkr/i03nO5dlYQyE05vmQNZhAh9MyO4DPBP88QlwsDVLmVjIMFssvIZB6WO0ctIGMRG+xsJQ==",
 			"dev": true,
 			"requires": {
 				"@types/node": ">= 8"
@@ -8880,9 +8880,9 @@
 			}
 		},
 		"dot-prop": {
-			"version": "4.2.0",
-			"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
-			"integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+			"version": "4.2.1",
+			"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz",
+			"integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==",
 			"dev": true,
 			"requires": {
 				"is-obj": "^1.0.0"
@@ -9181,9 +9181,9 @@
 			"dev": true
 		},
 		"envinfo": {
-			"version": "7.7.2",
-			"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.2.tgz",
-			"integrity": "sha512-k3Eh5bKuQnZjm49/L7H4cHzs2FlL5QjbTB3JrPxoTI8aJG7hVMe4uKyJxSYH4ahseby2waUwk5OaKX/nAsaYgg==",
+			"version": "7.7.3",
+			"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz",
+			"integrity": "sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==",
 			"dev": true
 		},
 		"err-code": {
@@ -13126,6 +13126,12 @@
 			"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
 			"dev": true
 		},
+		"json-parse-even-better-errors": {
+			"version": "2.3.1",
+			"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+			"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+			"dev": true
+		},
 		"json-schema": {
 			"version": "0.2.3",
 			"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
@@ -14118,9 +14124,9 @@
 			}
 		},
 		"meow": {
-			"version": "7.1.0",
-			"resolved": "https://registry.npmjs.org/meow/-/meow-7.1.0.tgz",
-			"integrity": "sha512-kq5F0KVteskZ3JdfyQFivJEj2RaA8NFsS4+r9DaMKLcUHpk5OcHS3Q0XkCXONB1mZRPsu/Y/qImKri0nwSEZog==",
+			"version": "7.1.1",
+			"resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz",
+			"integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==",
 			"dev": true,
 			"requires": {
 				"@types/minimist": "^1.2.0",
@@ -14165,14 +14171,14 @@
 					}
 				},
 				"parse-json": {
-					"version": "5.0.1",
-					"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz",
-					"integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==",
+					"version": "5.1.0",
+					"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz",
+					"integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==",
 					"dev": true,
 					"requires": {
 						"@babel/code-frame": "^7.0.0",
 						"error-ex": "^1.3.1",
-						"json-parse-better-errors": "^1.0.1",
+						"json-parse-even-better-errors": "^2.3.0",
 						"lines-and-columns": "^1.1.6"
 					}
 				},
@@ -20643,14 +20649,13 @@
 			}
 		},
 		"read-package-json": {
-			"version": "2.1.1",
-			"resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.1.tgz",
-			"integrity": "sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A==",
+			"version": "2.1.2",
+			"resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz",
+			"integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==",
 			"dev": true,
 			"requires": {
 				"glob": "^7.1.1",
-				"graceful-fs": "^4.1.2",
-				"json-parse-better-errors": "^1.0.1",
+				"json-parse-even-better-errors": "^2.3.0",
 				"normalize-package-data": "^2.0.0",
 				"npm-normalize-package-bin": "^1.0.0"
 			}

+ 3 - 2
src/components/converse.js

@@ -1,4 +1,4 @@
-import { converse } from "@converse/headless/converse-core";
+import { api, converse } from "@converse/headless/converse-core";
 
 
 /**
@@ -10,7 +10,8 @@ import { converse } from "@converse/headless/converse-core";
  */
 class ConverseRoot extends HTMLElement {
 
-    connectedCallback () {
+    async connectedCallback () {
+        await api.waitUntil('initialized');
         converse.insertInto(this);
     }
 }

+ 0 - 1
src/converse-chatboxviews.js

@@ -49,7 +49,6 @@ converse.plugins.add('converse-chatboxviews', {
         /* The initialize function gets called as soon as the plugin is
          * loaded by converse.js's plugin machinery.
          */
-
         api.elements.register();
 
         api.promises.add(['chatBoxViewsInitialized']);

+ 1 - 4
src/converse-rosterview.js

@@ -68,10 +68,7 @@ converse.plugins.add('converse-rosterview', {
 
             toHTML () {
                 const label_nickname = api.settings.get('xhr_user_search_url') ? __('Contact name') : __('Optional nickname');
-                return tpl_add_contact_modal(Object.assign(this.model.toJSON(), {
-                    '_converse': _converse,
-                    'label_nickname': label_nickname,
-                }));
+                return tpl_add_contact_modal(Object.assign(this.model.toJSON(), { _converse, label_nickname }));
             },
 
             afterRender () {

+ 0 - 6
src/headless/connection.js

@@ -151,12 +151,6 @@ export class Connection extends Strophe.Connection {
              */
             api.trigger('reconnected');
         } else {
-            /**
-             * Triggered once converse.js has been initialized.
-             * See also {@link _converse#event:pluginsInitialized}.
-             * @event _converse#initialized
-             */
-            api.trigger('initialized');
             /**
              * Triggered after the connection has been established and Converse
              * has got all its ducks in a row.

+ 8 - 18
src/headless/converse-core.js

@@ -74,19 +74,6 @@ _.templateSettings = {
 class TimeoutError extends Error {}
 
 
-class IllegalMessage extends Error {}
-
-
-// Setting wait to 59 instead of 60 to avoid timing conflicts with the
-// webserver, which is often also set to 60 and might therefore sometimes
-// return a 504 error page instead of passing through to the BOSH proxy.
-const PROMISES = [
-    'afterResourceBinding',
-    'connectionInitialized',
-    'initialized',
-    'pluginsInitialized',
-];
-
 // Core plugins are whitelisted automatically
 // These are just the @converse/headless plugins, for the full converse,
 // the other plugins are whitelisted in src/converse.js
@@ -174,8 +161,10 @@ CONNECTION_STATUS[Strophe.Status.REDIRECT] = 'REDIRECT';
 export const _converse = {
     log,
     CONNECTION_STATUS,
-    'templates': {},
-    'promises': {},
+    templates: {},
+    promises: {
+        'initialized': u.getResolveablePromise()
+    },
 
     STATUS_WEIGHTS: {
         'offline':      6,
@@ -227,7 +216,6 @@ export const _converse = {
     router: new Router(),
 
     TimeoutError: TimeoutError,
-    IllegalMessage: IllegalMessage,
 
     isTestEnv: () => {
         return initialization_settings.bosh_service_url === 'montague.lit/http-bind';
@@ -1023,7 +1011,6 @@ function initPlugins () {
      * @event _converse#pluginsInitialized
      * @memberOf _converse
      * @example _converse.api.listen.on('pluginsInitialized', () => { ... });
-     * @example _converse.api.waitUntil('pluginsInitialized').then(() => { ... });
      */
     _converse.api.trigger('pluginsInitialized');
 }
@@ -1321,6 +1308,9 @@ async function cleanup () {
     _converse.connection?.reset();
     _converse.stopListening();
     _converse.off();
+    if (_converse.promises['initialized'].isResolved) {
+        api.promises.add('initialized')
+    }
 }
 
 
@@ -1529,7 +1519,7 @@ Object.assign(converse, {
      */
     async initialize (settings) {
         await cleanup();
-        PROMISES.forEach(name => api.promises.add(name));
+
         setUnloadEvent();
         initSettings(settings);
         _converse.strict_plugin_dependencies = settings.strict_plugin_dependencies; // Needed by pluggable.js