@jetbrains/ring-ui 5.0.156 → 5.0.158

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 (304) hide show
  1. package/components/control-label/control-label.css +1 -1
  2. package/components/control-label/control-label.d.ts +1 -1
  3. package/components/control-label/control-label.js +2 -2
  4. package/components/select/select__popup.d.ts +36 -0
  5. package/components/select/select__popup.js +7 -1
  6. package/dist/_helpers/_rollupPluginBabelHelpers.js +642 -1
  7. package/dist/_helpers/anchor.js +6 -7
  8. package/dist/_helpers/button__classes.js +16 -28
  9. package/dist/_helpers/card.js +107 -95
  10. package/dist/_helpers/control-label.js +1 -1
  11. package/dist/_helpers/dialog__body-scroll-preventer.js +20 -11
  12. package/dist/_helpers/footer.js +29 -34
  13. package/dist/_helpers/query-assist__suggestions.js +91 -74
  14. package/dist/_helpers/select__filter.js +71 -48
  15. package/dist/_helpers/services-link.js +41 -29
  16. package/dist/_helpers/sidebar.js +103 -99
  17. package/dist/_helpers/theme.js +42 -35
  18. package/dist/_helpers/title.js +71 -57
  19. package/dist/alert/alert.js +199 -158
  20. package/dist/alert/container.js +43 -32
  21. package/dist/alert-service/alert-service.js +172 -104
  22. package/dist/analytics/analytics.js +92 -68
  23. package/dist/analytics/analytics__custom-plugin.js +84 -60
  24. package/dist/analytics/analytics__fus-plugin.js +28 -15
  25. package/dist/analytics/analytics__ga-plugin.js +60 -43
  26. package/dist/analytics/analytics__plugin-utils.js +28 -22
  27. package/dist/auth/auth.js +36 -4
  28. package/dist/auth/auth__core.js +1458 -732
  29. package/dist/auth/background-flow.js +129 -87
  30. package/dist/auth/down-notification.js +75 -30
  31. package/dist/auth/iframe-flow.js +136 -75
  32. package/dist/auth/landing.js +90 -30
  33. package/dist/auth/request-builder.js +82 -46
  34. package/dist/auth/response-parser.js +119 -86
  35. package/dist/auth/storage.js +333 -171
  36. package/dist/auth/token-validator.js +244 -137
  37. package/dist/auth/window-flow.js +136 -92
  38. package/dist/auth-dialog/auth-dialog.js +176 -114
  39. package/dist/auth-dialog-service/auth-dialog-service.js +32 -7
  40. package/dist/auth-ng/auth-ng.js +70 -34
  41. package/dist/auth-ng/auth-ng.mock.js +6 -6
  42. package/dist/autofocus-ng/autofocus-ng.js +23 -8
  43. package/dist/avatar/avatar-example-datauri.js +1 -23
  44. package/dist/avatar/avatar.js +155 -119
  45. package/dist/avatar/fallback-avatar.js +41 -22
  46. package/dist/avatar-editor-ng/avatar-editor-ng.js +56 -23
  47. package/dist/avatar-editor-ng/avatar-editor-ng__template.js +1 -28
  48. package/dist/avatar-ng/avatar-ng.js +23 -1
  49. package/dist/badge/badge.js +43 -35
  50. package/dist/badge-ng/badge-ng.js +13 -1
  51. package/dist/breadcrumb-ng/breadcrumb-ng.js +15 -29
  52. package/dist/button/button.js +111 -87
  53. package/dist/button/button__classes.js +1 -0
  54. package/dist/button-group/button-group.js +35 -19
  55. package/dist/button-group/caption.js +22 -14
  56. package/dist/button-group-ng/button-group-ng.js +13 -7
  57. package/dist/button-ng/button-ng.js +154 -133
  58. package/dist/button-set/button-set.js +34 -20
  59. package/dist/button-set-ng/button-set-ng.js +2 -2
  60. package/dist/button-toolbar/button-toolbar.js +33 -19
  61. package/dist/button-toolbar-ng/button-toolbar-ng.js +5 -3
  62. package/dist/caret/caret.js +225 -188
  63. package/dist/checkbox/checkbox.js +104 -76
  64. package/dist/checkbox-ng/checkbox-ng.js +18 -27
  65. package/dist/clipboard/clipboard-fallback.js +10 -10
  66. package/dist/clipboard/clipboard.js +131 -34
  67. package/dist/code/code.js +168 -92
  68. package/dist/compiler-ng/compiler-ng.js +18 -15
  69. package/dist/confirm/confirm.js +108 -66
  70. package/dist/confirm-ng/confirm-ng.js +33 -4
  71. package/dist/confirm-service/confirm-service.js +66 -42
  72. package/dist/content-layout/content-layout.js +64 -43
  73. package/dist/content-layout/sidebar.js +1 -0
  74. package/dist/contenteditable/contenteditable.js +61 -50
  75. package/dist/control-label/control-label.d.ts +1 -1
  76. package/dist/control-label/control-label.js +12 -16
  77. package/dist/data-list/data-list.js +184 -128
  78. package/dist/data-list/data-list.mock.js +11 -2
  79. package/dist/data-list/item.js +174 -143
  80. package/dist/data-list/selection.js +139 -76
  81. package/dist/data-list/title.js +13 -1
  82. package/dist/data-list-ng/data-list-ng.js +31 -1
  83. package/dist/date-picker/consts.js +18 -15
  84. package/dist/date-picker/date-input.js +147 -115
  85. package/dist/date-picker/date-picker.js +285 -228
  86. package/dist/date-picker/date-popup.js +397 -356
  87. package/dist/date-picker/day.js +98 -84
  88. package/dist/date-picker/month-names.js +64 -43
  89. package/dist/date-picker/month-slider.js +74 -51
  90. package/dist/date-picker/month.js +21 -15
  91. package/dist/date-picker/months.js +48 -43
  92. package/dist/date-picker/weekdays.js +18 -12
  93. package/dist/date-picker/years.js +109 -84
  94. package/dist/dialog/dialog.js +189 -141
  95. package/dist/dialog/dialog__body-scroll-preventer.js +5 -0
  96. package/dist/dialog-ng/dialog-ng.js +401 -287
  97. package/dist/dialog-ng/dialog-ng__template.js +1 -70
  98. package/dist/docked-panel-ng/docked-panel-ng.js +33 -18
  99. package/dist/dropdown/anchor.js +10 -0
  100. package/dist/dropdown/dropdown.js +214 -182
  101. package/dist/dropdown-menu/dropdown-menu.js +102 -72
  102. package/dist/editable-heading/editable-heading.js +100 -58
  103. package/dist/error-bubble/error-bubble.js +64 -31
  104. package/dist/error-message/error-message.js +61 -38
  105. package/dist/error-message-ng/error-message-ng.js +11 -22
  106. package/dist/footer/footer.js +11 -1
  107. package/dist/footer-ng/footer-ng.js +64 -36
  108. package/dist/form-ng/form-ng.js +66 -56
  109. package/dist/global/angular-component-factory.js +76 -53
  110. package/dist/global/compose.js +10 -1
  111. package/dist/global/composeRefs.js +12 -7
  112. package/dist/global/controls-height.js +2 -2
  113. package/dist/global/create-stateful-context.js +19 -19
  114. package/dist/global/data-tests.js +15 -7
  115. package/dist/global/dom.js +95 -53
  116. package/dist/global/focus-sensor-hoc.js +134 -122
  117. package/dist/global/fuzzy-highlight.js +41 -27
  118. package/dist/global/get-event-key.js +8 -8
  119. package/dist/global/get-uid.js +8 -4
  120. package/dist/global/inject-styles.js +15 -10
  121. package/dist/global/linear-function.js +2 -2
  122. package/dist/global/listeners.js +53 -27
  123. package/dist/global/memoize.js +13 -6
  124. package/dist/global/normalize-indent.js +51 -19
  125. package/dist/global/promise-with-timeout.js +8 -6
  126. package/dist/global/prop-types.js +5 -3
  127. package/dist/global/react-dom-renderer.js +47 -28
  128. package/dist/global/react-render-adapter.js +19 -13
  129. package/dist/global/rerender-hoc.js +41 -16
  130. package/dist/global/ring-angular-component.js +20 -10
  131. package/dist/global/schedule-raf.js +6 -5
  132. package/dist/global/sniffer.js +1 -1
  133. package/dist/global/theme.js +24 -0
  134. package/dist/global/trivial-template-tag.js +10 -3
  135. package/dist/global/typescript-utils.js +6 -2
  136. package/dist/global/url.js +27 -21
  137. package/dist/global/use-event-callback.js +4 -6
  138. package/dist/grid/col.js +55 -35
  139. package/dist/grid/grid.js +36 -17
  140. package/dist/grid/row.js +48 -35
  141. package/dist/group/group.js +27 -17
  142. package/dist/group-ng/group-ng.js +2 -2
  143. package/dist/header/header.js +80 -33
  144. package/dist/header/logo.js +39 -20
  145. package/dist/header/profile.js +188 -150
  146. package/dist/header/services-link.js +9 -0
  147. package/dist/header/services.js +118 -73
  148. package/dist/header/smart-profile.js +207 -111
  149. package/dist/header/smart-services.js +115 -62
  150. package/dist/header/tray-icon.js +38 -21
  151. package/dist/header/tray.js +34 -21
  152. package/dist/heading/heading.js +25 -26
  153. package/dist/heading-ng/heading-ng.js +11 -1
  154. package/dist/http/http.js +368 -215
  155. package/dist/http/http.mock.js +104 -49
  156. package/dist/hub-source/hub-source.js +191 -83
  157. package/dist/hub-source/hub-source__user.js +45 -11
  158. package/dist/hub-source/hub-source__users-groups.js +67 -37
  159. package/dist/i18n/i18n-context.js +14 -10
  160. package/dist/i18n/i18n.js +11 -7
  161. package/dist/icon/icon.js +94 -76
  162. package/dist/icon/icon__svg.js +31 -24
  163. package/dist/icon/index.js +9 -0
  164. package/dist/icon-ng/icon-ng.js +27 -15
  165. package/dist/input/input.js +184 -145
  166. package/dist/input-ng/input-ng.js +96 -118
  167. package/dist/island/adaptive-island-hoc.js +45 -30
  168. package/dist/island/content.js +130 -115
  169. package/dist/island/header.js +69 -56
  170. package/dist/island/island.js +40 -28
  171. package/dist/island-legacy/content-legacy.js +27 -17
  172. package/dist/island-legacy/header-legacy.js +29 -19
  173. package/dist/island-legacy/island-legacy.js +27 -17
  174. package/dist/island-ng/island-content-ng.js +17 -26
  175. package/dist/island-ng/island-header-ng.js +9 -12
  176. package/dist/island-ng/island-ng-class-fixer.js +3 -0
  177. package/dist/island-ng/island-ng.js +6 -10
  178. package/dist/link/clickableLink.js +61 -44
  179. package/dist/link/link.js +85 -74
  180. package/dist/link-ng/link-ng.js +3 -5
  181. package/dist/list/consts.js +1 -1
  182. package/dist/list/list.js +696 -602
  183. package/dist/list/list__custom.js +61 -44
  184. package/dist/list/list__hint.js +21 -10
  185. package/dist/list/list__item.js +167 -129
  186. package/dist/list/list__link.js +54 -37
  187. package/dist/list/list__separator.js +24 -14
  188. package/dist/list/list__title.js +32 -22
  189. package/dist/list/list__users-groups-source.js +131 -54
  190. package/dist/loader/loader.js +78 -43
  191. package/dist/loader/loader__core.js +257 -189
  192. package/dist/loader-inline/loader-inline.js +37 -23
  193. package/dist/loader-inline-ng/loader-inline-ng.js +2 -2
  194. package/dist/loader-ng/loader-ng.js +46 -19
  195. package/dist/loader-screen/loader-screen.js +48 -25
  196. package/dist/loader-screen-ng/loader-screen-ng.js +46 -30
  197. package/dist/login-dialog/login-dialog.js +162 -111
  198. package/dist/login-dialog/service.js +35 -7
  199. package/dist/markdown/code.js +31 -9
  200. package/dist/markdown/heading.js +3 -5
  201. package/dist/markdown/link.js +13 -6
  202. package/dist/markdown/markdown.js +66 -33
  203. package/dist/message/message.js +157 -125
  204. package/dist/message-bundle-ng/message-bundle-ng.js +128 -44
  205. package/dist/old-browsers-message/old-browsers-message.js +19 -11
  206. package/dist/old-browsers-message/old-browsers-message__stop.js +8 -0
  207. package/dist/old-browsers-message/white-list.js +16 -9
  208. package/dist/pager/pager.js +275 -210
  209. package/dist/pager-ng/pager-ng.js +36 -1
  210. package/dist/panel/panel.js +27 -17
  211. package/dist/panel-ng/panel-ng.js +14 -1
  212. package/dist/permissions/permissions.js +173 -127
  213. package/dist/permissions/permissions__cache.js +225 -194
  214. package/dist/permissions-ng/permissions-ng.js +86 -35
  215. package/dist/place-under-ng/place-under-ng.js +68 -45
  216. package/dist/popup/popup.consts.js +1 -1
  217. package/dist/popup/popup.js +342 -280
  218. package/dist/popup/popup.target.js +8 -9
  219. package/dist/popup/position.js +153 -153
  220. package/dist/popup-menu/popup-menu.js +86 -44
  221. package/dist/progress-bar/progress-bar.js +97 -80
  222. package/dist/progress-bar-ng/progress-bar-ng.js +11 -1
  223. package/dist/promised-click-ng/promised-click-ng.js +92 -58
  224. package/dist/proxy-attrs/proxy-attrs.js +18 -9
  225. package/dist/query-assist/query-assist.js +903 -832
  226. package/dist/query-assist/query-assist__suggestions.js +33 -1
  227. package/dist/query-assist-ng/query-assist-ng.js +38 -1
  228. package/dist/radio/radio.js +36 -19
  229. package/dist/radio/radio__item.js +71 -52
  230. package/dist/radio-ng/radio-ng.js +14 -25
  231. package/dist/save-field-ng/save-field-ng.js +86 -52
  232. package/dist/save-field-ng/save-field-ng__template.js +1 -32
  233. package/dist/select/select.js +937 -835
  234. package/dist/select/select__filter.js +33 -0
  235. package/dist/select/select__popup.d.ts +36 -0
  236. package/dist/select/select__popup.js +480 -358
  237. package/dist/select-ng/select-ng.js +125 -74
  238. package/dist/select-ng/select-ng__lazy.js +101 -50
  239. package/dist/select-ng/select-ng__options.js +107 -81
  240. package/dist/shortcuts/core.js +218 -166
  241. package/dist/shortcuts/shortcut-title.js +11 -6
  242. package/dist/shortcuts/shortcuts-hoc.js +47 -19
  243. package/dist/shortcuts/shortcuts.js +77 -50
  244. package/dist/shortcuts-hint-ng/shortcuts-hint-ng.js +104 -53
  245. package/dist/shortcuts-hint-ng/shortcuts-hint-ng__template.js +1 -48
  246. package/dist/shortcuts-ng/shortcuts-ng.js +86 -51
  247. package/dist/sidebar-ng/sidebar-ng.js +53 -22
  248. package/dist/sidebar-ng/sidebar-ng__button-template.js +1 -18
  249. package/dist/sidebar-ng/sidebar-ng__template.js +1 -10
  250. package/dist/storage/storage.js +35 -4
  251. package/dist/storage/storage__fallback.js +224 -149
  252. package/dist/storage/storage__local.js +156 -90
  253. package/dist/style.css +1 -1
  254. package/dist/tab-trap/tab-trap.js +157 -122
  255. package/dist/table/cell.js +28 -14
  256. package/dist/table/disable-hover-hoc.js +53 -33
  257. package/dist/table/header-cell.js +87 -64
  258. package/dist/table/header.js +126 -98
  259. package/dist/table/multitable.js +127 -107
  260. package/dist/table/row-with-focus-sensor.js +73 -25
  261. package/dist/table/row.js +208 -170
  262. package/dist/table/selection-adapter.js +3 -1
  263. package/dist/table/selection-shortcuts-hoc.js +184 -181
  264. package/dist/table/selection.js +228 -156
  265. package/dist/table/smart-table.js +93 -51
  266. package/dist/table/table.js +348 -281
  267. package/dist/table-legacy-ng/table-legacy-ng.js +117 -102
  268. package/dist/table-legacy-ng/table-legacy-ng__pager.js +42 -10
  269. package/dist/table-legacy-ng/table-legacy-ng__selection-navigate-actions.js +92 -69
  270. package/dist/table-legacy-ng/table-legacy-ng__selection.js +169 -119
  271. package/dist/table-legacy-ng/table-legacy-ng__toolbar.js +36 -21
  272. package/dist/table-ng/smart-table-ng.js +31 -1
  273. package/dist/table-ng/table-ng.js +31 -1
  274. package/dist/tabs/collapsible-more.js +87 -50
  275. package/dist/tabs/collapsible-tab.js +45 -38
  276. package/dist/tabs/collapsible-tabs.js +161 -94
  277. package/dist/tabs/custom-item.js +2 -4
  278. package/dist/tabs/dumb-tabs.js +122 -75
  279. package/dist/tabs/smart-tabs.js +75 -29
  280. package/dist/tabs/tab-link.js +29 -19
  281. package/dist/tabs/tab.js +33 -19
  282. package/dist/tabs/tabs.js +35 -0
  283. package/dist/tabs-ng/tabs-ng.js +38 -24
  284. package/dist/tabs-ng/tabs-ng__template.js +1 -38
  285. package/dist/tag/tag.js +170 -133
  286. package/dist/tags-input/tags-input.js +428 -327
  287. package/dist/tags-input-ng/tags-input-ng.js +37 -1
  288. package/dist/tags-list/tags-list.js +80 -56
  289. package/dist/template-ng/template-ng.js +50 -39
  290. package/dist/text/text.js +38 -28
  291. package/dist/title-ng/title-ng.js +28 -23
  292. package/dist/toggle/toggle.js +72 -56
  293. package/dist/toggle-ng/toggle-ng.js +14 -1
  294. package/dist/tooltip/tooltip.js +192 -146
  295. package/dist/tooltip-ng/tooltip-ng.js +51 -25
  296. package/dist/user-agreement/service.js +374 -227
  297. package/dist/user-agreement/toolbox.eula.js +1 -160
  298. package/dist/user-agreement/user-agreement.js +128 -86
  299. package/dist/user-card/card.js +32 -0
  300. package/dist/user-card/smart-user-card-tooltip.js +116 -51
  301. package/dist/user-card/tooltip.js +90 -48
  302. package/dist/user-card/user-card.js +32 -0
  303. package/dist/user-card-ng/user-card-ng.js +34 -2
  304. package/package.json +8 -8
