@webex/webex-core 2.59.3-next.1 → 2.59.4

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 (189) hide show
  1. package/.eslintrc.js +6 -6
  2. package/README.md +79 -79
  3. package/babel.config.js +3 -3
  4. package/dist/config.js +24 -24
  5. package/dist/config.js.map +1 -1
  6. package/dist/credentials-config.js +56 -56
  7. package/dist/credentials-config.js.map +1 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/interceptors/auth.js +28 -28
  10. package/dist/interceptors/auth.js.map +1 -1
  11. package/dist/interceptors/default-options.js +24 -24
  12. package/dist/interceptors/default-options.js.map +1 -1
  13. package/dist/interceptors/embargo.js +9 -9
  14. package/dist/interceptors/embargo.js.map +1 -1
  15. package/dist/interceptors/network-timing.js +19 -19
  16. package/dist/interceptors/network-timing.js.map +1 -1
  17. package/dist/interceptors/payload-transformer.js +19 -19
  18. package/dist/interceptors/payload-transformer.js.map +1 -1
  19. package/dist/interceptors/rate-limit.js +40 -40
  20. package/dist/interceptors/rate-limit.js.map +1 -1
  21. package/dist/interceptors/redirect.js +13 -13
  22. package/dist/interceptors/redirect.js.map +1 -1
  23. package/dist/interceptors/request-event.js +23 -23
  24. package/dist/interceptors/request-event.js.map +1 -1
  25. package/dist/interceptors/request-logger.js +13 -13
  26. package/dist/interceptors/request-logger.js.map +1 -1
  27. package/dist/interceptors/request-timing.js +23 -23
  28. package/dist/interceptors/request-timing.js.map +1 -1
  29. package/dist/interceptors/response-logger.js +19 -19
  30. package/dist/interceptors/response-logger.js.map +1 -1
  31. package/dist/interceptors/user-agent.js +29 -29
  32. package/dist/interceptors/user-agent.js.map +1 -1
  33. package/dist/interceptors/webex-tracking-id.js +15 -15
  34. package/dist/interceptors/webex-tracking-id.js.map +1 -1
  35. package/dist/interceptors/webex-user-agent.js +13 -13
  36. package/dist/interceptors/webex-user-agent.js.map +1 -1
  37. package/dist/lib/batcher.js +83 -83
  38. package/dist/lib/batcher.js.map +1 -1
  39. package/dist/lib/credentials/credentials.js +103 -103
  40. package/dist/lib/credentials/credentials.js.map +1 -1
  41. package/dist/lib/credentials/grant-errors.js +17 -17
  42. package/dist/lib/credentials/grant-errors.js.map +1 -1
  43. package/dist/lib/credentials/index.js +2 -2
  44. package/dist/lib/credentials/index.js.map +1 -1
  45. package/dist/lib/credentials/scope.js +11 -11
  46. package/dist/lib/credentials/scope.js.map +1 -1
  47. package/dist/lib/credentials/token-collection.js +2 -2
  48. package/dist/lib/credentials/token-collection.js.map +1 -1
  49. package/dist/lib/credentials/token.js +145 -145
  50. package/dist/lib/credentials/token.js.map +1 -1
  51. package/dist/lib/page.js +49 -49
  52. package/dist/lib/page.js.map +1 -1
  53. package/dist/lib/services/constants.js.map +1 -1
  54. package/dist/lib/services/index.js +2 -2
  55. package/dist/lib/services/index.js.map +1 -1
  56. package/dist/lib/services/interceptors/server-error.js +9 -9
  57. package/dist/lib/services/interceptors/server-error.js.map +1 -1
  58. package/dist/lib/services/interceptors/service.js +24 -24
  59. package/dist/lib/services/interceptors/service.js.map +1 -1
  60. package/dist/lib/services/metrics.js.map +1 -1
  61. package/dist/lib/services/service-catalog.js +104 -104
  62. package/dist/lib/services/service-catalog.js.map +1 -1
  63. package/dist/lib/services/service-fed-ramp.js.map +1 -1
  64. package/dist/lib/services/service-host.js +134 -134
  65. package/dist/lib/services/service-host.js.map +1 -1
  66. package/dist/lib/services/service-registry.js +175 -175
  67. package/dist/lib/services/service-registry.js.map +1 -1
  68. package/dist/lib/services/service-state.js +38 -38
  69. package/dist/lib/services/service-state.js.map +1 -1
  70. package/dist/lib/services/service-url.js +31 -31
  71. package/dist/lib/services/service-url.js.map +1 -1
  72. package/dist/lib/services/services.js +245 -245
  73. package/dist/lib/services/services.js.map +1 -1
  74. package/dist/lib/stateless-webex-plugin.js +28 -28
  75. package/dist/lib/stateless-webex-plugin.js.map +1 -1
  76. package/dist/lib/storage/decorators.js +27 -27
  77. package/dist/lib/storage/decorators.js.map +1 -1
  78. package/dist/lib/storage/errors.js +4 -4
  79. package/dist/lib/storage/errors.js.map +1 -1
  80. package/dist/lib/storage/index.js.map +1 -1
  81. package/dist/lib/storage/make-webex-plugin-store.js +44 -44
  82. package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
  83. package/dist/lib/storage/make-webex-store.js +40 -40
  84. package/dist/lib/storage/make-webex-store.js.map +1 -1
  85. package/dist/lib/storage/memory-store-adapter.js +9 -9
  86. package/dist/lib/storage/memory-store-adapter.js.map +1 -1
  87. package/dist/lib/webex-core-plugin-mixin.js +13 -13
  88. package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
  89. package/dist/lib/webex-http-error.js +9 -9
  90. package/dist/lib/webex-http-error.js.map +1 -1
  91. package/dist/lib/webex-internal-core-plugin-mixin.js +13 -13
  92. package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
  93. package/dist/lib/webex-plugin.js +36 -36
  94. package/dist/lib/webex-plugin.js.map +1 -1
  95. package/dist/plugins/logger.js +9 -9
  96. package/dist/plugins/logger.js.map +1 -1
  97. package/dist/webex-core.js +104 -104
  98. package/dist/webex-core.js.map +1 -1
  99. package/dist/webex-internal-core.js +12 -12
  100. package/dist/webex-internal-core.js.map +1 -1
  101. package/jest.config.js +3 -3
  102. package/package.json +19 -20
  103. package/process +1 -1
  104. package/src/config.js +90 -90
  105. package/src/credentials-config.js +212 -212
  106. package/src/index.js +62 -62
  107. package/src/interceptors/auth.js +186 -186
  108. package/src/interceptors/default-options.js +55 -55
  109. package/src/interceptors/embargo.js +43 -43
  110. package/src/interceptors/network-timing.js +54 -54
  111. package/src/interceptors/payload-transformer.js +55 -55
  112. package/src/interceptors/rate-limit.js +169 -169
  113. package/src/interceptors/redirect.js +106 -106
  114. package/src/interceptors/request-event.js +93 -93
  115. package/src/interceptors/request-logger.js +78 -78
  116. package/src/interceptors/request-timing.js +65 -65
  117. package/src/interceptors/response-logger.js +98 -98
  118. package/src/interceptors/user-agent.js +77 -77
  119. package/src/interceptors/webex-tracking-id.js +73 -73
  120. package/src/interceptors/webex-user-agent.js +79 -79
  121. package/src/lib/batcher.js +307 -307
  122. package/src/lib/credentials/credentials.js +552 -552
  123. package/src/lib/credentials/grant-errors.js +92 -92
  124. package/src/lib/credentials/index.js +16 -16
  125. package/src/lib/credentials/scope.js +34 -34
  126. package/src/lib/credentials/token-collection.js +17 -17
  127. package/src/lib/credentials/token.js +559 -559
  128. package/src/lib/page.js +159 -159
  129. package/src/lib/services/constants.js +9 -9
  130. package/src/lib/services/index.js +26 -26
  131. package/src/lib/services/interceptors/server-error.js +48 -48
  132. package/src/lib/services/interceptors/service.js +101 -101
  133. package/src/lib/services/metrics.js +4 -4
  134. package/src/lib/services/service-catalog.js +435 -435
  135. package/src/lib/services/service-fed-ramp.js +4 -4
  136. package/src/lib/services/service-host.js +267 -267
  137. package/src/lib/services/service-registry.js +465 -465
  138. package/src/lib/services/service-state.js +78 -78
  139. package/src/lib/services/service-url.js +124 -124
  140. package/src/lib/services/services.js +1018 -1018
  141. package/src/lib/stateless-webex-plugin.js +98 -98
  142. package/src/lib/storage/decorators.js +220 -220
  143. package/src/lib/storage/errors.js +15 -15
  144. package/src/lib/storage/index.js +10 -10
  145. package/src/lib/storage/make-webex-plugin-store.js +211 -211
  146. package/src/lib/storage/make-webex-store.js +140 -140
  147. package/src/lib/storage/memory-store-adapter.js +79 -79
  148. package/src/lib/webex-core-plugin-mixin.js +114 -114
  149. package/src/lib/webex-http-error.js +61 -61
  150. package/src/lib/webex-internal-core-plugin-mixin.js +107 -107
  151. package/src/lib/webex-plugin.js +222 -222
  152. package/src/plugins/logger.js +60 -60
  153. package/src/webex-core.js +745 -745
  154. package/src/webex-internal-core.js +46 -46
  155. package/test/integration/spec/credentials/credentials.js +139 -139
  156. package/test/integration/spec/credentials/token.js +102 -102
  157. package/test/integration/spec/services/service-catalog.js +838 -838
  158. package/test/integration/spec/services/services.js +1221 -1221
  159. package/test/integration/spec/webex-core.js +178 -178
  160. package/test/unit/spec/_setup.js +44 -44
  161. package/test/unit/spec/credentials/credentials.js +1017 -1017
  162. package/test/unit/spec/credentials/token.js +441 -441
  163. package/test/unit/spec/interceptors/auth.js +521 -521
  164. package/test/unit/spec/interceptors/default-options.js +84 -84
  165. package/test/unit/spec/interceptors/embargo.js +144 -144
  166. package/test/unit/spec/interceptors/network-timing.js +49 -49
  167. package/test/unit/spec/interceptors/payload-transformer.js +155 -155
  168. package/test/unit/spec/interceptors/rate-limit.js +302 -302
  169. package/test/unit/spec/interceptors/redirect.js +102 -102
  170. package/test/unit/spec/interceptors/request-timing.js +92 -92
  171. package/test/unit/spec/interceptors/user-agent.js +76 -76
  172. package/test/unit/spec/interceptors/webex-tracking-id.js +76 -76
  173. package/test/unit/spec/interceptors/webex-user-agent.js +159 -159
  174. package/test/unit/spec/lib/batcher.js +330 -330
  175. package/test/unit/spec/lib/page.js +148 -148
  176. package/test/unit/spec/lib/webex-plugin.js +48 -48
  177. package/test/unit/spec/services/interceptors/server-error.js +204 -204
  178. package/test/unit/spec/services/interceptors/service.js +188 -188
  179. package/test/unit/spec/services/service-catalog.js +194 -194
  180. package/test/unit/spec/services/service-host.js +260 -260
  181. package/test/unit/spec/services/service-registry.js +747 -747
  182. package/test/unit/spec/services/service-state.js +60 -60
  183. package/test/unit/spec/services/service-url.js +258 -258
  184. package/test/unit/spec/services/services.js +348 -348
  185. package/test/unit/spec/storage/persist.js +50 -50
  186. package/test/unit/spec/storage/storage-adapter.js +12 -12
  187. package/test/unit/spec/storage/wait-for-value.js +81 -81
  188. package/test/unit/spec/webex-core.js +253 -253
  189. package/test/unit/spec/webex-internal-core.js +91 -91
