@atlaskit/util-service-support 6.0.2 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/build/tsconfig.json +6 -2
  3. package/dist/cjs/index.js +46 -7
  4. package/dist/cjs/serviceResources.js +71 -43
  5. package/dist/cjs/serviceUtils.js +131 -90
  6. package/dist/cjs/types.js +23 -4
  7. package/dist/cjs/version.json +1 -1
  8. package/dist/es2019/index.js +1 -2
  9. package/dist/es2019/serviceResources.js +48 -40
  10. package/dist/es2019/serviceUtils.js +106 -87
  11. package/dist/es2019/types.js +15 -3
  12. package/dist/es2019/version.json +1 -1
  13. package/dist/esm/index.js +1 -2
  14. package/dist/esm/serviceResources.js +61 -42
  15. package/dist/esm/serviceUtils.js +122 -90
  16. package/dist/esm/types.js +15 -3
  17. package/dist/esm/version.json +1 -1
  18. package/dist/types/types.d.ts +1 -0
  19. package/package.json +7 -6
  20. package/dist/cjs/index.js.map +0 -1
  21. package/dist/cjs/serviceResources.js.map +0 -1
  22. package/dist/cjs/serviceUtils.js.map +0 -1
  23. package/dist/cjs/types.js.map +0 -1
  24. package/dist/es2019/index.d.ts +0 -4
  25. package/dist/es2019/index.js.map +0 -1
  26. package/dist/es2019/serviceResources.d.ts +0 -12
  27. package/dist/es2019/serviceResources.js.map +0 -1
  28. package/dist/es2019/serviceUtils.d.ts +0 -5
  29. package/dist/es2019/serviceUtils.js.map +0 -1
  30. package/dist/es2019/types.d.ts +0 -79
  31. package/dist/es2019/types.js.map +0 -1
  32. package/dist/esm/index.d.ts +0 -4
  33. package/dist/esm/index.js.map +0 -1
  34. package/dist/esm/serviceResources.d.ts +0 -12
  35. package/dist/esm/serviceResources.js.map +0 -1
  36. package/dist/esm/serviceUtils.d.ts +0 -5
  37. package/dist/esm/serviceUtils.js.map +0 -1
  38. package/dist/esm/types.d.ts +0 -79
  39. package/dist/esm/types.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # @atlaskit/util-service-support
2
2
 
3
+ ## 6.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`19d72473dfb`](https://bitbucket.org/atlassian/atlassian-frontend/commits/19d72473dfb) - Remove unused polyfills
8
+
9
+ ## 6.0.5
10
+
11
+ ### Patch Changes
12
+
13
+ - [`dfe01a5dad7`](https://bitbucket.org/atlassian/atlassian-frontend/commits/dfe01a5dad7) - Added ability to ignore JSON payload on status.ok responses
14
+
15
+ ## 6.0.4
16
+
17
+ ### Patch Changes
18
+
19
+ - [`0241ccdf088`](https://bitbucket.org/atlassian/atlassian-frontend/commits/0241ccdf088) - Accept paths which already have a leading slash.
20
+
21
+ ## 6.0.3
22
+
23
+ ### Patch Changes
24
+
25
+ - [`d3265f19be`](https://bitbucket.org/atlassian/atlassian-frontend/commits/d3265f19be) - Transpile packages using babel rather than tsc
26
+
3
27
  ## 6.0.2
4
28
 
5
29
  ### Patch Changes
@@ -9,5 +9,9 @@
9
9
  "../src/**/*.ts",
10
10
  "../src/**/*.tsx"
11
11
  ],
12
- "exclude": ["../src/**/__tests__/*"]
13
- }
12
+ "exclude": [
13
+ "../src/**/__tests__/*",
14
+ "../src/**/*.test.*",
15
+ "../src/**/test.*"
16
+ ]
17
+ }
package/dist/cjs/index.js CHANGED
@@ -1,9 +1,48 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ var _exportNames = {
9
+ utils: true
10
+ };
3
11
  exports.utils = void 0;
