@atlaskit/mention 27.17.1 → 27.18.1
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.
- package/CHANGELOG.md +40 -0
- package/dist/cjs/api/AbstractMentionResource.js +111 -0
- package/dist/cjs/api/AbstractPresenceResource.js +41 -0
- package/dist/cjs/api/AbstractResource.js +48 -0
- package/dist/cjs/api/Callback.js +5 -0
- package/dist/cjs/api/DefaultMentionNameResolver.js +178 -0
- package/dist/cjs/api/DefaultPresenceCache.js +159 -0
- package/dist/cjs/api/DefaultPresenceParser.js +91 -0
- package/dist/cjs/api/HttpError.js +16 -0
- package/dist/cjs/api/MentionNameResolver.js +13 -201
- package/dist/cjs/api/MentionResource.js +52 -157
- package/dist/cjs/api/PresenceResource.js +39 -263
- package/dist/cjs/api/Queue.js +5 -0
- package/dist/cjs/api/isResolvingMentionProvider.js +9 -0
- package/dist/cjs/api/mergeNameResolverQueues.js +36 -0
- package/dist/cjs/components/Mention/MentionInternal.js +247 -0
- package/dist/cjs/components/Mention/ResourcedMention.js +5 -4
- package/dist/cjs/components/Mention/index.js +29 -243
- package/dist/cjs/components/MentionAvatar/index.js +5 -4
- package/dist/cjs/components/MentionItem/index.js +18 -12
- package/dist/cjs/components/MentionList/index.js +4 -3
- package/dist/cjs/components/MentionPicker/MentionPicker.js +231 -0
- package/dist/cjs/components/MentionPicker/index.js +18 -225
- package/dist/cjs/components/MessagesIntlProvider/index.js +2 -2
- package/dist/cjs/components/ResourcedMentionList/ResourcedMentionListWithoutAnalytics.js +228 -0
- package/dist/cjs/components/ResourcedMentionList/index.js +14 -223
- package/dist/cjs/index.js +17 -15
- package/dist/cjs/is-agent-mention.js +12 -0
- package/dist/cjs/is-app-mention.js +10 -0
- package/dist/cjs/is-promise.js +9 -0
- package/dist/cjs/is-restricted.js +10 -0
- package/dist/cjs/is-special-mention-text.js +9 -0
- package/dist/cjs/is-special-mention.js +10 -0
- package/dist/cjs/is-team-mention.js +10 -0
- package/dist/cjs/resource.js +15 -12
- package/dist/cjs/team-resource.js +9 -9
- package/dist/cjs/typeahead.js +4 -0
- package/dist/cjs/types.js +71 -30
- package/dist/cjs/util/actual-mouse-move.js +14 -0
- package/dist/cjs/util/analytics.js +91 -107
- package/dist/cjs/util/build-sli-payload.js +27 -0
- package/dist/cjs/util/fire-analytics-mention-event.js +32 -0
- package/dist/cjs/util/fire-analytics-mention-hydration-event.js +33 -0
- package/dist/cjs/util/fire-analytics-mention-typeahead-event.js +34 -0
- package/dist/cjs/util/fire-analytics.js +18 -0
- package/dist/cjs/util/fire-sli-analytics-event.js +16 -0
- package/dist/cjs/util/get-messages-for-locale.js +233 -0
- package/dist/cjs/util/i18n.js +9 -254
- package/dist/cjs/util/left-click.js +9 -0
- package/dist/cjs/util/mouse-location.js +12 -0
- package/dist/cjs/util/mouse.js +1 -26
- package/dist/cjs/util/package-name.js +7 -0
- package/dist/cjs/util/package-version.js +7 -0
- package/dist/cjs/util/prop-formatter.js +25 -0
- package/dist/es2019/api/AbstractMentionResource.js +73 -0
- package/dist/es2019/api/AbstractPresenceResource.js +17 -0
- package/dist/es2019/api/AbstractResource.js +33 -0
- package/dist/es2019/api/Callback.js +1 -0
- package/dist/es2019/api/DefaultMentionNameResolver.js +152 -0
- package/dist/es2019/api/DefaultPresenceCache.js +111 -0
- package/dist/es2019/api/DefaultPresenceParser.js +58 -0
- package/dist/es2019/api/HttpError.js +8 -0
- package/dist/es2019/api/MentionNameResolver.js +13 -176
- package/dist/es2019/api/MentionResource.js +28 -122
- package/dist/es2019/api/PresenceResource.js +19 -185
- package/dist/es2019/api/Queue.js +1 -0
- package/dist/es2019/api/isResolvingMentionProvider.js +1 -0
- package/dist/es2019/api/mergeNameResolverQueues.js +25 -0
- package/dist/es2019/components/Mention/MentionInternal.js +225 -0
- package/dist/es2019/components/Mention/ResourcedMention.js +4 -3
- package/dist/es2019/components/Mention/index.js +19 -223
- package/dist/es2019/components/MentionAvatar/index.js +3 -2
- package/dist/es2019/components/MentionItem/index.js +14 -8
- package/dist/es2019/components/MentionList/index.js +2 -1
- package/dist/es2019/components/MentionPicker/MentionPicker.js +198 -0
- package/dist/es2019/components/MentionPicker/index.js +15 -198
- package/dist/es2019/components/MessagesIntlProvider/index.js +1 -1
- package/dist/es2019/components/ResourcedMentionList/ResourcedMentionListWithoutAnalytics.js +187 -0
- package/dist/es2019/components/ResourcedMentionList/index.js +9 -187
- package/dist/es2019/element.js +5 -0
- package/dist/es2019/index.js +13 -9
- package/dist/es2019/is-agent-mention.js +6 -0
- package/dist/es2019/is-app-mention.js +4 -0
- package/dist/es2019/is-promise.js +1 -0
- package/dist/es2019/is-restricted.js +4 -0
- package/dist/es2019/is-special-mention-text.js +3 -0
- package/dist/es2019/is-special-mention.js +4 -0
- package/dist/es2019/is-team-mention.js +4 -0
- package/dist/es2019/item.js +5 -0
- package/dist/es2019/resource.js +15 -5
- package/dist/es2019/team-resource.js +10 -4
- package/dist/es2019/typeahead.js +5 -0
- package/dist/es2019/types.js +30 -21
- package/dist/es2019/util/actual-mouse-move.js +8 -0
- package/dist/es2019/util/analytics.js +35 -91
- package/dist/es2019/util/build-sli-payload.js +18 -0
- package/dist/es2019/util/fire-analytics-mention-event.js +24 -0
- package/dist/es2019/util/fire-analytics-mention-hydration-event.js +25 -0
- package/dist/es2019/util/fire-analytics-mention-typeahead-event.js +24 -0
- package/dist/es2019/util/fire-analytics.js +10 -0
- package/dist/es2019/util/fire-sli-analytics-event.js +8 -0
- package/dist/es2019/util/get-messages-for-locale.js +145 -0
- package/dist/es2019/util/i18n.js +2 -165
- package/dist/es2019/util/left-click.js +3 -0
- package/dist/es2019/util/mouse-location.js +6 -0
- package/dist/es2019/util/mouse.js +0 -18
- package/dist/es2019/util/package-name.js +1 -0
- package/dist/es2019/util/package-version.js +1 -0
- package/dist/es2019/util/prop-formatter.js +18 -0
- package/dist/esm/api/AbstractMentionResource.js +104 -0
- package/dist/esm/api/AbstractPresenceResource.js +34 -0
- package/dist/esm/api/AbstractResource.js +41 -0
- package/dist/esm/api/Callback.js +1 -0
- package/dist/esm/api/DefaultMentionNameResolver.js +171 -0
- package/dist/esm/api/DefaultPresenceCache.js +152 -0
- package/dist/esm/api/DefaultPresenceParser.js +84 -0
- package/dist/esm/api/HttpError.js +9 -0
- package/dist/esm/api/MentionNameResolver.js +13 -198
- package/dist/esm/api/MentionResource.js +30 -154
- package/dist/esm/api/PresenceResource.js +22 -256
- package/dist/esm/api/Queue.js +1 -0
- package/dist/esm/api/isResolvingMentionProvider.js +3 -0
- package/dist/esm/api/mergeNameResolverQueues.js +29 -0
- package/dist/esm/components/Mention/MentionInternal.js +242 -0
- package/dist/esm/components/Mention/ResourcedMention.js +4 -3
- package/dist/esm/components/Mention/index.js +19 -240
- package/dist/esm/components/MentionAvatar/index.js +3 -2
- package/dist/esm/components/MentionItem/index.js +14 -8
- package/dist/esm/components/MentionList/index.js +2 -1
- package/dist/esm/components/MentionPicker/MentionPicker.js +225 -0
- package/dist/esm/components/MentionPicker/index.js +15 -225
- package/dist/esm/components/MessagesIntlProvider/index.js +1 -1
- package/dist/esm/components/ResourcedMentionList/ResourcedMentionListWithoutAnalytics.js +221 -0
- package/dist/esm/components/ResourcedMentionList/index.js +9 -221
- package/dist/esm/element.js +5 -0
- package/dist/esm/index.js +13 -9
- package/dist/esm/is-agent-mention.js +6 -0
- package/dist/esm/is-app-mention.js +4 -0
- package/dist/esm/is-promise.js +3 -0
- package/dist/esm/is-restricted.js +4 -0
- package/dist/esm/is-special-mention-text.js +3 -0
- package/dist/esm/is-special-mention.js +4 -0
- package/dist/esm/is-team-mention.js +4 -0
- package/dist/esm/item.js +5 -0
- package/dist/esm/resource.js +15 -5
- package/dist/esm/team-resource.js +10 -4
- package/dist/esm/typeahead.js +5 -0
- package/dist/esm/types.js +30 -23
- package/dist/esm/util/actual-mouse-move.js +8 -0
- package/dist/esm/util/analytics.js +35 -105
- package/dist/esm/util/build-sli-payload.js +20 -0
- package/dist/esm/util/fire-analytics-mention-event.js +26 -0
- package/dist/esm/util/fire-analytics-mention-hydration-event.js +27 -0
- package/dist/esm/util/fire-analytics-mention-typeahead-event.js +28 -0
- package/dist/esm/util/fire-analytics.js +12 -0
- package/dist/esm/util/fire-sli-analytics-event.js +10 -0
- package/dist/esm/util/get-messages-for-locale.js +163 -0
- package/dist/esm/util/i18n.js +2 -183
- package/dist/esm/util/left-click.js +3 -0
- package/dist/esm/util/mouse-location.js +6 -0
- package/dist/esm/util/mouse.js +0 -18
- package/dist/esm/util/package-name.js +1 -0
- package/dist/esm/util/package-version.js +1 -0
- package/dist/esm/util/prop-formatter.js +18 -0
- package/dist/types/api/AbstractMentionResource.d.ts +15 -0
- package/dist/types/api/AbstractPresenceResource.d.ts +6 -0
- package/dist/types/api/AbstractResource.d.ts +11 -0
- package/dist/types/api/Callback.d.ts +4 -0
- package/dist/types/api/DefaultMentionNameResolver.d.ts +27 -0
- package/dist/types/api/DefaultPresenceCache.d.ts +57 -0
- package/dist/types/api/DefaultPresenceParser.d.ts +8 -0
- package/dist/types/api/HttpError.d.ts +7 -0
- package/dist/types/api/MentionNameResolver.d.ts +14 -35
- package/dist/types/api/MentionResource.d.ts +18 -33
- package/dist/types/api/PresenceResource.d.ts +15 -69
- package/dist/types/api/Queue.d.ts +2 -0
- package/dist/types/api/isResolvingMentionProvider.d.ts +2 -0
- package/dist/types/api/mergeNameResolverQueues.d.ts +6 -0
- package/dist/types/components/Mention/MentionInternal.d.ts +27 -0
- package/dist/types/components/Mention/ResourcedMention.d.ts +1 -1
- package/dist/types/components/Mention/index.d.ts +9 -20
- package/dist/types/components/MentionAvatar/index.d.ts +1 -1
- package/dist/types/components/MentionItem/index.d.ts +4 -1
- package/dist/types/components/MentionPicker/MentionPicker.d.ts +46 -0
- package/dist/types/components/MentionPicker/index.d.ts +5 -42
- package/dist/types/components/ResourcedMentionList/ResourcedMentionListWithoutAnalytics.d.ts +30 -0
- package/dist/types/components/ResourcedMentionList/index.d.ts +5 -27
- package/dist/types/element.d.ts +3 -0
- package/dist/types/index.d.ts +15 -10
- package/dist/types/is-agent-mention.d.ts +2 -0
- package/dist/types/is-app-mention.d.ts +2 -0
- package/dist/types/is-promise.d.ts +1 -0
- package/dist/types/is-restricted.d.ts +1 -0
- package/dist/types/is-special-mention-text.d.ts +1 -0
- package/dist/types/is-special-mention.d.ts +2 -0
- package/dist/types/is-team-mention.d.ts +2 -0
- package/dist/types/item.d.ts +3 -0
- package/dist/types/resource.d.ts +15 -6
- package/dist/types/team-resource.d.ts +10 -4
- package/dist/types/typeahead.d.ts +3 -0
- package/dist/types/types.d.ts +28 -8
- package/dist/types/util/actual-mouse-move.d.ts +2 -0
- package/dist/types/util/analytics.d.ts +33 -10
- package/dist/types/util/build-sli-payload.d.ts +4 -0
- package/dist/types/util/fire-analytics-mention-event.d.ts +1 -0
- package/dist/types/util/fire-analytics-mention-hydration-event.d.ts +1 -0
- package/dist/types/util/fire-analytics-mention-typeahead-event.d.ts +1 -0
- package/dist/types/util/fire-analytics.d.ts +1 -0
- package/dist/types/util/fire-sli-analytics-event.d.ts +1 -0
- package/dist/types/util/get-messages-for-locale.d.ts +11 -0
- package/dist/types/util/i18n.d.ts +0 -15
- package/dist/types/util/left-click.d.ts +2 -0
- package/dist/types/util/mouse-location.d.ts +3 -0
- package/dist/types/util/mouse.d.ts +0 -4
- package/dist/types/util/package-name.d.ts +1 -0
- package/dist/types/util/package-version.d.ts +1 -0
- package/dist/types/util/prop-formatter.d.ts +5 -0
- package/package.json +2 -2
- package/dist/cjs/i18n/index.js +0 -216
- package/dist/es2019/i18n/index.js +0 -37
- package/dist/esm/i18n/index.js +0 -37
- package/dist/types/i18n/index.d.ts +0 -37
- /package/dist/cjs/components/Mention/{index.compiled.css → MentionInternal.compiled.css} +0 -0
- /package/dist/es2019/components/Mention/{index.compiled.css → MentionInternal.compiled.css} +0 -0
- /package/dist/esm/components/Mention/{index.compiled.css → MentionInternal.compiled.css} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,45 @@
|
|
|
1
1
|
# @atlaskit/mention
|
|
2
2
|
|
|
3
|
+
## 27.18.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies
|
|
8
|
+
|
|
9
|
+
## 27.18.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- [`febe6719dffd4`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/febe6719dffd4) -
|
|
14
|
+
Apply Volt multi-export standards via `volt-migrate-package`. `@atlaskit/mention` already resolved
|
|
15
|
+
its subpaths directly to `./src/*`, so the `exports` map is **unchanged** — all 24 public subpaths
|
|
16
|
+
keep their existing targets. What changed is the module layout: multi-export modules were split so
|
|
17
|
+
each shippable module owns a single export (for example `api/AbstractResource.ts`,
|
|
18
|
+
`api/DefaultMentionNameResolver.ts`, `api/HttpError.ts`, `is-special-mention.ts`,
|
|
19
|
+
`is-promise.ts`), with `@deprecated` compatibility re-exports left behind on the original module.
|
|
20
|
+
|
|
21
|
+
### No public API was removed
|
|
22
|
+
|
|
23
|
+
Every symbol that moved is still exported from the subpath that previously exposed it, so existing
|
|
24
|
+
imports keep working:
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
// Still valid — no change required, but deprecated
|
|
28
|
+
import { AbstractMentionResource } from '@atlaskit/mention/resource';
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
A few subpaths now expose additional symbols as a result of the split:
|
|
32
|
+
- `./analytics` — `MENTION_ANALYTICS_PREFIX`, `packageName`, `packageVersion`
|
|
33
|
+
- `./mention-name-resolver` — the `Callback` and `Queue` types
|
|
34
|
+
- `./presence-resource` — `PresenceResource` as a named export alongside its default
|
|
35
|
+
|
|
36
|
+
### Note for consumers that mock these modules
|
|
37
|
+
|
|
38
|
+
Internal cross-module imports now point at the split modules rather than the module that used to
|
|
39
|
+
declare everything. If your tests `jest.mock()` a `@atlaskit/mention` subpath to intercept a
|
|
40
|
+
symbol that mention itself consumes internally, the mock may no longer take effect — mock the
|
|
41
|
+
module that now owns the export instead.
|
|
42
|
+
|
|
3
43
|
## 27.17.1
|
|
4
44
|
|
|
5
45
|
### Patch Changes
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.AbstractMentionResource = void 0;
|
|
8
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
11
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
12
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
13
|
+
var _logger = _interopRequireDefault(require("../util/logger"));
|
|
14
|
+
var _AbstractResource2 = require("./AbstractResource");
|
|
15
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
|
|
16
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
17
|
+
var MAX_NOTIFIED_ITEMS = 20;
|
|
18
|
+
var AbstractMentionResource = exports.AbstractMentionResource = /*#__PURE__*/function (_AbstractResource) {
|
|
19
|
+
function AbstractMentionResource() {
|
|
20
|
+
(0, _classCallCheck2.default)(this, AbstractMentionResource);
|
|
21
|
+
return _callSuper(this, AbstractMentionResource, arguments);
|
|
22
|
+
}
|
|
23
|
+
(0, _inherits2.default)(AbstractMentionResource, _AbstractResource);
|
|
24
|
+
return (0, _createClass2.default)(AbstractMentionResource, [{
|
|
25
|
+
key: "shouldHighlightMention",
|
|
26
|
+
value: function shouldHighlightMention(_mention) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// eslint-disable-next-line class-methods-use-this
|
|
31
|
+
}, {
|
|
32
|
+
key: "filter",
|
|
33
|
+
value: function filter(query) {
|
|
34
|
+
throw new Error("not yet implemented.\nParams: query=".concat(query));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// eslint-disable-next-line class-methods-use-this, no-unused-vars
|
|
38
|
+
}, {
|
|
39
|
+
key: "recordMentionSelection",
|
|
40
|
+
value: function recordMentionSelection(_mention) {
|
|
41
|
+
// Do nothing
|
|
42
|
+
}
|
|
43
|
+
}, {
|
|
44
|
+
key: "isFiltering",
|
|
45
|
+
value: function isFiltering(_query) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}, {
|
|
49
|
+
key: "_notifyListeners",
|
|
50
|
+
value: function _notifyListeners(mentionsResult, stats) {
|
|
51
|
+
(0, _logger.default)('ak-mention-resource._notifyListeners', mentionsResult && mentionsResult.mentions && mentionsResult.mentions.length, this.changeListeners);
|
|
52
|
+
this.changeListeners.forEach(function (listener, key) {
|
|
53
|
+
try {
|
|
54
|
+
listener(mentionsResult.mentions.slice(0, MAX_NOTIFIED_ITEMS), mentionsResult.query, stats);
|
|
55
|
+
} catch (e) {
|
|
56
|
+
// ignore error from listener
|
|
57
|
+
(0, _logger.default)("error from listener '".concat(key, "', ignoring"), e);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}, {
|
|
62
|
+
key: "_notifyAllResultsListeners",
|
|
63
|
+
value: function _notifyAllResultsListeners(mentionsResult) {
|
|
64
|
+
(0, _logger.default)('ak-mention-resource._notifyAllResultsListeners', mentionsResult && mentionsResult.mentions && mentionsResult.mentions.length, this.changeListeners);
|
|
65
|
+
this.allResultsListeners.forEach(function (listener, key) {
|
|
66
|
+
try {
|
|
67
|
+
listener(mentionsResult.mentions.slice(0, MAX_NOTIFIED_ITEMS), mentionsResult.query);
|
|
68
|
+
} catch (e) {
|
|
69
|
+
// ignore error from listener
|
|
70
|
+
(0, _logger.default)("error from listener '".concat(key, "', ignoring"), e);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}, {
|
|
75
|
+
key: "_notifyErrorListeners",
|
|
76
|
+
value: function _notifyErrorListeners(error, query) {
|
|
77
|
+
this.errListeners.forEach(function (listener, key) {
|
|
78
|
+
try {
|
|
79
|
+
listener(error, query);
|
|
80
|
+
} catch (e) {
|
|
81
|
+
// ignore error from listener
|
|
82
|
+
(0, _logger.default)("error from listener '".concat(key, "', ignoring"), e);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}, {
|
|
87
|
+
key: "_notifyInfoListeners",
|
|
88
|
+
value: function _notifyInfoListeners(info) {
|
|
89
|
+
this.infoListeners.forEach(function (listener, key) {
|
|
90
|
+
try {
|
|
91
|
+
listener(info);
|
|
92
|
+
} catch (e) {
|
|
93
|
+
// ignore error fromr listener
|
|
94
|
+
(0, _logger.default)("error from listener '".concat(key, "', ignoring"), e);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}, {
|
|
99
|
+
key: "_notifyAnalyticsListeners",
|
|
100
|
+
value: function _notifyAnalyticsListeners(event, actionSubject, action, attributes) {
|
|
101
|
+
this.analyticsListeners.forEach(function (listener, key) {
|
|
102
|
+
try {
|
|
103
|
+
listener(event, actionSubject, action, attributes);
|
|
104
|
+
} catch (e) {
|
|
105
|
+
// ignore error from listener
|
|
106
|
+
(0, _logger.default)("error from listener '".concat(key, "', ignoring"), e);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}]);
|
|
111
|
+
}(_AbstractResource2.AbstractResource);
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.AbstractPresenceResource = void 0;
|
|
8
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
11
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
12
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
13
|
+
var _logger = _interopRequireDefault(require("../util/logger"));
|
|
14
|
+
var _AbstractResource2 = require("./AbstractResource");
|
|
15
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
|
|
16
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
17
|
+
var AbstractPresenceResource = exports.AbstractPresenceResource = /*#__PURE__*/function (_AbstractResource) {
|
|
18
|
+
function AbstractPresenceResource() {
|
|
19
|
+
(0, _classCallCheck2.default)(this, AbstractPresenceResource);
|
|
20
|
+
return _callSuper(this, AbstractPresenceResource, arguments);
|
|
21
|
+
}
|
|
22
|
+
(0, _inherits2.default)(AbstractPresenceResource, _AbstractResource);
|
|
23
|
+
return (0, _createClass2.default)(AbstractPresenceResource, [{
|
|
24
|
+
key: "refreshPresence",
|
|
25
|
+
value: function refreshPresence(userIds) {
|
|
26
|
+
throw new Error("not yet implemented.\nParams: userIds=".concat(userIds));
|
|
27
|
+
}
|
|
28
|
+
}, {
|
|
29
|
+
key: "notifyListeners",
|
|
30
|
+
value: function notifyListeners(presences) {
|
|
31
|
+
this.changeListeners.forEach(function (listener, key) {
|
|
32
|
+
try {
|
|
33
|
+
listener(presences);
|
|
34
|
+
} catch (e) {
|
|
35
|
+
// ignore error from listener
|
|
36
|
+
(0, _logger.default)("error from listener '".concat(key, "', ignoring"), e);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}]);
|
|
41
|
+
}(_AbstractResource2.AbstractResource);
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.AbstractResource = void 0;
|
|
8
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
|
+
var AbstractResource = exports.AbstractResource = /*#__PURE__*/function () {
|
|
11
|
+
function AbstractResource() {
|
|
12
|
+
(0, _classCallCheck2.default)(this, AbstractResource);
|
|
13
|
+
this.changeListeners = new Map();
|
|
14
|
+
this.allResultsListeners = new Map();
|
|
15
|
+
this.errListeners = new Map();
|
|
16
|
+
this.infoListeners = new Map();
|
|
17
|
+
this.analyticsListeners = new Map();
|
|
18
|
+
}
|
|
19
|
+
return (0, _createClass2.default)(AbstractResource, [{
|
|
20
|
+
key: "subscribe",
|
|
21
|
+
value: function subscribe(key, callback, errCallback, infoCallback, allResultsCallback, analyticsListeners) {
|
|
22
|
+
if (callback) {
|
|
23
|
+
this.changeListeners.set(key, callback);
|
|
24
|
+
}
|
|
25
|
+
if (errCallback) {
|
|
26
|
+
this.errListeners.set(key, errCallback);
|
|
27
|
+
}
|
|
28
|
+
if (infoCallback) {
|
|
29
|
+
this.infoListeners.set(key, infoCallback);
|
|
30
|
+
}
|
|
31
|
+
if (allResultsCallback) {
|
|
32
|
+
this.allResultsListeners.set(key, allResultsCallback);
|
|
33
|
+
}
|
|
34
|
+
if (analyticsListeners) {
|
|
35
|
+
this.analyticsListeners.set(key, analyticsListeners);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}, {
|
|
39
|
+
key: "unsubscribe",
|
|
40
|
+
value: function unsubscribe(key) {
|
|
41
|
+
this.changeListeners.delete(key);
|
|
42
|
+
this.errListeners.delete(key);
|
|
43
|
+
this.infoListeners.delete(key);
|
|
44
|
+
this.allResultsListeners.delete(key);
|
|
45
|
+
this.analyticsListeners.delete(key);
|
|
46
|
+
}
|
|
47
|
+
}]);
|
|
48
|
+
}();
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.DefaultMentionNameResolver = void 0;
|
|
8
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
10
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
11
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
|
+
var _types = require("../types");
|
|
13
|
+
var _fireAnalyticsMentionHydrationEvent = require("../util/fire-analytics-mention-hydration-event");
|
|
14
|
+
var _mergeNameResolverQueues = require("./mergeNameResolverQueues");
|
|
15
|
+
var DefaultMentionNameResolver = exports.DefaultMentionNameResolver = /*#__PURE__*/function () {
|
|
16
|
+
function DefaultMentionNameResolver(client) {
|
|
17
|
+
var _this = this;
|
|
18
|
+
var analyticsProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
19
|
+
var onResolvedAll = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
|
|
20
|
+
(0, _classCallCheck2.default)(this, DefaultMentionNameResolver);
|
|
21
|
+
(0, _defineProperty2.default)(this, "nameCache", new Map());
|
|
22
|
+
(0, _defineProperty2.default)(this, "nameQueue", new Map());
|
|
23
|
+
(0, _defineProperty2.default)(this, "nameStartTime", new Map());
|
|
24
|
+
(0, _defineProperty2.default)(this, "processingQueue", new Map());
|
|
25
|
+
(0, _defineProperty2.default)(this, "debounce", 0);
|
|
26
|
+
(0, _defineProperty2.default)(this, "debounceOnResolve", null);
|
|
27
|
+
(0, _defineProperty2.default)(this, "isOnResolvedAllCalled", false);
|
|
28
|
+
(0, _defineProperty2.default)(this, "processQueue", function () {
|
|
29
|
+
clearTimeout(_this.debounce);
|
|
30
|
+
_this.debounce = 0;
|
|
31
|
+
var _this$splitQueueAtLim = _this.splitQueueAtLimit(),
|
|
32
|
+
queue = _this$splitQueueAtLim.queue,
|
|
33
|
+
extraQueue = _this$splitQueueAtLim.extraQueue;
|
|
34
|
+
_this.nameQueue = extraQueue;
|
|
35
|
+
_this.processingQueue = (0, _mergeNameResolverQueues.mergeNameResolverQueues)(_this.processingQueue, queue);
|
|
36
|
+
_this.client.lookupMentionNames(Array.from(queue.keys())).then(function (response) {
|
|
37
|
+
response.forEach(function (mentionDetail) {
|
|
38
|
+
var id = mentionDetail.id;
|
|
39
|
+
queue.delete(id);
|
|
40
|
+
_this.resolveQueueItem(mentionDetail);
|
|
41
|
+
});
|
|
42
|
+
queue.forEach(function (_callback, id) {
|
|
43
|
+
// No response from client for these ids treat as unknown
|
|
44
|
+
_this.resolveQueueItem({
|
|
45
|
+
id: id,
|
|
46
|
+
status: _types.MentionNameStatus.UNKNOWN
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}).catch(function () {
|
|
50
|
+
// Service completely failed, reject all items in the queue
|
|
51
|
+
queue.forEach(function (_callback, id) {
|
|
52
|
+
_this.resolveQueueItem({
|
|
53
|
+
id: id,
|
|
54
|
+
status: _types.MentionNameStatus.SERVICE_ERROR
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
// Make sure anything left in the queue gets processed.
|
|
60
|
+
if (_this.nameQueue.size > 0) {
|
|
61
|
+
_this.scheduleProcessQueue();
|
|
62
|
+
} else {
|
|
63
|
+
_this.scheduleOnAllResolved();
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
this.client = client;
|
|
67
|
+
this.fireHydrationEvent = (0, _fireAnalyticsMentionHydrationEvent.fireAnalyticsMentionHydrationEvent)(analyticsProps);
|
|
68
|
+
// If provided, this will be called once all pending mentions in the queue are resolved.
|
|
69
|
+
// A sample usage is scrolling to a mention on page load, after the mentions have loadad.
|
|
70
|
+
this.onResolvedAll = onResolvedAll;
|
|
71
|
+
}
|
|
72
|
+
return (0, _createClass2.default)(DefaultMentionNameResolver, [{
|
|
73
|
+
key: "lookupName",
|
|
74
|
+
value: function lookupName(id) {
|
|
75
|
+
var _this2 = this;
|
|
76
|
+
var name = this.nameCache.get(id);
|
|
77
|
+
if (name) {
|
|
78
|
+
this.fireAnalytics(true, name);
|
|
79
|
+
if (this.nameQueue.size === 0) {
|
|
80
|
+
this.scheduleOnAllResolved();
|
|
81
|
+
}
|
|
82
|
+
return name;
|
|
83
|
+
}
|
|
84
|
+
return new Promise(function (resolve) {
|
|
85
|
+
var processingItems = _this2.processingQueue.get(id);
|
|
86
|
+
if (processingItems) {
|
|
87
|
+
_this2.processingQueue.set(id, [].concat((0, _toConsumableArray2.default)(processingItems), [resolve]));
|
|
88
|
+
}
|
|
89
|
+
var queuedItems = _this2.nameQueue.get(id) || [];
|
|
90
|
+
_this2.nameQueue.set(id, [].concat((0, _toConsumableArray2.default)(queuedItems), [resolve]));
|
|
91
|
+
if (queuedItems.length === 0 && !processingItems) {
|
|
92
|
+
_this2.nameStartTime.set(id, Date.now());
|
|
93
|
+
}
|
|
94
|
+
_this2.scheduleProcessQueue();
|
|
95
|
+
if (_this2.isQueueAtLimit()) {
|
|
96
|
+
_this2.processQueue();
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}, {
|
|
101
|
+
key: "cacheName",
|
|
102
|
+
value: function cacheName(id, name) {
|
|
103
|
+
this.nameCache.set(id, {
|
|
104
|
+
id: id,
|
|
105
|
+
name: name,
|
|
106
|
+
status: _types.MentionNameStatus.OK
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}, {
|
|
110
|
+
key: "scheduleProcessQueue",
|
|
111
|
+
value: function scheduleProcessQueue() {
|
|
112
|
+
if (!this.debounce) {
|
|
113
|
+
this.debounce = window.setTimeout(this.processQueue, DefaultMentionNameResolver.waitForBatch);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}, {
|
|
117
|
+
key: "scheduleOnAllResolved",
|
|
118
|
+
value: function scheduleOnAllResolved() {
|
|
119
|
+
var _this3 = this;
|
|
120
|
+
if (this.debounceOnResolve) {
|
|
121
|
+
clearTimeout(this.debounceOnResolve);
|
|
122
|
+
}
|
|
123
|
+
this.debounceOnResolve = window.setTimeout(function () {
|
|
124
|
+
if (_this3.isOnResolvedAllCalled) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
_this3.onResolvedAll();
|
|
128
|
+
_this3.isOnResolvedAllCalled = true;
|
|
129
|
+
}, DefaultMentionNameResolver.waitForResolveAll);
|
|
130
|
+
}
|
|
131
|
+
}, {
|
|
132
|
+
key: "isQueueAtLimit",
|
|
133
|
+
value: function isQueueAtLimit() {
|
|
134
|
+
return this.nameQueue.size >= this.client.getLookupLimit();
|
|
135
|
+
}
|
|
136
|
+
}, {
|
|
137
|
+
key: "splitQueueAtLimit",
|
|
138
|
+
value: function splitQueueAtLimit() {
|
|
139
|
+
var values = Array.from(this.nameQueue.entries());
|
|
140
|
+
var splitPoint = this.client.getLookupLimit();
|
|
141
|
+
return {
|
|
142
|
+
queue: new Map(values.slice(0, splitPoint)),
|
|
143
|
+
extraQueue: new Map(values.slice(splitPoint))
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
}, {
|
|
147
|
+
key: "resolveQueueItem",
|
|
148
|
+
value: function resolveQueueItem(mentionDetail) {
|
|
149
|
+
var id = mentionDetail.id;
|
|
150
|
+
var resolvers = this.processingQueue.get(id);
|
|
151
|
+
if (resolvers) {
|
|
152
|
+
this.processingQueue.delete(id);
|
|
153
|
+
this.nameCache.set(id, mentionDetail);
|
|
154
|
+
resolvers.forEach(function (resolve) {
|
|
155
|
+
try {
|
|
156
|
+
resolve(mentionDetail);
|
|
157
|
+
} catch (_unused) {
|
|
158
|
+
// ignore - exception in consumer
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
this.fireAnalytics(false, mentionDetail);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}, {
|
|
165
|
+
key: "fireAnalytics",
|
|
166
|
+
value: function fireAnalytics(fromCache, mentionDetail) {
|
|
167
|
+
var id = mentionDetail.id;
|
|
168
|
+
var action = mentionDetail.status === _types.MentionNameStatus.OK ? 'completed' : 'failed';
|
|
169
|
+
var start = this.nameStartTime.get(id);
|
|
170
|
+
var duration = start ? Date.now() - start : 0;
|
|
171
|
+
this.nameStartTime.delete(id);
|
|
172
|
+
this.fireHydrationEvent(action, id, fromCache, duration);
|
|
173
|
+
}
|
|
174
|
+
}]);
|
|
175
|
+
}();
|
|
176
|
+
(0, _defineProperty2.default)(DefaultMentionNameResolver, "waitForBatch", 100);
|
|
177
|
+
// ms
|
|
178
|
+
(0, _defineProperty2.default)(DefaultMentionNameResolver, "waitForResolveAll", 800);
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.DefaultPresenceCache = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
10
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
11
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
12
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
13
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
14
|
+
var CacheEntry = /*#__PURE__*/function () {
|
|
15
|
+
function CacheEntry(pres, timeout) {
|
|
16
|
+
(0, _classCallCheck2.default)(this, CacheEntry);
|
|
17
|
+
this.presence = pres;
|
|
18
|
+
this.expiry = Date.now() + timeout;
|
|
19
|
+
}
|
|
20
|
+
return (0, _createClass2.default)(CacheEntry, [{
|
|
21
|
+
key: "expired",
|
|
22
|
+
value: function expired() {
|
|
23
|
+
return Date.now() > this.expiry;
|
|
24
|
+
}
|
|
25
|
+
}]);
|
|
26
|
+
}();
|
|
27
|
+
var DefaultPresenceCache = exports.DefaultPresenceCache = /*#__PURE__*/function () {
|
|
28
|
+
function DefaultPresenceCache(cacheTimeout, cacheTrigger) {
|
|
29
|
+
(0, _classCallCheck2.default)(this, DefaultPresenceCache);
|
|
30
|
+
this.expiryInMillis = cacheTimeout ? cacheTimeout : DefaultPresenceCache.defaultTimeout;
|
|
31
|
+
this.flushTrigger = cacheTrigger ? cacheTrigger : DefaultPresenceCache.defaultFlushTrigger;
|
|
32
|
+
this.cache = {};
|
|
33
|
+
this.size = 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Precondition: _delete is only called internally if userId exists in cache
|
|
38
|
+
* Removes cache entry
|
|
39
|
+
* @param userId
|
|
40
|
+
*/
|
|
41
|
+
return (0, _createClass2.default)(DefaultPresenceCache, [{
|
|
42
|
+
key: "_delete",
|
|
43
|
+
value: function _delete(userId) {
|
|
44
|
+
delete this.cache[userId];
|
|
45
|
+
this.size--;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Checks a cache entry and calls delete if the info has expired
|
|
50
|
+
* @param userId
|
|
51
|
+
*/
|
|
52
|
+
}, {
|
|
53
|
+
key: "_deleteIfExpired",
|
|
54
|
+
value: function _deleteIfExpired(userId) {
|
|
55
|
+
if (this.contains(userId) && this.cache[userId].expired()) {
|
|
56
|
+
this._delete(userId);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Cleans expired entries from cache
|
|
62
|
+
*/
|
|
63
|
+
}, {
|
|
64
|
+
key: "_removeExpired",
|
|
65
|
+
value: function _removeExpired() {
|
|
66
|
+
var _this = this;
|
|
67
|
+
Object.keys(this.cache).forEach(function (id) {
|
|
68
|
+
_this._deleteIfExpired(id);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Checks if a user exists in the cache
|
|
74
|
+
* @param userId
|
|
75
|
+
*/
|
|
76
|
+
}, {
|
|
77
|
+
key: "contains",
|
|
78
|
+
value: function contains(userId) {
|
|
79
|
+
return this.cache.hasOwnProperty(userId);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Retrieves a presence from the cache after checking for expired entries
|
|
84
|
+
* @param userId - to index the cache
|
|
85
|
+
* @returns Presence - the presence that matches the userId
|
|
86
|
+
*/
|
|
87
|
+
}, {
|
|
88
|
+
key: "get",
|
|
89
|
+
value: function get(userId) {
|
|
90
|
+
this._deleteIfExpired(userId);
|
|
91
|
+
if (!this.contains(userId)) {
|
|
92
|
+
return {};
|
|
93
|
+
}
|
|
94
|
+
return this.cache[userId].presence;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Retrieve multiple presences at once from the cache
|
|
99
|
+
* @param userIds - to index the cache
|
|
100
|
+
* @returns PresenceMap - A map of userIds to cached Presences
|
|
101
|
+
*/
|
|
102
|
+
}, {
|
|
103
|
+
key: "getBulk",
|
|
104
|
+
value: function getBulk(userIds) {
|
|
105
|
+
var presences = {};
|
|
106
|
+
var _iterator = _createForOfIteratorHelper(userIds),
|
|
107
|
+
_step;
|
|
108
|
+
try {
|
|
109
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
110
|
+
var _userId = _step.value;
|
|
111
|
+
if (this.contains(_userId)) {
|
|
112
|
+
presences[_userId] = this.get(_userId);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
} catch (err) {
|
|
116
|
+
_iterator.e(err);
|
|
117
|
+
} finally {
|
|
118
|
+
_iterator.f();
|
|
119
|
+
}
|
|
120
|
+
return presences;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* For a given list of ids, returns a subset
|
|
125
|
+
* of all the ids with missing cache entries.
|
|
126
|
+
* @param userIds - to index the cache
|
|
127
|
+
* @returns string[] - ids missing from the cache
|
|
128
|
+
*/
|
|
129
|
+
}, {
|
|
130
|
+
key: "getMissingUserIds",
|
|
131
|
+
value: function getMissingUserIds(userIds) {
|
|
132
|
+
var _this2 = this;
|
|
133
|
+
return userIds.filter(function (id) {
|
|
134
|
+
return !_this2.contains(id);
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Precondition: presMap only contains ids of users not in cache
|
|
140
|
+
* expired users must first be removed then reinserted with updated presence
|
|
141
|
+
* Updates the cache by adding the new Presence entries and setting the expiry time
|
|
142
|
+
* @param presMap
|
|
143
|
+
*/
|
|
144
|
+
}, {
|
|
145
|
+
key: "update",
|
|
146
|
+
value: function update(presMap) {
|
|
147
|
+
var _this3 = this;
|
|
148
|
+
if (this.size >= this.flushTrigger) {
|
|
149
|
+
this._removeExpired();
|
|
150
|
+
}
|
|
151
|
+
Object.keys(presMap).forEach(function (userId) {
|
|
152
|
+
_this3.cache[userId] = new CacheEntry(presMap[userId], _this3.expiryInMillis);
|
|
153
|
+
_this3.size++;
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}]);
|
|
157
|
+
}();
|
|
158
|
+
(0, _defineProperty2.default)(DefaultPresenceCache, "defaultTimeout", 20000);
|
|
159
|
+
(0, _defineProperty2.default)(DefaultPresenceCache, "defaultFlushTrigger", 50);
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.DefaultPresenceParser = void 0;
|
|
8
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
12
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
13
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
14
|
+
var DefaultPresenceParser = exports.DefaultPresenceParser = /*#__PURE__*/function () {
|
|
15
|
+
function DefaultPresenceParser() {
|
|
16
|
+
(0, _classCallCheck2.default)(this, DefaultPresenceParser);
|
|
17
|
+
}
|
|
18
|
+
return (0, _createClass2.default)(DefaultPresenceParser, [{
|
|
19
|
+
key: "mapState",
|
|
20
|
+
value: function mapState(state) {
|
|
21
|
+
if (state === 'unavailable') {
|
|
22
|
+
return 'offline';
|
|
23
|
+
} else if (state === 'available') {
|
|
24
|
+
return 'online';
|
|
25
|
+
} else {
|
|
26
|
+
return state;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}, {
|
|
30
|
+
key: "parse",
|
|
31
|
+
value: function parse(response) {
|
|
32
|
+
var presences = {};
|
|
33
|
+
if (response.hasOwnProperty('data') && response['data'].hasOwnProperty('PresenceBulk')) {
|
|
34
|
+
var results = response['data'].PresenceBulk;
|
|
35
|
+
// Store map of state and time indexed by userId. Ignore null results.
|
|
36
|
+
var _iterator = _createForOfIteratorHelper(results),
|
|
37
|
+
_step;
|
|
38
|
+
try {
|
|
39
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
40
|
+
var user = _step.value;
|
|
41
|
+
if (user.userId && user.state) {
|
|
42
|
+
var state = DefaultPresenceParser.extractState(user) || user.state;
|
|
43
|
+
presences[user.userId] = {
|
|
44
|
+
status: this.mapState(state)
|
|
45
|
+
};
|
|
46
|
+
} else if (!user.hasOwnProperty('userId') || !user.hasOwnProperty('state')) {
|
|
47
|
+
// eslint-disable-next-line no-console
|
|
48
|
+
console.error('Unexpected response from presence service contains keys: ' + Object.keys(user));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
} catch (err) {
|
|
52
|
+
_iterator.e(err);
|
|
53
|
+
} finally {
|
|
54
|
+
_iterator.f();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return presences;
|
|
58
|
+
}
|
|
59
|
+
}], [{
|
|
60
|
+
key: "extractState",
|
|
61
|
+
value: function extractState(presence) {
|
|
62
|
+
if (DefaultPresenceParser.isFocusState(presence)) {
|
|
63
|
+
return DefaultPresenceParser.FOCUS_STATE;
|
|
64
|
+
}
|
|
65
|
+
return presence.state;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/*
|
|
69
|
+
This is a bit of an odd exception. In the case where a user is in "Focus Mode", their presence state
|
|
70
|
+
is returned as 'busy' along with a `stateMetadata` object containing a `focus` field.
|
|
71
|
+
In this case we ignore the value of the `state` field and treat the presence as a 'focus' state.
|
|
72
|
+
*/
|
|
73
|
+
}, {
|
|
74
|
+
key: "isFocusState",
|
|
75
|
+
value: function isFocusState(presence) {
|
|
76
|
+
if (presence.stateMetadata) {
|
|
77
|
+
try {
|
|
78
|
+
var metadata = JSON.parse(presence.stateMetadata);
|
|
79
|
+
return metadata && !!metadata.focus;
|
|
80
|
+
} catch (e) {
|
|
81
|
+
// eslint-disable-next-line no-console
|
|
82
|
+
console.error("Failed to parse presence's stateMetadata for user with id ".concat(presence.userId, ": ").concat(presence.stateMetadata));
|
|
83
|
+
// eslint-disable-next-line no-console
|
|
84
|
+
console.error(e);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
}]);
|
|
90
|
+
}();
|
|
91
|
+
(0, _defineProperty2.default)(DefaultPresenceParser, "FOCUS_STATE", 'focus');
|