@@ -1,140 +1,140 @@
1
- /*!
2
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
- */
4
-
5
- import Events from 'ampersand-events';
6
- import {oneFlight} from '@webex/common';
7
-
8
- const bindings = new WeakMap();
9
-
10
- /**
11
- * Makes a WebexStore for the specified type bound to the specified webex instance
12
- * @param {string} type
13
- * @param {ProxyWebex} webex
14
- * @private
15
- * @returns {WebexStore}
16
- */
17
- export default function makeWebexStore(type, webex) {
18
- /**
19
- * Lazy Key-Value Store Interface
20
- */
21
- class WebexStore {
22
- /**
23
- * @param {Object} attrs
24
- * @param {Object} options
25
- * @returns {Store}
26
- */
27
- constructor() {
28
- webex.logger.debug(`webex-store: constructing ${type}Storage`);
29
- bindings.set(this, new Map());
30
- }
31
-
32
- /**
33
- * Provides easy access to the storage adapter identified in config.
34
- * @returns {Object}
35
- */
36
- get adapter() {
37
- return webex.config.storage[`${type}Adapter`];
38
- }
39
-
40
- /**
41
- * @returns {WeakMap}
42
- */
43
- get bindings() {
44
- return bindings.get(this);
45
- }
46
-
47
- /**
48
- * Clears the store
49
- * @returns {Promise}
50
- */
51
- clear() {
52
- const promises = [];
53
-
54
- this.bindings.forEach((binding) => {
55
- promises.push(binding.clear());
56
- });
57
-
58
- return Promise.all(promises);
59
- }
60
-
61
- /**
62
- * Deletes the specified key from the store
63
- * @param {string} namespace
64
- * @param {string} key
65
- * @returns {[type]}
66
- */
67
- del(namespace, key) {
68
- webex.logger.debug(`webex-store: removing ${namespace}:${key}`);
69
-
70
- return this._getBinding(namespace).then((binding) => binding.del(key));
71
- }
72
-
73
- /**
74
- * Retrieves the value specified by key from the store. Rejects with
75
- * NotFoundError if no value can be found
76
- * @param {string} namespace
77
- * @param {string} key
78
- * @returns {Promise}
79
- */
80
- get(namespace, key) {
81
- webex.logger.debug(`webex-store: retrieving ${namespace}:${key}`);
82
-
83
- return this._getBinding(namespace).then((binding) => binding.get(key));
84
- }
85
-
86
- /**
87
- * Writes a value to the store. Deletes the specified key from the store
88
- * if passed `undefined`
89
- * @param {string} namespace
90
- * @param {string} key
91
- * @param {any} value
92
- * @returns {Promise} Resolves with value (to simplify write-through caching)
93
- */
94
- put(namespace, key, value) {
95
- if (typeof value === 'undefined') {
96
- return this.del(namespace, key);
97
- }
98
- webex.logger.debug(`webex-store: setting ${namespace}:${key}`);
99
-
100
- return this._getBinding(namespace)
101
- .then((binding) => binding.put(key, value.serialize ? value.serialize() : value))
102
- .then(() => value);
103
- }
104
-
105
- @oneFlight({keyFactory: (namespace) => namespace})
106
- /**
107
- * Creates an interface bound to the specified namespace
108
- * @param {string} namespace
109
- * @private
110
- * @returns {Promise}
111
- */
112
- // suppress doc warning because decorators confuse eslint
113
- // eslint-disable-next-line require-jsdoc
114
- _getBinding(namespace) {
115
- return new Promise((resolve) => {
116
- webex.logger.debug(`storage: getting binding for \`${namespace}\``);
117
- const binding = this.bindings.get(namespace);
118
-
119
- if (binding) {
120
- webex.logger.debug(`storage: found binding for \`${namespace}\``);
121
-
122
- return resolve(binding);
123
- }
124
-
125
- return resolve(
126
- this.adapter.bind(namespace, {logger: webex.logger}).then((_binding) => {
127
- webex.logger.debug(`storage: made binding for \`${namespace}\``);
128
- this.bindings.set(namespace, _binding);
129
-
130
- return _binding;
131
- })
132
- );
133
- });
134
- }
135
- }
136
-
137
- Object.assign(WebexStore.prototype, Events);
138
-
139
- return new WebexStore();
140
- }
1
+ /*!
2
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import Events from 'ampersand-events';
6
+ import {oneFlight} from '@webex/common';
7
+
8
+ const bindings = new WeakMap();
9
+
10
+ /**
11
+ * Makes a WebexStore for the specified type bound to the specified webex instance
12
+ * @param {string} type
13
+ * @param {ProxyWebex} webex
14
+ * @private
15
+ * @returns {WebexStore}
16
+ */
17
+ export default function makeWebexStore(type, webex) {
18
+ /**
19
+ * Lazy Key-Value Store Interface
20
+ */
21
+ class WebexStore {
22
+ /**
23
+ * @param {Object} attrs
24
+ * @param {Object} options
25
+ * @returns {Store}
26
+ */
27
+ constructor() {
28
+ webex.logger.debug(`webex-store: constructing ${type}Storage`);
29
+ bindings.set(this, new Map());
30
+ }
31
+
32
+ /**
33
+ * Provides easy access to the storage adapter identified in config.
34
+ * @returns {Object}
35
+ */
36
+ get adapter() {
37
+ return webex.config.storage[`${type}Adapter`];
38
+ }
39
+
40
+ /**
41
+ * @returns {WeakMap}
42
+ */
43
+ get bindings() {
44
+ return bindings.get(this);
45
+ }
46
+
47
+ /**
48
+ * Clears the store
49
+ * @returns {Promise}
50
+ */
51
+ clear() {
52
+ const promises = [];
53
+
54
+ this.bindings.forEach((binding) => {
55
+ promises.push(binding.clear());
56
+ });
57
+
58
+ return Promise.all(promises);
59
+ }
60
+
61
+ /**
62
+ * Deletes the specified key from the store
63
+ * @param {string} namespace
64
+ * @param {string} key
65
+ * @returns {[type]}
66
+ */
67
+ del(namespace, key) {
68
+ webex.logger.debug(`webex-store: removing ${namespace}:${key}`);
69
+
70
+ return this._getBinding(namespace).then((binding) => binding.del(key));
71
+ }
72
+
73
+ /**
74
+ * Retrieves the value specified by key from the store. Rejects with
75
+ * NotFoundError if no value can be found
76
+ * @param {string} namespace
77
+ * @param {string} key
78
+ * @returns {Promise}
79
+ */
80
+ get(namespace, key) {
81
+ webex.logger.debug(`webex-store: retrieving ${namespace}:${key}`);
82
+
83
+ return this._getBinding(namespace).then((binding) => binding.get(key));
84
+ }
85
+
86
+ /**
87
+ * Writes a value to the store. Deletes the specified key from the store
88
+ * if passed `undefined`
89
+ * @param {string} namespace
90
+ * @param {string} key
91
+ * @param {any} value
92
+ * @returns {Promise} Resolves with value (to simplify write-through caching)
93
+ */
94
+ put(namespace, key, value) {
95
+ if (typeof value === 'undefined') {
96
+ return this.del(namespace, key);
97
+ }
98
+ webex.logger.debug(`webex-store: setting ${namespace}:${key}`);
99
+
100
+ return this._getBinding(namespace)
101
+ .then((binding) => binding.put(key, value.serialize ? value.serialize() : value))
102
+ .then(() => value);
103
+ }
104
+
105
+ @oneFlight({keyFactory: (namespace) => namespace})
106
+ /**
107
+ * Creates an interface bound to the specified namespace
108
+ * @param {string} namespace
109
+ * @private
110
+ * @returns {Promise}
111
+ */
112
+ // suppress doc warning because decorators confuse eslint
113
+ // eslint-disable-next-line require-jsdoc
114
+ _getBinding(namespace) {
115
+ return new Promise((resolve) => {
116
+ webex.logger.debug(`storage: getting binding for \`${namespace}\``);
117
+ const binding = this.bindings.get(namespace);
118
+
119
+ if (binding) {
120
+ webex.logger.debug(`storage: found binding for \`${namespace}\``);
121
+
122
+ return resolve(binding);
123
+ }
124
+
125
+ return resolve(
126
+ this.adapter.bind(namespace, {logger: webex.logger}).then((_binding) => {
127
+ webex.logger.debug(`storage: made binding for \`${namespace}\``);
128
+ this.bindings.set(namespace, _binding);
129
+
130
+ return _binding;
131
+ })
132
+ );
133
+ });
134
+ }
135
+ }
136
+
137
+ Object.assign(WebexStore.prototype, Events);
138
+
139
+ return new WebexStore();
140
+ }
@@ -1,79 +1,79 @@
1
- /*!
2
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
- */
4
-
5
- import {NotFoundError} from './errors';
6
-
7
- /**
8
- * Binds a namespace
9
- * @param {string} namespace
10
- * @param {Object} options
11
- * @param {Object} options.data
12
- * @private
13
- * @returns {Promise<Object>}
14
- */
15
- function _bind(namespace, options = {}) {
16
- options = options || {};
17
- if (!namespace) {
18
- return Promise.reject(new Error('`namespace` is required'));
19
- }
20
-
21
- if (!options.logger) {
22
- return Promise.reject(new Error('`options.logger` is required'));
23
- }
24
-
25
- const {logger} = options;
26
-
27
- const map = new Map([['@', {}]]);
28
-
29
- if (options.data) {
30
- Object.keys(options.data).forEach((key) => {
31
- map.set(key, options.data[key]);
32
- });
33
- }
34
-
35
- logger.debug('memory-store-adapter: returning binding');
36
-
37
- return Promise.resolve({
38
- clear() {
39
- logger.debug('memory-store-adapter: clearing the binding');
40
-
41
- return Promise.resolve(map.clear());
42
- },
43
- del(key) {
44
- logger.debug(`memory-store-adapter: deleting \`${key}\``);
45
-
46
- return Promise.resolve(map.delete(key));
47
- },
48
- get(key) {
49
- logger.debug(`memory-store-adapter: reading \`${key}\``);
50
- const res = map.get(key);
51
-
52
- if (typeof res === 'undefined') {
53
- return Promise.reject(new NotFoundError());
54
- }
55
-
56
- return Promise.resolve(res);
57
- },
58
- put(key, value) {
59
- logger.debug(`memory-store-adapter: writing \`${key}\``);
60
-
61
- return Promise.resolve(map.set(key, value));
62
- },
63
- });
64
- }
65
-
66
- export default {
67
- bind: _bind,
68
- preload(data) {
69
- return {
70
- bind(namespace, options = {}) {
71
- if (data[namespace]) {
72
- options.data = data[namespace];
73
- }
74
-
75
- return _bind(namespace, options);
76
- },
77
- };
78
- },
79
- };
1
+ /*!
2
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import {NotFoundError} from './errors';
6
+
7
+ /**
8
+ * Binds a namespace
9
+ * @param {string} namespace
10
+ * @param {Object} options
11
+ * @param {Object} options.data
12
+ * @private
13
+ * @returns {Promise<Object>}
14
+ */
15
+ function _bind(namespace, options = {}) {
16
+ options = options || {};
17
+ if (!namespace) {
18
+ return Promise.reject(new Error('`namespace` is required'));
19
+ }
20
+
21
+ if (!options.logger) {
22
+ return Promise.reject(new Error('`options.logger` is required'));
23
+ }
24
+
25
+ const {logger} = options;
26
+
27
+ const map = new Map([['@', {}]]);
28
+
29
+ if (options.data) {
30
+ Object.keys(options.data).forEach((key) => {
31
+ map.set(key, options.data[key]);
32
+ });
33
+ }
34
+
35
+ logger.debug('memory-store-adapter: returning binding');
36
+
37
+ return Promise.resolve({
38
+ clear() {
39
+ logger.debug('memory-store-adapter: clearing the binding');
40
+
41
+ return Promise.resolve(map.clear());
42
+ },
43
+ del(key) {
44
+ logger.debug(`memory-store-adapter: deleting \`${key}\``);
45
+
46
+ return Promise.resolve(map.delete(key));
47
+ },
48
+ get(key) {
49
+ logger.debug(`memory-store-adapter: reading \`${key}\``);
50
+ const res = map.get(key);
51
+
52
+ if (typeof res === 'undefined') {
53
+ return Promise.reject(new NotFoundError());
54
+ }
55
+
56
+ return Promise.resolve(res);
57
+ },
58
+ put(key, value) {
59
+ logger.debug(`memory-store-adapter: writing \`${key}\``);
60
+
61
+ return Promise.resolve(map.set(key, value));
62
+ },
63
+ });
64
+ }
65
+
66
+ export default {
67
+ bind: _bind,
68
+ preload(data) {
69
+ return {
70
+ bind(namespace, options = {}) {
71
+ if (data[namespace]) {
72
+ options.data = data[namespace];
73
+ }
74
+
75
+ return _bind(namespace, options);
76
+ },
77
+ };
78
+ },
79
+ };
@@ -1,114 +1,114 @@
1
- /*!
2
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
- */
4
-
5
- import {get, has, isArray, isFunction, merge, union} from 'lodash';
6
-
7
- /**
8
- * Mixes a plugin system into an AmpState object (specifically, into WebexCore)
9
- * @param {AmpState} State
10
- * @param {Object} config
11
- * @param {Object} interceptors
12
- * @returns {AmpState}
13
- */
14
- export default function mixinWebexCorePlugins(State, config, interceptors) {
15
- // eslint-disable-next-line complexity
16
- State.registerPlugin = function registerPlugin(name, constructor, options = {}) {
17
- if (State.prototype._children[name] && !options.replace) {
18
- return;
19
- }
20
-
21
- State.prototype._children[name] = constructor;
22
-
23
- if (options.proxies) {
24
- options.proxies.forEach((key) => {
25
- createDerivedProperty(State.prototype, key, {
26
- deps: [`${name}.${key}`],
27
- fn() {
28
- return this[name][key];
29
- },
30
- });
31
- });
32
- }
33
-
34
- if (options.interceptors) {
35
- Object.keys(options.interceptors).forEach((key) => {
36
- interceptors[key] = options.interceptors[key];
37
- });
38
- }
39
-
40
- if (options.config) {
41
- merge(config, options.config);
42
- }
43
-
44
- if (has(options, 'payloadTransformer.predicates')) {
45
- config.payloadTransformer.predicates = config.payloadTransformer.predicates.concat(
46
- get(options, 'payloadTransformer.predicates')
47
- );
48
- }
49
-
50
- if (has(options, 'payloadTransformer.transforms')) {
51
- config.payloadTransformer.transforms = config.payloadTransformer.transforms.concat(
52
- get(options, 'payloadTransformer.transforms')
53
- );
54
- }
55
-
56
- if (options.onBeforeLogout) {
57
- config.onBeforeLogout = config.onBeforeLogout || [];
58
- const onBeforeLogout = isArray(options.onBeforeLogout)
59
- ? options.onBeforeLogout
60
- : [options.onBeforeLogout];
61
-
62
- onBeforeLogout.forEach((fn) =>
63
- config.onBeforeLogout.push({
64
- plugin: name,
65
- fn,
66
- })
67
- );
68
- }
69
-
70
- // Only mess with the plugin's derived properties if it's an amp-state plugin
71
- if (constructor.prototype._definition && constructor.prototype._definition.ready) {
72
- const {fn, depList} = State.prototype._derived.ready;
73
- const def = {
74
- deps: depList.concat(`${name}.ready`),
75
- fn,
76
- };
77
-
78
- createDerivedProperty(State.prototype, 'ready', def);
79
- }
80
- };
81
-
82
- return State;
83
- }
84
-
85
- /**
86
- * Extracted from ampersand-state
87
- * @param {Object} modelProto
88
- * @param {string} name
89
- * @param {Object} definition
90
- * @private
91
- * @returns {undefined}
92
- */
93
- function createDerivedProperty(modelProto, name, definition) {
94
- const def = (modelProto._derived[name] = {
95
- fn: isFunction(definition) ? definition : definition.fn,
96
- cache: definition.cache !== false,
97
- depList: definition.deps || [],
98
- });
99
-
100
- // add to our shared dependency list
101
- def.depList.forEach((dep) => {
102
- modelProto._deps[dep] = union(modelProto._deps[dep] || [], [name]);
103
- });
104
-
105
- // defined a top-level getter for derived names
106
- Reflect.defineProperty(modelProto, name, {
107
- get() {
108
- return this._getDerivedProperty(name);
109
- },
110
- set() {
111
- throw new TypeError(`\`${name}\` is a derived property, it can't be set directly.`);
112
- },
113
- });
114
- }
1
+ /*!
2
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import {get, has, isArray, isFunction, merge, union} from 'lodash';
6
+
7
+ /**
8
+ * Mixes a plugin system into an AmpState object (specifically, into WebexCore)
9
+ * @param {AmpState} State
10
+ * @param {Object} config
11
+ * @param {Object} interceptors
12
+ * @returns {AmpState}
13
+ */
14
+ export default function mixinWebexCorePlugins(State, config, interceptors) {
15
+ // eslint-disable-next-line complexity
16
+ State.registerPlugin = function registerPlugin(name, constructor, options = {}) {
17
+ if (State.prototype._children[name] && !options.replace) {
18
+ return;
19
+ }
20
+
21
+ State.prototype._children[name] = constructor;
22
+
23
+ if (options.proxies) {
24
+ options.proxies.forEach((key) => {
25
+ createDerivedProperty(State.prototype, key, {
26
+ deps: [`${name}.${key}`],
27
+ fn() {
28
+ return this[name][key];
29
+ },
30
+ });
31
+ });
32
+ }
33
+
34
+ if (options.interceptors) {
35
+ Object.keys(options.interceptors).forEach((key) => {
36
+ interceptors[key] = options.interceptors[key];
37
+ });
38
+ }
39
+
40
+ if (options.config) {
41
+ merge(config, options.config);
42
+ }
43
+
44
+ if (has(options, 'payloadTransformer.predicates')) {
45
+ config.payloadTransformer.predicates = config.payloadTransformer.predicates.concat(
46
+ get(options, 'payloadTransformer.predicates')
47
+ );
48
+ }
49
+
50
+ if (has(options, 'payloadTransformer.transforms')) {
51
+ config.payloadTransformer.transforms = config.payloadTransformer.transforms.concat(
52
+ get(options, 'payloadTransformer.transforms')
53
+ );
54
+ }
55
+
56
+ if (options.onBeforeLogout) {
57
+ config.onBeforeLogout = config.onBeforeLogout || [];
58
+ const onBeforeLogout = isArray(options.onBeforeLogout)
59
+ ? options.onBeforeLogout
60
+ : [options.onBeforeLogout];
61
+
62
+ onBeforeLogout.forEach((fn) =>
63
+ config.onBeforeLogout.push({
64
+ plugin: name,
65
+ fn,
66
+ })
67
+ );
68
+ }
69
+
70
+ // Only mess with the plugin's derived properties if it's an amp-state plugin
71
+ if (constructor.prototype._definition && constructor.prototype._definition.ready) {
72
+ const {fn, depList} = State.prototype._derived.ready;
73
+ const def = {
74
+ deps: depList.concat(`${name}.ready`),
75
+ fn,
76
+ };
77
+
78
+ createDerivedProperty(State.prototype, 'ready', def);
79
+ }
80
+ };
81
+
82
+ return State;
83
+ }
84
+
85
+ /**
86
+ * Extracted from ampersand-state
87
+ * @param {Object} modelProto
88
+ * @param {string} name
89
+ * @param {Object} definition
90
+ * @private
91
+ * @returns {undefined}
92
+ */
93
+ function createDerivedProperty(modelProto, name, definition) {
94
+ const def = (modelProto._derived[name] = {
95
+ fn: isFunction(definition) ? definition : definition.fn,
96
+ cache: definition.cache !== false,
97
+ depList: definition.deps || [],
98
+ });
99
+
100
+ // add to our shared dependency list
101
+ def.depList.forEach((dep) => {
102
+ modelProto._deps[dep] = union(modelProto._deps[dep] || [], [name]);
103
+ });
104
+
105
+ // defined a top-level getter for derived names
106
+ Reflect.defineProperty(modelProto, name, {
107
+ get() {
108
+ return this._getDerivedProperty(name);
109
+ },
110
+ set() {
111
+ throw new TypeError(`\`${name}\` is a derived property, it can't be set directly.`);
112
+ },
113
+ });
114
+ }