4
- var tslib_1 = require("tslib");
5
- tslib_1.__exportStar(require("./types"), exports);
6
- tslib_1.__exportStar(require("./serviceResources"), exports);
7
- var serviceUtils = tslib_1.__importStar(require("./serviceUtils"));
8
- exports.utils = serviceUtils;
9
- //# sourceMappingURL=index.js.map
12
+
13
+ var _types = require("./types");
14
+
15
+ Object.keys(_types).forEach(function (key) {
16
+ if (key === "default" || key === "__esModule") return;
17
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
18
+ if (key in exports && exports[key] === _types[key]) return;
19
+ Object.defineProperty(exports, key, {
20
+ enumerable: true,
21
+ get: function get() {
22
+ return _types[key];
23
+ }
24
+ });
25
+ });
26
+
27
+ var _serviceResources = require("./serviceResources");
28
+
29
+ Object.keys(_serviceResources).forEach(function (key) {
30
+ if (key === "default" || key === "__esModule") return;
31
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
32
+ if (key in exports && exports[key] === _serviceResources[key]) return;
33
+ Object.defineProperty(exports, key, {
34
+ enumerable: true,
35
+ get: function get() {
36
+ return _serviceResources[key];
37
+ }
38
+ });
39
+ });
40
+
41
+ var serviceUtils = _interopRequireWildcard(require("./serviceUtils"));
42
+
43
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
44
+
45
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
46
+
47
+ var utils = serviceUtils;
48
+ exports.utils = utils;
@@ -1,47 +1,75 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
3
8
  exports.AbstractResource = void 0;
