studiokit-scaffolding-js 7.0.12-next.2.9 → 7.0.13-alpha.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/LICENSE +21 -21
- package/README.md +137 -137
- package/lib/components/ActionList.d.ts +2 -2
- package/lib/components/ActionList.js +87 -166
- package/lib/components/AlertDialog.d.ts +3 -3
- package/lib/components/AlertDialog.js +18 -133
- package/lib/components/AlertWithIcon.js +52 -93
- package/lib/components/ConnectedModal.d.ts +2 -1
- package/lib/components/ConnectedModal.js +37 -43
- package/lib/components/Dropdowns/GroupsDropdown.d.ts +4 -4
- package/lib/components/Dropdowns/GroupsDropdown.js +82 -69
- package/lib/components/Dropdowns/ManagedNavDropdown.d.ts +2 -2
- package/lib/components/Dropdowns/ManagedNavDropdown.js +111 -99
- package/lib/components/Dropdowns/UserDropdown.js +70 -109
- package/lib/components/Dropdowns/index.js +11 -27
- package/lib/components/EntityOwnerList.d.ts +3 -3
- package/lib/components/EntityOwnerList.js +60 -52
- package/lib/components/Error.js +27 -107
- package/lib/components/ErrorBoundary.js +94 -133
- package/lib/components/ErrorMessage.d.ts +2 -2
- package/lib/components/ErrorMessage.js +14 -44
- package/lib/components/Forms/DateField.d.ts +2 -2
- package/lib/components/Forms/DateField.js +95 -63
- package/lib/components/Forms/TimeField.d.ts +2 -2
- package/lib/components/Forms/TimeField.js +108 -84
- package/lib/components/Forms/index.js +13 -27
- package/lib/components/Groups/CreateEditCopySaveButtons.d.ts +2 -2
- package/lib/components/Groups/CreateEditCopySaveButtons.js +14 -102
- package/lib/components/Groups/ExternalGroups/Attach.d.ts +7 -6
- package/lib/components/Groups/ExternalGroups/Attach.js +188 -213
- package/lib/components/Groups/ExternalGroups/Table.js +76 -183
- package/lib/components/Groups/GroupCreateOrEditCommonProps.js +1 -5
- package/lib/components/Groups/RosterSyncInfo.js +49 -140
- package/lib/components/HOC/AccessibleAppComponent.d.ts +2 -2
- package/lib/components/HOC/AccessibleAppComponent.js +124 -101
- package/lib/components/HOC/ActivityRequiredComponent.d.ts +14 -14
- package/lib/components/HOC/ActivityRequiredComponent.js +107 -93
- package/lib/components/HOC/AsyncComponent.d.ts +9 -9
- package/lib/components/HOC/AsyncComponent.js +129 -53
- package/lib/components/HOC/AuthenticatedComponent.d.ts +4 -4
- package/lib/components/HOC/AuthenticatedComponent.js +96 -59
- package/lib/components/HOC/CollectionComponent.d.ts +12 -12
- package/lib/components/HOC/CollectionComponent.js +171 -171
- package/lib/components/HOC/CollectionFirstItemComponent.d.ts +13 -13
- package/lib/components/HOC/CollectionFirstItemComponent.js +94 -52
- package/lib/components/HOC/CollectionItemComponent.d.ts +9 -9
- package/lib/components/HOC/CollectionItemComponent.js +168 -169
- package/lib/components/HOC/ConnectedModalComponent.d.ts +9 -9
- package/lib/components/HOC/ConnectedModalComponent.js +140 -110
- package/lib/components/HOC/DataDependentComponent.d.ts +55 -3
- package/lib/components/HOC/DataDependentComponent.js +79 -30
- package/lib/components/HOC/EntityComponent.d.ts +13 -13
- package/lib/components/HOC/EntityComponent.js +112 -74
- package/lib/components/HOC/FullscreenModalComponent.d.ts +9 -9
- package/lib/components/HOC/FullscreenModalComponent.js +185 -165
- package/lib/components/HOC/GroupActivityRequiredComponent.d.ts +2 -2
- package/lib/components/HOC/GroupActivityRequiredComponent.js +47 -48
- package/lib/components/HOC/GuidComponent.d.ts +1 -1
- package/lib/components/HOC/GuidComponent.js +68 -29
- package/lib/components/HOC/ModelContextDependencyVerifyComponent.d.ts +29 -28
- package/lib/components/HOC/ModelContextDependencyVerifyComponent.js +65 -42
- package/lib/components/HOC/ModelErrorRedirectComponent.d.ts +10 -10
- package/lib/components/HOC/ModelErrorRedirectComponent.js +94 -51
- package/lib/components/HOC/SearchPersistorComponent.d.ts +4 -4
- package/lib/components/HOC/SearchPersistorComponent.js +216 -243
- package/lib/components/HOC/UnauthenticatedComponent.d.ts +12 -12
- package/lib/components/HOC/UnauthenticatedComponent.js +82 -37
- package/lib/components/HOC/UserComponent.d.ts +1 -1
- package/lib/components/HOC/UserComponent.js +11 -12
- package/lib/components/Icons/IconAlphaList.js +20 -34
- package/lib/components/Icons/IconExternalUser.js +20 -34
- package/lib/components/Icons/IconImpersonation.js +20 -34
- package/lib/components/Icons/IconStopImpersonating.js +20 -34
- package/lib/components/Icons/IconTable.js +21 -35
- package/lib/components/Icons/IconTableDeleteCol.js +20 -34
- package/lib/components/Icons/IconTableDeleteRow.js +20 -34
- package/lib/components/Icons/IconTableInsertCol.js +20 -34
- package/lib/components/Icons/IconTableInsertRow.js +20 -34
- package/lib/components/Impersonation/Button.d.ts +2 -2
- package/lib/components/Impersonation/Button.js +56 -76
- package/lib/components/Impersonation/Link.d.ts +2 -2
- package/lib/components/Impersonation/Link.js +53 -76
- package/lib/components/Impersonation/UserDetail.css +22 -22
- package/lib/components/Impersonation/UserDetail.d.ts +2 -2
- package/lib/components/Impersonation/UserDetail.js +17 -66
- package/lib/components/Loading.js +21 -27
- package/lib/components/LockDownBrowser/Check.js +107 -194
- package/lib/components/LockDownBrowser/ExitButton.js +14 -27
- package/lib/components/LockDownBrowser/Launch.js +85 -70
- package/lib/components/Lti/Confirm.js +33 -152
- package/lib/components/Lti/CreateNonLtiGroupAlertDialog.d.ts +2 -4
- package/lib/components/Lti/CreateNonLtiGroupAlertDialog.js +78 -170
- package/lib/components/Lti/Launch.js +49 -105
- package/lib/components/Lti/LaunchGroup.js +39 -85
- package/lib/components/ManageTable.d.ts +2 -1
- package/lib/components/ManageTable.js +104 -309
- package/lib/components/ManageTableNoDataComponent.js +22 -42
- package/lib/components/NewVersionAlert.d.ts +2 -2
- package/lib/components/NewVersionAlert.js +91 -82
- package/lib/components/NotFound.js +28 -87
- package/lib/components/Notifications.d.ts +4 -4
- package/lib/components/Notifications.js +169 -187
- package/lib/components/PaginationNextButton.js +21 -33
- package/lib/components/PaginationPreviousButton.js +21 -33
- package/lib/components/Quill/CustomToolbar.d.ts +2 -2
- package/lib/components/Quill/CustomToolbar.js +257 -432
- package/lib/components/Quill/Formats/Image.d.ts +25 -10
- package/lib/components/Quill/Formats/Image.js +86 -80
- package/lib/components/Quill/Formats/List.d.ts +3 -6
- package/lib/components/Quill/Formats/List.js +74 -52
- package/lib/components/Quill/Formats/Video.d.ts +1 -2
- package/lib/components/Quill/Formats/Video.js +45 -31
- package/lib/components/Quill/ImageDropModule.d.ts +1 -1
- package/lib/components/Quill/ImageDropModule.js +122 -149
- package/lib/components/Quill/ImageWarning.d.ts +2 -2
- package/lib/components/Quill/ImageWarning.js +32 -45
- package/lib/components/Quill/ImageWithAltTextModal.d.ts +1 -0
- package/lib/components/Quill/ImageWithAltTextModal.js +141 -425
- package/lib/components/Quill/Specs/CustomImageSpec.d.ts +1 -1
- package/lib/components/Quill/Specs/CustomImageSpec.js +51 -43
- package/lib/components/Quill/Specs/CustomVideoSpec.d.ts +1 -1
- package/lib/components/Quill/Specs/CustomVideoSpec.js +44 -35
- package/lib/components/Quill/TableModule/Blots/BaseTableBlot.d.ts +1 -2
- package/lib/components/Quill/TableModule/Blots/BaseTableBlot.js +121 -105
- package/lib/components/Quill/TableModule/Blots/TableBlot.js +66 -53
- package/lib/components/Quill/TableModule/Blots/TableBodyBlot.js +67 -54
- package/lib/components/Quill/TableModule/Blots/TableCellBlot.d.ts +1 -1
- package/lib/components/Quill/TableModule/Blots/TableCellBlot.js +241 -225
- package/lib/components/Quill/TableModule/Blots/TableContainer.js +99 -82
- package/lib/components/Quill/TableModule/Blots/TableRowBlot.js +87 -76
- package/lib/components/Quill/TableModule/constants.js +41 -45
- package/lib/components/Quill/TableModule/index.css +171 -171
- package/lib/components/Quill/TableModule/index.d.ts +5 -14
- package/lib/components/Quill/TableModule/index.js +313 -373
- package/lib/components/Quill/TableModule/utils.js +45 -45
- package/lib/components/Quill/accessibilityFix.d.ts +1 -0
- package/lib/components/Quill/accessibilityFix.js +251 -235
- package/lib/components/Quill/index.js +32 -36
- package/lib/components/RefreshIndicator/Bordered.js +32 -48
- package/lib/components/RefreshIndicator/Inline.js +33 -48
- package/lib/components/RefreshIndicator/index.d.ts +2 -2
- package/lib/components/RefreshIndicator/index.js +113 -263
- package/lib/components/SearchControls.js +31 -216
- package/lib/components/SentryRoute.js +23 -10
- package/lib/components/Tables/RoleFilter.d.ts +4 -3
- package/lib/components/Tables/RoleFilter.js +46 -71
- package/lib/components/Tables/TextFilter.d.ts +3 -2
- package/lib/components/Tables/TextFilter.js +20 -62
- package/lib/components/UserRoles/Add.d.ts +3 -3
- package/lib/components/UserRoles/Add.js +161 -199
- package/lib/components/UserRoles/Context.js +9 -11
- package/lib/components/UserRoles/RoleCell.js +100 -180
- package/lib/components/UserRoles/Select.js +54 -157
- package/lib/components/UserRoles/Table.js +102 -221
- package/lib/components/UserRoles/index.d.ts +6 -6
- package/lib/components/UserRoles/index.js +466 -537
- package/lib/config/eslint/index.cjs +21 -0
- package/lib/config/eslint/lib/order.cjs +22 -0
- package/lib/config/eslint/lib/prettier.cjs +18 -0
- package/lib/config/eslint/lib/typescript.cjs +86 -0
- package/lib/config/eslint/react.cjs +9 -0
- package/lib/constants/baseActivity.js +26 -30
- package/lib/constants/baseRole.js +10 -14
- package/lib/constants/configuration.d.ts +1 -1
- package/lib/constants/configuration.js +39 -43
- package/lib/constants/externalProviderType.js +6 -10
- package/lib/constants/fetchErrorData.js +11 -15
- package/lib/constants/index.js +23 -137
- package/lib/constants/lockDownBrowser.js +24 -28
- package/lib/constants/mockData.d.ts +6 -4
- package/lib/constants/mockData.js +326 -385
- package/lib/constants/modelStatus.js +11 -15
- package/lib/constants/notificationType.js +8 -12
- package/lib/constants/operatingSystem.js +8 -12
- package/lib/constants/shard.js +7 -11
- package/lib/constants/table.js +21 -21
- package/lib/constants/tier.js +8 -12
- package/lib/constants/userRole.d.ts +2 -1
- package/lib/constants/userRole.js +17 -15
- package/lib/css/base/_base.css +98 -98
- package/lib/css/base/_typography.css +130 -130
- package/lib/css/components/_alert.css +86 -86
- package/lib/css/components/_bootstrap-grid.css +28 -28
- package/lib/css/components/_buttons.css +397 -397
- package/lib/css/components/_forms.css +101 -101
- package/lib/css/components/_menu.css +56 -56
- package/lib/css/components/_modals.css +46 -46
- package/lib/css/components/_quill.css +315 -315
- package/lib/css/components/_tables.css +497 -497
- package/lib/css/components/_tags.css +12 -12
- package/lib/css/index-with-variables.css +15 -15
- package/lib/css/index.css +14 -14
- package/lib/css/utils/_border.css +463 -463
- package/lib/css/utils/_color.css +317 -317
- package/lib/css/utils/_display.css +312 -305
- package/lib/css/utils/_general.css +48 -48
- package/lib/css/utils/_icon.css +16 -16
- package/lib/css/utils/_text.css +24 -25
- package/lib/css/utils/_width.css +60 -60
- package/lib/css/variables.css +84 -84
- package/lib/endpointMappings.js +193 -197
- package/lib/hooks/useCollection.js +65 -83
- package/lib/hooks/useCollectionConfiguration.d.ts +1 -0
- package/lib/hooks/useCollectionConfiguration.js +88 -185
- package/lib/hooks/useCollectionItem.js +58 -155
- package/lib/hooks/useGuid.js +10 -21
- package/lib/hooks/usePrevious.d.ts +1 -24
- package/lib/hooks/usePrevious.js +14 -84
- package/lib/index.js +36 -156
- package/lib/redux/actionCreator.d.ts +6 -6
- package/lib/redux/actionCreator.js +40 -51
- package/lib/redux/actions/AuthAction.js +31 -44
- package/lib/redux/actions/ModalAction.d.ts +1 -1
- package/lib/redux/actions/ModalAction.js +6 -10
- package/lib/redux/actions/ModelAction.d.ts +1 -1
- package/lib/redux/actions/ModelAction.js +49 -77
- package/lib/redux/actions/NotificationAction.js +6 -10
- package/lib/redux/actions/SearchAction.js +5 -9
- package/lib/redux/actions/index.js +16 -60
- package/lib/redux/configureReducers.d.ts +5 -2
- package/lib/redux/configureReducers.js +78 -67
- package/lib/redux/configureStore.d.ts +2 -2
- package/lib/redux/configureStore.js +115 -83
- package/lib/redux/helpers.js +2 -7
- package/lib/redux/reducers/authReducer.js +46 -52
- package/lib/redux/reducers/index.js +15 -41
- package/lib/redux/reducers/modalsReducer.js +52 -49
- package/lib/redux/reducers/modelsReducer.d.ts +2 -2
- package/lib/redux/reducers/modelsReducer.js +182 -183
- package/lib/redux/reducers/notificationsReducer.js +21 -26
- package/lib/redux/reducers/searchReducer.js +20 -26
- package/lib/redux/sagas/appInsightsSaga.js +62 -24
- package/lib/redux/sagas/authSaga.js +414 -287
- package/lib/redux/sagas/caliperSaga.js +263 -169
- package/lib/redux/sagas/clockOffsetSaga.js +77 -36
- package/lib/redux/sagas/configurationSaga.js +46 -13
- package/lib/redux/sagas/downtimeApiErrorSaga.d.ts +1 -0
- package/lib/redux/sagas/downtimeApiErrorSaga.js +64 -23
- package/lib/redux/sagas/errorSaga.d.ts +1 -0
- package/lib/redux/sagas/errorSaga.js +63 -29
- package/lib/redux/sagas/googleAnalyticsSaga.js +69 -29
- package/lib/redux/sagas/identityProviderSaga.js +69 -24
- package/lib/redux/sagas/initialDataLoadSaga.js +29 -38
- package/lib/redux/sagas/lockDownBrowserErrorSaga.d.ts +1 -0
- package/lib/redux/sagas/lockDownBrowserErrorSaga.js +81 -32
- package/lib/redux/sagas/modelFetchSaga.js +459 -379
- package/lib/redux/sagas/noStoreSaga.d.ts +1 -1
- package/lib/redux/sagas/noStoreSaga.js +101 -68
- package/lib/redux/sagas/postLoginDataSaga.js +79 -47
- package/lib/redux/sagas/postLoginRedirectSaga.js +71 -30
- package/lib/redux/sagas/rootSaga.js +137 -85
- package/lib/redux/sagas/sentrySaga.js +85 -29
- package/lib/redux/sagas/userIdSaga.js +54 -18
- package/lib/services/codeProviderService.js +29 -25
- package/lib/services/dateService.js +12 -14
- package/lib/services/documentService.js +13 -18
- package/lib/services/fetchService.js +168 -134
- package/lib/services/persistenceService.d.ts +4 -4
- package/lib/services/persistenceService.js +43 -45
- package/lib/services/ticketProviderService.js +33 -29
- package/lib/services/tokenPersistenceService.js +9 -13
- package/lib/services/windowService.js +17 -21
- package/lib/startup.d.ts +1 -1
- package/lib/startup.js +135 -132
- package/lib/types/AppConfiguration.js +1 -5
- package/lib/types/Artifact.js +7 -11
- package/lib/types/BaseReduxState.js +1 -5
- package/lib/types/Client.js +1 -5
- package/lib/types/Collection.d.ts +3 -3
- package/lib/types/Collection.js +1 -5
- package/lib/types/Configuration.js +1 -5
- package/lib/types/DeepLinkingResponseRequest.js +1 -5
- package/lib/types/DeletableModel.js +1 -5
- package/lib/types/Event.js +1 -5
- package/lib/types/ExternalGroup.js +1 -5
- package/lib/types/ExternalProvider.js +1 -5
- package/lib/types/ExternalTerm.js +1 -5
- package/lib/types/Group.js +1 -5
- package/lib/types/IdentityProvider.js +1 -5
- package/lib/types/LtiLaunch.js +1 -5
- package/lib/types/NameOnlyEntity.js +1 -5
- package/lib/types/Notification.d.ts +2 -2
- package/lib/types/Notification.js +1 -5
- package/lib/types/OptionalRecord.d.ts +1 -1
- package/lib/types/OptionalRecord.js +1 -5
- package/lib/types/OwnerSchedule.d.ts +1 -3
- package/lib/types/OwnerSchedule.js +1 -5
- package/lib/types/PropertyOfType.d.ts +3 -3
- package/lib/types/PropertyOfType.js +1 -5
- package/lib/types/Quill.js +1 -5
- package/lib/types/RoleDescription.d.ts +1 -0
- package/lib/types/RoleDescription.js +1 -5
- package/lib/types/Search.js +1 -5
- package/lib/types/SimpleLocation.js +1 -5
- package/lib/types/UniTime.js +1 -5
- package/lib/types/User.js +1 -5
- package/lib/types/UserRole.js +1 -5
- package/lib/types/auth/AuthState.js +1 -5
- package/lib/types/auth/CasV1LoginRequestBody.js +1 -5
- package/lib/types/auth/ClientCredentials.js +1 -5
- package/lib/types/auth/CodeProviderService.js +1 -5
- package/lib/types/auth/LocalLoginRequestBody.js +1 -5
- package/lib/types/auth/TicketProviderService.js +1 -5
- package/lib/types/auth/TokenPersistenceService.js +1 -5
- package/lib/types/auth/index.js +18 -82
- package/lib/types/index.js +39 -313
- package/lib/types/net/EndpointConfig.js +1 -5
- package/lib/types/net/EndpointMapping.js +1 -5
- package/lib/types/net/EndpointMappings.js +1 -5
- package/lib/types/net/ErrorHandler.d.ts +1 -1
- package/lib/types/net/ErrorHandler.js +1 -5
- package/lib/types/net/FetchConfig.d.ts +1 -1
- package/lib/types/net/FetchConfig.js +1 -5
- package/lib/types/net/FetchErrorData.js +6 -10
- package/lib/types/net/FetchResult.d.ts +2 -2
- package/lib/types/net/FetchResult.js +1 -5
- package/lib/types/net/HTTPMethod.d.ts +1 -1
- package/lib/types/net/HTTPMethod.js +1 -5
- package/lib/types/net/HTTPStatusCode.js +12 -16
- package/lib/types/net/Metadata.js +1 -5
- package/lib/types/net/Model.js +1 -5
- package/lib/types/net/ModelCollection.js +1 -5
- package/lib/types/net/ModelsState.js +1 -5
- package/lib/types/net/OAuthToken.js +1 -5
- package/lib/types/net/OAuthTokenOrNull.d.ts +1 -1
- package/lib/types/net/OAuthTokenOrNull.js +1 -5
- package/lib/types/net/TokenAccessFunction.d.ts +1 -1
- package/lib/types/net/TokenAccessFunction.js +1 -5
- package/lib/types/net/index.js +27 -181
- package/lib/utils/baseActivity.d.ts +2 -2
- package/lib/utils/baseActivity.js +136 -138
- package/lib/utils/baseRole.js +33 -37
- package/lib/utils/collection.js +310 -432
- package/lib/utils/cookies.js +37 -22
- package/lib/utils/date.js +320 -320
- package/lib/utils/dom.js +174 -186
- package/lib/utils/domainIdentifier.js +9 -9
- package/lib/utils/entityUserRole.js +2 -6
- package/lib/utils/error.d.ts +1 -1
- package/lib/utils/error.js +16 -18
- package/lib/utils/events.js +33 -40
- package/lib/utils/externalGroup.js +21 -25
- package/lib/utils/externalProviders.js +4 -8
- package/lib/utils/externalTerms.js +6 -9
- package/lib/utils/fetch.d.ts +1 -1
- package/lib/utils/fetch.js +185 -188
- package/lib/utils/group.js +9 -17
- package/lib/utils/groupDates.d.ts +1 -1
- package/lib/utils/groupDates.js +39 -43
- package/lib/utils/groupRoles.js +28 -28
- package/lib/utils/lockDownBrowser.js +12 -16
- package/lib/utils/logger.js +25 -30
- package/lib/utils/lti.js +5 -10
- package/lib/utils/model.d.ts +2 -2
- package/lib/utils/model.js +48 -39
- package/lib/utils/number.js +26 -23
- package/lib/utils/promise.d.ts +1 -6
- package/lib/utils/promise.js +15 -34
- package/lib/utils/quill.js +77 -66
- package/lib/utils/route.d.ts +2 -2
- package/lib/utils/route.js +60 -61
- package/lib/utils/search.d.ts +1 -1
- package/lib/utils/search.js +85 -78
- package/lib/utils/shard.js +41 -38
- package/lib/utils/sort.d.ts +3 -3
- package/lib/utils/sort.js +58 -62
- package/lib/utils/string.js +10 -14
- package/lib/utils/table.d.ts +3 -3
- package/lib/utils/table.js +36 -39
- package/lib/utils/timezone.js +26 -12
- package/lib/utils/url.d.ts +1 -2
- package/lib/utils/url.js +201 -146
- package/lib/utils/user.js +61 -59
- package/lib/utils/userAgent.js +11 -11
- package/lib/utils/userRole.d.ts +3 -3
- package/lib/utils/userRole.js +56 -58
- package/package.json +207 -226
- package/lib/config/eslint/index.d.ts +0 -2
- package/lib/config/eslint/index.js +0 -36
- package/lib/config/eslint/lib/order.d.ts +0 -3
- package/lib/config/eslint/lib/order.js +0 -30
- package/lib/config/eslint/lib/prettier.d.ts +0 -3
- package/lib/config/eslint/lib/prettier.js +0 -23
- package/lib/config/eslint/lib/typescript.d.ts +0 -2
- package/lib/config/eslint/lib/typescript.js +0 -98
- package/lib/config/eslint/react.d.ts +0 -2
- package/lib/config/eslint/react.js +0 -30
- package/lib/hooks/useEventCalback.d.ts +0 -14
- package/lib/hooks/useEventCalback.js +0 -51
- package/lib/types/externals.d.js +0 -2
package/lib/utils/quill.js
CHANGED
|
@@ -1,73 +1,84 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
17
|
exports.checkForNonPublicImages = void 0;
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* @param
|
|
19
|
-
*
|
|
20
|
-
* list of processed images
|
|
18
|
+
var quill_1 = __importDefault(require("quill"));
|
|
19
|
+
var uuid_1 = require("uuid");
|
|
20
|
+
var actionCreator_1 = require("../redux/actionCreator");
|
|
21
|
+
var noStoreSaga_1 = require("../redux/sagas/noStoreSaga");
|
|
22
|
+
var fetch_1 = require("./fetch");
|
|
23
|
+
var Delta = quill_1.default.import('delta');
|
|
24
|
+
/**
|
|
25
|
+
* Check for non-public in the provided quill contents. Update the ImageValue of an op if an image is found to be
|
|
26
|
+
* non-public.
|
|
27
|
+
* @param quill The Quill instance
|
|
28
|
+
* @param checkedImages A list of all images we have already processed in previous calls to this function.
|
|
29
|
+
* list of processed images
|
|
21
30
|
*/
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
31
|
+
var checkForNonPublicImages = function (quill, checkedImages) {
|
|
32
|
+
var _a, _b;
|
|
33
|
+
(_b = (_a = quill
|
|
34
|
+
.getContents()) === null || _a === void 0 ? void 0 : _a.ops // Is the op an image and have we not seen it before?
|
|
35
|
+
) === null || _b === void 0 ? void 0 : _b.filter(function (op) {
|
|
36
|
+
return op.insert.image &&
|
|
37
|
+
!checkedImages.find(function (image) { return image.src === op.insert.image.src; }) &&
|
|
38
|
+
op.insert.image.src.startsWith('http');
|
|
39
|
+
}).forEach(function (op) {
|
|
40
|
+
// Check if the image is public. Do not check data:image urls
|
|
41
|
+
// Use the backend to check if the image is public
|
|
42
|
+
// Due to CSP and other security measures, we can't check this in the frontend
|
|
43
|
+
// uuidv5 is a deterministic uuid generator based on a namespace and a name
|
|
44
|
+
// uuidv5.URL is the namespace for urls
|
|
45
|
+
var hookId = uuid_1.v5(op.insert.image.src, uuid_1.v5.URL);
|
|
46
|
+
noStoreSaga_1.noStoreHooks.registerNoStoreActionHook(hookId, function (data) {
|
|
47
|
+
noStoreSaga_1.noStoreHooks.unregisterNoStoreActionHook(hookId);
|
|
48
|
+
var contentTypeKey;
|
|
49
|
+
/**
|
|
50
|
+
* API fetches the URL, and `noStoreSaga` returns either the result or error
|
|
51
|
+
* * `data` is `null` when the API could not fetch the URL with a successful status code, and returns `null` => `nonPublic`
|
|
52
|
+
* * `data` is `FetchErrorData` if the API request itself failed, e.g. from some unknown error, we don't know if the image is public => do not update
|
|
53
|
+
* * `data` is a dictionary of headers when the API does fetch the URL
|
|
54
|
+
* * if there is no `Content-Type` header, we don't know if the image is public => do not update
|
|
55
|
+
* * if there is a `Content-Type` header, but is NOT an image type (i.e. it was a 302 that, when followed returned HTML)
|
|
56
|
+
* (I'm looking at you, Brightspace) => `nonPublic`
|
|
57
|
+
* * if there is a `Content-Type` header, and it is an image type, then the image is public => do not update
|
|
58
|
+
*/
|
|
59
|
+
if (!data ||
|
|
60
|
+
(!fetch_1.isFetchErrorData(data) &&
|
|
61
|
+
(contentTypeKey = Object.keys(data).find(function (k) { return k.toLowerCase() === 'content-type'; })) &&
|
|
62
|
+
!data[contentTypeKey][0].startsWith('image'))) {
|
|
63
|
+
var contents = quill.getContents();
|
|
64
|
+
var ops = contents.map(function (o) {
|
|
65
|
+
var _a;
|
|
66
|
+
return ((_a = o.insert.image) === null || _a === void 0 ? void 0 : _a.src) && op.insert.image.src && o.insert.image.src === op.insert.image.src
|
|
67
|
+
? __assign(__assign({}, o), { insert: __assign(__assign({}, o.insert), { image: __assign(__assign({}, o.insert.image), { nonPublic: true }) }) }) : o;
|
|
68
|
+
});
|
|
69
|
+
var updatedContents = contents.diff(new Delta(ops));
|
|
70
|
+
quill.updateContents(updatedContents);
|
|
54
71
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
noStore: true,
|
|
66
|
-
queryParams: {
|
|
67
|
-
url: op.insert.image.src
|
|
68
|
-
}
|
|
72
|
+
});
|
|
73
|
+
// This endpoint returns headers for a url. If the url is nonexistent, it will return null
|
|
74
|
+
actionCreator_1.dispatchModelFetchRequest({
|
|
75
|
+
modelName: 'urlChecker',
|
|
76
|
+
guid: hookId,
|
|
77
|
+
noStore: true,
|
|
78
|
+
queryParams: {
|
|
79
|
+
url: op.insert.image.src
|
|
80
|
+
}
|
|
81
|
+
});
|
|
69
82
|
});
|
|
70
|
-
});
|
|
71
83
|
};
|
|
72
84
|
exports.checkForNonPublicImages = checkForNonPublicImages;
|
|
73
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcXVpbGwiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl91dWlkIiwiX2FjdGlvbkNyZWF0b3IiLCJfbm9TdG9yZVNhZ2EiLCJfZmV0Y2giLCJEZWx0YSIsIlF1aWxsIiwiaW1wb3J0IiwiY2hlY2tGb3JOb25QdWJsaWNJbWFnZXMiLCJxdWlsbCIsImNoZWNrZWRJbWFnZXMiLCJnZXRDb250ZW50cyIsIm9wcyIsImZpbHRlciIsIm9wIiwiaW5zZXJ0IiwiaW1hZ2UiLCJmaW5kIiwic3JjIiwic3RhcnRzV2l0aCIsImZvckVhY2giLCJob29rSWQiLCJ1dWlkdjUiLCJVUkwiLCJub1N0b3JlSG9va3MiLCJyZWdpc3Rlck5vU3RvcmVBY3Rpb25Ib29rIiwiZGF0YSIsInVucmVnaXN0ZXJOb1N0b3JlQWN0aW9uSG9vayIsImNvbnRlbnRUeXBlS2V5IiwiaXNGZXRjaEVycm9yRGF0YSIsIk9iamVjdCIsImtleXMiLCJrIiwidG9Mb3dlckNhc2UiLCJjb250ZW50cyIsIm1hcCIsIm8iLCJub25QdWJsaWMiLCJ1cGRhdGVkQ29udGVudHMiLCJkaWZmIiwidXBkYXRlQ29udGVudHMiLCJkaXNwYXRjaE1vZGVsRmV0Y2hSZXF1ZXN0IiwibW9kZWxOYW1lIiwiZ3VpZCIsIm5vU3RvcmUiLCJxdWVyeVBhcmFtcyIsInVybCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcXVpbGwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFF1aWxsLCB7IERlbHRhT3BlcmF0aW9uIH0gZnJvbSAncXVpbGwnXHJcbmltcG9ydCB7IHY1IGFzIHV1aWR2NSB9IGZyb20gJ3V1aWQnXHJcbmltcG9ydCB7IEltYWdlVmFsdWUgfSBmcm9tICcuLi9jb21wb25lbnRzL1F1aWxsL0Zvcm1hdHMvSW1hZ2UnXHJcbmltcG9ydCB7IGRpc3BhdGNoTW9kZWxGZXRjaFJlcXVlc3QgfSBmcm9tICcuLi9yZWR1eC9hY3Rpb25DcmVhdG9yJ1xyXG5pbXBvcnQgeyBub1N0b3JlSG9va3MgfSBmcm9tICcuLi9yZWR1eC9zYWdhcy9ub1N0b3JlU2FnYSdcclxuaW1wb3J0IHsgRmV0Y2hFcnJvckRhdGEgfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgaXNGZXRjaEVycm9yRGF0YSB9IGZyb20gJy4vZmV0Y2gnXHJcblxyXG5jb25zdCBEZWx0YSA9IFF1aWxsLmltcG9ydCgnZGVsdGEnKVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIGZvciBub24tcHVibGljIGluIHRoZSBwcm92aWRlZCBxdWlsbCBjb250ZW50cy4gVXBkYXRlIHRoZSBJbWFnZVZhbHVlIG9mIGFuIG9wIGlmIGFuIGltYWdlIGlzIGZvdW5kIHRvIGJlXHJcbiAqIG5vbi1wdWJsaWMuXHJcbiAqIEBwYXJhbSBxdWlsbCBUaGUgUXVpbGwgaW5zdGFuY2VcclxuICogQHBhcmFtIGNoZWNrZWRJbWFnZXMgQSBsaXN0IG9mIGFsbCBpbWFnZXMgd2UgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZCBpbiBwcmV2aW91cyBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLlxyXG4gKiBsaXN0IG9mIHByb2Nlc3NlZCBpbWFnZXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBjaGVja0Zvck5vblB1YmxpY0ltYWdlcyA9IChxdWlsbDogUXVpbGwsIGNoZWNrZWRJbWFnZXM6IEltYWdlVmFsdWVbXSkgPT4ge1xyXG5cdHF1aWxsXHJcblx0XHQuZ2V0Q29udGVudHMoKVxyXG5cdFx0Lm9wcyAvLyBJcyB0aGUgb3AgYW4gaW1hZ2UgYW5kIGhhdmUgd2Ugbm90IHNlZW4gaXQgYmVmb3JlP1xyXG5cdFx0Py5maWx0ZXIoXHJcblx0XHRcdG9wID0+XHJcblx0XHRcdFx0b3AuaW5zZXJ0LmltYWdlICYmXHJcblx0XHRcdFx0IWNoZWNrZWRJbWFnZXMuZmluZChpbWFnZSA9PiBpbWFnZS5zcmMgPT09IG9wLmluc2VydC5pbWFnZS5zcmMpICYmXHJcblx0XHRcdFx0b3AuaW5zZXJ0LmltYWdlLnNyYy5zdGFydHNXaXRoKCdodHRwJylcclxuXHRcdClcclxuXHRcdC5mb3JFYWNoKG9wID0+IHtcclxuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGltYWdlIGlzIHB1YmxpYy4gRG8gbm90IGNoZWNrIGRhdGE6aW1hZ2UgdXJsc1xyXG5cdFx0XHQvLyBVc2UgdGhlIGJhY2tlbmQgdG8gY2hlY2sgaWYgdGhlIGltYWdlIGlzIHB1YmxpY1xyXG5cdFx0XHQvLyBEdWUgdG8gQ1NQIGFuZCBvdGhlciBzZWN1cml0eSBtZWFzdXJlcywgd2UgY2FuJ3QgY2hlY2sgdGhpcyBpbiB0aGUgZnJvbnRlbmRcclxuXHJcblx0XHRcdC8vIHV1aWR2NSBpcyBhIGRldGVybWluaXN0aWMgdXVpZCBnZW5lcmF0b3IgYmFzZWQgb24gYSBuYW1lc3BhY2UgYW5kIGEgbmFtZVxyXG5cdFx0XHQvLyB1dWlkdjUuVVJMIGlzIHRoZSBuYW1lc3BhY2UgZm9yIHVybHNcclxuXHRcdFx0Y29uc3QgaG9va0lkID0gdXVpZHY1KG9wLmluc2VydC5pbWFnZS5zcmMsIHV1aWR2NS5VUkwpXHJcblx0XHRcdG5vU3RvcmVIb29rcy5yZWdpc3Rlck5vU3RvcmVBY3Rpb25Ib29rKGhvb2tJZCwgKGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiB8IEZldGNoRXJyb3JEYXRhIHwgbnVsbCkgPT4ge1xyXG5cdFx0XHRcdG5vU3RvcmVIb29rcy51bnJlZ2lzdGVyTm9TdG9yZUFjdGlvbkhvb2soaG9va0lkKVxyXG5cdFx0XHRcdGxldCBjb250ZW50VHlwZUtleTogc3RyaW5nIHwgdW5kZWZpbmVkXHJcblx0XHRcdFx0LyoqXHJcblx0XHRcdFx0ICogQVBJIGZldGNoZXMgdGhlIFVSTCwgYW5kIGBub1N0b3JlU2FnYWAgcmV0dXJucyBlaXRoZXIgdGhlIHJlc3VsdCBvciBlcnJvclxyXG5cdFx0XHRcdCAqICogYGRhdGFgIGlzIGBudWxsYCB3aGVuIHRoZSBBUEkgY291bGQgbm90IGZldGNoIHRoZSBVUkwgd2l0aCBhIHN1Y2Nlc3NmdWwgc3RhdHVzIGNvZGUsIGFuZCByZXR1cm5zIGBudWxsYCA9PiBgbm9uUHVibGljYFxyXG5cdFx0XHRcdCAqICogYGRhdGFgIGlzIGBGZXRjaEVycm9yRGF0YWAgaWYgdGhlIEFQSSByZXF1ZXN0IGl0c2VsZiBmYWlsZWQsIGUuZy4gZnJvbSBzb21lIHVua25vd24gZXJyb3IsIHdlIGRvbid0IGtub3cgaWYgdGhlIGltYWdlIGlzIHB1YmxpYyA9PiBkbyBub3QgdXBkYXRlXHJcblx0XHRcdFx0ICogKiBgZGF0YWAgaXMgYSBkaWN0aW9uYXJ5IG9mIGhlYWRlcnMgd2hlbiB0aGUgQVBJIGRvZXMgZmV0Y2ggdGhlIFVSTFxyXG5cdFx0XHRcdCAqICAgKiBpZiB0aGVyZSBpcyBubyBgQ29udGVudC1UeXBlYCBoZWFkZXIsIHdlIGRvbid0IGtub3cgaWYgdGhlIGltYWdlIGlzIHB1YmxpYyA9PiBkbyBub3QgdXBkYXRlXHJcblx0XHRcdFx0ICogICAqIGlmIHRoZXJlIGlzIGEgYENvbnRlbnQtVHlwZWAgaGVhZGVyLCBidXQgaXMgTk9UIGFuIGltYWdlIHR5cGUgKGkuZS4gaXQgd2FzIGEgMzAyIHRoYXQsIHdoZW4gZm9sbG93ZWQgcmV0dXJuZWQgSFRNTClcclxuXHRcdFx0XHQgKiAgICAgKEknbSBsb29raW5nIGF0IHlvdSwgQnJpZ2h0c3BhY2UpID0+IGBub25QdWJsaWNgXHJcblx0XHRcdFx0ICogICAqIGlmIHRoZXJlIGlzIGEgYENvbnRlbnQtVHlwZWAgaGVhZGVyLCBhbmQgaXQgaXMgYW4gaW1hZ2UgdHlwZSwgdGhlbiB0aGUgaW1hZ2UgaXMgcHVibGljID0+IGRvIG5vdCB1cGRhdGVcclxuXHRcdFx0XHQgKi9cclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHQhZGF0YSB8fFxyXG5cdFx0XHRcdFx0KCFpc0ZldGNoRXJyb3JEYXRhKGRhdGEpICYmXHJcblx0XHRcdFx0XHRcdChjb250ZW50VHlwZUtleSA9IE9iamVjdC5rZXlzKGRhdGEpLmZpbmQoayA9PiBrLnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKSkgJiZcclxuXHRcdFx0XHRcdFx0IWRhdGFbY29udGVudFR5cGVLZXldWzBdLnN0YXJ0c1dpdGgoJ2ltYWdlJykpXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb25zdCBjb250ZW50cyA9IHF1aWxsLmdldENvbnRlbnRzKClcclxuXHRcdFx0XHRcdGNvbnN0IG9wcyA9IGNvbnRlbnRzLm1hcCgobzogRGVsdGFPcGVyYXRpb24pID0+XHJcblx0XHRcdFx0XHRcdG8uaW5zZXJ0LmltYWdlPy5zcmMgJiYgb3AuaW5zZXJ0LmltYWdlLnNyYyAmJiBvLmluc2VydC5pbWFnZS5zcmMgPT09IG9wLmluc2VydC5pbWFnZS5zcmNcclxuXHRcdFx0XHRcdFx0XHQ/IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Li4ubyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0aW5zZXJ0OiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Li4uby5pbnNlcnQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aW1hZ2U6IHsgLi4uby5pbnNlcnQuaW1hZ2UsIG5vblB1YmxpYzogdHJ1ZSB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHQ6IG9cclxuXHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdGNvbnN0IHVwZGF0ZWRDb250ZW50cyA9IGNvbnRlbnRzLmRpZmYobmV3IERlbHRhKG9wcykpXHJcblx0XHRcdFx0XHRxdWlsbC51cGRhdGVDb250ZW50cyh1cGRhdGVkQ29udGVudHMpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0XHQvLyBUaGlzIGVuZHBvaW50IHJldHVybnMgaGVhZGVycyBmb3IgYSB1cmwuIElmIHRoZSB1cmwgaXMgbm9uZXhpc3RlbnQsIGl0IHdpbGwgcmV0dXJuIG51bGxcclxuXHRcdFx0ZGlzcGF0Y2hNb2RlbEZldGNoUmVxdWVzdCh7XHJcblx0XHRcdFx0bW9kZWxOYW1lOiAndXJsQ2hlY2tlcicsXHJcblx0XHRcdFx0Z3VpZDogaG9va0lkLFxyXG5cdFx0XHRcdG5vU3RvcmU6IHRydWUsXHJcblx0XHRcdFx0cXVlcnlQYXJhbXM6IHtcclxuXHRcdFx0XHRcdHVybDogb3AuaW5zZXJ0LmltYWdlLnNyY1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdH0pXHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsY0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBSCxPQUFBO0FBRUEsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBRUEsTUFBTUssS0FBSyxHQUFHQyxjQUFLLENBQUNDLE1BQU0sQ0FBQyxPQUFPLENBQUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTUMsdUJBQXVCLEdBQUdBLENBQUNDLEtBQVksRUFBRUMsYUFBMkIsS0FBSztFQUNyRkQsS0FBSyxDQUNIRSxXQUFXLENBQUMsQ0FBQyxDQUNiQyxHQUFHLENBQUM7RUFBQSxFQUNIQyxNQUFNLENBQ1BDLEVBQUUsSUFDREEsRUFBRSxDQUFDQyxNQUFNLENBQUNDLEtBQUssSUFDZixDQUFDTixhQUFhLENBQUNPLElBQUksQ0FBQ0QsS0FBSyxJQUFJQSxLQUFLLENBQUNFLEdBQUcsS0FBS0osRUFBRSxDQUFDQyxNQUFNLENBQUNDLEtBQUssQ0FBQ0UsR0FBRyxDQUFDLElBQy9ESixFQUFFLENBQUNDLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDRSxHQUFHLENBQUNDLFVBQVUsQ0FBQyxNQUFNLENBQ3ZDLENBQUMsQ0FDQUMsT0FBTyxDQUFDTixFQUFFLElBQUk7SUFDZDtJQUNBO0lBQ0E7O0lBRUE7SUFDQTtJQUNBLE1BQU1PLE1BQU0sR0FBRyxJQUFBQyxRQUFNLEVBQUNSLEVBQUUsQ0FBQ0MsTUFBTSxDQUFDQyxLQUFLLENBQUNFLEdBQUcsRUFBRUksUUFBTSxDQUFDQyxHQUFHLENBQUM7SUFDdERDLHlCQUFZLENBQUNDLHlCQUF5QixDQUFDSixNQUFNLEVBQUdLLElBQXNELElBQUs7TUFDMUdGLHlCQUFZLENBQUNHLDJCQUEyQixDQUFDTixNQUFNLENBQUM7TUFDaEQsSUFBSU8sY0FBa0M7TUFDdEM7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7TUFDSSxJQUNDLENBQUNGLElBQUksSUFDSixDQUFDLElBQUFHLHVCQUFnQixFQUFDSCxJQUFJLENBQUMsS0FDdEJFLGNBQWMsR0FBR0UsTUFBTSxDQUFDQyxJQUFJLENBQUNMLElBQUksQ0FBQyxDQUFDVCxJQUFJLENBQUNlLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxXQUFXLENBQUMsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxDQUFDLElBQ2xGLENBQUNQLElBQUksQ0FBQ0UsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNULFVBQVUsQ0FBQyxPQUFPLENBQUUsRUFDN0M7UUFDRCxNQUFNZSxRQUFRLEdBQUd6QixLQUFLLENBQUNFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BDLE1BQU1DLEdBQUcsR0FBR3NCLFFBQVEsQ0FBQ0MsR0FBRyxDQUFFQyxDQUFpQixJQUMxQ0EsQ0FBQyxDQUFDckIsTUFBTSxDQUFDQyxLQUFLLEVBQUVFLEdBQUcsSUFBSUosRUFBRSxDQUFDQyxNQUFNLENBQUNDLEtBQUssQ0FBQ0UsR0FBRyxJQUFJa0IsQ0FBQyxDQUFDckIsTUFBTSxDQUFDQyxLQUFLLENBQUNFLEdBQUcsS0FBS0osRUFBRSxDQUFDQyxNQUFNLENBQUNDLEtBQUssQ0FBQ0UsR0FBRyxHQUNyRjtVQUNBLEdBQUdrQixDQUFDO1VBQ0pyQixNQUFNLEVBQUU7WUFDUCxHQUFHcUIsQ0FBQyxDQUFDckIsTUFBTTtZQUNYQyxLQUFLLEVBQUU7Y0FBRSxHQUFHb0IsQ0FBQyxDQUFDckIsTUFBTSxDQUFDQyxLQUFLO2NBQUVxQixTQUFTLEVBQUU7WUFBSztVQUM3QztRQUNELENBQUMsR0FDQUQsQ0FDSixDQUFDO1FBQ0QsTUFBTUUsZUFBZSxHQUFHSixRQUFRLENBQUNLLElBQUksQ0FBQyxJQUFJbEMsS0FBSyxDQUFDTyxHQUFHLENBQUMsQ0FBQztRQUNyREgsS0FBSyxDQUFDK0IsY0FBYyxDQUFDRixlQUFlLENBQUM7TUFDdEM7SUFDRCxDQUFDLENBQUM7SUFDRjtJQUNBLElBQUFHLHdDQUF5QixFQUFDO01BQ3pCQyxTQUFTLEVBQUUsWUFBWTtNQUN2QkMsSUFBSSxFQUFFdEIsTUFBTTtNQUNadUIsT0FBTyxFQUFFLElBQUk7TUFDYkMsV0FBVyxFQUFFO1FBQ1pDLEdBQUcsRUFBRWhDLEVBQUUsQ0FBQ0MsTUFBTSxDQUFDQyxLQUFLLENBQUNFO01BQ3RCO0lBQ0QsQ0FBQyxDQUFDO0VBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUFBNkIsT0FBQSxDQUFBdkMsdUJBQUEsR0FBQUEsdUJBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
package/lib/utils/route.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Dictionary } from 'lodash';
|
|
2
|
-
export declare const getModelIdFromRouteMatchParams: (routeMatchParams: Dictionary<
|
|
3
|
-
export declare const getPathParamsFromRouteMatchParams: (routeMatchParams: Dictionary<
|
|
2
|
+
export declare const getModelIdFromRouteMatchParams: (routeMatchParams: Dictionary<any>, modelName: string) => string | number | undefined;
|
|
3
|
+
export declare const getPathParamsFromRouteMatchParams: (routeMatchParams: Dictionary<any>, modelName: string) => any[];
|
|
4
4
|
export declare const getMinRequiredPathParamsCount: (modelName: string) => number;
|
|
5
5
|
export declare const getReduxModelName: (pathParams: any[], modelName: string) => string;
|
package/lib/utils/route.js
CHANGED
|
@@ -1,70 +1,69 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.getReduxModelName = exports.getPathParamsFromRouteMatchParams = exports.getModelIdFromRouteMatchParams = exports.getMinRequiredPathParamsCount = void 0;
|
|
8
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
|
-
var _pluralize = _interopRequireDefault(require("pluralize"));
|
|
10
|
-
var _configuration = require("../constants/configuration");
|
|
11
|
-
const getModelIdFromRouteMatchParams = (routeMatchParams, modelName) => {
|
|
12
|
-
const singularModelName = _pluralize.default.singular(modelName);
|
|
13
|
-
const id = routeMatchParams[`${singularModelName}Id`];
|
|
14
|
-
if (!id || isNaN(Number(id))) {
|
|
15
|
-
return id;
|
|
16
|
-
}
|
|
17
|
-
return parseInt(id, 10);
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
4
|
};
|
|
19
|
-
exports
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getReduxModelName = exports.getMinRequiredPathParamsCount = exports.getPathParamsFromRouteMatchParams = exports.getModelIdFromRouteMatchParams = void 0;
|
|
7
|
+
var lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
var pluralize_1 = __importDefault(require("pluralize"));
|
|
9
|
+
var configuration_1 = require("../constants/configuration");
|
|
10
|
+
var getModelIdFromRouteMatchParams = function (routeMatchParams, modelName) {
|
|
11
|
+
var singularModelName = pluralize_1.default.singular(modelName);
|
|
12
|
+
var id = routeMatchParams[singularModelName + "Id"];
|
|
13
|
+
if (isNaN(id)) {
|
|
14
|
+
return id;
|
|
25
15
|
}
|
|
26
|
-
return
|
|
27
|
-
|
|
28
|
-
|
|
16
|
+
return parseInt(id, 10);
|
|
17
|
+
};
|
|
18
|
+
exports.getModelIdFromRouteMatchParams = getModelIdFromRouteMatchParams;
|
|
19
|
+
var getPathParamsFromRouteMatchParams = function (routeMatchParams, modelName) {
|
|
20
|
+
var pathParams = modelName.split('.').reduce(function (retval, levelName) {
|
|
21
|
+
var levelId = exports.getModelIdFromRouteMatchParams(routeMatchParams, levelName);
|
|
22
|
+
if (levelId) {
|
|
23
|
+
retval.push(levelId);
|
|
24
|
+
}
|
|
25
|
+
return retval;
|
|
26
|
+
}, []);
|
|
27
|
+
return pathParams;
|
|
29
28
|
};
|
|
30
29
|
exports.getPathParamsFromRouteMatchParams = getPathParamsFromRouteMatchParams;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
30
|
+
var getMinRequiredPathParamsCount = function (modelName) {
|
|
31
|
+
var endpointMappings = configuration_1.getEndpointMappings();
|
|
32
|
+
var pathParamCount = 0;
|
|
33
|
+
var modelLevelNames = modelName.split('.');
|
|
34
|
+
modelLevelNames.forEach(function (levelName, index) {
|
|
35
|
+
var modelLevelName = modelLevelNames.slice(0, index + 1).join('.');
|
|
36
|
+
var modelLevel = modelLevelName ? lodash_1.default.get(endpointMappings, modelLevelName) : {};
|
|
37
|
+
var modelConfig = lodash_1.default.merge({}, modelLevel._config);
|
|
38
|
+
if (modelConfig.isCollection && index + 1 < modelLevelNames.length) {
|
|
39
|
+
pathParamCount++;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
return pathParamCount;
|
|
44
43
|
};
|
|
45
44
|
exports.getMinRequiredPathParamsCount = getMinRequiredPathParamsCount;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
45
|
+
var getReduxModelName = function (pathParams, modelName) {
|
|
46
|
+
var endpointMappings = configuration_1.getEndpointMappings();
|
|
47
|
+
var reduxModelName = modelName;
|
|
48
|
+
if (pathParams.length > 0) {
|
|
49
|
+
var pathParamIndex_1 = 0;
|
|
50
|
+
var modelLevelNames_1 = modelName.split('.');
|
|
51
|
+
modelLevelNames_1.forEach(function (levelName, index) {
|
|
52
|
+
var modelLevelName = modelLevelNames_1.slice(0, index + 1).join('.');
|
|
53
|
+
var modelLevel = modelLevelName ? lodash_1.default.get(endpointMappings, modelLevelName) : {};
|
|
54
|
+
var modelConfig = lodash_1.default.merge({}, modelLevel._config);
|
|
55
|
+
if (index === 0) {
|
|
56
|
+
reduxModelName = levelName;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
reduxModelName = reduxModelName + "." + levelName;
|
|
60
|
+
}
|
|
61
|
+
if (pathParams.length - 1 >= pathParamIndex_1 && modelConfig.isCollection) {
|
|
62
|
+
reduxModelName = reduxModelName + "." + pathParams[pathParamIndex_1];
|
|
63
|
+
pathParamIndex_1++;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return reduxModelName;
|
|
68
68
|
};
|
|
69
69
|
exports.getReduxModelName = getReduxModelName;
|
|
70
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcGx1cmFsaXplIiwiX2NvbmZpZ3VyYXRpb24iLCJnZXRNb2RlbElkRnJvbVJvdXRlTWF0Y2hQYXJhbXMiLCJyb3V0ZU1hdGNoUGFyYW1zIiwibW9kZWxOYW1lIiwic2luZ3VsYXJNb2RlbE5hbWUiLCJwbHVyYWxpemUiLCJzaW5ndWxhciIsImlkIiwiaXNOYU4iLCJOdW1iZXIiLCJwYXJzZUludCIsImV4cG9ydHMiLCJnZXRQYXRoUGFyYW1zRnJvbVJvdXRlTWF0Y2hQYXJhbXMiLCJwYXRoUGFyYW1zIiwic3BsaXQiLCJyZWR1Y2UiLCJyZXR2YWwiLCJsZXZlbE5hbWUiLCJsZXZlbElkIiwicHVzaCIsImdldE1pblJlcXVpcmVkUGF0aFBhcmFtc0NvdW50IiwiZW5kcG9pbnRNYXBwaW5ncyIsImdldEVuZHBvaW50TWFwcGluZ3MiLCJwYXRoUGFyYW1Db3VudCIsIm1vZGVsTGV2ZWxOYW1lcyIsImZvckVhY2giLCJpbmRleCIsIm1vZGVsTGV2ZWxOYW1lIiwic2xpY2UiLCJqb2luIiwibW9kZWxMZXZlbCIsIl8iLCJnZXQiLCJtb2RlbENvbmZpZyIsIm1lcmdlIiwiX2NvbmZpZyIsImlzQ29sbGVjdGlvbiIsImxlbmd0aCIsImdldFJlZHV4TW9kZWxOYW1lIiwicmVkdXhNb2RlbE5hbWUiLCJwYXRoUGFyYW1JbmRleCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9yb3V0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXywgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnbG9kYXNoJ1xyXG5pbXBvcnQgcGx1cmFsaXplIGZyb20gJ3BsdXJhbGl6ZSdcclxuaW1wb3J0IHsgZ2V0RW5kcG9pbnRNYXBwaW5ncyB9IGZyb20gJy4uL2NvbnN0YW50cy9jb25maWd1cmF0aW9uJ1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldE1vZGVsSWRGcm9tUm91dGVNYXRjaFBhcmFtcyA9IChyb3V0ZU1hdGNoUGFyYW1zOiBEaWN0aW9uYXJ5PHN0cmluZz4sIG1vZGVsTmFtZTogc3RyaW5nKSA9PiB7XHJcblx0Y29uc3Qgc2luZ3VsYXJNb2RlbE5hbWUgPSBwbHVyYWxpemUuc2luZ3VsYXIobW9kZWxOYW1lKVxyXG5cdGNvbnN0IGlkID0gcm91dGVNYXRjaFBhcmFtc1tgJHtzaW5ndWxhck1vZGVsTmFtZX1JZGBdIGFzIHN0cmluZyB8IHVuZGVmaW5lZFxyXG5cdGlmICghaWQgfHwgaXNOYU4oTnVtYmVyKGlkKSkpIHtcclxuXHRcdHJldHVybiBpZFxyXG5cdH1cclxuXHRyZXR1cm4gcGFyc2VJbnQoaWQsIDEwKVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0UGF0aFBhcmFtc0Zyb21Sb3V0ZU1hdGNoUGFyYW1zID0gKHJvdXRlTWF0Y2hQYXJhbXM6IERpY3Rpb25hcnk8c3RyaW5nPiwgbW9kZWxOYW1lOiBzdHJpbmcpID0+IHtcclxuXHRjb25zdCBwYXRoUGFyYW1zID0gbW9kZWxOYW1lLnNwbGl0KCcuJykucmVkdWNlKChyZXR2YWw6IGFueVtdLCBsZXZlbE5hbWUpID0+IHtcclxuXHRcdGNvbnN0IGxldmVsSWQgPSBnZXRNb2RlbElkRnJvbVJvdXRlTWF0Y2hQYXJhbXMocm91dGVNYXRjaFBhcmFtcywgbGV2ZWxOYW1lKVxyXG5cdFx0aWYgKGxldmVsSWQpIHtcclxuXHRcdFx0cmV0dmFsLnB1c2gobGV2ZWxJZClcclxuXHRcdH1cclxuXHRcdHJldHVybiByZXR2YWxcclxuXHR9LCBbXSlcclxuXHRyZXR1cm4gcGF0aFBhcmFtc1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0TWluUmVxdWlyZWRQYXRoUGFyYW1zQ291bnQgPSAobW9kZWxOYW1lOiBzdHJpbmcpID0+IHtcclxuXHRjb25zdCBlbmRwb2ludE1hcHBpbmdzID0gZ2V0RW5kcG9pbnRNYXBwaW5ncygpXHJcblx0bGV0IHBhdGhQYXJhbUNvdW50ID0gMFxyXG5cdGNvbnN0IG1vZGVsTGV2ZWxOYW1lcyA9IG1vZGVsTmFtZS5zcGxpdCgnLicpXHJcblx0bW9kZWxMZXZlbE5hbWVzLmZvckVhY2goKGxldmVsTmFtZSwgaW5kZXgpID0+IHtcclxuXHRcdGNvbnN0IG1vZGVsTGV2ZWxOYW1lID0gbW9kZWxMZXZlbE5hbWVzLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLicpXHJcblx0XHRjb25zdCBtb2RlbExldmVsID0gbW9kZWxMZXZlbE5hbWUgPyBfLmdldChlbmRwb2ludE1hcHBpbmdzLCBtb2RlbExldmVsTmFtZSkgOiB7fVxyXG5cdFx0Y29uc3QgbW9kZWxDb25maWcgPSBfLm1lcmdlKHt9LCBtb2RlbExldmVsLl9jb25maWcpXHJcblx0XHRpZiAobW9kZWxDb25maWcuaXNDb2xsZWN0aW9uICYmIGluZGV4ICsgMSA8IG1vZGVsTGV2ZWxOYW1lcy5sZW5ndGgpIHtcclxuXHRcdFx0cGF0aFBhcmFtQ291bnQrK1xyXG5cdFx0fVxyXG5cdH0pXHJcblx0cmV0dXJuIHBhdGhQYXJhbUNvdW50XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRSZWR1eE1vZGVsTmFtZSA9IChwYXRoUGFyYW1zOiBhbnlbXSwgbW9kZWxOYW1lOiBzdHJpbmcpID0+IHtcclxuXHRjb25zdCBlbmRwb2ludE1hcHBpbmdzID0gZ2V0RW5kcG9pbnRNYXBwaW5ncygpXHJcblx0bGV0IHJlZHV4TW9kZWxOYW1lID0gbW9kZWxOYW1lXHJcblx0aWYgKHBhdGhQYXJhbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0bGV0IHBhdGhQYXJhbUluZGV4ID0gMFxyXG5cdFx0Y29uc3QgbW9kZWxMZXZlbE5hbWVzID0gbW9kZWxOYW1lLnNwbGl0KCcuJylcclxuXHRcdG1vZGVsTGV2ZWxOYW1lcy5mb3JFYWNoKChsZXZlbE5hbWUsIGluZGV4KSA9PiB7XHJcblx0XHRcdGNvbnN0IG1vZGVsTGV2ZWxOYW1lID0gbW9kZWxMZXZlbE5hbWVzLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLicpXHJcblx0XHRcdGNvbnN0IG1vZGVsTGV2ZWwgPSBtb2RlbExldmVsTmFtZSA/IF8uZ2V0KGVuZHBvaW50TWFwcGluZ3MsIG1vZGVsTGV2ZWxOYW1lKSA6IHt9XHJcblx0XHRcdGNvbnN0IG1vZGVsQ29uZmlnID0gXy5tZXJnZSh7fSwgbW9kZWxMZXZlbC5fY29uZmlnKVxyXG5cdFx0XHRpZiAoaW5kZXggPT09IDApIHtcclxuXHRcdFx0XHRyZWR1eE1vZGVsTmFtZSA9IGxldmVsTmFtZVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJlZHV4TW9kZWxOYW1lID0gYCR7cmVkdXhNb2RlbE5hbWV9LiR7bGV2ZWxOYW1lfWBcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAocGF0aFBhcmFtcy5sZW5ndGggLSAxID49IHBhdGhQYXJhbUluZGV4ICYmIG1vZGVsQ29uZmlnLmlzQ29sbGVjdGlvbikge1xyXG5cdFx0XHRcdHJlZHV4TW9kZWxOYW1lID0gYCR7cmVkdXhNb2RlbE5hbWV9LiR7cGF0aFBhcmFtc1twYXRoUGFyYW1JbmRleF19YFxyXG5cdFx0XHRcdHBhdGhQYXJhbUluZGV4KytcclxuXHRcdFx0fVxyXG5cdFx0fSlcclxuXHR9XHJcblx0cmV0dXJuIHJlZHV4TW9kZWxOYW1lXHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsY0FBQSxHQUFBRixPQUFBO0FBRU8sTUFBTUcsOEJBQThCLEdBQUdBLENBQUNDLGdCQUFvQyxFQUFFQyxTQUFpQixLQUFLO0VBQzFHLE1BQU1DLGlCQUFpQixHQUFHQyxrQkFBUyxDQUFDQyxRQUFRLENBQUNILFNBQVMsQ0FBQztFQUN2RCxNQUFNSSxFQUFFLEdBQUdMLGdCQUFnQixDQUFDLEdBQUdFLGlCQUFpQixJQUFJLENBQXVCO0VBQzNFLElBQUksQ0FBQ0csRUFBRSxJQUFJQyxLQUFLLENBQUNDLE1BQU0sQ0FBQ0YsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUM3QixPQUFPQSxFQUFFO0VBQ1Y7RUFDQSxPQUFPRyxRQUFRLENBQUNILEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDeEIsQ0FBQztBQUFBSSxPQUFBLENBQUFWLDhCQUFBLEdBQUFBLDhCQUFBO0FBRU0sTUFBTVcsaUNBQWlDLEdBQUdBLENBQUNWLGdCQUFvQyxFQUFFQyxTQUFpQixLQUFLO0VBQzdHLE1BQU1VLFVBQVUsR0FBR1YsU0FBUyxDQUFDVyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUNDLE1BQU0sQ0FBQyxDQUFDQyxNQUFhLEVBQUVDLFNBQVMsS0FBSztJQUM1RSxNQUFNQyxPQUFPLEdBQUdqQiw4QkFBOEIsQ0FBQ0MsZ0JBQWdCLEVBQUVlLFNBQVMsQ0FBQztJQUMzRSxJQUFJQyxPQUFPLEVBQUU7TUFDWkYsTUFBTSxDQUFDRyxJQUFJLENBQUNELE9BQU8sQ0FBQztJQUNyQjtJQUNBLE9BQU9GLE1BQU07RUFDZCxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ04sT0FBT0gsVUFBVTtBQUNsQixDQUFDO0FBQUFGLE9BQUEsQ0FBQUMsaUNBQUEsR0FBQUEsaUNBQUE7QUFFTSxNQUFNUSw2QkFBNkIsR0FBSWpCLFNBQWlCLElBQUs7RUFDbkUsTUFBTWtCLGdCQUFnQixHQUFHLElBQUFDLGtDQUFtQixFQUFDLENBQUM7RUFDOUMsSUFBSUMsY0FBYyxHQUFHLENBQUM7RUFDdEIsTUFBTUMsZUFBZSxHQUFHckIsU0FBUyxDQUFDVyxLQUFLLENBQUMsR0FBRyxDQUFDO0VBQzVDVSxlQUFlLENBQUNDLE9BQU8sQ0FBQyxDQUFDUixTQUFTLEVBQUVTLEtBQUssS0FBSztJQUM3QyxNQUFNQyxjQUFjLEdBQUdILGVBQWUsQ0FBQ0ksS0FBSyxDQUFDLENBQUMsRUFBRUYsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDRyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3BFLE1BQU1DLFVBQVUsR0FBR0gsY0FBYyxHQUFHSSxlQUFDLENBQUNDLEdBQUcsQ0FBQ1gsZ0JBQWdCLEVBQUVNLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRixNQUFNTSxXQUFXLEdBQUdGLGVBQUMsQ0FBQ0csS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFSixVQUFVLENBQUNLLE9BQU8sQ0FBQztJQUNuRCxJQUFJRixXQUFXLENBQUNHLFlBQVksSUFBSVYsS0FBSyxHQUFHLENBQUMsR0FBR0YsZUFBZSxDQUFDYSxNQUFNLEVBQUU7TUFDbkVkLGNBQWMsRUFBRTtJQUNqQjtFQUNELENBQUMsQ0FBQztFQUNGLE9BQU9BLGNBQWM7QUFDdEIsQ0FBQztBQUFBWixPQUFBLENBQUFTLDZCQUFBLEdBQUFBLDZCQUFBO0FBRU0sTUFBTWtCLGlCQUFpQixHQUFHQSxDQUFDekIsVUFBaUIsRUFBRVYsU0FBaUIsS0FBSztFQUMxRSxNQUFNa0IsZ0JBQWdCLEdBQUcsSUFBQUMsa0NBQW1CLEVBQUMsQ0FBQztFQUM5QyxJQUFJaUIsY0FBYyxHQUFHcEMsU0FBUztFQUM5QixJQUFJVSxVQUFVLENBQUN3QixNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQzFCLElBQUlHLGNBQWMsR0FBRyxDQUFDO0lBQ3RCLE1BQU1oQixlQUFlLEdBQUdyQixTQUFTLENBQUNXLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFDNUNVLGVBQWUsQ0FBQ0MsT0FBTyxDQUFDLENBQUNSLFNBQVMsRUFBRVMsS0FBSyxLQUFLO01BQzdDLE1BQU1DLGNBQWMsR0FBR0gsZUFBZSxDQUFDSSxLQUFLLENBQUMsQ0FBQyxFQUFFRixLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUNHLElBQUksQ0FBQyxHQUFHLENBQUM7TUFDcEUsTUFBTUMsVUFBVSxHQUFHSCxjQUFjLEdBQUdJLGVBQUMsQ0FBQ0MsR0FBRyxDQUFDWCxnQkFBZ0IsRUFBRU0sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ2hGLE1BQU1NLFdBQVcsR0FBR0YsZUFBQyxDQUFDRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUVKLFVBQVUsQ0FBQ0ssT0FBTyxDQUFDO01BQ25ELElBQUlULEtBQUssS0FBSyxDQUFDLEVBQUU7UUFDaEJhLGNBQWMsR0FBR3RCLFNBQVM7TUFDM0IsQ0FBQyxNQUFNO1FBQ05zQixjQUFjLEdBQUcsR0FBR0EsY0FBYyxJQUFJdEIsU0FBUyxFQUFFO01BQ2xEO01BQ0EsSUFBSUosVUFBVSxDQUFDd0IsTUFBTSxHQUFHLENBQUMsSUFBSUcsY0FBYyxJQUFJUCxXQUFXLENBQUNHLFlBQVksRUFBRTtRQUN4RUcsY0FBYyxHQUFHLEdBQUdBLGNBQWMsSUFBSTFCLFVBQVUsQ0FBQzJCLGNBQWMsQ0FBQyxFQUFFO1FBQ2xFQSxjQUFjLEVBQUU7TUFDakI7SUFDRCxDQUFDLENBQUM7RUFDSDtFQUNBLE9BQU9ELGNBQWM7QUFDdEIsQ0FBQztBQUFBNUIsT0FBQSxDQUFBMkIsaUJBQUEsR0FBQUEsaUJBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
package/lib/utils/search.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export declare const isEntityMatchedByKeywords: (entity: {
|
|
|
14
14
|
export declare const searchEntities: <T extends {
|
|
15
15
|
isDeleted: boolean;
|
|
16
16
|
activities: string[];
|
|
17
|
-
}>(entityArray: T[], entityMatchFunction: (entity: T, keywordsList: string[]) => boolean, readActivity: string, canReadAnyGlobally?: boolean, keywords?: string) => Record<number, T[]>;
|
|
17
|
+
}>(entityArray: T[], entityMatchFunction: (entity: T, keywordsList: string[]) => boolean, readActivity: string, canReadAnyGlobally?: boolean | undefined, keywords?: string | undefined) => Record<number, T[]>;
|
|
18
18
|
export interface SearchModelArrayParams<TModel> {
|
|
19
19
|
modelArray: TModel[];
|
|
20
20
|
canReadyAnyGlobally?: boolean;
|
package/lib/utils/search.js
CHANGED
|
@@ -1,89 +1,96 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.searchGroups = exports.searchEntities = exports.isEntityMatchedByKeywords = exports.isEntityMatchedByKeyword = exports.isEntityUserMatchedByKeyword = exports.getKeywordsList = void 0;
|
|
4
|
+
var table_1 = require("../constants/table");
|
|
5
|
+
var date_1 = require("./date");
|
|
6
|
+
var groupDates_1 = require("./groupDates");
|
|
7
|
+
var groupRoles_1 = require("./groupRoles");
|
|
8
|
+
var getKeywordsList = function (keywords) {
|
|
9
|
+
if (!keywords)
|
|
10
|
+
return [];
|
|
11
|
+
return keywords
|
|
12
|
+
.trim()
|
|
13
|
+
.toLowerCase()
|
|
14
|
+
.split(' ')
|
|
15
|
+
.filter(function (k) { return !!k; });
|
|
14
16
|
};
|
|
15
17
|
exports.getKeywordsList = getKeywordsList;
|
|
16
|
-
|
|
18
|
+
var isEntityUserMatchedByKeyword = function (owner, keyword) {
|
|
19
|
+
var _a, _b, _c, _d;
|
|
20
|
+
return owner.id.toString().toLowerCase().includes(keyword) ||
|
|
21
|
+
!!((_a = owner.firstName) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(keyword)) ||
|
|
22
|
+
!!((_b = owner.lastName) === null || _b === void 0 ? void 0 : _b.toString().toLowerCase().includes(keyword)) ||
|
|
23
|
+
!!((_c = owner.email) === null || _c === void 0 ? void 0 : _c.toString().toLowerCase().includes(keyword)) ||
|
|
24
|
+
!!((_d = owner.uid) === null || _d === void 0 ? void 0 : _d.toString().toLowerCase().includes(keyword));
|
|
25
|
+
};
|
|
17
26
|
exports.isEntityUserMatchedByKeyword = isEntityUserMatchedByKeyword;
|
|
18
|
-
|
|
27
|
+
var isEntityMatchedByKeyword = function (entity, keyword) {
|
|
28
|
+
return entity.id.toString().toLowerCase().includes(keyword) ||
|
|
29
|
+
entity.name.toLowerCase().includes(keyword) ||
|
|
30
|
+
entity.owners.some(function (owner) { return exports.isEntityUserMatchedByKeyword(owner, keyword); });
|
|
31
|
+
};
|
|
19
32
|
exports.isEntityMatchedByKeyword = isEntityMatchedByKeyword;
|
|
20
|
-
|
|
33
|
+
var isEntityMatchedByKeywords = function (entity, keywordsList) { return !keywordsList || keywordsList.length === 0 || keywordsList.every(function (k) { return exports.isEntityMatchedByKeyword(entity, k); }); };
|
|
21
34
|
exports.isEntityMatchedByKeywords = isEntityMatchedByKeywords;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
var searchEntities = function (entityArray, entityMatchFunction, readActivity, canReadAnyGlobally, keywords) {
|
|
36
|
+
var _a;
|
|
37
|
+
var keywordsList = exports.getKeywordsList(keywords);
|
|
38
|
+
var filteredEntities = entityArray.reduce(function (acc, e) {
|
|
39
|
+
var _a;
|
|
40
|
+
// exclude if cannot read any entity and does not have the read activity
|
|
41
|
+
if (!canReadAnyGlobally && !e.activities.includes(readActivity))
|
|
42
|
+
return acc;
|
|
43
|
+
// exclude if does not match, if any
|
|
44
|
+
if (!entityMatchFunction(e, keywordsList))
|
|
45
|
+
return acc;
|
|
46
|
+
// add entity to the corresponding tab filtered array
|
|
47
|
+
var tab = e.isDeleted ? table_1.MANAGE_TABLE_TAB.DELETED : table_1.MANAGE_TABLE_TAB.AVAILABLE;
|
|
48
|
+
var tabArray = (_a = acc[tab]) !== null && _a !== void 0 ? _a : [];
|
|
49
|
+
tabArray.push(e);
|
|
50
|
+
acc[tab] = tabArray;
|
|
51
|
+
return acc;
|
|
52
|
+
}, (_a = {}, _a[table_1.MANAGE_TABLE_TAB.AVAILABLE] = [], _a[table_1.MANAGE_TABLE_TAB.DELETED] = [], _a));
|
|
53
|
+
return filteredEntities;
|
|
41
54
|
};
|
|
42
|
-
|
|
43
|
-
//#region Groups
|
|
44
55
|
exports.searchEntities = searchEntities;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return _table.GROUP_MANAGE_TABLE_TAB.PAST;
|
|
52
|
-
};
|
|
53
|
-
const searchGroups = _ref => {
|
|
54
|
-
let {
|
|
55
|
-
groups,
|
|
56
|
-
modelArray: groupsArray,
|
|
57
|
-
externalTerms,
|
|
58
|
-
canReadyAnyGlobally,
|
|
59
|
-
keywords,
|
|
60
|
-
dateString
|
|
61
|
-
} = _ref;
|
|
62
|
-
const keywordsList = getKeywordsList(keywords);
|
|
63
|
-
const visibleGroups = canReadyAnyGlobally ? groupsArray : (0, _groupRoles.groupsAsAnythingButLearner)(groups);
|
|
64
|
-
const filteredGroups = visibleGroups.reduce((acc, g) => {
|
|
65
|
-
// exclude if does not match keywords, if any
|
|
66
|
-
if (!isEntityMatchedByKeywords(g, keywordsList)) return acc;
|
|
67
|
-
const startDate = (0, _groupDates.getStartDate)(externalTerms, g);
|
|
68
|
-
const endDate = (0, _groupDates.getEndDate)(externalTerms, g);
|
|
69
|
-
// exclude if search dateString is not between group start and end dates
|
|
70
|
-
if (!!dateString && ((0, _date.getLocalMomentFromUtc)(dateString) < (0, _date.getLocalMomentFromUtc)(startDate) || (0, _date.getLocalMomentFromUtc)(dateString) > (0, _date.getLocalMomentFromUtc)(endDate))) {
|
|
71
|
-
return acc;
|
|
56
|
+
var getGroupTab = function (group, endDate) {
|
|
57
|
+
if (group.isDeleted) {
|
|
58
|
+
return table_1.GROUP_MANAGE_TABLE_TAB.DELETED;
|
|
59
|
+
}
|
|
60
|
+
else if (!!group.id && date_1.isNowBeforeDate(endDate)) {
|
|
61
|
+
return table_1.GROUP_MANAGE_TABLE_TAB.CURRENT;
|
|
72
62
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
63
|
+
return table_1.GROUP_MANAGE_TABLE_TAB.PAST;
|
|
64
|
+
};
|
|
65
|
+
var searchGroups = function (_a) {
|
|
66
|
+
var _b;
|
|
67
|
+
var groups = _a.groups, groupsArray = _a.modelArray, externalTerms = _a.externalTerms, canReadyAnyGlobally = _a.canReadyAnyGlobally, keywords = _a.keywords, dateString = _a.dateString;
|
|
68
|
+
var keywordsList = exports.getKeywordsList(keywords);
|
|
69
|
+
var visibleGroups = canReadyAnyGlobally ? groupsArray : groupRoles_1.groupsAsAnythingButLearner(groups);
|
|
70
|
+
var filteredGroups = visibleGroups.reduce(function (acc, g) {
|
|
71
|
+
var _a;
|
|
72
|
+
// exclude if does not match keywords, if any
|
|
73
|
+
if (!exports.isEntityMatchedByKeywords(g, keywordsList))
|
|
74
|
+
return acc;
|
|
75
|
+
var startDate = groupDates_1.getStartDate(externalTerms, g);
|
|
76
|
+
var endDate = groupDates_1.getEndDate(externalTerms, g);
|
|
77
|
+
// exclude if search dateString is not between group start and end dates
|
|
78
|
+
if (!!dateString &&
|
|
79
|
+
(date_1.getLocalMomentFromUtc(dateString) < date_1.getLocalMomentFromUtc(startDate) ||
|
|
80
|
+
date_1.getLocalMomentFromUtc(dateString) > date_1.getLocalMomentFromUtc(endDate))) {
|
|
81
|
+
return acc;
|
|
82
|
+
}
|
|
83
|
+
var tab = getGroupTab(g, endDate);
|
|
84
|
+
var tabArray = (_a = acc[tab]) !== null && _a !== void 0 ? _a : [];
|
|
85
|
+
tabArray.push(g);
|
|
86
|
+
acc[tab] = tabArray;
|
|
87
|
+
return acc;
|
|
88
|
+
}, (_b = {},
|
|
89
|
+
_b[table_1.GROUP_MANAGE_TABLE_TAB.CURRENT] = [],
|
|
90
|
+
_b[table_1.GROUP_MANAGE_TABLE_TAB.PAST] = [],
|
|
91
|
+
_b[table_1.GROUP_MANAGE_TABLE_TAB.DELETED] = [],
|
|
92
|
+
_b));
|
|
93
|
+
return filteredGroups;
|
|
85
94
|
};
|
|
86
|
-
|
|
87
|
-
//#endregion Groups
|
|
88
95
|
exports.searchGroups = searchGroups;
|
|
89
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGFibGUiLCJyZXF1aXJlIiwiX2RhdGUiLCJfZ3JvdXBEYXRlcyIsIl9ncm91cFJvbGVzIiwiZ2V0S2V5d29yZHNMaXN0Iiwia2V5d29yZHMiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJzcGxpdCIsImZpbHRlciIsImsiLCJleHBvcnRzIiwiaXNFbnRpdHlVc2VyTWF0Y2hlZEJ5S2V5d29yZCIsIm93bmVyIiwia2V5d29yZCIsImlkIiwiaW5jbHVkZXMiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsInRvU3RyaW5nIiwiZW1haWwiLCJ1aWQiLCJpc0VudGl0eU1hdGNoZWRCeUtleXdvcmQiLCJlbnRpdHkiLCJuYW1lIiwib3duZXJzIiwic29tZSIsImlzRW50aXR5TWF0Y2hlZEJ5S2V5d29yZHMiLCJrZXl3b3Jkc0xpc3QiLCJsZW5ndGgiLCJldmVyeSIsInNlYXJjaEVudGl0aWVzIiwiZW50aXR5QXJyYXkiLCJlbnRpdHlNYXRjaEZ1bmN0aW9uIiwicmVhZEFjdGl2aXR5IiwiY2FuUmVhZEFueUdsb2JhbGx5IiwiZmlsdGVyZWRFbnRpdGllcyIsInJlZHVjZSIsImFjYyIsImUiLCJhY3Rpdml0aWVzIiwidGFiIiwiaXNEZWxldGVkIiwiTUFOQUdFX1RBQkxFX1RBQiIsIkRFTEVURUQiLCJBVkFJTEFCTEUiLCJ0YWJBcnJheSIsInB1c2giLCJnZXRHcm91cFRhYiIsImdyb3VwIiwiZW5kRGF0ZSIsIkdST1VQX01BTkFHRV9UQUJMRV9UQUIiLCJpc05vd0JlZm9yZURhdGUiLCJDVVJSRU5UIiwiUEFTVCIsInNlYXJjaEdyb3VwcyIsIl9yZWYiLCJncm91cHMiLCJtb2RlbEFycmF5IiwiZ3JvdXBzQXJyYXkiLCJleHRlcm5hbFRlcm1zIiwiY2FuUmVhZHlBbnlHbG9iYWxseSIsImRhdGVTdHJpbmciLCJ2aXNpYmxlR3JvdXBzIiwiZ3JvdXBzQXNBbnl0aGluZ0J1dExlYXJuZXIiLCJmaWx0ZXJlZEdyb3VwcyIsImciLCJzdGFydERhdGUiLCJnZXRTdGFydERhdGUiLCJnZXRFbmREYXRlIiwiZ2V0TG9jYWxNb21lbnRGcm9tVXRjIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3NlYXJjaC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHUk9VUF9NQU5BR0VfVEFCTEVfVEFCLCBNQU5BR0VfVEFCTEVfVEFCIH0gZnJvbSAnLi4vY29uc3RhbnRzL3RhYmxlJ1xyXG5pbXBvcnQgeyBFbnRpdHlVc2VyLCBFeHRlcm5hbFRlcm0sIEdyb3VwLCBNb2RlbENvbGxlY3Rpb24gfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgZ2V0TG9jYWxNb21lbnRGcm9tVXRjLCBpc05vd0JlZm9yZURhdGUgfSBmcm9tICcuL2RhdGUnXHJcbmltcG9ydCB7IGdldEVuZERhdGUsIGdldFN0YXJ0RGF0ZSB9IGZyb20gJy4vZ3JvdXBEYXRlcydcclxuaW1wb3J0IHsgZ3JvdXBzQXNBbnl0aGluZ0J1dExlYXJuZXIgfSBmcm9tICcuL2dyb3VwUm9sZXMnXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0S2V5d29yZHNMaXN0ID0gKGtleXdvcmRzOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcclxuXHRpZiAoIWtleXdvcmRzKSByZXR1cm4gW11cclxuXHRyZXR1cm4ga2V5d29yZHNcclxuXHRcdC50cmltKClcclxuXHRcdC50b0xvd2VyQ2FzZSgpXHJcblx0XHQuc3BsaXQoJyAnKVxyXG5cdFx0LmZpbHRlcihrID0+ICEhaylcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzRW50aXR5VXNlck1hdGNoZWRCeUtleXdvcmQgPSAob3duZXI6IEVudGl0eVVzZXIsIGtleXdvcmQ6IHN0cmluZykgPT5cclxuXHRvd25lci5pZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGtleXdvcmQpIHx8XHJcblx0ISFvd25lci5maXJzdE5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoa2V5d29yZCkgfHxcclxuXHQhIW93bmVyLmxhc3ROYW1lPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoa2V5d29yZCkgfHxcclxuXHQhIW93bmVyLmVtYWlsPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoa2V5d29yZCkgfHxcclxuXHQhIW93bmVyLnVpZD8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGtleXdvcmQpXHJcblxyXG5leHBvcnQgY29uc3QgaXNFbnRpdHlNYXRjaGVkQnlLZXl3b3JkID0gKGVudGl0eTogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IG93bmVyczogRW50aXR5VXNlcltdIH0sIGtleXdvcmQ6IHN0cmluZykgPT5cclxuXHRlbnRpdHkuaWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGtleXdvcmQpIHx8XHJcblx0ZW50aXR5Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhrZXl3b3JkKSB8fFxyXG5cdGVudGl0eS5vd25lcnMuc29tZShvd25lciA9PiBpc0VudGl0eVVzZXJNYXRjaGVkQnlLZXl3b3JkKG93bmVyLCBrZXl3b3JkKSlcclxuXHJcbmV4cG9ydCBjb25zdCBpc0VudGl0eU1hdGNoZWRCeUtleXdvcmRzID0gKFxyXG5cdGVudGl0eTogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IG93bmVyczogRW50aXR5VXNlcltdIH0sXHJcblx0a2V5d29yZHNMaXN0OiBzdHJpbmdbXVxyXG4pID0+IGtleXdvcmRzTGlzdC5sZW5ndGggPT09IDAgfHwga2V5d29yZHNMaXN0LmV2ZXJ5KGsgPT4gaXNFbnRpdHlNYXRjaGVkQnlLZXl3b3JkKGVudGl0eSwgaykpXHJcblxyXG5leHBvcnQgY29uc3Qgc2VhcmNoRW50aXRpZXMgPSA8VCBleHRlbmRzIHsgaXNEZWxldGVkOiBib29sZWFuOyBhY3Rpdml0aWVzOiBzdHJpbmdbXSB9PihcclxuXHRlbnRpdHlBcnJheTogVFtdLFxyXG5cdGVudGl0eU1hdGNoRnVuY3Rpb246IChlbnRpdHk6IFQsIGtleXdvcmRzTGlzdDogc3RyaW5nW10pID0+IGJvb2xlYW4sXHJcblx0cmVhZEFjdGl2aXR5OiBzdHJpbmcsXHJcblx0Y2FuUmVhZEFueUdsb2JhbGx5PzogYm9vbGVhbixcclxuXHRrZXl3b3Jkcz86IHN0cmluZ1xyXG4pID0+IHtcclxuXHRjb25zdCBrZXl3b3Jkc0xpc3QgPSBnZXRLZXl3b3Jkc0xpc3Qoa2V5d29yZHMpXHJcblx0Y29uc3QgZmlsdGVyZWRFbnRpdGllcyA9IGVudGl0eUFycmF5LnJlZHVjZTxSZWNvcmQ8bnVtYmVyLCBUW10+PihcclxuXHRcdChhY2MsIGUpID0+IHtcclxuXHRcdFx0Ly8gZXhjbHVkZSBpZiBjYW5ub3QgcmVhZCBhbnkgZW50aXR5IGFuZCBkb2VzIG5vdCBoYXZlIHRoZSByZWFkIGFjdGl2aXR5XHJcblx0XHRcdGlmICghY2FuUmVhZEFueUdsb2JhbGx5ICYmICFlLmFjdGl2aXRpZXMuaW5jbHVkZXMocmVhZEFjdGl2aXR5KSkgcmV0dXJuIGFjY1xyXG5cdFx0XHQvLyBleGNsdWRlIGlmIGRvZXMgbm90IG1hdGNoLCBpZiBhbnlcclxuXHRcdFx0aWYgKCFlbnRpdHlNYXRjaEZ1bmN0aW9uKGUsIGtleXdvcmRzTGlzdCkpIHJldHVybiBhY2NcclxuXHRcdFx0Ly8gYWRkIGVudGl0eSB0byB0aGUgY29ycmVzcG9uZGluZyB0YWIgZmlsdGVyZWQgYXJyYXlcclxuXHRcdFx0Y29uc3QgdGFiID0gZS5pc0RlbGV0ZWQgPyBNQU5BR0VfVEFCTEVfVEFCLkRFTEVURUQgOiBNQU5BR0VfVEFCTEVfVEFCLkFWQUlMQUJMRVxyXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxyXG5cdFx0XHRjb25zdCB0YWJBcnJheTogVFtdID0gYWNjW3RhYl0gPz8gW11cclxuXHRcdFx0dGFiQXJyYXkucHVzaChlKVxyXG5cdFx0XHRhY2NbdGFiXSA9IHRhYkFycmF5XHJcblx0XHRcdHJldHVybiBhY2NcclxuXHRcdH0sXHJcblx0XHR7IFtNQU5BR0VfVEFCTEVfVEFCLkFWQUlMQUJMRV06IFtdLCBbTUFOQUdFX1RBQkxFX1RBQi5ERUxFVEVEXTogW10gfVxyXG5cdClcclxuXHRyZXR1cm4gZmlsdGVyZWRFbnRpdGllc1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaE1vZGVsQXJyYXlQYXJhbXM8VE1vZGVsPiB7XHJcblx0bW9kZWxBcnJheTogVE1vZGVsW11cclxuXHRjYW5SZWFkeUFueUdsb2JhbGx5PzogYm9vbGVhblxyXG5cdGtleXdvcmRzPzogc3RyaW5nXHJcbn1cclxuXHJcbi8vI3JlZ2lvbiBHcm91cHNcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoR3JvdXBzUGFyYW1zIGV4dGVuZHMgU2VhcmNoTW9kZWxBcnJheVBhcmFtczxHcm91cD4ge1xyXG5cdGdyb3VwczogTW9kZWxDb2xsZWN0aW9uPEdyb3VwPlxyXG5cdGV4dGVybmFsVGVybXM6IE1vZGVsQ29sbGVjdGlvbjxFeHRlcm5hbFRlcm0+XHJcblx0ZGF0ZVN0cmluZz86IHN0cmluZ1xyXG59XHJcblxyXG5jb25zdCBnZXRHcm91cFRhYiA9IChncm91cDogR3JvdXAsIGVuZERhdGU6IHN0cmluZykgPT4ge1xyXG5cdGlmIChncm91cC5pc0RlbGV0ZWQpIHtcclxuXHRcdHJldHVybiBHUk9VUF9NQU5BR0VfVEFCTEVfVEFCLkRFTEVURURcclxuXHR9IGVsc2UgaWYgKCEhZ3JvdXAuaWQgJiYgaXNOb3dCZWZvcmVEYXRlKGVuZERhdGUpKSB7XHJcblx0XHRyZXR1cm4gR1JPVVBfTUFOQUdFX1RBQkxFX1RBQi5DVVJSRU5UXHJcblx0fVxyXG5cdHJldHVybiBHUk9VUF9NQU5BR0VfVEFCTEVfVEFCLlBBU1RcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNlYXJjaEdyb3VwcyA9ICh7XHJcblx0Z3JvdXBzLFxyXG5cdG1vZGVsQXJyYXk6IGdyb3Vwc0FycmF5LFxyXG5cdGV4dGVybmFsVGVybXMsXHJcblx0Y2FuUmVhZHlBbnlHbG9iYWxseSxcclxuXHRrZXl3b3JkcyxcclxuXHRkYXRlU3RyaW5nXHJcbn06IFNlYXJjaEdyb3Vwc1BhcmFtcykgPT4ge1xyXG5cdGNvbnN0IGtleXdvcmRzTGlzdCA9IGdldEtleXdvcmRzTGlzdChrZXl3b3JkcylcclxuXHRjb25zdCB2aXNpYmxlR3JvdXBzID0gY2FuUmVhZHlBbnlHbG9iYWxseSA/IGdyb3Vwc0FycmF5IDogZ3JvdXBzQXNBbnl0aGluZ0J1dExlYXJuZXIoZ3JvdXBzKVxyXG5cdGNvbnN0IGZpbHRlcmVkR3JvdXBzID0gdmlzaWJsZUdyb3Vwcy5yZWR1Y2U8UmVjb3JkPG51bWJlciwgR3JvdXBbXT4+KFxyXG5cdFx0KGFjYywgZykgPT4ge1xyXG5cdFx0XHQvLyBleGNsdWRlIGlmIGRvZXMgbm90IG1hdGNoIGtleXdvcmRzLCBpZiBhbnlcclxuXHRcdFx0aWYgKCFpc0VudGl0eU1hdGNoZWRCeUtleXdvcmRzKGcsIGtleXdvcmRzTGlzdCkpIHJldHVybiBhY2NcclxuXHRcdFx0Y29uc3Qgc3RhcnREYXRlID0gZ2V0U3RhcnREYXRlKGV4dGVybmFsVGVybXMsIGcpXHJcblx0XHRcdGNvbnN0IGVuZERhdGUgPSBnZXRFbmREYXRlKGV4dGVybmFsVGVybXMsIGcpXHJcblx0XHRcdC8vIGV4Y2x1ZGUgaWYgc2VhcmNoIGRhdGVTdHJpbmcgaXMgbm90IGJldHdlZW4gZ3JvdXAgc3RhcnQgYW5kIGVuZCBkYXRlc1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0ISFkYXRlU3RyaW5nICYmXHJcblx0XHRcdFx0KGdldExvY2FsTW9tZW50RnJvbVV0YyhkYXRlU3RyaW5nKSA8IGdldExvY2FsTW9tZW50RnJvbVV0YyhzdGFydERhdGUpIHx8XHJcblx0XHRcdFx0XHRnZXRMb2NhbE1vbWVudEZyb21VdGMoZGF0ZVN0cmluZykgPiBnZXRMb2NhbE1vbWVudEZyb21VdGMoZW5kRGF0ZSkpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHJldHVybiBhY2NcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCB0YWIgPSBnZXRHcm91cFRhYihnLCBlbmREYXRlKVxyXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxyXG5cdFx0XHRjb25zdCB0YWJBcnJheTogR3JvdXBbXSA9IGFjY1t0YWJdID8/IFtdXHJcblx0XHRcdHRhYkFycmF5LnB1c2goZylcclxuXHRcdFx0YWNjW3RhYl0gPSB0YWJBcnJheVxyXG5cdFx0XHRyZXR1cm4gYWNjXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRbR1JPVVBfTUFOQUdFX1RBQkxFX1RBQi5DVVJSRU5UXTogW10sXHJcblx0XHRcdFtHUk9VUF9NQU5BR0VfVEFCTEVfVEFCLlBBU1RdOiBbXSxcclxuXHRcdFx0W0dST1VQX01BTkFHRV9UQUJMRV9UQUIuREVMRVRFRF06IFtdXHJcblx0XHR9XHJcblx0KVxyXG5cdHJldHVybiBmaWx0ZXJlZEdyb3Vwc1xyXG59XHJcblxyXG4vLyNlbmRyZWdpb24gR3JvdXBzXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsS0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsV0FBQSxHQUFBSCxPQUFBO0FBRU8sTUFBTUksZUFBZSxHQUFJQyxRQUE0QixJQUFLO0VBQ2hFLElBQUksQ0FBQ0EsUUFBUSxFQUFFLE9BQU8sRUFBRTtFQUN4QixPQUFPQSxRQUFRLENBQ2JDLElBQUksQ0FBQyxDQUFDLENBQ05DLFdBQVcsQ0FBQyxDQUFDLENBQ2JDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FDVkMsTUFBTSxDQUFDQyxDQUFDLElBQUksQ0FBQyxDQUFDQSxDQUFDLENBQUM7QUFDbkIsQ0FBQztBQUFBQyxPQUFBLENBQUFQLGVBQUEsR0FBQUEsZUFBQTtBQUVNLE1BQU1RLDRCQUE0QixHQUFHQSxDQUFDQyxLQUFpQixFQUFFQyxPQUFlLEtBQzlFRCxLQUFLLENBQUNFLEVBQUUsQ0FBQ1Is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
|
|
96
|
+
//#endregion Groups
|