@@ -1,3 +1,7 @@
1
+ import { c as _defineProperty, _ as _createClass, b as _classCallCheck } from '../_helpers/_rollupPluginBabelHelpers.js';
2
+ import 'core-js/modules/es.array.reduce.js';
3
+ import 'core-js/modules/es.object.to-string.js';
4
+
1
5
  /**
2
6
  * Converts an array of cached permissions to a a map of a permission key
3
7
  * to the respective cached permission.
@@ -11,216 +15,243 @@
11
15
  * @return {object} permission cache
12
16
  * @private
13
17
  */
14
- class PermissionCache {
15
- static GLOBAL_PROJECT_ID = 'global';
16
- /**
17
- * Convert an array of projects to a set of project ids.
18
- *
19
- * @param {object[]=} projects
20
- * @return {object} a set of project ids
21
- * @private
22
- */
23
- static _toProjectIdSet(projects) {
24
- let projectIdSet = null;
25
- if (projects) {
26
- projectIdSet = {};
27
- for (let i = 0; i < projects.length; i++) {
28
- projectIdSet[projects[i].id] = true;
29
- }
30
- }
31
- return projectIdSet;
32
- }
33
- namesConverter;
34
- constructor(permissions, namesConverter) {
35
- this.namesConverter = namesConverter || (key => key);
18
+ var PermissionCache = /*#__PURE__*/function () {
19
+ function PermissionCache(permissions, namesConverter) {
20
+ _classCallCheck(this, PermissionCache);
21
+ _defineProperty(this, "namesConverter", void 0);
22
+ _defineProperty(this, "_permissions", void 0);
23
+ _defineProperty(this, "permissionCache", void 0);
24
+ this.namesConverter = namesConverter || function (key) {
25
+ return key;
26
+ };
36
27
  this.set(permissions);
37
28
  }
38
- _permissions;
39
- permissionCache;
40
- set(permissions) {
41
- const permissionCache = (permissions || []).reduce((_permissionCache, permission) => {
42
- const key = this.namesConverter(permission.permission.key);
43
- if (key) {
44
- _permissionCache[key] = {
45
- global: permission.global,
46
- projectIdSet: this.constructor._toProjectIdSet(permission.projects)
47
- };
48
- }
49
- return _permissionCache;
50
- }, {});
51
- this._permissions = permissions;
52
- this.permissionCache = permissionCache;
53
- return this;
54
- }
55
- get() {
56
- return this._permissions;
57
- }
58
- /**
59
- * Checks if the current user has the given permissions in the project with the given id.
60
- *
61
- * @param {string} permissions space separated list of permissions
62
- * @param {string=} projectId optional projectId. If absent the method checks
63
- * if the given permission is granted in any project.
64
- *
65
- * @return {boolean}
66
- */
67
- has(permissions, projectId) {
68
- const lexems = this.lex(permissions);
69
- if (lexems.length === 0) {
70
- return true;
29
+ _createClass(PermissionCache, [{
30
+ key: "set",
31
+ value: function set(permissions) {
32
+ var _this = this;
33
+ var permissionCache = (permissions || []).reduce(function (_permissionCache, permission) {
34
+ var key = _this.namesConverter(permission.permission.key);
35
+ if (key) {
36
+ _permissionCache[key] = {
37
+ global: permission.global,
38
+ projectIdSet: _this.constructor._toProjectIdSet(permission.projects)
39
+ };
40
+ }
41
+ return _permissionCache;
42
+ }, {});
43
+ this._permissions = permissions;
44
+ this.permissionCache = permissionCache;
45
+ return this;
71
46
  }
72
- try {
73
- return this.or(lexems, projectId);
74
- } catch (e) {
75
- return false;
47
+ }, {
48
+ key: "get",
49
+ value: function get() {
50
+ return this._permissions;
76
51
  }
77
- }
78
- /**
79
- * Lexes permission query string to an array of lexems.
80
- *
81
- * @param {string} query
82
- * @return {string[]}
83
- */
84
- lex(query) {
85
- const lexems = [];
86
- if (query) {
87
- let currentIdentifier = '';
88
- for (let i = 0; i < query.length; i++) {
89
- switch (query.charAt(i)) {
90
- case ' ':
91
- case '\t':
92
- case '\n':
93
- case '\r':
94
- // Finish current token
95
- if (currentIdentifier) {
96
- lexems.push(currentIdentifier);
97
- currentIdentifier = '';
98
- }
99
- // Skip space
100
- break;
101
- case '(':
102
- case ')':
103
- case '&':
104
- case '|':
105
- case '!':
106
- // Finish current token
107
- if (currentIdentifier) {
108
- lexems.push(currentIdentifier);
109
- currentIdentifier = '';
110
- }
111
- // Append operator
112
- lexems.push(query.charAt(i));
113
- break;
114
- default:
115
- currentIdentifier += query.charAt(i);
116
- break;
117
- }
52
+ /**
53
+ * Checks if the current user has the given permissions in the project with the given id.
54
+ *
55
+ * @param {string} permissions space separated list of permissions
56
+ * @param {string=} projectId optional projectId. If absent the method checks
57
+ * if the given permission is granted in any project.
58
+ *
59
+ * @return {boolean}
60
+ */
61
+ }, {
62
+ key: "has",
63
+ value: function has(permissions, projectId) {
64
+ var lexems = this.lex(permissions);
65
+ if (lexems.length === 0) {
66
+ return true;
118
67
  }
119
- if (currentIdentifier) {
120
- lexems.push(currentIdentifier);
68
+ try {
69
+ return this.or(lexems, projectId);
70
+ } catch (e) {
71
+ return false;
121
72
  }
122
73
  }
123
- return lexems;
124
- }
125
- /*
126
- or -> and ( '|' and )*
127
- and -> not ( '&'? not )*
128
- not -> '!'* term
129
- term -> '(' or ')' | permission
130
- permission -> [^()&|!\s]+
131
- */
132
- /**
133
- * @param {string[]} lexems
134
- * @param {string=} projectId
135
- * @return {boolean}
136
- */
137
- or(lexems, projectId) {
138
- let result = this.and(lexems, projectId);
139
- while (lexems.length > 0 && lexems[0] !== ')') {
140
- if (lexems.shift() !== '|') {
141
- throw new Error('Operator \'|\' was expected');
74
+ /**
75
+ * Lexes permission query string to an array of lexems.
76
+ *
77
+ * @param {string} query
78
+ * @return {string[]}
79
+ */
80
+ }, {
81
+ key: "lex",
82
+ value: function lex(query) {
83
+ var lexems = [];
84
+ if (query) {
85
+ var currentIdentifier = '';
86
+ for (var i = 0; i < query.length; i++) {
87
+ switch (query.charAt(i)) {
88
+ case ' ':
89
+ case '\t':
90
+ case '\n':
91
+ case '\r':
92
+ // Finish current token
93
+ if (currentIdentifier) {
94
+ lexems.push(currentIdentifier);
95
+ currentIdentifier = '';
96
+ }
97
+ // Skip space
98
+ break;
99
+ case '(':
100
+ case ')':
101
+ case '&':
102
+ case '|':
103
+ case '!':
104
+ // Finish current token
105
+ if (currentIdentifier) {
106
+ lexems.push(currentIdentifier);
107
+ currentIdentifier = '';
108
+ }
109
+ // Append operator
110
+ lexems.push(query.charAt(i));
111
+ break;
112
+ default:
113
+ currentIdentifier += query.charAt(i);
114
+ break;
115
+ }
116
+ }
117
+ if (currentIdentifier) {
118
+ lexems.push(currentIdentifier);
119
+ }
142
120
  }
143
- result = this.and(lexems, projectId) || result;
121
+ return lexems;
144
122
  }
145
- return result;
146
- }
147
- /**
148
- * @param {string[]} lexems
149
- * @param {string=} projectId
150
- * @return {boolean}
151
- */
152
- and(lexems, projectId) {
153
- let result = this.not(lexems, projectId);
154
- while (lexems.length > 0 && lexems[0] !== ')' && lexems[0] !== '|') {
155
- // Expect optional '&'
156
- if (lexems[0] === '&') {
157
- lexems.shift();
123
+ /*
124
+ or -> and ( '|' and )*
125
+ and -> not ( '&'? not )*
126
+ not -> '!'* term
127
+ term -> '(' or ')' | permission
128
+ permission -> [^()&|!\s]+
129
+ */
130
+ /**
131
+ * @param {string[]} lexems
132
+ * @param {string=} projectId
133
+ * @return {boolean}
134
+ */
135
+ }, {
136
+ key: "or",
137
+ value: function or(lexems, projectId) {
138
+ var result = this.and(lexems, projectId);
139
+ while (lexems.length > 0 && lexems[0] !== ')') {
140
+ if (lexems.shift() !== '|') {
141
+ throw new Error('Operator \'|\' was expected');
142
+ }
143
+ result = this.and(lexems, projectId) || result;
158
144
  }
159
- result = this.not(lexems, projectId) && result;
145
+ return result;
160
146
  }
161
- return result;
162
- }
163
- /**
164
- * @param {string[]} lexems
165
- * @param {string=} projectId
166
- * @return {boolean}
167
- */
168
- not(lexems, projectId) {
169
- let notCounter = 0;
170
- while (lexems.length > 0 && lexems[0] === '!') {
171
- ++notCounter;
172
- lexems.shift();
173
- }
174
- const result = this.term(lexems, projectId);
175
- return notCounter % 2 === 0 ? result : !result;
176
- }
177
- /**
178
- * @param {string[]} lexems
179
- * @param {string=} projectId
180
- * @return {boolean}
181
- */
182
- term(lexems, projectId) {
183
- if (lexems.length === 0) {
184
- throw new Error('Operand was expected');
147
+ /**
148
+ * @param {string[]} lexems
149
+ * @param {string=} projectId
150
+ * @return {boolean}
151
+ */
152
+ }, {
153
+ key: "and",
154
+ value: function and(lexems, projectId) {
155
+ var result = this.not(lexems, projectId);
156
+ while (lexems.length > 0 && lexems[0] !== ')' && lexems[0] !== '|') {
157
+ // Expect optional '&'
158
+ if (lexems[0] === '&') {
159
+ lexems.shift();
160
+ }
161
+ result = this.not(lexems, projectId) && result;
162
+ }
163
+ return result;
185
164
  }
186
- const t = lexems.shift();
187
- let result;
188
- // Nested parenthesized expression
189
- if (t === '(') {
190
- result = this.or(lexems, projectId);
191
- // Expect ')'
192
- if (lexems.shift() !== ')') {
193
- throw new Error('Operator \')\' was expected');
165
+ /**
166
+ * @param {string[]} lexems
167
+ * @param {string=} projectId
168
+ * @return {boolean}
169
+ */
170
+ }, {
171
+ key: "not",
172
+ value: function not(lexems, projectId) {
173
+ var notCounter = 0;
174
+ while (lexems.length > 0 && lexems[0] === '!') {
175
+ ++notCounter;
176
+ lexems.shift();
194
177
  }
195
- } else {
196
- result = t != null && this.testPermission(t, projectId);
178
+ var result = this.term(lexems, projectId);
179
+ return notCounter % 2 === 0 ? result : !result;
197
180
  }
198
- return result;
199
- }
200
- /**
201
- * @param {string} permissionName
202
- * @param {string=} projectId
203
- * @return {boolean}
204
- */
205
- testPermission(permissionName, projectId) {
206
- const permissionCache = this.permissionCache;
207
- const convertedName = this.namesConverter(permissionName);
208
- const cachedPermission = permissionCache?.[permissionName] || convertedName && permissionCache?.[convertedName];
209
- // Hasn't the permission in any project
210
- if (!cachedPermission) {
211
- return false;
181
+ /**
182
+ * @param {string[]} lexems
183
+ * @param {string=} projectId
184
+ * @return {boolean}
185
+ */
186
+ }, {
187
+ key: "term",
188
+ value: function term(lexems, projectId) {
189
+ if (lexems.length === 0) {
190
+ throw new Error('Operand was expected');
191
+ }
192
+ var t = lexems.shift();
193
+ var result;
194
+ // Nested parenthesized expression
195
+ if (t === '(') {
196
+ result = this.or(lexems, projectId);
197
+ // Expect ')'
198
+ if (lexems.shift() !== ')') {
199
+ throw new Error('Operator \')\' was expected');
200
+ }
201
+ } else {
202
+ result = t != null && this.testPermission(t, projectId);
203
+ }
204
+ return result;
212
205
  }
213
- // The permission is global or is given in the global project
214
- if (cachedPermission.global) {
215
- return true;
206
+ /**
207
+ * @param {string} permissionName
208
+ * @param {string=} projectId
209
+ * @return {boolean}
210
+ */
211
+ }, {
212
+ key: "testPermission",
213
+ value: function testPermission(permissionName, projectId) {
214
+ var permissionCache = this.permissionCache;
215
+ var convertedName = this.namesConverter(permissionName);
216
+ var cachedPermission = (permissionCache === null || permissionCache === void 0 ? void 0 : permissionCache[permissionName]) || convertedName && (permissionCache === null || permissionCache === void 0 ? void 0 : permissionCache[convertedName]);
217
+ // Hasn't the permission in any project
218
+ if (!cachedPermission) {
219
+ return false;
220
+ }
221
+ // The permission is global or is given in the global project
222
+ if (cachedPermission.global) {
223
+ return true;
224
+ }
225
+ if (projectId) {
226
+ // if projectId is specified check that the permission is given in the project
227
+ return cachedPermission.projectIdSet != null && projectId in cachedPermission.projectIdSet;
228
+ } else {
229
+ return true;
230
+ }
216
231
  }
217
- if (projectId) {
218
- // if projectId is specified check that the permission is given in the project
219
- return cachedPermission.projectIdSet != null && projectId in cachedPermission.projectIdSet;
220
- } else {
221
- return true;
232
+ }], [{
233
+ key: "_toProjectIdSet",
234
+ value:
235
+ /**
236
+ * Convert an array of projects to a set of project ids.
237
+ *
238
+ * @param {object[]=} projects
239
+ * @return {object} a set of project ids
240
+ * @private
241
+ */
242
+ function _toProjectIdSet(projects) {
243
+ var projectIdSet = null;
244
+ if (projects) {
245
+ projectIdSet = {};
246
+ for (var i = 0; i < projects.length; i++) {
247
+ projectIdSet[projects[i].id] = true;
248
+ }
249
+ }
250
+ return projectIdSet;
222
251
  }
223
- }
224
- }
252
+ }]);
253
+ return PermissionCache;
254
+ }();
255
+ _defineProperty(PermissionCache, "GLOBAL_PROJECT_ID", 'global');
225
256
 
226
257
  export { PermissionCache as default };