4
- var AbstractResource = /** @class */ (function () {
5
- function AbstractResource() {
6
- this.listeners = new Set();
9
+
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+
16
+ var AbstractResource = /*#__PURE__*/function () {
17
+ function AbstractResource() {
18
+ (0, _classCallCheck2.default)(this, AbstractResource);
19
+ (0, _defineProperty2.default)(this, "listeners", new Set());
20
+ }
21
+
22
+ (0, _createClass2.default)(AbstractResource, [{
23
+ key: "subscribe",
24
+ value: function subscribe(onChange) {
25
+ this.listeners.add(onChange);
26
+
27
+ if (this.lastResult) {
28
+ // Notify subscribe of last result (i.e. initial state)
29
+ onChange.result(this.lastResult);
30
+ }
7
31
  }
8
- AbstractResource.prototype.subscribe = function (onChange) {
9
- this.listeners.add(onChange);
10
- if (this.lastResult) {
11
- // Notify subscribe of last result (i.e. initial state)
12
- onChange.result(this.lastResult);
32
+ }, {
33
+ key: "unsubscribe",
34
+ value: function unsubscribe(onChange) {
35
+ this.listeners.delete(onChange);
36
+ }
37
+ }, {
38
+ key: "notifyResult",
39
+ value: function notifyResult(result) {
40
+ this.listeners.forEach(function (onChange) {
41
+ onChange.result(result);
42
+ });
43
+ }
44
+ }, {
45
+ key: "notifyError",
46
+ value: function notifyError(error) {
47
+ this.listeners.forEach(function (onChange) {
48
+ if (onChange.error) {
49
+ onChange.error(error);
50
+ }
51
+ });
52
+ }
53
+ }, {
54
+ key: "notifyInfo",
55
+ value: function notifyInfo(info) {
56
+ this.listeners.forEach(function (onChange) {
57
+ if (onChange.info) {
58
+ onChange.info(info);
13
59
  }
14
- };
15
- AbstractResource.prototype.unsubscribe = function (onChange) {
16
- this.listeners.delete(onChange);
17
- };
18
- AbstractResource.prototype.notifyResult = function (result) {
19
- this.listeners.forEach(function (onChange) {
20
- onChange.result(result);
21
- });
22
- };
23
- AbstractResource.prototype.notifyError = function (error) {
24
- this.listeners.forEach(function (onChange) {
25
- if (onChange.error) {
26
- onChange.error(error);
27
- }
28
- });
29
- };
30
- AbstractResource.prototype.notifyInfo = function (info) {
31
- this.listeners.forEach(function (onChange) {
32
- if (onChange.info) {
33
- onChange.info(info);
34
- }
35
- });
36
- };
37
- AbstractResource.prototype.notifyNotReady = function () {
38
- this.listeners.forEach(function (onChange) {
39
- if (onChange.notReady) {
40
- onChange.notReady();
41
- }
42
- });
43
- };
44
- return AbstractResource;
45
- }());
46
- exports.AbstractResource = AbstractResource;
47
- //# sourceMappingURL=serviceResources.js.map
60
+ });
61
+ }
62
+ }, {
63
+ key: "notifyNotReady",
64
+ value: function notifyNotReady() {
65
+ this.listeners.forEach(function (onChange) {
66
+ if (onChange.notReady) {
67
+ onChange.notReady();
68
+ }
69
+ });
70
+ }
71
+ }]);
72
+ return AbstractResource;
73
+ }();
74
+
75
+ exports.AbstractResource = AbstractResource;
@@ -1,106 +1,147 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
3
8
  exports.requestService = void 0;
4
- var tslib_1 = require("tslib");
5
- var URL = tslib_1.__importStar(require("url"));
6
- var url_search_params_1 = tslib_1.__importDefault(require("url-search-params")); // IE, Safari, Mobile Chrome, Mobile Safari
7
- var types_1 = require("./types");
8
- var URLSearchParams = url_search_params_1.default.default || url_search_params_1.default;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _types = require("./types");
13
+
14
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15
+
16
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
17
+
9
18
  var defaultRequestServiceOptions = {};
10
- var buildUrl = function (baseUrl, path, queryParams, secOptions) {
11
- if (path === void 0) { path = ''; }
12
- var searchParam = new URLSearchParams(URL.parse(baseUrl).search || undefined);
13
- baseUrl = baseUrl.split('?')[0];
14
- if (queryParams) {
15
- for (var key in queryParams) {
16
- if ({}.hasOwnProperty.call(queryParams, key)) {
17
- searchParam.append(key, queryParams[key]);
18
- }
19
- }
19
+
20
+ var buildUrl = function buildUrl(baseUrl) {
21
+ var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
22
+ var queryParams = arguments.length > 2 ? arguments[2] : undefined;
23
+ var secOptions = arguments.length > 3 ? arguments[3] : undefined;
24
+ var searchParam = new URLSearchParams( // For relative urls, the URL class requires base to be set. It's ignored if a url is not relative.
25
+ // Since we only care about search params it is fine to have any base url here.
26
+ new URL(baseUrl, 'https://BASE_FALLBACK').search || undefined);
27
+ baseUrl = baseUrl.split('?')[0];
28
+
29
+ if (queryParams) {
30
+ for (var key in queryParams) {
31
+ if ({}.hasOwnProperty.call(queryParams, key)) {
32
+ searchParam.append(key, queryParams[key]);
33
+ }
20
34
  }
21
- if (secOptions && secOptions.params) {
22
- for (var key in secOptions.params) {
23
- if ({}.hasOwnProperty.call(secOptions.params, key)) {
24
- var values = secOptions.params[key];
25
- if (Array.isArray(values)) {
26
- for (var i = 0; i < values.length; i++) {
27
- searchParam.append(key, values[i]);
28
- }
29
- }
30
- else {
31
- searchParam.append(key, values);
32
- }
33
- }
35
+ }
36
+
37
+ if (secOptions && secOptions.params) {
38
+ for (var _key in secOptions.params) {
39
+ if ({}.hasOwnProperty.call(secOptions.params, _key)) {
40
+ var values = secOptions.params[_key];
41
+
42
+ if (Array.isArray(values)) {
43
+ for (var i = 0; i < values.length; i++) {
44
+ searchParam.append(_key, values[i]);
45
+ }
46
+ } else {
47
+ searchParam.append(_key, values);
34
48
  }
49
+ }
35
50
  }
36
- var seperator = '';
37
- if (path && baseUrl.substr(-1) !== '/') {
38
- seperator = '/';
39
- }
40
- var params = searchParam.toString();
41
- if (params) {
42
- params = '?' + params;
43
- }
44
- return "" + baseUrl + seperator + path + params;
51
+ }
52
+
53
+ var separator = '';
54
+
55
+ if (path && baseUrl.substr(-1) !== '/' && !path.startsWith('/')) {
56
+ separator = '/';
57
+ }
58
+
59
+ var params = searchParam.toString();
60
+
61
+ if (params) {
62
+ params = '?' + params;
63
+ }
64
+
65
+ return "".concat(baseUrl).concat(separator).concat(path).concat(params);
45
66
  };
46
- var addToHeaders = function (headers, keyValues) {
47
- if (keyValues) {
48
- for (var key in keyValues) {
49
- if ({}.hasOwnProperty.call(keyValues, key)) {
50
- var values = keyValues[key];
51
- if (Array.isArray(values)) {
52
- for (var i = 0; i < values.length; i++) {
53
- headers[key] = values[i];
54
- }
55
- }
56
- else {
57
- headers[key] = values;
58
- }
59
- }
67
+
68
+ var addToHeaders = function addToHeaders(headers, keyValues) {
69
+ if (keyValues) {
70
+ for (var key in keyValues) {
71
+ if ({}.hasOwnProperty.call(keyValues, key)) {
72
+ var values = keyValues[key];
73
+
74
+ if (Array.isArray(values)) {
75
+ for (var i = 0; i < values.length; i++) {
76
+ headers[key] = values[i];
77
+ }
78
+ } else {
79
+ headers[key] = values;
60
80
  }
81
+ }
61
82
  }
83
+ }
62
84
  };
63
- var buildHeaders = function (secOptions, extraHeaders) {
64
- var headers = {};
65
- addToHeaders(headers, extraHeaders);
66
- if (secOptions) {
67
- addToHeaders(headers, secOptions.headers);
68
- }
69
- return headers;
85
+
86
+ var buildHeaders = function buildHeaders(secOptions, extraHeaders) {
87
+ var headers = {};
88
+ addToHeaders(headers, extraHeaders);
89
+
90
+ if (secOptions) {
91
+ addToHeaders(headers, secOptions.headers);
92
+ }
93
+
94
+ return headers;
70
95
  };
71
96
  /**
72
97
  * @returns Promise containing the json response
73
98
  */
74
- exports.requestService = function (serviceConfig, options) {
75
- var url = serviceConfig.url, securityProvider = serviceConfig.securityProvider, refreshedSecurityProvider = serviceConfig.refreshedSecurityProvider;
76
- var _a = options || defaultRequestServiceOptions, path = _a.path, queryParams = _a.queryParams, requestInit = _a.requestInit;
77
- var secOptions = securityProvider && securityProvider();
78
- var requestUrl = buildUrl(url, path, queryParams, secOptions);
79
- var headers = buildHeaders(secOptions, requestInit && requestInit.headers);
80
- var credentials = types_1.buildCredentials(secOptions);
81
- var requestOptions = tslib_1.__assign(tslib_1.__assign({}, requestInit), { headers: headers,
82
- credentials: credentials });
83
- return fetch(requestUrl, requestOptions).then(function (response) {
84
- if (response.status === 204) {
85
- return Promise.resolve();
86
- }
87
- else if (response.ok) {
88
- return response.json();
89
- }
90
- else if (response.status === 401 && refreshedSecurityProvider) {
91
- // auth issue - try once
92
- return refreshedSecurityProvider().then(function (newSecOptions) {
93
- var retryServiceConfig = {
94
- url: url,
95
- securityProvider: function () { return newSecOptions; },
96
- };
97
- return exports.requestService(retryServiceConfig, options);
98
- });
99
- }
100
- return Promise.reject({
101
- code: response.status,
102
- reason: response.statusText,
103
- });
99
+
100
+
101
+ var requestService = function requestService(serviceConfig, options) {
102
+ var url = serviceConfig.url,
103
+ securityProvider = serviceConfig.securityProvider,
104
+ refreshedSecurityProvider = serviceConfig.refreshedSecurityProvider;
105
+
106
+ var _ref = options || defaultRequestServiceOptions,
107
+ path = _ref.path,
108
+ queryParams = _ref.queryParams,
109
+ requestInit = _ref.requestInit;
110
+
111
+ var secOptions = securityProvider && securityProvider();
112
+ var requestUrl = buildUrl(url, path, queryParams, secOptions);
113
+ var headers = buildHeaders(secOptions, requestInit && requestInit.headers);
114
+ var credentials = (0, _types.buildCredentials)(secOptions);
115
+ var ignoreResponsePayload = (options === null || options === void 0 ? void 0 : options.ignoreResponsePayload) || false;
116
+
117
+ var requestOptions = _objectSpread(_objectSpread({}, requestInit), {}, {
118
+ headers: headers,
119
+ credentials: credentials
120
+ });
121
+
122
+ return fetch(requestUrl, requestOptions).then(function (response) {
123
+ if (response.status === 204) {
124
+ return Promise.resolve();
125
+ } else if (response.ok) {
126
+ return ignoreResponsePayload ? Promise.resolve() : response.json();
127
+ } else if (response.status === 401 && refreshedSecurityProvider) {
128
+ // auth issue - try once
129
+ return refreshedSecurityProvider().then(function (newSecOptions) {
130
+ var retryServiceConfig = {
131
+ url: url,
132
+ securityProvider: function securityProvider() {
133
+ return newSecOptions;
134
+ }
135
+ };
136
+ return requestService(retryServiceConfig, options);
137
+ });
138
+ }
139
+
140
+ return Promise.reject({
141
+ code: response.status,
142
+ reason: response.statusText
104
143
  });
144
+ });
105
145
  };
106
- //# sourceMappingURL=serviceUtils.js.map
146
+
147
+ exports.requestService = requestService;
package/dist/cjs/types.js CHANGED
@@ -1,7 +1,26 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
3
6
  exports.buildCredentials = void 0;
4
- exports.buildCredentials = function (secOptions) {
5
- return secOptions && secOptions.omitCredentials ? 'omit' : 'include';
7
+
8
+ /**
9
+ * Defines a typical Resource.
10
+ *
11
+ * Q = query type
12
+ * R = result type
13
+ * E = error type
14
+ * I = info type
15
+ * O = options that filter can accept
16
+ */
17
+ var buildCredentials = function buildCredentials(secOptions) {
18
+ return secOptions && secOptions.omitCredentials ? 'omit' : 'include';
6
19
  };
7
- //# sourceMappingURL=types.js.map
20
+ /**
21
+ * Returns a promise to a SecurityOptions that has just been forcibly refreshed with a
22
+ * new token. Will be used for single retry per request if a 401 is returned.
23
+ */
24
+
25
+
26
+ exports.buildCredentials = buildCredentials;
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/util-service-support",
3
- "version": "6.0.2"
3
+ "version": "6.1.0"
4
4
  }
@@ -1,5 +1,4 @@
1
1
  export * from './types';
2
2
  export * from './serviceResources';
3
3
  import * as serviceUtils from './serviceUtils';
4
- export const utils = serviceUtils;
5
- //# sourceMappingURL=index.js.map
4
+ export const utils = serviceUtils;
@@ -1,42 +1,50 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
1
2
  export class AbstractResource {
2
- constructor() {
3
- this.listeners = new Set();
3
+ constructor() {
4
+ _defineProperty(this, "listeners", new Set());
5
+ }
6
+
7
+ subscribe(onChange) {
8
+ this.listeners.add(onChange);
9
+
10
+ if (this.lastResult) {
11
+ // Notify subscribe of last result (i.e. initial state)
12
+ onChange.result(this.lastResult);
4
13
  }
5
- subscribe(onChange) {
6
- this.listeners.add(onChange);
7
- if (this.lastResult) {
8
- // Notify subscribe of last result (i.e. initial state)
9
- onChange.result(this.lastResult);
10
- }
11
- }
12
- unsubscribe(onChange) {
13
- this.listeners.delete(onChange);
14
- }
15
- notifyResult(result) {
16
- this.listeners.forEach(onChange => {
17
- onChange.result(result);
18
- });
19
- }
20
- notifyError(error) {
21
- this.listeners.forEach(onChange => {
22
- if (onChange.error) {
23
- onChange.error(error);
24
- }
25
- });
26
- }
27
- notifyInfo(info) {
28
- this.listeners.forEach(onChange => {
29
- if (onChange.info) {
30
- onChange.info(info);
31
- }
32
- });
33
- }
34
- notifyNotReady() {
35
- this.listeners.forEach(onChange => {
36
- if (onChange.notReady) {
37
- onChange.notReady();
38
- }
39
- });
40
- }
41
- }
42
- //# sourceMappingURL=serviceResources.js.map
14
+ }
15
+
16
+ unsubscribe(onChange) {
17
+ this.listeners.delete(onChange);
18
+ }
19
+
20
+ notifyResult(result) {
21
+ this.listeners.forEach(onChange => {
22
+ onChange.result(result);
23
+ });
24
+ }
25
+
26
+ notifyError(error) {
27
+ this.listeners.forEach(onChange => {
28
+ if (onChange.error) {
29
+ onChange.error(error);
30
+ }
31
+ });
32
+ }
33
+
34
+ notifyInfo(info) {
35
+ this.listeners.forEach(onChange => {
36
+ if (onChange.info) {
37
+ onChange.info(info);
38
+ }
39
+ });
40
+ }
41
+
42
+ notifyNotReady() {
43
+ this.listeners.forEach(onChange => {
44
+ if (onChange.notReady) {
45
+ onChange.notReady();
46
+ }
47
+ });
48
+ }
49
+
50
+ }